aeb379de508090e0b2dfc76198ab5a61c7dd4e07
[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 Wed May 12 00:58:20 EET DST 1999 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.com)
25
26 cat >/tmp/c1$$ <<EOF
27 ARGGGHHHH!!!!!
28
29 SCO csh still thinks true is false.  Write to SCO today and tell them that next
30 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
31
32 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
33 we'd have to do is go in and swap the && and || tokens, wherever they are.)
34
35 [End of diatribe. We now return you to your regularly scheduled programming...]
36 EOF
37 cat >/tmp/c2$$ <<EOF
38
39 OOPS!  You naughty creature!  You didn't run Configure with sh!
40 I will attempt to remedy the situation by running sh for you...
41 EOF
42
43 true || cat /tmp/c1$$ /tmp/c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat /tmp/c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f /tmp/c1$$ /tmp/c2$$
49
50 : compute my invocation name
51 me=$0
52 case "$0" in
53 */*)
54         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
55         test "$me" || me=$0
56         ;;
57 esac
58
59 : Proper separator for the PATH environment variable
60 p_=:
61 : On OS/2 this directory should exist if this is not floppy only system :-]
62 if test -d c:/. ; then
63     if test -n "$OS2_SHELL"; then
64                 p_=\;
65                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
66                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
67         elif test -n "$DJGPP"; then
68                 p_=\;
69         fi
70 fi
71
72 : Proper PATH setting
73 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
74 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
75 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
76 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
77 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
78 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
79 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
80 paths="$paths /sbin /usr/sbin /usr/libexec"
81
82 for p in $paths
83 do
84         case "$p_$PATH$p_" in
85         *$p_$p$p_*) ;;
86         *) test -d $p && PATH=$PATH$p_$p ;;
87         esac
88 done
89
90 PATH=.$p_$PATH
91 export PATH
92
93 : shall we be using ksh?
94 inksh=''
95 needksh=''
96 avoidksh=''
97 newsh=/bin/ksh
98 changesh=''
99 if (PATH=.; alias -x) >/dev/null 2>&1; then
100                 inksh=true
101 fi
102 if test -f /hp-ux -a -f /bin/ksh; then
103         needksh='to avoid sh bug in "here document" expansion'
104 fi
105 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
106         if test X`/usr/bin/uname -v` = X4; then
107                 avoidksh="to avoid AIX 4's /bin/sh"
108                 newsh=/usr/bin/bsh
109         fi
110 fi
111 if test -f /osf_boot -a -f /usr/sbin/setld; then
112         if test X`/usr/bin/uname -s` = XOSF1; then
113                 avoidksh="to avoid Digital UNIX' ksh"
114                 newsh=/bin/sh
115                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
116         fi
117 fi
118 case "$inksh/$needksh" in
119 /[a-z]*)
120                 ENV=''
121                 changesh=true
122                 reason="$needksh"
123         ;;
124 esac
125 case "$inksh/$avoidksh" in
126 true/[a-z]*)
127         changesh=true
128         reason="$avoidksh"
129         ;;
130 esac
131 case "$inksh/$needksh-$avoidksh-" in
132 true/--)
133                 cat <<EOM
134 (I see you are using the Korn shell.  Some ksh's blow up on $me,
135 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
136 EOM
137         ;;
138 esac
139 case "$changesh" in
140 true)
141         echo "(Feeding myself to $newsh $reason.)"
142         case "$0" in
143         Configure|*/Configure) exec $newsh $0 "$@";;
144         *) exec $newsh Configure "$@";;
145         esac
146         ;;
147 esac
148
149 : if needed set CDPATH to a harmless value that is not chatty
150 : avoid bash 2.02 problems with empty CDPATH.
151 case "$CDPATH" in
152 '')     ;;
153 *)      case "$SHELL" in
154         *bash*) CDPATH='.' ;;
155         *)              CDPATH='' ;;
156         esac
157         ;;
158 esac
159 : Configure runs within the UU subdirectory
160 test -d UU || mkdir UU
161 cd UU && rm -f ./*
162
163 ccsymbols=''
164 cppccsymbols=''
165 cppsymbols=''
166 dynamic_ext=''
167 extensions=''
168 known_extensions=''
169 nonxs_ext=''
170 static_ext=''
171 useopcode=''
172 useposix=''
173 d_bsd=''
174 d_eunice=''
175 d_xenix=''
176 eunicefix=''
177 Mcc=''
178 ar=''
179 awk=''
180 bash=''
181 bison=''
182 byacc=''
183 cat=''
184 chgrp=''
185 chmod=''
186 chown=''
187 comm=''
188 compress=''
189 cp=''
190 cpio=''
191 cpp=''
192 csh=''
193 date=''
194 echo=''
195 egrep=''
196 emacs=''
197 expr=''
198 find=''
199 flex=''
200 grep=''
201 gzip=''
202 inews=''
203 ksh=''
204 less=''
205 line=''
206 lint=''
207 ln=''
208 lp=''
209 lpr=''
210 ls=''
211 mail=''
212 mailx=''
213 make=''
214 mkdir=''
215 more=''
216 mv=''
217 nm=''
218 nroff=''
219 perl=''
220 pg=''
221 pmake=''
222 pr=''
223 rm=''
224 rmail=''
225 sed=''
226 sendmail=''
227 shar=''
228 sleep=''
229 smail=''
230 sort=''
231 submit=''
232 tail=''
233 tar=''
234 tbl=''
235 tee=''
236 test=''
237 touch=''
238 tr=''
239 troff=''
240 uname=''
241 uniq=''
242 uuname=''
243 vi=''
244 zcat=''
245 zip=''
246 full_ar=''
247 full_sed=''
248 libswanted=''
249 hint=''
250 myuname=''
251 osname=''
252 osvers=''
253 Author=''
254 Date=''
255 Header=''
256 Id=''
257 Locker=''
258 Log=''
259 RCSfile=''
260 Revision=''
261 Source=''
262 State=''
263 _a=''
264 _exe=''
265 _o=''
266 archobjs=''
267 exe_ext=''
268 firstmakefile=''
269 lib_ext=''
270 obj_ext=''
271 path_sep=''
272 afs=''
273 alignbytes=''
274 ansi2knr=''
275 archlib=''
276 archlibexp=''
277 d_archlib=''
278 installarchlib=''
279 archname=''
280 myarchname=''
281 baserev=''
282 bin=''
283 binexp=''
284 installbin=''
285 byteorder=''
286 cc=''
287 gccversion=''
288 ccflags=''
289 cppflags=''
290 ldflags=''
291 lkflags=''
292 locincpth=''
293 optimize=''
294 cf_email=''
295 cf_by=''
296 cf_time=''
297 contains=''
298 cpp_stuff=''
299 cpplast=''
300 cppminus=''
301 cpprun=''
302 cppstdin=''
303 crosscompile=''
304 d_access=''
305 d_accessx=''
306 d_alarm=''
307 d_attribut=''
308 d_bcmp=''
309 d_bcopy=''
310 d_bzero=''
311 d_casti32=''
312 castflags=''
313 d_castneg=''
314 d_chown=''
315 d_chroot=''
316 d_chsize=''
317 d_closedir=''
318 d_void_closedir=''
319 d_const=''
320 cryptlib=''
321 d_crypt=''
322 d_csh=''
323 full_csh=''
324 d_cuserid=''
325 d_dbl_dig=''
326 d_difftime=''
327 d_dlerror=''
328 d_dlopen=''
329 d_dlsymun=''
330 d_dosuid=''
331 d_suidsafe=''
332 d_drand48proto=''
333 d_dup2=''
334 d_eaccess=''
335 d_endgrent=''
336 d_endhent=''
337 d_endnent=''
338 d_endpent=''
339 d_endpwent=''
340 d_endsent=''
341 d_fchmod=''
342 d_fchown=''
343 d_fcntl=''
344 d_fd_macros=''
345 d_fd_set=''
346 d_fds_bits=''
347 d_fgetpos=''
348 d_flexfnam=''
349 d_flock=''
350 d_fork=''
351 d_fseeko=''
352 d_fsetpos=''
353 d_ftello=''
354 d_ftime=''
355 d_gettimeod=''
356 d_Gconvert=''
357 d_getgrent=''
358 d_getgrps=''
359 d_gethbyaddr=''
360 d_gethbyname=''
361 d_gethent=''
362 aphostname=''
363 d_gethname=''
364 d_phostname=''
365 d_uname=''
366 d_gethostprotos=''
367 d_getlogin=''
368 d_getmntent=''
369 d_getnbyaddr=''
370 d_getnbyname=''
371 d_getnent=''
372 d_getnetprotos=''
373 d_getpent=''
374 d_getpgid=''
375 d_getpgrp2=''
376 d_bsdgetpgrp=''
377 d_getpgrp=''
378 d_getppid=''
379 d_getprior=''
380 d_getpbyname=''
381 d_getpbynumber=''
382 d_getprotoprotos=''
383 d_getpwent=''
384 d_getsent=''
385 d_getservprotos=''
386 d_getsbyname=''
387 d_getsbyport=''
388 d_gnulibc=''
389 d_hasmntopt=''
390 d_htonl=''
391 d_inetaton=''
392 d_isascii=''
393 d_killpg=''
394 d_lchown=''
395 d_link=''
396 d_locconv=''
397 d_lockf=''
398 d_longdbl=''
399 longdblsize=''
400 d_longlong=''
401 longlongsize=''
402 d_lstat=''
403 d_madvise=''
404 d_mblen=''
405 d_mbstowcs=''
406 d_mbtowc=''
407 d_memcmp=''
408 d_memcpy=''
409 d_memmove=''
410 d_memset=''
411 d_mkdir=''
412 d_mkfifo=''
413 d_mktime=''
414 d_mmap=''
415 mmaptype=''
416 d_mprotect=''
417 d_msg=''
418 d_msgctl=''
419 d_msgget=''
420 d_msgrcv=''
421 d_msgsnd=''
422 d_msync=''
423 d_munmap=''
424 d_nice=''
425 d_open3=''
426 d_fpathconf=''
427 d_pathconf=''
428 d_pause=''
429 d_pipe=''
430 d_poll=''
431 d_portable=''
432 d_old_pthread_create_joinable=''
433 old_pthread_create_joinable=''
434 d_pthread_yield=''
435 d_sched_yield=''
436 sched_yield=''
437 d_readdir=''
438 d_rewinddir=''
439 d_seekdir=''
440 d_telldir=''
441 d_readlink=''
442 d_readv=''
443 d_rename=''
444 d_rmdir=''
445 d_safebcpy=''
446 d_safemcpy=''
447 d_sanemcmp=''
448 d_select=''
449 d_sem=''
450 d_semctl=''
451 d_semget=''
452 d_semop=''
453 d_setegid=''
454 d_seteuid=''
455 d_setgrent=''
456 d_setgrps=''
457 d_sethent=''
458 d_setlinebuf=''
459 d_setlocale=''
460 d_setnent=''
461 d_setpent=''
462 d_setpgid=''
463 d_setpgrp2=''
464 d_bsdsetpgrp=''
465 d_setpgrp=''
466 d_setprior=''
467 d_setpwent=''
468 d_setregid=''
469 d_setresgid=''
470 d_setresuid=''
471 d_setreuid=''
472 d_setrgid=''
473 d_setruid=''
474 d_setsent=''
475 d_setsid=''
476 d_setvbuf=''
477 d_sfio=''
478 usesfio=''
479 d_shm=''
480 d_shmat=''
481 d_shmatprototype=''
482 shmattype=''
483 d_shmctl=''
484 d_shmdt=''
485 d_shmget=''
486 d_sigaction=''
487 d_sigsetjmp=''
488 d_cmsghdr_s=''
489 d_msg_ctrunc=''
490 d_msg_dontroute=''
491 d_msg_oob=''
492 d_msg_peek=''
493 d_msg_proxy=''
494 d_msghdr_s=''
495 d_oldsock=''
496 d_recvmsg=''
497 d_scm_rights=''
498 d_sendmsg=''
499 d_socket=''
500 d_sockpair=''
501 sockethdr=''
502 socketlib=''
503 d_statblks=''
504 d_fstatfs=''
505 d_statfs=''
506 d_statfsflags=''
507 d_fstatvfs=''
508 d_statvfs=''
509 d_stdio_cnt_lval=''
510 d_stdio_ptr_lval=''
511 d_stdiobase=''
512 d_stdstdio=''
513 stdio_base=''
514 stdio_bufsiz=''
515 stdio_cnt=''
516 stdio_filbuf=''
517 stdio_ptr=''
518 d_index=''
519 d_strchr=''
520 d_strcoll=''
521 d_strctcpy=''
522 d_strerrm=''
523 d_strerror=''
524 d_sysernlst=''
525 d_syserrlst=''
526 d_strtod=''
527 d_strtol=''
528 d_strtoul=''
529 d_strxfrm=''
530 d_symlink=''
531 d_syscall=''
532 d_sysconf=''
533 d_system=''
534 d_tcgetpgrp=''
535 d_tcsetpgrp=''
536 d_telldirproto=''
537 d_time=''
538 timetype=''
539 clocktype=''
540 d_times=''
541 d_truncate=''
542 d_tzname=''
543 d_umask=''
544 d_semctl_semid_ds=''
545 d_semctl_semun=''
546 d_union_semun=''
547 d_vfork=''
548 usevfork=''
549 d_voidsig=''
550 signal_t=''
551 d_volatile=''
552 d_charvspr=''
553 d_vprintf=''
554 d_wait4=''
555 d_waitpid=''
556 d_wcstombs=''
557 d_wctomb=''
558 d_writev=''
559 d_dbmclose64=''
560 d_dbminit64=''
561 d_delete64=''
562 d_fetch64=''
563 d_firstkey64=''
564 d_nextkey64=''
565 d_store64=''
566 dlext=''
567 cccdlflags=''
568 ccdlflags=''
569 dlsrc=''
570 ld=''
571 lddlflags=''
572 usedl=''
573 doublesize=''
574 ebcdic=''
575 fpostype=''
576 gidtype=''
577 groupstype=''
578 h_fcntl=''
579 h_sysfile=''
580 i_arpainet=''
581 db_hashtype=''
582 db_prefixtype=''
583 i_db=''
584 i_dbm=''
585 i_rpcsvcdbm=''
586 d_dirnamlen=''
587 direntrytype=''
588 i_dirent=''
589 i_dld=''
590 i_dlfcn=''
591 i_fcntl=''
592 i_float=''
593 i_gdbm=''
594 d_grpasswd=''
595 i_grp=''
596 d_int64t=''
597 i_inttypes=''
598 i_limits=''
599 i_locale=''
600 i_machcthr=''
601 i_malloc=''
602 i_math=''
603 i_memory=''
604 i_mntent=''
605 i_ndbm=''
606 i_netdb=''
607 i_neterrno=''
608 i_netinettcp=''
609 i_niin=''
610 i_sysin=''
611 i_poll=''
612 i_pthread=''
613 d_pwage=''
614 d_pwchange=''
615 d_pwclass=''
616 d_pwcomment=''
617 d_pwexpire=''
618 d_pwgecos=''
619 d_pwpasswd=''
620 d_pwquota=''
621 i_pwd=''
622 i_sfio=''
623 i_stddef=''
624 i_stdlib=''
625 i_string=''
626 strings=''
627 i_sysaccess=''
628 i_sysdir=''
629 i_sysfile=''
630 d_voidtty=''
631 i_bsdioctl=''
632 i_sysfilio=''
633 i_sysioctl=''
634 i_syssockio=''
635 i_sysmman=''
636 i_sysmount=''
637 i_sysndir=''
638 i_sysparam=''
639 i_sysresrc=''
640 i_syssecrt=''
641 i_sysselct=''
642 i_sysstat=''
643 i_sysstatvfs=''
644 i_systimes=''
645 i_systypes=''
646 d_iovec_s=''
647 i_sysuio=''
648 i_sysun=''
649 i_syswait=''
650 i_sgtty=''
651 i_termio=''
652 i_termios=''
653 i_systime=''
654 i_systimek=''
655 i_time=''
656 timeincl=''
657 i_unistd=''
658 i_utime=''
659 i_values=''
660 i_stdarg=''
661 i_varargs=''
662 i_varhdr=''
663 i_vfork=''
664 installusrbinperl=''
665 intsize=''
666 longsize=''
667 shortsize=''
668 d_dirent64_s=''
669 d_flock64_s=''
670 d_fstat64=''
671 d_ftruncate64=''
672 d_ino64_t=''
673 d_llseek=''
674 d_lockf64=''
675 d_lseek64=''
676 d_lstat64=''
677 d_off64_t=''
678 d_offset_t=''
679 d_open64=''
680 d_opendir64=''
681 d_readdir64=''
682 d_seekdir64=''
683 d_stat64=''
684 d_telldir64=''
685 d_truncate64=''
686 libc=''
687 libperl=''
688 shrpenv=''
689 useshrplib=''
690 glibpth=''
691 libpth=''
692 loclibpth=''
693 plibpth=''
694 xlibpth=''
695 ignore_versioned_solibs=''
696 libs=''
697 lns=''
698 lseeksize=''
699 lseektype=''
700 make_set_make=''
701 d_mymalloc=''
702 freetype=''
703 mallocobj=''
704 mallocsrc=''
705 malloctype=''
706 usemymalloc=''
707 installman1dir=''
708 man1dir=''
709 man1direxp=''
710 man1ext=''
711 installman3dir=''
712 man3dir=''
713 man3direxp=''
714 man3ext=''
715 huge=''
716 large=''
717 medium=''
718 models=''
719 small=''
720 split=''
721 modetype=''
722 multiarch=''
723 mydomain=''
724 myhostname=''
725 phostname=''
726 c=''
727 n=''
728 d_eofnblk=''
729 eagain=''
730 o_nonblock=''
731 rd_nodata=''
732 netdb_hlen_type=''
733 netdb_host_type=''
734 netdb_name_type=''
735 netdb_net_type=''
736 groupcat=''
737 hostcat=''
738 passcat=''
739 orderlib=''
740 ranlib=''
741 package=''
742 spackage=''
743 pager=''
744 apiversion=''
745 patchlevel=''
746 subversion=''
747 version=''
748 perladmin=''
749 perlpath=''
750 pidtype=''
751 prefix=''
752 prefixexp=''
753 installprivlib=''
754 privlib=''
755 privlibexp=''
756 prototype=''
757 ptrsize=''
758 drand01=''
759 randbits=''
760 randfunc=''
761 randseedtype=''
762 seedfunc=''
763 installscript=''
764 scriptdir=''
765 scriptdirexp=''
766 selectminbits=''
767 selecttype=''
768 sh=''
769 sig_count=''
770 sig_name=''
771 sig_name_init=''
772 sig_num=''
773 sig_num_init=''
774 installsitearch=''
775 sitearch=''
776 sitearchexp=''
777 installsitelib=''
778 sitelib=''
779 sitelibexp=''
780 sizetype=''
781 so=''
782 sharpbang=''
783 shsharp=''
784 spitshell=''
785 src=''
786 ssizetype=''
787 startperl=''
788 startsh=''
789 stdchar=''
790 d_fgetpos64=''
791 d_fopen64=''
792 d_freopen64=''
793 d_fseek64=''
794 d_fseeko64=''
795 d_fsetpos64=''
796 d_ftell64=''
797 d_ftello64=''
798 d_tmpfile64=''
799 sysman=''
800 trnl=''
801 uidtype=''
802 archname64=''
803 use64bits=''
804 usemultiplicity=''
805 nm_opt=''
806 nm_so_opt=''
807 runnm=''
808 usenm=''
809 useperlio=''
810 d_oldpthreads=''
811 usethreads=''
812 incpath=''
813 mips=''
814 mips_type=''
815 usrinc=''
816 defvoidused=''
817 voidflags=''
818 CONFIG=''
819
820 define='define'
821 undef='undef'
822 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
823 rmlist=''
824
825 : We must find out about Eunice early
826 eunicefix=':'
827 if test -f /etc/unixtovms; then
828         eunicefix=/etc/unixtovms
829 fi
830 if test -f /etc/unixtovms.exe; then
831         eunicefix=/etc/unixtovms.exe
832 fi
833
834 i_whoami=''
835 : Possible local include directories to search.
836 : Set locincpth to "" in a hint file to defeat local include searches.
837 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
838 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
839 :
840 : no include file wanted by default
841 inclwanted=''
842
843 : list of known cpp symbols, sorted alphabetically
844 al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
845 al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
846 al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
847 al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
848 al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
849 al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
850 al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
851 al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
852 al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
853 al="$al VMS Xenix286"
854 al="$al _AIX _AIX32 _AIX370 _AIX41 _AM29000 _COFF _CRAY _CX_UX _EPI"
855 al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET _POWER"
856 al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
857 al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
858 al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
859 al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
860 al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
861 al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
862 al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
863 al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
864 al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
865 al="$al __SVR4_2__ __UMAXV__"
866 al="$al ____386BSD____ __alpha __alpha__ __amiga"
867 al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
868 al="$al __host_mips__"
869 al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
870 al="$al __hp9000s500 __hp9000s700 __hp9000s800"
871 al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
872 al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
873 al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
874 al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
875 al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
876 al="$al __mc88100 __mc88100__ __mips __mips__"
877 al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
878 al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
879 al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
880 al="$al _host_mips _mips _unix"
881 al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
882 al="$al apollo ardent att386 att3b"
883 al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
884 al="$al cadmus clipper concurrent convex cray ctix"
885 al="$al dmert encore gcos gcx gimpel gould"
886 al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
887 al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
888 al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
889 al="$al i186 i286 i386 i486 i8086"
890 al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
891 al="$al ksr1 linux luna luna88k m68k m88100 m88k"
892 al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
893 al="$al mc68040 mc68060 mc68k mc68k32 mc700"
894 al="$al mc88000 mc88100 merlin mert mips mvs n16"
895 al="$al ncl_el ncl_mr"
896 al="$al news1500 news1700 news1800 news1900 news3700"
897 al="$al news700 news800 news900 ns16000 ns32000"
898 al="$al ns32016 ns32332 ns32k nsc32000 os osf"
899 al="$al parisc pc532 pdp11 plexus posix pyr"
900 al="$al riscix riscos scs sequent sgi sinix sony sony_news"
901 al="$al sonyrisc sparc sparclite spectrum stardent stratos"
902 al="$al sun sun3 sun386 svr4 sysV68 sysV88"
903 al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
904 al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
905 al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
906 al="$al xenix z8000"
907
908 : Trailing extension.  Override this in a hint file, if needed.
909 _exe=''
910 : Extra object files, if any, needed on this platform.
911 archobjs=''
912 groupstype=''
913 : change the next line if compiling for Xenix/286 on Xenix/386
914 xlibpth='/usr/lib/386 /lib/386'
915
916 : Possible local library directories to search.
917 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
918 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
919
920 : general looking path for locating libraries
921 glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
922 glibpth="$glibpth /lib /usr/lib $xlibpth"
923 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
924 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
925
926 : Private path used by Configure to find libraries.  Its value
927 : is prepended to libpth. This variable takes care of special
928 : machines, like the mips.  Usually, it should be empty.
929 plibpth=''
930
931 : default library list
932 libswanted=''
933 : some systems want to use only the non-versioned libso:s
934 ignore_versioned_solibs=''
935 : full support for void wanted by default
936 defvoidused=15
937
938 : set useposix=false in your hint file to disable the POSIX extension.
939 useposix=true
940 : set useopcode=false in your hint file to disable the Opcode extension.
941 useopcode=true
942 : set usemultiplicity on the Configure command line to enable multiplicity.
943 : set usethreads on the Configure command line to enable threads.
944 : List of libraries we want.
945 : If anyone needs -lnet, put it in a hint file.
946 libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
947 libswanted="$libswanted dld ld sun m rt c cposix posix"
948 libswanted="$libswanted ndir dir crypt"
949 libswanted="$libswanted ucb bsd BSD PW x"
950 : We probably want to search /usr/shlib before most other libraries.
951 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
952 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
953 glibpth="/usr/shlib $glibpth"
954 : Do not use vfork unless overridden by a hint file.
955 usevfork=false
956
957 : Find the basic shell for Bourne shell scripts
958 case "$sh" in
959 '')
960         case "$SYSTYPE" in
961         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
962         *) xxx='/bin/sh';;
963         esac
964         if test -f "$xxx"; then
965                 sh="$xxx"
966         else
967                 : Build up a list and do a single loop so we can 'break' out.
968                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
969                 for xxx in sh bash ksh pdksh ash; do
970                         for p in $pth; do
971                                 try="$try ${p}/${xxx}"
972                         done
973                 done
974                 for xxx in $try; do
975                         if test -f "$xxx"; then
976                                 sh="$xxx";
977                                 break
978                         elif test -f "$xxx.exe"; then
979                                 sh="$xxx";
980                                 break
981                         fi
982                 done
983         fi
984         ;;
985 esac
986
987 case "$sh" in
988 '')     cat <<EOM >&2
989 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
990
991 Usually it's in /bin/sh.  How did you even get this far?
992 Please contact me (Perl Maintainers) at perlbug@perl.com and 
993 we'll try to straighten this all out.
994 EOM
995         exit 1
996         ;;
997 esac
998
999 : see if sh knows # comments
1000 if `$sh -c '#' >/dev/null 2>&1`; then
1001         shsharp=true
1002         spitshell=cat
1003         xcat=/bin/cat
1004         test -f $xcat || xcat=/usr/bin/cat
1005         echo "#!$xcat" >try
1006         $eunicefix try
1007         chmod +x try
1008         ./try > today
1009         if test -s today; then
1010                 sharpbang='#!'
1011         else
1012                 echo "#! $xcat" > try
1013                 $eunicefix try
1014                 chmod +x try
1015                 ./try > today
1016                 if test -s today; then
1017                         sharpbang='#! '
1018                 else
1019                         sharpbang=': use '
1020                 fi
1021         fi
1022 else
1023         echo " "
1024         echo "Your $sh doesn't grok # comments--I will strip them later on."
1025         shsharp=false
1026         cd ..
1027         echo "exec grep -v '^[  ]*#'" >spitshell
1028         chmod +x spitshell
1029         $eunicefix spitshell
1030         spitshell=`pwd`/spitshell
1031         cd UU
1032         echo "I presume that if # doesn't work, #! won't work either!"
1033         sharpbang=': use '
1034 fi
1035 rm -f try today
1036
1037 : figure out how to guarantee sh startup
1038 case "$startsh" in
1039 '') startsh=${sharpbang}${sh} ;;
1040 *)
1041 esac
1042 cat >try <<EOSS
1043 $startsh
1044 set abc
1045 test "$?abc" != 1
1046 EOSS
1047
1048 chmod +x try
1049 $eunicefix try
1050 if ./try; then
1051         : echo "Yup, it does."
1052 else
1053         echo "Hmm... '$startsh' does not guarantee sh startup..."
1054         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1055 fi
1056 rm -f try
1057
1058
1059 : Save command line options in file UU/cmdline.opt for later use in
1060 : generating config.sh.
1061 cat > cmdline.opt <<EOSH
1062 # Configure command line arguments.
1063 config_arg0='$0'
1064 config_args='$*'
1065 config_argc=$#
1066 EOSH
1067 argn=1
1068 for arg in "$@"; do
1069         cat >>cmdline.opt <<EOSH
1070 config_arg$argn='$arg'
1071 EOSH
1072         argn=`expr $argn + 1`
1073 done
1074
1075 : produce awk script to parse command line options
1076 cat >options.awk <<'EOF'
1077 BEGIN {
1078         optstr = "dD:eEf:hKOrsSU:V";    # getopt-style specification
1079
1080         len = length(optstr);
1081         for (i = 1; i <= len; i++) {
1082                 c = substr(optstr, i, 1);
1083                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1084                 if (a == ":") {
1085                         arg[c] = 1;
1086                         i++;
1087                 }
1088                 opt[c] = 1;
1089         }
1090 }
1091 {
1092         expect = 0;
1093         str = $0;
1094         if (substr(str, 1, 1) != "-") {
1095                 printf("'%s'\n", str);
1096                 next;
1097         }
1098         len = length($0);
1099         for (i = 2; i <= len; i++) {
1100                 c = substr(str, i, 1);
1101                 if (!opt[c]) {
1102                         printf("-%s\n", substr(str, i));
1103                         next;
1104                 }
1105                 printf("-%s\n", c);
1106                 if (arg[c]) {
1107                         if (i < len)
1108                                 printf("'%s'\n", substr(str, i + 1));
1109                         else
1110                                 expect = 1;
1111                         next;
1112                 }
1113         }
1114 }
1115 END {
1116         if (expect)
1117                 print "?";
1118 }
1119 EOF
1120
1121 : process the command line options
1122 set X `for arg in "$@"; do echo "X$arg"; done |
1123         sed -e s/X// | awk -f options.awk`
1124 eval "set $*"
1125 shift
1126 rm -f options.awk
1127
1128 : set up default values
1129 fastread=''
1130 reuseval=false
1131 config_sh=''
1132 alldone=''
1133 error=''
1134 silent=''
1135 extractsh=''
1136 override=''
1137 knowitall=''
1138 rm -f optdef.sh
1139 cat >optdef.sh <<EOS
1140 $startsh
1141 EOS
1142
1143
1144 : option parsing
1145 while test $# -gt 0; do
1146         case "$1" in
1147         -d) shift; fastread=yes;;
1148         -e) shift; alldone=cont;;
1149         -f)
1150                 shift
1151                 cd ..
1152                 if test -r "$1"; then
1153                         config_sh="$1"
1154                 else
1155                         echo "$me: cannot read config file $1." >&2
1156                         error=true
1157                 fi
1158                 cd UU
1159                 shift;;
1160         -h) shift; error=true;;
1161         -r) shift; reuseval=true;;
1162         -s) shift; silent=true; realsilent=true;;
1163         -E) shift; alldone=exit;;
1164         -K) shift; knowitall=true;;
1165         -O) shift; override=true;;
1166         -S) shift; silent=true; extractsh=true;;
1167         -D)
1168                 shift
1169                 case "$1" in
1170                 *=)
1171                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1172                         echo "$me: ignoring -D $1" >&2
1173                         ;;
1174                 *=*) echo "$1" | \
1175                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1176                 *) echo "$1='define'" >> optdef.sh;;
1177                 esac
1178                 shift
1179                 ;;
1180         -U)
1181                 shift
1182                 case "$1" in
1183                 *=) echo "$1" >> optdef.sh;;
1184                 *=*)
1185                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1186                         echo "$me: ignoring -U $1" >&2
1187                         ;;
1188                 *) echo "$1='undef'" >> optdef.sh;;
1189                 esac
1190                 shift
1191                 ;;
1192         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1193                 exit 0;;
1194         --) break;;
1195         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1196         *) break;;
1197         esac
1198 done
1199
1200 case "$error" in
1201 true)
1202         cat >&2 <<EOM
1203 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1204                  [-U symbol] [-U symbol=]
1205   -d : use defaults for all answers.
1206   -e : go on without questioning past the production of config.sh.
1207   -f : specify an alternate default configuration file.
1208   -h : print this help message and exit (with an error status).
1209   -r : reuse C symbols value if possible (skips costly nm extraction).
1210   -s : silent mode, only echoes questions and essential information.
1211   -D : define symbol to have some value:
1212          -D symbol         symbol gets the value 'define'
1213          -D symbol=value   symbol gets the value 'value'
1214   -E : stop at the end of questions, after having produced config.sh.
1215   -K : do not use unless you know what you are doing.
1216   -O : let -D and -U override definitions from loaded configuration file.
1217   -S : perform variable substitutions on all .SH files (can mix with -f)
1218   -U : undefine symbol:
1219          -U symbol    symbol gets the value 'undef'
1220          -U symbol=   symbol gets completely empty
1221   -V : print version number and exit (with a zero status).
1222 EOM
1223         exit 1
1224         ;;
1225 esac
1226
1227 : Sanity checks
1228 case "$fastread$alldone" in
1229 yescont|yesexit) ;;
1230 *)
1231         if test ! -t 0; then
1232                 echo "Say 'sh Configure', not 'sh <Configure'"
1233                 exit 1
1234         fi
1235         ;;
1236 esac
1237
1238 exec 4>&1
1239 case "$silent" in
1240 true) exec 1>/dev/null;;
1241 esac
1242
1243 : run the defines and the undefines, if any, but leave the file out there...
1244 touch optdef.sh
1245 . ./optdef.sh
1246
1247 : set package name
1248 package=perl5
1249 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1250 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1251 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1252 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1253 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1254 esac
1255
1256 : Some greps do not return status, grrr.
1257 echo "grimblepritz" >grimble
1258 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1259         contains=contains
1260 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1261         contains=grep
1262 else
1263         contains=contains
1264 fi
1265 rm -f grimble
1266 : the following should work in any shell
1267 case "$contains" in
1268 contains*)
1269         echo " "
1270         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1271         cat >contains <<'EOSS'
1272 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1273 EOSS
1274 chmod +x contains
1275 esac
1276
1277 : Find the path to the source tree
1278 case "$src" in
1279 '') case "$0" in
1280     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`;;
1281     *)   src='.';;
1282     esac;;
1283 esac
1284 case "$src" in
1285 '')     src=/
1286         rsrc=/
1287         ;;
1288 /*) rsrc="$src";;
1289 *) rsrc="../$src";;
1290 esac
1291 if test -f $rsrc/Configure && \
1292         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1293 then
1294    : found it, so we are ok.
1295 else
1296         rsrc=''
1297         for src in . .. ../.. ../../.. ../../../..; do
1298                 if test -f ../$src/Configure && \
1299                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1300                 then
1301                         rsrc=../$src
1302                         break
1303                 fi
1304         done
1305 fi
1306 case "$rsrc" in
1307 '')
1308         cat <<EOM >&4
1309
1310 Sorry, I can't seem to locate the source dir for $package.  Please start
1311 Configure with an explicit path -- i.e. /some/path/Configure.
1312
1313 EOM
1314         exit 1
1315         ;;
1316 ../.)   rsrc='..';;
1317 *)
1318         echo " "
1319         echo "Sources for $package found in \"$src\"." >&4
1320         ;;
1321 esac
1322
1323 : script used to extract .SH files with variable substitutions
1324 cat >extract <<'EOS'
1325 CONFIGDOTSH=true
1326 echo "Doing variable substitutions on .SH files..."
1327 if test -f $src/MANIFEST; then
1328         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1329 else
1330         echo "(Looking for .SH files under the source directory.)"
1331         set x `(cd $src; find . -name "*.SH" -print)`
1332 fi
1333 shift
1334 case $# in
1335 0) set x `(cd $src; echo *.SH)`; shift;;
1336 esac
1337 if test ! -f $src/$1; then
1338         shift
1339 fi
1340 mkdir_p='
1341 name=$1;
1342 create="";
1343 while test $name; do
1344         if test ! -d "$name"; then
1345                 create="$name $create";
1346                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1347                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1348         else
1349                 name="";
1350         fi;
1351 done;
1352 for file in $create; do
1353         mkdir $file;
1354 done
1355 '
1356 for file in $*; do
1357         case "$src" in
1358         ".")
1359                 case "$file" in
1360                 */*)
1361                         dir=`expr X$file : 'X\(.*\)/'`
1362                         file=`expr X$file : 'X.*/\(.*\)'`
1363                         (cd $dir && . ./$file)
1364                         ;;
1365                 *)
1366                         . ./$file
1367                         ;;
1368                 esac
1369                 ;;
1370         *)
1371                 case "$file" in
1372                 */*)
1373                         dir=`expr X$file : 'X\(.*\)/'`
1374                         file=`expr X$file : 'X.*/\(.*\)'`
1375                         (set x $dir; shift; eval $mkdir_p)
1376                         sh <$src/$dir/$file
1377                         ;;
1378                 *)
1379                         sh <$src/$file
1380                         ;;
1381                 esac
1382                 ;;
1383         esac
1384 done
1385 if test -f $src/config_h.SH; then
1386         if test ! -f config.h; then
1387         : oops, they left it out of MANIFEST, probably, so do it anyway.
1388         . $src/config_h.SH
1389         fi
1390 fi
1391 EOS
1392
1393 : extract files and exit if asked to do so
1394 case "$extractsh" in
1395 true)
1396         case "$realsilent" in
1397         true) ;;
1398         *) exec 1>&4;;
1399         esac
1400         case "$config_sh" in
1401         '') config_sh='config.sh';;
1402         esac
1403         echo " "
1404         echo "Fetching answers from $config_sh..."
1405         cd ..
1406         . $config_sh
1407         test "$override" && . ./optdef.sh
1408         echo " "
1409         . UU/extract
1410         rm -rf UU
1411         echo "Done."
1412         exit 0
1413         ;;
1414 esac
1415
1416 : Eunice requires " " instead of "", can you believe it
1417 echo " "
1418 : Here we go...
1419 echo "Beginning of configuration questions for $package."
1420
1421 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1422
1423 : first determine how to suppress newline on echo command
1424 echo " "
1425 echo "Checking echo to see how to suppress newlines..."
1426 (echo "hi there\c" ; echo " ") >.echotmp
1427 if $contains c .echotmp >/dev/null 2>&1 ; then
1428         echo "...using -n."
1429         n='-n'
1430         c=''
1431 else
1432         cat <<'EOM'
1433 ...using \c
1434 EOM
1435         n=''
1436         c='\c'
1437 fi
1438 echo $n "The star should be here-->$c"
1439 echo '*'
1440 rm -f .echotmp
1441
1442 : Now test for existence of everything in MANIFEST
1443 echo " "
1444 if test -f $rsrc/MANIFEST; then
1445         echo "First let's make sure your kit is complete.  Checking..." >&4
1446         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1447         rm -f missing
1448         tmppwd=`pwd`
1449         for filelist in x??; do
1450                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1451         done
1452         if test -s missing; then
1453                 cat missing >&4
1454                 cat >&4 <<'EOM'
1455
1456 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1457
1458 You have the option of continuing the configuration process, despite the
1459 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1460 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1461 and contact the author (perlbug@perl.com).
1462
1463 EOM
1464                 echo $n "Continue? [n] $c" >&4
1465                 read ans
1466                 case "$ans" in
1467                 y*)
1468                         echo "Continuing..." >&4
1469                         rm -f missing
1470                         ;;
1471                 *)
1472                         echo "ABORTING..." >&4
1473                         kill $$
1474                         ;;
1475                 esac
1476         else
1477                 echo "Looks good..."
1478         fi
1479 else
1480         echo "There is no MANIFEST file.  I hope your kit is complete !"
1481 fi
1482 rm -f missing x??
1483
1484 echo " "
1485 : Find the appropriate value for a newline for tr
1486 if test -n "$DJGPP"; then
1487        trnl='\012'
1488 fi
1489 if test X"$trnl" = X; then
1490         case "`echo foo|tr '\n' x 2>/dev/null`" in
1491         foox) trnl='\n' ;;
1492         esac
1493 fi
1494 if test X"$trnl" = X; then
1495         case "`echo foo|tr '\012' x 2>/dev/null`" in
1496         foox) trnl='\012' ;;
1497         esac
1498 fi
1499 if test X"$trnl" = X; then
1500         cat <<EOM >&2
1501
1502 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1503
1504 EOM
1505         exit 1
1506 fi
1507
1508 : compute the number of columns on the terminal for proper question formatting
1509 case "$COLUMNS" in
1510 '') COLUMNS='80';;
1511 esac
1512
1513 : set up the echo used in my read
1514 myecho="case \"\$xxxm\" in
1515 '') echo $n \"\$rp $c\" >&4;;
1516 *) case \"\$rp\" in
1517         '') echo $n \"[\$xxxm] $c\";;
1518         *)
1519                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1520                         echo \"\$rp\" >&4
1521                         echo $n \"[\$xxxm] $c\" >&4
1522                 else
1523                         echo $n \"\$rp [\$xxxm] $c\" >&4
1524                 fi
1525                 ;;
1526         esac;;
1527 esac"
1528
1529 : now set up to do reads with possible shell escape and default assignment
1530 cat <<EOSC >myread
1531 $startsh
1532 xxxm=\$dflt
1533 $myecho
1534 ans='!'
1535 case "\$fastread" in
1536 yes) case "\$dflt" in
1537         '') ;;
1538         *) ans='';
1539                 case "\$silent-\$rp" in
1540                 true-) ;;
1541                 *) echo " " >&4;;
1542                 esac;;
1543         esac;;
1544 *) case "\$silent" in
1545         true) case "\$rp" in
1546                 '') ans='';;
1547                 esac;;
1548         esac;;
1549 esac
1550 while expr "X\$ans" : "X!" >/dev/null; do
1551         read answ
1552         set x \$xxxm
1553         shift
1554         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1555         case  "\$answ" in
1556         "!")
1557                 sh 1>&4
1558                 echo " "
1559                 $myecho
1560                 ;;
1561         !*)
1562                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1563                 shift
1564                 sh 1>&4 -c "\$*"
1565                 echo " "
1566                 $myecho
1567                 ;;
1568         "\$ans")
1569                 case "\$ans" in
1570                 \\&*)
1571                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1572                         shift
1573                         case "\$1" in
1574                         -d)
1575                                 fastread=yes
1576                                 echo "(OK, I'll run with -d after this question.)" >&4
1577                                 ;;
1578                         -*)
1579                                 echo "*** Sorry, \$1 not supported yet." >&4
1580                                 ;;
1581                         esac
1582                         $myecho
1583                         ans=!
1584                         ;;
1585                 esac;;
1586         *)
1587                 case "\$aok" in
1588                 y)
1589                         echo "*** Substitution done -- please confirm."
1590                         xxxm="\$ans"
1591                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1592                         xxxm="\$ans"
1593                         ans=!
1594                         ;;
1595                 *)
1596                         echo "*** Error -- try again."
1597                         ans=!
1598                         ;;
1599                 esac
1600                 $myecho
1601                 ;;
1602         esac
1603         case "\$ans\$xxxm\$nostick" in
1604         '')
1605                 ans=!
1606                 $myecho
1607                 ;;
1608         esac
1609 done
1610 case "\$ans" in
1611 '') ans="\$xxxm";;
1612 esac
1613 EOSC
1614
1615 : create .config dir to save info across Configure sessions
1616 test -d ../.config || mkdir ../.config
1617 cat >../.config/README <<EOF
1618 This directory created by Configure to save information that should
1619 persist across sessions for $package.
1620
1621 You may safely delete it if you wish.
1622 EOF
1623
1624 : general instructions
1625 needman=true
1626 firsttime=true
1627 user=`(logname) 2>/dev/null`
1628 case "$user" in
1629 '') user=`whoami 2>&1`;;
1630 esac
1631 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1632         firsttime=false
1633         echo " "
1634         rp='Would you like to see the instructions?'
1635         dflt=n
1636         . ./myread
1637         case "$ans" in
1638         [yY]*) ;;
1639         *) needman=false;;
1640         esac
1641 fi
1642 if $needman; then
1643         cat <<EOH
1644
1645 This installation shell script will examine your system and ask you questions
1646 to determine how the perl5 package should be installed. If you get
1647 stuck on a question, you may use a ! shell escape to start a subshell or
1648 execute a command.  Many of the questions will have default answers in square
1649 brackets; typing carriage return will give you the default.
1650
1651 On some of the questions which ask for file or directory names you are allowed
1652 to use the ~name construct to specify the login directory belonging to "name",
1653 even if you don't have a shell which knows about that.  Questions where this is
1654 allowed will be marked "(~name ok)".
1655
1656 EOH
1657         rp=''
1658         dflt='Type carriage return to continue'
1659         . ./myread
1660         cat <<'EOH'
1661
1662 The prompter used in this script allows you to use shell variables and
1663 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1664 in the default answer, as if the default line was a set of arguments given to a
1665 script shell.  This means you may also use $* to repeat the whole default line,
1666 so you do not have to re-type everything to add something to the default.
1667
1668 Everytime there is a substitution, you will have to confirm.  If there is an
1669 error (e.g. an unmatched backtick), the default answer will remain unchanged
1670 and you will be prompted again.
1671
1672 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1673 the questions and use the computed defaults (or the previous answers if there
1674 was already a config.sh file). Type 'Configure -h' for a list of options.
1675 You may also start interactively and then answer '& -d' at any prompt to turn
1676 on the non-interactive behaviour for the remainder of the execution.
1677
1678 EOH
1679         . ./myread
1680         cat <<EOH
1681
1682 Much effort has been expended to ensure that this shell script will run on any
1683 Unix system.  If despite that it blows up on yours, your best bet is to edit
1684 Configure and run it again.  If you can't run Configure for some reason,
1685 you'll have to generate a config.sh file by hand.  Whatever problems you
1686 have, let me (perlbug@perl.com) know how I blew it.
1687
1688 This installation script affects things in two ways:
1689
1690 1) it may do direct variable substitutions on some of the files included
1691    in this kit.
1692 2) it builds a config.h file for inclusion in C programs.  You may edit
1693    any of these files as the need arises after running this script.
1694
1695 If you make a mistake on a question, there is no easy way to back up to it
1696 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1697 files.  Configure will offer to let you do this before it runs the SH files.
1698
1699 EOH
1700         dflt='Type carriage return to continue'
1701         . ./myread
1702         case "$firsttime" in
1703         true) echo $user >>../.config/instruct;;
1704         esac
1705 fi
1706
1707 : find out where common programs are
1708 echo " "
1709 echo "Locating common programs..." >&4
1710 cat <<EOSC >loc
1711 $startsh
1712 case \$# in
1713 0) exit 1;;
1714 esac
1715 thing=\$1
1716 shift
1717 dflt=\$1
1718 shift
1719 for dir in \$*; do
1720         case "\$thing" in
1721         .)
1722         if test -d \$dir/\$thing; then
1723                 echo \$dir
1724                 exit 0
1725         fi
1726         ;;
1727         *)
1728         for thisthing in \$dir/\$thing; do
1729                 : just loop through to pick last item
1730         done
1731         if test -f \$thisthing; then
1732                 echo \$thisthing
1733                 exit 0
1734         elif test -f \$dir/\$thing.exe; then
1735                 if test -n "$DJGPP"; then
1736                         echo \$dir/\$thing.exe
1737                 else
1738                         : on Eunice apparently
1739                         echo \$dir/\$thing
1740                 fi
1741                 exit 0
1742         fi
1743         ;;
1744         esac
1745 done
1746 echo \$dflt
1747 exit 1
1748 EOSC
1749 chmod +x loc
1750 $eunicefix loc
1751 loclist="
1752 awk
1753 cat
1754 comm
1755 cp
1756 echo
1757 expr
1758 grep
1759 ls
1760 make
1761 mkdir
1762 rm
1763 sed
1764 sort
1765 touch
1766 tr
1767 uniq
1768 "
1769 trylist="
1770 Mcc
1771 ar
1772 byacc
1773 cpp
1774 csh
1775 date
1776 egrep
1777 gzip
1778 less
1779 ln
1780 more
1781 nm
1782 nroff
1783 pg
1784 test
1785 uname
1786 zip
1787 "
1788 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1789 pth="$pth /lib /usr/lib"
1790 for file in $loclist; do
1791         eval xxx=\$$file
1792         case "$xxx" in
1793         /*|?:[\\/]*)
1794                 if test -f "$xxx"; then
1795                         : ok
1796                 else
1797                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1798                         xxx=`./loc $file $file $pth`
1799                 fi
1800                 ;;
1801         '') xxx=`./loc $file $file $pth`;;
1802         *) xxx=`./loc $xxx $xxx $pth`;;
1803         esac
1804         eval $file=$xxx
1805         eval _$file=$xxx
1806         case "$xxx" in
1807         /*)
1808                 echo $file is in $xxx.
1809                 ;;
1810         ?:[\\/]*)
1811                 echo $file is in $xxx.
1812                 ;;
1813         *)
1814                 echo "I don't know where '$file' is, and my life depends on it." >&4
1815                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1816                 exit 1
1817                 ;;
1818         esac
1819 done
1820 echo " "
1821 echo "Don't worry if any of the following aren't found..."
1822 say=offhand
1823 for file in $trylist; do
1824         eval xxx=\$$file
1825         case "$xxx" in
1826         /*|?:[\\/]*)
1827                 if test -f "$xxx"; then
1828                         : ok
1829                 else
1830                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1831                         xxx=`./loc $file $file $pth`
1832                 fi
1833                 ;;
1834         '') xxx=`./loc $file $file $pth`;;
1835         *) xxx=`./loc $xxx $xxx $pth`;;
1836         esac
1837         eval $file=$xxx
1838         eval _$file=$xxx
1839         case "$xxx" in
1840         /*)
1841                 echo $file is in $xxx.
1842                 ;;
1843         ?:[\\/]*)
1844                 echo $file is in $xxx.
1845                 ;;
1846         *)
1847                 echo "I don't see $file out there, $say."
1848                 say=either
1849                 ;;
1850         esac
1851 done
1852 case "$egrep" in
1853 egrep)
1854         echo "Substituting grep for egrep."
1855         egrep=$grep
1856         ;;
1857 esac
1858 case "$ln" in
1859 ln)
1860         echo "Substituting cp for ln."
1861         ln=$cp
1862         ;;
1863 esac
1864 case "$test" in
1865 test)
1866         echo "Hopefully test is built into your sh."
1867         ;;
1868 *)
1869         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1870                 echo "Using the test built into your sh."
1871                 test=test
1872                 _test=test
1873         fi
1874         ;;
1875 esac
1876 case "$echo" in
1877 echo)
1878         echo "Hopefully echo is built into your sh."
1879         ;;
1880 '') ;;
1881 *)
1882         echo " "
1883 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1884         $echo $n "hi there$c" >foo1
1885         echo $n "hi there$c" >foo2
1886         if cmp foo1 foo2 >/dev/null 2>&1; then
1887                 echo "They are compatible.  In fact, they may be identical."
1888         else
1889                 case "$n" in
1890                 '-n') n='' c='\c';;
1891                 *) n='-n' c='';;
1892                 esac
1893                 cat <<FOO
1894 They are not compatible!  You are probably running ksh on a non-USG system.
1895 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
1896 have echo built in and we may have to run some Bourne shell scripts.  That
1897 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
1898
1899 FOO
1900                 $echo $n "The star should be here-->$c"
1901                 $echo "*"
1902         fi
1903         $rm -f foo1 foo2
1904         ;;
1905 esac
1906
1907 : determine whether symbolic links are supported
1908 echo " "
1909 $touch blurfl
1910 if $ln -s blurfl sym > /dev/null 2>&1 ; then
1911         echo "Symbolic links are supported." >&4
1912         lns="$ln -s"
1913 else
1914         echo "Symbolic links are NOT supported." >&4
1915         lns="$ln"
1916 fi
1917 $rm -f blurfl sym
1918
1919 : see whether [:lower:] and [:upper:] are supported character classes
1920 echo " "
1921 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1922 ABYZ)
1923         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
1924         up='[:upper:]'
1925         low='[:lower:]'
1926         ;;
1927 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
1928         # (0xc9 and 0xd1), therefore that is a nice testing point.
1929         if test "X$up" = X -o "X$low" = X; then
1930             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
1931             ij) up='[A-Z]'
1932                 low='[a-z]'
1933                 ;;
1934             esac
1935         fi
1936         if test "X$up" = X -o "X$low" = X; then
1937             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
1938             ij) up='A-Z'
1939                 low='a-z'
1940                 ;;
1941             esac
1942         fi
1943         if test "X$up" = X -o "X$low" = X; then
1944             case "`echo IJ | od -x 2>/dev/null`" in
1945             *C9D1*|*c9d1*)
1946                 echo "Hey, this might be EBCDIC." >&4
1947                 if test "X$up" = X -o "X$low" = X; then
1948                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
1949                     ij) up='[A-IJ-RS-Z]'
1950                         low='[a-ij-rs-z]'
1951                         ;;
1952                     esac
1953                 fi
1954                 if test "X$up" = X -o "X$low" = X; then
1955                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
1956                     ij) up='A-IJ-RS-Z'
1957                         low='a-ij-rs-z'
1958                         ;;
1959                     esac
1960                 fi
1961                 ;;
1962             esac
1963         fi
1964 esac
1965 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
1966 ij)
1967     echo "Using $up and $low to convert case." >&4
1968     ;;
1969 *)
1970     echo "I don't know how to translate letters from upper to lower case." >&4
1971     echo "Your tr is not acting any way I know of." >&4
1972     exit 1
1973     ;;
1974 esac
1975 : set up the translation script tr, must be called with ./tr of course
1976 cat >tr <<EOSC
1977 $startsh
1978 case "\$1\$2" in
1979 '[A-Z][a-z]') exec $tr '$up' '$low';;
1980 '[a-z][A-Z]') exec $tr '$low' '$up';;
1981 esac
1982 exec $tr "\$@"
1983 EOSC
1984 chmod +x tr
1985 $eunicefix tr
1986
1987 : Try to determine whether config.sh was made on this system
1988 case "$config_sh" in
1989 '')
1990 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
1991 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
1992 # because the A-Z/a-z are not consecutive.
1993 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
1994         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
1995 newmyuname="$myuname"
1996 dflt=n
1997 case "$knowitall" in
1998 '')
1999         if test -f ../config.sh; then
2000                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2001                         eval "`grep myuname= ../config.sh`"
2002                 fi
2003                 if test "X$myuname" = "X$newmyuname"; then
2004                         dflt=y
2005                 fi
2006         fi
2007         ;;
2008 *) dflt=y;;
2009 esac
2010
2011 : Get old answers from old config file if Configure was run on the
2012 : same system, otherwise use the hints.
2013 hint=default
2014 cd ..
2015 if test -f config.sh; then
2016         echo " "
2017         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2018         . UU/myread
2019         case "$ans" in
2020         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2021         *)  echo "Fetching default answers from your old config.sh file..." >&4
2022                 tmp_n="$n"
2023                 tmp_c="$c"
2024                 tmp_sh="$sh"
2025                 . ./config.sh
2026                 cp config.sh UU
2027                 n="$tmp_n"
2028                 c="$tmp_c"
2029                 : Older versions did not always set $sh.  Catch re-use of such
2030                 : an old config.sh.
2031                 case "$sh" in
2032                 '') sh="$tmp_sh" ;;
2033                 esac
2034                 hint=previous
2035                 ;;
2036         esac
2037 fi
2038 if test ! -f config.sh; then
2039         $cat <<EOM
2040
2041 First time through, eh?  I have some defaults handy for some systems
2042 that need some extra help getting the Configure answers right:
2043
2044 EOM
2045         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2046         dflt=''
2047         : Half the following guesses are probably wrong... If you have better
2048         : tests or hints, please send them to perlbug@perl.com
2049         : The metaconfig authors would also appreciate a copy...
2050         $test -f /irix && osname=irix
2051         $test -f /xenix && osname=sco_xenix
2052         $test -f /dynix && osname=dynix
2053         $test -f /dnix && osname=dnix
2054         $test -f /lynx.os && osname=lynxos
2055         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2056         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2057         $test -f /bin/mips && /bin/mips && osname=mips
2058         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2059                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2060         $test -d /usr/apollo/bin && osname=apollo
2061         $test -f /etc/saf/_sactab && osname=svr4
2062         $test -d /usr/include/minix && osname=minix
2063         if $test -d /MachTen -o -d /MachTen_Folder; then
2064                 osname=machten
2065                 if $test -x /sbin/version; then
2066                         osvers=`/sbin/version | $awk '{print $2}' |
2067                         $sed -e 's/[A-Za-z]$//'`
2068                 elif $test -x /usr/etc/version; then
2069                         osvers=`/usr/etc/version | $awk '{print $2}' |
2070                         $sed -e 's/[A-Za-z]$//'`
2071                 else
2072                         osvers="$2.$3"
2073                 fi
2074         fi
2075        $test -f /sys/posix.dll &&
2076                $test -f /usr/bin/what &&
2077                set X `/usr/bin/what /sys/posix.dll` &&
2078                $test "$3" = UWIN &&
2079                osname=uwin &&
2080                osvers="$5"
2081         if $test -f $uname; then
2082                 set X $myuname
2083                 shift
2084
2085                 case "$5" in
2086                 fps*) osname=fps ;;
2087                 mips*)
2088                         case "$4" in
2089                         umips) osname=umips ;;
2090                         *) osname=mips ;;
2091                         esac;;
2092                 [23]100) osname=mips ;;
2093                 next*) osname=next ;;
2094                 i386*)
2095                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2096                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2097                                 osname='sco'
2098                                 osvers=$tmp
2099                         elif $test -f /etc/kconfig; then
2100                                 osname=isc
2101                                 if test "$lns" = "ln -s"; then
2102                                         osvers=4
2103                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2104                                         osvers=3
2105                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2106                                         osvers=2
2107                                 fi
2108                         fi
2109                         tmp=''
2110                         ;;
2111                 pc*)
2112                         if test -n "$DJGPP"; then
2113                                 osname=dos
2114                                 osvers=djgpp
2115                         fi
2116                         ;;
2117                 esac
2118
2119                 case "$1" in
2120                 aix) osname=aix
2121                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2122                         case "$tmp" in
2123                         'not found') osvers="$4"."$3" ;;
2124                         '<3240'|'<>3240') osvers=3.2.0 ;;
2125                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2126                         '=3250'|'>3250') osvers=3.2.5 ;;
2127                         *) osvers=$tmp;;
2128                         esac
2129                         ;;
2130                 *dc.osx) osname=dcosx
2131                         osvers="$3"
2132                         ;;
2133                 dnix) osname=dnix
2134                         osvers="$3"
2135                         ;;
2136                 domainos) osname=apollo
2137                         osvers="$3"
2138                         ;;
2139                 dgux) osname=dgux 
2140                         osvers="$3"
2141                         ;;
2142                 dynixptx*) osname=dynixptx
2143                         osvers=`echo "$4"|sed 's/^v//'`
2144                         ;;
2145                 freebsd) osname=freebsd 
2146                         osvers="$3" ;;
2147                 genix) osname=genix ;;
2148                 hp*) osname=hpux 
2149                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2150                         ;;
2151                 irix*) osname=irix
2152                         case "$3" in
2153                         4*) osvers=4 ;;
2154                         5*) osvers=5 ;;
2155                         *)      osvers="$3" ;;
2156                         esac
2157                         ;;
2158                 linux) osname=linux
2159                         case "$3" in
2160                         *)      osvers="$3" ;;
2161                         esac
2162                         ;;
2163                 MiNT) osname=mint
2164                         ;;
2165                 netbsd*) osname=netbsd
2166                         osvers="$3"
2167                         ;;
2168                 news-os) osvers="$3"
2169                         case "$3" in
2170                         4*) osname=newsos4 ;;
2171                         *) osname=newsos ;;
2172                         esac
2173                         ;;
2174                 bsd386) osname=bsd386
2175                         osvers=`$uname -r`
2176                         ;;
2177                 POSIX-BC | posix-bc ) osname=posix-bc
2178                         osvers="$3"
2179                         ;;
2180                 powerux | power_ux | powermax_os | powermaxos | \
2181                 powerunix | power_unix) osname=powerux
2182                         osvers="$3"
2183                         ;;
2184                 next*) osname=next ;;
2185                 solaris) osname=solaris
2186                         case "$3" in
2187                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2188                         *)      osvers="$3" ;;
2189                         esac
2190                         ;;
2191                 sunos) osname=sunos
2192                         case "$3" in
2193                         5*) osname=solaris
2194                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2195                         *)      osvers="$3" ;;
2196                         esac
2197                         ;;
2198                 titanos) osname=titanos
2199                         case "$3" in
2200                         1*) osvers=1 ;;
2201                         2*) osvers=2 ;;
2202                         3*) osvers=3 ;;
2203                         4*) osvers=4 ;;
2204                         *)      osvers="$3" ;;
2205                         esac
2206                         ;;
2207                 ultrix) osname=ultrix
2208                         osvers="$3"
2209                         ;;
2210                 osf1|mls+)      case "$5" in
2211                                 alpha)
2212                                         osname=dec_osf
2213                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2214                                         ;;
2215                         hp*)    osname=hp_osf1  ;;
2216                         mips)   osname=mips_osf1 ;;
2217                         esac
2218                         ;;
2219                 uts) osname=uts 
2220                         osvers="$3"
2221                         ;;
2222                 qnx) osname=qnx
2223                         osvers="$4"
2224                         ;;
2225                 $2) case "$osname" in
2226                         *isc*) ;;
2227                         *freebsd*) ;;
2228                         svr*)
2229                                 : svr4.x or possibly later
2230                                 case "svr$3" in 
2231                                 ${osname}*)
2232                                         osname=svr$3
2233                                         osvers=$4
2234                                         ;;
2235                                 esac
2236                                 case "$osname" in
2237                                 svr4.0)
2238                                         : Check for ESIX
2239                                         if test -f /stand/boot ; then
2240                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2241                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2242                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2243                                                         if test -n "$isesix"; then
2244                                                                 osname=esix4
2245                                                         fi
2246                                                 fi
2247                                         fi
2248                                         ;;
2249                                 esac
2250                                 ;;
2251                         *)      if test -f /etc/systemid; then
2252                                         osname=sco
2253                                         set `echo $3 | $sed 's/\./ /g'` $4
2254                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2255                                                 osvers=$1.$2.$3
2256                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2257                                                 osvers=$1.$2
2258                                         elif $test -f $src/hints/sco_$1.sh; then
2259                                                 osvers=$1
2260                                         fi
2261                                 else
2262                                         case "$osname" in
2263                                         '') : Still unknown.  Probably a generic Sys V.
2264                                                 osname="sysv"
2265                                                 osvers="$3"
2266                                                 ;;
2267                                         esac
2268                                 fi
2269                                 ;;
2270                         esac
2271                         ;;
2272                 *)      case "$osname" in
2273                         '') : Still unknown.  Probably a generic BSD.
2274                                 osname="$1"
2275                                 osvers="$3"
2276                                 ;;
2277                         esac
2278                         ;;
2279                 esac
2280         else
2281                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2282                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2283                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2284                                 osname=news_os
2285                         fi
2286                         $rm -f UU/kernel.what
2287                 elif test -d c:/.; then
2288                         set X $myuname
2289                         osname=os2
2290                         osvers="$5"
2291                 fi
2292         fi
2293         
2294         : Now look for a hint file osname_osvers, unless one has been
2295         : specified already.
2296         case "$hintfile" in
2297         ''|' ')
2298                 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
2299                 : Also try without trailing minor version numbers.
2300                 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2301                 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2302                 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2303                 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
2304                 case "$file" in
2305                 '') dflt=none ;;
2306                 *)  case "$osvers" in
2307                         '') dflt=$file
2308                                 ;;
2309                         *)  if $test -f $src/hints/$file.sh ; then
2310                                         dflt=$file
2311                                 elif $test -f $src/hints/$xfile.sh ; then
2312                                         dflt=$xfile
2313                                 elif $test -f $src/hints/$xxfile.sh ; then
2314                                         dflt=$xxfile
2315                                 elif $test -f $src/hints/$xxxfile.sh ; then
2316                                         dflt=$xxxfile
2317                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2318                                         dflt=$xxxxfile
2319                                 elif $test -f "$src/hints/${osname}.sh" ; then
2320                                         dflt="${osname}"
2321                                 else
2322                                         dflt=none
2323                                 fi
2324                                 ;;
2325                         esac
2326                         ;;
2327                 esac
2328                 if $test -f Policy.sh ; then
2329                         case "$dflt" in
2330                         *Policy*) ;;
2331                         none) dflt="Policy" ;;
2332                         *) dflt="Policy $dflt" ;;
2333                         esac
2334                 fi
2335                 ;;
2336         *)
2337                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2338                 ;;
2339         esac
2340
2341         if $test -f Policy.sh ; then
2342                 $cat <<EOM
2343
2344 There's also a Policy hint file available, which should make the
2345 site-specific (policy) questions easier to answer.
2346 EOM
2347
2348         fi
2349
2350         $cat <<EOM
2351
2352 You may give one or more space-separated answers, or "none" if appropriate.
2353 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2354 is a good thing.  DO NOT give a wrong version.
2355
2356 EOM
2357
2358         rp="Which of these apply, if any?"
2359         . UU/myread
2360         tans=$ans
2361         for file in $tans; do
2362                 if $test X$file = XPolicy -a -f Policy.sh; then
2363                         . Policy.sh
2364                         $cat Policy.sh >> UU/config.sh
2365                 elif $test -f $src/hints/$file.sh; then
2366                         . $src/hints/$file.sh
2367                         $cat $src/hints/$file.sh >> UU/config.sh
2368                 elif $test X$tans = X -o X$tans = Xnone ; then
2369                         : nothing
2370                 else
2371                         : Give one chance to correct a possible typo.
2372                         echo "$file.sh does not exist"
2373                         dflt=$file
2374                         rp="hint to use instead?"
2375                         . UU/myread
2376                         for file in $ans; do
2377                                 if $test -f "$src/hints/$file.sh"; then
2378                                         . $src/hints/$file.sh
2379                                         $cat $src/hints/$file.sh >> UU/config.sh
2380                                 elif $test X$ans = X -o X$ans = Xnone ; then
2381                                         : nothing
2382                                 else
2383                                         echo "$file.sh does not exist -- ignored."
2384                                 fi
2385                         done
2386                 fi
2387         done
2388
2389         hint=recommended
2390         : Remember our hint file for later.
2391         if $test -f "$src/hints/$file.sh" ; then
2392                 hintfile="$file"
2393         else
2394                 hintfile=''
2395         fi
2396 fi
2397 cd UU
2398 ;;
2399 *)
2400         echo " "
2401         echo "Fetching default answers from $config_sh..." >&4
2402         tmp_n="$n"
2403         tmp_c="$c"
2404         cd ..
2405         cp $config_sh config.sh 2>/dev/null
2406         chmod +w config.sh
2407         . ./config.sh
2408         cd UU
2409         cp ../config.sh .
2410         n="$tmp_n"
2411         c="$tmp_c"
2412         hint=previous
2413         ;;
2414 esac
2415 test "$override" && . ./optdef.sh
2416 myuname="$newmyuname"
2417
2418 : Restore computed paths
2419 for file in $loclist $trylist; do
2420         eval $file="\$_$file"
2421 done
2422
2423 cat << EOM
2424
2425 Configure uses the operating system name and version to set some defaults.
2426 The default value is probably right if the name rings a bell. Otherwise,
2427 since spelling matters for me, either accept the default or answer "none"
2428 to leave it blank.
2429
2430 EOM
2431 case "$osname" in
2432         ''|' ')
2433                 case "$hintfile" in
2434                 ''|' '|none) dflt=none ;;
2435                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2436                 esac
2437                 ;;
2438         *) dflt="$osname" ;;
2439 esac
2440 rp="Operating system name?"
2441 . ./myread
2442 case "$ans" in
2443 none)  osname='' ;;
2444 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2445 esac
2446 echo " "
2447 case "$osvers" in
2448         ''|' ')
2449                 case "$hintfile" in
2450                 ''|' '|none) dflt=none ;;
2451                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2452                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2453                         case "$dflt" in
2454                         ''|' ') dflt=none ;;
2455                         esac
2456                         ;;
2457                 esac
2458                 ;;
2459         *) dflt="$osvers" ;;
2460 esac
2461 rp="Operating system version?"
2462 . ./myread
2463 case "$ans" in
2464 none)  osvers='' ;;
2465 *) osvers="$ans" ;;
2466 esac
2467
2468 : who configured the system
2469 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2470 cf_by=`(logname) 2>/dev/null`
2471 case "$cf_by" in
2472 "")
2473         cf_by=`(whoami) 2>/dev/null`
2474         case "$cf_by" in
2475         "") cf_by=unknown ;;
2476         esac ;;
2477 esac
2478
2479 : set up the script used to warn in case of inconsistency
2480 cat <<EOS >whoa
2481 $startsh
2482 EOS
2483 cat <<'EOSC' >>whoa
2484 dflt=y
2485 echo " "
2486 echo "*** WHOA THERE!!! ***" >&4
2487 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2488 rp="    Keep the $hint value?"
2489 . ./myread
2490 case "$ans" in
2491 y) td=$was; tu=$was;;
2492 esac
2493 EOSC
2494
2495 : function used to set $1 to $val
2496 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2497 case "$val$was" in
2498 $define$undef) . ./whoa; eval "$var=\$td";;
2499 $undef$define) . ./whoa; eval "$var=\$tu";;
2500 *) eval "$var=$val";;
2501 esac'
2502
2503 cat <<EOM
2504
2505 Perl can be built to take advantage of threads, on some systems.
2506 To do so, Configure must be run with -Dusethreads.
2507
2508 Note that threading is a highly experimental feature, and
2509 some known race conditions still remain.  If you choose to try
2510 it, be very sure to not actually deploy it for production
2511 purposes.  README.threads has more details, and is required
2512 reading if you enable threads.
2513 EOM
2514 case "$usethreads" in
2515 $define|true|[yY]*)     dflt='y';;
2516 *) dflt='n';;
2517 esac
2518 rp='Build a threading Perl?'
2519 . ./myread
2520 case "$ans" in
2521 y|Y)    val="$define" ;;     
2522 *)      val="$undef" ;;
2523 esac
2524 set usethreads
2525 eval $setvar 
2526
2527 case "$d_oldpthreads" in
2528 '')     : Configure tests would be welcome here.  For now, assume undef.
2529         val="$undef" ;;
2530 *)      val="$d_oldpthreads" ;;
2531 esac
2532 set d_oldpthreads
2533 eval $setvar
2534
2535
2536 case "$usethreads" in
2537 "$define"|true|[yY]*)
2538 : Look for a hint-file generated 'call-back-unit'.  If the
2539 : user has specified that a threading perl is to be built,
2540 : we may need to set or change some other defaults.
2541         if $test -f usethreads.cbu; then
2542                 . ./usethreads.cbu
2543         fi
2544         case "$osname" in
2545         aix|dec_osf|dos_djgpp|freebsd|hpux|irix|linux|next|openbsd|os2|solaris|vmesa)
2546                 # Known thread-capable platforms.
2547                 ;;
2548         *)
2549                 cat >&4 <<EOM
2550 $osname is not known to support threads.
2551 Please let perlbug@perl.com know how to do that.
2552
2553 Cannot continue, aborting.
2554 EOM
2555                 exit 1
2556         ;;
2557         esac # $osname
2558     ;;
2559 esac # $usethreads
2560
2561 cat <<EOM
2562
2563 Perl can be built so that multiple Perl interpreters can coexist
2564 within the same Perl executable.  To do so, Configure must be run with
2565 -Dusemultiplicity.
2566
2567 Normally you do not need this and you should answer no.
2568
2569 EOM
2570 case "$usemultiplicity" in
2571 $define|true|[yY]*)     dflt='y';;
2572 *) dflt='n';;
2573 esac
2574 rp='Build Perl for multiplicity?'
2575 . ./myread
2576 case "$ans" in
2577 y|Y)    val="$define" ;;     
2578 *)      val="$undef" ;;
2579 esac
2580 set usemultiplicity
2581 eval $setvar 
2582
2583 cat <<EOM
2584
2585 Perl can be built to take advantage of explicit 64-bit interfaces,
2586 on some systems.  To do so, Configure must be run with -Duse64bits.
2587
2588 If this doesn't make any sense to you, just accept the default 'n'.
2589 EOM
2590 case "$use64bits" in
2591 $define|true|[yY]*)     dflt='y';;
2592 *) dflt='n';;
2593 esac
2594 rp='Try to use explicit 64-bit interfaces, if available?'
2595 . ./myread
2596 case "$ans" in
2597 y|Y) 
2598         val="$define"
2599         ;;     
2600 *)      
2601         val="$undef"
2602         ;;
2603 esac
2604 set use64bits
2605 eval $setvar
2606
2607 case "$archname64" in
2608 '') archname64='' ;;    # not a typo
2609 esac
2610
2611 case "$use64bits" in
2612 "$define"|true|[yY]*)
2613 : Look for a hint-file generated 'call-back-unit'.  If the
2614 : user has specified that a threading perl is to be built,
2615 : we may need to set or change some other defaults.
2616         if $test -f use64bits.cbu; then
2617                 . ./use64bits.cbu
2618         fi
2619         case "$osname" in
2620         dec_osf|hpux|irix|solaris|unicos)
2621                 # Known 64-bit capable platforms.
2622                 ;;
2623         *)
2624                 cat >&4 <<EOM
2625 $osname is not known to support 64-bit interfaces.
2626 Please let perlbug@perl.com know how to do that.
2627
2628 Cannot continue, aborting.
2629 EOM
2630                 exit 1
2631                 ;;
2632         esac
2633         ;;
2634 esac
2635
2636 : determine the architecture name
2637 echo " "
2638 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
2639         tarch=`arch`"-$osname"
2640 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
2641         if uname -m > tmparch 2>&1 ; then
2642                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
2643                         -e 's/$/'"-$osname/" tmparch`
2644         else
2645                 tarch="$osname"
2646         fi
2647         $rm -f tmparch
2648 else
2649         tarch="$osname"
2650 fi
2651 case "$myarchname" in
2652 ''|"$tarch") ;;
2653 *)
2654         echo "(Your architecture name used to be $myarchname.)"
2655         archname=''
2656         ;;
2657 esac
2658 myarchname="$tarch"
2659 case "$archname" in
2660 '') dflt="$tarch";;
2661 *) dflt="$archname";;
2662 esac
2663 rp='What is your architecture name'
2664 . ./myread
2665 archname="$ans"
2666 case "$usethreads" in
2667 $define)
2668         echo "Threads selected." >&4
2669         case "$archname" in
2670         *-thread*) echo "...and architecture name already has -thread." >&4
2671                 ;;
2672         *)      archname="$archname-thread"
2673                 echo "...setting architecture name to $archname." >&4
2674                 ;;
2675         esac
2676         ;;
2677 esac
2678 case "$usemultiplicity" in
2679 $define)
2680         echo "Multiplicity selected." >&4
2681         case "$archname" in
2682         *-multi*) echo "...and architecture name already has -multi." >&4
2683                 ;;
2684         *)      archname="$archname-multi"
2685                 echo "...setting architecture name to $archname." >&4
2686                 ;;
2687         esac
2688         ;;
2689 esac
2690 case "$use64bits" in
2691 $define)
2692         echo "Explicit 64-bitness selected." >&4
2693         case "$archname64" in
2694         '')
2695                 ;;
2696         *)
2697                 case "$archname" in
2698                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
2699                         ;;
2700                 *)      archname="$archname-$archname64"
2701                         echo "...setting architecture name to $archname." >&4
2702                         ;;
2703                 esac
2704                 ;;
2705         esac
2706 esac
2707
2708 : is AFS running?
2709 echo " "
2710 case "$afs" in
2711 $define|true)   afs=true ;;
2712 $undef|false)   afs=false ;;
2713 *)      if test -d /afs; then
2714                 afs=true
2715         else
2716                 afs=false
2717         fi
2718         ;;
2719 esac
2720 if $afs; then
2721         echo "AFS may be running... I'll be extra cautious then..." >&4
2722 else
2723         echo "AFS does not seem to be running..." >&4
2724 fi
2725
2726 : decide how portable to be.  Allow command line overrides.
2727 case "$d_portable" in
2728 "$undef") ;;
2729 *)      d_portable="$define" ;;
2730 esac
2731
2732 : set up shell script to do ~ expansion
2733 cat >filexp <<EOSS
2734 $startsh
2735 : expand filename
2736 case "\$1" in
2737  ~/*|~)
2738         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
2739         ;;
2740  ~*)
2741         if $test -f /bin/csh; then
2742                 /bin/csh -f -c "glob \$1"
2743                 failed=\$?
2744                 echo ""
2745                 exit \$failed
2746         else
2747                 name=\`$expr x\$1 : '..\([^/]*\)'\`
2748                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
2749                 if $test ! -d "\$dir"; then
2750                         me=\`basename \$0\`
2751                         echo "\$me: can't locate home directory for: \$name" >&2
2752                         exit 1
2753                 fi
2754                 case "\$1" in
2755                 */*)
2756                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
2757                         ;;
2758                 *)
2759                         echo \$dir
2760                         ;;
2761                 esac
2762         fi
2763         ;;
2764 *)
2765         echo \$1
2766         ;;
2767 esac
2768 EOSS
2769 chmod +x filexp
2770 $eunicefix filexp
2771
2772 : now set up to get a file name
2773 cat <<EOS >getfile
2774 $startsh
2775 EOS
2776 cat <<'EOSC' >>getfile
2777 tilde=''
2778 fullpath=''
2779 already=''
2780 skip=''
2781 none_ok=''
2782 exp_file=''
2783 nopath_ok=''
2784 orig_rp="$rp"
2785 orig_dflt="$dflt"
2786
2787 case "$fn" in
2788 *\(*)
2789         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
2790         fn=`echo $fn | sed 's/(.*)//'`
2791         ;;
2792 esac
2793
2794 case "$fn" in
2795 *:*)
2796         loc_file=`expr $fn : '.*:\(.*\)'`
2797         fn=`expr $fn : '\(.*\):.*'`
2798         ;;
2799 esac
2800
2801 case "$fn" in
2802 *~*) tilde=true;;
2803 esac
2804 case "$fn" in
2805 */*) fullpath=true;;
2806 esac
2807 case "$fn" in
2808 *+*) skip=true;;
2809 esac
2810 case "$fn" in
2811 *n*) none_ok=true;;
2812 esac
2813 case "$fn" in
2814 *e*) exp_file=true;;
2815 esac
2816 case "$fn" in
2817 *p*) nopath_ok=true;;
2818 esac
2819
2820 case "$fn" in
2821 *f*) type='File';;
2822 *d*) type='Directory';;
2823 *l*) type='Locate';;
2824 esac
2825
2826 what="$type"
2827 case "$what" in
2828 Locate) what='File';;
2829 esac
2830
2831 case "$exp_file" in
2832 '')
2833         case "$d_portable" in
2834         "$define") ;;
2835         *) exp_file=true;;
2836         esac
2837         ;;
2838 esac
2839
2840 cd ..
2841 while test "$type"; do
2842         redo=''
2843         rp="$orig_rp"
2844         dflt="$orig_dflt"
2845         case "$tilde" in
2846         true) rp="$rp (~name ok)";;
2847         esac
2848         . UU/myread
2849         if test -f UU/getfile.ok && \
2850                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
2851         then
2852                 value="$ans"
2853                 ansexp="$ans"
2854                 break
2855         fi
2856         case "$ans" in
2857         none)
2858                 value=''
2859                 ansexp=''
2860                 case "$none_ok" in
2861                 true) type='';;
2862                 esac
2863                 ;;
2864         *)
2865                 case "$tilde" in
2866                 '') value="$ans"
2867                         ansexp="$ans";;
2868                 *)
2869                         value=`UU/filexp $ans`
2870                         case $? in
2871                         0)
2872                                 if test "$ans" != "$value"; then
2873                                         echo "(That expands to $value on this system.)"
2874                                 fi
2875                                 ;;
2876                         *) value="$ans";;
2877                         esac
2878                         ansexp="$value"
2879                         case "$exp_file" in
2880                         '') value="$ans";;
2881                         esac
2882                         ;;
2883                 esac
2884                 case "$fullpath" in
2885                 true)
2886                         case "$ansexp" in
2887                         /*) value="$ansexp" ;;
2888                         *)
2889                                 redo=true
2890                                 case "$already" in
2891                                 true)
2892                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
2893                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
2894                                         ;;
2895                                 *)
2896                                 echo "Please give a full path name, starting with slash." >&4
2897                                         case "$tilde" in
2898                                         true)
2899                                 echo "Note that using ~name is ok provided it expands well." >&4
2900                                                 already=true
2901                                                 ;;
2902                                         esac
2903                                 esac
2904                                 ;;
2905                         esac
2906                         ;;
2907                 esac
2908                 case "$redo" in
2909                 '')
2910                         case "$type" in
2911                         File)
2912                                 if test -f "$ansexp"; then
2913                                         type=''
2914                                 elif test -r "$ansexp" || (test -h "$ansexp") >/dev/null 2>&1
2915                                 then
2916                                         echo "($value is not a plain file, but that's ok.)"
2917                                         type=''
2918                                 fi
2919                                 ;;
2920                         Directory)
2921                                 if test -d "$ansexp"; then
2922                                         type=''
2923                                 fi
2924                                 ;;
2925                         Locate)
2926                                 if test -d "$ansexp"; then
2927                                         echo "(Looking for $loc_file in directory $value.)"
2928                                         value="$value/$loc_file"
2929                                         ansexp="$ansexp/$loc_file"
2930                                 fi
2931                                 if test -f "$ansexp"; then
2932                                         type=''
2933                                 fi
2934                                 case "$nopath_ok" in
2935                                 true)   case "$value" in
2936                                         */*) ;;
2937                                         *)      echo "Assuming $value will be in people's path."
2938                                                 type=''
2939                                                 ;;
2940                                         esac
2941                                         ;;
2942                                 esac
2943                                 ;;
2944                         esac
2945
2946                         case "$skip" in
2947                         true) type='';
2948                         esac
2949
2950                         case "$type" in
2951                         '') ;;
2952                         *)
2953                                 if test "$fastread" = yes; then
2954                                         dflt=y
2955                                 else
2956                                         dflt=n
2957                                 fi
2958                                 rp="$what $value doesn't exist.  Use that name anyway?"
2959                                 . UU/myread
2960                                 dflt=''
2961                                 case "$ans" in
2962                                 y*) type='';;
2963                                 *) echo " ";;
2964                                 esac
2965                                 ;;
2966                         esac
2967                         ;;
2968                 esac
2969                 ;;
2970         esac
2971 done
2972 cd UU
2973 ans="$value"
2974 rp="$orig_rp"
2975 dflt="$orig_dflt"
2976 rm -f getfile.ok
2977 EOSC
2978
2979 : determine root of directory hierarchy where package will be installed.
2980 case "$prefix" in
2981 '')
2982         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
2983         ;;
2984 *)
2985         dflt="$prefix"
2986         ;;
2987 esac
2988 $cat <<EOM
2989
2990 By default, $package will be installed in $dflt/bin, manual
2991 pages under $dflt/man, etc..., i.e. with $dflt as prefix for
2992 all installation directories. Typically set to /usr/local, but you
2993 may choose /usr if you wish to install $package among your system
2994 binaries. If you wish to have binaries under /bin but manual pages
2995 under /usr/local/man, that's ok: you will be prompted separately
2996 for each of the installation directories, the prefix being only used
2997 to set the defaults.
2998
2999 EOM
3000 fn=d~
3001 rp='Installation prefix to use?'
3002 . ./getfile
3003 oldprefix=''
3004 case "$prefix" in
3005 '') ;;
3006 *)
3007         case "$ans" in
3008         "$prefix") ;;
3009         *) oldprefix="$prefix";;
3010         esac
3011         ;;
3012 esac
3013 prefix="$ans"
3014 prefixexp="$ansexp"
3015
3016 : set the prefixit variable, to compute a suitable default value
3017 prefixit='case "$3" in
3018 ""|none)
3019         case "$oldprefix" in
3020         "") eval "$1=\"\$$2\"";;
3021         *)
3022                 case "$3" in
3023                 "") eval "$1=";;
3024                 none)
3025                         eval "tp=\"\$$2\"";
3026                         case "$tp" in
3027                         ""|" ") eval "$1=\"\$$2\"";;
3028                         *) eval "$1=";;
3029                         esac;;
3030                 esac;;
3031         esac;;
3032 *)
3033         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
3034         case "$tp" in
3035         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
3036         /*-$oldprefix/*|\~*-$oldprefix/*)
3037                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
3038         *) eval "$1=\"\$$2\"";;
3039         esac;;
3040 esac'
3041
3042 : set the base revision
3043 baserev=5.0
3044
3045 : get the patchlevel
3046 echo " "
3047 echo "Getting the current patchlevel..." >&4
3048 if $test -r $rsrc/patchlevel.h;then
3049         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
3050         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
3051 else
3052         patchlevel=0
3053         subversion=0
3054 fi
3055 $echo $n "(You have $package" $c
3056 case "$package" in
3057 "*$baserev")    ;;
3058 *)              $echo $n " $baserev" $c ;;
3059 esac
3060 $echo $n " patchlevel $patchlevel" $c
3061 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
3062 echo ".)"
3063
3064 if test 0 -eq "$subversion"; then
3065         version=`LC_ALL=C; export LC_ALL; \
3066                  echo $baserev $patchlevel | \
3067                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3068 else
3069         version=`LC_ALL=C; export LC_ALL; \
3070                  echo $baserev $patchlevel $subversion | \
3071                  $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
3072 fi
3073 : Figure out perl API version.  Perhaps this should be in patchlevel.h
3074 if test "$subversion" -lt 50; then
3075         apiversion=`LC_ALL=C; export LC_ALL; \
3076                  LANGUAGE=C; export LANGUAGE; \
3077                  echo $baserev $patchlevel | \
3078                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3079 else
3080         apiversion="$version"
3081 fi
3082
3083 : determine where private library files go
3084 : Usual default is /usr/local/lib/perl5/$version.
3085 : Also allow things like /opt/perl/lib/$version, since 
3086 : /opt/perl/lib/perl5... would be redundant.
3087 case "$prefix" in
3088 *perl*) set dflt privlib lib/$version ;;
3089 *)       set dflt privlib lib/$package/$version ;;
3090 esac
3091 eval $prefixit
3092 $cat <<EOM
3093
3094 There are some auxiliary files for $package that need to be put into a
3095 private library directory that is accessible by everyone.
3096
3097 EOM
3098 fn=d~+
3099 rp='Pathname where the private library files will reside?'
3100 . ./getfile
3101 if $test "X$privlibexp" != "X$ansexp"; then
3102         installprivlib=''
3103 fi
3104 privlib="$ans"
3105 privlibexp="$ansexp"
3106 if $afs; then
3107         $cat <<EOM
3108
3109 Since you are running AFS, I need to distinguish the directory in which
3110 private files reside from the directory in which they are installed (and from
3111 which they are presumably copied to the former directory by occult means).
3112
3113 EOM
3114         case "$installprivlib" in
3115         '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
3116         *) dflt="$installprivlib";;
3117         esac
3118         fn=de~
3119         rp='Where will private files be installed?'
3120         . ./getfile
3121         installprivlib="$ans"
3122 else
3123         installprivlib="$privlibexp"
3124 fi
3125
3126 : set the prefixup variable, to restore leading tilda escape
3127 prefixup='case "$prefixexp" in
3128 "$prefix") ;;
3129 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
3130 esac'
3131
3132 : determine where public architecture dependent libraries go
3133 set archlib archlib
3134 eval $prefixit
3135 : privlib default is /usr/local/lib/$package/$version
3136 : archlib default is /usr/local/lib/$package/$version/$archname
3137 : privlib may have an optional trailing /share.
3138 tdflt=`echo $privlib | $sed 's,/share$,,'`
3139 tdflt=$tdflt/$archname
3140 case "$archlib" in
3141 '')     dflt=$tdflt
3142         ;;
3143 *)      dflt="$archlib"
3144     ;;
3145 esac
3146 cat <<EOM
3147
3148 $spackage contains architecture-dependent library files.  If you are
3149 sharing libraries in a heterogeneous environment, you might store
3150 these files in a separate location.  Otherwise, you can just include
3151 them with the rest of the public library files.
3152
3153 EOM
3154 fn=d+~
3155 rp='Where do you want to put the public architecture-dependent libraries?'
3156 . ./getfile
3157 archlib="$ans"
3158 archlibexp="$ansexp"
3159
3160 if $afs; then
3161         $cat <<EOM
3162
3163 Since you are running AFS, I need to distinguish the directory in
3164 which architecture-dependent library files reside from the directory
3165 in which they are installed (and from which they are presumably copied
3166 to the former directory by occult means).
3167
3168 EOM
3169         case "$installarchlib" in
3170         '') dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;;
3171         *) dflt="$installarchlib";;
3172         esac
3173         fn=de~
3174         rp='Where will architecture-dependent library files be installed?'
3175         . ./getfile
3176         installarchlib="$ans"
3177 else
3178         installarchlib="$archlibexp"
3179 fi
3180 if $test X"$archlib" = X"$privlib"; then
3181         d_archlib="$undef"
3182 else
3183         d_archlib="$define"
3184 fi
3185
3186 : make some quick guesses about what we are up against
3187 echo " "
3188 $echo $n "Hmm...  $c"
3189 echo exit 1 >bsd
3190 echo exit 1 >usg
3191 echo exit 1 >v7
3192 echo exit 1 >osf1
3193 echo exit 1 >eunice
3194 echo exit 1 >xenix
3195 echo exit 1 >venix
3196 echo exit 1 >os2
3197 d_bsd="$undef"
3198 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3199 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3200 then
3201         echo "Looks kind of like an OSF/1 system, but we'll see..."
3202         echo exit 0 >osf1
3203 elif test `echo abc | tr a-z A-Z` = Abc ; then
3204         xxx=`./loc addbib blurfl $pth`
3205         if $test -f $xxx; then
3206         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3207                 echo exit 0 >bsd
3208                 echo exit 0 >usg
3209         else
3210                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3211                         echo "Looks kind of like an extended USG system, but we'll see..."
3212                 else
3213                         echo "Looks kind of like a USG system, but we'll see..."
3214                 fi
3215                 echo exit 0 >usg
3216         fi
3217 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3218         echo "Looks kind of like a BSD system, but we'll see..."
3219         d_bsd="$define"
3220         echo exit 0 >bsd
3221 else
3222         echo "Looks kind of like a Version 7 system, but we'll see..."
3223         echo exit 0 >v7
3224 fi
3225 case "$eunicefix" in
3226 *unixtovms*)
3227         $cat <<'EOI'
3228 There is, however, a strange, musty smell in the air that reminds me of
3229 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3230 EOI
3231         echo exit 0 >eunice
3232         d_eunice="$define"
3233 : it so happens the Eunice I know will not run shell scripts in Unix format
3234         ;;
3235 *)
3236         echo " "
3237         echo "Congratulations.  You aren't running Eunice."
3238         d_eunice="$undef"
3239         ;;
3240 esac
3241 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3242 case "$p_" in
3243 :) ;;
3244 *)
3245         $cat <<'EOI'
3246 I have the feeling something is not exactly right, however...don't tell me...
3247 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3248 EOI
3249         echo exit 0 >os2
3250         ;;
3251 esac
3252 if test -f /xenix; then
3253         echo "Actually, this looks more like a XENIX system..."
3254         echo exit 0 >xenix
3255         d_xenix="$define"
3256 else
3257         echo " "
3258         echo "It's not Xenix..."
3259         d_xenix="$undef"
3260 fi
3261 chmod +x xenix
3262 $eunicefix xenix
3263 if test -f /venix; then
3264         echo "Actually, this looks more like a VENIX system..."
3265         echo exit 0 >venix
3266 else
3267         echo " "
3268         if ./xenix; then
3269                 : null
3270         else
3271                 echo "Nor is it Venix..."
3272         fi
3273 fi
3274 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3275 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3276 $rm -f foo
3277
3278 : see if setuid scripts can be secure
3279 $cat <<EOM
3280
3281 Some kernels have a bug that prevents setuid #! scripts from being
3282 secure.  Some sites have disabled setuid #! scripts because of this.
3283
3284 First let's decide if your kernel supports secure setuid #! scripts.
3285 (If setuid #! scripts would be secure but have been disabled anyway,
3286 don't say that they are secure if asked.)
3287
3288 EOM
3289
3290 val="$undef"
3291 if $test -d /dev/fd; then
3292         echo "#!$ls" >reflect
3293         chmod +x,u+s reflect
3294         ./reflect >flect 2>&1
3295         if $contains "/dev/fd" flect >/dev/null; then
3296                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
3297                 val="$define"
3298         else
3299                 $cat <<EOM
3300 If you are not sure if they are secure, I can check but I'll need a
3301 username and password different from the one you are using right now.
3302 If you don't have such a username or don't want me to test, simply
3303 enter 'none'.
3304
3305 EOM
3306                 rp='Other username to test security of setuid scripts with?'
3307                 dflt='none'
3308                 . ./myread
3309                 case "$ans" in
3310                 n|none)
3311                         case "$d_suidsafe" in
3312                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
3313                                 dflt=n;;
3314                         "$undef")
3315                                 echo "Well, the $hint value is *not* secure." >&4
3316                                 dflt=n;;
3317                         *)      echo "Well, the $hint value *is* secure." >&4
3318                                 dflt=y;;
3319                         esac
3320                         ;;
3321                 *)
3322                         $rm -f reflect flect
3323                         echo "#!$ls" >reflect
3324                         chmod +x,u+s reflect
3325                         echo >flect
3326                         chmod a+w flect
3327                         echo '"su" will (probably) prompt you for '"$ans's password."
3328                         su $ans -c './reflect >flect'
3329                         if $contains "/dev/fd" flect >/dev/null; then
3330                                 echo "Okay, it looks like setuid scripts are secure." >&4
3331                                 dflt=y
3332                         else
3333                                 echo "I don't think setuid scripts are secure." >&4
3334                                 dflt=n
3335                         fi
3336                         ;;
3337                 esac
3338                 rp='Does your kernel have *secure* setuid scripts?'
3339                 . ./myread
3340                 case "$ans" in
3341                 [yY]*)  val="$define";;
3342                 *)      val="$undef";;
3343                 esac
3344         fi
3345 else
3346         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
3347         echo "(That's for file descriptors, not floppy disks.)"
3348         val="$undef"
3349 fi
3350 set d_suidsafe
3351 eval $setvar
3352
3353 $rm -f reflect flect
3354
3355 : now see if they want to do setuid emulation
3356 echo " "
3357 val="$undef"
3358 case "$d_suidsafe" in
3359 "$define")
3360         val="$undef"
3361         echo "No need to emulate SUID scripts since they are secure here." >& 4
3362         ;;
3363 *)
3364         $cat <<EOM
3365 Some systems have disabled setuid scripts, especially systems where
3366 setuid scripts cannot be secure.  On systems where setuid scripts have
3367 been disabled, the setuid/setgid bits on scripts are currently
3368 useless.  It is possible for $package to detect those bits and emulate
3369 setuid/setgid in a secure fashion.  This emulation will only work if
3370 setuid scripts have been disabled in your kernel.
3371
3372 EOM
3373         case "$d_dosuid" in
3374         "$define") dflt=y ;;
3375         *) dflt=n ;;
3376         esac
3377         rp="Do you want to do setuid/setgid emulation?"
3378         . ./myread
3379         case "$ans" in
3380         [yY]*)  val="$define";;
3381         *)      val="$undef";;
3382         esac
3383         ;;
3384 esac
3385 set d_dosuid
3386 eval $setvar
3387
3388 : determine where manual pages are on this system
3389 echo " "
3390 case "$sysman" in
3391 '') 
3392         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
3393         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
3394         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
3395         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
3396         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
3397         sysman=`./loc . /usr/man/man1 $syspath`
3398         ;;
3399 esac
3400 if $test -d "$sysman"; then
3401         echo "System manual is in $sysman." >&4
3402 else
3403         echo "Could not find manual pages in source form." >&4
3404 fi
3405
3406 : see what memory models we can support
3407 case "$models" in
3408 '')
3409         $cat >pdp11.c <<'EOP'
3410 int main() {
3411 #ifdef pdp11
3412         exit(0);
3413 #else
3414         exit(1);
3415 #endif
3416 }
3417 EOP
3418         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
3419         if $test -f pdp11 && ./pdp11 2>/dev/null; then
3420                 dflt='unsplit split'
3421         else
3422                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
3423                 case "$tans" in
3424                 X) dflt='none';;
3425                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
3426                                 dflt='small'
3427                         else
3428                                 dflt=''
3429                         fi
3430                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
3431                                 dflt="$dflt medium"
3432                         fi
3433                         if $test -d /lib/large || $test -d /usr/lib/large; then
3434                                 dflt="$dflt large"
3435                         fi
3436                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
3437                                 dflt="$dflt huge"
3438                         fi
3439                 esac
3440         fi;;
3441 *) dflt="$models";;
3442 esac
3443 $cat <<EOM
3444  
3445 Some systems have different model sizes.  On most systems they are called
3446 small, medium, large, and huge.  On the PDP11 they are called unsplit and
3447 split.  If your system doesn't support different memory models, say "none".
3448 If you wish to force everything to one memory model, say "none" here and
3449 put the appropriate flags later when it asks you for other cc and ld flags.
3450 Venix systems may wish to put "none" and let the compiler figure things out.
3451 (In the following question multiple model names should be space separated.)
3452
3453 The default for most systems is "none".
3454
3455 EOM
3456 rp="Which memory models are supported?"
3457 . ./myread
3458 models="$ans"
3459
3460 case "$models" in
3461 none)
3462         small=''
3463         medium=''
3464         large=''
3465         huge=''
3466         unsplit=''
3467         split=''
3468         ;;
3469 *split)
3470         case "$split" in
3471         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
3472                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
3473                         dflt='-i'
3474                 else
3475                         dflt='none'
3476                 fi;;
3477         *) dflt="$split";;
3478         esac
3479         rp="What flag indicates separate I and D space?"
3480         . ./myread
3481         tans="$ans"
3482         case "$tans" in
3483         none) tans='';;
3484         esac
3485         split="$tans"
3486         unsplit='';;
3487 *large*|*small*|*medium*|*huge*)
3488         case "$models" in
3489         *large*)
3490                 case "$large" in
3491                 '') dflt='-Ml';;
3492                 *) dflt="$large";;
3493                 esac
3494         rp="What flag indicates large model?"
3495         . ./myread
3496         tans="$ans"
3497         case "$tans" in
3498         none) tans='';
3499         esac
3500         large="$tans";;
3501         *) large='';;
3502         esac
3503         case "$models" in
3504         *huge*) case "$huge" in
3505                 '') dflt='-Mh';;
3506                 *) dflt="$huge";;
3507                 esac
3508                 rp="What flag indicates huge model?"
3509                 . ./myread
3510                 tans="$ans"
3511                 case "$tans" in
3512                 none) tans='';
3513                 esac
3514                 huge="$tans";;
3515         *) huge="$large";;
3516         esac
3517         case "$models" in
3518         *medium*) case "$medium" in
3519                 '') dflt='-Mm';;
3520                 *) dflt="$medium";;
3521                 esac
3522                 rp="What flag indicates medium model?"
3523                 . ./myread
3524                 tans="$ans"
3525                 case "$tans" in
3526                 none) tans='';
3527                 esac
3528                 medium="$tans";;
3529         *) medium="$large";;
3530         esac
3531         case "$models" in
3532         *small*) case "$small" in
3533                 '') dflt='none';;
3534                 *) dflt="$small";;
3535                 esac
3536                 rp="What flag indicates small model?"
3537                 . ./myread
3538                 tans="$ans"
3539                 case "$tans" in
3540                 none) tans='';
3541                 esac
3542                 small="$tans";;
3543         *) small='';;
3544         esac
3545         ;;
3546 *)
3547         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
3548         ;;
3549 esac
3550 $rm -f pdp11.* pdp11
3551
3552 : see if we need a special compiler
3553 echo " "
3554 if ./usg; then
3555         case "$cc" in
3556         '') case "$Mcc" in
3557                 /*) dflt='Mcc';;
3558                 *) case "$large" in
3559                         -M*) dflt='cc';;
3560                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3561                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3562                                                 dflt='cc'
3563                                         else
3564                                                 dflt='cc -M'
3565                                         fi
3566                                 else
3567                                         dflt='cc'
3568                                 fi;;
3569                         esac;;
3570                 esac;;
3571         *)  dflt="$cc";;
3572         esac
3573         case "$dflt" in
3574         *M*)    $cat <<'EOM'
3575 On some older systems the default C compiler will not resolve multiple global
3576 references that happen to have the same name.  On some such systems the "Mcc"
3577 command may be used to force these to be resolved.  On other systems a "cc -M"
3578 command is required.  (Note that the -M flag on other systems indicates a
3579 memory model to use!) If you have the Gnu C compiler, you might wish to use
3580 that instead.
3581
3582 EOM
3583         ;;
3584         esac
3585         rp="Use which C compiler?"
3586         . ./myread
3587         cc="$ans"
3588 else
3589         case "$cc" in
3590         '') dflt=cc;;
3591         *) dflt="$cc";;
3592         esac
3593         rp="Use which C compiler?"
3594         . ./myread
3595         cc="$ans"
3596 fi
3597 : Look for a hint-file generated 'call-back-unit'.  Now that the
3598 : user has specified the compiler, we may need to set or change some
3599 : other defaults.
3600 if $test -f cc.cbu; then
3601     . ./cc.cbu
3602 fi
3603 echo " "
3604 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3605 $cat >gccvers.c <<EOM
3606 #include <stdio.h>
3607 int main() {
3608 #ifdef __GNUC__
3609 #ifdef __VERSION__
3610         printf("%s\n", __VERSION__);
3611 #else
3612         printf("%s\n", "1");
3613 #endif
3614 #endif
3615         exit(0);
3616 }
3617 EOM
3618 if $cc -o gccvers gccvers.c >/dev/null 2>&1; then
3619         gccversion=`./gccvers`
3620         case "$gccversion" in
3621         '') echo "You are not using GNU cc." ;;
3622         *)  echo "You are using GNU cc $gccversion." ;;
3623         esac
3624 else
3625         echo " "
3626         echo "*** WHOA THERE!!! ***" >&4
3627         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3628         case "$knowitall" in
3629         '')
3630         echo "    You'd better start hunting for one and let me know about it." >&4
3631                 exit 1
3632                 ;;
3633         esac
3634 fi
3635 $rm -f gccvers*
3636 case "$gccversion" in
3637 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3638 esac
3639
3640 : What should the include directory be ?
3641 echo " "
3642 $echo $n "Hmm...  $c"
3643 dflt='/usr/include'
3644 incpath=''
3645 mips_type=''
3646 if $test -f /bin/mips && /bin/mips; then
3647         echo "Looks like a MIPS system..."
3648         $cat >usr.c <<'EOCP'
3649 #ifdef SYSTYPE_BSD43
3650 /bsd43
3651 #endif
3652 EOCP
3653         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3654                 dflt='/bsd43/usr/include'
3655                 incpath='/bsd43'
3656                 mips_type='BSD 4.3'
3657         else
3658                 mips_type='System V'
3659         fi
3660         $rm -f usr.c usr.out
3661         echo "and you're compiling with the $mips_type compiler and libraries."
3662         xxx_prompt=y
3663         echo "exit 0" >mips
3664 else
3665         echo "Doesn't look like a MIPS system."
3666         xxx_prompt=n
3667         echo "exit 1" >mips
3668 fi
3669 chmod +x mips
3670 $eunicefix mips
3671 case "$usrinc" in
3672 '') ;;
3673 *) dflt="$usrinc";;
3674 esac
3675 case "$xxx_prompt" in
3676 y)      fn=d/
3677         echo " "
3678         rp='Where are the include files you want to use?'
3679         . ./getfile
3680         usrinc="$ans"
3681         ;;
3682 *)      usrinc="$dflt"
3683         ;;
3684 esac
3685
3686 : see how we invoke the C preprocessor
3687 echo " "
3688 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3689 cat <<'EOT' >testcpp.c
3690 #define ABC abc
3691 #define XYZ xyz
3692 ABC.XYZ
3693 EOT
3694 cd ..
3695 if test ! -f cppstdin; then
3696         echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3697 else
3698         echo "Keeping your $hint cppstdin wrapper."
3699 fi
3700 chmod 755 cppstdin
3701 wrapper=`pwd`/cppstdin
3702 ok='false'
3703 cd UU
3704
3705 if $test "X$cppstdin" != "X" && \
3706         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3707         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3708 then
3709         echo "You used to use $cppstdin $cppminus so we'll use that again."
3710         case "$cpprun" in
3711         '') echo "But let's see if we can live without a wrapper..." ;;
3712         *)
3713                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3714                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3715                 then
3716                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3717                         ok='true'
3718                 else
3719                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3720                 fi
3721                 ;;
3722         esac
3723 else
3724         case "$cppstdin" in
3725         '') ;;
3726         *)
3727                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3728                 ;;
3729         esac
3730 fi
3731
3732 if $ok; then
3733         : nothing
3734 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3735         $cc -E <testcpp.c >testcpp.out 2>&1; \
3736         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3737         echo "Yup, it does."
3738         x_cpp="$cc -E"
3739         x_minus='';
3740 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3741         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3742         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3743         echo "Yup, it does."
3744         x_cpp="$cc -E"
3745         x_minus='-';
3746 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3747         $cc -P <testcpp.c >testcpp.out 2>&1; \
3748         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3749         echo "Yipee, that works!"
3750         x_cpp="$cc -P"
3751         x_minus='';
3752 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3753         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3754         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3755         echo "At long last!"
3756         x_cpp="$cc -P"
3757         x_minus='-';
3758 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3759         $cpp <testcpp.c >testcpp.out 2>&1; \
3760         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3761         echo "It works!"
3762         x_cpp="$cpp"
3763         x_minus='';
3764 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3765         $cpp - <testcpp.c >testcpp.out 2>&1; \
3766         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3767         echo "Hooray, it works!  I was beginning to wonder."
3768         x_cpp="$cpp"
3769         x_minus='-';
3770 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3771         $wrapper <testcpp.c >testcpp.out 2>&1; \
3772         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3773         x_cpp="$wrapper"
3774         x_minus=''
3775         echo "Eureka!"
3776 else
3777         dflt=''
3778         rp="No dice.  I can't find a C preprocessor.  Name one:"
3779         . ./myread
3780         x_cpp="$ans"
3781         x_minus=''
3782         $x_cpp <testcpp.c >testcpp.out 2>&1
3783         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3784                 echo "OK, that will do." >&4
3785         else
3786 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3787                 exit 1
3788         fi
3789 fi
3790
3791 case "$ok" in
3792 false)
3793         cppstdin="$x_cpp"
3794         cppminus="$x_minus"
3795         cpprun="$x_cpp"
3796         cpplast="$x_minus"
3797         set X $x_cpp
3798         shift
3799         case "$1" in
3800         "$cpp")
3801                 echo "Perhaps can we force $cc -E using a wrapper..."
3802                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3803                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3804                 then
3805                         echo "Yup, we can."
3806                         cppstdin="$wrapper"
3807                         cppminus='';
3808                 else
3809                         echo "Nope, we'll have to live without it..."
3810                 fi
3811                 ;;
3812         esac
3813         case "$cpprun" in
3814         "$wrapper")
3815                 cpprun=''
3816                 cpplast=''
3817                 ;;
3818         esac
3819         ;;
3820 esac
3821
3822 case "$cppstdin" in
3823 "$wrapper"|'cppstdin') ;;
3824 *) $rm -f $wrapper;;
3825 esac
3826 $rm -f testcpp.c testcpp.out
3827
3828 : Set private lib path
3829 case "$plibpth" in
3830 '') if ./mips; then
3831                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3832         fi;;
3833 esac
3834 case "$libpth" in
3835 ' ') dlist='';;
3836 '') dlist="$loclibpth $plibpth $glibpth";;
3837 *) dlist="$libpth";;
3838 esac
3839
3840 : Now check and see which directories actually exist, avoiding duplicates
3841 libpth=''
3842 for xxx in $dlist
3843 do
3844     if $test -d $xxx; then
3845                 case " $libpth " in
3846                 *" $xxx "*) ;;
3847                 *) libpth="$libpth $xxx";;
3848                 esac
3849     fi
3850 done
3851 $cat <<'EOM'
3852
3853 Some systems have incompatible or broken versions of libraries.  Among
3854 the directories listed in the question below, please remove any you
3855 know not to be holding relevant libraries, and add any that are needed.
3856 Say "none" for none.
3857
3858 EOM
3859 case "$libpth" in
3860 '') dflt='none';;
3861 *)
3862         set X $libpth
3863         shift
3864         dflt=${1+"$@"}
3865         ;;
3866 esac
3867 rp="Directories to use for library searches?"
3868 . ./myread
3869 case "$ans" in
3870 none) libpth=' ';;
3871 *) libpth="$ans";;
3872 esac
3873
3874 : compute shared library extension
3875 case "$so" in
3876 '')
3877         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3878                 dflt='sl'
3879         else
3880                 dflt='so'
3881         fi
3882         ;;
3883 *) dflt="$so";;
3884 esac
3885 $cat <<EOM
3886
3887 On some systems, shared libraries may be available.  Answer 'none' if
3888 you want to suppress searching of shared libraries for the remaining
3889 of this configuration.
3890
3891 EOM
3892 rp='What is the file extension used for shared libraries?'
3893 . ./myread
3894 so="$ans"
3895
3896 : Define several unixisms.
3897 : Hints files or command line option can be used to override them.
3898 : The convoluted testing is in case hints files set either the old
3899 : or the new name.
3900 case "$_exe" in
3901 '')     case "$exe_ext" in
3902     '') ;;
3903         *)      _exe="$exe_ext" ;;
3904         esac
3905         ;;
3906 esac
3907 case "$_a" in
3908 '')     case "$lib_ext" in
3909     '') _a='.a';;
3910         *)      _a="$lib_ext" ;;
3911         esac
3912         ;;
3913 esac
3914 case "$_o" in
3915 '') case "$obj_ext" in
3916         '')     _o='.o';;
3917         *)      _o="$obj_ext";;
3918         esac
3919         ;;
3920 esac
3921 case "$p_" in
3922 '') case "$path_sep" in
3923         '')     p_=':';;
3924         *)      p_="$path_sep";;
3925         esac
3926         ;;
3927 esac
3928 exe_ext=$_exe
3929 lib_ext=$_a
3930 obj_ext=$_o
3931 path_sep=$p_
3932
3933 : Which makefile gets called first.  This is used by make depend.
3934 case "$firstmakefile" in
3935 '') firstmakefile='makefile';;
3936 esac
3937
3938 : Looking for optional libraries
3939 echo " "
3940 echo "Checking for optional libraries..." >&4
3941 case "$libs" in
3942 ' '|'') dflt='';;
3943 *) dflt="$libs";;
3944 esac
3945 case "$libswanted" in
3946 '') libswanted='c_s';;
3947 esac
3948 for thislib in $libswanted; do
3949         
3950         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
3951                 $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3952                 echo "Found -l$thislib (shared)."
3953                 case " $dflt " in
3954                 *"-l$thislib "*);;
3955                 *) dflt="$dflt -l$thislib";;
3956                 esac
3957         elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
3958                 echo "Found -l$thislib (shared)."
3959                 case " $dflt " in
3960                 *"-l$thislib "*);;
3961                 *) dflt="$dflt -l$thislib";;
3962                 esac
3963         elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
3964                 echo "Found -l$thislib."
3965                 case " $dflt " in
3966                 *"-l$thislib "*);;
3967                 *) dflt="$dflt -l$thislib";;
3968                 esac
3969         elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
3970                 echo "Found -l$thislib."
3971                 case " $dflt " in
3972                 *"-l$thislib "*);;
3973                 *) dflt="$dflt -l$thislib";;
3974                 esac
3975         elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
3976                 echo "Found -l${thislib}_s."
3977                 case " $dflt " in
3978                 *"-l$thislib "*);;
3979                 *) dflt="$dflt -l${thislib}_s";;
3980                 esac
3981         elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
3982                 echo "Found -l$thislib."
3983                 case " $dflt " in
3984                 *"-l$thislib "*);;
3985                 *) dflt="$dflt -l$thislib";;
3986                 esac
3987         else
3988                 echo "No -l$thislib."
3989         fi
3990 done
3991 set X $dflt
3992 shift
3993 dflt="$*"
3994 case "$libs" in
3995 '') dflt="$dflt";;
3996 *) dflt="$libs";;
3997 esac
3998 case "$dflt" in
3999 ' '|'') dflt='none';;
4000 esac
4001
4002 $cat <<EOM
4003  
4004 Some versions of Unix support shared libraries, which make executables smaller
4005 but make load time slightly longer.
4006
4007 On some systems, mostly System V Release 3's, the shared library is included
4008 by putting the option "-lc_s" as the last thing on the cc command line when
4009 linking.  Other systems use shared libraries by default.  There may be other
4010 libraries needed to compile $package on your machine as well.  If your system
4011 needs the "-lc_s" option, include it here.  Include any other special libraries
4012 here as well.  Say "none" for none.
4013 EOM
4014
4015 echo " "
4016 rp="Any additional libraries?"
4017 . ./myread
4018 case "$ans" in
4019 none) libs=' ';;
4020 *) libs="$ans";;
4021 esac
4022
4023 : determine optimize, if desired, or use for debug flag also
4024 case "$optimize" in
4025 ' '|$undef) dflt='none';;
4026 '') dflt='-O';;
4027 *) dflt="$optimize";;
4028 esac
4029 $cat <<EOH
4030
4031 Some C compilers have problems with their optimizers.  By default, $package
4032 compiles with the -O flag to use the optimizer.  Alternately, you might want
4033 to use the symbolic debugger, which uses the -g flag (on traditional Unix
4034 systems).  Either flag can be specified here.  To use neither flag, specify
4035 the word "none".
4036
4037 EOH
4038 rp="What optimizer/debugger flag should be used?"
4039 . ./myread
4040 optimize="$ans"
4041 case "$optimize" in
4042 'none') optimize=" ";;
4043 esac
4044
4045 dflt=''
4046 : We will not override a previous value, but we might want to
4047 : augment a hint file
4048 case "$hint" in
4049 none|recommended)
4050         case "$gccversion" in
4051         1*) dflt='-fpcc-struct-return' ;;
4052         esac
4053         case "$optimize" in
4054         *-g*) dflt="$dflt -DDEBUGGING";;
4055         esac
4056         case "$gccversion" in
4057         2*) if test -d /etc/conf/kconfig.d &&
4058                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4059                 then
4060                         dflt="$dflt -posix"
4061                 fi
4062                 ;;
4063         esac
4064         ;;
4065 esac
4066
4067 case "$mips_type" in
4068 *BSD*|'') inclwanted="$locincpth $usrinc";;
4069 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4070 esac
4071 for thisincl in $inclwanted; do
4072         if $test -d $thisincl; then
4073                 if $test x$thisincl != x$usrinc; then
4074                         case "$dflt" in
4075                         *$thisincl*);;
4076                         *) dflt="$dflt -I$thisincl";;
4077                         esac
4078                 fi
4079         fi
4080 done
4081
4082 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4083         xxx=true;
4084 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4085         xxx=true;
4086 else
4087         xxx=false;
4088 fi;
4089 if $xxx; then
4090         case "$dflt" in
4091         *$2*);;
4092         *) dflt="$dflt -D$2";;
4093         esac;
4094 fi'
4095
4096 set signal.h LANGUAGE_C; eval $inctest
4097
4098 case "$hint" in
4099 none|recommended) dflt="$ccflags $dflt" ;;
4100 *) dflt="$ccflags";;
4101 esac
4102
4103 case "$dflt" in
4104 ''|' ') dflt=none;;
4105 esac
4106 $cat <<EOH
4107
4108 Your C compiler may want other flags.  For this question you should include
4109 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4110 but you should NOT include libraries or ld flags like -lwhatever.  If you
4111 want $package to honor its debug switch, you should include -DDEBUGGING here.
4112 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4113
4114 To use no flags, specify the word "none".
4115
4116 EOH
4117 set X $dflt
4118 shift
4119 dflt=${1+"$@"}
4120 rp="Any additional cc flags?"
4121 . ./myread
4122 case "$ans" in
4123 none) ccflags='';;
4124 *) ccflags="$ans";;
4125 esac
4126
4127 : the following weeds options from ccflags that are of no interest to cpp
4128 cppflags="$ccflags"
4129 case "$gccversion" in
4130 1*) cppflags="$cppflags -D__GNUC__"
4131 esac
4132 case "$mips_type" in
4133 '');;
4134 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4135 esac
4136 case "$cppflags" in
4137 '');;
4138 *)
4139         echo " "
4140         echo "Let me guess what the preprocessor flags are..." >&4
4141         set X $cppflags
4142         shift
4143         cppflags=''
4144         $cat >cpp.c <<'EOM'
4145 #define BLURFL foo
4146
4147 BLURFL xx LFRULB
4148 EOM
4149         previous=''
4150         for flag in $*
4151         do
4152                 case "$flag" in
4153                 -*) ftry="$flag";;
4154                 *) ftry="$previous $flag";;
4155                 esac
4156                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4157                         >cpp1.out 2>/dev/null && \
4158                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4159                         >cpp2.out 2>/dev/null && \
4160                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4161                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4162                 then
4163                         cppflags="$cppflags $ftry"
4164                         previous=''
4165                 else
4166                         previous="$flag"
4167                 fi
4168         done
4169         set X $cppflags
4170         shift
4171         cppflags=${1+"$@"}
4172         case "$cppflags" in
4173         *-*)  echo "They appear to be: $cppflags";;
4174         esac
4175         $rm -f cpp.c cpp?.out
4176         ;;
4177 esac
4178
4179 : flags used in final linking phase
4180 case "$ldflags" in
4181 '') if ./venix; then
4182                 dflt='-i -z'
4183         else
4184                 dflt=''
4185         fi
4186         case "$ccflags" in
4187         *-posix*) dflt="$dflt -posix" ;;
4188         esac
4189         ;;
4190 *) dflt="$ldflags";;
4191 esac
4192
4193 : Try to guess additional flags to pick up local libraries.
4194 for thislibdir in $libpth; do
4195         case " $loclibpth " in
4196         *" $thislibdir "*)
4197                 case "$dflt " in 
4198                 *"-L$thislibdir "*) ;;
4199                 *)  dflt="$dflt -L$thislibdir" ;;
4200                 esac
4201                 ;;
4202         esac
4203 done
4204
4205 case "$dflt" in
4206 '') dflt='none' ;;
4207 esac
4208
4209 $cat <<EOH
4210
4211 Your C linker may need flags.  For this question you should
4212 include -L/whatever and any other flags used by the C linker, but you
4213 should NOT include libraries like -lwhatever.
4214
4215 Make sure you include the appropriate -L/path flags if your C linker
4216 does not normally search all of the directories you specified above,
4217 namely
4218         $libpth
4219 To use no flags, specify the word "none".
4220
4221 EOH
4222
4223 rp="Any additional ld flags (NOT including libraries)?"
4224 . ./myread
4225 case "$ans" in
4226 none) ldflags='';;
4227 *) ldflags="$ans";;
4228 esac
4229 rmlist="$rmlist pdp11"
4230
4231 : coherency check
4232 echo " "
4233 echo "Checking your choice of C compiler and flags for coherency..." >&4
4234 $cat > try.c <<'EOF'
4235 #include <stdio.h>
4236 int main() { printf("Ok\n"); exit(0); }
4237 EOF
4238 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4239 shift
4240 $cat >try.msg <<'EOM'
4241 I've tried to compile and run the following simple program:
4242
4243 EOM
4244 $cat try.c >> try.msg
4245
4246 $cat >> try.msg <<EOM
4247
4248 I used the command:
4249
4250         $*
4251         ./try
4252
4253 and I got the following output:
4254
4255 EOM
4256 dflt=y
4257 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4258         if sh -c './try' >>try.msg 2>&1; then
4259                 xxx=`./try`
4260                 case "$xxx" in
4261                 "Ok") dflt=n ;;
4262                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4263                         case " $libs " in
4264                         *" -lsfio "*)
4265                                 cat >> try.msg <<'EOQS'
4266 If $libs contains -lsfio, and sfio is mis-configured, then it
4267 sometimes (apparently) runs and exits with a 0 status, but with no
4268 output!  It may have to do with sfio's use of _exit vs. exit.
4269
4270 EOQS
4271                                 rp="You have a big problem.  Shall I abort Configure"
4272                                 dflt=y
4273                                 ;;
4274                         esac
4275                         ;;
4276                 esac
4277         else
4278                 echo "The program compiled OK, but exited with status $?." >>try.msg
4279                 rp="You have a problem.  Shall I abort Configure"
4280                 dflt=y
4281         fi
4282 else
4283         echo "I can't compile the test program." >>try.msg
4284         rp="You have a BIG problem.  Shall I abort Configure"
4285         dflt=y
4286 fi
4287 case "$dflt" in
4288 y)
4289         $cat try.msg >&4
4290         case "$knowitall" in
4291         '')
4292                 echo "(The supplied flags or libraries might be incorrect.)"
4293                 ;;
4294         *) dflt=n;;
4295         esac
4296         echo " "
4297         . ./myread
4298         case "$ans" in
4299         n*|N*) ;;
4300         *)      echo "Ok.  Stopping Configure." >&4
4301                 exit 1
4302                 ;;
4303         esac
4304         ;;
4305 n) echo "OK, that should do.";;
4306 esac
4307 $rm -f try try.* core
4308
4309 : determine filename position in cpp output
4310 echo " "
4311 echo "Computing filename position in cpp output for #include directives..." >&4
4312 echo '#include <stdio.h>' > foo.c
4313 $cat >fieldn <<EOF
4314 $startsh
4315 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4316 $grep '^[       ]*#.*stdio\.h' | \
4317 while read cline; do
4318         pos=1
4319         set \$cline
4320         while $test \$# -gt 0; do
4321                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4322                         echo "\$pos"
4323                         exit 0
4324                 fi
4325                 shift
4326                 pos=\`expr \$pos + 1\`
4327         done
4328 done
4329 EOF
4330 chmod +x fieldn
4331 fieldn=`./fieldn`
4332 $rm -f foo.c fieldn
4333 case $fieldn in
4334 '') pos='???';;
4335 1) pos=first;;
4336 2) pos=second;;
4337 3) pos=third;;
4338 *) pos="${fieldn}th";;
4339 esac
4340 echo "Your cpp writes the filename in the $pos field of the line."
4341
4342 : locate header file
4343 $cat >findhdr <<EOF
4344 $startsh
4345 wanted=\$1
4346 name=''
4347 if test -f $usrinc/\$wanted; then
4348         echo "$usrinc/\$wanted"
4349         exit 0
4350 fi
4351 awkprg='{ print \$$fieldn }'
4352 echo "#include <\$wanted>" > foo\$\$.c
4353 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4354 $grep "^[       ]*#.*\$wanted" | \
4355 while read cline; do
4356         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4357         case "\$name" in
4358         */\$wanted) echo "\$name"; exit 0;;
4359         *) name='';;
4360         esac;
4361 done;
4362 $rm -f foo\$\$.c;
4363 case "\$name" in
4364 '') exit 1;;
4365 esac
4366 EOF
4367 chmod +x findhdr
4368
4369 : define an alternate in-header-list? function
4370 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4371 cont=true; xxf="echo \"<\$1> found.\" >&4";
4372 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4373 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4374 esac;
4375 case $# in 4) instead=instead;; *) instead="at last";; esac;
4376 while $test "$cont"; do
4377         xxx=`./findhdr $1`
4378         var=$2; eval "was=\$$2";
4379         if $test "$xxx" && $test -r "$xxx";
4380         then eval $xxf;
4381         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4382                 cont="";
4383         else eval $xxnf;
4384         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4385         set $yyy; shift; shift; yyy=$@;
4386         case $# in 0) cont="";;
4387         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4388                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4389         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4390                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4391         esac;
4392 done;
4393 while $test "$yyy";
4394 do set $yyy; var=$2; eval "was=\$$2";
4395         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4396         set $yyy; shift; shift; yyy=$@;
4397 done'
4398
4399 : see if this is a malloc.h system
4400 set malloc.h i_malloc
4401 eval $inhdr
4402
4403 : see if stdlib is available
4404 set stdlib.h i_stdlib
4405 eval $inhdr
4406
4407 : determine which malloc to compile in
4408 echo " "
4409 case "$usemymalloc" in
4410 ''|[yY]*|true|$define)  dflt='y' ;;
4411 *)      dflt='n' ;;
4412 esac
4413 rp="Do you wish to attempt to use the malloc that comes with $package?"
4414 . ./myread
4415 usemymalloc="$ans"
4416 case "$ans" in
4417 y*|true)
4418         usemymalloc='y'
4419         mallocsrc='malloc.c'
4420         mallocobj="malloc$_o"
4421         d_mymalloc="$define"
4422         case "$libs" in
4423         *-lmalloc*)
4424                 : Remove malloc from list of libraries to use
4425                 echo "Removing unneeded -lmalloc from library list" >&4
4426                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4427                 shift
4428                 libs="$*"
4429                 echo "libs = $libs" >&4
4430                 ;;
4431         esac
4432         ;;
4433 *)
4434         usemymalloc='n'
4435         mallocsrc=''
4436         mallocobj=''
4437         d_mymalloc="$undef"
4438         ;;
4439 esac
4440
4441 : compute the return types of malloc and free
4442 echo " "
4443 $cat >malloc.c <<END
4444 #$i_malloc I_MALLOC
4445 #$i_stdlib I_STDLIB
4446 #include <stdio.h>
4447 #include <sys/types.h>
4448 #ifdef I_MALLOC
4449 #include <malloc.h>
4450 #endif
4451 #ifdef I_STDLIB
4452 #include <stdlib.h>
4453 #endif
4454 #ifdef TRY_MALLOC
4455 void *malloc();
4456 #endif
4457 #ifdef TRY_FREE
4458 void free();
4459 #endif
4460 END
4461 case "$malloctype" in
4462 '')
4463         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4464                 malloctype='void *'
4465         else
4466                 malloctype='char *'
4467         fi
4468         ;;
4469 esac
4470 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4471
4472 case "$freetype" in
4473 '')
4474         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4475                 freetype='void'
4476         else
4477                 freetype='int'
4478         fi
4479         ;;
4480 esac
4481 echo "Your system uses $freetype free(), it would seem." >&4
4482 $rm -f malloc.[co]
4483 : Cruising for prototypes
4484 echo " "
4485 echo "Checking out function prototypes..." >&4
4486 $cat >prototype.c <<'EOCP'
4487 int main(int argc, char *argv[]) {
4488         exit(0);}
4489 EOCP
4490 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
4491         echo "Your C compiler appears to support function prototypes."
4492         val="$define"
4493 else
4494         echo "Your C compiler doesn't seem to understand function prototypes."
4495         val="$undef"
4496 fi
4497 set prototype
4498 eval $setvar
4499 $rm -f prototype*
4500
4501 case "$prototype" in
4502 "$define") ;;
4503 *)      ansi2knr='ansi2knr'
4504         echo " "
4505         cat <<EOM >&4
4506
4507 $me:  FATAL ERROR:
4508 This version of $package can only be compiled by a compiler that 
4509 understands function prototypes.  Unfortunately, your C compiler 
4510         $cc $ccflags
4511 doesn't seem to understand them.  Sorry about that.
4512
4513 If GNU cc is available for your system, perhaps you could try that instead.  
4514
4515 Eventually, we hope to support building Perl with pre-ANSI compilers.
4516 If you would like to help in that effort, please contact <perlbug@perl.org>.
4517
4518 Aborting Configure now.
4519 EOM
4520         exit 2
4521         ;;
4522 esac
4523
4524 : determine where public executables go
4525 echo " "
4526 set dflt bin bin
4527 eval $prefixit
4528 fn=d~
4529 rp='Pathname where the public executables will reside?'
4530 . ./getfile
4531 if $test "X$ansexp" != "X$binexp"; then
4532         installbin=''
4533 fi
4534 bin="$ans"
4535 binexp="$ansexp"
4536 if $afs; then
4537         $cat <<EOM
4538
4539 Since you are running AFS, I need to distinguish the directory in which
4540 executables reside from the directory in which they are installed (and from
4541 which they are presumably copied to the former directory by occult means).
4542
4543 EOM
4544         case "$installbin" in
4545         '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
4546         *) dflt="$installbin";;
4547         esac
4548         fn=de~
4549         rp='Where will public executables be installed?'
4550         . ./getfile
4551         installbin="$ans"
4552 else
4553         installbin="$binexp"
4554 fi
4555
4556 : determine whether to install perl also as /usr/bin/perl
4557
4558 echo " "
4559 if test -d /usr/bin -a "X$installbin" != X/usr/bin; then
4560         $cat <<EOM
4561 Many scripts expect to perl to be installed as /usr/bin/perl.
4562 I can install the perl you are about to compile also as /usr/bin/perl
4563 (in addition to $installbin/perl).
4564 EOM
4565         case "$installusrbinperl" in
4566         "$undef"|[nN]*) dflt='n';;
4567         *)              dflt='y';;
4568         esac
4569         rp="Do you want to install perl as /usr/bin/perl?"
4570         . ./myread
4571         case "$ans" in
4572         [yY]*)  val="$define";;
4573         *)      val="$undef" ;;
4574         esac
4575 else
4576         val="$undef"
4577 fi
4578 set installusrbinperl
4579 eval $setvar
4580
4581 : define a shorthand compile call
4582 compile='
4583 mc_file=$1;
4584 shift;
4585 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4586 : define a shorthand compile call for compilations that should be ok.
4587 compile_ok='
4588 mc_file=$1;
4589 shift;
4590 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4591
4592 echo " "
4593 echo "Checking for GNU C Library..." >&4
4594 cat >gnulibc.c <<EOM
4595 #include <stdio.h>
4596 int main()
4597 {
4598 #ifdef __GLIBC__
4599     exit(0);
4600 #else
4601     exit(1);
4602 #endif
4603 }
4604 EOM
4605 set gnulibc
4606 if eval $compile_ok && ./gnulibc; then
4607         val="$define"
4608         echo "You are using the GNU C Library"
4609 else
4610         val="$undef"
4611         echo "You are not using the GNU C Library"
4612 fi
4613 $rm -f gnulibc*
4614 set d_gnulibc
4615 eval $setvar
4616
4617 : see if nm is to be used to determine whether a symbol is defined or not
4618 case "$usenm" in
4619 '')
4620         dflt=''
4621         case "$d_gnulibc" in
4622         "$define")
4623                 echo " "
4624                 echo "nm probably won't work on the GNU C Library." >&4
4625                 dflt=n
4626                 ;;
4627         esac
4628         case "$dflt" in
4629         '') 
4630                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4631                         echo " "
4632                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4633                         echo "'nm' won't be sufficient on this sytem." >&4
4634                         dflt=n
4635                 fi
4636                 ;;
4637         esac
4638         case "$dflt" in
4639         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4640                 if $test $dflt -gt 20; then
4641                         dflt=y
4642                 else
4643                         dflt=n
4644                 fi
4645                 ;;
4646         esac
4647         ;;
4648 *)
4649         case "$usenm" in
4650         true|$define) dflt=y;;
4651         *) dflt=n;;
4652         esac
4653         ;;
4654 esac
4655 $cat <<EOM
4656
4657 I can use $nm to extract the symbols from your C libraries. This
4658 is a time consuming task which may generate huge output on the disk (up
4659 to 3 megabytes) but that should make the symbols extraction faster. The
4660 alternative is to skip the 'nm' extraction part and to compile a small
4661 test program instead to determine whether each symbol is present. If
4662 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4663 this may be the best solution.
4664
4665 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4666
4667 EOM
4668 rp="Shall I use $nm to extract C symbols from the libraries?"
4669 . ./myread
4670 case "$ans" in
4671 [Nn]*) usenm=false;;
4672 *) usenm=true;;
4673 esac
4674
4675 runnm=$usenm
4676 case "$reuseval" in
4677 true) runnm=false;;
4678 esac
4679
4680 : nm options which may be necessary
4681 case "$nm_opt" in
4682 '') if $test -f /mach_boot; then
4683                 nm_opt=''       # Mach
4684         elif $test -d /usr/ccs/lib; then
4685                 nm_opt='-p'     # Solaris (and SunOS?)
4686         elif $test -f /dgux; then
4687                 nm_opt='-p'     # DG-UX
4688         elif $test -f /lib64/rld; then
4689                 nm_opt='-p'     # 64-bit Irix
4690         else
4691                 nm_opt=''
4692         fi;;
4693 esac
4694
4695 : nm options which may be necessary for shared libraries but illegal
4696 : for archive libraries.  Thank you, Linux.
4697 case "$nm_so_opt" in
4698 '')     case "$myuname" in
4699         *linux*)
4700                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4701                         nm_so_opt='--dynamic'
4702                 fi
4703                 ;;
4704         esac
4705         ;;
4706 esac
4707
4708 case "$runnm" in
4709 true)
4710 : get list of predefined functions in a handy place
4711 echo " "
4712 case "$libc" in
4713 '') libc=unknown
4714         case "$libs" in
4715         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4716         esac
4717         ;;
4718 esac
4719 libnames='';
4720 case "$libs" in
4721 '') ;;
4722 *)  for thislib in $libs; do
4723         case "$thislib" in
4724         -lc|-lc_s)
4725                 : Handle C library specially below.
4726                 ;;
4727         -l*)
4728                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4729                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4730                         :
4731                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4732                         :
4733                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4734                         :
4735                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4736                         :
4737                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4738                         :
4739                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4740                         :
4741                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4742                         :
4743                 else
4744                         try=''
4745                 fi
4746                 libnames="$libnames $try"
4747                 ;;
4748         *) libnames="$libnames $thislib" ;;
4749         esac
4750         done
4751         ;;
4752 esac
4753 xxx=normal
4754 case "$libc" in
4755 unknown)
4756         set /lib/libc.$so
4757         for xxx in $libpth; do
4758                 $test -r $1 || set $xxx/libc.$so
4759                 : The messy sed command sorts on library version numbers.
4760                 $test -r $1 || \
4761                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4762                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4763                                 h
4764                                 s/[0-9][0-9]*/0000&/g
4765                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4766                                 G
4767                                 s/\n/ /' | \
4768                          sort | $sed -e 's/^.* //'`
4769                 eval set \$$#
4770         done
4771         $test -r $1 || set /usr/ccs/lib/libc.$so
4772         $test -r $1 || set /lib/libsys_s$_a
4773         ;;
4774 *)
4775         set blurfl
4776         ;;
4777 esac
4778 if $test -r "$1"; then
4779         echo "Your (shared) C library seems to be in $1."
4780         libc="$1"
4781 elif $test -r /lib/libc && $test -r /lib/clib; then
4782         echo "Your C library seems to be in both /lib/clib and /lib/libc."
4783         xxx=apollo
4784         libc='/lib/clib /lib/libc'
4785         if $test -r /lib/syslib; then
4786                 echo "(Your math library is in /lib/syslib.)"
4787                 libc="$libc /lib/syslib"
4788         fi
4789 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4790         echo "Your C library seems to be in $libc, as you said before."
4791 elif $test -r $incpath/usr/lib/libc$_a; then
4792         libc=$incpath/usr/lib/libc$_a;
4793         echo "Your C library seems to be in $libc.  That's fine."
4794 elif $test -r /lib/libc$_a; then
4795         libc=/lib/libc$_a;
4796         echo "Your C library seems to be in $libc.  You're normal."
4797 else
4798         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
4799                 :
4800         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4801                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4802         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4803                 :
4804         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4805                 :
4806         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4807                 :
4808         else
4809                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4810         fi
4811         if $test -r "$tans"; then
4812                 echo "Your C library seems to be in $tans, of all places."
4813                 libc=$tans
4814         else
4815                 libc='blurfl'
4816         fi
4817 fi
4818 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4819         dflt="$libc"
4820         cat <<EOM
4821
4822 If the guess above is wrong (which it might be if you're using a strange
4823 compiler, or your machine supports multiple models), you can override it here.
4824
4825 EOM
4826 else
4827         dflt=''
4828         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
4829         cat >&4 <<EOM
4830 I can't seem to find your C library.  I've looked in the following places:
4831
4832 EOM
4833         $sed 's/^/      /' libpath
4834         cat <<EOM
4835
4836 None of these seems to contain your C library. I need to get its name...
4837
4838 EOM
4839 fi
4840 fn=f
4841 rp='Where is your C library?'
4842 . ./getfile
4843 libc="$ans"
4844
4845 echo " "
4846 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
4847 set X `cat libnames`
4848 shift
4849 xxx=files
4850 case $# in 1) xxx=file; esac
4851 echo "Extracting names from the following $xxx for later perusal:" >&4
4852 echo " "
4853 $sed 's/^/      /' libnames >&4
4854 echo " "
4855 $echo $n "This may take a while...$c" >&4
4856
4857 for file in $*; do
4858         case $file in
4859         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
4860         *) $nm $nm_opt $file 2>/dev/null;;
4861         esac
4862 done >libc.tmp
4863
4864 $echo $n ".$c"
4865 $grep fprintf libc.tmp > libc.ptf
4866 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
4867 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
4868 xxx='[ADTSIW]'
4869 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
4870         eval $xscan;\
4871         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4872                 eval $xrun
4873 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
4874         eval $xscan;\
4875         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4876                 eval $xrun
4877 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
4878         eval $xscan;\
4879         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4880                 eval $xrun
4881 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
4882         eval $xscan;\
4883         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4884                 eval $xrun
4885 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
4886         eval $xscan;\
4887         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4888                 eval $xrun
4889 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
4890         eval $xscan;\
4891         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4892                 eval $xrun
4893 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
4894                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
4895         eval $xscan;\
4896         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4897                 eval $xrun
4898 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
4899         eval $xscan;\
4900         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4901                 eval $xrun
4902 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
4903         eval $xscan;\
4904         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4905                 eval $xrun
4906 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
4907         eval $xscan;\
4908         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4909                 eval $xrun
4910 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
4911         eval $xscan;\
4912         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4913                 eval $xrun
4914 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
4915         eval $xscan;\
4916         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4917                 eval $xrun
4918 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
4919         eval $xscan;\
4920         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4921                 eval $xrun
4922 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
4923         eval $xscan;\
4924         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4925                 eval $xrun
4926 else
4927         $nm -p $* 2>/dev/null >libc.tmp
4928         $grep fprintf libc.tmp > libc.ptf
4929         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
4930                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
4931         then
4932                 nm_opt='-p'
4933                 eval $xrun
4934         else
4935                 echo " "
4936                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
4937                 com=''
4938                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
4939                         for thisname in $libnames $libc; do
4940                                 $ar t $thisname >>libc.tmp
4941                         done
4942                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
4943                         echo "Ok." >&4
4944                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
4945                         # Repeat libc to extract forwarders to DLL entries too
4946                         for thisname in $libnames $libc; do
4947                                 $ar tv $thisname >>libc.tmp
4948                                 # Revision 50 of EMX has bug in $ar.
4949                                 # it will not extract forwarders to DLL entries
4950                                 # Use emximp which will extract exactly them.
4951                                 emximp -o tmp.imp $thisname \
4952                                     2>/dev/null && \
4953                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
4954                                     < tmp.imp >>libc.tmp
4955                                 $rm tmp.imp
4956                         done
4957                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
4958                         echo "Ok." >&4
4959                 else
4960                         echo "$ar didn't seem to work right." >&4
4961                         echo "Maybe this is a Cray...trying bld instead..." >&4
4962                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
4963                         then
4964                                 for thisname in $libnames; do
4965                                         bld t $libnames | \
4966                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
4967                                         $ar t $thisname >>libc.tmp
4968                                 done
4969                                 echo "Ok." >&4
4970                         else
4971                                 echo "That didn't work either.  Giving up." >&4
4972                                 exit 1
4973                         fi
4974                 fi
4975         fi
4976 fi
4977 nm_extract="$com"
4978 if $test -f /lib/syscalls.exp; then
4979         echo " "
4980         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
4981         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
4982 fi
4983 ;;
4984 esac
4985 $rm -f libnames libpath
4986
4987 : see if dld is available
4988 set dld.h i_dld
4989 eval $inhdr
4990
4991 : is a C symbol defined?
4992 csym='tlook=$1;
4993 case "$3" in
4994 -v) tf=libc.tmp; tc=""; tdc="";;
4995 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
4996 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
4997 esac;
4998 tx=yes;
4999 case "$reuseval-$4" in
5000 true-) ;;
5001 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5002 esac;
5003 case "$tx" in
5004 yes)
5005         case "$runnm" in
5006         true)
5007                 if $contains $tlook $tf >/dev/null 2>&1;
5008                 then tval=true;
5009                 else tval=false;
5010                 fi;;
5011         *)
5012                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5013                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
5014                 then tval=true;
5015                 else tval=false;
5016                 fi;
5017                 $rm -f t t.c;;
5018         esac;;
5019 *)
5020         case "$tval" in
5021         $define) tval=true;;
5022         *) tval=false;;
5023         esac;;
5024 esac;
5025 eval "$2=$tval"'
5026
5027 : define an is-in-libc? function
5028 inlibc='echo " "; td=$define; tu=$undef;
5029 sym=$1; var=$2; eval "was=\$$2";
5030 tx=yes;
5031 case "$reuseval$was" in
5032 true) ;;
5033 true*) tx=no;;
5034 esac;
5035 case "$tx" in
5036 yes)
5037         set $sym tres -f;
5038         eval $csym;
5039         case "$tres" in
5040         true)
5041                 echo "$sym() found." >&4;
5042                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5043         *)
5044                 echo "$sym() NOT found." >&4;
5045                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5046         esac;;
5047 *)
5048         case "$was" in
5049         $define) echo "$sym() found." >&4;;
5050         *) echo "$sym() NOT found." >&4;;
5051         esac;;
5052 esac'
5053
5054 : see if dlopen exists
5055 xxx_runnm="$runnm"
5056 runnm=false
5057 set dlopen d_dlopen
5058 eval $inlibc
5059 runnm="$xxx_runnm"
5060
5061 : determine which dynamic loading, if any, to compile in
5062 echo " "
5063 dldir="ext/DynaLoader"
5064 case "$usedl" in
5065 $define|y|true)
5066         dflt='y'
5067         usedl="$define"
5068         ;;
5069 $undef|n|false)
5070         dflt='n'
5071         usedl="$undef"
5072         ;;
5073 *) 
5074         dflt='n'
5075         case "$d_dlopen" in
5076             $define) dflt='y' ;;
5077         esac
5078         case "$i_dld" in
5079             $define) dflt='y' ;;
5080         esac
5081         : Does a dl_xxx.xs file exist for this operating system
5082         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
5083         ;;
5084 esac
5085 rp="Do you wish to use dynamic loading?"
5086 . ./myread
5087 usedl="$ans"
5088 case "$ans" in
5089 y*) usedl="$define"
5090         case "$dlsrc" in
5091         '')
5092                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
5093                         dflt="$dldir/dl_${osname}.xs"
5094                 elif $test "$d_dlopen" = "$define" ; then
5095                         dflt="$dldir/dl_dlopen.xs"
5096                 elif $test "$i_dld" = "$define" ; then
5097                         dflt="$dldir/dl_dld.xs"
5098                 else
5099                         dflt=''
5100                 fi
5101                 ;;
5102         *)      dflt="$dldir/$dlsrc"
5103                 ;;
5104         esac
5105     echo "The following dynamic loading files are available:"
5106         : Can not go over to $dldir because getfile has path hard-coded in.
5107         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
5108         rp="Source file to use for dynamic loading"
5109         fn="fne"
5110         # XXX This getfile call will fail the existence check if you try 
5111         # building away from $src (this is not supported yet).
5112         . ./getfile
5113         usedl="$define"
5114         : emulate basename
5115         dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
5116
5117         $cat << EOM
5118
5119 Some systems may require passing special flags to $cc -c to
5120 compile modules that will be used to create a shared library.
5121 To use no flags, say "none".
5122
5123 EOM
5124     case "$cccdlflags" in
5125     '') case "$gccversion" in
5126                 '') case "$osname" in
5127                         hpux)   dflt='+z' ;;
5128                         next)   dflt='none' ;;
5129                         irix*)  dflt='-KPIC' ;;
5130                         svr4*|esix*|solaris) dflt='-KPIC' ;;
5131                         sunos)  dflt='-pic' ;;
5132                         *)      dflt='none' ;;
5133                     esac
5134                         ;;
5135                 *)  case "$osname" in
5136                         svr4*|esix*|solaris) dflt='-fPIC' ;;
5137                         *)      dflt='-fpic' ;;
5138                     esac ;;
5139             esac ;;
5140         ' ') dflt='none' ;;
5141     *)  dflt="$cccdlflags" ;;
5142     esac
5143     rp="Any special flags to pass to $cc -c to compile shared library modules?"
5144     . ./myread
5145     case "$ans" in
5146     none) cccdlflags=' ' ;;
5147     *) cccdlflags="$ans" ;;
5148     esac
5149
5150     cat << EOM
5151
5152 Some systems use ld to create libraries that can be dynamically loaded,
5153 while other systems (such as those using ELF) use $cc.
5154
5155 EOM
5156         case "$ld" in
5157         '')     $cat >try.c <<'EOM'
5158 /* Test for whether ELF binaries are produced */
5159 #include <fcntl.h>
5160 #include <stdlib.h>
5161 int main() {
5162         char b[4];
5163         int i = open("a.out",O_RDONLY);
5164         if(i == -1) 
5165                 exit(1); /* fail */
5166         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
5167                 exit(0); /* succeed (yes, it's ELF) */
5168         else
5169                 exit(1); /* fail */
5170 }
5171 EOM
5172                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
5173                         cat <<EOM
5174 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
5175 EOM
5176                         dflt="$cc"
5177                 else
5178                         echo "I'll use ld to build dynamic libraries."
5179                         dflt='ld'
5180                 fi
5181                 rm -f try.c a.out
5182                 ;;
5183         *)      dflt="$ld"
5184                 ;;
5185         esac
5186
5187     rp="What command should be used to create dynamic libraries?"
5188     . ./myread
5189         ld="$ans"
5190
5191     cat << EOM
5192
5193 Some systems may require passing special flags to $ld to create a
5194 library that can be dynamically loaded.  If your ld flags include
5195 -L/other/path options to locate libraries outside your loader's normal
5196 search path, you may need to specify those -L options here as well.  To
5197 use no flags, say "none".
5198
5199 EOM
5200     case "$lddlflags" in
5201     '') case "$osname" in
5202                         beos) dflt='-nostart' ;;
5203                         hpux)  dflt='-b' ;;
5204                         linux|irix*)    dflt='-shared' ;;
5205                         next)  dflt='none' ;;
5206                         solaris) dflt='-G' ;;
5207                         sunos) dflt='-assert nodefinitions' ;;
5208                         svr4*|esix*) dflt="-G $ldflags" ;;
5209                 *)     dflt='none' ;;
5210                         esac
5211                         ;;
5212     *) dflt="$lddlflags" ;;
5213     esac
5214
5215         : Try to guess additional flags to pick up local libraries.
5216         : Be careful not to append to a plain 'none'
5217         case "$dflt" in
5218         none) dflt='' ;;
5219         esac
5220         for thisflag in $ldflags; do
5221                 case "$thisflag" in
5222                 -L*)
5223                         case " $dflt " in
5224                         *" $thisflag "*) ;;
5225                         *) dflt="$dflt $thisflag" ;;
5226                         esac
5227                         ;;
5228                 esac
5229         done
5230
5231         case "$dflt" in
5232         ''|' ') dflt='none' ;;
5233         esac
5234
5235     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
5236     . ./myread
5237     case "$ans" in
5238     none) lddlflags=' ' ;;
5239     *) lddlflags="$ans" ;;
5240     esac
5241
5242         cat <<EOM
5243
5244 Some systems may require passing special flags to $cc to indicate that
5245 the resulting executable will use dynamic linking.  To use no flags,
5246 say "none".
5247
5248 EOM
5249     case "$ccdlflags" in
5250     '') case "$osname" in
5251                 hpux)   dflt='-Wl,-E' ;;
5252                 linux)  dflt='-rdynamic' ;;
5253                 next)   dflt='none' ;;
5254                 sunos)  dflt='none' ;;
5255                 *)      dflt='none' ;;
5256             esac ;;
5257     ' ')  dflt='none' ;;
5258     *)  dflt="$ccdlflags" ;;
5259     esac
5260     rp="Any special flags to pass to $cc to use dynamic loading?"
5261     . ./myread
5262     case "$ans" in
5263     none) ccdlflags=' ' ;;
5264     *) ccdlflags="$ans" ;;
5265     esac
5266     ;;
5267 *)  usedl="$undef"
5268         ld='ld'
5269     dlsrc='dl_none.xs'
5270     lddlflags=''
5271     ccdlflags=''
5272     ;;
5273 esac
5274
5275 also=''
5276 case "$usedl" in
5277 $undef)
5278         # No dynamic loading being used, so don't bother even to prompt.
5279         useshrplib='false'
5280         ;;
5281 *)      case "$useshrplib" in
5282         '')     case "$osname" in
5283                 svr4*|dgux|dynixptx|esix|powerux|beos)
5284                         dflt=y
5285                         also='Building a shared libperl is required for dynamic loading to work on your system.'
5286                         ;;
5287                 next*)
5288                         case "$osvers" in
5289                         4*)     dflt=y
5290                                 also='Building a shared libperl is needed for MAB support.'
5291                                 ;;
5292                         *)      dflt=n
5293                                 ;;
5294                         esac
5295                         ;;
5296                 *)      dflt=n
5297                         ;;
5298                 esac
5299                 ;;
5300         $define|true|[Yy]*)
5301                 dflt=y
5302                 ;;
5303         *)      dflt=n
5304                 ;;
5305         esac
5306         $cat << EOM
5307
5308 The perl executable is normally obtained by linking perlmain.c with
5309 libperl${_a}, any static extensions (usually just DynaLoader), and
5310 any other libraries needed on this system (such as -lm, etc.).  Since
5311 your system supports dynamic loading, it is probably possible to build
5312 a shared libperl.$so.  If you will have more than one executable linked
5313 to libperl.$so, this will significantly reduce the size of each
5314 executable, but it may have a noticeable affect on performance.  The
5315 default is probably sensible for your system.
5316 $also
5317
5318 EOM
5319         rp="Build a shared libperl.$so (y/n)"
5320         . ./myread
5321         case "$ans" in
5322         true|$define|[Yy]*)
5323                 useshrplib='true'
5324                 # Why does next4 have to be so different?
5325                 case "${osname}${osvers}" in
5326                 next4*|rhapsody*)
5327                         xxx='DYLD_LIBRARY_PATH' ;;
5328                 os2*)   xxx='' ;; # Nothing special needed.
5329                 beos*)  xxx='' ;;
5330                 *)              xxx='LD_LIBRARY_PATH' ;;
5331                 esac
5332                 ;;
5333         *)      useshrplib='false' ;;
5334         esac
5335         ;;
5336 esac
5337
5338 case "$useshrplib" in
5339 true)
5340         case "$libperl" in
5341         '')
5342                 # Figure out a good name for libperl.so.  Since it gets stored in
5343                 # a version-specific architecture-dependent library, the version
5344                 # number isn't really that important, except for making cc/ld happy.
5345                 #
5346                 # A name such as libperl.so.3.1
5347                 majmin="libperl.$so.$patchlevel.$subversion"
5348                 # A name such as libperl.so.301
5349                 majonly=`echo $patchlevel $subversion |
5350                         $awk '{printf "%d%02d", $1, $2}'`
5351                 majonly=libperl.$so.$majonly
5352                 # I'd prefer to keep the os-specific stuff here to a minimum, and
5353                 # rely on figuring it out from the naming of libc.
5354                 case "${osname}${osvers}" in
5355                 next4*)
5356                         dflt=libperl.5.$so
5357                         # XXX How handle the --version stuff for MAB?
5358                         ;;
5359                 linux*)  # ld won't link with a bare -lperl otherwise.
5360                         dflt=libperl.$so
5361                         ;;
5362                 *)      # Try to guess based on whether libc has major.minor.
5363                         case "$libc" in
5364                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
5365                         *libc.$so.[0-9]*) dflt=$majonly ;;
5366                         *)      dflt=libperl.$so ;;
5367                         esac
5368                         ;;
5369                 esac
5370                 ;;
5371         *)      dflt=$libperl
5372                 ;;
5373         esac
5374         cat << EOM
5375
5376 I need to select a good name for the shared libperl.  If your system uses
5377 library names with major and minor numbers, then you might want something
5378 like $majmin.  Alternatively, if your system uses a single version
5379 number for shared libraries, then you might want to use $majonly.
5380 Or, your system might be quite happy with a simple libperl.$so.
5381
5382 Since the shared libperl will get installed into a version-specific
5383 architecture-dependent directory, the version number of the shared perl
5384 library probably isn't important, so the default should be o.k.
5385
5386 EOM
5387         rp='What name do you want to give to the shared libperl?'
5388         . ./myread
5389         libperl=$ans
5390         echo "Ok, I'll use $libperl"
5391         ;;
5392 *)
5393         libperl="libperl${_a}"
5394         ;;
5395 esac
5396
5397 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
5398 case "$shrpdir" in
5399 '') ;;
5400 *)      $cat >&4 <<EOM
5401 WARNING:  Use of the shrpdir variable for the installation location of
5402 the shared $libperl is not supported.  It was never documented and
5403 will not work in this version.  Let me (perlbug@perl.com)
5404 know of any problems this may cause.
5405
5406 EOM
5407         case "$shrpdir" in
5408         "$archlibexp/CORE")
5409                 $cat >&4 <<EOM
5410 But your current setting of $shrpdir is
5411 the default anyway, so it's harmless.
5412 EOM
5413                 ;;
5414         *)
5415                 $cat >&4 <<EOM
5416 Further, your current attempted setting of $shrpdir
5417 conflicts with the value of $archlibexp/CORE
5418 that installperl will use.
5419 EOM
5420                 ;;
5421         esac
5422         ;;
5423 esac
5424
5425 # How will the perl executable find the installed shared $libperl?
5426 # Add $xxx to ccdlflags.
5427 # If we can't figure out a command-line option, use $shrpenv to
5428 # set env LD_RUN_PATH.  The main perl makefile uses this.
5429 shrpdir=$archlibexp/CORE
5430 xxx=''
5431 tmp_shrpenv=''
5432 if "$useshrplib"; then
5433     case "$osname" in 
5434         aix)
5435                 # We'll set it in Makefile.SH...
5436                 ;;
5437         solaris|netbsd)
5438                 xxx="-R $shrpdir"
5439                 ;;
5440         freebsd)
5441                 xxx="-Wl,-R$shrpdir"
5442                 ;;
5443         linux|irix*|dec_osf)
5444                 xxx="-Wl,-rpath,$shrpdir"
5445                 ;;
5446         next)
5447                 # next doesn't like the default...
5448                 ;;
5449         beos)
5450                 # beos doesn't like the default, either.
5451                 ;;
5452         *)
5453                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
5454                 ;;
5455         esac
5456         case "$xxx" in
5457         '') ;;
5458         *)      
5459                 # Only add $xxx if it isn't already in ccdlflags.
5460                 case " $ccdlflags " in
5461                 *" $xxx "*)     ;;
5462                 *)      ccdlflags="$ccdlflags $xxx"
5463                         cat <<EOM >&4
5464
5465 Adding $xxx to the flags
5466 passed to $ld so that the perl executable will find the 
5467 installed shared $libperl.
5468
5469 EOM
5470                         ;;
5471                 esac
5472                 ;;
5473         esac
5474 fi
5475 # Respect a hint or command-line value.
5476 case "$shrpenv" in
5477 '') shrpenv="$tmp_shrpenv" ;;
5478 esac
5479
5480 : determine where manual pages go
5481 set man1dir man1dir none
5482 eval $prefixit
5483 $cat <<EOM
5484
5485 $spackage has manual pages available in source form.
5486 EOM
5487 case "$nroff" in
5488 nroff)
5489         echo "However, you don't have nroff, so they're probably useless to you."
5490         case "$man1dir" in
5491         '') man1dir="none";;
5492         esac;;
5493 esac
5494 echo "If you don't want the manual sources installed, answer 'none'."
5495 case "$man1dir" in
5496 ' ') dflt=none
5497         ;;
5498 '')
5499         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
5500         lookpath="$lookpath $prefixexp/man/p_man/man1"
5501         lookpath="$lookpath $prefixexp/man/u_man/man1"
5502         lookpath="$lookpath $prefixexp/man/man.1"
5503         case "$sysman" in
5504         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
5505         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
5506         esac
5507         set dflt
5508         eval $prefixup
5509         ;;
5510 *)  dflt="$man1dir"
5511         ;;
5512 esac
5513 echo " "
5514 fn=dn+~
5515 rp="Where do the main $spackage manual pages (source) go?"
5516 . ./getfile
5517 if $test "X$man1direxp" != "X$ansexp"; then
5518         installman1dir=''
5519 fi
5520 man1dir="$ans"
5521 man1direxp="$ansexp"
5522 case "$man1dir" in
5523 '') man1dir=' '
5524         installman1dir='';;
5525 esac
5526 if $afs; then
5527         $cat <<EOM
5528
5529 Since you are running AFS, I need to distinguish the directory in which
5530 manual pages reside from the directory in which they are installed (and from
5531 which they are presumably copied to the former directory by occult means).
5532
5533 EOM
5534         case "$installman1dir" in
5535         '') dflt=`echo $man1direxp | sed 's#^/afs/#/afs/.#'`;;
5536         *) dflt="$installman1dir";;
5537         esac
5538         fn=de~
5539         rp='Where will man pages be installed?'
5540         . ./getfile
5541         installman1dir="$ans"
5542 else
5543         installman1dir="$man1direxp"
5544 fi
5545
5546 : What suffix to use on installed man pages
5547
5548 case "$man1dir" in
5549 ' ')
5550         man1ext='0'
5551         ;;
5552 *)
5553         rp="What suffix should be used for the main $spackage man pages?"
5554         case "$man1ext" in
5555         '')     case "$man1dir" in
5556                 *1)  dflt=1 ;;
5557                 *1p) dflt=1p ;;
5558                 *1pm) dflt=1pm ;;
5559                 *l) dflt=l;;
5560                 *n) dflt=n;;
5561                 *o) dflt=o;;
5562                 *p) dflt=p;;
5563                 *C) dflt=C;;
5564                 *L) dflt=L;;
5565                 *L1) dflt=L1;;
5566                 *) dflt=1;;
5567                 esac
5568                 ;;
5569         *)      dflt="$man1ext";;
5570         esac
5571         . ./myread
5572         man1ext="$ans"
5573         ;;
5574 esac
5575
5576 : see if we can have long filenames
5577 echo " "
5578 rmlist="$rmlist /tmp/cf$$"
5579 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
5580 first=123456789abcdef
5581 second=/tmp/cf$$/$first
5582 $rm -f $first $second
5583 if (echo hi >$first) 2>/dev/null; then
5584         if $test -f 123456789abcde; then
5585                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
5586                 val="$undef"
5587         else
5588                 if (echo hi >$second) 2>/dev/null; then
5589                         if $test -f /tmp/cf$$/123456789abcde; then
5590                                 $cat <<'EOM'
5591 That's peculiar... You can have filenames longer than 14 characters, but only
5592 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
5593 I shall consider your system cannot support long filenames at all.
5594 EOM
5595                                 val="$undef"
5596                         else
5597                                 echo 'You can have filenames longer than 14 characters.' >&4
5598                                 val="$define"
5599                         fi
5600                 else
5601                         $cat <<'EOM'
5602 How confusing! Some of your filesystems are sane enough to allow filenames
5603 longer than 14 characters but some others like /tmp can't even think about them.
5604 So, for now on, I shall assume your kernel does not allow them at all.
5605 EOM
5606                         val="$undef"
5607                 fi
5608         fi
5609 else
5610         $cat <<'EOM'
5611 You can't have filenames longer than 14 chars.  You can't even think about them!
5612 EOM
5613         val="$undef"
5614 fi 
5615 set d_flexfnam
5616 eval $setvar
5617 $rm -rf /tmp/cf$$ 123456789abcde*
5618
5619 : determine where library module manual pages go
5620 set man3dir man3dir none
5621 eval $prefixit
5622 $cat <<EOM
5623
5624 $spackage has manual pages for many of the library modules.
5625 EOM
5626
5627 case "$nroff" in
5628 nroff)
5629         $cat <<'EOM'
5630 However, you don't have nroff, so they're probably useless to you.
5631 EOM
5632         case "$man3dir" in
5633         '') man3dir="none";;
5634         esac;;
5635 esac
5636
5637 case "$d_flexfnam" in
5638 undef)
5639         $cat <<'EOM'
5640 However, your system can't handle the long file names like File::Basename.3. 
5641 EOM
5642         case "$man3dir" in
5643         '') man3dir="none";;
5644         esac;;
5645 esac
5646
5647 echo "If you don't want the manual sources installed, answer 'none'."
5648 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5649 case "$man3dir" in
5650 '')     case "$prefix" in 
5651         *$prog*) dflt=`echo $man1dir | 
5652                         $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;;
5653         *)      dflt="$privlib/man/man3" ;;
5654         esac
5655         ;;
5656 ' ') dflt=none;;
5657 *)      dflt="$man3dir" ;;
5658 esac
5659 echo " "
5660
5661 fn=dn+~
5662 rp="Where do the $package library man pages (source) go?"
5663 . ./getfile
5664 if test "X$man3direxp" != "X$ansexp"; then
5665         installman3dir=''
5666 fi
5667
5668 man3dir="$ans"
5669 man3direxp="$ansexp"
5670 case "$man3dir" in
5671 '') man3dir=' '
5672         installman3dir='';;
5673 esac
5674 if $afs; then
5675         $cat <<EOM
5676
5677 Since you are running AFS, I need to distinguish the directory in which
5678 manual pages reside from the directory in which they are installed (and from
5679 which they are presumably copied to the former directory by occult means).
5680
5681 EOM
5682         case "$installman3dir" in
5683         '') dflt=`echo $man3direxp | sed 's#^/afs/#/afs/.#'`;;
5684         *) dflt="$installman3dir";;
5685         esac
5686         fn=de~
5687         rp='Where will man pages be installed?'
5688         . ./getfile
5689         installman3dir="$ans"
5690 else
5691         installman3dir="$man3direxp"
5692 fi
5693
5694 : What suffix to use on installed man pages
5695
5696 case "$man3dir" in
5697 ' ')
5698         man3ext='0'
5699         ;;
5700 *)
5701         rp="What suffix should be used for the $package library man pages?"
5702         case "$man3ext" in
5703         '')     case "$man3dir" in
5704                 *3)  dflt=3 ;;
5705                 *3p) dflt=3p ;;
5706                 *3pm) dflt=3pm ;;
5707                 *l) dflt=l;;
5708                 *n) dflt=n;;
5709                 *o) dflt=o;;
5710                 *p) dflt=p;;
5711                 *C) dflt=C;;
5712                 *L) dflt=L;;
5713                 *L3) dflt=L3;;
5714                 *) dflt=3;;
5715                 esac
5716                 ;;
5717         *)      dflt="$man3ext";;
5718         esac
5719         . ./myread
5720         man3ext="$ans"
5721         ;;
5722 esac
5723
5724 : see if we have to deal with yellow pages, now NIS.
5725 if $test -d /usr/etc/yp || $test -d /etc/yp; then
5726         if $test -f /usr/etc/nibindd; then
5727                 echo " "
5728                 echo "I'm fairly confident you're on a NeXT."
5729                 echo " "
5730                 rp='Do you get the hosts file via NetInfo?'
5731                 dflt=y
5732                 case "$hostcat" in
5733                 nidump*) ;;
5734                 '') ;;
5735                 *) dflt=n;;
5736                 esac
5737                 . ./myread
5738                 case "$ans" in
5739                 y*) hostcat='nidump hosts .';;
5740                 *)      case "$hostcat" in
5741                         nidump*) hostcat='';;
5742                         esac
5743                         ;;
5744                 esac
5745         fi
5746         case "$hostcat" in
5747         nidump*) ;;
5748         *)
5749                 case "$hostcat" in
5750                 *ypcat*) dflt=y;;
5751                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
5752                                 dflt=y
5753                         else
5754                                 dflt=n
5755                         fi;;
5756                 *) dflt=n;;
5757                 esac
5758                 echo " "
5759                 rp='Are you getting the hosts file via yellow pages?'
5760                 . ./myread
5761                 case "$ans" in
5762                 y*) hostcat='ypcat hosts';;
5763                 *) hostcat='cat /etc/hosts';;
5764                 esac
5765                 ;;
5766         esac
5767 fi
5768 case "$hostcat" in
5769 '') hostcat='cat /etc/hosts';;
5770 esac
5771 case "$groupcat" in
5772 '') groupcat='cat /etc/group';;
5773 esac
5774 case "$passcat" in
5775 '') passcat='cat /etc/passwd';;
5776 esac
5777
5778 : now get the host name
5779 echo " "
5780 echo "Figuring out host name..." >&4
5781 case "$myhostname" in
5782 '') cont=true
5783         echo 'Maybe "hostname" will work...'
5784         if tans=`sh -c hostname 2>&1` ; then
5785                 myhostname=$tans
5786                 phostname=hostname
5787                 cont=''
5788         fi
5789         ;;
5790 *) cont='';;
5791 esac
5792 if $test "$cont"; then
5793         if ./xenix; then
5794                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
5795                 if tans=`cat /etc/systemid 2>&1` ; then
5796                         myhostname=$tans
5797                         phostname='cat /etc/systemid'
5798                         echo "Whadyaknow.  Xenix always was a bit strange..."
5799                         cont=''
5800                 fi
5801         elif $test -r /etc/systemid; then
5802                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
5803         fi
5804 fi
5805 if $test "$cont"; then
5806         echo 'No, maybe "uuname -l" will work...'
5807         if tans=`sh -c 'uuname -l' 2>&1` ; then
5808                 myhostname=$tans
5809                 phostname='uuname -l'
5810         else
5811                 echo 'Strange.  Maybe "uname -n" will work...'
5812                 if tans=`sh -c 'uname -n' 2>&1` ; then
5813                         myhostname=$tans
5814                         phostname='uname -n'
5815                 else
5816                         echo 'Oh well, maybe I can mine it out of whoami.h...'
5817                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
5818                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
5819                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
5820                         else
5821                                 case "$myhostname" in
5822                                 '') echo "Does this machine have an identity crisis or something?"
5823                                         phostname='';;
5824                                 *)
5825                                         echo "Well, you said $myhostname before..."
5826                                         phostname='echo $myhostname';;
5827                                 esac
5828                         fi
5829                 fi
5830         fi
5831 fi
5832 : you do not want to know about this
5833 set $myhostname
5834 myhostname=$1
5835
5836 : verify guess
5837 if $test "$myhostname" ; then
5838         dflt=y
5839         rp='Your host name appears to be "'$myhostname'".'" Right?"
5840         . ./myread
5841         case "$ans" in
5842         y*) ;;
5843         *) myhostname='';;
5844         esac
5845 fi
5846
5847 : bad guess or no guess
5848 while $test "X$myhostname" = X ; do
5849         dflt=''
5850         rp="Please type the (one word) name of your host:"
5851         . ./myread
5852         myhostname="$ans"
5853 done
5854
5855 : translate upper to lower if necessary
5856 case "$myhostname" in
5857 *[A-Z]*)
5858         echo "(Normalizing case in your host name)"
5859         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
5860         ;;
5861 esac
5862
5863 case "$myhostname" in
5864 *.*)
5865         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
5866         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
5867         echo "(Trimming domain name from host name--host name is now $myhostname)"
5868         ;;
5869 *) case "$mydomain" in
5870         '')
5871                 {
5872                         test "X$hostcat" = "Xypcat hosts" &&
5873                         ypmatch "$myhostname" hosts 2>/dev/null |\
5874                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
5875                         $test -s hosts
5876                 } || {
5877                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
5878                                         /[       ]$myhostname[  . ]/p" > hosts
5879                 }
5880                 tmp_re="[       . ]"
5881                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
5882                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
5883                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
5884                         hosts | $sort | $uniq | \
5885                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
5886                 case `$echo X$dflt` in
5887                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
5888                         dflt=.
5889                         ;;
5890                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
5891                         ;;
5892                 esac
5893                 case "$dflt" in
5894                 .)
5895                         tans=`./loc resolv.conf X /etc /usr/etc`
5896                         if $test -f "$tans"; then
5897                                 echo "(Attempting domain name extraction from $tans)"
5898                                 dflt=.`$sed -n -e 's/   / /g' \
5899                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
5900                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5901                                 case "$dflt" in
5902                                 .) dflt=.`$sed -n -e 's/        / /g' \
5903                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
5904                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5905                                         ;;
5906                                 esac
5907                         fi
5908                         ;;
5909                 esac
5910                 case "$dflt" in
5911                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
5912                         dflt=.`sh -c domainname 2>/dev/null`
5913                         case "$dflt" in
5914                         '') dflt='.';;
5915                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
5916                         esac
5917                         ;;
5918                 esac
5919                 case "$dflt" in
5920                 .) echo "(Lost all hope -- silly guess then)"
5921                         dflt='.uucp'
5922                         ;;
5923                 esac
5924                 $rm -f hosts
5925                 ;;
5926         *) dflt="$mydomain";;
5927         esac;;
5928 esac
5929 echo " "
5930 rp="What is your domain name?"
5931 . ./myread
5932 tans="$ans"
5933 case "$ans" in
5934 '') ;;
5935 .*) ;;
5936 *) tans=".$tans";;
5937 esac
5938 mydomain="$tans"
5939
5940 : translate upper to lower if necessary
5941 case "$mydomain" in
5942 *[A-Z]*)
5943         echo "(Normalizing case in your domain name)"
5944         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
5945         ;;
5946 esac
5947
5948 : a little sanity check here
5949 case "$phostname" in
5950 '') ;;
5951 *)
5952         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
5953         $myhostname$mydomain|$myhostname) ;;
5954         *)
5955                 case "$phostname" in
5956                 sed*)
5957                         echo "(That doesn't agree with your whoami.h file, by the way.)"
5958                         ;;
5959                 *)
5960                         echo "(That doesn't agree with your $phostname command, by the way.)"
5961                         ;;
5962                 esac
5963         ;;
5964         esac
5965         ;;
5966 esac
5967
5968 $cat <<EOM
5969
5970 I need to get your e-mail address in Internet format if possible, i.e.
5971 something like user@host.domain. Please answer accurately since I have
5972 no easy means to double check it. The default value provided below
5973 is most probably close to the reality but may not be valid from outside
5974 your organization...
5975
5976 EOM
5977 cont=x
5978 while test "$cont"; do
5979         case "$cf_email" in
5980         '') dflt="$cf_by@$myhostname$mydomain";;
5981         *) dflt="$cf_email";;
5982         esac
5983         rp='What is your e-mail address?'
5984         . ./myread
5985         cf_email="$ans"
5986         case "$cf_email" in
5987         *@*.*) cont='' ;;
5988         *)
5989                 rp='Address does not look like an Internet one.  Use it anyway?'
5990                 case "$fastread" in
5991                 yes) dflt=y ;;
5992                 *) dflt=n ;;
5993                 esac
5994                 . ./myread
5995                 case "$ans" in
5996                 y*) cont='' ;;
5997                 *) echo " " ;;
5998                 esac
5999                 ;;
6000         esac
6001 done
6002
6003 $cat <<EOM
6004
6005 If you or somebody else will be maintaining perl at your site, please
6006 fill in the correct e-mail address here so that they may be contacted
6007 if necessary. Currently, the "perlbug" program included with perl
6008 will send mail to this address in addition to perlbug@perl.com. You may
6009 enter "none" for no administrator.
6010
6011 EOM
6012 case "$perladmin" in
6013 '') dflt="$cf_email";;
6014 *) dflt="$perladmin";;
6015 esac
6016 rp='Perl administrator e-mail address'
6017 . ./myread
6018 perladmin="$ans"
6019
6020 : figure out how to guarantee perl startup
6021 case "$startperl" in
6022 '')
6023         case "$sharpbang" in
6024         *!)
6025                 $cat <<EOH
6026
6027 I can use the #! construct to start perl on your system. This will
6028 make startup of perl scripts faster, but may cause problems if you
6029 want to share those scripts and perl is not in a standard place
6030 ($binexp/perl) on all your platforms. The alternative is to force
6031 a shell by starting the script with a single ':' character.
6032
6033 EOH
6034                 dflt="$binexp/perl"
6035                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
6036                 . ./myread
6037                 case "$ans" in
6038                 none)   startperl=": # use perl";;
6039                 *)      startperl="#!$ans"
6040                         if $test 30 -lt `echo "$ans" | wc -c`; then
6041                                 $cat >&4 <<EOM
6042
6043 WARNING:  Some systems limit the #! command to 32 characters.
6044 If you experience difficulty running Perl scripts with #!, try
6045 installing Perl in a directory with a shorter pathname.
6046
6047 EOM
6048                         fi ;;
6049                 esac
6050                 ;;
6051         *) startperl=": # use perl"
6052                 ;;
6053         esac
6054         ;;
6055 esac
6056 echo "I'll use $startperl to start perl scripts."
6057
6058 : figure best path for perl in scripts
6059 case "$perlpath" in
6060 '')
6061         perlpath="$binexp/perl"
6062         case "$startperl" in
6063         *!*) ;;
6064         *)
6065                 $cat <<EOH
6066
6067 I will use the "eval 'exec'" idiom to start Perl on your system.
6068 I can use the full path of your Perl binary for this purpose, but
6069 doing so may cause problems if you want to share those scripts and
6070 Perl is not always in a standard place ($binexp/perl).
6071
6072 EOH
6073                 dflt="$binexp/perl"
6074                 rp="What path shall I use in \"eval 'exec'\"?"
6075                 . ./myread
6076                 perlpath="$ans"
6077                 ;;
6078         esac
6079         ;;
6080 esac
6081 case "$startperl" in
6082 *!*)    ;;
6083 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
6084 esac
6085
6086 : determine where public executable scripts go
6087 set scriptdir scriptdir
6088 eval $prefixit
6089 case "$scriptdir" in
6090 '')
6091         dflt="$bin"
6092         : guess some guesses
6093         $test -d /usr/share/scripts && dflt=/usr/share/scripts
6094         $test -d /usr/share/bin && dflt=/usr/share/bin
6095         $test -d /usr/local/script && dflt=/usr/local/script
6096         $test -d $prefixexp/script && dflt=$prefixexp/script
6097         set dflt
6098         eval $prefixup
6099         ;;
6100 *)  dflt="$scriptdir"
6101         ;;
6102 esac
6103 $cat <<EOM
6104  
6105 Some installations have a separate directory just for executable scripts so
6106 that they can mount it across multiple architectures but keep the scripts in
6107 one spot.  You might, for example, have a subdirectory of /usr/share for this.
6108 Or you might just lump your scripts in with all your other executables.
6109  
6110 EOM
6111 fn=d~
6112 rp='Where do you keep publicly executable scripts?'
6113 . ./getfile
6114 if $test "X$ansexp" != "X$scriptdirexp"; then
6115         installscript=''
6116 fi
6117 scriptdir="$ans"
6118 scriptdirexp="$ansexp"
6119 if $afs; then
6120         $cat <<EOM
6121
6122 Since you are running AFS, I need to distinguish the directory in which
6123 scripts reside from the directory in which they are installed (and from
6124 which they are presumably copied to the former directory by occult means).
6125
6126 EOM
6127         case "$installscript" in
6128         '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
6129         *) dflt="$installscript";;
6130         esac
6131         fn=de~
6132         rp='Where will public scripts be installed?'
6133         . ./getfile
6134         installscript="$ans"
6135 else
6136         installscript="$scriptdirexp"
6137 fi
6138
6139 : determine where site specific libraries go.
6140 : Usual default is /usr/local/lib/perl5/site_perl/$apiversion
6141 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6142 case "$prefix" in
6143 *perl*) set dflt sitelib lib/site_$prog/$apiversion ;;
6144 *)       set dflt sitelib lib/$package/site_$prog/$apiversion ;;
6145 esac
6146 eval $prefixit
6147 $cat <<EOM
6148
6149 The installation process will also create a directory for
6150 site-specific extensions and modules.  Some users find it convenient
6151 to place all site-specific files in this directory rather than in the
6152 main distribution directory.
6153
6154 EOM
6155 fn=d~+
6156 rp='Pathname for the site-specific library files?'
6157 . ./getfile
6158 if $test "X$sitelibexp" != "X$ansexp"; then
6159         installsitelib=''
6160 fi
6161 sitelib="$ans"
6162 sitelibexp="$ansexp"
6163 if $afs; then
6164         $cat <<EOM
6165
6166 Since you are running AFS, I need to distinguish the directory in
6167 which site-specific files reside from the directory in which they are
6168 installed (and from which they are presumably copied to the former
6169 directory by occult means).
6170
6171 EOM
6172         case "$installsitelib" in
6173         '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;;
6174         *) dflt="$installsitelib";;
6175         esac
6176         fn=de~
6177         rp='Where will site-specific files be installed?'
6178         . ./getfile
6179         installsitelib="$ans"
6180 else
6181         installsitelib="$sitelibexp"
6182 fi
6183
6184 : determine where site specific architecture-dependent libraries go.
6185 : sitelib  default is /usr/local/lib/perl5/site_perl/$apiversion
6186 : sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
6187 : sitelib may have an optional trailing /share.
6188 tdflt=`echo $sitelib | $sed 's,/share$,,'`
6189 tdflt="$tdflt/$archname"
6190 set sitearch sitearch none
6191 eval $prefixit
6192 case "$sitearch" in
6193 '')     dflt="$tdflt" ;;
6194 *)      dflt="$sitearch" ;;
6195 esac
6196 $cat <<EOM
6197
6198 The installation process will also create a directory for
6199 architecture-dependent site-specific extensions and modules.
6200
6201 EOM
6202 fn=nd~+
6203 rp='Pathname for the site-specific architecture-dependent library files?'
6204 . ./getfile
6205 if $test "X$sitearchexp" != "X$ansexp"; then
6206         installsitearch=''
6207 fi
6208 sitearch="$ans"
6209 sitearchexp="$ansexp"
6210 if $afs; then
6211         $cat <<EOM
6212
6213 Since you are running AFS, I need to distinguish the directory in
6214 which site-specific architecture-dependent library files reside from
6215 the directory in which they are installed (and from which they are
6216 presumably copied to the former directory by occult means).
6217
6218 EOM
6219         case "$installsitearch" in
6220         '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;;
6221         *) dflt="$installsitearch";;
6222         esac
6223         fn=de~
6224         rp='Where will site-specific architecture-dependent files be installed?'
6225         . ./getfile
6226         installsitearch="$ans"
6227 else
6228         installsitearch="$sitearchexp"
6229 fi
6230
6231 cat <<EOM
6232
6233 Previous version of $package used the standard IO mechanisms as defined
6234 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
6235 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
6236 the default.  This abstraction layer can use AT&T's sfio (if you already
6237 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
6238 problems with some extension modules.  Using PerlIO with stdio is safe,
6239 but it is slower than plain stdio and therefore is not the default.
6240
6241 If this doesn't make any sense to you, just accept the default 'n'.
6242 EOM
6243 case "$useperlio" in
6244 $define|true|[yY]*)     dflt='y';;
6245 *) dflt='n';;
6246 esac
6247 rp='Use the experimental PerlIO abstraction layer?'
6248 . ./myread
6249 case "$ans" in
6250 y|Y) 
6251         val="$define"
6252         ;;     
6253 *)      
6254         echo "Ok, doing things the stdio way"
6255         val="$undef"
6256         ;;
6257 esac
6258 set useperlio
6259 eval $setvar 
6260
6261 : Check how to convert floats to strings.
6262 if test "X$d_Gconvert" = X; then
6263         echo " "
6264         echo "Checking for an efficient way to convert floats to strings."
6265         $cat >try.c <<'EOP'
6266 #ifdef TRY_gconvert
6267 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
6268 char *myname = "gconvert";
6269 #endif
6270 #ifdef TRY_gcvt
6271 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
6272 char *myname = "gcvt";
6273 #endif
6274 #ifdef TRY_sprintf
6275 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
6276 char *myname = "sprintf";
6277 #endif
6278
6279 #include <stdio.h>
6280
6281 int
6282 checkit(expect, got)
6283 char *expect;
6284 char *got;
6285 {
6286     if (strcmp(expect, got)) {
6287                 printf("%s oddity:  Expected %s, got %s\n",
6288                         myname, expect, got);
6289                 exit(1);
6290         }
6291 }
6292
6293 int main()
6294
6295         char buf[64]; 
6296         buf[63] = '\0';
6297
6298         /* This must be 1st test on (which?) platform */
6299         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
6300         Gconvert(0.1, 8, 0, buf);
6301         checkit("0.1", buf);
6302
6303         Gconvert(1.0, 8, 0, buf); 
6304         checkit("1", buf);
6305
6306         Gconvert(0.0, 8, 0, buf); 
6307         checkit("0", buf);
6308
6309         Gconvert(-1.0, 8, 0, buf); 
6310         checkit("-1", buf);
6311
6312         /* Some Linux gcvt's give 1.e+5 here. */
6313         Gconvert(100000.0, 8, 0, buf); 
6314         checkit("100000", buf);
6315         
6316         /* Some Linux gcvt's give -1.e+5 here. */
6317         Gconvert(-100000.0, 8, 0, buf); 
6318         checkit("-100000", buf);
6319
6320         exit(0);
6321 }
6322 EOP
6323         case "$d_Gconvert" in
6324         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
6325         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
6326         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
6327         *) xxx_list='gconvert gcvt sprintf' ;;
6328         esac
6329
6330         for xxx_convert in $xxx_list; do
6331                 echo "Trying $xxx_convert"
6332                 $rm -f try try$_o
6333                 set try -DTRY_$xxx_convert
6334                 if eval $compile; then
6335                         echo "$xxx_convert" found. >&4
6336                         if ./try; then
6337                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
6338                                 break;
6339                         else
6340                                 echo "...But $xxx_convert didn't work as I expected."
6341                         fi
6342                 else
6343                         echo "$xxx_convert NOT found." >&4
6344                 fi
6345         done
6346                 
6347         case "$xxx_convert" in
6348         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
6349         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
6350         *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
6351         esac
6352 fi
6353
6354 : Initialize h_fcntl
6355 h_fcntl=false
6356
6357 : Initialize h_sysfile
6358 h_sysfile=false
6359
6360 : access call always available on UNIX
6361 set access d_access
6362 eval $inlibc
6363
6364 : locate the flags for 'access()'
6365 case "$d_access" in
6366 "$define")
6367         echo " "
6368         $cat >access.c <<'EOCP'
6369 #include <sys/types.h>
6370 #ifdef I_FCNTL
6371 #include <fcntl.h>
6372 #endif
6373 #ifdef I_SYS_FILE
6374 #include <sys/file.h>
6375 #endif
6376 #ifdef I_UNISTD
6377 #include <unistd.h>
6378 #endif
6379 int main() {
6380         exit(R_OK);
6381 }
6382 EOCP
6383         : check sys/file.h first, no particular reason here
6384         if $test `./findhdr sys/file.h` && \
6385                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
6386                 h_sysfile=true;
6387                 echo "<sys/file.h> defines the *_OK access constants." >&4
6388         elif $test `./findhdr fcntl.h` && \
6389                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
6390                 h_fcntl=true;
6391                 echo "<fcntl.h> defines the *_OK access constants." >&4
6392         elif $test `./findhdr unistd.h` && \
6393                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
6394                 echo "<unistd.h> defines the *_OK access constants." >&4
6395         else
6396                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
6397         fi
6398         ;;
6399 esac
6400 $rm -f access*
6401
6402 : see if accessx exists
6403 set accessx d_accessx
6404 eval $inlibc
6405
6406 : see if alarm exists
6407 set alarm d_alarm
6408 eval $inlibc
6409
6410 : Look for GNU-cc style attribute checking
6411 echo " "
6412 echo "Checking whether your compiler can handle __attribute__ ..." >&4
6413 $cat >attrib.c <<'EOCP'
6414 #include <stdio.h>
6415 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
6416 EOCP
6417 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
6418         if $contains 'warning' attrib.out >/dev/null 2>&1; then
6419                 echo "Your C compiler doesn't fully support __attribute__."
6420                 val="$undef"
6421         else
6422                 echo "Your C compiler supports __attribute__."
6423                 val="$define"
6424         fi
6425 else
6426         echo "Your C compiler doesn't seem to understand __attribute__ at all."
6427         val="$undef"
6428 fi
6429 set d_attribut
6430 eval $setvar
6431 $rm -f attrib*
6432
6433 : see if bcmp exists
6434 set bcmp d_bcmp
6435 eval $inlibc
6436
6437 : see if bcopy exists
6438 set bcopy d_bcopy
6439 eval $inlibc
6440
6441 : see if this is a unistd.h system
6442 set unistd.h i_unistd
6443 eval $inhdr
6444
6445 : see if getpgrp exists
6446 set getpgrp d_getpgrp
6447 eval $inlibc
6448
6449 case "$d_getpgrp" in
6450 "$define")
6451         echo " "
6452         echo "Checking to see which flavor of getpgrp is in use..."
6453         $cat >set.c <<EOP
6454 #$i_unistd I_UNISTD
6455 #include <sys/types.h>
6456 #ifdef I_UNISTD
6457 #  include <unistd.h>
6458 #endif
6459 int main()
6460 {
6461         if (getuid() == 0) {
6462                 printf("(I see you are running Configure as super-user...)\n");
6463                 setuid(1);
6464         }
6465 #ifdef TRY_BSD_PGRP
6466         if (getpgrp(1) == 0)
6467                 exit(0);
6468 #else
6469         if (getpgrp() > 0)
6470                 exit(0);
6471 #endif
6472         exit(1);
6473 }
6474 EOP
6475         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6476                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
6477                 val="$define"
6478         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6479                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
6480                 val="$undef"
6481         else
6482                 echo "I can't seem to compile and run the test program."
6483                 if ./usg; then
6484                         xxx="a USG one, i.e. you use getpgrp()."
6485                 else
6486                         # SVR4 systems can appear rather BSD-ish.
6487                         case "$i_unistd" in
6488                         $undef)
6489                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
6490                                 val="$define"
6491                                 ;;
6492                         $define)
6493                                 xxx="probably a USG one, i.e. you use getpgrp()."
6494                                 val="$undef"
6495                                 ;;
6496                         esac
6497                 fi
6498                 echo "Assuming your getpgrp is $xxx" >&4
6499         fi
6500         ;;
6501 *) val="$undef";;
6502 esac
6503 set d_bsdgetpgrp
6504 eval $setvar
6505 $rm -f set set.c
6506
6507 : see if setpgrp exists
6508 set setpgrp d_setpgrp
6509 eval $inlibc
6510
6511 case "$d_setpgrp" in
6512 "$define")
6513         echo " "
6514         echo "Checking to see which flavor of setpgrp is in use..."
6515         $cat >set.c <<EOP
6516 #$i_unistd I_UNISTD
6517 #include <sys/types.h>
6518 #ifdef I_UNISTD
6519 #  include <unistd.h>
6520 #endif
6521 int main()
6522 {
6523         if (getuid() == 0) {
6524                 printf("(I see you are running Configure as super-user...)\n");
6525                 setuid(1);
6526         }
6527 #ifdef TRY_BSD_PGRP
6528         if (-1 == setpgrp(1, 1))
6529                 exit(0);
6530 #else
6531         if (setpgrp() != -1)
6532                 exit(0);
6533 #endif
6534         exit(1);
6535 }
6536 EOP
6537         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6538                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
6539                 val="$define"
6540         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6541                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
6542                 val="$undef"
6543         else
6544                 echo "(I can't seem to compile and run the test program.)"
6545                 if ./usg; then
6546                         xxx="a USG one, i.e. you use setpgrp()."
6547                 else
6548                         # SVR4 systems can appear rather BSD-ish.
6549                         case "$i_unistd" in
6550                         $undef)
6551                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
6552                                 val="$define"
6553                                 ;;
6554                         $define)
6555                                 xxx="probably a USG one, i.e. you use setpgrp()."
6556                                 val="$undef"
6557                                 ;;
6558                         esac
6559                 fi
6560                 echo "Assuming your setpgrp is $xxx" >&4
6561         fi
6562         ;;
6563 *) val="$undef";;
6564 esac
6565 set d_bsdsetpgrp
6566 eval $setvar
6567 $rm -f set set.c
6568 : see if bzero exists
6569 set bzero d_bzero
6570 eval $inlibc
6571
6572 : check for lengths of integral types
6573 echo " "
6574 case "$intsize" in
6575 '')
6576         echo "Checking to see how big your integers are..." >&4
6577         $cat >intsize.c <<'EOCP'
6578 #include <stdio.h>
6579 int main()
6580 {
6581         printf("intsize=%d;\n", sizeof(int));
6582         printf("longsize=%d;\n", sizeof(long));
6583         printf("shortsize=%d;\n", sizeof(short));
6584         exit(0);
6585 }
6586 EOCP
6587         set intsize
6588         if eval $compile_ok && ./intsize > /dev/null; then
6589                 eval `./intsize`
6590                 echo "Your integers are $intsize bytes long."
6591                 echo "Your long integers are $longsize bytes long."
6592                 echo "Your short integers are $shortsize bytes long."
6593         else
6594                 $cat >&4 <<EOM
6595 !
6596 Help! I can't compile and run the intsize test program: please enlighten me!
6597 (This is probably a misconfiguration in your system or libraries, and
6598 you really ought to fix it.  Still, I'll try anyway.)
6599 !
6600 EOM
6601                 dflt=4
6602                 rp="What is the size of an integer (in bytes)?"
6603                 . ./myread
6604                 intsize="$ans"
6605                 dflt=$intsize
6606                 rp="What is the size of a long integer (in bytes)?"
6607                 . ./myread
6608                 longsize="$ans"
6609                 dflt=2
6610                 rp="What is the size of a short integer (in bytes)?"
6611                 . ./myread
6612                 shortsize="$ans"
6613         fi
6614         ;;
6615 esac
6616 $rm -f intsize intsize.*
6617
6618 : see if signal is declared as pointer to function returning int or void
6619 echo " "
6620 xxx=`./findhdr signal.h`
6621 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
6622 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
6623         echo "You have int (*signal())() instead of void." >&4
6624         val="$undef"
6625 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
6626         echo "You have void (*signal())()." >&4
6627         val="$define"
6628 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
6629         echo "You have int (*signal())() instead of void." >&4
6630         val="$undef"
6631 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
6632         echo "You have void (*signal())()." >&4
6633         val="$define"
6634 else
6635         case "$d_voidsig" in
6636         '')
6637         echo "I can't determine whether signal handler returns void or int..." >&4
6638                 dflt=void
6639                 rp="What type does your signal handler return?"
6640                 . ./myread
6641                 case "$ans" in
6642                 v*) val="$define";;
6643                 *) val="$undef";;
6644                 esac;;
6645         "$define")
6646                 echo "As you already told me, signal handler returns void." >&4
6647                 val="$define"
6648                 ;;
6649         *)      echo "As you already told me, signal handler returns int." >&4
6650                 val="$undef"
6651                 ;;
6652         esac
6653 fi
6654 set d_voidsig
6655 eval $setvar
6656 case "$d_voidsig" in
6657 "$define") signal_t="void";;
6658 *) signal_t="int";;
6659 esac
6660 $rm -f $$.tmp
6661
6662 : check for ability to cast large floats to 32-bit ints.
6663 echo " "
6664 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
6665 if $test "$intsize" -ge 4; then
6666         xxx=int
6667 else
6668         xxx=long
6669 fi
6670 $cat >try.c <<EOCP
6671 #include <stdio.h>
6672 #include <sys/types.h>
6673 #include <signal.h>
6674 $signal_t blech(s) int s; { exit(3); }
6675 int main()
6676 {
6677         $xxx i32;
6678         double f, g;
6679         int result = 0;
6680         char str[16];
6681         signal(SIGFPE, blech);
6682
6683         /* Don't let compiler optimize the test away.  Store the number 
6684            in a writable string for gcc to pass to sscanf under HP/UX.
6685         */
6686         sprintf(str, "2147483647");
6687         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
6688         g = 10 * f;
6689         i32  = ($xxx) g;
6690
6691         /* x86 processors will probably give 0x8000 0000, which is a
6692        sign change.  We don't want that.  We want to mimic SPARC
6693            behavior here, which is to preserve the sign and give
6694            back 0x7fff ffff.
6695         */
6696         if (i32 != ($xxx) f)
6697                 result |= 1;
6698         exit(result);
6699 }
6700 EOCP
6701 set try
6702 if eval $compile_ok; then
6703         ./try
6704         yyy=$?
6705 else
6706         echo "(I can't seem to compile the test program--assuming it can't)"
6707         yyy=1
6708 fi
6709 case "$yyy" in
6710 0)      val="$define"
6711         echo "Yup, it can."
6712         ;;
6713 *)      val="$undef"
6714         echo "Nope, it can't."
6715         ;;
6716 esac
6717 set d_casti32
6718 eval $setvar
6719 $rm -f try try.*
6720
6721 : check for ability to cast negative floats to unsigned
6722 echo " "
6723 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
6724 $cat >try.c <<EOCP
6725 #include <stdio.h>
6726 #include <sys/types.h>
6727 #include <signal.h>
6728 $signal_t blech(s) int s; { exit(7); }
6729 $signal_t blech_in_list(s) int s; { exit(4); }
6730 unsigned long dummy_long(p) unsigned long p; { return p; }
6731 unsigned int dummy_int(p) unsigned int p; { return p; }
6732 unsigned short dummy_short(p) unsigned short p; { return p; }
6733 int main()
6734 {
6735         double f;
6736         unsigned long along;
6737         unsigned int aint;
6738         unsigned short ashort;
6739         int result = 0;
6740         char str[16];
6741         
6742         /* Frustrate gcc-2.7.2's optimizer which failed this test with
6743            a direct f = -123. assignment.  gcc-2.8.0 reportedly
6744            optimized the whole file away
6745         */
6746         /* Store the number in a writable string for gcc to pass to 
6747            sscanf under HP/UX.
6748         */
6749         sprintf(str, "-123");
6750         sscanf(str, "%lf", &f);  /* f = -123.; */
6751
6752         signal(SIGFPE, blech);
6753         along = (unsigned long)f;
6754         aint = (unsigned int)f;
6755         ashort = (unsigned short)f;
6756         if (along != (unsigned long)-123)
6757                 result |= 1;
6758         if (aint != (unsigned int)-123)
6759                 result |= 1;
6760         if (ashort != (unsigned short)-123)
6761                 result |= 1;
6762         sprintf(str, "1073741824.");
6763         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
6764         f = f + f;
6765         along = 0;
6766         along = (unsigned long)f;
6767         if (along != 0x80000000)
6768                 result |= 2;
6769         f -= 1.;
6770         along = 0;
6771         along = (unsigned long)f;
6772         if (along != 0x7fffffff)
6773                 result |= 1;
6774         f += 2.;
6775         along = 0;
6776         along = (unsigned long)f;
6777         if (along != 0x80000001)
6778                 result |= 2;
6779         if (result)
6780                 exit(result);
6781         signal(SIGFPE, blech_in_list);
6782         sprintf(str, "123.");
6783         sscanf(str, "%lf", &f);  /* f = 123.; */
6784         along = dummy_long((unsigned long)f);
6785         aint = dummy_int((unsigned int)f);
6786         ashort = dummy_short((unsigned short)f);
6787         if (along != (unsigned long)123)
6788                 result |= 4;
6789         if (aint != (unsigned int)123)
6790                 result |= 4;
6791         if (ashort != (unsigned short)123)
6792                 result |= 4;
6793         exit(result);
6794
6795 }
6796 EOCP
6797 set try
6798 if eval $compile_ok; then
6799         ./try
6800         castflags=$?
6801 else
6802         echo "(I can't seem to compile the test program--assuming it can't)"
6803         castflags=7
6804 fi
6805 case "$castflags" in
6806 0)      val="$define"
6807         echo "Yup, it can."
6808         ;;
6809 *)      val="$undef"
6810         echo "Nope, it can't."
6811         ;;
6812 esac
6813 set d_castneg
6814 eval $setvar
6815 $rm -f try.*
6816
6817 : see if vprintf exists
6818 echo " "
6819 if set vprintf val -f d_vprintf; eval $csym; $val; then
6820         echo 'vprintf() found.' >&4
6821         val="$define"
6822         $cat >vprintf.c <<'EOF'
6823 #include <varargs.h>
6824
6825 int main() { xxx("foo"); }
6826
6827 xxx(va_alist)
6828 va_dcl
6829 {
6830         va_list args;
6831         char buf[10];
6832
6833         va_start(args);
6834         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
6835 }
6836 EOF
6837         set vprintf
6838         if eval $compile && ./vprintf; then
6839                 echo "Your vsprintf() returns (int)." >&4
6840                 val2="$undef"
6841         else
6842                 echo "Your vsprintf() returns (char*)." >&4
6843                 val2="$define"
6844         fi
6845 else
6846         echo 'vprintf() NOT found.' >&4
6847                 val="$undef"
6848                 val2="$undef"
6849 fi
6850 set d_vprintf
6851 eval $setvar
6852 val=$val2
6853 set d_charvspr
6854 eval $setvar
6855
6856 : see if chown exists
6857 set chown d_chown
6858 eval $inlibc
6859
6860 : see if chroot exists
6861 set chroot d_chroot
6862 eval $inlibc
6863
6864 : see if chsize exists
6865 set chsize d_chsize
6866 eval $inlibc
6867
6868 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
6869 while $test $# -ge 2; do
6870         case "$1" in
6871         $define) echo "#include <$2>";;
6872         esac ;
6873     shift 2;
6874 done > try.c;
6875 echo "int main () { struct $struct foo; foo.$field = 0; }" >> try.c;
6876 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
6877         val="$define";
6878 else
6879         val="$undef";
6880 fi;
6881 set $varname;
6882 eval $setvar;
6883 $rm -f try.c try.o'
6884
6885 : see if this is a sys/uio.h system
6886 set sys/uio.h i_sysuio
6887 eval $inhdr
6888
6889 echo "Checking to see if your system supports struct iovec..." >&4
6890 set d_iovec_s iovec iov_base $i_sysuio sys/uio.h
6891 eval $hasfield
6892 case "$d_iovec_s" in
6893 "$define")      echo "Yup, it does." >&4
6894                 ;;
6895 *)              echo "Nope, it doesn't." >&4
6896                 ;;
6897 esac
6898
6899 socketlib=''
6900 sockethdr=''
6901 : see whether socket exists
6902 echo " "
6903 $echo $n "Hmm... $c" >&4
6904 if set socket val -f d_socket; eval $csym; $val; then
6905         echo "Looks like you have Berkeley networking support." >&4
6906         d_socket="$define"
6907         if set setsockopt val -f; eval $csym; $val; then
6908                 d_oldsock="$undef"
6909         else
6910                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
6911                 d_oldsock="$define"
6912         fi
6913 else
6914         if $contains socklib libc.list >/dev/null 2>&1; then
6915                 echo "Looks like you have Berkeley networking support." >&4
6916                 d_socket="$define"
6917                 : we will have to assume that it supports the 4.2 BSD interface
6918                 d_oldsock="$undef"
6919         else
6920                 echo "You don't have Berkeley networking in libc$_a..." >&4
6921                 if test "X$d_socket" = "X$define"; then
6922                    echo "...but you seem to believe that you have sockets." >&4
6923                 else
6924                         for net in net socket
6925                         do
6926                                 if test -f /usr/lib/lib$net$_a; then
6927                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
6928                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
6929                                         if $contains socket libc.list >/dev/null 2>&1; then
6930                                                 d_socket="$define"
6931                                                 socketlib="-l$net"
6932                                                 case "$net" in
6933                                                 net)
6934                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
6935                                                         sockethdr="-I/usr/netinclude"
6936                                                         ;;
6937                                                 esac
6938                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
6939                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
6940                                                         d_oldsock="$undef"
6941                                                 else
6942                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
6943                                                         d_oldsock="$define"
6944                                                 fi
6945                                                 break
6946                                         fi
6947                                 fi
6948                         done
6949                         if test "X$d_socket" != "X$define"; then
6950                            echo "or anywhere else I see." >&4
6951                            d_socket="$undef"
6952                            d_oldsock="$undef"
6953                         fi
6954                 fi
6955         fi
6956 fi
6957
6958 : see if socketpair exists
6959 set socketpair d_sockpair
6960 eval $inlibc
6961
6962
6963 echo " "
6964 echo "Checking the availability of certain socket constants..." >& 4
6965 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
6966         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
6967         $cat >try.c <<EOF
6968 #include <sys/types.h>
6969 #include <sys/socket.h>
6970 int main() {
6971     int i = $ENUM;
6972 }
6973 EOF
6974         val="$undef"
6975         set try; if eval $compile; then
6976                 val="$define"
6977         fi
6978         set d_${enum}; eval $setvar
6979         $rm -f try.c try
6980 done
6981
6982 set sendmsg d_sendmsg
6983 eval $inlibc
6984
6985 set recvmsg d_recvmsg
6986 eval $inlibc
6987
6988 echo " "
6989 $echo $n "Checking to see if your system supports struct msghdr...$c" >&4
6990 set d_msghdr_s msghdr msg_name define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
6991 eval $hasfield
6992 case "$d_msghdr_s" in
6993 "$define")      echo "Yup, it does." >&4
6994                 ;;
6995 *)              echo "Nope, it doesn't." >&4
6996                 ;;
6997 esac
6998
6999 $echo $n "Checking to see if your system supports struct cmsghdr...$c" >&4
7000 set d_cmsghdr_s cmsghdr cmsg_len define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7001 eval $hasfield
7002 case "$d_cmsghdr_s" in
7003 "$define")      echo "Yup, it does." >&4
7004                 ;;
7005 *)              echo "Nope, it doesn't." >&4
7006                 ;;
7007 esac
7008
7009 : check for const keyword
7010 echo " "
7011 echo 'Checking to see if your C compiler knows about "const"...' >&4
7012 $cat >const.c <<'EOCP'
7013 typedef struct spug { int drokk; } spug;
7014 int main()
7015 {
7016         const char *foo;
7017         const spug y;
7018 }
7019 EOCP
7020 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
7021         val="$define"
7022         echo "Yup, it does."
7023 else
7024         val="$undef"
7025         echo "Nope, it doesn't."
7026 fi
7027 set d_const
7028 eval $setvar
7029
7030 : see if crypt exists
7031 echo " "
7032 if set crypt val -f d_crypt; eval $csym; $val; then
7033         echo 'crypt() found.' >&4
7034         val="$define"
7035         cryptlib=''
7036 else
7037         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
7038         if $test -z "$cryptlib"; then
7039                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
7040         else
7041                 cryptlib=-lcrypt
7042         fi
7043         if $test -z "$cryptlib"; then
7044                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
7045         else
7046                 cryptlib=-lcrypt
7047         fi
7048         if $test -z "$cryptlib"; then
7049                 cryptlib=`./loc libcrypt$_a "" $libpth`
7050         else
7051                 cryptlib=-lcrypt
7052         fi
7053         if $test -z "$cryptlib"; then
7054                 echo 'crypt() NOT found.' >&4
7055                 val="$undef"
7056         else
7057                 val="$define"
7058         fi
7059 fi
7060 set d_crypt
7061 eval $setvar
7062
7063 : get csh whereabouts
7064 case "$csh" in
7065 'csh') val="$undef" ;;
7066 *) val="$define" ;;
7067 esac
7068 set d_csh
7069 eval $setvar
7070 : Respect a hint or command line value for full_csh.
7071 case "$full_csh" in
7072 '') full_csh=$csh ;;
7073 esac
7074
7075 : see if cuserid exists
7076 set cuserid d_cuserid
7077 eval $inlibc
7078
7079 : see if this is a limits.h system
7080 set limits.h i_limits
7081 eval $inhdr
7082
7083 : see if this is a float.h system
7084 set float.h i_float
7085 eval $inhdr
7086
7087 : See if number of significant digits in a double precision number is known
7088 echo " "
7089 $cat >dbl_dig.c <<EOM
7090 #$i_limits I_LIMITS
7091 #$i_float I_FLOAT
7092 #ifdef I_LIMITS
7093 #include <limits.h>
7094 #endif
7095 #ifdef I_FLOAT
7096 #include <float.h>
7097 #endif
7098 #ifdef DBL_DIG
7099 printf("Contains DBL_DIG");
7100 #endif
7101 EOM
7102 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
7103 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
7104         echo "DBL_DIG found." >&4
7105         val="$define"
7106 else
7107         echo "DBL_DIG NOT found." >&4
7108         val="$undef"
7109 fi
7110 $rm -f dbl_dig.?
7111 set d_dbl_dig
7112 eval $setvar
7113
7114
7115 if $test X"$use64bits" = X"$define"; then
7116         : see if dbminit64 exists
7117         set dbminit64 d_dbminit64
7118         eval $inlibc
7119
7120         : see if dbmclose64 exists
7121         set dbmclose64 d_dbmclose64
7122         eval $inlibc
7123
7124         : see if fetch64 exists
7125         set fetch64 d_fetch64
7126         eval $inlibc
7127
7128         : see if store64 exists
7129         set store64 d_store64
7130         eval $inlibc
7131
7132         : see if delete64 exists
7133         set delete64 d_delete64
7134         eval $inlibc
7135
7136         : see if firstkey64 exists
7137         set firstkey64 d_firstkey64
7138         eval $inlibc
7139
7140         : see if nextkey64 exists
7141         set nextkey64 d_nextkey64
7142         eval $inlibc
7143 else
7144         val="$undef"
7145         for xxx in d_dbminit64 d_dbmclose64 d_fetch64 d_store64 d_delete64 d_firstkey64 d_nextkey64
7146         do
7147                 set $xxx
7148                 eval $setvar
7149         done
7150 fi
7151
7152 : see if difftime exists
7153 set difftime d_difftime
7154 eval $inlibc
7155
7156 : see if sys/stat.h is available
7157 set sys/stat.h i_sysstat
7158 eval $inhdr
7159
7160 : see if this is a dirent system
7161 echo " "
7162 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
7163         val="$define"
7164         echo "<dirent.h> found." >&4
7165 else
7166         val="$undef"
7167         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
7168                 echo "<sys/dir.h> found." >&4
7169                 echo " "
7170         else
7171                 xinc=`./findhdr sys/ndir.h`
7172         fi
7173         echo "<dirent.h> NOT found." >&4
7174 fi
7175 set i_dirent
7176 eval $setvar
7177
7178 : Look for type of directory structure.
7179 echo " "
7180 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7181
7182 case "$direntrytype" in
7183 ''|' ')
7184         case "$i_dirent" in
7185         $define) guess1='struct dirent' ;;
7186         *) guess1='struct direct'  ;;
7187         esac
7188         ;;
7189 *)      guess1="$direntrytype"
7190         ;;
7191 esac
7192
7193 case "$guess1" in
7194 'struct dirent') guess2='struct direct' ;;
7195 *) guess2='struct dirent' ;;
7196 esac
7197                 
7198 if $contains "$guess1" try.c >/dev/null 2>&1; then
7199         direntrytype="$guess1"
7200         echo "Your directory entries are $direntrytype." >&4
7201 elif $contains "$guess2" try.c >/dev/null 2>&1; then
7202         direntrytype="$guess2"
7203         echo "Your directory entries seem to be $direntrytype." >&4
7204 else
7205         echo "I don't recognize your system's directory entries." >&4
7206         rp="What type is used for directory entries on this system?"
7207         dflt="$guess1"
7208         . ./myread
7209         direntrytype="$ans"
7210 fi
7211 $rm -f try.c
7212
7213
7214 : see if the directory entry stores field length
7215 echo " "
7216 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7217 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
7218         echo "Good, your directory entry keeps length information in d_namlen." >&4
7219         val="$define"
7220 else
7221         echo "Your directory entry does not know about the d_namlen field." >&4
7222         val="$undef"
7223 fi
7224 set d_dirnamlen
7225 eval $setvar
7226 $rm -f try.c
7227
7228
7229 if $test X"$use64bits" = X"$define"; then
7230         : see if fstat64 exists
7231         set fstat64 d_fstat64
7232         eval $inlibc
7233
7234         : see if ftruncate64 exists
7235         set ftruncate64 d_ftruncate64
7236         eval $inlibc
7237
7238         : see if lockf64 exists
7239         set lockf64 d_lockf64
7240         eval $inlibc
7241
7242         : see if llseek exists
7243         set llseek d_llseek
7244         eval $inlibc
7245
7246         : see if lseek64 exists
7247         set lseek64 d_lseek64
7248         eval $inlibc
7249
7250         : see if lstat64 exists
7251         set lstat64 d_lstat64
7252         eval $inlibc
7253
7254         : see if open64 exists
7255         set open64 d_open64
7256         eval $inlibc
7257
7258         : see if opendir64 exists
7259         set opendir64 d_opendir64
7260         eval $inlibc
7261
7262         : see if readdir64 exists
7263         set readdir64 d_readdir64
7264         eval $inlibc
7265
7266         : see if seekdir64 exists
7267         set seekdir64 d_seekdir64
7268         eval $inlibc
7269
7270         : see if stat64 exists
7271         set stat64 d_stat64
7272         eval $inlibc
7273
7274         : see if telldir64 exists
7275         set telldir64 d_telldir64
7276         eval $inlibc
7277
7278         : see if truncate64 exists
7279         set truncate64 d_truncate64
7280         eval $inlibc
7281
7282         : check for off64_t
7283         echo " "
7284         echo $n "Checking to see if your system supports off64_t...$c" >&4
7285         $cat >try.c <<EOCP
7286 #include <sys/types.h>
7287 #include <unistd.h>
7288 off64_t foo() { off64_t x; x = 7; return x; }'
7289 EOCP
7290         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7291                 val="$define"
7292                 echo " Yup, it does." >&4
7293         else
7294                 val="$undef"
7295                 echo " Nope, it doesn't." >&4
7296         fi
7297         $rm -f try.*
7298         set d_off64_t
7299         eval $setvar
7300
7301         : check for offset_t
7302         echo " "
7303         echo $n "Checking to see if your system supports offset_t...$c" >&4
7304         $cat >try.c <<EOCP
7305 #include <sys/types.h>
7306 #include <unistd.h>
7307 offset_t foo() { offset_t x; x = 7; return x; }'
7308 EOCP
7309         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7310                 val="$define"
7311                 echo " Yup, it does." >&4
7312         else
7313                 val="$undef"
7314                 echo " Nope, it doesn't." >&4
7315         fi
7316         $rm -f try.*
7317         set d_offset_t
7318         eval $setvar
7319
7320         : check for ino64_t
7321         echo " "
7322         echo $n "Checking to see if your system supports ino64_t...$c" >&4
7323         val="$undef"
7324         case "$i_sysstat" in
7325         "$define" )
7326                 $cat >try.c <<EOCP
7327 #include <sys/types.h>
7328 #include <sys/stat.h>
7329 ino64_t foo() { ino64_t x; x = 7; return x; }'
7330 EOCP
7331                 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7332                         val="$define"
7333                 fi
7334                 $rm -f try.*
7335                 ;;
7336         esac
7337         if $test "X$val" = X"$define"; then
7338                 echo " Yup, it does." >&4
7339         else
7340                 echo " Nope, it doesn't." >&4
7341         fi
7342         set d_ino64_t
7343         eval $setvar
7344
7345         : check for struct flock64
7346         echo " "
7347         echo "Checking to see if your system supports struct flock64..." >&4
7348         if $h_fcntl; then
7349                 set d_flock64_s flock64 l_len define fcntl.h
7350                 eval $hasfield
7351         else
7352                 val="$undef"
7353                 set d_flock64_s
7354                 eval $setvar
7355         fi
7356         case "$d_flock64_s" in
7357         "$define")      echo "Yup, it does." >&4
7358                         ;;
7359         *)              echo "Nope, it doesn't." >&4
7360                         ;;
7361         esac
7362
7363         : check for struct dirent64
7364         echo " "
7365         echo "Checking to see if your system supports struct dirent64..." >&4
7366         set d_dirent64_s dirent64 d_off $i_dirent dirent.h
7367         eval $hasfield
7368         case "$d_dirent64_s" in
7369         "$define")      echo "Yup, it does." >&4
7370                         ;;
7371         *)              echo "Nope, it doesn't." >&4
7372                         ;;
7373         esac
7374
7375 else
7376         val="$undef"
7377         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
7378         do
7379                 set $xxx
7380                 eval $setvar
7381         done
7382 fi
7383
7384 : see if dlerror exists
7385 xxx_runnm="$runnm"
7386 runnm=false
7387 set dlerror d_dlerror
7388 eval $inlibc
7389 runnm="$xxx_runnm"
7390
7391 : see if dlfcn is available
7392 set dlfcn.h i_dlfcn
7393 eval $inhdr
7394
7395 case "$usedl" in
7396 $define|y|true)
7397         $cat << EOM
7398
7399 On a few systems, the dynamically loaded modules that perl generates and uses
7400 will need a different extension than shared libs. The default will probably
7401 be appropriate.
7402
7403 EOM
7404         case "$dlext" in
7405         '')     dflt="$so" ;;
7406         *)      dflt="$dlext" ;;
7407         esac
7408         rp='What is the extension of dynamically loaded modules'
7409         . ./myread
7410         dlext="$ans"
7411         ;;
7412 *)
7413         dlext="none"
7414         ;;
7415 esac
7416
7417 : Check if dlsym need a leading underscore
7418 echo " "
7419 val="$undef"
7420
7421 case "$dlsrc" in
7422 dl_dlopen.xs)
7423         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
7424         $cat >dyna.c <<'EOM'
7425 fred () { }
7426 EOM
7427
7428 $cat >fred.c<<EOM
7429
7430 #include <stdio.h>
7431 #$i_dlfcn I_DLFCN
7432 #ifdef I_DLFCN
7433 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
7434 #else
7435 #include <sys/types.h>
7436 #include <nlist.h>
7437 #include <link.h>
7438 #endif
7439
7440 extern int fred() ;
7441
7442 int main()
7443 {
7444     void * handle ;
7445     void * symbol ;
7446 #ifndef RTLD_LAZY
7447     int mode = 1 ;
7448 #else
7449     int mode = RTLD_LAZY ;
7450 #endif
7451     handle = dlopen("./dyna.$dlext", mode) ;
7452     if (handle == NULL) {
7453         printf ("1\n") ;
7454         fflush (stdout) ;
7455         exit(0);
7456     }
7457     symbol = dlsym(handle, "fred") ;
7458     if (symbol == NULL) {
7459         /* try putting a leading underscore */
7460         symbol = dlsym(handle, "_fred") ;
7461         if (symbol == NULL) {
7462             printf ("2\n") ;
7463             fflush (stdout) ;
7464             exit(0);
7465         }
7466         printf ("3\n") ;
7467     }
7468     else
7469         printf ("4\n") ;
7470     fflush (stdout) ;
7471     exit(0);
7472 }
7473 EOM
7474         : Call the object file tmp-dyna.o in case dlext=o.
7475         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
7476                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
7477                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
7478                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
7479                 xxx=`./fred`
7480                 case $xxx in
7481                 1)      echo "Test program failed using dlopen." >&4
7482                         echo "Perhaps you should not use dynamic loading." >&4;;
7483                 2)      echo "Test program failed using dlsym." >&4
7484                         echo "Perhaps you should not use dynamic loading." >&4;;
7485                 3)      echo "dlsym needs a leading underscore" >&4
7486                         val="$define" ;;
7487                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
7488                 esac
7489         else
7490                 echo "I can't compile and run the test program." >&4
7491         fi
7492         ;;
7493 esac
7494                 
7495 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
7496
7497 set d_dlsymun
7498 eval $setvar
7499
7500 hasproto='varname=$1; func=$2; shift; shift;
7501 while $test $# -ge 2; do
7502         case "$1" in
7503         $define) echo "#include <$2>";;
7504         esac ;
7505     shift 2;
7506 done > try.c;
7507 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
7508 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
7509         echo "$func() prototype found.";
7510         val="$define";
7511 else
7512         echo "$func() prototype NOT found.";
7513         val="$undef";
7514 fi;
7515 set $varname;
7516 eval $setvar;
7517 $rm -f try.c tryout.c'
7518
7519 : see if prototype for drand48 is available
7520 echo " "
7521 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
7522 eval $hasproto
7523
7524 : see if dup2 exists
7525 set dup2 d_dup2
7526 eval $inlibc
7527
7528 : see if eaccess exists
7529 set eaccess d_eaccess
7530 eval $inlibc
7531
7532 : see if endgrent exists
7533 set endgrent d_endgrent
7534 eval $inlibc
7535
7536 : see if endhostent exists
7537 set endhostent d_endhent
7538 eval $inlibc
7539
7540 : see if endnetent exists
7541 set endnetent d_endnent
7542 eval $inlibc
7543
7544 : see if endprotoent exists
7545 set endprotoent d_endpent
7546 eval $inlibc
7547
7548 : see if endpwent exists
7549 set endpwent d_endpwent
7550 eval $inlibc
7551
7552 : see if endservent exists
7553 set endservent d_endsent
7554 eval $inlibc
7555
7556 : Locate the flags for 'open()'
7557 echo " "
7558 $cat >open3.c <<'EOCP'
7559 #include <sys/types.h>
7560 #ifdef I_FCNTL
7561 #include <fcntl.h>
7562 #endif
7563 #ifdef I_SYS_FILE
7564 #include <sys/file.h>
7565 #endif
7566 int main() {
7567         if(O_RDONLY);
7568 #ifdef O_TRUNC
7569         exit(0);
7570 #else
7571         exit(1);
7572 #endif
7573 }
7574 EOCP
7575 : check sys/file.h first to get FREAD on Sun
7576 if $test `./findhdr sys/file.h` && \
7577                 set open3 -DI_SYS_FILE && eval $compile; then
7578         h_sysfile=true;
7579         echo "<sys/file.h> defines the O_* constants..." >&4
7580         if ./open3; then
7581                 echo "and you have the 3 argument form of open()." >&4
7582                 val="$define"
7583         else
7584                 echo "but not the 3 argument form of open().  Oh, well." >&4
7585                 val="$undef"
7586         fi
7587 elif $test `./findhdr fcntl.h` && \
7588                 set open3 -DI_FCNTL && eval $compile; then
7589         h_fcntl=true;
7590         echo "<fcntl.h> defines the O_* constants..." >&4
7591         if ./open3; then
7592                 echo "and you have the 3 argument form of open()." >&4
7593                 val="$define"
7594         else
7595                 echo "but not the 3 argument form of open().  Oh, well." >&4
7596                 val="$undef"
7597         fi
7598 else
7599         val="$undef"
7600         echo "I can't find the O_* constant definitions!  You got problems." >&4
7601 fi
7602 set d_open3
7603 eval $setvar
7604 $rm -f open3*
7605
7606 : check for non-blocking I/O stuff
7607 case "$h_sysfile" in
7608 true) echo "#include <sys/file.h>" > head.c;;
7609 *)
7610         case "$h_fcntl" in
7611         true) echo "#include <fcntl.h>" > head.c;;
7612         *) echo "#include <sys/fcntl.h>" > head.c;;
7613         esac
7614         ;;
7615 esac
7616 echo " "
7617 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
7618 case "$o_nonblock" in
7619 '')
7620         $cat head.c > try.c
7621         $cat >>try.c <<'EOCP'
7622 int main() {
7623 #ifdef O_NONBLOCK
7624         printf("O_NONBLOCK\n");
7625         exit(0);
7626 #endif
7627 #ifdef O_NDELAY
7628         printf("O_NDELAY\n");
7629         exit(0);
7630 #endif
7631 #ifdef FNDELAY
7632         printf("FNDELAY\n");
7633         exit(0);
7634 #endif
7635         exit(0);
7636 }
7637 EOCP
7638         set try
7639         if eval $compile_ok; then
7640                 o_nonblock=`./try`
7641                 case "$o_nonblock" in
7642                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
7643                 *) echo "Seems like we can use $o_nonblock.";;
7644                 esac
7645         else
7646                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
7647         fi
7648         ;;
7649 *) echo "Using $hint value $o_nonblock.";;
7650 esac
7651 $rm -f try try.* .out core
7652
7653 echo " "
7654 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
7655 case "$eagain" in
7656 '')
7657         $cat head.c > try.c
7658         $cat >>try.c <<EOCP
7659 #include <errno.h>
7660 #include <sys/types.h>
7661 #include <signal.h>
7662 #define MY_O_NONBLOCK $o_nonblock
7663 #ifndef errno  /* XXX need better Configure test */
7664 extern int errno;
7665 #endif
7666 $signal_t blech(x) int x; { exit(3); }
7667 EOCP
7668         $cat >> try.c <<'EOCP'
7669 int main()
7670 {
7671         int pd[2];
7672         int pu[2];
7673         char buf[1];
7674         char string[100];
7675
7676         pipe(pd);       /* Down: child -> parent */
7677         pipe(pu);       /* Up: parent -> child */
7678         if (0 != fork()) {
7679                 int ret;
7680                 close(pd[1]);   /* Parent reads from pd[0] */
7681                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
7682                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
7683                         exit(1);
7684                 signal(SIGALRM, blech);
7685                 alarm(5);
7686                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
7687                         exit(2);
7688                 sprintf(string, "%d\n", ret);
7689                 write(2, string, strlen(string));
7690                 alarm(0);
7691 #ifdef EAGAIN
7692                 if (errno == EAGAIN) {
7693                         printf("EAGAIN\n");
7694                         goto ok;
7695                 }
7696 #endif
7697 #ifdef EWOULDBLOCK
7698                 if (errno == EWOULDBLOCK)
7699                         printf("EWOULDBLOCK\n");
7700 #endif
7701         ok:
7702                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
7703                 sleep(2);                               /* Give it time to close our pipe */
7704                 alarm(5);
7705                 ret = read(pd[0], buf, 1);      /* Should read EOF */
7706                 alarm(0);
7707                 sprintf(string, "%d\n", ret);
7708                 write(3, string, strlen(string));
7709                 exit(0);
7710         }
7711
7712         close(pd[0]);                   /* We write to pd[1] */
7713         close(pu[1]);                   /* We read from pu[0] */
7714         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
7715         close(pd[1]);                   /* Pipe pd is now fully closed! */
7716         exit(0);                                /* Bye bye, thank you for playing! */
7717 }
7718 EOCP
7719         set try
7720         if eval $compile_ok; then
7721                 echo "$startsh" >mtry
7722                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
7723                 chmod +x mtry
7724                 ./mtry >/dev/null 2>&1
7725                 case $? in
7726                 0) eagain=`$cat try.out`;;
7727                 1) echo "Could not perform non-blocking setting!";;
7728                 2) echo "I did a successful read() for something that was not there!";;
7729                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
7730                 *) echo "Something terribly wrong happened during testing.";;
7731                 esac
7732                 rd_nodata=`$cat try.ret`
7733                 echo "A read() system call with no data present returns $rd_nodata."
7734                 case "$rd_nodata" in
7735                 0|-1) ;;
7736                 *)
7737                         echo "(That's peculiar, fixing that to be -1.)"
7738                         rd_nodata=-1
7739                         ;;
7740                 esac
7741                 case "$eagain" in
7742                 '')
7743                         echo "Forcing errno EAGAIN on read() with no data available."
7744                         eagain=EAGAIN
7745                         ;;
7746                 *)
7747                         echo "Your read() sets errno to $eagain when no data is available."
7748                         ;;
7749                 esac
7750                 status=`$cat try.err`
7751                 case "$status" in
7752                 0) echo "And it correctly returns 0 to signal EOF.";;
7753                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
7754                 *) echo "However, your read() returns '$status' on EOF??";;
7755                 esac
7756                 val="$define"
7757                 if test "$status" = "$rd_nodata"; then
7758                         echo "WARNING: you can't distinguish between EOF and no data!"
7759                         val="$undef"
7760                 fi
7761         else
7762                 echo "I can't compile the test program--assuming errno EAGAIN will do."
7763                 eagain=EAGAIN
7764         fi
7765         set d_eofnblk
7766         eval $setvar
7767         ;;
7768 *)
7769         echo "Using $hint value $eagain."
7770         echo "Your read() returns $rd_nodata when no data is present."
7771         case "$d_eofnblk" in
7772         "$define") echo "And you can see EOF because read() returns 0.";;
7773         "$undef") echo "But you can't see EOF status from read() returned value.";;
7774         *)
7775                 echo "(Assuming you can't see EOF status from read anyway.)"
7776                 d_eofnblk=$undef
7777                 ;;
7778         esac
7779         ;;
7780 esac
7781 $rm -f try try.* .out core head.c mtry
7782
7783 : see if fchmod exists
7784 set fchmod d_fchmod
7785 eval $inlibc
7786
7787 : see if fchown exists
7788 set fchown d_fchown
7789 eval $inlibc
7790
7791 : see if this is an fcntl system
7792 set fcntl d_fcntl
7793 eval $inlibc
7794
7795 : see if sys/select.h has to be included
7796 set sys/select.h i_sysselct
7797 eval $inhdr
7798
7799 : see if we should include time.h, sys/time.h, or both
7800 echo " "
7801 if test "X$timeincl" = X; then
7802         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
7803         $echo $n "I'm now running the test program...$c"
7804         $cat >try.c <<'EOCP'
7805 #include <sys/types.h>
7806 #ifdef I_TIME
7807 #include <time.h>
7808 #endif
7809 #ifdef I_SYSTIME
7810 #ifdef SYSTIMEKERNEL
7811 #define KERNEL
7812 #endif
7813 #include <sys/time.h>
7814 #endif
7815 #ifdef I_SYSSELECT
7816 #include <sys/select.h>
7817 #endif
7818 int main()
7819 {
7820         struct tm foo;
7821 #ifdef S_TIMEVAL
7822         struct timeval bar;
7823 #endif
7824 #ifdef S_TIMEZONE
7825         struct timezone tzp;
7826 #endif
7827         if (foo.tm_sec == foo.tm_sec)
7828                 exit(0);
7829 #ifdef S_TIMEVAL
7830         if (bar.tv_sec == bar.tv_sec)
7831                 exit(0);
7832 #endif
7833         exit(1);
7834 }
7835 EOCP
7836         flags=''
7837         for s_timezone in '-DS_TIMEZONE' ''; do
7838         sysselect=''
7839         for s_timeval in '-DS_TIMEVAL' ''; do
7840         for i_systimek in '' '-DSYSTIMEKERNEL'; do
7841         for i_time in '' '-DI_TIME'; do
7842         for i_systime in '-DI_SYSTIME' ''; do
7843                 case "$flags" in
7844                 '') $echo $n ".$c"
7845                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
7846                         if eval $compile; then
7847                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
7848                                 shift
7849                                 flags="$*"
7850                                 echo " "
7851                                 $echo $n "Succeeded with $flags$c"
7852                         fi
7853                         ;;
7854                 esac
7855         done
7856         done
7857         done
7858         done
7859         done
7860         timeincl=''
7861         echo " "
7862         case "$flags" in
7863         *SYSTIMEKERNEL*) i_systimek="$define"
7864                 timeincl=`./findhdr sys/time.h`
7865                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
7866         *) i_systimek="$undef";;
7867         esac
7868         case "$flags" in
7869         *I_TIME*) i_time="$define"
7870                 timeincl=`./findhdr time.h`" $timeincl"
7871                 echo "We'll include <time.h>." >&4;;
7872         *) i_time="$undef";;
7873         esac
7874         case "$flags" in
7875         *I_SYSTIME*) i_systime="$define"
7876                 timeincl=`./findhdr sys/time.h`" $timeincl"
7877                 echo "We'll include <sys/time.h>." >&4;;
7878         *) i_systime="$undef";;
7879         esac
7880         $rm -f try.c try
7881 fi
7882
7883 : check for fd_set items
7884 $cat <<EOM
7885
7886 Checking to see how well your C compiler handles fd_set and friends ...
7887 EOM
7888 $cat >fd_set.c <<EOCP
7889 #$i_systime I_SYS_TIME
7890 #$i_sysselct I_SYS_SELECT
7891 #$d_socket HAS_SOCKET
7892 #include <sys/types.h>
7893 #ifdef HAS_SOCKET
7894 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
7895 #endif
7896 #ifdef I_SYS_TIME
7897 #include <sys/time.h>
7898 #endif
7899 #ifdef I_SYS_SELECT
7900 #include <sys/select.h>
7901 #endif
7902 int main() {
7903         fd_set fds;
7904
7905 #ifdef TRYBITS
7906         if(fds.fds_bits);
7907 #endif
7908
7909 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
7910         exit(0);
7911 #else
7912         exit(1);
7913 #endif
7914 }
7915 EOCP
7916 set fd_set -DTRYBITS
7917 if eval $compile; then
7918         d_fds_bits="$define"
7919         d_fd_set="$define"
7920         echo "Well, your system knows about the normal fd_set typedef..." >&4
7921         if ./fd_set; then
7922                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
7923                 d_fd_macros="$define"
7924         else
7925                 $cat >&4 <<'EOM'
7926 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
7927 EOM
7928                 d_fd_macros="$undef"
7929         fi
7930 else
7931         $cat <<'EOM'
7932 Hmm, your compiler has some difficulty with fd_set.  Checking further...
7933 EOM
7934         set fd_set
7935         if eval $compile; then
7936                 d_fds_bits="$undef"
7937                 d_fd_set="$define"
7938                 echo "Well, your system has some sort of fd_set available..." >&4
7939                 if ./fd_set; then
7940                         echo "and you have the normal fd_set macros." >&4
7941                         d_fd_macros="$define"
7942                 else
7943                         $cat <<'EOM'
7944 but not the normal fd_set macros!  Gross!  More work for me...
7945 EOM
7946                         d_fd_macros="$undef"
7947                 fi
7948         else
7949         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
7950                 d_fd_set="$undef"
7951                 d_fds_bits="$undef"
7952                 d_fd_macros="$undef"
7953         fi
7954 fi
7955 $rm -f fd_set*
7956
7957 : see if fgetpos exists
7958 set fgetpos d_fgetpos
7959 eval $inlibc
7960
7961
7962 if $test X"$use64bits" = X"$define"; then
7963         : see if fgetpos64 exists
7964         set fgetpos64 d_fgetpos64
7965         eval $inlibc
7966
7967         : see if fopen64 exists
7968         set freopen64 d_fopen64
7969         eval $inlibc
7970
7971         : see if freopen64 exists
7972         set freopen64 d_freopen64
7973         eval $inlibc
7974
7975         : see if fseek64 exists
7976         set fseek64 d_fseek64
7977         eval $inlibc
7978
7979         : see if fseeko64 exists
7980         set fseeko64 d_fseeko64
7981         eval $inlibc
7982
7983         : see if fsetpos64 exists
7984         set fsetpos64 d_fsetpos64
7985         eval $inlibc
7986
7987         : see if ftell64 exists
7988         set ftell64 d_ftell64
7989         eval $inlibc
7990
7991         : see if ftello64 exists
7992         set ftello64 d_ftello64
7993         eval $inlibc
7994
7995         : see if tmpfile64 exists
7996         set tmpfile64 d_tmpfile64
7997         eval $inlibc
7998 else
7999         val="$undef"
8000         for xxx in d_fgetpos64 d_fopen64 d_freopen64 d_fseek64 d_fseeko64 d_fsetpos64 d_ftell64 d_ftello64 d_tmpfile64
8001         do
8002                 set $xxx
8003                 eval $setvar
8004         done
8005 fi
8006
8007 : see if flock exists
8008 set flock d_flock
8009 eval $inlibc
8010
8011 : see if fork exists
8012 set fork d_fork
8013 eval $inlibc
8014
8015 : see if pathconf exists
8016 set pathconf d_pathconf
8017 eval $inlibc
8018
8019 : see if fpathconf exists
8020 set fpathconf d_fpathconf
8021 eval $inlibc
8022
8023 : see if fseeko exists
8024 set fseeko d_fseeko
8025 eval $inlibc
8026
8027 : see if fsetpos exists
8028 set fsetpos d_fsetpos
8029 eval $inlibc
8030
8031 : see if this is a sys/param system
8032 set sys/param.h i_sysparam
8033 eval $inhdr
8034
8035 : see if this is a sys/mount.h system
8036 set sys/mount.h i_sysmount
8037 eval $inhdr
8038
8039
8040 : see if statfs exists
8041 set statfs d_statfs
8042 eval $inlibc
8043
8044 : see if fstatfs exists
8045 set fstatfs d_fstatfs
8046 eval $inlibc
8047
8048 : see if statfs knows about mount flags
8049 set d_statfsflags statfs f_flags $i_sysparam sys/param.h $i_sysmount sys/mount.h
8050 eval $hasfield
8051
8052
8053 : see if statvfs exists
8054 set statvfs d_statvfs
8055 eval $inlibc
8056
8057 : see if fstatvfs exists
8058 set fstatvfs d_fstatvfs
8059 eval $inlibc
8060
8061
8062 : see if ftello exists
8063 set ftello d_ftello
8064 eval $inlibc
8065
8066 : see if getgrent exists
8067 set getgrent d_getgrent
8068 eval $inlibc
8069
8070 : see if gethostbyaddr exists
8071 set gethostbyaddr d_gethbyaddr
8072 eval $inlibc
8073
8074 : see if gethostbyname exists
8075 set gethostbyname d_gethbyname
8076 eval $inlibc
8077
8078 : see if gethostent exists
8079 set gethostent d_gethent
8080 eval $inlibc
8081
8082 : see how we will look up host name
8083 echo " "
8084 call=''
8085 if set gethostname val -f d_gethname; eval $csym; $val; then
8086         echo 'gethostname() found.' >&4
8087         d_gethname="$define"
8088         call=gethostname
8089 fi
8090 if set uname val -f d_uname; eval $csym; $val; then
8091         if ./xenix; then
8092                 $cat <<'EOM'
8093 uname() was found, but you're running xenix, and older versions of xenix
8094 have a broken uname(). If you don't really know whether your xenix is old
8095 enough to have a broken system call, use the default answer.
8096
8097 EOM
8098                 dflt=y
8099                 case "$d_uname" in
8100                 "$define") dflt=n;;
8101                 esac
8102                 rp='Is your uname() broken?'
8103                 . ./myread
8104                 case "$ans" in
8105                 n*) d_uname="$define"; call=uname;;
8106                 esac
8107         else
8108                 echo 'uname() found.' >&4
8109                 d_uname="$define"
8110                 case "$call" in
8111                 '') call=uname ;;
8112                 esac
8113         fi
8114 fi
8115 case "$d_gethname" in
8116 '') d_gethname="$undef";;
8117 esac
8118 case "$d_uname" in
8119 '') d_uname="$undef";;
8120 esac
8121 case "$d_uname$d_gethname" in
8122 *define*)
8123         dflt=n
8124         cat <<EOM
8125  
8126 Every now and then someone has a $call() that lies about the hostname
8127 but can't be fixed for political or economic reasons.  If you wish, I can
8128 pretend $call() isn't there and maybe compute hostname at run-time
8129 thanks to the '$phostname' command.
8130
8131 EOM
8132         rp="Shall I ignore $call() from now on?"
8133         . ./myread
8134         case "$ans" in
8135         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
8136         esac;;
8137 esac
8138 case "$phostname" in
8139 '') aphostname='';;
8140 *) case "$aphostname" in
8141         /*) ;;
8142         *) set X $phostname
8143                 shift
8144                 file=$1
8145                 shift
8146                 file=`./loc $file $file $pth`
8147                 aphostname=`echo $file $*`
8148                 ;;
8149         esac
8150         ;;
8151 esac
8152 case "$d_uname$d_gethname" in
8153 *define*) ;;
8154 *)
8155         case "$phostname" in
8156         '')
8157                 echo "There will be no way for $package to get your hostname." >&4;;
8158         *)
8159         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
8160                 ;;
8161         esac;;
8162 esac
8163 case "$d_phostname" in
8164 '') d_phostname="$undef";;
8165 esac
8166
8167 : see if this is a netdb.h system
8168 set netdb.h i_netdb
8169 eval $inhdr
8170
8171 : see if prototypes for various gethostxxx netdb.h functions are available
8172 echo " "
8173 set d_gethostprotos gethostent $i_netdb netdb.h
8174 eval $hasproto
8175
8176 : see if getlogin exists
8177 set getlogin d_getlogin
8178 eval $inlibc
8179
8180 : see if getmntent exists
8181 set getmntent d_getmntent
8182 eval $inlibc
8183
8184 : see if getnetbyaddr exists
8185 set getnetbyaddr d_getnbyaddr
8186 eval $inlibc
8187
8188 : see if getnetbyname exists
8189 set getnetbyname d_getnbyname
8190 eval $inlibc
8191
8192 : see if getnetent exists
8193 set getnetent d_getnent
8194 eval $inlibc
8195
8196 : see if prototypes for various getnetxxx netdb.h functions are available
8197 echo " "
8198 set d_getnetprotos getnetent $i_netdb netdb.h
8199 eval $hasproto
8200
8201
8202 : see if getprotobyname exists
8203 set getprotobyname d_getpbyname
8204 eval $inlibc
8205
8206 : see if getprotobynumber exists
8207 set getprotobynumber d_getpbynumber
8208 eval $inlibc
8209
8210 : see if getprotoent exists
8211 set getprotoent d_getpent
8212 eval $inlibc
8213
8214 : see if getpgid exists
8215 set getpgid d_getpgid
8216 eval $inlibc
8217
8218 : see if getpgrp2 exists
8219 set getpgrp2 d_getpgrp2
8220 eval $inlibc
8221
8222 : see if getppid exists
8223 set getppid d_getppid
8224 eval $inlibc
8225
8226 : see if getpriority exists
8227 set getpriority d_getprior
8228 eval $inlibc
8229
8230 : see if prototypes for various getprotoxxx netdb.h functions are available
8231 echo " "
8232 set d_getprotoprotos getprotoent $i_netdb netdb.h
8233 eval $hasproto
8234
8235 : see if getpwent exists
8236 set getpwent d_getpwent
8237 eval $inlibc
8238
8239
8240 : see if getservbyname exists
8241 set getservbyname d_getsbyname
8242 eval $inlibc
8243
8244 : see if getservbyport exists
8245 set getservbyport d_getsbyport
8246 eval $inlibc
8247
8248 : see if getservent exists
8249 set getservent d_getsent
8250 eval $inlibc
8251
8252 : see if prototypes for various getservxxx netdb.h functions are available
8253 echo " "
8254 set d_getservprotos getservent $i_netdb netdb.h
8255 eval $hasproto
8256
8257 : see if gettimeofday or ftime exists
8258 set gettimeofday d_gettimeod
8259 eval $inlibc
8260 case "$d_gettimeod" in
8261 "$undef")
8262         set ftime d_ftime 
8263         eval $inlibc
8264         ;;
8265 *)
8266         val="$undef"; set d_ftime; eval $setvar
8267         ;;
8268 esac
8269 case "$d_gettimeod$d_ftime" in
8270 "$undef$undef")
8271         echo " "
8272         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
8273         ;;
8274 esac
8275
8276 : see if this is an grp system
8277 set grp.h i_grp
8278 eval $inhdr
8279
8280 case "$i_grp" in
8281 $define)
8282         xxx=`./findhdr grp.h`
8283         $cppstdin $cppflags $cppminus < $xxx >$$.h
8284
8285         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
8286                 val="$define"
8287         else
8288                 val="$undef"
8289         fi
8290         set d_grpasswd
8291         eval $setvar
8292
8293         $rm -f $$.h
8294         ;;
8295 *)
8296         val="$undef";
8297         set d_grpasswd; eval $setvar
8298         ;;
8299 esac
8300
8301 : see if hasmntopt exists
8302 set hasmntopt d_hasmntopt
8303 eval $inlibc
8304
8305 : see if this is a netinet/in.h or sys/in.h system
8306 set netinet/in.h i_niin sys/in.h i_sysin
8307 eval $inhdr
8308
8309 : see if arpa/inet.h has to be included
8310 set arpa/inet.h i_arpainet
8311 eval $inhdr
8312
8313 : see if htonl --and friends-- exists
8314 val=''
8315 set htonl val
8316 eval $inlibc
8317
8318 : Maybe they are macros.
8319 case "$val" in
8320 $undef)
8321         $cat >htonl.c <<EOM
8322 #include <stdio.h>
8323 #include <sys/types.h>
8324 #$i_niin I_NETINET_IN
8325 #$i_sysin I_SYS_IN
8326 #$i_arpainet I_ARPA_INET
8327 #ifdef I_NETINET_IN
8328 #include <netinet/in.h>
8329 #endif
8330 #ifdef I_SYS_IN
8331 #include <sys/in.h>
8332 #endif
8333 #ifdef I_ARPA_INET
8334 #include <arpa/inet.h>
8335 #endif
8336 #ifdef htonl
8337 printf("Defined as a macro.");
8338 #endif
8339 EOM
8340         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
8341         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
8342                 val="$define"
8343                 echo "But it seems to be defined as a macro." >&4
8344         fi
8345         $rm -f htonl.?
8346         ;;
8347 esac
8348 set d_htonl
8349 eval $setvar
8350
8351 : see which of string.h or strings.h is needed
8352 echo " "
8353 strings=`./findhdr string.h`
8354 if $test "$strings" && $test -r "$strings"; then
8355         echo "Using <string.h> instead of <strings.h>." >&4
8356         val="$define"
8357 else
8358         val="$undef"
8359         strings=`./findhdr strings.h`
8360         if $test "$strings" && $test -r "$strings"; then
8361                 echo "Using <strings.h> instead of <string.h>." >&4
8362         else
8363                 echo "No string header found -- You'll surely have problems." >&4
8364         fi
8365 fi
8366 set i_string
8367 eval $setvar
8368 case "$i_string" in
8369 "$undef") strings=`./findhdr strings.h`;;
8370 *)        strings=`./findhdr string.h`;;
8371 esac
8372
8373 : index or strchr
8374 echo " "
8375 if set index val -f; eval $csym; $val; then
8376         if set strchr val -f d_strchr; eval $csym; $val; then
8377                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
8378                         val="$define"
8379                         vali="$undef"
8380                         echo "strchr() found." >&4
8381                 else
8382                         val="$undef"
8383                         vali="$define"
8384                         echo "index() found." >&4
8385                 fi
8386         else
8387                 val="$undef"
8388                 vali="$define"
8389                 echo "index() found." >&4
8390         fi
8391 else
8392         if set strchr val -f d_strchr; eval $csym; $val; then
8393                 val="$define"
8394                 vali="$undef"
8395                 echo "strchr() found." >&4
8396         else
8397                 echo "No index() or strchr() found!" >&4
8398                 val="$undef"
8399                 vali="$undef"
8400         fi
8401 fi
8402 set d_strchr; eval $setvar
8403 val="$vali"
8404 set d_index; eval $setvar
8405
8406 : check whether inet_aton exists
8407 set inet_aton d_inetaton
8408 eval $inlibc
8409
8410 : see if inttypes.h is available
8411 : we want a real compile instead of Inhdr because some systems
8412 : have an inttypes.h which includes non-existent headers
8413 echo " "
8414 $cat >try.c <<EOCP
8415 #include <inttypes.h>
8416 int main() {
8417         static int32_t foo32 = 0x12345678;
8418 }
8419 EOCP
8420 set try
8421 if eval $compile; then
8422         echo "<inttypes.h> found." >&4
8423         val="$define"
8424 else
8425         echo "<inttypes.h> NOT found." >&4
8426         val="$undef"
8427 fi
8428 $rm -f try.c try
8429 set i_inttypes
8430 eval $setvar
8431
8432 : check for int64_t
8433 case "$use64bits" in
8434 "$define" )
8435         echo " "
8436         echo $n "Checking to see if your system supports int64_t...$c" >&4
8437         $cat >try.c <<EOCP
8438 #include <sys/types.h>
8439 #$i_inttypes I_INTTYPES
8440 #ifdef I_INTTYPES
8441 #include <inttypes.h>
8442 #endif
8443 int64_t foo() { int64_t x; x = 7; return x; }
8444 EOCP
8445         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8446                 val="$define"
8447                 echo " Yup, it does." >&4
8448         else
8449                 val="$undef"
8450                 echo " Nope, it doesn't." >&4
8451         fi
8452         $rm -f try.*
8453         ;;
8454 *)      val="$undef"
8455         ;;
8456 esac
8457 set d_int64t
8458 eval $setvar
8459
8460
8461 : Look for isascii
8462 echo " "
8463 $cat >isascii.c <<'EOCP'
8464 #include <stdio.h>
8465 #include <ctype.h>
8466 int main() {
8467         int c = 'A';
8468         if (isascii(c))
8469                 exit(0);
8470         else
8471                 exit(1);
8472 }
8473 EOCP
8474 set isascii
8475 if eval $compile; then
8476         echo "isascii() found." >&4
8477         val="$define"
8478 else
8479         echo "isascii() NOT found." >&4
8480         val="$undef"
8481 fi
8482 set d_isascii
8483 eval $setvar
8484 $rm -f isascii*
8485
8486 : see if killpg exists
8487 set killpg d_killpg
8488 eval $inlibc
8489
8490 : see if lchown exists
8491 echo " "
8492 $cat > try.c <<'EOCP'
8493 /* System header to define __stub macros and hopefully few prototypes,
8494     which can conflict with char lchown(); below.  */
8495 #include <assert.h>
8496 /* Override any gcc2 internal prototype to avoid an error.  */
8497 /* We use char because int might match the return type of a gcc2
8498    builtin and then its argument prototype would still apply.  */
8499 char lchown();
8500 int main() {
8501     /*  The GNU C library defines this for functions which it implements
8502         to always fail with ENOSYS.  Some functions are actually named
8503         something starting with __ and the normal name is an alias.  */
8504 #if defined (__stub_lchown) || defined (__stub___lchown)
8505 choke me
8506 #else
8507 lchown();
8508 #endif
8509 ; return 0; }
8510 EOCP
8511 set try
8512 if eval $compile; then
8513     $echo "lchown() found." >&4
8514     val="$define"
8515 else
8516     $echo "lchown() NOT found." >&4
8517     val="$undef"
8518 fi
8519 set d_lchown
8520 eval $setvar
8521
8522 : see if link exists
8523 set link d_link
8524 eval $inlibc
8525
8526 : see if localeconv exists
8527 set localeconv d_locconv
8528 eval $inlibc
8529
8530 : see if lockf exists
8531 set lockf d_lockf
8532 eval $inlibc
8533
8534 : check for length of double
8535 echo " "
8536 case "$doublesize" in
8537 '')
8538         $echo $n "Checking to see how big your double precision numbers are...$c" >&4
8539         $cat >try.c <<'EOCP'
8540 #include <stdio.h>
8541 int main()
8542 {
8543         printf("%d\n", sizeof(double));
8544 }
8545 EOCP
8546         set try
8547         if eval $compile_ok; then
8548                 doublesize=`./try`
8549                 $echo " $doublesize bytes." >&4
8550         else
8551                 dflt='8'
8552                 echo "(I can't seem to compile the test program.  Guessing...)"
8553                 rp="What is the size of a double precision number (in bytes)?"
8554                 . ./myread
8555                 doublesize="$ans"
8556         fi
8557         ;;
8558 esac
8559 $rm -f try.c try
8560
8561 : check for long doubles
8562 echo " "
8563 echo $n "Checking to see if your system supports long doubles...$c" >&4
8564 echo 'long double foo() { long double x; x = 7.0; return x; }' > try.c
8565 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8566         val="$define"
8567         echo " Yup, it does." >&4
8568 else
8569         val="$undef"
8570         echo " Nope, it doesn't." >&4
8571 fi
8572 $rm try.*
8573 set d_longdbl
8574 eval $setvar
8575
8576 : check for length of long double
8577 case "${d_longdbl}${longdblsize}" in
8578 $define)
8579         echo " "
8580         $echo $n "Checking to see how big your long doubles are...$c" >&4
8581         $cat >try.c <<'EOCP'
8582 #include <stdio.h>
8583 int main()
8584 {
8585         printf("%d\n", sizeof(long double));
8586 }
8587 EOCP
8588         set try
8589         if eval $compile; then
8590                 longdblsize=`./try`
8591                 $echo " $longdblsize bytes." >&4
8592         else
8593                 dflt='8'
8594                 echo " "
8595                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
8596                 rp="What is the size of a long double (in bytes)?"
8597                 . ./myread
8598                 longdblsize="$ans"
8599         fi
8600         if $test "X$doublesize" = "X$longdblsize"; then
8601                 echo "(That isn't any different from an ordinary double.)"
8602         fi      
8603         ;;
8604 esac
8605 $rm -f try.c try
8606
8607 : check for long long
8608 echo " "
8609 echo $n "Checking to see if your system supports long long...$c" >&4
8610 echo 'long long foo() { long long x; x = 7; return x; }' > try.c
8611 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8612         val="$define"
8613         echo " Yup, it does." >&4
8614 else
8615         val="$undef"
8616         echo " Nope, it doesn't." >&4
8617 fi
8618 $rm try.*
8619 set d_longlong
8620 eval $setvar
8621
8622 : check for length of long long
8623 case "${d_longlong}${longlongsize}" in
8624 $define)
8625         echo " "
8626         $echo $n "Checking to see how big your long longs are...$c" >&4
8627         $cat >try.c <<'EOCP'
8628 #include <stdio.h>
8629 int main()
8630 {
8631         printf("%d\n", sizeof(long long));
8632 }
8633 EOCP
8634         set try
8635         if eval $compile_ok; then
8636                 longlongsize=`./try`
8637                 $echo " $longlongsize bytes." >&4
8638         else
8639                 dflt='8'
8640                 echo " "
8641                 echo "(I can't seem to compile the test program.  Guessing...)"
8642                 rp="What is the size of a long long (in bytes)?"
8643                 . ./myread
8644                 longlongsize="$ans"
8645         fi
8646         if $test "X$longsize" = "X$longlongsize"; then
8647                 echo "(That isn't any different from an ordinary long.)"
8648         fi      
8649         ;;
8650 esac
8651 $rm -f try.c try
8652
8653 : see if lstat exists
8654 set lstat d_lstat
8655 eval $inlibc
8656
8657 : see if madvise exists
8658 set madvise d_madvise
8659 eval $inlibc
8660
8661 : see if mblen exists
8662 set mblen d_mblen
8663 eval $inlibc
8664
8665 : see if mbstowcs exists
8666 set mbstowcs d_mbstowcs
8667 eval $inlibc
8668
8669 : see if mbtowc exists
8670 set mbtowc d_mbtowc
8671 eval $inlibc
8672
8673 : see if memcmp exists
8674 set memcmp d_memcmp
8675 eval $inlibc
8676
8677 : see if memcpy exists
8678 set memcpy d_memcpy
8679 eval $inlibc
8680
8681 : see if memmove exists
8682 set memmove d_memmove
8683 eval $inlibc
8684
8685 : see if memset exists
8686 set memset d_memset
8687 eval $inlibc
8688
8689 : see if mkdir exists
8690 set mkdir d_mkdir
8691 eval $inlibc
8692
8693 : see if mkfifo exists
8694 set mkfifo d_mkfifo
8695 eval $inlibc
8696
8697 : see if mktime exists
8698 set mktime d_mktime
8699 eval $inlibc
8700
8701 : see if this is a sys/mman.h system
8702 set sys/mman.h i_sysmman
8703 eval $inhdr
8704
8705 : see if mmap exists
8706 set mmap d_mmap
8707 eval $inlibc
8708 : see what shmat returns
8709 : default to something harmless
8710 mmaptype='void *'
8711 case "$i_sysmman$d_mmap" in
8712 "$define$define")
8713         $cat >mmap.c <<'END'
8714 #include <sys/mman.h>
8715 void *mmap();
8716 END
8717         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
8718                 mmaptype='void *'
8719         else
8720                 mmaptype='caddr_t'
8721         fi
8722         echo "and it returns ($mmaptype)." >&4
8723         ;;
8724 esac
8725
8726
8727
8728 : see if mprotect exists
8729 set mprotect d_mprotect
8730 eval $inlibc
8731
8732 : see if msgctl exists
8733 set msgctl d_msgctl
8734 eval $inlibc
8735
8736 : see if msgget exists
8737 set msgget d_msgget
8738 eval $inlibc
8739
8740 : see if msgsnd exists
8741 set msgsnd d_msgsnd
8742 eval $inlibc
8743
8744 : see if msgrcv exists
8745 set msgrcv d_msgrcv
8746 eval $inlibc
8747
8748 : see how much of the 'msg*(2)' library is present.
8749 h_msg=true
8750 echo " "
8751 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
8752 *"$undef"*) h_msg=false;;
8753 esac
8754 case "$osname" in
8755 freebsd)
8756     case "`ipcs 2>&1`" in
8757     "SVID messages"*"not configured"*)
8758         echo "Your $osname does not have the msg*(2) configured." >&4
8759         h_msg=false
8760         val="$undef"
8761         set msgctl d_msgctl
8762         eval $setvar
8763         set msgget d_msgget
8764         eval $setvar
8765         set msgsnd d_msgsnd
8766         eval $setvar
8767         set msgrcv d_msgrcv
8768         eval $setvar
8769         ;;
8770     esac
8771     ;;
8772 esac
8773 : we could also check for sys/ipc.h ...
8774 if $h_msg && $test `./findhdr sys/msg.h`; then
8775         echo "You have the full msg*(2) library." >&4
8776         val="$define"
8777 else
8778         echo "You don't have the full msg*(2) library." >&4
8779         val="$undef"
8780 fi
8781 set d_msg
8782 eval $setvar
8783
8784 : see if msync exists
8785 set msync d_msync
8786 eval $inlibc
8787
8788 : see if munmap exists
8789 set munmap d_munmap
8790 eval $inlibc
8791
8792 : see if nice exists
8793 set nice d_nice
8794 eval $inlibc
8795
8796 : see if POSIX threads are available
8797 if test "X$usethreads" = "X$define"; then
8798         set pthread.h i_pthread
8799         eval $inhdr
8800 else
8801         i_pthread="$undef"
8802 fi
8803
8804
8805
8806 : how to create joinable pthreads
8807 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
8808         echo " "
8809         echo "Checking what constant to use for creating joinable pthreads..." >&4 
8810         $cat >try.c <<'EOCP'
8811 #include <pthread.h>
8812 int main() {
8813     int detachstate = JOINABLE;
8814 }
8815 EOCP
8816         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
8817         if eval $compile; then
8818                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
8819                 val="$undef" # Yes, undef.
8820                 set d_old_pthread_create_joinable
8821                 eval $setvar
8822                 val=""
8823                 set old_pthread_create_joinable
8824                 eval $setvar
8825         else
8826                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
8827                 if eval $compile; then
8828                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
8829                         val="$define"
8830                         set d_old_pthread_create_joinable
8831                         eval $setvar
8832                         val=PTHREAD_CREATE_UNDETACHED
8833                         set old_pthread_create_joinable
8834                         eval $setvar
8835                 else            
8836                         set try -DJOINABLE=__UNDETACHED
8837                         if eval $compile; then
8838                                 echo "You seem to use __UNDETACHED." >&4
8839                                 val="$define"
8840                                 set d_old_pthread_create_joinable
8841                                 eval $setvar
8842                                 val=__UNDETACHED
8843                                 set old_pthread_create_joinable
8844                                 eval $setvar
8845                         else
8846                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
8847                                 val="$define"
8848                                 set d_old_pthread_create_joinable
8849                                 eval $setvar
8850                                 val=0
8851                                 set old_pthread_create_joinable
8852                                 eval $setvar
8853                         fi
8854                 fi
8855         fi
8856         $rm -f try try.*
8857 else
8858     d_old_pthread_create_joinable="$undef"
8859     old_pthread_create_joinable=""
8860 fi
8861
8862 : see if pause exists
8863 set pause d_pause
8864 eval $inlibc
8865
8866 : see if pipe exists
8867 set pipe d_pipe
8868 eval $inlibc
8869
8870 : see if poll exists
8871 set poll d_poll
8872 eval $inlibc
8873
8874
8875 : see whether the various POSIXish _yields exist
8876 $cat >try.c <<EOP
8877 #include <pthread.h>
8878 #include <stdio.h>
8879 int main() {
8880 #ifdef SCHED_YIELD
8881         sched_yield();
8882 #else
8883 #ifdef PTHREAD_YIELD
8884         pthread_yield();
8885 #else
8886 #ifdef PTHREAD_YIELD_NULL
8887         pthread_yield(NULL);
8888 #endif
8889 #endif
8890 #endif
8891 }
8892 EOP
8893 : see if sched_yield exists
8894 set try -DSCHED_YIELD
8895 if eval $compile; then
8896     val="$define"
8897     sched_yield='sched_yield()'
8898 else
8899     val="$undef"
8900 fi
8901 case "$usethreads" in
8902 $define)
8903         case "$val" in
8904         $define) echo 'sched_yield() found.' >&4        ;;
8905         *)       echo 'sched_yield() NOT found.' >&4    ;;
8906         esac
8907 esac
8908 set d_sched_yield
8909 eval $setvar
8910
8911 : see if pthread_yield exists
8912 set try -DPTHREAD_YIELD
8913 if eval $compile; then
8914     val="$define"
8915     case "$sched_yield" in
8916     '') sched_yield='pthread_yield()' ;;
8917     esac
8918 else
8919     set try -DPTHREAD_YIELD_NULL
8920     if eval $compile; then
8921         val="$define"
8922         case "$sched_yield" in
8923         '') sched_yield='pthread_yield(NULL)' ;;
8924         esac
8925     else
8926         val="$undef"
8927     fi
8928 fi
8929 case "$usethreads" in
8930 $define)
8931         case "$val" in
8932         $define) echo 'pthread_yield() found.' >&4      ;;
8933         *)       echo 'pthread_yield() NOT found.' >&4  ;;
8934         esac
8935         ;;
8936 esac
8937 set d_pthread_yield
8938 eval $setvar
8939
8940 case "$sched_yield" in
8941 '') sched_yield=undef ;;
8942 esac
8943
8944 $rm -f try try.*
8945
8946 : see if this is a pwd.h system
8947 set pwd.h i_pwd
8948 eval $inhdr
8949
8950 case "$i_pwd" in
8951 $define)
8952         xxx=`./findhdr pwd.h`
8953         $cppstdin $cppflags $cppminus < $xxx >$$.h
8954
8955         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
8956                 val="$define"
8957         else
8958                 val="$undef"
8959         fi
8960         set d_pwquota
8961         eval $setvar
8962
8963         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
8964                 val="$define"
8965         else
8966                 val="$undef"
8967         fi
8968         set d_pwage
8969         eval $setvar
8970
8971         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
8972                 val="$define"
8973         else
8974                 val="$undef"
8975         fi
8976         set d_pwchange
8977         eval $setvar
8978
8979         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
8980                 val="$define"
8981         else
8982                 val="$undef"
8983         fi
8984         set d_pwclass
8985         eval $setvar
8986
8987         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
8988                 val="$define"
8989         else
8990                 val="$undef"
8991         fi
8992         set d_pwexpire
8993         eval $setvar
8994
8995         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
8996                 val="$define"
8997         else
8998                 val="$undef"
8999         fi
9000         set d_pwcomment
9001         eval $setvar
9002
9003         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
9004                 val="$define"
9005         else
9006                 val="$undef"
9007         fi
9008         set d_pwgecos
9009         eval $setvar
9010
9011         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
9012                 val="$define"
9013         else
9014                 val="$undef"
9015         fi
9016         set d_pwpasswd
9017         eval $setvar
9018
9019         $rm -f $$.h
9020         ;;
9021 *)
9022         val="$undef"; 
9023         set d_pwquota; eval $setvar
9024         set d_pwage; eval $setvar
9025         set d_pwchange; eval $setvar
9026         set d_pwclass; eval $setvar
9027         set d_pwexpire; eval $setvar
9028         set d_pwcomment; eval $setvar
9029         set d_pwgecos; eval $setvar
9030         set d_pwpasswd; eval $setvar
9031         ;;
9032 esac
9033
9034 : see if readdir and friends exist
9035 set readdir d_readdir
9036 eval $inlibc
9037 set seekdir d_seekdir
9038 eval $inlibc
9039 set telldir d_telldir
9040 eval $inlibc
9041 set rewinddir d_rewinddir
9042 eval $inlibc
9043
9044 : see if readlink exists
9045 set readlink d_readlink
9046 eval $inlibc
9047
9048 : see if readv exists
9049 set readv d_readv
9050 eval $inlibc
9051
9052 : see if rename exists
9053 set rename d_rename
9054 eval $inlibc
9055
9056 : see if rmdir exists
9057 set rmdir d_rmdir
9058 eval $inlibc
9059
9060 : see if memory.h is available.
9061 val=''
9062 set memory.h val
9063 eval $inhdr
9064
9065 : See if it conflicts with string.h
9066 case "$val" in
9067 $define)
9068         case "$strings" in
9069         '') ;;
9070         *)
9071                 $cppstdin $cppflags $cppminus < $strings > mem.h
9072                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
9073                         echo " "
9074                         echo "We won't be including <memory.h>."
9075                         val="$undef"
9076                 fi
9077                 $rm -f mem.h
9078                 ;;
9079         esac
9080 esac
9081 set i_memory
9082 eval $setvar
9083
9084 : can bcopy handle overlapping blocks?
9085 val="$undef"
9086 case "$d_bcopy" in
9087 "$define")
9088         echo " "
9089         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
9090         $cat >try.c <<EOCP
9091 #$i_memory I_MEMORY
9092 #$i_stdlib I_STDLIB
9093 #$i_string I_STRING
9094 #$i_unistd I_UNISTD
9095 EOCP
9096         $cat >>try.c <<'EOCP'
9097 #include <stdio.h>
9098 #ifdef I_MEMORY
9099 #  include <memory.h>
9100 #endif
9101 #ifdef I_STDLIB
9102 #  include <stdlib.h>
9103 #endif
9104 #ifdef I_STRING
9105 #  include <string.h>
9106 #else
9107 #  include <strings.h>
9108 #endif
9109 #ifdef I_UNISTD
9110 #  include <unistd.h>  /* Needed for NetBSD */
9111 #endif
9112 int main()
9113 {
9114 char buf[128], abc[128];
9115 char *b;
9116 int len;
9117 int off;
9118 int align;
9119
9120 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
9121
9122 for (align = 7; align >= 0; align--) {
9123         for (len = 36; len; len--) {
9124                 b = buf+align;
9125                 bcopy(abc, b, len);
9126                 for (off = 1; off <= len; off++) {
9127                         bcopy(b, b+off, len);
9128                         bcopy(b+off, b, len);
9129                         if (bcmp(b, abc, len))
9130                                 exit(1);
9131                 }
9132         }
9133 }
9134 exit(0);
9135 }
9136 EOCP
9137         set try
9138         if eval $compile_ok; then
9139                 if ./try 2>/dev/null; then
9140                         echo "Yes, it can."
9141                         val="$define"
9142                 else
9143                         echo "It can't, sorry."
9144                         case "$d_memmove" in
9145                         "$define") echo "But that's Ok since you have memmove()." ;;
9146                         esac
9147                 fi
9148         else
9149                 echo "(I can't compile the test program, so we'll assume not...)"
9150                 case "$d_memmove" in
9151                 "$define") echo "But that's Ok since you have memmove()." ;;
9152                 esac
9153         fi
9154         ;;
9155 esac
9156 $rm -f try.* try core
9157 set d_safebcpy
9158 eval $setvar
9159
9160 : can memcpy handle overlapping blocks?
9161 val="$undef"
9162 case "$d_memcpy" in
9163 "$define")
9164         echo " "
9165         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
9166         $cat >try.c <<EOCP
9167 #$i_memory I_MEMORY
9168 #$i_stdlib I_STDLIB
9169 #$i_string I_STRING
9170 #$i_unistd I_UNISTD
9171 EOCP
9172         $cat >>try.c <<'EOCP'
9173 #include <stdio.h>
9174 #ifdef I_MEMORY
9175 #  include <memory.h>
9176 #endif
9177 #ifdef I_STDLIB
9178 #  include <stdlib.h>
9179 #endif
9180 #ifdef I_STRING
9181 #  include <string.h>
9182 #else
9183 #  include <strings.h>
9184 #endif
9185 #ifdef I_UNISTD
9186 #  include <unistd.h>  /* Needed for NetBSD */
9187 #endif
9188 int main()
9189 {
9190 char buf[128], abc[128];
9191 char *b;
9192 int len;
9193 int off;
9194 int align;
9195
9196 /* Copy "abcde..." string to char abc[] so that gcc doesn't
9197    try to store the string in read-only memory. */
9198 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
9199
9200 for (align = 7; align >= 0; align--) {
9201         for (len = 36; len; len--) {
9202                 b = buf+align;
9203                 memcpy(b, abc, len);
9204                 for (off = 1; off <= len; off++) {
9205                         memcpy(b+off, b, len);
9206                         memcpy(b, b+off, len);
9207                         if (memcmp(b, abc, len))
9208                                 exit(1);
9209                 }
9210         }
9211 }
9212 exit(0);
9213 }
9214 EOCP
9215         set try
9216         if eval $compile_ok; then
9217                 if ./try 2>/dev/null; then
9218                         echo "Yes, it can."
9219                         val="$define"
9220                 else
9221                         echo "It can't, sorry."
9222                         case "$d_memmove" in
9223                         "$define") echo "But that's Ok since you have memmove()." ;;
9224                         esac
9225                 fi
9226         else
9227                 echo "(I can't compile the test program, so we'll assume not...)"
9228                 case "$d_memmove" in
9229                 "$define") echo "But that's Ok since you have memmove()." ;;
9230                 esac
9231         fi
9232         ;;
9233 esac
9234 $rm -f try.* try core
9235 set d_safemcpy
9236 eval $setvar
9237
9238 : can memcmp be trusted to compare relative magnitude?
9239 val="$undef"
9240 case "$d_memcmp" in
9241 "$define")
9242         echo " "
9243         echo "Checking if your memcmp() can compare relative magnitude..." >&4
9244         $cat >try.c <<EOCP
9245 #$i_memory I_MEMORY
9246 #$i_stdlib I_STDLIB
9247 #$i_string I_STRING
9248 #$i_unistd I_UNISTD
9249 EOCP
9250         $cat >>try.c <<'EOCP'
9251 #include <stdio.h>
9252 #ifdef I_MEMORY
9253 #  include <memory.h>
9254 #endif
9255 #ifdef I_STDLIB
9256 #  include <stdlib.h>
9257 #endif
9258 #ifdef I_STRING
9259 #  include <string.h>
9260 #else
9261 #  include <strings.h>
9262 #endif
9263 #ifdef I_UNISTD
9264 #  include <unistd.h>  /* Needed for NetBSD */
9265 #endif
9266 int main()
9267 {
9268 char a = -1;
9269 char b = 0;
9270 if ((a < b) && memcmp(&a, &b, 1) < 0)
9271         exit(1);
9272 exit(0);
9273 }
9274 EOCP
9275         set try
9276         if eval $compile_ok; then
9277                 if ./try 2>/dev/null; then
9278                         echo "Yes, it can."
9279                         val="$define"
9280                 else
9281                         echo "No, it can't (it uses signed chars)."
9282                 fi
9283         else
9284                 echo "(I can't compile the test program, so we'll assume not...)"
9285         fi
9286         ;;
9287 esac
9288 $rm -f try.* try core
9289 set d_sanemcmp
9290 eval $setvar
9291
9292 : see if select exists
9293 set select d_select
9294 eval $inlibc
9295
9296 : see if semctl exists
9297 set semctl d_semctl
9298 eval $inlibc
9299
9300 : see if semget exists
9301 set semget d_semget
9302 eval $inlibc
9303
9304 : see if semop exists
9305 set semop d_semop
9306 eval $inlibc
9307
9308 : see how much of the 'sem*(2)' library is present.
9309 h_sem=true
9310 echo " "
9311 case "$d_semctl$d_semget$d_semop" in
9312 *"$undef"*) h_sem=false;;
9313 esac
9314 case "$osname" in
9315 freebsd)
9316     case "`ipcs 2>&1`" in
9317     "SVID messages"*"not configured"*)
9318         echo "Your $osname does not have the sem*(2) configured." >&4
9319         h_sem=false
9320         val="$undef"
9321         set semctl d_semctl
9322         eval $setvar
9323         set semget d_semget
9324         eval $setvar
9325         set semop d_semop
9326         eval $setvar
9327         ;;
9328     esac
9329     ;;
9330 esac
9331 : we could also check for sys/ipc.h ...
9332 if $h_sem && $test `./findhdr sys/sem.h`; then
9333         echo "You have the full sem*(2) library." >&4
9334         val="$define"
9335 else
9336         echo "You don't have the full sem*(2) library." >&4
9337         val="$undef"
9338 fi
9339 set d_sem
9340 eval $setvar
9341
9342 : see whether sys/sem.h defines union semun
9343 echo " "
9344 $cat > try.c <<'END'
9345 #include <sys/types.h>
9346 #include <sys/ipc.h>
9347 #include <sys/sem.h>
9348 int main () { union semun semun; semun.buf = 0; }
9349 END
9350 set try
9351 if eval $compile; then
9352     echo "You have union semun in <sys/sem.h>." >&4
9353     val="$define"
9354 else
9355     echo "You do not have union semun in <sys/sem.h>." >&4
9356     val="$undef"
9357 fi
9358 $rm -f try try.c try.h
9359 set d_union_semun
9360 eval $setvar
9361
9362 : see how to do semctl IPC_STAT
9363 case "$d_sem" in
9364 $define)
9365     : see whether semctl IPC_STAT can use union semun
9366     echo " "
9367     $cat > try.h <<END
9368 #ifndef S_IRUSR
9369 #   ifdef S_IREAD
9370 #       define S_IRUSR S_IREAD
9371 #       define S_IWUSR S_IWRITE
9372 #       define S_IXUSR S_IEXEC
9373 #   else
9374 #       define S_IRUSR 0400
9375 #       define S_IWUSR 0200
9376 #       define S_IXUSR 0100
9377 #   endif
9378 #   define S_IRGRP (S_IRUSR>>3)
9379 #   define S_IWGRP (S_IWUSR>>3)
9380 #   define S_IXGRP (S_IXUSR>>3)
9381 #   define S_IROTH (S_IRUSR>>6)
9382 #   define S_IWOTH (S_IWUSR>>6)
9383 #   define S_IXOTH (S_IXUSR>>6)
9384 #endif
9385 #ifndef S_IRWXU
9386 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
9387 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
9388 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
9389 #endif
9390 END
9391
9392     $cat > try.c <<END
9393 #include <sys/types.h>
9394 #include <sys/ipc.h>
9395 #include <sys/sem.h>
9396 #include <sys/stat.h>
9397 #include <stdio.h>
9398 #include <errno.h>
9399 #include "try.h"
9400 #ifndef errno
9401 extern int errno;
9402 #endif
9403 #$d_union_semun HAS_UNION_SEMUN
9404 int main() {
9405     union semun
9406 #ifndef HAS_UNION_SEMUN
9407     {
9408         int val;
9409         struct semid_ds *buf;
9410         unsigned short *array;
9411     }
9412 #endif
9413     arg;
9414     int sem, st;
9415
9416 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
9417     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9418     if (sem > -1) {
9419         struct semid_ds argbuf;
9420         arg.buf = &argbuf;
9421 #       ifdef IPC_STAT
9422         st = semctl(sem, 0, IPC_STAT, arg);
9423         if (st == 0)
9424             printf("semun\n");
9425         else
9426 #       endif /* IPC_STAT */
9427             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9428 #       ifdef IPC_RMID
9429         if (semctl(sem, 0, IPC_RMID, arg) != 0)
9430 #       endif /* IPC_RMID */
9431             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9432     } else
9433 #endif /* IPC_PRIVATE && ... */
9434         printf("semget failed: errno = %d\n", errno);
9435   return 0;
9436 }
9437 END
9438     val="$undef"
9439     set try
9440     if eval $compile; then
9441         xxx=`./try`
9442         case "$xxx" in
9443         semun) val="$define" ;;
9444         esac
9445     fi
9446     $rm -f try try.c
9447     set d_semctl_semun
9448     eval $setvar
9449     case "$d_semctl_semun" in
9450     $define)
9451         echo "You can use union semun for semctl IPC_STAT." >&4
9452         also='also'
9453         ;;
9454     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
9455         also=''
9456         ;;
9457     esac
9458
9459     : see whether semctl IPC_STAT can use struct semid_ds pointer
9460     $cat > try.c <<'END'
9461 #include <sys/types.h>
9462 #include <sys/ipc.h>
9463 #include <sys/sem.h>
9464 #include <sys/stat.h>
9465 #include "try.h"
9466 #include <stdio.h>
9467 #include <errno.h>
9468 #ifndef errno
9469 extern int errno;
9470 #endif
9471 int main() {
9472     struct semid_ds arg;
9473     int sem, st;
9474
9475 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
9476     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9477     if (sem > -1) {
9478 #       ifdef IPC_STAT
9479         st = semctl(sem, 0, IPC_STAT, &arg);
9480         if (st == 0)
9481             printf("semid_ds\n");
9482         else
9483 #       endif /* IPC_STAT */
9484             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9485 #       ifdef IPC_RMID
9486         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
9487 #       endif /* IPC_RMID */
9488             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9489     } else
9490 #endif /* IPC_PRIVATE && ... */
9491         printf("semget failed: errno = %d\n", errno);
9492
9493     return 0;
9494 }
9495 END
9496     val="$undef"
9497     set try
9498     if eval $compile; then
9499         xxx=`./try`
9500         case "$xxx" in
9501         semid_ds) val="$define" ;;
9502         esac
9503     fi
9504     $rm -f try try.c
9505     set d_semctl_semid_ds
9506     eval $setvar
9507     case "$d_semctl_semid_ds" in
9508     $define)
9509         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
9510         ;;
9511     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
9512         ;;
9513     esac
9514     $rm -f try.h
9515     ;;
9516 *)  val="$undef"
9517
9518     # We do not have the full sem*(2) library, so assume we can not
9519     # use either.
9520
9521     set d_semctl_semun
9522     eval $setvar
9523
9524     set d_semctl_semid_ds
9525     eval $setvar
9526     ;;
9527 esac
9528
9529 : see if setegid exists
9530 set setegid d_setegid
9531 eval $inlibc
9532
9533 : see if seteuid exists
9534 set seteuid d_seteuid
9535 eval $inlibc
9536
9537 : see if setgrent exists
9538 set setgrent d_setgrent
9539 eval $inlibc
9540
9541 : see if sethostent exists
9542 set sethostent d_sethent
9543 eval $inlibc
9544
9545 : see if setlinebuf exists
9546 set setlinebuf d_setlinebuf
9547 eval $inlibc
9548
9549 : see if setlocale exists
9550 set setlocale d_setlocale
9551 eval $inlibc
9552
9553 : see if setnetent exists
9554 set setnetent d_setnent
9555 eval $inlibc
9556
9557 : see if setprotoent exists
9558 set setprotoent d_setpent
9559 eval $inlibc
9560
9561 : see if setpgid exists
9562 set setpgid d_setpgid
9563 eval $inlibc
9564
9565 : see if setpgrp2 exists
9566 set setpgrp2 d_setpgrp2
9567 eval $inlibc
9568
9569 : see if setpriority exists
9570 set setpriority d_setprior
9571 eval $inlibc
9572
9573 : see if setpwent exists
9574 set setpwent d_setpwent
9575 eval $inlibc
9576
9577 : see if setregid exists
9578 set setregid d_setregid
9579 eval $inlibc
9580 set setresgid d_setresgid
9581 eval $inlibc
9582
9583 : see if setreuid exists
9584 set setreuid d_setreuid
9585 eval $inlibc
9586 set setresuid d_setresuid
9587 eval $inlibc
9588
9589 : see if setrgid exists
9590 set setrgid d_setrgid
9591 eval $inlibc
9592
9593 : see if setruid exists
9594 set setruid d_setruid
9595 eval $inlibc
9596
9597 : see if setservent exists
9598 set setservent d_setsent
9599 eval $inlibc
9600
9601 : see if setsid exists
9602 set setsid d_setsid
9603 eval $inlibc
9604
9605 : see if setvbuf exists
9606 set setvbuf d_setvbuf
9607 eval $inlibc
9608
9609 : see if sfio.h is available
9610 set sfio.h i_sfio
9611 eval $inhdr
9612
9613
9614 : see if sfio library is available
9615 case "$i_sfio" in
9616 $define)
9617         val=''
9618         set sfreserve val
9619         eval $inlibc
9620         ;;
9621 *)
9622         val="$undef"
9623         ;;
9624 esac
9625 : Ok, but do we want to use it.
9626 case "$val" in
9627 $define)
9628         case "$usesfio" in
9629         true|$define|[yY]*) dflt='y';;
9630         *) dflt='n';;
9631         esac
9632         echo "$package can use the sfio library, but it is experimental."
9633         rp="You seem to have sfio available, do you want to try using it?"
9634         . ./myread
9635         case "$ans" in
9636         y|Y) ;;
9637         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
9638                 val="$undef"
9639                 : Remove sfio from list of libraries to use
9640                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
9641                 shift
9642                 libs="$*"
9643                 echo "libs = $libs" >&4
9644                 ;;
9645         esac
9646         ;;
9647 *)      case "$usesfio" in
9648         true|$define|[yY]*)
9649                 echo "Sorry, cannot find sfio on this machine" >&4
9650                 echo "Ignoring your setting of usesfio=$usesfio" >&4
9651                 ;;
9652         esac
9653         ;;
9654 esac
9655 set d_sfio
9656 eval $setvar
9657 case "$d_sfio" in
9658 $define) usesfio='true';;
9659 *) usesfio='false';;
9660 esac
9661
9662 : see if shmctl exists
9663 set shmctl d_shmctl
9664 eval $inlibc
9665
9666 : see if shmget exists
9667 set shmget d_shmget
9668 eval $inlibc
9669
9670 : see if shmat exists
9671 set shmat d_shmat
9672 eval $inlibc
9673 : see what shmat returns
9674 case "$d_shmat" in
9675 "$define")
9676         $cat >shmat.c <<'END'
9677 #include <sys/shm.h>
9678 void *shmat();
9679 END
9680         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
9681                 shmattype='void *'
9682         else
9683                 shmattype='char *'
9684         fi
9685         echo "and it returns ($shmattype)." >&4
9686         : see if a prototype for shmat is available
9687         xxx=`./findhdr sys/shm.h`
9688         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
9689         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
9690                 val="$define"
9691         else
9692                 val="$undef"
9693         fi
9694         $rm -f shmat.[co]
9695         ;;
9696 *)
9697         val="$undef"
9698         ;;
9699 esac
9700 set d_shmatprototype
9701 eval $setvar
9702
9703 : see if shmdt exists
9704 set shmdt d_shmdt
9705 eval $inlibc
9706
9707 : see how much of the 'shm*(2)' library is present.
9708 h_shm=true
9709 echo " "
9710 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
9711 *"$undef"*) h_shm=false;;
9712 esac
9713 case "$osname" in
9714 freebsd)
9715     case "`ipcs 2>&1`" in
9716     "SVID shared memory"*"not configured"*)
9717         echo "Your $osname does not have the shm*(2) configured." >&4
9718         h_shm=false
9719         val="$undef"
9720         set shmctl d_shmctl
9721         evat $setvar
9722         set shmget d_shmget
9723         evat $setvar
9724         set shmat d_shmat
9725         evat $setvar
9726         set shmdt d_shmdt
9727         evat $setvar
9728         ;;
9729     esac
9730     ;;
9731 esac
9732 : we could also check for sys/ipc.h ...
9733 if $h_shm && $test `./findhdr sys/shm.h`; then
9734         echo "You have the full shm*(2) library." >&4
9735         val="$define"
9736 else
9737         echo "You don't have the full shm*(2) library." >&4
9738         val="$undef"
9739 fi
9740 set d_shm
9741 eval $setvar
9742
9743 echo " "
9744 : see if we have sigaction
9745 if set sigaction val -f d_sigaction; eval $csym; $val; then
9746         echo 'sigaction() found.' >&4
9747         $cat > try.c <<'EOP'
9748 #include <stdio.h>
9749 #include <sys/types.h>
9750 #include <signal.h>
9751 int main()
9752 {
9753     struct sigaction act, oact;
9754 }
9755 EOP
9756         set try
9757         if eval $compile_ok; then
9758                 val="$define"
9759         else
9760                 echo "But you don't seem to have a useable struct sigaction." >&4
9761                 val="$undef"
9762         fi
9763 else
9764         echo 'sigaction NOT found.' >&4
9765         val="$undef"
9766 fi
9767 set d_sigaction; eval $setvar
9768 $rm -f try try$_o try.c
9769
9770 : see if sigsetjmp exists
9771 echo " "
9772 case "$d_sigsetjmp" in
9773 '')
9774         $cat >try.c <<'EOP'
9775 #include <setjmp.h>
9776 sigjmp_buf env;
9777 int set = 1;
9778 int main()
9779 {
9780         if (sigsetjmp(env,1))
9781                 exit(set);
9782         set = 0;
9783         siglongjmp(env, 1);
9784         exit(1);
9785 }
9786 EOP
9787         set try
9788         if eval $compile; then
9789                 if ./try >/dev/null 2>&1; then
9790                         echo "POSIX sigsetjmp found." >&4
9791                         val="$define"
9792                 else
9793                         $cat >&4 <<EOM
9794 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
9795 I'll ignore them.
9796 EOM
9797                         val="$undef"
9798                 fi
9799         else
9800                 echo "sigsetjmp not found." >&4
9801                 val="$undef"
9802         fi
9803         ;;
9804 *) val="$d_sigsetjmp"
9805         case "$d_sigsetjmp" in
9806         $define) echo "POSIX sigsetjmp found." >&4;;
9807         $undef) echo "sigsetjmp not found." >&4;;
9808         esac
9809         ;;
9810 esac
9811 set d_sigsetjmp
9812 eval $setvar
9813 $rm -f try.c try
9814
9815 : see if stat knows about block sizes
9816 echo " "
9817 set d_statblks stat st_blocks $i_sysstat sys/stat.h
9818 eval $hasfield
9819
9820 : see if _ptr and _cnt from stdio act std
9821 echo " "
9822 if $contains '_IO_fpos_t' `./findhdr stdio.h` >/dev/null 2>&1 ; then
9823         echo "(Looks like you have stdio.h from Linux.)"
9824         case "$stdio_ptr" in
9825         '') stdio_ptr='((fp)->_IO_read_ptr)'
9826                 ptr_lval=$define
9827                 ;;
9828         *)      ptr_lval=$d_stdio_ptr_lval;;
9829         esac
9830         case "$stdio_cnt" in
9831         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
9832                 cnt_lval=$undef
9833                 ;;
9834         *)      cnt_lval=$d_stdio_cnt_lval;;
9835         esac
9836         case "$stdio_base" in
9837         '') stdio_base='((fp)->_IO_read_base)';;
9838         esac
9839         case "$stdio_bufsiz" in
9840         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
9841         esac
9842 else
9843         case "$stdio_ptr" in
9844         '') stdio_ptr='((fp)->_ptr)'
9845                 ptr_lval=$define
9846                 ;;
9847         *)      ptr_lval=$d_stdio_ptr_lval;;
9848         esac
9849         case "$stdio_cnt" in
9850         '') stdio_cnt='((fp)->_cnt)'
9851                 cnt_lval=$define
9852                 ;;
9853         *)      cnt_lval=$d_stdio_cnt_lval;;
9854         esac
9855         case "$stdio_base" in
9856         '') stdio_base='((fp)->_base)';;
9857         esac
9858         case "$stdio_bufsiz" in
9859         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
9860         esac
9861 fi
9862 : test whether _ptr and _cnt really work
9863 echo "Checking how std your stdio is..." >&4
9864 $cat >try.c <<EOP
9865 #include <stdio.h>
9866 #define FILE_ptr(fp)    $stdio_ptr
9867 #define FILE_cnt(fp)    $stdio_cnt
9868 int main() {
9869         FILE *fp = fopen("try.c", "r");
9870         char c = getc(fp);
9871         if (
9872                 18 <= FILE_cnt(fp) &&
9873                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
9874         )
9875                 exit(0);
9876         exit(1);
9877 }
9878 EOP
9879 val="$undef"
9880 set try
9881 if eval $compile; then
9882         if ./try; then
9883                 echo "Your stdio acts pretty std."
9884                 val="$define"
9885         else
9886                 echo "Your stdio isn't very std."
9887         fi
9888 else
9889         echo "Your stdio doesn't appear very std."
9890 fi
9891 $rm -f try.c try
9892 set d_stdstdio
9893 eval $setvar
9894
9895 : Can _ptr be used as an lvalue?
9896 case "$d_stdstdio$ptr_lval" in
9897 $define$define) val=$define ;;
9898 *) val=$undef ;;
9899 esac
9900 set d_stdio_ptr_lval
9901 eval $setvar
9902
9903 : Can _cnt be used as an lvalue?
9904 case "$d_stdstdio$cnt_lval" in
9905 $define$define) val=$define ;;
9906 *) val=$undef ;;
9907 esac
9908 set d_stdio_cnt_lval
9909 eval $setvar
9910
9911 : see if _base is also standard
9912 val="$undef"
9913 case "$d_stdstdio" in
9914 $define)
9915         $cat >try.c <<EOP
9916 #include <stdio.h>
9917 #define FILE_base(fp)   $stdio_base
9918 #define FILE_bufsiz(fp) $stdio_bufsiz
9919 int main() {
9920         FILE *fp = fopen("try.c", "r");
9921         char c = getc(fp);
9922         if (
9923                 19 <= FILE_bufsiz(fp) &&
9924                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
9925         )
9926                 exit(0);
9927         exit(1);
9928 }
9929 EOP
9930         set try
9931         if eval $compile; then
9932                 if ./try; then
9933                         echo "And its _base field acts std."
9934                         val="$define"
9935                 else
9936                         echo "But its _base field isn't std."
9937                 fi
9938         else
9939                 echo "However, it seems to be lacking the _base field."
9940         fi
9941         $rm -f try.c try
9942         ;;
9943 esac
9944 set d_stdiobase
9945 eval $setvar
9946
9947 : see if strcoll exists
9948 set strcoll d_strcoll
9949 eval $inlibc
9950
9951 : check for structure copying
9952 echo " "
9953 echo "Checking to see if your C compiler can copy structs..." >&4
9954 $cat >try.c <<'EOCP'
9955 int main()
9956 {
9957         struct blurfl {
9958                 int dyick;
9959         } foo, bar;
9960
9961         foo = bar;
9962 }
9963 EOCP
9964 if $cc -c try.c >/dev/null 2>&1 ; then
9965         val="$define"
9966         echo "Yup, it can."
9967 else
9968         val="$undef"
9969         echo "Nope, it can't."
9970 fi
9971 set d_strctcpy
9972 eval $setvar
9973 $rm -f try.*
9974
9975 : see if strerror and/or sys_errlist[] exist
9976 echo " "
9977 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
9978     if set strerror val -f d_strerror; eval $csym; $val; then
9979                 echo 'strerror() found.' >&4
9980                 d_strerror="$define"
9981                 d_strerrm='strerror(e)'
9982                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
9983                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
9984                         d_syserrlst="$define"
9985                 else
9986                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
9987                         d_syserrlst="$undef"
9988                 fi
9989     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
9990                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
9991                 echo 'strerror() found in string header.' >&4
9992                 d_strerror="$define"
9993                 d_strerrm='strerror(e)'
9994                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
9995                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
9996                                 d_syserrlst="$define"
9997                 else
9998                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
9999                         d_syserrlst="$undef"
10000                 fi
10001     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
10002                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
10003                 d_strerror="$undef"
10004                 d_syserrlst="$define"
10005                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
10006     else
10007                 echo 'strerror() and sys_errlist[] NOT found.' >&4
10008                 d_strerror="$undef"
10009                 d_syserrlst="$undef"
10010                 d_strerrm='"unknown"'
10011     fi
10012 fi
10013
10014 : see if strtod exists
10015 set strtod d_strtod
10016 eval $inlibc
10017
10018 : see if strtol exists
10019 set strtol d_strtol
10020 eval $inlibc
10021
10022 : see if strtoul exists
10023 set strtoul d_strtoul
10024 eval $inlibc
10025
10026 : see if strxfrm exists
10027 set strxfrm d_strxfrm
10028 eval $inlibc
10029
10030 : see if symlink exists
10031 set symlink d_symlink
10032 eval $inlibc
10033
10034 : see if syscall exists
10035 set syscall d_syscall
10036 eval $inlibc
10037
10038 : see if sysconf exists
10039 set sysconf d_sysconf
10040 eval $inlibc
10041
10042 : see if system exists
10043 set system d_system
10044 eval $inlibc
10045
10046 : see if tcgetpgrp exists
10047 set tcgetpgrp d_tcgetpgrp
10048 eval $inlibc
10049
10050 : see if tcsetpgrp exists
10051 set tcsetpgrp d_tcsetpgrp
10052 eval $inlibc
10053
10054 : see if sys/types.h has to be included
10055 set sys/types.h i_systypes
10056 eval $inhdr
10057
10058 : see if prototype for telldir is available
10059 echo " "
10060 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
10061 eval $hasproto
10062
10063 : define an is-a-typedef? function
10064 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10065 case "$inclist" in
10066 "") inclist="sys/types.h";;
10067 esac;
10068 eval "varval=\$$var";
10069 case "$varval" in
10070 "")
10071         $rm -f temp.c;
10072         for inc in $inclist; do
10073                 echo "#include <$inc>" >>temp.c;
10074         done;
10075         echo "#ifdef $type" >> temp.c;
10076         echo "printf(\"We have $type\");" >> temp.c;
10077         echo "#endif" >> temp.c;
10078         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10079         if $contains $type temp.E >/dev/null 2>&1; then
10080                 eval "$var=\$type";
10081         else
10082                 eval "$var=\$def";
10083         fi;
10084         $rm -f temp.?;;
10085 *) eval "$var=\$varval";;
10086 esac'
10087
10088 : define an is-a-typedef? function that prompts if the type is not available.
10089 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10090 case "$inclist" in
10091 "") inclist="sys/types.h";;
10092 esac;
10093 eval "varval=\$$var";
10094 case "$varval" in
10095 "")
10096         $rm -f temp.c;
10097         for inc in $inclist; do
10098                 echo "#include <$inc>" >>temp.c;
10099         done;
10100         echo "#ifdef $type" >> temp.c;
10101         echo "printf(\"We have $type\");" >> temp.c;
10102         echo "#endif" >> temp.c;
10103         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10104         echo " " ;
10105         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
10106         if $contains $type temp.E >/dev/null 2>&1; then
10107                 echo "$type found." >&4;
10108                 eval "$var=\$type";
10109         else
10110                 echo "$type NOT found." >&4;
10111                 dflt="$def";
10112                 . ./myread ;
10113                 eval "$var=\$ans";
10114         fi;
10115         $rm -f temp.?;;
10116 *) eval "$var=\$varval";;
10117 esac'
10118
10119 : see if this is a sys/times.h system
10120 set sys/times.h i_systimes
10121 eval $inhdr
10122
10123 : see if times exists
10124 echo " "
10125 if set times val -f d_times; eval $csym; $val; then
10126         echo 'times() found.' >&4
10127         d_times="$define"
10128         inc=''
10129         case "$i_systimes" in
10130         "$define") inc='sys/times.h';;
10131         esac
10132         rp="What is the type returned by times() on this system?"
10133         set clock_t clocktype long stdio.h sys/types.h $inc
10134         eval $typedef_ask
10135 else
10136         echo 'times() NOT found, hope that will do.' >&4
10137         d_times="$undef"
10138         clocktype='int'
10139 fi
10140
10141 : see if truncate exists
10142 set truncate d_truncate
10143 eval $inlibc
10144
10145 : see if tzname[] exists
10146 echo " "
10147 if set tzname val -a d_tzname; eval $csym; $val; then
10148         val="$define"
10149         echo 'tzname[] found.' >&4
10150 else
10151         val="$undef"
10152         echo 'tzname[] NOT found.' >&4
10153 fi
10154 set d_tzname
10155 eval $setvar
10156
10157 : see if umask exists
10158 set umask d_umask
10159 eval $inlibc
10160
10161 : backward compatibility for d_hvfork
10162 if test X$d_hvfork != X; then
10163         d_vfork="$d_hvfork"
10164         d_hvfork=''
10165 fi
10166 : see if there is a vfork
10167 val=''
10168 set vfork val
10169 eval $inlibc
10170
10171 : Ok, but do we want to use it. vfork is reportedly unreliable in 
10172 : perl on Solaris 2.x, and probably elsewhere.
10173 case "$val" in
10174 $define)
10175         echo " "
10176         case "$usevfork" in
10177         false) dflt='n';;
10178         *) dflt='y';;
10179         esac
10180         cat <<'EOM'
10181  
10182 Perl can only use a vfork() that doesn't suffer from strict
10183 restrictions on calling functions or modifying global data in
10184 the child.  For example, glibc-2.1 contains such a vfork()
10185 that is unsuitable.  If your system provides a proper fork()
10186 call, chances are that you do NOT want perl to use vfork().
10187
10188 EOM
10189         rp="Do you still want to use vfork()?"
10190         . ./myread
10191         case "$ans" in
10192         y|Y) ;;
10193         *)
10194                 echo "Ok, we won't use vfork()."
10195                 val="$undef"
10196                 ;;
10197         esac
10198         ;;
10199 esac
10200 set d_vfork
10201 eval $setvar
10202 case "$d_vfork" in
10203 $define) usevfork='true';;
10204 *) usevfork='false';;
10205 esac
10206
10207 : see if this is an sysdir system
10208 set sys/dir.h i_sysdir
10209 eval $inhdr
10210
10211 : see if this is an sysndir system
10212 set sys/ndir.h i_sysndir
10213 eval $inhdr
10214
10215 : see if closedir exists
10216 set closedir d_closedir
10217 eval $inlibc
10218
10219 case "$d_closedir" in
10220 "$define")
10221         echo " "
10222         echo "Checking whether closedir() returns a status..." >&4
10223         cat > closedir.c <<EOM
10224 #$i_dirent I_DIRENT             /**/
10225 #$i_sysdir I_SYS_DIR            /**/
10226 #$i_sysndir I_SYS_NDIR          /**/
10227 #$i_systypes I_SYS_TYPES        /**/
10228
10229 #if defined(I_SYS_TYPES)
10230 #include <sys/types.h>
10231 #endif
10232 #if defined(I_DIRENT)
10233 #include <dirent.h>
10234 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
10235 #include <sys/dir.h>
10236 #endif
10237 #else
10238 #ifdef I_SYS_NDIR
10239 #include <sys/ndir.h>
10240 #else
10241 #ifdef I_SYS_DIR
10242 #ifdef hp9000s500
10243 #include <ndir.h>       /* may be wrong in the future */
10244 #else
10245 #include <sys/dir.h>
10246 #endif
10247 #endif
10248 #endif
10249 #endif 
10250 int main() { return closedir(opendir(".")); }
10251 EOM
10252         set closedir
10253         if eval $compile_ok; then
10254                 if ./closedir > /dev/null 2>&1 ; then
10255                         echo "Yes, it does."
10256                         val="$undef"
10257                 else
10258                         echo "No, it doesn't."
10259                         val="$define"
10260                 fi
10261         else
10262                 echo "(I can't seem to compile the test program--assuming it doesn't)"
10263                 val="$define"
10264         fi
10265         ;;
10266 *)
10267         val="$undef";
10268         ;;
10269 esac
10270 set d_void_closedir
10271 eval $setvar
10272 $rm -f closedir*
10273 : check for volatile keyword
10274 echo " "
10275 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10276 $cat >try.c <<'EOCP'
10277 int main()
10278 {
10279         typedef struct _goo_struct goo_struct;
10280         goo_struct * volatile goo = ((goo_struct *)0);
10281         struct _goo_struct {
10282                 long long_int;
10283                 int reg_int;
10284                 char char_var;
10285         };
10286         typedef unsigned short foo_t;
10287         char *volatile foo;
10288         volatile int bar;
10289         volatile foo_t blech;
10290         foo = foo;
10291 }
10292 EOCP
10293 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10294         val="$define"
10295         echo "Yup, it does."
10296 else
10297         val="$undef"
10298         echo "Nope, it doesn't."
10299 fi
10300 set d_volatile
10301 eval $setvar
10302 $rm -f try.*
10303
10304 : see if there is a wait4
10305 set wait4 d_wait4
10306 eval $inlibc
10307
10308 : see if waitpid exists
10309 set waitpid d_waitpid
10310 eval $inlibc
10311
10312 : see if wcstombs exists
10313 set wcstombs d_wcstombs
10314 eval $inlibc
10315
10316 : see if wctomb exists
10317 set wctomb d_wctomb
10318 eval $inlibc
10319
10320 : see if writev exists
10321 set writev d_writev
10322 eval $inlibc
10323
10324 : preserve RCS keywords in files with variable substitution, grrr
10325 Date='$Date'
10326 Id='$Id'
10327 Log='$Log'
10328 RCSfile='$RCSfile'
10329 Revision='$Revision'
10330
10331 case "$crosscompile" in
10332 ''|[nN]*) crosscompile="$undef" ;;
10333 esac
10334
10335 case "$osname" in
10336 next|rhapsody) multiarch="$define" ;;
10337 esac
10338 case "$multiarch" in
10339 ''|[nN]*) multiarch="$undef" ;;
10340 esac
10341
10342 : check for alignment requirements
10343 echo " "
10344 case "$crosscompile$multiarch" in
10345 *$define*)
10346         $cat <<EOM
10347 You seem to be either cross-compiling or doing a multiarchitecture build,
10348 skipping the memory alignment check.
10349
10350 EOM
10351         case "$alignbytes" in
10352         '') alignbytes=8 ;;
10353         esac
10354         ;;
10355 *)
10356         case "$alignbytes" in
10357         '') echo "Checking alignment constraints..." >&4
10358                 $cat >try.c <<'EOCP'
10359 struct foobar {
10360         char foo;
10361         double bar;
10362 } try_algn;
10363 int main()
10364 {
10365         printf("%d\n", (char *)&try_algn.bar - (char *)&try_algn.foo);
10366 }
10367 EOCP
10368                 set try
10369                 if eval $compile_ok; then
10370                         dflt=`./try`
10371                 else
10372                         dflt='8'
10373                         echo "(I can't seem to compile the test program...)"
10374                 fi
10375                 ;;
10376         *) dflt="$alignbytes"
10377                 ;;
10378         esac
10379         rp="Doubles must be aligned on a how-many-byte boundary?"
10380         . ./myread
10381         alignbytes="$ans"
10382         $rm -f try.c try
10383         ;;
10384 esac
10385
10386
10387 : check for ordering of bytes in a long
10388 echo " "
10389 case "$crosscompile$multiarch" in
10390 *$define*)
10391         $cat <<EOM
10392 You seem to be either cross-compiling or doing a multiarchitecture build,
10393 skipping the byteorder check.
10394
10395 EOM
10396         byteorder=''
10397         ;;
10398 *)
10399         case "$byteorder" in
10400         '')
10401                 $cat <<'EOM'
10402 In the following, larger digits indicate more significance.  A big-endian
10403 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
10404 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
10405 machines may have weird orders like 3412.  A Cray will report 87654321. If
10406 the test program works the default is probably right.
10407 I'm now running the test program...
10408 EOM
10409                 $cat >try.c <<'EOCP'
10410 #include <stdio.h>
10411 int main()
10412 {
10413         int i;
10414         union {
10415                 unsigned long l;
10416                 char c[sizeof(long)];
10417         } u;
10418
10419         if (sizeof(long) > 4)
10420                 u.l = (0x08070605L << 32) | 0x04030201L;
10421         else
10422                 u.l = 0x04030201L;
10423         for (i = 0; i < sizeof(long); i++)
10424                 printf("%c", u.c[i]+'0');
10425         printf("\n");
10426         exit(0);
10427 }
10428 EOCP
10429                 xxx_prompt=y
10430                 set try
10431                 if eval $compile && ./try > /dev/null; then
10432                         dflt=`./try`
10433                         case "$dflt" in
10434                         [1-4][1-4][1-4][1-4]|12345678|87654321)
10435                                 echo "(The test program ran ok.)"
10436                                 echo "byteorder=$dflt"
10437                                 xxx_prompt=n
10438                         ;;
10439                         ????|????????) echo "(The test program ran ok.)" ;;
10440                         *) echo "(The test program didn't run right for some reason.)" ;;
10441                         esac
10442                 else
10443                         dflt='4321'
10444                         cat <<'EOM'
10445 (I can't seem to compile the test program.  Guessing big-endian...)
10446 EOM
10447                 fi
10448                 case "$xxx_prompt" in
10449                 y)
10450                         rp="What is the order of bytes in a long?"
10451                         . ./myread
10452                         byteorder="$ans"
10453                         ;;
10454                 *)      byteorder=$dflt
10455                         ;;
10456                 esac
10457                 ;;
10458         esac
10459         $rm -f try.c try
10460         ;;
10461 esac
10462
10463
10464 : how do we catenate cpp tokens here?
10465 echo " "
10466 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
10467 $cat >cpp_stuff.c <<'EOCP'
10468 #define RCAT(a,b)a/**/b
10469 #define ACAT(a,b)a ## b
10470 RCAT(Rei,ser)
10471 ACAT(Cir,cus)
10472 EOCP
10473 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
10474 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
10475         echo "Oh!  Smells like ANSI's been here." >&4
10476         echo "We can catify or stringify, separately or together!"
10477         cpp_stuff=42
10478 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
10479         echo "Ah, yes!  The good old days!" >&4
10480         echo "However, in the good old days we don't know how to stringify and"
10481         echo "catify at the same time."
10482         cpp_stuff=1
10483 else
10484         $cat >&4 <<EOM
10485 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
10486 to have to edit the values of CAT[2-5] in config.h...
10487 EOM
10488         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
10489 fi
10490 $rm -f cpp_stuff.*
10491
10492 : see if this is a db.h system
10493 set db.h i_db
10494 eval $inhdr
10495
10496 case "$i_db" in
10497 $define)
10498         : Check db version.
10499         echo " "
10500         echo "Checking Berkeley DB version ..." >&4
10501         $cat >try.c <<EOCP
10502 #$d_const HASCONST
10503 #ifndef HASCONST
10504 #define const
10505 #endif
10506 #include <sys/types.h>
10507 #include <stdio.h>
10508 #include <db.h>
10509 int main()
10510 {
10511 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
10512     int Major, Minor, Patch ;
10513     unsigned long Version ;
10514     (void)db_version(&Major, &Minor, &Patch) ;
10515     printf("You have Berkeley DB Version 2 or greater\n");
10516
10517     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
10518                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
10519     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
10520                 Major, Minor, Patch) ;
10521
10522     /* check that db.h & libdb are compatible */
10523     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
10524         printf("db.h and libdb are incompatible\n") ;
10525         exit(3);        
10526     }
10527
10528     printf("db.h and libdb are compatible\n") ;
10529
10530     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
10531                 + DB_VERSION_PATCH ;
10532
10533     /* needs to be >= 2.3.4 */
10534     if (Version < 2003004) {
10535     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
10536         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
10537         exit(2);        
10538     }
10539
10540     exit(0);
10541 #else
10542 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
10543     printf("You have Berkeley DB Version 1\n");
10544     exit(0);    /* DB version < 2: the coast is clear. */
10545 #else
10546     exit(1);    /* <db.h> not Berkeley DB? */
10547 #endif
10548 #endif
10549 }
10550 EOCP
10551         set try
10552         if eval $compile && ./try; then
10553                 echo 'Looks OK.' >&4
10554         else
10555                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
10556                 i_db=$undef
10557                 case " $libs " in
10558                 *"-ldb "*)
10559                         : Remove db from list of libraries to use
10560                         echo "Removing unusable -ldb from library list" >&4
10561                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
10562                         shift
10563                         libs="$*"
10564                         echo "libs = $libs" >&4
10565                         ;;
10566                 esac
10567         fi
10568         $rm -f try.*
10569         ;;
10570 esac
10571
10572 case "$i_db" in
10573 define)
10574         : Check the return type needed for hash 
10575         echo " "
10576         echo "Checking return type needed for hash for Berkeley DB ..." >&4
10577         $cat >try.c <<EOCP
10578 #$d_const HASCONST
10579 #ifndef HASCONST
10580 #define const
10581 #endif
10582 #include <sys/types.h>
10583 #include <db.h>
10584
10585 #ifndef DB_VERSION_MAJOR
10586 u_int32_t hash_cb (ptr, size)
10587 const void *ptr;
10588 size_t size;
10589 {
10590 }
10591 HASHINFO info;
10592 int main()
10593 {
10594         info.hash = hash_cb;
10595 }
10596 #endif
10597 EOCP
10598         if $cc $ccflags -c try.c >try.out 2>&1 ; then
10599                 if $contains warning try.out >>/dev/null 2>&1 ; then
10600                         db_hashtype='int'
10601                 else
10602                         db_hashtype='u_int32_t'
10603                 fi
10604         else
10605                 : XXX Maybe we should just give up here.
10606                 db_hashtype=u_int32_t
10607                 $cat try.out >&4
10608                 echo "Help:  I can't seem to compile the db test program." >&4
10609                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
10610         fi
10611         $rm -f try.*
10612         echo "Your version of Berkeley DB uses $db_hashtype for hash."
10613         ;;
10614 *)      db_hashtype=u_int32_t
10615         ;;
10616 esac
10617 case "$i_db" in
10618 define)
10619         : Check the return type needed for prefix 
10620         echo " "
10621         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
10622         cat >try.c <<EOCP
10623 #$d_const HASCONST
10624 #ifndef HASCONST
10625 #define const
10626 #endif
10627 #include <sys/types.h>
10628 #include <db.h>
10629
10630 #ifndef DB_VERSION_MAJOR
10631 size_t prefix_cb (key1, key2)
10632 const DBT *key1;
10633 const DBT *key2;
10634 {
10635 }
10636 BTREEINFO info;
10637 int main()
10638 {
10639         info.prefix = prefix_cb;
10640 }
10641 #endif
10642 EOCP
10643         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
10644                 if $contains warning try.out >>/dev/null 2>&1 ; then
10645                         db_prefixtype='int'
10646                 else
10647                         db_prefixtype='size_t'
10648                 fi
10649         else
10650                 db_prefixtype='size_t'
10651                 : XXX Maybe we should just give up here.
10652                 $cat try.out >&4
10653                 echo "Help:  I can't seem to compile the db test program." >&4
10654                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
10655         fi
10656         $rm -f try.*
10657         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
10658         ;;
10659 *)      db_prefixtype='size_t'
10660         ;;
10661 esac
10662
10663 : check for void type
10664 echo " "
10665 echo "Checking to see how well your C compiler groks the void type..." >&4
10666 case "$voidflags" in
10667 '')
10668         $cat >try.c <<'EOCP'
10669 #if TRY & 1
10670 void sub() {
10671 #else
10672 sub() {
10673 #endif
10674         extern void moo();      /* function returning void */
10675         void (*goo)();          /* ptr to func returning void */
10676 #if TRY & 8
10677         void *hue;              /* generic ptr */
10678 #endif
10679 #if TRY & 2
10680         void (*foo[10])();
10681 #endif
10682
10683 #if TRY & 4
10684         if(goo == moo) {
10685                 exit(0);
10686         }
10687 #endif
10688         exit(0);
10689 }
10690 int main() { sub(); }
10691 EOCP
10692         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
10693                 voidflags=$defvoidused
10694         echo "Good.  It appears to support void to the level $package wants.">&4
10695                 if $contains warning .out >/dev/null 2>&1; then
10696                         echo "However, you might get some warnings that look like this:"
10697                         $cat .out
10698                 fi
10699         else
10700 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
10701                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
10702                         echo "It supports 1..."
10703                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
10704                                 echo "It also supports 2..."
10705                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
10706                                         voidflags=7
10707                                         echo "And it supports 4 but not 8 definitely."
10708                                 else
10709                                         echo "It doesn't support 4..."
10710                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
10711                                                 voidflags=11
10712                                                 echo "But it supports 8."
10713                                         else
10714                                                 voidflags=3
10715                                                 echo "Neither does it support 8."
10716                                         fi
10717                                 fi
10718                         else
10719                                 echo "It does not support 2..."
10720                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
10721                                         voidflags=13
10722                                         echo "But it supports 4 and 8."
10723                                 else
10724                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
10725                                                 voidflags=5
10726                                                 echo "And it supports 4 but has not heard about 8."
10727                                         else
10728                                                 echo "However it supports 8 but not 4."
10729                                         fi
10730                                 fi
10731                         fi
10732                 else
10733                         echo "There is no support at all for void."
10734                         voidflags=0
10735                 fi
10736         fi
10737 esac
10738 case "$voidflags" in
10739 "$defvoidused") ;;
10740 *)      $cat >&4 <<'EOM'
10741   Support flag bits are:
10742     1: basic void declarations.
10743     2: arrays of pointers to functions returning void.
10744     4: operations between pointers to and addresses of void functions.
10745     8: generic void pointers.
10746 EOM
10747         dflt="$voidflags";
10748         rp="Your void support flags add up to what?"
10749         . ./myread
10750         voidflags="$ans"
10751         ;;
10752 esac
10753 $rm -f try.* .out
10754
10755
10756 : How can we generate normalized random numbers ?
10757 echo " "
10758 echo "Looking for a random number function..." >&4
10759 case "$randfunc" in
10760 '')
10761         if set drand48 val -f; eval $csym; $val; then
10762                 dflt="drand48"
10763                 echo "Good, found drand48()." >&4
10764         elif set random val -f; eval $csym; $val; then
10765                 dflt="random"
10766                 echo "OK, found random()." >&4
10767         else
10768                 dflt="rand"
10769                 echo "Yick, looks like I have to use rand()." >&4
10770         fi
10771         echo " "
10772         ;;
10773 *)
10774         dflt="$randfunc"
10775         ;;
10776 esac
10777 cont=true
10778
10779 case "$ccflags" in
10780 *-Dmy_rand=*|*-Dmy_srand=*)
10781         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
10782         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
10783         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
10784         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
10785         ;;
10786 esac
10787
10788 while $test "$cont"; do
10789         rp="Use which function to generate random numbers?"
10790         . ./myread
10791         if $test "$ans" = "$dflt"; then
10792                 : null
10793         else
10794                 randbits=''
10795         fi
10796         randfunc="$ans"
10797         if set $ans val -f; eval $csym; $val; then
10798                 cont=''
10799         else
10800                 dflt=y
10801                 rp="I cannot find function $ans. Use that name anyway?"
10802                 . ./myread
10803                 dflt=rand
10804                 case "$ans" in
10805                         [yY]*) cont='';;
10806                 esac
10807         fi
10808         case "$cont" in
10809         '')
10810                 case "$randfunc" in
10811                 drand48)
10812                         drand01="drand48()"
10813                         seedfunc="srand48"
10814                         randbits=48
10815                         randseedtype=long
10816                         ;;
10817                 rand|random)
10818                         case "$randbits" in
10819                         '')
10820 echo "Checking to see how many bits your $randfunc() function produces..." >&4
10821                                 $cat >try.c <<EOCP
10822 #$i_unistd I_UNISTD
10823 #$i_stdlib I_STDLIB
10824 #include <stdio.h>
10825 #ifdef I_UNISTD
10826 #  include <unistd.h>
10827 #endif
10828 #ifdef I_STDLIB
10829 #  include <stdlib.h>
10830 #endif
10831 int main()
10832 {
10833         register int i;
10834         register unsigned long tmp;
10835         register unsigned long max = 0L;
10836
10837         for (i = 1000; i; i--) {
10838                 tmp = (unsigned long) $randfunc();
10839                 if (tmp > max) max = tmp;
10840         }
10841         for (i = 0; max; i++)
10842                 max /= 2;
10843         printf("%d\n",i);
10844 }
10845 EOCP
10846                                 set try
10847                                 if eval $compile_ok; then
10848                                         dflt=`try`
10849                                 else
10850                                         dflt='?'
10851                                         echo "(I can't seem to compile the test program...)"
10852                                 fi
10853                                 ;;
10854                         *)
10855                                 dflt="$randbits"
10856                                 ;;
10857                         esac
10858                         rp="How many bits does your $randfunc() function produce?"
10859                         . ./myread
10860                         randbits="$ans"
10861                         $rm -f try.c try
10862                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10863                         seedfunc="s$randfunc"
10864                         randseedtype=unsigned
10865                         ;;
10866                 *)
10867                         dflt="31"
10868                         rp="How many bits does your $randfunc() function produce?"
10869                         . ./myread
10870                         randbits="$ans"
10871                         seedfunc="s$randfunc"
10872                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10873                         if set $seedfunc val -f; eval $csym; $val; then
10874                                 echo "(Using $seedfunc() to seed random generator)"
10875                         else
10876                                 echo "(Warning: no $seedfunc() to seed random generator)"
10877                                 seedfunc=rand
10878                         fi
10879                         randseedtype=unsigned
10880                         ;;
10881                 esac
10882                 ;;
10883         esac
10884 done
10885
10886 echo " "
10887 echo "Determining whether or not we are on an EBCDIC system..." >&4
10888 $cat >tebcdic.c <<'EOM'
10889 int main()
10890 {
10891   if ('M'==0xd4) return 0;
10892   return 1;
10893 }
10894 EOM
10895
10896 val=$undef
10897 set tebcdic
10898 if eval $compile_ok; then
10899         if ./tebcdic; then
10900                 echo "You have EBCDIC." >&4
10901                 val="$define"
10902         else
10903                 echo "Nope, no EBCDIC.  Assuming ASCII or some ISO Latin." >&4
10904         fi
10905 else
10906         echo "I'm unable to compile the test program." >&4
10907         echo "I'll assume ASCII or some ISO Latin." >&4
10908 fi
10909 $rm -f tebcdic.c tebcdic
10910 set ebcdic
10911 eval $setvar
10912
10913 : see what type file positions are declared as in the library
10914 rp="What is the type for file position used by fsetpos()?"
10915 set fpos_t fpostype long stdio.h sys/types.h
10916 eval $typedef_ask
10917
10918 : Store the full pathname to the ar program for use in the C program
10919 : Respect a hint or command line value for full_ar.
10920 case "$full_ar" in
10921 '') full_ar=$ar ;;
10922 esac
10923
10924 : Store the full pathname to the sed program for use in the C program
10925 full_sed=$sed
10926
10927 : see what type gids are declared as in the kernel
10928 echo " "
10929 echo "Looking for the type for group ids returned by getgid()."
10930 set gid_t gidtype xxx stdio.h sys/types.h
10931 eval $typedef
10932 case "$gidtype" in
10933 xxx)
10934         xxx=`./findhdr sys/user.h`
10935         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
10936         case $1 in
10937         unsigned) dflt="$1 $2" ;;
10938         *) dflt="$1" ;;
10939         esac
10940         ;;
10941 *) dflt="$gidtype";;
10942 esac
10943 case "$gidtype" in
10944 gid_t) echo "gid_t found." ;;
10945 *)      rp="What is the type for group ids returned by getgid()?"
10946         . ./myread
10947         gidtype="$ans"
10948         ;;
10949 esac
10950
10951 : see if getgroups exists
10952 set getgroups d_getgrps
10953 eval $inlibc
10954
10955 : see if setgroups exists
10956 set setgroups d_setgrps
10957 eval $inlibc
10958
10959
10960 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
10961 echo " "
10962 case "$d_getgrps$d_setgrps" in
10963 *define*)
10964         case "$groupstype" in
10965         '') dflt="$gidtype" ;;
10966         *)  dflt="$groupstype" ;;
10967         esac
10968         $cat <<EOM
10969 What type of pointer is the second argument to getgroups() and setgroups()?
10970 Usually this is the same as group ids, $gidtype, but not always.
10971
10972 EOM
10973         rp='What type pointer is the second argument to getgroups() and setgroups()?'
10974         . ./myread
10975         groupstype="$ans"
10976         ;;
10977 *)  groupstype="$gidtype";;
10978 esac
10979
10980 : see what type lseek is declared as in the kernel
10981 rp="What is the type used for lseek's offset on this system?"
10982 set off_t lseektype long stdio.h sys/types.h
10983 eval $typedef_ask
10984
10985 echo " "
10986 $echo $n "Checking to see how big your file offsets are...$c" >&4
10987 $cat >try.c <<EOCP
10988 #include <sys/types.h>
10989 #include <stdio.h>
10990 int main()
10991 {
10992         printf("%d\n", sizeof($lseektype));
10993 }
10994 EOCP
10995 set try
10996 if eval $compile_ok; then
10997         lseeksize=`./try`
10998         $echo " $lseeksize bytes." >&4
10999 else
11000         dflt='4'
11001         echo " "
11002         echo "(I can't seem to compile the test program.  Guessing...)"
11003         rp="What is the size of your file offsets (in bytes)?"
11004         . ./myread
11005         lseeksize="$ans"
11006 fi
11007 $rm -f try.c try
11008
11009 echo " "
11010 echo "Checking if your $make program sets \$(MAKE)..." >&4
11011 case "$make_set_make" in
11012 '')
11013         $sed 's/^X //' > testmake.mak << 'EOF'
11014 Xall:
11015 X       @echo 'maketemp="$(MAKE)"'
11016 EOF
11017         case "`$make -f testmake.mak 2>/dev/null`" in
11018         *maketemp=*) make_set_make='#' ;;
11019         *)      make_set_make="MAKE=$make" ;;
11020         esac
11021         $rm -f testmake.mak
11022         ;;
11023 esac
11024 case "$make_set_make" in
11025 '#') echo "Yup, it does.";;
11026 *) echo "Nope, it doesn't.";;
11027 esac
11028
11029 : see what type is used for mode_t
11030 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
11031 set mode_t modetype int stdio.h sys/types.h
11032 eval $typedef_ask
11033
11034 : define a fucntion to check prototypes
11035 $cat > protochk <<EOSH
11036 $startsh
11037 cc="$cc"
11038 optimize="$optimize"
11039 ccflags="$ccflags"
11040 prototype="$prototype"
11041 define="$define"
11042 rm=$rm
11043 EOSH
11044
11045 $cat >> protochk <<'EOSH'
11046
11047 $rm -f try.c
11048 foo="$1"
11049 shift
11050 while test $# -ge 2; do
11051         case "$1" in
11052                 $define) echo "#include <$2>" >> try.c ;;
11053                 literal) echo "$2" >> try.c ;;
11054         esac
11055     shift 2
11056 done
11057 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
11058 cat >> try.c <<'EOCP'
11059 #ifdef CAN_PROTOTYPE
11060 #define _(args) args
11061 #else
11062 #define _(args) ()
11063 #endif
11064 EOCP
11065 echo "$foo" >> try.c
11066 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
11067 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
11068 status=$?
11069 $rm -f try.[co]
11070 exit $status
11071 EOSH
11072 chmod +x protochk
11073 $eunicefix protochk
11074
11075 : see what type is used for size_t
11076 rp="What is the type used for the length parameter for string functions?"
11077 set size_t sizetype 'unsigned int' stdio.h sys/types.h
11078 eval $typedef_ask
11079
11080 : check for type of arguments to gethostbyaddr. 
11081 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
11082         case "$d_gethbyaddr" in
11083         $define)
11084                 $cat <<EOM
11085
11086 Checking to see what type of arguments are accepted by gethostbyaddr().
11087 EOM
11088                 hdrs="$define sys/types.h
11089                         $d_socket sys/socket.h 
11090                         $i_niin netinet/in.h 
11091                         $i_netdb netdb.h
11092                         $i_unistd unistd.h"
11093                 : The first arg can 'char *' or 'void *'
11094                 : The second arg is some of integral type
11095                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
11096                         for yyy in size_t long int; do
11097                                 case "$netdb_host_type" in
11098                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
11099                                         if ./protochk "$try" $hdrs; then
11100                                                 echo "Your system accepts $xxx for the first arg."
11101                                                 echo "...and $yyy for the second arg."
11102                                                 netdb_host_type="$xxx"
11103                                                 netdb_hlen_type="$yyy"
11104                                         fi
11105                                         ;;
11106                                 esac
11107                         done
11108                 done
11109                 : In case none of those worked, prompt the user.
11110                 case "$netdb_host_type" in
11111                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
11112                         dflt='char *'
11113                         . ./myread
11114                         netdb_host_type=$ans
11115                         rp='What is the type for the 2nd argument to gethostbyaddr?'
11116                         dflt="$sizetype"
11117                         . ./myread
11118                         netdb_hlen_type=$ans
11119                         ;;
11120                 esac
11121                 ;;
11122         *)      : no gethostbyaddr, so pick harmless defaults
11123                 netdb_host_type='char *'
11124                 netdb_hlen_type="$sizetype"
11125                 ;;
11126         esac
11127         # Remove the "const" if needed. -- but then we'll have a 
11128         # prototype clash!
11129         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
11130 fi
11131
11132 : check for type of argument to gethostbyname. 
11133 if test "X$netdb_name_type" = X ; then
11134         case "$d_gethbyname" in
11135         $define)
11136                 $cat <<EOM
11137
11138 Checking to see what type of argument is accepted by gethostbyname().
11139 EOM
11140                 hdrs="$define sys/types.h
11141                         $d_socket sys/socket.h 
11142                         $i_niin netinet/in.h 
11143                         $i_netdb netdb.h
11144                         $i_unistd unistd.h"
11145                 for xxx in "const char *" "char *"; do
11146                         case "$netdb_name_type" in
11147                         '')     try="extern struct hostent *gethostbyname($xxx);"
11148                                 if ./protochk "$try" $hdrs; then
11149                                         echo "Your system accepts $xxx."
11150                                         netdb_name_type="$xxx"
11151                                 fi
11152                                 ;;
11153                         esac
11154                 done
11155                 : In case none of those worked, prompt the user.
11156                 case "$netdb_name_type" in
11157                 '')     rp='What is the type for the 1st argument to gethostbyname?'
11158                         dflt='char *'
11159                         . ./myread
11160                         netdb_name_type=$ans
11161                         ;;
11162                 esac
11163                 ;;
11164         *)      : no gethostbyname, so pick harmless default
11165                 netdb_name_type='char *'
11166                 ;;
11167         esac
11168 fi
11169
11170 : check for type of 1st argument to getnetbyaddr. 
11171 if test "X$netdb_net_type" = X ; then
11172         case "$d_getnbyaddr" in
11173         $define)
11174                 $cat <<EOM
11175
11176 Checking to see what type of 1st argument is accepted by getnetbyaddr().
11177 EOM
11178                 hdrs="$define sys/types.h
11179                         $d_socket sys/socket.h 
11180                         $i_niin netinet/in.h 
11181                         $i_netdb netdb.h
11182                         $i_unistd unistd.h"
11183                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
11184                         case "$netdb_net_type" in
11185                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
11186                                 if ./protochk "$try" $hdrs; then
11187                                         echo "Your system accepts $xxx."
11188                                         netdb_net_type="$xxx"
11189                                 fi
11190                                 ;;
11191                         esac
11192                 done
11193                 : In case none of those worked, prompt the user.
11194                 case "$netdb_net_type" in
11195                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
11196                         dflt='long'
11197                         . ./myread
11198                         netdb_net_type=$ans
11199                         ;;
11200                 esac
11201                 ;;
11202         *)      : no getnetbyaddr, so pick harmless default
11203                 netdb_net_type='long'
11204                 ;;
11205         esac
11206 fi
11207 : locate the preferred pager for this system
11208 case "$pager" in
11209 '')
11210         dflt=''
11211         case "$pg" in
11212         /*) dflt=$pg;;
11213         esac
11214         case "$more" in
11215         /*) dflt=$more;;
11216         esac
11217         case "$less" in
11218         /*) dflt=$less;;
11219         esac
11220         case "$dflt" in
11221         '') dflt=/usr/ucb/more;;
11222         esac
11223         ;;
11224 *) dflt="$pager";;
11225 esac
11226 echo " "
11227 fn=f/
11228 rp='What pager is used on your system?'
11229 . ./getfile
11230 pager="$ans"
11231
11232 : see what type pids are declared as in the kernel
11233 rp="What is the type of process ids on this system?"
11234 set pid_t pidtype int stdio.h sys/types.h
11235 eval $typedef_ask
11236
11237 : check for length of pointer
11238 echo " "
11239 case "$ptrsize" in
11240 '')
11241         $echo $n "Checking to see how big your pointers are...$c" >&4
11242         if test "$voidflags" -gt 7; then
11243                 echo '#define VOID_PTR char *' > try.c
11244         else
11245                 echo '#define VOID_PTR void *' > try.c
11246         fi
11247         $cat >>try.c <<'EOCP'
11248 #include <stdio.h>
11249 int main()
11250 {
11251         printf("%d\n", sizeof(VOID_PTR));
11252         exit(0);
11253 }
11254 EOCP
11255         set try
11256         if eval $compile_ok; then
11257                 ptrsize=`./try`
11258                 $echo " $ptrsize bytes." >&4
11259         else
11260                 dflt='4'
11261                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
11262                 rp="What is the size of a pointer (in bytes)?"
11263                 . ./myread
11264                 ptrsize="$ans"
11265         fi
11266         ;;
11267 esac
11268 $rm -f try.c try
11269
11270 : see if ar generates random libraries by itself
11271 echo " "
11272 echo "Checking how to generate random libraries on your machine..." >&4
11273 echo 'int bar1() { return bar2(); }' > bar1.c
11274 echo 'int bar2() { return 2; }' > bar2.c
11275 $cat > foo.c <<'EOP'
11276 int main() { printf("%d\n", bar1()); exit(0); }
11277 EOP
11278 $cc $ccflags -c bar1.c >/dev/null 2>&1
11279 $cc $ccflags -c bar2.c >/dev/null 2>&1
11280 $cc $ccflags -c foo.c >/dev/null 2>&1
11281 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
11282 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11283         ./foobar >/dev/null 2>&1; then
11284         echo "$ar appears to generate random libraries itself."
11285         orderlib=false
11286         ranlib=":"
11287 elif $ar ts bar$_a >/dev/null 2>&1 &&
11288         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11289         ./foobar >/dev/null 2>&1; then
11290                 echo "a table of contents needs to be added with '$ar ts'."
11291                 orderlib=false
11292                 ranlib="$ar ts"
11293 else
11294         case "$ranlib" in
11295         :) ranlib='';;
11296         '')
11297                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
11298                 $test -f $ranlib || ranlib=''
11299                 ;;
11300         esac
11301         if $test -n "$ranlib"; then
11302                 echo "your system has '$ranlib'; we'll use that."
11303                 orderlib=false
11304         else
11305                 echo "your system doesn't seem to support random libraries"
11306                 echo "so we'll use lorder and tsort to order the libraries."
11307                 orderlib=true
11308                 ranlib=":"
11309         fi
11310 fi
11311 $rm -f foo* bar* 
11312
11313 : check for type of arguments to select. 
11314 case "$selecttype" in
11315 '') case "$d_select" in
11316         $define)
11317                 $cat <<EOM
11318 Checking to see what type of arguments are accepted by select().
11319 EOM
11320                 hdrs="$define sys/types.h
11321                         $i_systime sys/time.h 
11322                         $i_sysselct sys/select.h
11323                         $d_socket sys/socket.h"
11324                 : The first arg can be int, unsigned, or size_t
11325                 : The last arg may or may not be 'const'
11326                 val=''
11327                 : void pointer has been seen but using that
11328                 : breaks the selectminbits test
11329                 for xxx in 'fd_set *' 'int *'; do
11330                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
11331                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
11332                                         case "$val" in
11333                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
11334                                                 if ./protochk "$try" $hdrs; then
11335                                                         echo "Your system accepts $xxx."
11336                                                         val="$xxx"
11337                                                 fi
11338                                                 ;;
11339                                         esac
11340                                 done
11341                         done
11342                 done
11343                 case "$val" in
11344                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
11345                         case "$d_fd_set" in
11346                                 $define) dflt="fd_set *" ;;
11347                                 *)              dflt="int *" ;;
11348                         esac
11349                         . ./myread
11350                         val=$ans
11351                         ;;
11352                 esac
11353                 selecttype="$val"
11354                 ;;
11355         *)      : no select, so pick a harmless default
11356                 selecttype='int *'
11357                 ;;
11358         esac
11359         ;;
11360 esac
11361
11362 : check for the select 'width'
11363 case "$selectminbits" in
11364 '') case "$d_select" in
11365         $define)
11366                 $cat <<EOM
11367
11368 Checking to see on how many bits at a time your select() operates...
11369 EOM
11370                 $cat >try.c <<EOCP
11371 #include <sys/types.h>
11372 #$i_time I_TIME
11373 #$i_systime I_SYS_TIME
11374 #$i_systimek I_SYS_TIME_KERNEL
11375 #ifdef I_TIME
11376 #   include <time.h>
11377 #endif
11378 #ifdef I_SYS_TIME
11379 #   ifdef I_SYS_TIME_KERNEL
11380 #       define KERNEL
11381 #   endif
11382 #   include <sys/time.h>
11383 #   ifdef I_SYS_TIME_KERNEL
11384 #       undef KERNEL
11385 #   endif
11386 #endif
11387 #$i_sysselct I_SYS_SELECT
11388 #ifdef I_SYS_SELECT
11389 #include <sys/select.h>
11390 #endif
11391 #include <stdio.h>
11392 $selecttype b;
11393 #define S sizeof(*(b))
11394 #define MINBITS 64
11395 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
11396 #define NBITS  (NBYTES * 8)
11397 int main() {
11398     char s[NBYTES];
11399     struct timeval t;
11400     int i;
11401     FILE* fp;
11402     int fd;
11403
11404     fclose(stdin);
11405     fp = fopen("try.c", "r");
11406     if (fp == 0)
11407       exit(1);
11408     fd = fileno(fp);
11409     if (fd < 0)
11410       exit(2);
11411     b = ($selecttype)s;
11412     for (i = 0; i < NBITS; i++)
11413         FD_SET(i, b);
11414     t.tv_sec  = 0;
11415     t.tv_usec = 0;
11416     select(fd + 1, b, 0, 0, &t);
11417     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
11418     printf("%d\n", i + 1);
11419     return 0;
11420 }
11421 EOCP
11422                 set try
11423                 if eval $compile_ok; then
11424                         selectminbits=`./try`
11425                         case "$selectminbits" in
11426                         '')     cat >&4 <<EOM
11427 Cannot figure out on how many bits at a time your select() operates.
11428 I'll play safe and guess it is 32 bits.
11429 EOM
11430                                 selectminbits=32
11431                                 bits="32 bits"
11432                                 ;;
11433                         1)      bits="1 bit" ;;
11434                         *)      bits="$selectminbits bits" ;;
11435                         esac
11436                         echo "Your select() operates on $bits at a time." >&4
11437                 else
11438                         rp='What is the minimum number of bits your select() operates on?'
11439                         case "$byteorder" in
11440                         1234|12345678)  dflt=32 ;;
11441                         *)              dflt=1  ;;
11442                         esac
11443                         . ./myread
11444                         val=$ans
11445                         selectminbits="$val"
11446                 fi
11447                 $rm -f try.* try
11448                 ;;
11449         *)      : no select, so pick a harmless default
11450                 selectminbits='32'
11451                 ;;
11452         esac
11453         ;;
11454 esac
11455
11456 : Trace out the files included by signal.h, then look for SIGxxx names.
11457 : Remove SIGARRAYSIZE used by HPUX.
11458 : Remove SIGSTKSIZE used by Linux.
11459 : Remove SIGSTKSZ used by Posix.
11460 : Remove SIGTYP void lines used by OS2.
11461 xxx=`echo '#include <signal.h>' |
11462         $cppstdin $cppminus $cppflags 2>/dev/null |
11463         $grep '^[       ]*#.*include' | 
11464         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
11465 : Check this list of files to be sure we have parsed the cpp output ok.
11466 : This will also avoid potentially non-existent files, such 
11467 : as ../foo/bar.h
11468 xxxfiles=''
11469 for xx in $xxx /dev/null ; do
11470         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
11471 done
11472 : If we have found no files, at least try signal.h
11473 case "$xxxfiles" in
11474 '')     xxxfiles=`./findhdr signal.h` ;;
11475 esac
11476 xxx=`awk '
11477 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
11478         print substr($2, 4, 20)
11479 }
11480 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
11481         print substr($3, 4, 20)
11482 }' $xxxfiles`
11483 : Append some common names just in case the awk scan failed.
11484 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
11485 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
11486 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
11487 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
11488 : generate a few handy files for later
11489 $cat > signal.c <<'EOCP'
11490 #include <sys/types.h>
11491 #include <signal.h>
11492 #include <stdio.h>
11493 int main() {
11494
11495 /* Strange style to avoid deeply-nested #if/#else/#endif */
11496 #ifndef NSIG
11497 #  ifdef _NSIG
11498 #    define NSIG (_NSIG)
11499 #  endif
11500 #endif
11501
11502 #ifndef NSIG
11503 #  ifdef SIGMAX
11504 #    define NSIG (SIGMAX+1)
11505 #  endif
11506 #endif
11507
11508 #ifndef NSIG
11509 #  ifdef SIG_MAX
11510 #    define NSIG (SIG_MAX+1)
11511 #  endif
11512 #endif
11513
11514 #ifndef NSIG
11515 #  ifdef MAXSIG
11516 #    define NSIG (MAXSIG+1)
11517 #  endif
11518 #endif
11519
11520 #ifndef NSIG
11521 #  ifdef MAX_SIG
11522 #    define NSIG (MAX_SIG+1)
11523 #  endif
11524 #endif
11525
11526 #ifndef NSIG
11527 #  ifdef SIGARRAYSIZE
11528 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
11529 #  endif
11530 #endif
11531
11532 #ifndef NSIG
11533 #  ifdef _sys_nsig
11534 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
11535 #  endif
11536 #endif
11537
11538 /* Default to some arbitrary number that's big enough to get most
11539    of the common signals.
11540 */
11541 #ifndef NSIG
11542 #    define NSIG 50
11543 #endif
11544
11545 printf("NSIG %d\n", NSIG);
11546
11547 #ifndef JUST_NSIG
11548
11549 EOCP
11550
11551 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
11552 {
11553         printf "#ifdef SIG"; printf $1; printf "\n"
11554         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
11555         printf $1; printf ");\n"
11556         printf "#endif\n"
11557 }
11558 END {
11559         printf "#endif /* JUST_NSIG */\n";
11560         printf "}\n";
11561 }
11562 ' >>signal.c
11563 $cat >signal.awk <<'EOP'
11564 BEGIN { ndups = 0 }
11565 $1 ~ /^NSIG$/ { nsig = $2 }
11566 ($1 !~ /^NSIG$/) && (NF == 2) {
11567     if ($2 > maxsig) { maxsig = $2 }
11568     if (sig_name[$2]) {
11569         dup_name[ndups] = $1
11570         dup_num[ndups] = $2
11571         ndups++ 
11572     }
11573     else {
11574         sig_name[$2] = $1
11575         sig_num[$2] = $2
11576     }
11577 }
11578 END { 
11579     if (nsig == 0) {
11580         nsig = maxsig + 1
11581     }
11582     printf("NSIG %d\n", nsig);
11583     for (n = 1; n < nsig; n++) {
11584         if (sig_name[n]) {
11585             printf("%s %d\n", sig_name[n], sig_num[n])
11586         }
11587         else {
11588             printf("NUM%d %d\n", n, n) 
11589         }
11590     }
11591     for (n = 0; n < ndups; n++) {
11592         printf("%s %d\n", dup_name[n], dup_num[n])
11593     }
11594 }
11595 EOP
11596 $cat >signal_cmd <<EOS
11597 $startsh
11598 if $test -s signal.lst; then
11599     echo "Using your existing signal.lst file"
11600         exit 0
11601 fi
11602 xxx="$xxx"
11603 EOS
11604 $cat >>signal_cmd <<'EOS'
11605
11606 set signal
11607 if eval $compile_ok; then
11608         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11609 else
11610         echo "(I can't seem be able to compile the whole test program)" >&4
11611         echo "(I'll try it in little pieces.)" >&4
11612         set signal -DJUST_NSIG
11613         if eval $compile_ok; then
11614                 ./signal$_exe > signal.nsg
11615                 $cat signal.nsg
11616         else
11617                 echo "I can't seem to figure out how many signals you have." >&4
11618                 echo "Guessing 50." >&4
11619                 echo 'NSIG 50' > signal.nsg
11620         fi
11621         : Now look at all the signal names, one at a time.
11622         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
11623                 $cat > signal.c <<EOCP
11624 #include <sys/types.h>
11625 #include <signal.h>
11626 #include <stdio.h>
11627 int main() {
11628 printf("$xx %d\n", SIG${xx});
11629 return 0;
11630 }
11631 EOCP
11632                 set signal
11633                 if eval $compile; then
11634                         echo "SIG${xx} found."
11635                         ./signal$_exe  >> signal.ls1
11636                 else
11637                         echo "SIG${xx} NOT found."
11638                 fi
11639         done
11640         if $test -s signal.ls1; then
11641                 $cat signal.nsg signal.ls1 |
11642                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11643         fi
11644
11645 fi
11646 if $test -s signal.lst; then
11647         :
11648 else
11649         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
11650         echo 'kill -l' >signal
11651         set X `csh -f <signal`
11652         $rm -f signal
11653         shift
11654         case $# in
11655         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
11656         esac
11657         echo $@ | $tr ' ' $trnl | \
11658             $awk '{ printf "%s %d\n", $1, ++s; }
11659                   END { printf "NSIG %d\n", ++s }' >signal.lst
11660 fi
11661 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
11662 EOS
11663 chmod a+x signal_cmd
11664 $eunicefix signal_cmd
11665
11666 : generate list of signal names
11667 echo " "
11668 case "$sig_name_init" in
11669 '') doinit=yes ;;
11670 *)  case "$sig_num_init" in
11671     ''|*,*) doinit=yes ;;
11672     esac ;;
11673 esac
11674 case "$doinit" in
11675 yes)
11676         echo "Generating a list of signal names and numbers..." >&4
11677         . ./signal_cmd
11678         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
11679         sig_name=`$awk 'BEGIN { printf "ZERO " }
11680                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
11681         sig_num=`$awk  'BEGIN { printf "0 " }
11682                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
11683         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
11684                              !/^NSIG/   { printf "\"%s\", ", $1 }
11685                              END        { printf "0\n" }' signal.lst`
11686         sig_num_init=`$awk  'BEGIN      { printf "0, " }
11687                              !/^NSIG/   { printf "%d, ", $2}
11688                              END        { printf "0\n"}' signal.lst`
11689         ;;
11690 esac
11691 echo "The following $sig_count signals are available:"
11692 echo " "
11693 echo $sig_name | $awk \
11694 'BEGIN { linelen = 0 }
11695 {
11696         for (i = 1; i <= NF; i++) {
11697                 name = "SIG" $i " "
11698                 linelen = linelen + length(name)
11699                 if (linelen > 70) {
11700                         printf "\n"
11701                         linelen = length(name)
11702                 }
11703                 printf "%s", name
11704         }
11705         printf "\n"
11706 }'
11707 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
11708
11709 : see what type is used for signed size_t
11710 set ssize_t ssizetype int stdio.h sys/types.h
11711 eval $typedef
11712 dflt="$ssizetype"
11713 $cat > ssize.c <<EOM
11714 #include <stdio.h>
11715 #include <sys/types.h>
11716 #define Size_t $sizetype
11717 #define SSize_t $dflt
11718 int main()
11719 {
11720         if (sizeof(Size_t) == sizeof(SSize_t))
11721                 printf("$dflt\n");
11722         else if (sizeof(Size_t) == sizeof(int))
11723                 printf("int\n");
11724         else 
11725                 printf("long\n");
11726         exit(0);
11727 }
11728 EOM
11729 echo " "
11730 set ssize
11731 if eval $compile_ok && ./ssize > /dev/null; then
11732         ssizetype=`./ssize`
11733         echo "I'll be using $ssizetype for functions returning a byte count." >&4
11734 else
11735         $cat >&4 <<EOM
11736 Help! I can't compile and run the ssize_t test program: please enlighten me!
11737 (This is probably a misconfiguration in your system or libraries, and
11738 you really ought to fix it.  Still, I'll try anyway.)
11739
11740 I need a type that is the same size as $sizetype, but is guaranteed to
11741 be signed.  Common values are ssize_t, int and long.
11742
11743 EOM
11744         rp="What signed type is the same size as $sizetype?"
11745         . ./myread
11746         ssizetype="$ans"
11747 fi
11748 $rm -f ssize ssize.*
11749
11750 : see what type of char stdio uses.
11751 echo " "
11752 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
11753         echo "Your stdio uses unsigned chars." >&4
11754         stdchar="unsigned char"
11755 else
11756         echo "Your stdio uses signed chars." >&4
11757         stdchar="char"
11758 fi
11759
11760 : see if time exists
11761 echo " "
11762 if test "X$d_time" = X -o X"$timetype" = X; then
11763     if set time val -f d_time; eval $csym; $val; then
11764                 echo 'time() found.' >&4
11765                 val="$define"
11766                 rp="What is the type returned by time() on this system?"
11767                 set time_t timetype long stdio.h sys/types.h
11768                 eval $typedef_ask
11769     else
11770                 echo 'time() not found, hope that will do.' >&4
11771                 val="$undef"
11772                 timetype='int';
11773     fi
11774     set d_time
11775     eval $setvar
11776 fi
11777
11778 : see what type uids are declared as in the kernel
11779 echo " "
11780 echo "Looking for the type for user ids returned by getuid()."
11781 set uid_t uidtype xxx stdio.h sys/types.h
11782 eval $typedef
11783 case "$uidtype" in
11784 xxx)
11785         xxx=`./findhdr sys/user.h`
11786         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
11787         case $1 in
11788         unsigned) dflt="$1 $2" ;;
11789         *) dflt="$1" ;;
11790         esac
11791         ;;
11792 *) dflt="$uidtype";;
11793 esac
11794 case "$uidtype" in
11795 uid_t)  echo "uid_t found." ;;
11796 *)      rp="What is the type for user ids returned by getuid()?"
11797         . ./myread
11798         uidtype="$ans"
11799         ;;
11800 esac
11801
11802 : see if dbm.h is available
11803 : see if dbmclose exists
11804 set dbmclose d_dbmclose
11805 eval $inlibc
11806
11807 case "$d_dbmclose" in
11808 $define)
11809         set dbm.h i_dbm
11810         eval $inhdr
11811         case "$i_dbm" in
11812         $define)
11813                 val="$undef"
11814                 set i_rpcsvcdbm
11815                 eval $setvar
11816                 ;;
11817         *)      set rpcsvc/dbm.h i_rpcsvcdbm
11818                 eval $inhdr
11819                 ;;
11820         esac
11821         ;;
11822 *)      echo "We won't be including <dbm.h>"
11823         val="$undef"
11824         set i_dbm
11825         eval $setvar
11826         val="$undef"
11827         set i_rpcsvcdbm
11828         eval $setvar
11829         ;;
11830 esac
11831
11832 : see if this is a sys/file.h system
11833 val=''
11834 set sys/file.h val
11835 eval $inhdr
11836
11837 : do we need to include sys/file.h ?
11838 case "$val" in
11839 "$define")
11840         echo " "
11841         if $h_sysfile; then
11842                 val="$define"
11843                 echo "We'll be including <sys/file.h>." >&4
11844         else
11845                 val="$undef"
11846                 echo "We won't be including <sys/file.h>." >&4
11847         fi
11848         ;;
11849 *)
11850         h_sysfile=false
11851         ;;
11852 esac
11853 set i_sysfile
11854 eval $setvar
11855
11856 : see if fcntl.h is there
11857 val=''
11858 set fcntl.h val
11859 eval $inhdr
11860
11861 : see if we can include fcntl.h
11862 case "$val" in
11863 "$define")
11864         echo " "
11865         if $h_fcntl; then
11866                 val="$define"
11867                 echo "We'll be including <fcntl.h>." >&4
11868         else
11869                 val="$undef"
11870                 if $h_sysfile; then
11871         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
11872                 else
11873                         echo "We won't be including <fcntl.h>." >&4
11874                 fi
11875         fi
11876         ;;
11877 *)
11878         h_fcntl=false
11879         val="$undef"
11880         ;;
11881 esac
11882 set i_fcntl
11883 eval $setvar
11884
11885 : see if locale.h is available
11886 set locale.h i_locale
11887 eval $inhdr
11888
11889 : see if mach cthreads are available
11890 if test "X$usethreads" = "X$define"; then
11891         set mach/cthreads.h i_machcthr
11892         eval $inhdr
11893 else
11894         i_machcthr="$undef"
11895 fi
11896
11897
11898
11899 : see if this is a math.h system
11900 set math.h i_math
11901 eval $inhdr
11902
11903 : see if this is a mntent.h system
11904 set mntent.h i_mntent
11905 eval $inhdr
11906
11907 : see if ndbm.h is available
11908 set ndbm.h t_ndbm
11909 eval $inhdr
11910 case "$t_ndbm" in
11911 $define)
11912         : see if dbm_open exists
11913         set dbm_open d_dbm_open
11914         eval $inlibc
11915         case "$d_dbm_open" in
11916         $undef)
11917                 t_ndbm="$undef"
11918                 echo "We won't be including <ndbm.h>"
11919                 ;;
11920         esac
11921         ;;
11922 esac
11923 val="$t_ndbm"
11924 set i_ndbm
11925 eval $setvar
11926
11927 : see if net/errno.h is available
11928 val=''
11929 set net/errno.h val
11930 eval $inhdr
11931
11932 : Unfortunately, it causes problems on some systems.  Arrgh.
11933 case "$val" in
11934 $define)
11935         cat > try.c <<'EOM'
11936 #include <stdio.h>
11937 #include <errno.h>
11938 #include <net/errno.h>
11939 int func()
11940 {
11941         return ENOTSOCK;
11942 }
11943 EOM
11944         if $cc $ccflags -c try.c >/dev/null 2>&1; then
11945                 echo "We'll be including <net/errno.h>." >&4
11946         else
11947                 echo "We won't be including <net/errno.h>." >&4
11948                 val="$undef"
11949         fi
11950         $rm -f try.* try
11951         ;;
11952 esac
11953 set i_neterrno
11954 eval $setvar
11955
11956 : see if netinet/tcp.h is available
11957 set netinet/tcp.h i_netinettcp
11958 eval $inhdr
11959
11960 : see if this is a poll.h system
11961 set poll.h i_poll
11962 eval $inhdr
11963
11964 : get C preprocessor symbols handy
11965 echo " "
11966 $echo $n "Hmm... $c"
11967 echo $al | $tr ' ' $trnl >Cppsym.know
11968 $cat <<EOSS >Cppsym
11969 $startsh
11970 case "\$1" in
11971 -l) list=true
11972         shift
11973         ;;
11974 esac
11975 unknown=''
11976 case "\$list\$#" in
11977 1|2)
11978         for sym do
11979                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
11980                         exit 0
11981                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
11982                         :
11983                 else
11984                         unknown="\$unknown \$sym"
11985                 fi
11986         done
11987         set X \$unknown
11988         shift
11989         ;;
11990 esac
11991 case \$# in
11992 0) exit 1;;
11993 esac
11994 echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
11995 #ifdef \1\\
11996 exit 0; _ _ _ _\1\\      \1\\
11997 #endif\\
11998 /' >Cppsym\$\$
11999 echo "exit 1; _ _ _" >>Cppsym\$\$
12000 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
12001 case "\$list" in
12002 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
12003 *)
12004         sh Cppsym2\$\$
12005         status=\$?
12006         ;;
12007 esac
12008 $rm -f Cppsym\$\$ Cppsym2\$\$
12009 exit \$status
12010 EOSS
12011 chmod +x Cppsym
12012 $eunicefix Cppsym
12013 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
12014
12015 : now check the C compiler for additional symbols
12016 postprocess_cc_v=''
12017 case "$osname" in
12018 aix) postprocess_cc_v="|$tr , ' '" ;;
12019 esac
12020 $cat >ccsym <<EOS
12021 $startsh
12022 $cat >tmp.c <<EOF
12023 extern int foo;
12024 EOF
12025 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
12026 do
12027         case "\$i" in
12028         -D*) echo "\$i" | $sed 's/^-D//';;
12029         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
12030         esac
12031 done
12032 $rm -f try.c
12033 EOS
12034 postprocess_cc_v=''
12035 chmod +x ccsym
12036 $eunicefix ccsym
12037 ./ccsym > ccsym1.raw
12038 if $test -s ccsym1.raw; then
12039        $sort ccsym1.raw | $uniq >ccsym.raw
12040 else
12041        mv ccsym1.raw ccsym.raw
12042 fi
12043
12044 $awk '/\=/ { print $0; next }
12045         { print $0"=1" }' ccsym.raw >ccsym.list
12046 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
12047 $comm -13 ccsym.true ccsym.list >ccsym.own
12048 $comm -12 ccsym.true ccsym.list >ccsym.com
12049 $comm -23 ccsym.true ccsym.list >ccsym.cpp
12050 also=''
12051 if $test -z ccsym.raw; then
12052         echo "Your C compiler doesn't seem to define any symbols!" >&4
12053         echo " "
12054         echo "However, your C preprocessor defines the following symbols:"
12055         $cat Cppsym.true
12056         ccsymbols=''
12057         cppsymbols=`$cat Cppsym.true`
12058         cppsymbols=`echo $cppsymbols`
12059         cppccsymbols="$cppsymbols"
12060 else
12061         if $test -s ccsym.com; then
12062                 echo "Your C compiler and pre-processor define these symbols:"
12063                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
12064                 also='also '
12065                 symbols='ones'
12066                 cppccsymbols=`$cat ccsym.com`
12067                 cppccsymbols=`echo $cppccsymbols`
12068                 $test "$silent" || sleep 1
12069         fi
12070         if $test -s ccsym.cpp; then
12071                 $test "$also" && echo " "
12072                 echo "Your C pre-processor ${also}defines the following symbols:"
12073                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
12074                 also='further '
12075                 cppsymbols=`$cat ccsym.cpp`
12076                 cppsymbols=`echo $cppsymbols`
12077                 $test "$silent" || sleep 1
12078         fi
12079         if $test -s ccsym.own; then
12080                 $test "$also" && echo " "
12081                 echo "Your C compiler ${also}defines the following cpp symbols:"
12082                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
12083                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
12084                 ccsymbols=`$cat ccsym.own`
12085                 ccsymbols=`echo $ccsymbols`
12086                 $test "$silent" || sleep 1
12087         fi
12088 fi
12089 $rm -f ccsym*
12090
12091 : see if this is a termio system
12092 val="$undef"
12093 val2="$undef"
12094 val3="$undef"
12095 if $test `./findhdr termios.h`; then
12096         set tcsetattr i_termios
12097         eval $inlibc
12098         val3="$i_termios"
12099 fi
12100 echo " "
12101 case "$val3" in
12102 "$define") echo "You have POSIX termios.h... good!" >&4;;
12103 *) if ./Cppsym pyr; then
12104                 case "`/bin/universe`" in
12105                 ucb) if $test `./findhdr sgtty.h`; then
12106                                 val2="$define"
12107                                 echo "<sgtty.h> found." >&4
12108                         else
12109                                 echo "System is pyramid with BSD universe."
12110                                 echo "<sgtty.h> not found--you could have problems." >&4
12111                         fi;;
12112                 *) if $test `./findhdr termio.h`; then
12113                                 val="$define"
12114                                 echo "<termio.h> found." >&4
12115                         else
12116                                 echo "System is pyramid with USG universe."
12117                                 echo "<termio.h> not found--you could have problems." >&4
12118                         fi;;
12119                 esac
12120         elif ./usg; then
12121                 if $test `./findhdr termio.h`; then
12122                         echo "<termio.h> found." >&4
12123                         val="$define"
12124                 elif $test `./findhdr sgtty.h`; then
12125                         echo "<sgtty.h> found." >&4
12126                         val2="$define"
12127                 else
12128 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
12129                 fi
12130         else
12131                 if $test `./findhdr sgtty.h`; then
12132                         echo "<sgtty.h> found." >&4
12133                         val2="$define"
12134                 elif $test `./findhdr termio.h`; then
12135                         echo "<termio.h> found." >&4
12136                         val="$define"
12137                 else
12138 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
12139                 fi
12140         fi;;
12141 esac
12142 set i_termio; eval $setvar
12143 val=$val2; set i_sgtty; eval $setvar
12144 val=$val3; set i_termios; eval $setvar
12145
12146 : see if stdarg is available
12147 echo " "
12148 if $test `./findhdr stdarg.h`; then
12149         echo "<stdarg.h> found." >&4
12150         valstd="$define"
12151 else
12152         echo "<stdarg.h> NOT found." >&4
12153         valstd="$undef"
12154 fi
12155
12156 : see if varags is available
12157 echo " "
12158 if $test `./findhdr varargs.h`; then
12159         echo "<varargs.h> found." >&4
12160 else
12161         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
12162 fi
12163
12164 : set up the varargs testing programs
12165 $cat > varargs.c <<EOP
12166 #ifdef I_STDARG
12167 #include <stdarg.h>
12168 #endif
12169 #ifdef I_VARARGS
12170 #include <varargs.h>
12171 #endif
12172
12173 #ifdef I_STDARG
12174 int f(char *p, ...)
12175 #else
12176 int f(va_alist)
12177 va_dcl
12178 #endif
12179 {
12180         va_list ap;
12181 #ifndef I_STDARG
12182         char *p;
12183 #endif
12184 #ifdef I_STDARG
12185         va_start(ap,p);
12186 #else
12187         va_start(ap);
12188         p = va_arg(ap, char *);
12189 #endif
12190         va_end(ap);
12191 }
12192 EOP
12193 $cat > varargs <<EOP
12194 $startsh
12195 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
12196         echo "true"
12197 else
12198         echo "false"
12199 fi
12200 $rm -f varargs$_o
12201 EOP
12202 chmod +x varargs
12203
12204 : now check which varargs header should be included
12205 echo " "
12206 i_varhdr=''
12207 case "$valstd" in
12208 "$define")
12209         if `./varargs I_STDARG`; then
12210                 val='stdarg.h'
12211         elif `./varargs I_VARARGS`; then
12212                 val='varargs.h'
12213         fi
12214         ;;
12215 *)
12216         if `./varargs I_VARARGS`; then
12217                 val='varargs.h'
12218         fi
12219         ;;
12220 esac
12221 case "$val" in
12222 '')
12223 echo "I could not find the definition for va_dcl... You have problems..." >&4
12224         val="$undef"; set i_stdarg; eval $setvar
12225         val="$undef"; set i_varargs; eval $setvar
12226         ;;
12227 *) 
12228         set i_varhdr
12229         eval $setvar
12230         case "$i_varhdr" in
12231         stdarg.h)
12232                 val="$define"; set i_stdarg; eval $setvar
12233                 val="$undef"; set i_varargs; eval $setvar
12234                 ;;
12235         varargs.h)
12236                 val="$undef"; set i_stdarg; eval $setvar
12237                 val="$define"; set i_varargs; eval $setvar
12238                 ;;
12239         esac
12240         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
12241 esac
12242 $rm -f varargs*
12243
12244 : see if stddef is available
12245 set stddef.h i_stddef
12246 eval $inhdr
12247
12248 : see if sys/access.h is available
12249 set sys/access.h i_sysaccess
12250 eval $inhdr
12251
12252 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
12253 set sys/filio.h i_sysfilio
12254 eval $inhdr
12255 echo " "
12256 if $test `./findhdr sys/ioctl.h`; then
12257         val="$define"
12258         echo '<sys/ioctl.h> found.' >&4
12259 else
12260         val="$undef"
12261         if $test $i_sysfilio = "$define"; then
12262             echo '<sys/ioctl.h> NOT found.' >&4
12263         else
12264                 $test $i_sgtty = "$define" && xxx="sgtty.h"
12265                 $test $i_termio = "$define" && xxx="termio.h"
12266                 $test $i_termios = "$define" && xxx="termios.h"
12267 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
12268         fi
12269 fi
12270 set i_sysioctl
12271 eval $setvar
12272
12273 : see if sys/resource.h has to be included
12274 set sys/resource.h i_sysresrc
12275 eval $inhdr
12276
12277 : see if sys/security.h is available
12278 set sys/security.h i_syssecrt
12279 eval $inhdr
12280
12281 : see if this is a sys/statvfs.h system
12282 set sys/statvfs.h i_sysstatvfs
12283 eval $inhdr
12284
12285 : see if this is a sys/un.h system
12286 set sys/un.h i_sysun
12287 eval $inhdr
12288
12289 : see if this is a syswait system
12290 set sys/wait.h i_syswait
12291 eval $inhdr
12292
12293 : see if this is an utime system
12294 set utime.h i_utime
12295 eval $inhdr
12296
12297 : see if this is a values.h system
12298 set values.h i_values
12299 eval $inhdr
12300
12301 : see if this is a vfork system
12302 case "$d_vfork" in
12303 "$define")
12304         set vfork.h i_vfork
12305         eval $inhdr
12306         ;;
12307 *)
12308         i_vfork="$undef"
12309         ;;
12310 esac
12311
12312 : see if gdbm.h is available
12313 set gdbm.h t_gdbm
12314 eval $inhdr
12315 case "$t_gdbm" in
12316 $define)
12317         : see if gdbm_open exists
12318         set gdbm_open d_gdbm_open
12319         eval $inlibc
12320         case "$d_gdbm_open" in
12321         $undef)
12322                 t_gdbm="$undef"
12323                 echo "We won't be including <gdbm.h>"
12324                 ;;
12325         esac
12326         ;;
12327 esac
12328 val="$t_gdbm"
12329 set i_gdbm
12330 eval $setvar
12331
12332 echo " "
12333 echo "Looking for extensions..." >&4
12334 tdir=`pwd`
12335 cd $rsrc/ext
12336 : If we are using the old config.sh, known_extensions may contain
12337 : old or inaccurate or duplicate values.
12338 known_extensions=''
12339 nonxs_extensions=''
12340 : We do not use find because it might not be available.
12341 : We do not just use MANIFEST because the user may have dropped
12342 : some additional extensions into the source tree and expect them
12343 : to be built.
12344 for xxx in * ; do
12345         case "$xxx" in
12346         DynaLoader|dynaload) ;;
12347         *)      if $test -f $xxx/$xxx.xs; then
12348                         known_extensions="$known_extensions $xxx"
12349                 elif $test -f $xxx/Makefile.PL; then
12350                         nonxs_extensions="$nonxs_extensions $xxx"
12351                 else
12352                         if $test -d $xxx; then
12353                                 # Look for nested extensions, eg. Devel/Dprof.
12354                                 cd $xxx
12355                                 for yyy in * ; do
12356                                 if $test -f $yyy/$yyy.xs; then
12357                                         known_extensions="$known_extensions $xxx/$yyy"
12358                                 elif $test -f $yyy/Makefile.PL; then
12359                                         nonxs_extensions="$nonxs_extensions $xxx/$yyy"
12360                                 fi
12361                                 done
12362                                 cd ..
12363                         fi
12364                 fi 
12365                 ;;
12366         esac
12367 done
12368 set X $nonxs_extensions
12369 shift
12370 nonxs_extensions="$*"
12371 set X $known_extensions
12372 shift
12373 known_extensions="$*"
12374 cd $tdir
12375
12376 : Now see which are supported on this system.
12377 avail_ext=''
12378 for xxx in $known_extensions ; do
12379         case "$xxx" in
12380         DB_File|db_file)
12381                 case "$i_db" in
12382                 $define) avail_ext="$avail_ext $xxx" ;;
12383                 esac
12384                 ;;
12385         GDBM_File|gdbm_fil)
12386                 case "$i_gdbm" in 
12387                 $define) avail_ext="$avail_ext $xxx" ;;
12388                 esac
12389                 ;;
12390         NDBM_File|ndbm_fil)
12391                 case "$i_ndbm" in
12392                 $define) avail_ext="$avail_ext $xxx" ;;
12393                 esac
12394                 ;;
12395         ODBM_File|odbm_fil) 
12396                 case "${i_dbm}${i_rpcsvcdbm}" in
12397                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12398                 esac
12399                 ;;
12400         POSIX|posix)
12401                 case "$useposix" in
12402                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12403                 esac
12404                 ;;
12405         Opcode|opcode)
12406                 case "$useopcode" in
12407                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12408                 esac
12409                 ;;
12410         Socket|socket)
12411                 case "$d_socket" in 
12412                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12413                 esac
12414                 ;;
12415         Thread|thread)
12416                 case "$usethreads" in 
12417                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12418                 esac
12419                 ;;
12420         IPC/SysV|ipc/sysv)
12421                 : XXX Do we need a useipcsysv variable here
12422                 case "${d_msg}${d_sem}${d_shm}" in 
12423                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12424                 esac
12425                 ;;
12426         *)      avail_ext="$avail_ext $xxx"
12427                 ;;
12428         esac
12429 done
12430
12431 set X $avail_ext
12432 shift
12433 avail_ext="$*"
12434
12435 : Now see which nonxs extensions are supported on this system.
12436 : For now assume all are.
12437 nonxs_ext=''
12438 for xxx in $nonxs_extensions ; do
12439         case "$xxx" in
12440         *)      nonxs_ext="$nonxs_ext $xxx"
12441                 ;;
12442         esac
12443 done
12444
12445 set X $nonxs_ext
12446 shift
12447 nonxs_ext="$*"
12448
12449 case $usedl in
12450 $define)
12451         $cat <<EOM
12452 A number of extensions are supplied with $package.  You may choose to
12453 compile these extensions for dynamic loading (the default), compile
12454 them into the $package executable (static loading), or not include
12455 them at all.  Answer "none" to include no extensions.
12456 Note that DynaLoader is always built and need not be mentioned here.
12457
12458 EOM
12459         case "$dynamic_ext" in
12460         '') dflt="$avail_ext" ;;
12461         *)      dflt="$dynamic_ext"
12462                 # Perhaps we are reusing an old out-of-date config.sh.
12463                 case "$hint" in
12464                 previous)
12465                         if test X"$dynamic_ext" != X"$avail_ext"; then
12466                                 $cat <<EOM
12467 NOTICE:  Your previous config.sh list may be incorrect. 
12468 The extensions now available to you are 
12469         ${avail_ext}
12470 but the default list from your previous config.sh is
12471         ${dynamic_ext} 
12472
12473 EOM
12474                         fi
12475                         ;;
12476                 esac
12477                 ;;
12478         esac
12479         case "$dflt" in
12480         '')     dflt=none;;
12481         esac
12482         rp="What extensions do you wish to load dynamically?"
12483         . ./myread
12484         case "$ans" in
12485         none) dynamic_ext=' ' ;;
12486         *) dynamic_ext="$ans" ;;
12487         esac
12488
12489         case "$static_ext" in
12490         '')
12491                 : Exclude those already listed in dynamic linking
12492                 dflt=''
12493                 for xxx in $avail_ext; do
12494                         case " $dynamic_ext " in
12495                         *" $xxx "*) ;;
12496                         *) dflt="$dflt $xxx" ;;
12497                         esac
12498                 done
12499                 set X $dflt
12500                 shift
12501                 dflt="$*"
12502                 ;;
12503         *)  dflt="$static_ext" 
12504                 ;;
12505         esac
12506
12507         case "$dflt" in
12508         '')     dflt=none;;
12509         esac
12510         rp="What extensions do you wish to load statically?"
12511         . ./myread
12512         case "$ans" in
12513         none) static_ext=' ' ;;
12514         *) static_ext="$ans" ;;
12515         esac
12516         ;;
12517 *)
12518         $cat <<EOM
12519 A number of extensions are supplied with $package.  Answer "none" 
12520 to include no extensions. 
12521 Note that DynaLoader is always built and need not be mentioned here.
12522
12523 EOM
12524         case "$static_ext" in
12525         '') dflt="$avail_ext" ;;
12526         *)      dflt="$static_ext"
12527                 # Perhaps we are reusing an old out-of-date config.sh.
12528                 case "$hint" in
12529                 previous)
12530                         if test X"$static_ext" != X"$avail_ext"; then
12531                                 $cat <<EOM
12532 NOTICE:  Your previous config.sh list may be incorrect. 
12533 The extensions now available to you are 
12534         ${avail_ext}
12535 but the default list from your previous config.sh is
12536         ${static_ext} 
12537
12538 EOM
12539                         fi
12540                         ;;
12541                 esac
12542                 ;;
12543         esac
12544         : Exclude those that are not xs extensions
12545         case "$dflt" in
12546         '')     dflt=none;;
12547         esac
12548         rp="What extensions do you wish to include?"
12549         . ./myread
12550         case "$ans" in
12551         none) static_ext=' ' ;;
12552         *) static_ext="$ans" ;;
12553         esac
12554         ;;
12555 esac
12556
12557 set X $dynamic_ext $static_ext $nonxs_ext
12558 shift
12559 extensions="$*"
12560
12561 : Remove build directory name from cppstdin so it can be used from
12562 : either the present location or the final installed location.
12563 echo " "
12564 : Get out of the UU directory to get correct path name.
12565 cd ..
12566 case "$cppstdin" in
12567 `pwd`/cppstdin)
12568         echo "Stripping down cppstdin path name"
12569         cppstdin=cppstdin
12570         ;;
12571 esac
12572 cd UU
12573
12574 : end of configuration questions
12575 echo " "
12576 echo "End of configuration questions."
12577 echo " "
12578
12579 : back to where it started
12580 if test -d ../UU; then
12581         cd ..
12582 fi
12583
12584 : configuration may be patched via a 'config.over' file
12585 if $test -f config.over; then
12586         echo " "
12587         dflt=y
12588         rp='I see a config.over file.  Do you wish to load it?'
12589         . UU/myread
12590         case "$ans" in
12591         n*) echo "OK, I'll ignore it.";;
12592         *)      . ./config.over
12593                 echo "Configuration override changes have been loaded."
12594                 ;;
12595         esac
12596 fi
12597
12598 : in case they want portability, strip down executable paths
12599 case "$d_portable" in
12600 "$define")
12601         echo " "
12602         echo "Stripping down executable paths..." >&4
12603         for file in $loclist $trylist; do
12604                 if test X$file != Xln -a X$file != Xar -o X$osname != Xos2; then
12605                         eval $file="\$file"
12606                 fi
12607         done
12608         ;;
12609 esac
12610
12611 : create config.sh file
12612 echo " "
12613 echo "Creating config.sh..." >&4
12614 $spitshell <<EOT >config.sh
12615 $startsh
12616 #
12617 # This file was produced by running the Configure script. It holds all the
12618 # definitions figured out by Configure. Should you modify one of these values,
12619 # do not forget to propagate your changes by running "Configure -der". You may
12620 # instead choose to run each of the .SH files by yourself, or "Configure -S".
12621 #
12622
12623 # Package name      : $package
12624 # Source directory  : $src
12625 # Configuration time: $cf_time
12626 # Configured by     : $cf_by
12627 # Target system     : $myuname
12628
12629 Author='$Author'
12630 Date='$Date'
12631 Header='$Header'
12632 Id='$Id'
12633 Locker='$Locker'
12634 Log='$Log'
12635 Mcc='$Mcc'
12636 RCSfile='$RCSfile'
12637 Revision='$Revision'
12638 Source='$Source'
12639 State='$State'
12640 _a='$_a'
12641 _exe='$_exe'
12642 _o='$_o'
12643 afs='$afs'
12644 alignbytes='$alignbytes'
12645 ansi2knr='$ansi2knr'
12646 aphostname='$aphostname'
12647 apiversion='$apiversion'
12648 ar='$ar'
12649 archlib='$archlib'
12650 archlibexp='$archlibexp'
12651 archname64='$archname64'
12652 archname='$archname'
12653 archobjs='$archobjs'
12654 awk='$awk'
12655 baserev='$baserev'
12656 bash='$bash'
12657 bin='$bin'
12658 binexp='$binexp'
12659 bison='$bison'
12660 byacc='$byacc'
12661 byteorder='$byteorder'
12662 c='$c'
12663 castflags='$castflags'
12664 cat='$cat'
12665 cc='$cc'
12666 cccdlflags='$cccdlflags'
12667 ccdlflags='$ccdlflags'
12668 ccflags='$ccflags'
12669 ccsymbols='$ccsymbols'
12670 cf_by='$cf_by'
12671 cf_email='$cf_email'
12672 cf_time='$cf_time'
12673 chgrp='$chgrp'
12674 chmod='$chmod'
12675 chown='$chown'
12676 clocktype='$clocktype'
12677 comm='$comm'
12678 compress='$compress'
12679 contains='$contains'
12680 cp='$cp'
12681 cpio='$cpio'
12682 cpp='$cpp'
12683 cpp_stuff='$cpp_stuff'
12684 cppccsymbols='$cppccsymbols'
12685 cppflags='$cppflags'
12686 cpplast='$cpplast'
12687 cppminus='$cppminus'
12688 cpprun='$cpprun'
12689 cppstdin='$cppstdin'
12690 cppsymbols='$cppsymbols'
12691 crosscompile='$crosscompile'
12692 cryptlib='$cryptlib'
12693 csh='$csh'
12694 d_Gconvert='$d_Gconvert'
12695 d_access='$d_access'
12696 d_accessx='$d_accessx'
12697 d_alarm='$d_alarm'
12698 d_archlib='$d_archlib'
12699 d_attribut='$d_attribut'
12700 d_bcmp='$d_bcmp'
12701 d_bcopy='$d_bcopy'
12702 d_bsd='$d_bsd'
12703 d_bsdgetpgrp='$d_bsdgetpgrp'
12704 d_bsdsetpgrp='$d_bsdsetpgrp'
12705 d_bzero='$d_bzero'
12706 d_casti32='$d_casti32'
12707 d_castneg='$d_castneg'
12708 d_charvspr='$d_charvspr'
12709 d_chown='$d_chown'
12710 d_chroot='$d_chroot'
12711 d_chsize='$d_chsize'
12712 d_closedir='$d_closedir'
12713 d_cmsghdr_s='$d_cmsghdr_s'
12714 d_const='$d_const'
12715 d_crypt='$d_crypt'
12716 d_csh='$d_csh'
12717 d_cuserid='$d_cuserid'
12718 d_dbl_dig='$d_dbl_dig'
12719 d_dbmclose64='$d_dbmclose64'
12720 d_dbminit64='$d_dbminit64'
12721 d_delete64='$d_delete64'
12722 d_difftime='$d_difftime'
12723 d_dirent64_s='$d_dirent64_s'
12724 d_dirnamlen='$d_dirnamlen'
12725 d_dlerror='$d_dlerror'
12726 d_dlopen='$d_dlopen'
12727 d_dlsymun='$d_dlsymun'
12728 d_dosuid='$d_dosuid'
12729 d_drand48proto='$d_drand48proto'
12730 d_dup2='$d_dup2'
12731 d_eaccess='$d_eaccess'
12732 d_endgrent='$d_endgrent'
12733 d_endhent='$d_endhent'
12734 d_endnent='$d_endnent'
12735 d_endpent='$d_endpent'
12736 d_endpwent='$d_endpwent'
12737 d_endsent='$d_endsent'
12738 d_eofnblk='$d_eofnblk'
12739 d_eunice='$d_eunice'
12740 d_fchmod='$d_fchmod'
12741 d_fchown='$d_fchown'
12742 d_fcntl='$d_fcntl'
12743 d_fd_macros='$d_fd_macros'
12744 d_fd_set='$d_fd_set'
12745 d_fds_bits='$d_fds_bits'
12746 d_fetch64='$d_fetch64'
12747 d_fgetpos64='$d_fgetpos64'
12748 d_fgetpos='$d_fgetpos'
12749 d_firstkey64='$d_firstkey64'
12750 d_flexfnam='$d_flexfnam'
12751 d_flock64_s='$d_flock64_s'
12752 d_flock='$d_flock'
12753 d_fopen64='$d_fopen64'
12754 d_fork='$d_fork'
12755 d_fpathconf='$d_fpathconf'
12756 d_freopen64='$d_freopen64'
12757 d_fseek64='$d_fseek64'
12758 d_fseeko64='$d_fseeko64'
12759 d_fseeko='$d_fseeko'
12760 d_fsetpos64='$d_fsetpos64'
12761 d_fsetpos='$d_fsetpos'
12762 d_fstat64='$d_fstat64'
12763 d_fstatfs='$d_fstatfs'
12764 d_fstatvfs='$d_fstatvfs'
12765 d_ftell64='$d_ftell64'
12766 d_ftello64='$d_ftello64'
12767 d_ftello='$d_ftello'
12768 d_ftime='$d_ftime'
12769 d_ftruncate64='$d_ftruncate64'
12770 d_getgrent='$d_getgrent'
12771 d_getgrps='$d_getgrps'
12772 d_gethbyaddr='$d_gethbyaddr'
12773 d_gethbyname='$d_gethbyname'
12774 d_gethent='$d_gethent'
12775 d_gethname='$d_gethname'
12776 d_gethostprotos='$d_gethostprotos'
12777 d_getlogin='$d_getlogin'
12778 d_getmntent='$d_getmntent'
12779 d_getnbyaddr='$d_getnbyaddr'
12780 d_getnbyname='$d_getnbyname'
12781 d_getnent='$d_getnent'
12782 d_getnetprotos='$d_getnetprotos'
12783 d_getpbyname='$d_getpbyname'
12784 d_getpbynumber='$d_getpbynumber'
12785 d_getpent='$d_getpent'
12786 d_getpgid='$d_getpgid'
12787 d_getpgrp2='$d_getpgrp2'
12788 d_getpgrp='$d_getpgrp'
12789 d_getppid='$d_getppid'
12790 d_getprior='$d_getprior'
12791 d_getprotoprotos='$d_getprotoprotos'
12792 d_getpwent='$d_getpwent'
12793 d_getsbyname='$d_getsbyname'
12794 d_getsbyport='$d_getsbyport'
12795 d_getsent='$d_getsent'
12796 d_getservprotos='$d_getservprotos'
12797 d_gettimeod='$d_gettimeod'
12798 d_gnulibc='$d_gnulibc'
12799 d_grpasswd='$d_grpasswd'
12800 d_hasmntopt='$d_hasmntopt'
12801 d_htonl='$d_htonl'
12802 d_index='$d_index'
12803 d_inetaton='$d_inetaton'
12804 d_ino64_t='$d_ino64_t'
12805 d_int64t='$d_int64t'
12806 d_iovec_s='$d_iovec_s'
12807 d_isascii='$d_isascii'
12808 d_killpg='$d_killpg'
12809 d_lchown='$d_lchown'
12810 d_link='$d_link'
12811 d_llseek='$d_llseek'
12812 d_locconv='$d_locconv'
12813 d_lockf64='$d_lockf64'
12814 d_lockf='$d_lockf'
12815 d_longdbl='$d_longdbl'
12816 d_longlong='$d_longlong'
12817 d_lseek64='$d_lseek64'
12818 d_lstat64='$d_lstat64'
12819 d_lstat='$d_lstat'
12820 d_madvise='$d_madvise'
12821 d_mblen='$d_mblen'
12822 d_mbstowcs='$d_mbstowcs'
12823 d_mbtowc='$d_mbtowc'
12824 d_memcmp='$d_memcmp'
12825 d_memcpy='$d_memcpy'
12826 d_memmove='$d_memmove'
12827 d_memset='$d_memset'
12828 d_mkdir='$d_mkdir'
12829 d_mkfifo='$d_mkfifo'
12830 d_mktime='$d_mktime'
12831 d_mmap='$d_mmap'
12832 d_mprotect='$d_mprotect'
12833 d_msg='$d_msg'
12834 d_msg_ctrunc='$d_msg_ctrunc'
12835 d_msg_dontroute='$d_msg_dontroute'
12836 d_msg_oob='$d_msg_oob'
12837 d_msg_peek='$d_msg_peek'
12838 d_msg_proxy='$d_msg_proxy'
12839 d_msgctl='$d_msgctl'
12840 d_msgget='$d_msgget'
12841 d_msghdr_s='$d_msghdr_s'
12842 d_msgrcv='$d_msgrcv'
12843 d_msgsnd='$d_msgsnd'
12844 d_msync='$d_msync'
12845 d_munmap='$d_munmap'
12846 d_mymalloc='$d_mymalloc'
12847 d_nextkey64='$d_nextkey64'
12848 d_nice='$d_nice'
12849 d_off64_t='$d_off64_t'
12850 d_offset_t='$d_offset_t'
12851 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
12852 d_oldpthreads='$d_oldpthreads'
12853 d_oldsock='$d_oldsock'
12854 d_open3='$d_open3'
12855 d_open64='$d_open64'
12856 d_opendir64='$d_opendir64'
12857 d_pathconf='$d_pathconf'
12858 d_pause='$d_pause'
12859 d_phostname='$d_phostname'
12860 d_pipe='$d_pipe'
12861 d_poll='$d_poll'
12862 d_portable='$d_portable'
12863 d_pthread_yield='$d_pthread_yield'
12864 d_pwage='$d_pwage'
12865 d_pwchange='$d_pwchange'
12866 d_pwclass='$d_pwclass'
12867 d_pwcomment='$d_pwcomment'
12868 d_pwexpire='$d_pwexpire'
12869 d_pwgecos='$d_pwgecos'
12870 d_pwpasswd='$d_pwpasswd'
12871 d_pwquota='$d_pwquota'
12872 d_readdir64='$d_readdir64'
12873 d_readdir='$d_readdir'
12874 d_readlink='$d_readlink'
12875 d_readv='$d_readv'
12876 d_recvmsg='$d_recvmsg'
12877 d_rename='$d_rename'
12878 d_rewinddir='$d_rewinddir'
12879 d_rmdir='$d_rmdir'
12880 d_safebcpy='$d_safebcpy'
12881 d_safemcpy='$d_safemcpy'
12882 d_sanemcmp='$d_sanemcmp'
12883 d_sched_yield='$d_sched_yield'
12884 d_scm_rights='$d_scm_rights'
12885 d_seekdir64='$d_seekdir64'
12886 d_seekdir='$d_seekdir'
12887 d_select='$d_select'
12888 d_sem='$d_sem'
12889 d_semctl='$d_semctl'
12890 d_semctl_semid_ds='$d_semctl_semid_ds'
12891 d_semctl_semun='$d_semctl_semun'
12892 d_semget='$d_semget'
12893 d_semop='$d_semop'
12894 d_sendmsg='$d_sendmsg'
12895 d_setegid='$d_setegid'
12896 d_seteuid='$d_seteuid'
12897 d_setgrent='$d_setgrent'
12898 d_setgrps='$d_setgrps'
12899 d_sethent='$d_sethent'
12900 d_setlinebuf='$d_setlinebuf'
12901 d_setlocale='$d_setlocale'
12902 d_setnent='$d_setnent'
12903 d_setpent='$d_setpent'
12904 d_setpgid='$d_setpgid'
12905 d_setpgrp2='$d_setpgrp2'
12906 d_setpgrp='$d_setpgrp'
12907 d_setprior='$d_setprior'
12908 d_setpwent='$d_setpwent'
12909 d_setregid='$d_setregid'
12910 d_setresgid='$d_setresgid'
12911 d_setresuid='$d_setresuid'
12912 d_setreuid='$d_setreuid'
12913 d_setrgid='$d_setrgid'
12914 d_setruid='$d_setruid'
12915 d_setsent='$d_setsent'
12916 d_setsid='$d_setsid'
12917 d_setvbuf='$d_setvbuf'
12918 d_sfio='$d_sfio'
12919 d_shm='$d_shm'
12920 d_shmat='$d_shmat'
12921 d_shmatprototype='$d_shmatprototype'
12922 d_shmctl='$d_shmctl'
12923 d_shmdt='$d_shmdt'
12924 d_shmget='$d_shmget'
12925 d_sigaction='$d_sigaction'
12926 d_sigsetjmp='$d_sigsetjmp'
12927 d_socket='$d_socket'
12928 d_sockpair='$d_sockpair'
12929 d_stat64='$d_stat64'
12930 d_statblks='$d_statblks'
12931 d_statfs='$d_statfs'
12932 d_statfsflags='$d_statfsflags'
12933 d_statvfs='$d_statvfs'
12934 d_stdio_cnt_lval='$d_stdio_cnt_lval'
12935 d_stdio_ptr_lval='$d_stdio_ptr_lval'
12936 d_stdiobase='$d_stdiobase'
12937 d_stdstdio='$d_stdstdio'
12938 d_store64='$d_store64'
12939 d_strchr='$d_strchr'
12940 d_strcoll='$d_strcoll'
12941 d_strctcpy='$d_strctcpy'
12942 d_strerrm='$d_strerrm'
12943 d_strerror='$d_strerror'
12944 d_strtod='$d_strtod'
12945 d_strtol='$d_strtol'
12946 d_strtoul='$d_strtoul'
12947 d_strxfrm='$d_strxfrm'
12948 d_suidsafe='$d_suidsafe'
12949 d_symlink='$d_symlink'
12950 d_syscall='$d_syscall'
12951 d_sysconf='$d_sysconf'
12952 d_sysernlst='$d_sysernlst'
12953 d_syserrlst='$d_syserrlst'
12954 d_system='$d_system'
12955 d_tcgetpgrp='$d_tcgetpgrp'
12956 d_tcsetpgrp='$d_tcsetpgrp'
12957 d_telldir64='$d_telldir64'
12958 d_telldir='$d_telldir'
12959 d_telldirproto='$d_telldirproto'
12960 d_time='$d_time'
12961 d_times='$d_times'
12962 d_tmpfile64='$d_tmpfile64'
12963 d_truncate64='$d_truncate64'
12964 d_truncate='$d_truncate'
12965 d_tzname='$d_tzname'
12966 d_umask='$d_umask'
12967 d_uname='$d_uname'
12968 d_union_semun='$d_union_semun'
12969 d_vfork='$d_vfork'
12970 d_void_closedir='$d_void_closedir'
12971 d_voidsig='$d_voidsig'
12972 d_voidtty='$d_voidtty'
12973 d_volatile='$d_volatile'
12974 d_vprintf='$d_vprintf'
12975 d_wait4='$d_wait4'
12976 d_waitpid='$d_waitpid'
12977 d_wcstombs='$d_wcstombs'
12978 d_wctomb='$d_wctomb'
12979 d_writev='$d_writev'
12980 d_xenix='$d_xenix'
12981 date='$date'
12982 db_hashtype='$db_hashtype'
12983 db_prefixtype='$db_prefixtype'
12984 defvoidused='$defvoidused'
12985 direntrytype='$direntrytype'
12986 dlext='$dlext'
12987 dlsrc='$dlsrc'
12988 doublesize='$doublesize'
12989 drand01='$drand01'
12990 dynamic_ext='$dynamic_ext'
12991 eagain='$eagain'
12992 ebcdic='$ebcdic'
12993 echo='$echo'
12994 egrep='$egrep'
12995 emacs='$emacs'
12996 eunicefix='$eunicefix'
12997 exe_ext='$exe_ext'
12998 expr='$expr'
12999 extensions='$extensions'
13000 find='$find'
13001 firstmakefile='$firstmakefile'
13002 flex='$flex'
13003 fpostype='$fpostype'
13004 freetype='$freetype'
13005 full_ar='$full_ar'
13006 full_csh='$full_csh'
13007 full_sed='$full_sed'
13008 gccversion='$gccversion'
13009 gidtype='$gidtype'
13010 glibpth='$glibpth'
13011 grep='$grep'
13012 groupcat='$groupcat'
13013 groupstype='$groupstype'
13014 gzip='$gzip'
13015 h_fcntl='$h_fcntl'
13016 h_sysfile='$h_sysfile'
13017 hint='$hint'
13018 hostcat='$hostcat'
13019 huge='$huge'
13020 i_arpainet='$i_arpainet'
13021 i_bsdioctl='$i_bsdioctl'
13022 i_db='$i_db'
13023 i_dbm='$i_dbm'
13024 i_dirent='$i_dirent'
13025 i_dld='$i_dld'
13026 i_dlfcn='$i_dlfcn'
13027 i_fcntl='$i_fcntl'
13028 i_float='$i_float'
13029 i_gdbm='$i_gdbm'
13030 i_grp='$i_grp'
13031 i_inttypes='$i_inttypes'
13032 i_limits='$i_limits'
13033 i_locale='$i_locale'
13034 i_machcthr='$i_machcthr'
13035 i_malloc='$i_malloc'
13036 i_math='$i_math'
13037 i_memory='$i_memory'
13038 i_mntent='$i_mntent'
13039 i_ndbm='$i_ndbm'
13040 i_netdb='$i_netdb'
13041 i_neterrno='$i_neterrno'
13042 i_netinettcp='$i_netinettcp'
13043 i_niin='$i_niin'
13044 i_poll='$i_poll'
13045 i_pthread='$i_pthread'
13046 i_pwd='$i_pwd'
13047 i_rpcsvcdbm='$i_rpcsvcdbm'
13048 i_sfio='$i_sfio'
13049 i_sgtty='$i_sgtty'
13050 i_stdarg='$i_stdarg'
13051 i_stddef='$i_stddef'
13052 i_stdlib='$i_stdlib'
13053 i_string='$i_string'
13054 i_sysaccess='$i_sysaccess'
13055 i_sysdir='$i_sysdir'
13056 i_sysfile='$i_sysfile'
13057 i_sysfilio='$i_sysfilio'
13058 i_sysin='$i_sysin'
13059 i_sysioctl='$i_sysioctl'
13060 i_sysmman='$i_sysmman'
13061 i_sysmount='$i_sysmount'
13062 i_sysndir='$i_sysndir'
13063 i_sysparam='$i_sysparam'
13064 i_sysresrc='$i_sysresrc'
13065 i_syssecrt='$i_syssecrt'
13066 i_sysselct='$i_sysselct'
13067 i_syssockio='$i_syssockio'
13068 i_sysstat='$i_sysstat'
13069 i_sysstatvfs='$i_sysstatvfs'
13070 i_systime='$i_systime'
13071 i_systimek='$i_systimek'
13072 i_systimes='$i_systimes'
13073 i_systypes='$i_systypes'
13074 i_sysuio='$i_sysuio'
13075 i_sysun='$i_sysun'
13076 i_syswait='$i_syswait'
13077 i_termio='$i_termio'
13078 i_termios='$i_termios'
13079 i_time='$i_time'
13080 i_unistd='$i_unistd'
13081 i_utime='$i_utime'
13082 i_values='$i_values'
13083 i_varargs='$i_varargs'
13084 i_varhdr='$i_varhdr'
13085 i_vfork='$i_vfork'
13086 ignore_versioned_solibs='$ignore_versioned_solibs'
13087 incpath='$incpath'
13088 inews='$inews'
13089 installarchlib='$installarchlib'
13090 installbin='$installbin'
13091 installman1dir='$installman1dir'
13092 installman3dir='$installman3dir'
13093 installprivlib='$installprivlib'
13094 installscript='$installscript'
13095 installsitearch='$installsitearch'
13096 installsitelib='$installsitelib'
13097 installusrbinperl='$installusrbinperl'
13098 intsize='$intsize'
13099 known_extensions='$known_extensions'
13100 ksh='$ksh'
13101 large='$large'
13102 ld='$ld'
13103 lddlflags='$lddlflags'
13104 ldflags='$ldflags'
13105 less='$less'
13106 lib_ext='$lib_ext'
13107 libc='$libc'
13108 libperl='$libperl'
13109 libpth='$libpth'
13110 libs='$libs'
13111 libswanted='$libswanted'
13112 line='$line'
13113 lint='$lint'
13114 lkflags='$lkflags'
13115 ln='$ln'
13116 lns='$lns'
13117 locincpth='$locincpth'
13118 loclibpth='$loclibpth'
13119 longdblsize='$longdblsize'
13120 longlongsize='$longlongsize'
13121 longsize='$longsize'
13122 lp='$lp'
13123 lpr='$lpr'
13124 ls='$ls'
13125 lseeksize='$lseeksize'
13126 lseektype='$lseektype'
13127 mail='$mail'
13128 mailx='$mailx'
13129 make='$make'
13130 make_set_make='$make_set_make'
13131 mallocobj='$mallocobj'
13132 mallocsrc='$mallocsrc'
13133 malloctype='$malloctype'
13134 man1dir='$man1dir'
13135 man1direxp='$man1direxp'
13136 man1ext='$man1ext'
13137 man3dir='$man3dir'
13138 man3direxp='$man3direxp'
13139 man3ext='$man3ext'
13140 medium='$medium'
13141 mips='$mips'
13142 mips_type='$mips_type'
13143 mkdir='$mkdir'
13144 mmaptype='$mmaptype'
13145 models='$models'
13146 modetype='$modetype'
13147 more='$more'
13148 multiarch='$multiarch'
13149 mv='$mv'
13150 myarchname='$myarchname'
13151 mydomain='$mydomain'
13152 myhostname='$myhostname'
13153 myuname='$myuname'
13154 n='$n'
13155 netdb_hlen_type='$netdb_hlen_type'
13156 netdb_host_type='$netdb_host_type'
13157 netdb_name_type='$netdb_name_type'
13158 netdb_net_type='$netdb_net_type'
13159 nm='$nm'
13160 nm_opt='$nm_opt'
13161 nm_so_opt='$nm_so_opt'
13162 nonxs_ext='$nonxs_ext'
13163 nroff='$nroff'
13164 o_nonblock='$o_nonblock'
13165 obj_ext='$obj_ext'
13166 old_pthread_create_joinable='$old_pthread_create_joinable'
13167 optimize='$optimize'
13168 orderlib='$orderlib'
13169 osname='$osname'
13170 osvers='$osvers'
13171 package='$package'
13172 pager='$pager'
13173 passcat='$passcat'
13174 patchlevel='$patchlevel'
13175 path_sep='$path_sep'
13176 perl='$perl'
13177 perladmin='$perladmin'
13178 perlpath='$perlpath'
13179 pg='$pg'
13180 phostname='$phostname'
13181 pidtype='$pidtype'
13182 plibpth='$plibpth'
13183 pmake='$pmake'
13184 pr='$pr'
13185 prefix='$prefix'
13186 prefixexp='$prefixexp'
13187 privlib='$privlib'
13188 privlibexp='$privlibexp'
13189 prototype='$prototype'
13190 ptrsize='$ptrsize'
13191 randbits='$randbits'
13192 randfunc='$randfunc'
13193 randseedtype='$randseedtype'
13194 ranlib='$ranlib'
13195 rd_nodata='$rd_nodata'
13196 rm='$rm'
13197 rmail='$rmail'
13198 runnm='$runnm'
13199 sched_yield='$sched_yield'
13200 scriptdir='$scriptdir'
13201 scriptdirexp='$scriptdirexp'
13202 sed='$sed'
13203 seedfunc='$seedfunc'
13204 selectminbits='$selectminbits'
13205 selecttype='$selecttype'
13206 sendmail='$sendmail'
13207 sh='$sh'
13208 shar='$shar'
13209 sharpbang='$sharpbang'
13210 shmattype='$shmattype'
13211 shortsize='$shortsize'
13212 shrpenv='$shrpenv'
13213 shsharp='$shsharp'
13214 sig_count='$sig_count'
13215 sig_name='$sig_name'
13216 sig_name_init='$sig_name_init'
13217 sig_num='$sig_num'
13218 sig_num_init='$sig_num_init'
13219 signal_t='$signal_t'
13220 sitearch='$sitearch'
13221 sitearchexp='$sitearchexp'
13222 sitelib='$sitelib'
13223 sitelibexp='$sitelibexp'
13224 sizetype='$sizetype'
13225 sleep='$sleep'
13226 smail='$smail'
13227 small='$small'
13228 so='$so'
13229 sockethdr='$sockethdr'
13230 socketlib='$socketlib'
13231 sort='$sort'
13232 spackage='$spackage'
13233 spitshell='$spitshell'
13234 split='$split'
13235 src='$src'
13236 ssizetype='$ssizetype'
13237 startperl='$startperl'
13238 startsh='$startsh'
13239 static_ext='$static_ext'
13240 stdchar='$stdchar'
13241 stdio_base='$stdio_base'
13242 stdio_bufsiz='$stdio_bufsiz'
13243 stdio_cnt='$stdio_cnt'
13244 stdio_filbuf='$stdio_filbuf'
13245 stdio_ptr='$stdio_ptr'
13246 strings='$strings'
13247 submit='$submit'
13248 subversion='$subversion'
13249 sysman='$sysman'
13250 tail='$tail'
13251 tar='$tar'
13252 tbl='$tbl'
13253 tee='$tee'
13254 test='$test'
13255 timeincl='$timeincl'
13256 timetype='$timetype'
13257 touch='$touch'
13258 tr='$tr'
13259 trnl='$trnl'
13260 troff='$troff'
13261 uidtype='$uidtype'
13262 uname='$uname'
13263 uniq='$uniq'
13264 use64bits='$use64bits'
13265 usedl='$usedl'
13266 usemultiplicity='$usemultiplicity'
13267 usemymalloc='$usemymalloc'
13268 usenm='$usenm'
13269 useopcode='$useopcode'
13270 useperlio='$useperlio'
13271 useposix='$useposix'
13272 usesfio='$usesfio'
13273 useshrplib='$useshrplib'
13274 usethreads='$usethreads'
13275 usevfork='$usevfork'
13276 usrinc='$usrinc'
13277 uuname='$uuname'
13278 version='$version'
13279 vi='$vi'
13280 voidflags='$voidflags'
13281 xlibpth='$xlibpth'
13282 zcat='$zcat'
13283 zip='$zip'
13284 EOT
13285
13286 : Add in command line options if available
13287 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
13288
13289 : add special variables
13290 $test -f $src/patchlevel.h && \
13291 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
13292 echo "CONFIGDOTSH=true" >>config.sh
13293
13294 : propagate old symbols
13295 if $test -f UU/config.sh; then
13296         <UU/config.sh sort | uniq >UU/oldconfig.sh
13297         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
13298         sort | uniq -u >UU/oldsyms
13299         set X `cat UU/oldsyms`
13300         shift
13301         case $# in
13302         0) ;;
13303         *)
13304                 cat <<EOM
13305 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
13306 EOM
13307                 echo "# Variables propagated from previous config.sh file." >>config.sh
13308                 for sym in `cat UU/oldsyms`; do
13309                         echo "    Propagating $hint variable "'$'"$sym..."
13310                         eval 'tmp="$'"${sym}"'"'
13311                         echo "$tmp" | \
13312                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
13313                 done
13314                 ;;
13315         esac
13316 fi
13317
13318 : Finish up by extracting the .SH files
13319 case "$alldone" in
13320 exit)
13321         $rm -rf UU
13322         echo "Done."
13323         exit 0
13324         ;;
13325 cont)
13326         ;;
13327 '')
13328         dflt=''
13329         nostick=true
13330         $cat <<EOM
13331
13332 If you'd like to make any changes to the config.sh file before I begin
13333 to configure things, do it as a shell escape now (e.g. !vi config.sh).
13334
13335 EOM
13336         rp="Press return or use a shell escape to edit config.sh:"
13337         . UU/myread
13338         nostick=''
13339         case "$ans" in
13340         '') ;;
13341         *) : in case they cannot read
13342                 sh 1>&4 -c "$ans";;
13343         esac
13344         ;;
13345 esac
13346
13347 : if this fails, just run all the .SH files by hand
13348 . ./config.sh
13349
13350 echo " "
13351 exec 1>&4
13352 . ./UU/extract
13353
13354 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
13355         dflt=y
13356         case "$silent" in
13357         true) ;;
13358         *)
13359                 $cat <<EOM
13360
13361 Now you need to generate make dependencies by running "$make depend".
13362 You might prefer to run it in background: "$make depend > makedepend.out &"
13363 It can take a while, so you might not want to run it right now.
13364
13365 EOM
13366                 ;;
13367         esac
13368         rp="Run $make depend now?"
13369         . UU/myread
13370         case "$ans" in
13371         y*)
13372                 $make depend && echo "Now you must run a $make."
13373                 ;;
13374         *)
13375                 echo "You must run '$make depend' then '$make'."
13376                 ;;
13377         esac
13378 elif test -f [Mm]akefile; then
13379         echo " "
13380         echo "Now you must run a $make."
13381 else
13382         echo "Done."
13383 fi
13384
13385 if $test -f Policy.sh; then
13386     $cat <<EOM
13387
13388 If you compile $package on a different machine or from a different object
13389 directory, copy the Policy.sh file from this object directory to the
13390 new one before you run Configure -- this will help you with most of
13391 the policy defaults.
13392
13393 EOM
13394 fi
13395 if $test -f config.msg; then
13396     echo "Hmm.  I also noted the following information while running:"
13397     echo " "
13398     $cat config.msg >&4
13399     $rm -f config.msg
13400 fi
13401 $rm -f kit*isdone ark*isdone
13402 $rm -rf UU
13403
13404 : End of Configure
13405