fix bugs in the handling of negative numbers, among other things
[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 Fri Feb 12 13:46:36 EET 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 case "$inksh/$needksh" in
112 /[a-z]*)
113                 ENV=''
114                 changesh=true
115                 reason="$needksh"
116         ;;
117 esac
118 case "$inksh/$avoidksh" in
119 true/[a-z]*)
120         changesh=true
121         reason="$avoidksh"
122         ;;
123 esac
124 case "$inksh/$needksh-$avoidksh-" in
125 true/--)
126                 cat <<EOM
127 (I see you are using the Korn shell.  Some ksh's blow up on $me,
128 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
129 EOM
130         ;;
131 esac
132 case "$changesh" in
133 true)
134         echo "(Feeding myself to $newsh $reason.)"
135         case "$0" in
136         Configure|*/Configure) exec $newsh $0 "$@";;
137         *) exec $newsh Configure "$@";;
138         esac
139         ;;
140 esac
141
142 : if needed set CDPATH to a harmless value that is not chatty
143 : avoid bash 2.02 problems with empty CDPATH.
144 case "$CDPATH" in
145 '')     ;;
146 *)      case "$SHELL" in
147         *bash*) CDPATH='.' ;;
148         *)              CDPATH='' ;;
149         esac
150         ;;
151 esac
152 : Configure runs within the UU subdirectory
153 test -d UU || mkdir UU
154 cd UU && rm -f ./*
155
156 ccsymbols=''
157 cppccsymbols=''
158 cppsymbols=''
159 dynamic_ext=''
160 extensions=''
161 known_extensions=''
162 nonxs_ext=''
163 static_ext=''
164 useopcode=''
165 useposix=''
166 d_bsd=''
167 d_eunice=''
168 d_xenix=''
169 eunicefix=''
170 Mcc=''
171 ar=''
172 awk=''
173 bash=''
174 bison=''
175 byacc=''
176 cat=''
177 chgrp=''
178 chmod=''
179 chown=''
180 comm=''
181 compress=''
182 cp=''
183 cpio=''
184 cpp=''
185 csh=''
186 date=''
187 echo=''
188 egrep=''
189 emacs=''
190 expr=''
191 find=''
192 flex=''
193 grep=''
194 gzip=''
195 inews=''
196 ksh=''
197 less=''
198 line=''
199 lint=''
200 ln=''
201 lp=''
202 lpr=''
203 ls=''
204 mail=''
205 mailx=''
206 make=''
207 mkdir=''
208 more=''
209 mv=''
210 nm=''
211 nroff=''
212 perl=''
213 pg=''
214 pmake=''
215 pr=''
216 rm=''
217 rmail=''
218 sed=''
219 sendmail=''
220 shar=''
221 sleep=''
222 smail=''
223 sort=''
224 submit=''
225 tail=''
226 tar=''
227 tbl=''
228 tee=''
229 test=''
230 touch=''
231 tr=''
232 troff=''
233 uname=''
234 uniq=''
235 uuname=''
236 vi=''
237 zcat=''
238 zip=''
239 full_sed=''
240 libswanted=''
241 hint=''
242 myuname=''
243 osname=''
244 osvers=''
245 Author=''
246 Date=''
247 Header=''
248 Id=''
249 Locker=''
250 Log=''
251 RCSfile=''
252 Revision=''
253 Source=''
254 State=''
255 _a=''
256 _exe=''
257 _o=''
258 archobjs=''
259 exe_ext=''
260 firstmakefile=''
261 lib_ext=''
262 obj_ext=''
263 path_sep=''
264 afs=''
265 alignbytes=''
266 ansi2knr=''
267 archlib=''
268 archlibexp=''
269 d_archlib=''
270 installarchlib=''
271 archname=''
272 myarchname=''
273 baserev=''
274 bin=''
275 binexp=''
276 installbin=''
277 byteorder=''
278 cc=''
279 gccversion=''
280 ccflags=''
281 cppflags=''
282 ldflags=''
283 lkflags=''
284 locincpth=''
285 optimize=''
286 cf_email=''
287 cf_by=''
288 cf_time=''
289 contains=''
290 cpp_stuff=''
291 cpplast=''
292 cppminus=''
293 cpprun=''
294 cppstdin=''
295 d_access=''
296 d_accessx=''
297 d_alarm=''
298 d_attribut=''
299 d_bcmp=''
300 d_bcopy=''
301 d_bzero=''
302 d_casti32=''
303 castflags=''
304 d_castneg=''
305 d_chown=''
306 d_chroot=''
307 d_chsize=''
308 d_closedir=''
309 d_void_closedir=''
310 d_const=''
311 cryptlib=''
312 d_crypt=''
313 d_csh=''
314 full_csh=''
315 d_cuserid=''
316 d_dbl_dig=''
317 d_difftime=''
318 d_dlerror=''
319 d_dlopen=''
320 d_dlsymun=''
321 d_dosuid=''
322 d_suidsafe=''
323 d_drand48proto=''
324 d_dup2=''
325 d_eaccess=''
326 d_endgrent=''
327 d_endhent=''
328 d_endnent=''
329 d_endpent=''
330 d_endpwent=''
331 d_endsent=''
332 d_fchmod=''
333 d_fchown=''
334 d_fcntl=''
335 d_fd_macros=''
336 d_fd_set=''
337 d_fds_bits=''
338 d_fgetpos=''
339 d_flexfnam=''
340 d_flock=''
341 d_fork=''
342 d_fseeko=''
343 d_fsetpos=''
344 d_ftello=''
345 d_ftime=''
346 d_gettimeod=''
347 d_Gconvert=''
348 d_getgrent=''
349 d_getgrps=''
350 d_gethbyaddr=''
351 d_gethbyname=''
352 d_gethent=''
353 aphostname=''
354 d_gethname=''
355 d_phostname=''
356 d_uname=''
357 d_gethostprotos=''
358 d_getlogin=''
359 d_getnbyaddr=''
360 d_getnbyname=''
361 d_getnent=''
362 d_getnetprotos=''
363 d_getpent=''
364 d_getpgid=''
365 d_getpgrp2=''
366 d_bsdgetpgrp=''
367 d_getpgrp=''
368 d_getppid=''
369 d_getprior=''
370 d_getpbyname=''
371 d_getpbynumber=''
372 d_getprotoprotos=''
373 d_getpwent=''
374 d_getsent=''
375 d_getservprotos=''
376 d_getsbyname=''
377 d_getsbyport=''
378 d_gnulibc=''
379 d_htonl=''
380 d_inetaton=''
381 d_isascii=''
382 d_killpg=''
383 d_lchown=''
384 d_link=''
385 d_locconv=''
386 d_lockf=''
387 d_longdbl=''
388 longdblsize=''
389 d_longlong=''
390 longlongsize=''
391 d_lstat=''
392 d_madvise=''
393 d_mblen=''
394 d_mbstowcs=''
395 d_mbtowc=''
396 d_memcmp=''
397 d_memcpy=''
398 d_memmove=''
399 d_memset=''
400 d_mkdir=''
401 d_mkfifo=''
402 d_mktime=''
403 d_mmap=''
404 mmaptype=''
405 d_mprotect=''
406 d_msg=''
407 d_msgctl=''
408 d_msgget=''
409 d_msgrcv=''
410 d_msgsnd=''
411 d_msync=''
412 d_munmap=''
413 d_nice=''
414 d_open3=''
415 d_fpathconf=''
416 d_pathconf=''
417 d_pause=''
418 d_pipe=''
419 d_poll=''
420 d_portable=''
421 d_old_pthread_create_joinable=''
422 old_pthread_create_joinable=''
423 d_pthread_yield=''
424 d_sched_yield=''
425 sched_yield=''
426 d_readdir=''
427 d_rewinddir=''
428 d_seekdir=''
429 d_telldir=''
430 d_readlink=''
431 d_readv=''
432 d_rename=''
433 d_rmdir=''
434 d_safebcpy=''
435 d_safemcpy=''
436 d_sanemcmp=''
437 d_select=''
438 d_sem=''
439 d_semctl=''
440 d_semget=''
441 d_semop=''
442 d_setegid=''
443 d_seteuid=''
444 d_setgrent=''
445 d_setgrps=''
446 d_sethent=''
447 d_setlinebuf=''
448 d_setlocale=''
449 d_setnent=''
450 d_setpent=''
451 d_setpgid=''
452 d_setpgrp2=''
453 d_bsdsetpgrp=''
454 d_setpgrp=''
455 d_setprior=''
456 d_setpwent=''
457 d_setregid=''
458 d_setresgid=''
459 d_setresuid=''
460 d_setreuid=''
461 d_setrgid=''
462 d_setruid=''
463 d_setsent=''
464 d_setsid=''
465 d_setvbuf=''
466 d_sfio=''
467 usesfio=''
468 d_shm=''
469 d_shmat=''
470 d_shmatprototype=''
471 shmattype=''
472 d_shmctl=''
473 d_shmdt=''
474 d_shmget=''
475 d_sigaction=''
476 d_sigsetjmp=''
477 d_cmsghdr_s=''
478 d_msg_ctrunc=''
479 d_msg_dontroute=''
480 d_msg_oob=''
481 d_msg_peek=''
482 d_msg_proxy=''
483 d_msghdr_s=''
484 d_oldsock=''
485 d_recvmsg=''
486 d_scm_rights=''
487 d_sendmsg=''
488 d_socket=''
489 d_sockpair=''
490 sockethdr=''
491 socketlib=''
492 d_statblks=''
493 d_fstatfs=''
494 d_statfs=''
495 d_statfsflags=''
496 d_fstatvfs=''
497 d_statvfs=''
498 d_stdio_cnt_lval=''
499 d_stdio_ptr_lval=''
500 d_stdiobase=''
501 d_stdstdio=''
502 stdio_base=''
503 stdio_bufsiz=''
504 stdio_cnt=''
505 stdio_filbuf=''
506 stdio_ptr=''
507 d_index=''
508 d_strchr=''
509 d_strcoll=''
510 d_strctcpy=''
511 d_strerrm=''
512 d_strerror=''
513 d_sysernlst=''
514 d_syserrlst=''
515 d_strtod=''
516 d_strtol=''
517 d_strtoul=''
518 d_strxfrm=''
519 d_symlink=''
520 d_syscall=''
521 d_sysconf=''
522 d_system=''
523 d_tcgetpgrp=''
524 d_tcsetpgrp=''
525 d_telldirproto=''
526 d_time=''
527 timetype=''
528 clocktype=''
529 d_times=''
530 d_truncate=''
531 d_tzname=''
532 d_umask=''
533 d_semctl_semid_ds=''
534 d_semctl_semun=''
535 d_union_semun=''
536 d_vfork=''
537 usevfork=''
538 d_voidsig=''
539 signal_t=''
540 d_volatile=''
541 d_charvspr=''
542 d_vprintf=''
543 d_wait4=''
544 d_waitpid=''
545 d_wcstombs=''
546 d_wctomb=''
547 d_writev=''
548 d_dbmclose64=''
549 d_dbminit64=''
550 d_delete64=''
551 d_fetch64=''
552 d_firstkey64=''
553 d_nextkey64=''
554 d_store64=''
555 dlext=''
556 cccdlflags=''
557 ccdlflags=''
558 dlsrc=''
559 ld=''
560 lddlflags=''
561 usedl=''
562 doublesize=''
563 ebcdic=''
564 fpostype=''
565 gidtype=''
566 groupstype=''
567 h_fcntl=''
568 h_sysfile=''
569 i_arpainet=''
570 db_hashtype=''
571 db_prefixtype=''
572 i_db=''
573 i_dbm=''
574 i_rpcsvcdbm=''
575 d_dirnamlen=''
576 direntrytype=''
577 i_dirent=''
578 i_dld=''
579 i_dlfcn=''
580 i_fcntl=''
581 i_float=''
582 i_gdbm=''
583 d_grpasswd=''
584 i_grp=''
585 d_int64t=''
586 i_inttypes=''
587 i_limits=''
588 i_locale=''
589 i_machcthr=''
590 i_malloc=''
591 i_math=''
592 i_memory=''
593 i_mntent=''
594 i_ndbm=''
595 i_netdb=''
596 i_neterrno=''
597 i_niin=''
598 i_sysin=''
599 i_poll=''
600 d_pwage=''
601 d_pwchange=''
602 d_pwclass=''
603 d_pwcomment=''
604 d_pwexpire=''
605 d_pwgecos=''
606 d_pwpasswd=''
607 d_pwquota=''
608 i_pwd=''
609 i_sfio=''
610 i_stddef=''
611 i_stdlib=''
612 i_string=''
613 strings=''
614 i_sysaccess=''
615 i_sysdir=''
616 i_sysfile=''
617 d_voidtty=''
618 i_bsdioctl=''
619 i_sysfilio=''
620 i_sysioctl=''
621 i_syssockio=''
622 i_sysmman=''
623 i_sysmount=''
624 i_sysndir=''
625 i_sysparam=''
626 i_sysresrc=''
627 i_syssecrt=''
628 i_sysselct=''
629 i_sysstat=''
630 i_sysstatvfs=''
631 i_systimes=''
632 i_systypes=''
633 d_iovec_s=''
634 i_sysuio=''
635 i_sysun=''
636 i_syswait=''
637 i_sgtty=''
638 i_termio=''
639 i_termios=''
640 i_systime=''
641 i_systimek=''
642 i_time=''
643 timeincl=''
644 i_unistd=''
645 i_utime=''
646 i_values=''
647 i_stdarg=''
648 i_varargs=''
649 i_varhdr=''
650 i_vfork=''
651 installusrbinperl=''
652 intsize=''
653 longsize=''
654 shortsize=''
655 d_dirent64_s=''
656 d_flock64_s=''
657 d_fstat64=''
658 d_ftruncate64=''
659 d_ino64t=''
660 d_lockf64=''
661 d_lseek64=''
662 d_lstat64=''
663 d_off64t=''
664 d_open64=''
665 d_opendir64=''
666 d_readdir64=''
667 d_seekdir64=''
668 d_stat64=''
669 d_telldir64=''
670 d_truncate64=''
671 libc=''
672 libperl=''
673 shrpenv=''
674 useshrplib=''
675 glibpth=''
676 libpth=''
677 loclibpth=''
678 plibpth=''
679 xlibpth=''
680 ignore_versioned_solibs=''
681 libs=''
682 lns=''
683 lseeksize=''
684 lseektype=''
685 make_set_make=''
686 d_mymalloc=''
687 freetype=''
688 mallocobj=''
689 mallocsrc=''
690 malloctype=''
691 usemymalloc=''
692 installman1dir=''
693 man1dir=''
694 man1direxp=''
695 man1ext=''
696 installman3dir=''
697 man3dir=''
698 man3direxp=''
699 man3ext=''
700 huge=''
701 large=''
702 medium=''
703 models=''
704 small=''
705 split=''
706 modetype=''
707 mydomain=''
708 myhostname=''
709 phostname=''
710 c=''
711 n=''
712 d_eofnblk=''
713 eagain=''
714 o_nonblock=''
715 rd_nodata=''
716 netdb_hlen_type=''
717 netdb_host_type=''
718 netdb_name_type=''
719 netdb_net_type=''
720 groupcat=''
721 hostcat=''
722 passcat=''
723 orderlib=''
724 ranlib=''
725 package=''
726 spackage=''
727 pager=''
728 apiversion=''
729 patchlevel=''
730 subversion=''
731 version=''
732 perladmin=''
733 perlpath=''
734 pidtype=''
735 prefix=''
736 prefixexp=''
737 installprivlib=''
738 privlib=''
739 privlibexp=''
740 prototype=''
741 ptrsize=''
742 drand01=''
743 randbits=''
744 randfunc=''
745 randseedtype=''
746 seedfunc=''
747 installscript=''
748 scriptdir=''
749 scriptdirexp=''
750 selectminbits=''
751 selecttype=''
752 sh=''
753 sig_name=''
754 sig_name_init=''
755 sig_num=''
756 sig_num_init=''
757 installsitearch=''
758 sitearch=''
759 sitearchexp=''
760 installsitelib=''
761 sitelib=''
762 sitelibexp=''
763 sizetype=''
764 so=''
765 sharpbang=''
766 shsharp=''
767 spitshell=''
768 src=''
769 ssizetype=''
770 startperl=''
771 startsh=''
772 stdchar=''
773 d_fgetpos64=''
774 d_fopen64=''
775 d_freopen64=''
776 d_fseek64=''
777 d_fseeko64=''
778 d_fsetpos64=''
779 d_ftell64=''
780 d_ftello64=''
781 d_tmpfile64=''
782 sysman=''
783 trnl=''
784 uidtype=''
785 archname64=''
786 use64bits=''
787 usemultiplicity=''
788 nm_opt=''
789 nm_so_opt=''
790 runnm=''
791 usenm=''
792 useperlio=''
793 d_oldpthreads=''
794 usethreads=''
795 incpath=''
796 mips=''
797 mips_type=''
798 usrinc=''
799 defvoidused=''
800 voidflags=''
801 CONFIG=''
802
803 define='define'
804 undef='undef'
805 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
806 rmlist=''
807
808 : We must find out about Eunice early
809 eunicefix=':'
810 if test -f /etc/unixtovms; then
811         eunicefix=/etc/unixtovms
812 fi
813 if test -f /etc/unixtovms.exe; then
814         eunicefix=/etc/unixtovms.exe
815 fi
816
817 i_whoami=''
818 : change the next line if compiling for Xenix/286 on Xenix/386
819 xlibpth='/usr/lib/386 /lib/386'
820
821 : Possible local library directories to search.
822 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
823 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
824
825 : general looking path for locating libraries
826 glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
827 glibpth="$glibpth /lib /usr/lib $xlibpth"
828 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
829 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
830
831 : Private path used by Configure to find libraries.  Its value
832 : is prepended to libpth. This variable takes care of special
833 : machines, like the mips.  Usually, it should be empty.
834 plibpth=''
835
836 : Possible local include directories to search.
837 : Set locincpth to "" in a hint file to defeat local include searches.
838 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
839 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
840 :
841 : no include file wanted by default
842 inclwanted=''
843
844 : list of known cpp symbols, sorted alphabetically
845 al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
846 al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
847 al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
848 al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
849 al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
850 al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
851 al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
852 al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
853 al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
854 al="$al VMS Xenix286"
855 al="$al _AIX _AIX32 _AIX370 _AIX41 _AM29000 _COFF _CRAY _CX_UX _EPI"
856 al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET _POWER"
857 al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
858 al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
859 al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
860 al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
861 al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
862 al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
863 al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
864 al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
865 al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
866 al="$al __SVR4_2__ __UMAXV__"
867 al="$al ____386BSD____ __alpha __alpha__ __amiga"
868 al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
869 al="$al __host_mips__"
870 al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
871 al="$al __hp9000s500 __hp9000s700 __hp9000s800"
872 al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
873 al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
874 al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
875 al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
876 al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
877 al="$al __mc88100 __mc88100__ __mips __mips__"
878 al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
879 al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
880 al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
881 al="$al _host_mips _mips _unix"
882 al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
883 al="$al apollo ardent att386 att3b"
884 al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
885 al="$al cadmus clipper concurrent convex cray ctix"
886 al="$al dmert encore gcos gcx gimpel gould"
887 al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
888 al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
889 al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
890 al="$al i186 i286 i386 i486 i8086"
891 al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
892 al="$al ksr1 linux luna luna88k m68k m88100 m88k"
893 al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
894 al="$al mc68040 mc68060 mc68k mc68k32 mc700"
895 al="$al mc88000 mc88100 merlin mert mips mvs n16"
896 al="$al ncl_el ncl_mr"
897 al="$al news1500 news1700 news1800 news1900 news3700"
898 al="$al news700 news800 news900 ns16000 ns32000"
899 al="$al ns32016 ns32332 ns32k nsc32000 os osf"
900 al="$al parisc pc532 pdp11 plexus posix pyr"
901 al="$al riscix riscos scs sequent sgi sinix sony sony_news"
902 al="$al sonyrisc sparc sparclite spectrum stardent stratos"
903 al="$al sun sun3 sun386 svr4 sysV68 sysV88"
904 al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
905 al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
906 al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
907 al="$al xenix z8000"
908
909 : Trailing extension.  Override this in a hint file, if needed.
910 _exe=''
911 : Extra object files, if any, needed on this platform.
912 archobjs=''
913 groupstype=''
914 : default library list
915 libswanted=''
916 : some systems want to use only the non-versioned libso:s
917 ignore_versioned_solibs=''
918 : full support for void wanted by default
919 defvoidused=15
920
921 : set useposix=false in your hint file to disable the POSIX extension.
922 useposix=true
923 : set useopcode=false in your hint file to disable the Opcode extension.
924 useopcode=true
925 : set usemultiplicity on the Configure command line to enable multiplicity.
926 : set usethreads on the Configure command line to enable threads.
927 : List of libraries we want.
928 : If anyone needs -lnet, put it in a hint file.
929 libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
930 libswanted="$libswanted dld ld sun m c cposix posix ndir dir crypt"
931 libswanted="$libswanted ucb bsd BSD PW x"
932 : We probably want to search /usr/shlib before most other libraries.
933 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
934 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
935 glibpth="/usr/shlib $glibpth"
936 : Do not use vfork unless overridden by a hint file.
937 usevfork=false
938
939 : Find the basic shell for Bourne shell scripts
940 case "$sh" in
941 '')
942         case "$SYSTYPE" in
943         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
944         *) xxx='/bin/sh';;
945         esac
946         if test -f "$xxx"; then
947                 sh="$xxx"
948         else
949                 : Build up a list and do a single loop so we can 'break' out.
950                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
951                 for xxx in sh bash ksh pdksh ash; do
952                         for p in $pth; do
953                                 try="$try ${p}/${xxx}"
954                         done
955                 done
956                 for xxx in $try; do
957                         if test -f "$xxx"; then
958                                 sh="$xxx";
959                                 break
960                         elif test -f "$xxx.exe"; then
961                                 sh="$xxx";
962                                 break
963                         fi
964                 done
965         fi
966         ;;
967 esac
968
969 case "$sh" in
970 '')     cat <<EOM >&2
971 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
972
973 Usually it's in /bin/sh.  How did you even get this far?
974 Please contact me (Perl Maintainers) at perlbug@perl.com and 
975 we'll try to straighten this all out.
976 EOM
977         exit 1
978         ;;
979 esac
980
981 : see if sh knows # comments
982 if `$sh -c '#' >/dev/null 2>&1`; then
983         shsharp=true
984         spitshell=cat
985         xcat=/bin/cat
986         test -f $xcat || xcat=/usr/bin/cat
987         echo "#!$xcat" >try
988         $eunicefix try
989         chmod +x try
990         ./try > today
991         if test -s today; then
992                 sharpbang='#!'
993         else
994                 echo "#! $xcat" > try
995                 $eunicefix try
996                 chmod +x try
997                 ./try > today
998                 if test -s today; then
999                         sharpbang='#! '
1000                 else
1001                         sharpbang=': use '
1002                 fi
1003         fi
1004 else
1005         echo " "
1006         echo "Your $sh doesn't grok # comments--I will strip them later on."
1007         shsharp=false
1008         cd ..
1009         echo "exec grep -v '^[  ]*#'" >spitshell
1010         chmod +x spitshell
1011         $eunicefix spitshell
1012         spitshell=`pwd`/spitshell
1013         cd UU
1014         echo "I presume that if # doesn't work, #! won't work either!"
1015         sharpbang=': use '
1016 fi
1017 rm -f try today
1018
1019 : figure out how to guarantee sh startup
1020 case "$startsh" in
1021 '') startsh=${sharpbang}${sh} ;;
1022 *)
1023 esac
1024 cat >try <<EOSS
1025 $startsh
1026 set abc
1027 test "$?abc" != 1
1028 EOSS
1029
1030 chmod +x try
1031 $eunicefix try
1032 if ./try; then
1033         : echo "Yup, it does."
1034 else
1035         echo "Hmm... '$startsh' does not guarantee sh startup..."
1036         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1037 fi
1038 rm -f try
1039
1040
1041 : Save command line options in file UU/cmdline.opt for later use in
1042 : generating config.sh.
1043 cat > cmdline.opt <<EOSH
1044 # Configure command line arguments.
1045 config_arg0='$0'
1046 config_args='$*'
1047 config_argc=$#
1048 EOSH
1049 argn=1
1050 for arg in "$@"; do
1051         cat >>cmdline.opt <<EOSH
1052 config_arg$argn='$arg'
1053 EOSH
1054         argn=`expr $argn + 1`
1055 done
1056
1057 : produce awk script to parse command line options
1058 cat >options.awk <<'EOF'
1059 BEGIN {
1060         optstr = "dD:eEf:hKOrsSU:V";    # getopt-style specification
1061
1062         len = length(optstr);
1063         for (i = 1; i <= len; i++) {
1064                 c = substr(optstr, i, 1);
1065                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1066                 if (a == ":") {
1067                         arg[c] = 1;
1068                         i++;
1069                 }
1070                 opt[c] = 1;
1071         }
1072 }
1073 {
1074         expect = 0;
1075         str = $0;
1076         if (substr(str, 1, 1) != "-") {
1077                 printf("'%s'\n", str);
1078                 next;
1079         }
1080         len = length($0);
1081         for (i = 2; i <= len; i++) {
1082                 c = substr(str, i, 1);
1083                 if (!opt[c]) {
1084                         printf("-%s\n", substr(str, i));
1085                         next;
1086                 }
1087                 printf("-%s\n", c);
1088                 if (arg[c]) {
1089                         if (i < len)
1090                                 printf("'%s'\n", substr(str, i + 1));
1091                         else
1092                                 expect = 1;
1093                         next;
1094                 }
1095         }
1096 }
1097 END {
1098         if (expect)
1099                 print "?";
1100 }
1101 EOF
1102
1103 : process the command line options
1104 set X `for arg in "$@"; do echo "X$arg"; done |
1105         sed -e s/X// | awk -f options.awk`
1106 eval "set $*"
1107 shift
1108 rm -f options.awk
1109
1110 : set up default values
1111 fastread=''
1112 reuseval=false
1113 config_sh=''
1114 alldone=''
1115 error=''
1116 silent=''
1117 extractsh=''
1118 override=''
1119 knowitall=''
1120 rm -f optdef.sh
1121 cat >optdef.sh <<EOS
1122 $startsh
1123 EOS
1124
1125
1126 : option parsing
1127 while test $# -gt 0; do
1128         case "$1" in
1129         -d) shift; fastread=yes;;
1130         -e) shift; alldone=cont;;
1131         -f)
1132                 shift
1133                 cd ..
1134                 if test -r "$1"; then
1135                         config_sh="$1"
1136                 else
1137                         echo "$me: cannot read config file $1." >&2
1138                         error=true
1139                 fi
1140                 cd UU
1141                 shift;;
1142         -h) shift; error=true;;
1143         -r) shift; reuseval=true;;
1144         -s) shift; silent=true; realsilent=true;;
1145         -E) shift; alldone=exit;;
1146         -K) shift; knowitall=true;;
1147         -O) shift; override=true;;
1148         -S) shift; silent=true; extractsh=true;;
1149         -D)
1150                 shift
1151                 case "$1" in
1152                 *=)
1153                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1154                         echo "$me: ignoring -D $1" >&2
1155                         ;;
1156                 *=*) echo "$1" | \
1157                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1158                 *) echo "$1='define'" >> optdef.sh;;
1159                 esac
1160                 shift
1161                 ;;
1162         -U)
1163                 shift
1164                 case "$1" in
1165                 *=) echo "$1" >> optdef.sh;;
1166                 *=*)
1167                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1168                         echo "$me: ignoring -U $1" >&2
1169                         ;;
1170                 *) echo "$1='undef'" >> optdef.sh;;
1171                 esac
1172                 shift
1173                 ;;
1174         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1175                 exit 0;;
1176         --) break;;
1177         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1178         *) break;;
1179         esac
1180 done
1181
1182 case "$error" in
1183 true)
1184         cat >&2 <<EOM
1185 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1186                  [-U symbol] [-U symbol=]
1187   -d : use defaults for all answers.
1188   -e : go on without questioning past the production of config.sh.
1189   -f : specify an alternate default configuration file.
1190   -h : print this help message and exit (with an error status).
1191   -r : reuse C symbols value if possible (skips costly nm extraction).
1192   -s : silent mode, only echoes questions and essential information.
1193   -D : define symbol to have some value:
1194          -D symbol         symbol gets the value 'define'
1195          -D symbol=value   symbol gets the value 'value'
1196   -E : stop at the end of questions, after having produced config.sh.
1197   -K : do not use unless you know what you are doing.
1198   -O : let -D and -U override definitions from loaded configuration file.
1199   -S : perform variable substitutions on all .SH files (can mix with -f)
1200   -U : undefine symbol:
1201          -U symbol    symbol gets the value 'undef'
1202          -U symbol=   symbol gets completely empty
1203   -V : print version number and exit (with a zero status).
1204 EOM
1205         exit 1
1206         ;;
1207 esac
1208
1209 : Sanity checks
1210 case "$fastread$alldone" in
1211 yescont|yesexit) ;;
1212 *)
1213         if test ! -t 0; then
1214                 echo "Say 'sh Configure', not 'sh <Configure'"
1215                 exit 1
1216         fi
1217         ;;
1218 esac
1219
1220 exec 4>&1
1221 case "$silent" in
1222 true) exec 1>/dev/null;;
1223 esac
1224
1225 : run the defines and the undefines, if any, but leave the file out there...
1226 touch optdef.sh
1227 . ./optdef.sh
1228
1229 : set package name
1230 package=perl5
1231 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1232 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1233 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1234 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1235 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1236 esac
1237
1238 : Some greps do not return status, grrr.
1239 echo "grimblepritz" >grimble
1240 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1241         contains=contains
1242 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1243         contains=grep
1244 else
1245         contains=contains
1246 fi
1247 rm -f grimble
1248 : the following should work in any shell
1249 case "$contains" in
1250 contains*)
1251         echo " "
1252         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1253         cat >contains <<'EOSS'
1254 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1255 EOSS
1256 chmod +x contains
1257 esac
1258
1259 : Find the path to the source tree
1260 case "$src" in
1261 '') case "$0" in
1262     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`;;
1263     *)   src='.';;
1264     esac;;
1265 esac
1266 case "$src" in
1267 '')     src=/
1268         rsrc=/
1269         ;;
1270 /*) rsrc="$src";;
1271 *) rsrc="../$src";;
1272 esac
1273 if test -f $rsrc/Configure && \
1274         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1275 then
1276    : found it, so we are ok.
1277 else
1278         rsrc=''
1279         for src in . .. ../.. ../../.. ../../../..; do
1280                 if test -f ../$src/Configure && \
1281                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1282                 then
1283                         rsrc=../$src
1284                         break
1285                 fi
1286         done
1287 fi
1288 case "$rsrc" in
1289 '')
1290         cat <<EOM >&4
1291
1292 Sorry, I can't seem to locate the source dir for $package.  Please start
1293 Configure with an explicit path -- i.e. /some/path/Configure.
1294
1295 EOM
1296         exit 1
1297         ;;
1298 ../.)   rsrc='..';;
1299 *)
1300         echo " "
1301         echo "Sources for $package found in \"$src\"." >&4
1302         ;;
1303 esac
1304
1305 : script used to extract .SH files with variable substitutions
1306 cat >extract <<'EOS'
1307 CONFIG=true
1308 echo "Doing variable substitutions on .SH files..."
1309 if test -f $src/MANIFEST; then
1310         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1311 else
1312         echo "(Looking for .SH files under the source directory.)"
1313         set x `(cd $src; find . -name "*.SH" -print)`
1314 fi
1315 shift
1316 case $# in
1317 0) set x `(cd $src; echo *.SH)`; shift;;
1318 esac
1319 if test ! -f $src/$1; then
1320         shift
1321 fi
1322 mkdir_p='
1323 name=$1;
1324 create="";
1325 while test $name; do
1326         if test ! -d "$name"; then
1327                 create="$name $create";
1328                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1329                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1330         else
1331                 name="";
1332         fi;
1333 done;
1334 for file in $create; do
1335         mkdir $file;
1336 done
1337 '
1338 for file in $*; do
1339         case "$src" in
1340         ".")
1341                 case "$file" in
1342                 */*)
1343                         dir=`expr X$file : 'X\(.*\)/'`
1344                         file=`expr X$file : 'X.*/\(.*\)'`
1345                         (cd $dir && . ./$file)
1346                         ;;
1347                 *)
1348                         . ./$file
1349                         ;;
1350                 esac
1351                 ;;
1352         *)
1353                 case "$file" in
1354                 */*)
1355                         dir=`expr X$file : 'X\(.*\)/'`
1356                         file=`expr X$file : 'X.*/\(.*\)'`
1357                         (set x $dir; shift; eval $mkdir_p)
1358                         sh <$src/$dir/$file
1359                         ;;
1360                 *)
1361                         sh <$src/$file
1362                         ;;
1363                 esac
1364                 ;;
1365         esac
1366 done
1367 if test -f $src/config_h.SH; then
1368         if test ! -f config.h; then
1369         : oops, they left it out of MANIFEST, probably, so do it anyway.
1370         . $src/config_h.SH
1371         fi
1372 fi
1373 EOS
1374
1375 : extract files and exit if asked to do so
1376 case "$extractsh" in
1377 true)
1378         case "$realsilent" in
1379         true) ;;
1380         *) exec 1>&4;;
1381         esac
1382         case "$config_sh" in
1383         '') config_sh='config.sh';;
1384         esac
1385         echo " "
1386         echo "Fetching answers from $config_sh..."
1387         cd ..
1388         . $config_sh
1389         test "$override" && . ./optdef.sh
1390         echo " "
1391         . UU/extract
1392         rm -rf UU
1393         echo "Done."
1394         exit 0
1395         ;;
1396 esac
1397
1398 : Eunice requires " " instead of "", can you believe it
1399 echo " "
1400 : Here we go...
1401 echo "Beginning of configuration questions for $package."
1402
1403 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1404
1405 : first determine how to suppress newline on echo command
1406 echo " "
1407 echo "Checking echo to see how to suppress newlines..."
1408 (echo "hi there\c" ; echo " ") >.echotmp
1409 if $contains c .echotmp >/dev/null 2>&1 ; then
1410         echo "...using -n."
1411         n='-n'
1412         c=''
1413 else
1414         cat <<'EOM'
1415 ...using \c
1416 EOM
1417         n=''
1418         c='\c'
1419 fi
1420 echo $n "The star should be here-->$c"
1421 echo '*'
1422 rm -f .echotmp
1423
1424 : Now test for existence of everything in MANIFEST
1425 echo " "
1426 if test -f $rsrc/MANIFEST; then
1427         echo "First let's make sure your kit is complete.  Checking..." >&4
1428         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1429         rm -f missing
1430         tmppwd=`pwd`
1431         for filelist in x??; do
1432                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1433         done
1434         if test -s missing; then
1435                 cat missing >&4
1436                 cat >&4 <<'EOM'
1437
1438 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1439
1440 You have the option of continuing the configuration process, despite the
1441 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1442 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1443 and contact the author (perlbug@perl.com).
1444
1445 EOM
1446                 echo $n "Continue? [n] $c" >&4
1447                 read ans
1448                 case "$ans" in
1449                 y*)
1450                         echo "Continuing..." >&4
1451                         rm -f missing
1452                         ;;
1453                 *)
1454                         echo "ABORTING..." >&4
1455                         kill $$
1456                         ;;
1457                 esac
1458         else
1459                 echo "Looks good..."
1460         fi
1461 else
1462         echo "There is no MANIFEST file.  I hope your kit is complete !"
1463 fi
1464 rm -f missing x??
1465
1466 echo " "
1467 : Find the appropriate value for a newline for tr
1468 if test -n "$DJGPP"; then
1469        trnl='\012'
1470 fi
1471 if test X"$trnl" = X; then
1472         case "`echo foo|tr '\n' x 2>/dev/null`" in
1473         foox) trnl='\n' ;;
1474         esac
1475 fi
1476 if test X"$trnl" = X; then
1477         case "`echo foo|tr '\012' x 2>/dev/null`" in
1478         foox) trnl='\012' ;;
1479         esac
1480 fi
1481 if test X"$trnl" = X; then
1482         cat <<EOM >&2
1483
1484 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1485
1486 EOM
1487         exit 1
1488 fi
1489
1490 : compute the number of columns on the terminal for proper question formatting
1491 case "$COLUMNS" in
1492 '') COLUMNS='80';;
1493 esac
1494
1495 : set up the echo used in my read
1496 myecho="case \"\$xxxm\" in
1497 '') echo $n \"\$rp $c\" >&4;;
1498 *) case \"\$rp\" in
1499         '') echo $n \"[\$xxxm] $c\";;
1500         *)
1501                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1502                         echo \"\$rp\" >&4
1503                         echo $n \"[\$xxxm] $c\" >&4
1504                 else
1505                         echo $n \"\$rp [\$xxxm] $c\" >&4
1506                 fi
1507                 ;;
1508         esac;;
1509 esac"
1510
1511 : now set up to do reads with possible shell escape and default assignment
1512 cat <<EOSC >myread
1513 $startsh
1514 xxxm=\$dflt
1515 $myecho
1516 ans='!'
1517 case "\$fastread" in
1518 yes) case "\$dflt" in
1519         '') ;;
1520         *) ans='';
1521                 case "\$silent-\$rp" in
1522                 true-) ;;
1523                 *) echo " " >&4;;
1524                 esac;;
1525         esac;;
1526 *) case "\$silent" in
1527         true) case "\$rp" in
1528                 '') ans='';;
1529                 esac;;
1530         esac;;
1531 esac
1532 while expr "X\$ans" : "X!" >/dev/null; do
1533         read answ
1534         set x \$xxxm
1535         shift
1536         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1537         case  "\$answ" in
1538         "!")
1539                 sh 1>&4
1540                 echo " "
1541                 $myecho
1542                 ;;
1543         !*)
1544                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1545                 shift
1546                 sh 1>&4 -c "\$*"
1547                 echo " "
1548                 $myecho
1549                 ;;
1550         "\$ans")
1551                 case "\$ans" in
1552                 \\&*)
1553                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1554                         shift
1555                         case "\$1" in
1556                         -d)
1557                                 fastread=yes
1558                                 echo "(OK, I'll run with -d after this question.)" >&4
1559                                 ;;
1560                         -*)
1561                                 echo "*** Sorry, \$1 not supported yet." >&4
1562                                 ;;
1563                         esac
1564                         $myecho
1565                         ans=!
1566                         ;;
1567                 esac;;
1568         *)
1569                 case "\$aok" in
1570                 y)
1571                         echo "*** Substitution done -- please confirm."
1572                         xxxm="\$ans"
1573                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1574                         xxxm="\$ans"
1575                         ans=!
1576                         ;;
1577                 *)
1578                         echo "*** Error -- try again."
1579                         ans=!
1580                         ;;
1581                 esac
1582                 $myecho
1583                 ;;
1584         esac
1585         case "\$ans\$xxxm\$nostick" in
1586         '')
1587                 ans=!
1588                 $myecho
1589                 ;;
1590         esac
1591 done
1592 case "\$ans" in
1593 '') ans="\$xxxm";;
1594 esac
1595 EOSC
1596
1597 : create .config dir to save info across Configure sessions
1598 test -d ../.config || mkdir ../.config
1599 cat >../.config/README <<EOF
1600 This directory created by Configure to save information that should
1601 persist across sessions for $package.
1602
1603 You may safely delete it if you wish.
1604 EOF
1605
1606 : general instructions
1607 needman=true
1608 firsttime=true
1609 user=`(logname) 2>/dev/null`
1610 case "$user" in
1611 '') user=`whoami 2>&1`;;
1612 esac
1613 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1614         firsttime=false
1615         echo " "
1616         rp='Would you like to see the instructions?'
1617         dflt=n
1618         . ./myread
1619         case "$ans" in
1620         [yY]*) ;;
1621         *) needman=false;;
1622         esac
1623 fi
1624 if $needman; then
1625         cat <<EOH
1626
1627 This installation shell script will examine your system and ask you questions
1628 to determine how the perl5 package should be installed. If you get
1629 stuck on a question, you may use a ! shell escape to start a subshell or
1630 execute a command.  Many of the questions will have default answers in square
1631 brackets; typing carriage return will give you the default.
1632
1633 On some of the questions which ask for file or directory names you are allowed
1634 to use the ~name construct to specify the login directory belonging to "name",
1635 even if you don't have a shell which knows about that.  Questions where this is
1636 allowed will be marked "(~name ok)".
1637
1638 EOH
1639         rp=''
1640         dflt='Type carriage return to continue'
1641         . ./myread
1642         cat <<'EOH'
1643
1644 The prompter used in this script allows you to use shell variables and
1645 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1646 in the default answer, as if the default line was a set of arguments given to a
1647 script shell.  This means you may also use $* to repeat the whole default line,
1648 so you do not have to re-type everything to add something to the default.
1649
1650 Everytime there is a substitution, you will have to confirm.  If there is an
1651 error (e.g. an unmatched backtick), the default answer will remain unchanged
1652 and you will be prompted again.
1653
1654 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1655 the questions and use the computed defaults (or the previous answers if there
1656 was already a config.sh file). Type 'Configure -h' for a list of options.
1657 You may also start interactively and then answer '& -d' at any prompt to turn
1658 on the non-interactive behaviour for the remainder of the execution.
1659
1660 EOH
1661         . ./myread
1662         cat <<EOH
1663
1664 Much effort has been expended to ensure that this shell script will run on any
1665 Unix system.  If despite that it blows up on yours, your best bet is to edit
1666 Configure and run it again.  If you can't run Configure for some reason,
1667 you'll have to generate a config.sh file by hand.  Whatever problems you
1668 have, let me (perlbug@perl.com) know how I blew it.
1669
1670 This installation script affects things in two ways:
1671
1672 1) it may do direct variable substitutions on some of the files included
1673    in this kit.
1674 2) it builds a config.h file for inclusion in C programs.  You may edit
1675    any of these files as the need arises after running this script.
1676
1677 If you make a mistake on a question, there is no easy way to back up to it
1678 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1679 files.  Configure will offer to let you do this before it runs the SH files.
1680
1681 EOH
1682         dflt='Type carriage return to continue'
1683         . ./myread
1684         case "$firsttime" in
1685         true) echo $user >>../.config/instruct;;
1686         esac
1687 fi
1688
1689 : find out where common programs are
1690 echo " "
1691 echo "Locating common programs..." >&4
1692 cat <<EOSC >loc
1693 $startsh
1694 case \$# in
1695 0) exit 1;;
1696 esac
1697 thing=\$1
1698 shift
1699 dflt=\$1
1700 shift
1701 for dir in \$*; do
1702         case "\$thing" in
1703         .)
1704         if test -d \$dir/\$thing; then
1705                 echo \$dir
1706                 exit 0
1707         fi
1708         ;;
1709         *)
1710         for thisthing in \$dir/\$thing; do
1711                 : just loop through to pick last item
1712         done
1713         if test -f \$thisthing; then
1714                 echo \$thisthing
1715                 exit 0
1716         elif test -f \$dir/\$thing.exe; then
1717                 if test -n "$DJGPP"; then
1718                         echo \$dir/\$thing.exe
1719                 else
1720                         : on Eunice apparently
1721                         echo \$dir/\$thing
1722                 fi
1723                 exit 0
1724         fi
1725         ;;
1726         esac
1727 done
1728 echo \$dflt
1729 exit 1
1730 EOSC
1731 chmod +x loc
1732 $eunicefix loc
1733 loclist="
1734 awk
1735 cat
1736 comm
1737 cp
1738 echo
1739 expr
1740 grep
1741 ls
1742 make
1743 mkdir
1744 rm
1745 sed
1746 sort
1747 touch
1748 tr
1749 uniq
1750 "
1751 trylist="
1752 Mcc
1753 ar
1754 byacc
1755 cpp
1756 csh
1757 date
1758 egrep
1759 gzip
1760 less
1761 ln
1762 more
1763 nm
1764 nroff
1765 pg
1766 tee
1767 test
1768 uname
1769 zip
1770 "
1771 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1772 pth="$pth /lib /usr/lib"
1773 for file in $loclist; do
1774         eval xxx=\$$file
1775         case "$xxx" in
1776         /*|?:[\\/]*)
1777                 if test -f "$xxx"; then
1778                         : ok
1779                 else
1780                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1781                         xxx=`./loc $file $file $pth`
1782                 fi
1783                 ;;
1784         '') xxx=`./loc $file $file $pth`;;
1785         *) xxx=`./loc $xxx $xxx $pth`;;
1786         esac
1787         eval $file=$xxx
1788         eval _$file=$xxx
1789         case "$xxx" in
1790         /*)
1791                 echo $file is in $xxx.
1792                 ;;
1793         ?:[\\/]*)
1794                 echo $file is in $xxx.
1795                 ;;
1796         *)
1797                 echo "I don't know where '$file' is, and my life depends on it." >&4
1798                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1799                 exit 1
1800                 ;;
1801         esac
1802 done
1803 echo " "
1804 echo "Don't worry if any of the following aren't found..."
1805 say=offhand
1806 for file in $trylist; do
1807         eval xxx=\$$file
1808         case "$xxx" in
1809         /*|?:[\\/]*)
1810                 if test -f "$xxx"; then
1811                         : ok
1812                 else
1813                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1814                         xxx=`./loc $file $file $pth`
1815                 fi
1816                 ;;
1817         '') xxx=`./loc $file $file $pth`;;
1818         *) xxx=`./loc $xxx $xxx $pth`;;
1819         esac
1820         eval $file=$xxx
1821         eval _$file=$xxx
1822         case "$xxx" in
1823         /*)
1824                 echo $file is in $xxx.
1825                 ;;
1826         ?:[\\/]*)
1827                 echo $file is in $xxx.
1828                 ;;
1829         *)
1830                 echo "I don't see $file out there, $say."
1831                 say=either
1832                 ;;
1833         esac
1834 done
1835 case "$egrep" in
1836 egrep)
1837         echo "Substituting grep for egrep."
1838         egrep=$grep
1839         ;;
1840 esac
1841 case "$ln" in
1842 ln)
1843         echo "Substituting cp for ln."
1844         ln=$cp
1845         ;;
1846 esac
1847 case "$test" in
1848 test)
1849         echo "Hopefully test is built into your sh."
1850         ;;
1851 *)
1852         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1853                 echo "Using the test built into your sh."
1854                 test=test
1855                 _test=test
1856         fi
1857         ;;
1858 esac
1859 case "$echo" in
1860 echo)
1861         echo "Hopefully echo is built into your sh."
1862         ;;
1863 '') ;;
1864 *)
1865         echo " "
1866 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1867         $echo $n "hi there$c" >foo1
1868         echo $n "hi there$c" >foo2
1869         if cmp foo1 foo2 >/dev/null 2>&1; then
1870                 echo "They are compatible.  In fact, they may be identical."
1871         else
1872                 case "$n" in
1873                 '-n') n='' c='\c';;
1874                 *) n='-n' c='';;
1875                 esac
1876                 cat <<FOO
1877 They are not compatible!  You are probably running ksh on a non-USG system.
1878 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
1879 have echo built in and we may have to run some Bourne shell scripts.  That
1880 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
1881
1882 FOO
1883                 $echo $n "The star should be here-->$c"
1884                 $echo "*"
1885         fi
1886         $rm -f foo1 foo2
1887         ;;
1888 esac
1889
1890 : determine whether symbolic links are supported
1891 echo " "
1892 $touch blurfl
1893 if $ln -s blurfl sym > /dev/null 2>&1 ; then
1894         echo "Symbolic links are supported." >&4
1895         lns="$ln -s"
1896 else
1897         echo "Symbolic links are NOT supported." >&4
1898         lns="$ln"
1899 fi
1900 $rm -f blurfl sym
1901
1902 : see whether [:lower:] and [:upper:] are supported character classes
1903 echo " "
1904 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1905 ABYZ)
1906         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
1907         up='[:upper:]'
1908         low='[:lower:]'
1909         ;;
1910 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
1911         # (0xc9 and 0xd1), therefore that is a nice testing point.
1912         if test "X$up" = X -o "X$low" = X; then
1913             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
1914             ij) up='[A-Z]'
1915                 low='[a-z]'
1916                 ;;
1917             esac
1918         fi
1919         if test "X$up" = X -o "X$low" = X; then
1920             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
1921             ij) up='A-Z'
1922                 low='a-z'
1923                 ;;
1924             esac
1925         fi
1926         if test "X$up" = X -o "X$low" = X; then
1927             case "`echo IJ | od -x 2>/dev/null`" in
1928             *C9D1*|*c9d1*)
1929                 echo "Hey, this might be EBCDIC." >&4
1930                 if test "X$up" = X -o "X$low" = X; then
1931                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
1932                     ij) up='[A-IJ-RS-Z]'
1933                         low='[a-ij-rs-z]'
1934                         ;;
1935                     esac
1936                 fi
1937                 if test "X$up" = X -o "X$low" = X; then
1938                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
1939                     ij) up='A-IJ-RS-Z'
1940                         low='a-ij-rs-z'
1941                         ;;
1942                     esac
1943                 fi
1944                 ;;
1945             esac
1946         fi
1947 esac
1948 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
1949 ij)
1950     echo "Using $up and $low to convert case." >&4
1951     ;;
1952 *)
1953     echo "I don't know how to translate letters from upper to lower case." >&4
1954     echo "Your tr is not acting any way I know of." >&4
1955     exit 1
1956     ;;
1957 esac
1958 : set up the translation script tr, must be called with ./tr of course
1959 cat >tr <<EOSC
1960 $startsh
1961 case "\$1\$2" in
1962 '[A-Z][a-z]') exec $tr '$up' '$low';;
1963 '[a-z][A-Z]') exec $tr '$low' '$up';;
1964 esac
1965 exec $tr "\$@"
1966 EOSC
1967 chmod +x tr
1968 $eunicefix tr
1969
1970 : Try to determine whether config.sh was made on this system
1971 case "$config_sh" in
1972 '')
1973 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
1974 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
1975 # because the A-Z/a-z are not consecutive.
1976 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
1977         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
1978 newmyuname="$myuname"
1979 dflt=n
1980 case "$knowitall" in
1981 '')
1982         if test -f ../config.sh; then
1983                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
1984                         eval "`grep myuname= ../config.sh`"
1985                 fi
1986                 if test "X$myuname" = "X$newmyuname"; then
1987                         dflt=y
1988                 fi
1989         fi
1990         ;;
1991 *) dflt=y;;
1992 esac
1993
1994 : Get old answers from old config file if Configure was run on the
1995 : same system, otherwise use the hints.
1996 hint=default
1997 cd ..
1998 if test -f config.sh; then
1999         echo " "
2000         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2001         . UU/myread
2002         case "$ans" in
2003         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2004         *)  echo "Fetching default answers from your old config.sh file..." >&4
2005                 tmp_n="$n"
2006                 tmp_c="$c"
2007                 tmp_sh="$sh"
2008                 . ./config.sh
2009                 cp config.sh UU
2010                 n="$tmp_n"
2011                 c="$tmp_c"
2012                 : Older versions did not always set $sh.  Catch re-use of such
2013                 : an old config.sh.
2014                 case "$sh" in
2015                 '') sh="$tmp_sh" ;;
2016                 esac
2017                 hint=previous
2018                 ;;
2019         esac
2020 fi
2021 if test ! -f config.sh; then
2022         $cat <<EOM
2023
2024 First time through, eh?  I have some defaults handy for some systems
2025 that need some extra help getting the Configure answers right:
2026
2027 EOM
2028         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2029         dflt=''
2030         : Half the following guesses are probably wrong... If you have better
2031         : tests or hints, please send them to perlbug@perl.com
2032         : The metaconfig authors would also appreciate a copy...
2033         $test -f /irix && osname=irix
2034         $test -f /xenix && osname=sco_xenix
2035         $test -f /dynix && osname=dynix
2036         $test -f /dnix && osname=dnix
2037         $test -f /lynx.os && osname=lynxos
2038         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2039         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2040         $test -f /bin/mips && /bin/mips && osname=mips
2041         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2042                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2043         $test -d /usr/apollo/bin && osname=apollo
2044         $test -f /etc/saf/_sactab && osname=svr4
2045         $test -d /usr/include/minix && osname=minix
2046         if $test -d /MachTen -o -d /MachTen_Folder; then
2047                 osname=machten
2048                 if $test -x /sbin/version; then
2049                         osvers=`/sbin/version | $awk '{print $2}' |
2050                         $sed -e 's/[A-Za-z]$//'`
2051                 elif $test -x /usr/etc/version; then
2052                         osvers=`/usr/etc/version | $awk '{print $2}' |
2053                         $sed -e 's/[A-Za-z]$//'`
2054                 else
2055                         osvers="$2.$3"
2056                 fi
2057         fi
2058        $test -f /sys/posix.dll &&
2059                $test -f /usr/bin/what &&
2060                set X `/usr/bin/what /sys/posix.dll` &&
2061                $test "$3" = UWIN &&
2062                osname=uwin &&
2063                osvers="$5"
2064         if $test -f $uname; then
2065                 set X $myuname
2066                 shift
2067
2068                 case "$5" in
2069                 fps*) osname=fps ;;
2070                 mips*)
2071                         case "$4" in
2072                         umips) osname=umips ;;
2073                         *) osname=mips ;;
2074                         esac;;
2075                 [23]100) osname=mips ;;
2076                 next*) osname=next ;;
2077                 i386*)
2078                         tmp=`/bin/uname -X 2>/dev/null|awk -e '/3\.2v[45]/{ print $(NF) }'`
2079                         if $test "$tmp" != "" -a "$3" = "3.2" -a test -e '/etc/systemid'; then
2080                                 osname='sco'
2081                                 osvers=$tmp
2082                         elif $test -f /etc/kconfig; then
2083                                 osname=isc
2084                                 if test "$lns" = "ln -s"; then
2085                                         osvers=4
2086                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2087                                         osvers=3
2088                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2089                                         osvers=2
2090                                 fi
2091                         fi
2092                         unset tmp
2093                         ;;
2094                 pc*)
2095                         if test -n "$DJGPP"; then
2096                                 osname=dos
2097                                 osvers=djgpp
2098                         fi
2099                         ;;
2100                 esac
2101
2102                 case "$1" in
2103                 aix) osname=aix
2104                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2105                         case "$tmp" in
2106                         'not found') osvers="$4"."$3" ;;
2107                         '<3240'|'<>3240') osvers=3.2.0 ;;
2108                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2109                         '=3250'|'>3250') osvers=3.2.5 ;;
2110                         *) osvers=$tmp;;
2111                         esac
2112                         ;;
2113                 *dc.osx) osname=dcosx
2114                         osvers="$3"
2115                         ;;
2116                 dnix) osname=dnix
2117                         osvers="$3"
2118                         ;;
2119                 domainos) osname=apollo
2120                         osvers="$3"
2121                         ;;
2122                 dgux) osname=dgux 
2123                         osvers="$3"
2124                         ;;
2125                 dynixptx*) osname=dynixptx
2126                         osvers=`echo "$4"|sed 's/^v//'`
2127                         ;;
2128                 freebsd) osname=freebsd 
2129                         osvers="$3" ;;
2130                 genix) osname=genix ;;
2131                 hp*) osname=hpux 
2132                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2133                         ;;
2134                 irix*) osname=irix
2135                         case "$3" in
2136                         4*) osvers=4 ;;
2137                         5*) osvers=5 ;;
2138                         *)      osvers="$3" ;;
2139                         esac
2140                         ;;
2141                 linux) osname=linux
2142                         case "$3" in
2143                         *)      osvers="$3" ;;
2144                         esac
2145                         ;;
2146                 MiNT) osname=mint
2147                         ;;
2148                 netbsd*) osname=netbsd
2149                         osvers="$3"
2150                         ;;
2151                 news-os) osvers="$3"
2152                         case "$3" in
2153                         4*) osname=newsos4 ;;
2154                         *) osname=newsos ;;
2155                         esac
2156                         ;;
2157                 bsd386) osname=bsd386
2158                         osvers=`$uname -r`
2159                         ;;
2160                 POSIX-BC | posix-bc ) osname=posix-bc
2161                         osvers="$3"
2162                         ;;
2163                 powerux | power_ux | powermax_os | powermaxos | \
2164                 powerunix | power_unix) osname=powerux
2165                         osvers="$3"
2166                         ;;
2167                 next*) osname=next ;;
2168                 solaris) osname=solaris
2169                         case "$3" in
2170                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2171                         *)      osvers="$3" ;;
2172                         esac
2173                         ;;
2174                 sunos) osname=sunos
2175                         case "$3" in
2176                         5*) osname=solaris
2177                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2178                         *)      osvers="$3" ;;
2179                         esac
2180                         ;;
2181                 titanos) osname=titanos
2182                         case "$3" in
2183                         1*) osvers=1 ;;
2184                         2*) osvers=2 ;;
2185                         3*) osvers=3 ;;
2186                         4*) osvers=4 ;;
2187                         *)      osvers="$3" ;;
2188                         esac
2189                         ;;
2190                 ultrix) osname=ultrix
2191                         osvers="$3"
2192                         ;;
2193                 osf1|mls+)      case "$5" in
2194                                 alpha)
2195                                         osname=dec_osf
2196                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2197                                         ;;
2198                         hp*)    osname=hp_osf1  ;;
2199                         mips)   osname=mips_osf1 ;;
2200                         esac
2201                         ;;
2202                 uts) osname=uts 
2203                         osvers="$3"
2204                         ;;
2205                 qnx) osname=qnx
2206                         osvers="$4"
2207                         ;;
2208                 $2) case "$osname" in
2209                         *isc*) ;;
2210                         *freebsd*) ;;
2211                         svr*)
2212                                 : svr4.x or possibly later
2213                                 case "svr$3" in 
2214                                 ${osname}*)
2215                                         osname=svr$3
2216                                         osvers=$4
2217                                         ;;
2218                                 esac
2219                                 case "$osname" in
2220                                 svr4.0)
2221                                         : Check for ESIX
2222                                         if test -f /stand/boot ; then
2223                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2224                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2225                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2226                                                         if test -n "$isesix"; then
2227                                                                 osname=esix4
2228                                                         fi
2229                                                 fi
2230                                         fi
2231                                         ;;
2232                                 esac
2233                                 ;;
2234                         *)      if test -f /etc/systemid; then
2235                                         osname=sco
2236                                         set `echo $3 | $sed 's/\./ /g'` $4
2237                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2238                                                 osvers=$1.$2.$3
2239                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2240                                                 osvers=$1.$2
2241                                         elif $test -f $src/hints/sco_$1.sh; then
2242                                                 osvers=$1
2243                                         fi
2244                                 else
2245                                         case "$osname" in
2246                                         '') : Still unknown.  Probably a generic Sys V.
2247                                                 osname="sysv"
2248                                                 osvers="$3"
2249                                                 ;;
2250                                         esac
2251                                 fi
2252                                 ;;
2253                         esac
2254                         ;;
2255                 *)      case "$osname" in
2256                         '') : Still unknown.  Probably a generic BSD.
2257                                 osname="$1"
2258                                 osvers="$3"
2259                                 ;;
2260                         esac
2261                         ;;
2262                 esac
2263         else
2264                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2265                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2266                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2267                                 osname=news_os
2268                         fi
2269                         $rm -f UU/kernel.what
2270                 elif test -d c:/.; then
2271                         set X $myuname
2272                         osname=os2
2273                         osvers="$5"
2274                 fi
2275         fi
2276         
2277         : Now look for a hint file osname_osvers, unless one has been
2278         : specified already.
2279         case "$hintfile" in
2280         ''|' ')
2281                 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
2282                 : Also try without trailing minor version numbers.
2283                 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2284                 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2285                 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2286                 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
2287                 case "$file" in
2288                 '') dflt=none ;;
2289                 *)  case "$osvers" in
2290                         '') dflt=$file
2291                                 ;;
2292                         *)  if $test -f $src/hints/$file.sh ; then
2293                                         dflt=$file
2294                                 elif $test -f $src/hints/$xfile.sh ; then
2295                                         dflt=$xfile
2296                                 elif $test -f $src/hints/$xxfile.sh ; then
2297                                         dflt=$xxfile
2298                                 elif $test -f $src/hints/$xxxfile.sh ; then
2299                                         dflt=$xxxfile
2300                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2301                                         dflt=$xxxxfile
2302                                 elif $test -f "$src/hints/${osname}.sh" ; then
2303                                         dflt="${osname}"
2304                                 else
2305                                         dflt=none
2306                                 fi
2307                                 ;;
2308                         esac
2309                         ;;
2310                 esac
2311                 if $test -f Policy.sh ; then
2312                         case "$dflt" in
2313                         *Policy*) ;;
2314                         none) dflt="Policy" ;;
2315                         *) dflt="Policy $dflt" ;;
2316                         esac
2317                 fi
2318                 ;;
2319         *)
2320                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2321                 ;;
2322         esac
2323
2324         if $test -f Policy.sh ; then
2325                 $cat <<EOM
2326
2327 There's also a Policy hint file available, which should make the
2328 site-specific (policy) questions easier to answer.
2329 EOM
2330
2331         fi
2332
2333         $cat <<EOM
2334
2335 You may give one or more space-separated answers, or "none" if appropriate.
2336 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2337 is a good thing.  DO NOT give a wrong version.
2338
2339 EOM
2340
2341         rp="Which of these apply, if any?"
2342         . UU/myread
2343         tans=$ans
2344         for file in $tans; do
2345                 if $test X$file = XPolicy -a -f Policy.sh; then
2346                         . Policy.sh
2347                         $cat Policy.sh >> UU/config.sh
2348                 elif $test -f $src/hints/$file.sh; then
2349                         . $src/hints/$file.sh
2350                         $cat $src/hints/$file.sh >> UU/config.sh
2351                 elif $test X$tans = X -o X$tans = Xnone ; then
2352                         : nothing
2353                 else
2354                         : Give one chance to correct a possible typo.
2355                         echo "$file.sh does not exist"
2356                         dflt=$file
2357                         rp="hint to use instead?"
2358                         . UU/myread
2359                         for file in $ans; do
2360                                 if $test -f "$src/hints/$file.sh"; then
2361                                         . $src/hints/$file.sh
2362                                         $cat $src/hints/$file.sh >> UU/config.sh
2363                                 elif $test X$ans = X -o X$ans = Xnone ; then
2364                                         : nothing
2365                                 else
2366                                         echo "$file.sh does not exist -- ignored."
2367                                 fi
2368                         done
2369                 fi
2370         done
2371
2372         hint=recommended
2373         : Remember our hint file for later.
2374         if $test -f "$src/hints/$file.sh" ; then
2375                 hintfile="$file"
2376         else
2377                 hintfile=''
2378         fi
2379 fi
2380 cd UU
2381 ;;
2382 *)
2383         echo " "
2384         echo "Fetching default answers from $config_sh..." >&4
2385         tmp_n="$n"
2386         tmp_c="$c"
2387         cd ..
2388         cp $config_sh config.sh 2>/dev/null
2389         chmod +w config.sh
2390         . ./config.sh
2391         cd UU
2392         cp ../config.sh .
2393         n="$tmp_n"
2394         c="$tmp_c"
2395         hint=previous
2396         ;;
2397 esac
2398 test "$override" && . ./optdef.sh
2399 myuname="$newmyuname"
2400
2401 : Restore computed paths
2402 for file in $loclist $trylist; do
2403         eval $file="\$_$file"
2404 done
2405
2406 cat << EOM
2407
2408 Configure uses the operating system name and version to set some defaults.
2409 The default value is probably right if the name rings a bell. Otherwise,
2410 since spelling matters for me, either accept the default or answer "none"
2411 to leave it blank.
2412
2413 EOM
2414 case "$osname" in
2415         ''|' ')
2416                 case "$hintfile" in
2417                 ''|' '|none) dflt=none ;;
2418                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2419                 esac
2420                 ;;
2421         *) dflt="$osname" ;;
2422 esac
2423 rp="Operating system name?"
2424 . ./myread
2425 case "$ans" in
2426 none)  osname='' ;;
2427 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2428 esac
2429 echo " "
2430 case "$osvers" in
2431         ''|' ')
2432                 case "$hintfile" in
2433                 ''|' '|none) dflt=none ;;
2434                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2435                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2436                         case "$dflt" in
2437                         ''|' ') dflt=none ;;
2438                         esac
2439                         ;;
2440                 esac
2441                 ;;
2442         *) dflt="$osvers" ;;
2443 esac
2444 rp="Operating system version?"
2445 . ./myread
2446 case "$ans" in
2447 none)  osvers='' ;;
2448 *) osvers="$ans" ;;
2449 esac
2450
2451 : who configured the system
2452 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2453 cf_by=`(logname) 2>/dev/null`
2454 case "$cf_by" in
2455 "")
2456         cf_by=`(whoami) 2>/dev/null`
2457         case "$cf_by" in
2458         "") cf_by=unknown ;;
2459         esac ;;
2460 esac
2461
2462 : set up the script used to warn in case of inconsistency
2463 cat <<EOS >whoa
2464 $startsh
2465 EOS
2466 cat <<'EOSC' >>whoa
2467 dflt=y
2468 echo " "
2469 echo "*** WHOA THERE!!! ***" >&4
2470 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2471 rp="    Keep the $hint value?"
2472 . ./myread
2473 case "$ans" in
2474 y) td=$was; tu=$was;;
2475 esac
2476 EOSC
2477
2478 : function used to set $1 to $val
2479 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2480 case "$val$was" in
2481 $define$undef) . ./whoa; eval "$var=\$td";;
2482 $undef$define) . ./whoa; eval "$var=\$tu";;
2483 *) eval "$var=$val";;
2484 esac'
2485
2486 cat <<EOM
2487
2488 Perl can be built to take advantage of threads, on some systems.
2489 To do so, Configure must be run with -Dusethreads.
2490 (See README.threads for details.)
2491 EOM
2492 case "$usethreads" in
2493 $define|true|[yY]*)     dflt='y';;
2494 *) dflt='n';;
2495 esac
2496 rp='Build a threading Perl?'
2497 . ./myread
2498 case "$ans" in
2499 y|Y)    val="$define" ;;     
2500 *)      val="$undef" ;;
2501 esac
2502 set usethreads
2503 eval $setvar 
2504
2505 case "$d_oldpthreads" in
2506 '')     : Configure tests would be welcome here.  For now, assume undef.
2507         val="$undef" ;;
2508 *)      val="$d_oldpthreads" ;;
2509 esac
2510 set d_oldpthreads
2511 eval $setvar
2512
2513
2514 case "$usethreads" in
2515 "$define"|true|[yY]*)
2516 : Look for a hint-file generated 'call-back-unit'.  If the
2517 : user has specified that a threading perl is to be built,
2518 : we may need to set or change some other defaults.
2519         if $test -f usethreads.cbu; then
2520                 . ./usethreads.cbu
2521         fi
2522         case "$osname" in
2523         aix|dec_osf|dos_djgpp|freebsd|hpux|irix|linux|openbsd|os2|solaris|vmesa)
2524                 # Known thread-capable platforms.
2525                 ;;
2526         *)
2527                 cat >&4 <<EOM
2528 $osname is not known to support threads.
2529 Please let perlbug@perl.com know how to do that.
2530
2531 Cannot continue, aborting.
2532 EOM
2533                 exit 1
2534         ;;
2535         esac # $osname
2536     ;;
2537 esac # $usethreads
2538
2539 cat <<EOM
2540
2541 Perl can be built so that multiple Perl interpreters can coexist
2542 within the same Perl executable.  To do so, Configure must be run with
2543 -Dusemultiplicity.
2544
2545 Normally you do not need this and you should answer no.
2546
2547 EOM
2548 case "$usemultiplicity" in
2549 $define|true|[yY]*)     dflt='y';;
2550 *) dflt='n';;
2551 esac
2552 rp='Build Perl for multiplicity?'
2553 . ./myread
2554 case "$ans" in
2555 y|Y)    val="$define" ;;     
2556 *)      val="$undef" ;;
2557 esac
2558 set usemultiplicity
2559 eval $setvar 
2560
2561 cat <<EOM
2562
2563 Perl can be built to take advantage of explicit 64-bit interfaces,
2564 on some systems.  To do so, Configure must be run with -Duse64bits.
2565
2566 If this doesn't make any sense to you, just accept the default 'n'.
2567 EOM
2568 case "$use64bits" in
2569 $define|true|[yY]*)     dflt='y';;
2570 *) dflt='n';;
2571 esac
2572 rp='Try to use explicit 64-bit interfaces, if available?'
2573 . ./myread
2574 case "$ans" in
2575 y|Y) 
2576         val="$define"
2577         ;;     
2578 *)      
2579         val="$undef"
2580         ;;
2581 esac
2582 set use64bits
2583 eval $setvar
2584
2585 case "$archname64" in
2586 '') archname64='' ;;    # not a typo
2587 esac
2588
2589 case "$use64bits" in
2590 "$define"|true|[yY]*)
2591 : Look for a hint-file generated 'call-back-unit'.  If the
2592 : user has specified that a threading perl is to be built,
2593 : we may need to set or change some other defaults.
2594         if $test -f use64bits.cbu; then
2595                 . ./use64bits.cbu
2596         fi
2597         case "$osname" in
2598         dec_osf|hpux|irix|solaris|unicos)
2599                 # Known 64-bit capable platforms.
2600                 ;;
2601         *)
2602                 cat >&4 <<EOM
2603 $osname is not known to support 64-bit interfaces.
2604 Please let perlbug@perl.com know how to do that.
2605
2606 Cannot continue, aborting.
2607 EOM
2608                 exit 1
2609                 ;;
2610         esac
2611         ;;
2612 esac
2613
2614 : determine the architecture name
2615 echo " "
2616 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
2617         tarch=`arch`"-$osname"
2618 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
2619         if uname -m > tmparch 2>&1 ; then
2620                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
2621                         -e 's/$/'"-$osname/" tmparch`
2622         else
2623                 tarch="$osname"
2624         fi
2625         $rm -f tmparch
2626 else
2627         tarch="$osname"
2628 fi
2629 case "$myarchname" in
2630 ''|"$tarch") ;;
2631 *)
2632         echo "(Your architecture name used to be $myarchname.)"
2633         archname=''
2634         ;;
2635 esac
2636 myarchname="$tarch"
2637 case "$archname" in
2638 '') dflt="$tarch";;
2639 *) dflt="$archname";;
2640 esac
2641 rp='What is your architecture name'
2642 . ./myread
2643 archname="$ans"
2644 case "$usethreads" in
2645 $define)
2646         echo "Threads selected." >&4
2647         case "$archname" in
2648         *-thread*) echo "...and architecture name already has -thread." >&4
2649                 ;;
2650         *)      archname="$archname-thread"
2651                 echo "...setting architecture name to $archname." >&4
2652                 ;;
2653         esac
2654         ;;
2655 esac
2656 case "$usemultiplicity" in
2657 $define)
2658         echo "Multiplicity selected." >&4
2659         case "$archname" in
2660         *-multi*) echo "...and architecture name already has -multi." >&4
2661                 ;;
2662         *)      archname="$archname-multi"
2663                 echo "...setting architecture name to $archname." >&4
2664                 ;;
2665         esac
2666         ;;
2667 esac
2668 case "$use64bits" in
2669 $define)
2670         echo "Explicit 64-bitness selected." >&4
2671         case "$archname64" in
2672         '')
2673                 ;;
2674         *)
2675                 case "$archname" in
2676                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
2677                         ;;
2678                 *)      archname="$archname-$archname64"
2679                         echo "...setting architecture name to $archname." >&4
2680                         ;;
2681                 esac
2682                 ;;
2683         esac
2684 esac
2685
2686 : is AFS running?
2687 echo " "
2688 case "$afs" in
2689 $define|true)   afs=true ;;
2690 $undef|false)   afs=false ;;
2691 *)      if test -d /afs; then
2692                 afs=true
2693         else
2694                 afs=false
2695         fi
2696         ;;
2697 esac
2698 if $afs; then
2699         echo "AFS may be running... I'll be extra cautious then..." >&4
2700 else
2701         echo "AFS does not seem to be running..." >&4
2702 fi
2703
2704 : decide how portable to be.  Allow command line overrides.
2705 case "$d_portable" in
2706 "$undef") ;;
2707 *)      d_portable="$define" ;;
2708 esac
2709
2710 : set up shell script to do ~ expansion
2711 cat >filexp <<EOSS
2712 $startsh
2713 : expand filename
2714 case "\$1" in
2715  ~/*|~)
2716         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
2717         ;;
2718  ~*)
2719         if $test -f /bin/csh; then
2720                 /bin/csh -f -c "glob \$1"
2721                 failed=\$?
2722                 echo ""
2723                 exit \$failed
2724         else
2725                 name=\`$expr x\$1 : '..\([^/]*\)'\`
2726                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
2727                 if $test ! -d "\$dir"; then
2728                         me=\`basename \$0\`
2729                         echo "\$me: can't locate home directory for: \$name" >&2
2730                         exit 1
2731                 fi
2732                 case "\$1" in
2733                 */*)
2734                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
2735                         ;;
2736                 *)
2737                         echo \$dir
2738                         ;;
2739                 esac
2740         fi
2741         ;;
2742 *)
2743         echo \$1
2744         ;;
2745 esac
2746 EOSS
2747 chmod +x filexp
2748 $eunicefix filexp
2749
2750 : now set up to get a file name
2751 cat <<EOS >getfile
2752 $startsh
2753 EOS
2754 cat <<'EOSC' >>getfile
2755 tilde=''
2756 fullpath=''
2757 already=''
2758 skip=''
2759 none_ok=''
2760 exp_file=''
2761 nopath_ok=''
2762 orig_rp="$rp"
2763 orig_dflt="$dflt"
2764
2765 case "$fn" in
2766 *\(*)
2767         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
2768         fn=`echo $fn | sed 's/(.*)//'`
2769         ;;
2770 esac
2771
2772 case "$fn" in
2773 *:*)
2774         loc_file=`expr $fn : '.*:\(.*\)'`
2775         fn=`expr $fn : '\(.*\):.*'`
2776         ;;
2777 esac
2778
2779 case "$fn" in
2780 *~*) tilde=true;;
2781 esac
2782 case "$fn" in
2783 */*) fullpath=true;;
2784 esac
2785 case "$fn" in
2786 *+*) skip=true;;
2787 esac
2788 case "$fn" in
2789 *n*) none_ok=true;;
2790 esac
2791 case "$fn" in
2792 *e*) exp_file=true;;
2793 esac
2794 case "$fn" in
2795 *p*) nopath_ok=true;;
2796 esac
2797
2798 case "$fn" in
2799 *f*) type='File';;
2800 *d*) type='Directory';;
2801 *l*) type='Locate';;
2802 esac
2803
2804 what="$type"
2805 case "$what" in
2806 Locate) what='File';;
2807 esac
2808
2809 case "$exp_file" in
2810 '')
2811         case "$d_portable" in
2812         "$define") ;;
2813         *) exp_file=true;;
2814         esac
2815         ;;
2816 esac
2817
2818 cd ..
2819 while test "$type"; do
2820         redo=''
2821         rp="$orig_rp"
2822         dflt="$orig_dflt"
2823         case "$tilde" in
2824         true) rp="$rp (~name ok)";;
2825         esac
2826         . UU/myread
2827         if test -f UU/getfile.ok && \
2828                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
2829         then
2830                 value="$ans"
2831                 ansexp="$ans"
2832                 break
2833         fi
2834         case "$ans" in
2835         none)
2836                 value=''
2837                 ansexp=''
2838                 case "$none_ok" in
2839                 true) type='';;
2840                 esac
2841                 ;;
2842         *)
2843                 case "$tilde" in
2844                 '') value="$ans"
2845                         ansexp="$ans";;
2846                 *)
2847                         value=`UU/filexp $ans`
2848                         case $? in
2849                         0)
2850                                 if test "$ans" != "$value"; then
2851                                         echo "(That expands to $value on this system.)"
2852                                 fi
2853                                 ;;
2854                         *) value="$ans";;
2855                         esac
2856                         ansexp="$value"
2857                         case "$exp_file" in
2858                         '') value="$ans";;
2859                         esac
2860                         ;;
2861                 esac
2862                 case "$fullpath" in
2863                 true)
2864                         case "$ansexp" in
2865                         /*) value="$ansexp" ;;
2866                         *)
2867                                 redo=true
2868                                 case "$already" in
2869                                 true)
2870                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
2871                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
2872                                         ;;
2873                                 *)
2874                                 echo "Please give a full path name, starting with slash." >&4
2875                                         case "$tilde" in
2876                                         true)
2877                                 echo "Note that using ~name is ok provided it expands well." >&4
2878                                                 already=true
2879                                                 ;;
2880                                         esac
2881                                 esac
2882                                 ;;
2883                         esac
2884                         ;;
2885                 esac
2886                 case "$redo" in
2887                 '')
2888                         case "$type" in
2889                         File)
2890                                 if test -f "$ansexp"; then
2891                                         type=''
2892                                 elif test -r "$ansexp" || (test -h "$ansexp") >/dev/null 2>&1
2893                                 then
2894                                         echo "($value is not a plain file, but that's ok.)"
2895                                         type=''
2896                                 fi
2897                                 ;;
2898                         Directory)
2899                                 if test -d "$ansexp"; then
2900                                         type=''
2901                                 fi
2902                                 ;;
2903                         Locate)
2904                                 if test -d "$ansexp"; then
2905                                         echo "(Looking for $loc_file in directory $value.)"
2906                                         value="$value/$loc_file"
2907                                         ansexp="$ansexp/$loc_file"
2908                                 fi
2909                                 if test -f "$ansexp"; then
2910                                         type=''
2911                                 fi
2912                                 case "$nopath_ok" in
2913                                 true)   case "$value" in
2914                                         */*) ;;
2915                                         *)      echo "Assuming $value will be in people's path."
2916                                                 type=''
2917                                                 ;;
2918                                         esac
2919                                         ;;
2920                                 esac
2921                                 ;;
2922                         esac
2923
2924                         case "$skip" in
2925                         true) type='';
2926                         esac
2927
2928                         case "$type" in
2929                         '') ;;
2930                         *)
2931                                 if test "$fastread" = yes; then
2932                                         dflt=y
2933                                 else
2934                                         dflt=n
2935                                 fi
2936                                 rp="$what $value doesn't exist.  Use that name anyway?"
2937                                 . UU/myread
2938                                 dflt=''
2939                                 case "$ans" in
2940                                 y*) type='';;
2941                                 *) echo " ";;
2942                                 esac
2943                                 ;;
2944                         esac
2945                         ;;
2946                 esac
2947                 ;;
2948         esac
2949 done
2950 cd UU
2951 ans="$value"
2952 rp="$orig_rp"
2953 dflt="$orig_dflt"
2954 rm -f getfile.ok
2955 EOSC
2956
2957 : determine root of directory hierarchy where package will be installed.
2958 case "$prefix" in
2959 '')
2960         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
2961         ;;
2962 *)
2963         dflt="$prefix"
2964         ;;
2965 esac
2966 $cat <<EOM
2967
2968 By default, $package will be installed in $dflt/bin, manual
2969 pages under $dflt/man, etc..., i.e. with $dflt as prefix for
2970 all installation directories. Typically set to /usr/local, but you
2971 may choose /usr if you wish to install $package among your system
2972 binaries. If you wish to have binaries under /bin but manual pages
2973 under /usr/local/man, that's ok: you will be prompted separately
2974 for each of the installation directories, the prefix being only used
2975 to set the defaults.
2976
2977 EOM
2978 fn=d~
2979 rp='Installation prefix to use?'
2980 . ./getfile
2981 oldprefix=''
2982 case "$prefix" in
2983 '') ;;
2984 *)
2985         case "$ans" in
2986         "$prefix") ;;
2987         *) oldprefix="$prefix";;
2988         esac
2989         ;;
2990 esac
2991 prefix="$ans"
2992 prefixexp="$ansexp"
2993
2994 : set the prefixit variable, to compute a suitable default value
2995 prefixit='case "$3" in
2996 ""|none)
2997         case "$oldprefix" in
2998         "") eval "$1=\"\$$2\"";;
2999         *)
3000                 case "$3" in
3001                 "") eval "$1=";;
3002                 none)
3003                         eval "tp=\"\$$2\"";
3004                         case "$tp" in
3005                         ""|" ") eval "$1=\"\$$2\"";;
3006                         *) eval "$1=";;
3007                         esac;;
3008                 esac;;
3009         esac;;
3010 *)
3011         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
3012         case "$tp" in
3013         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
3014         /*-$oldprefix/*|\~*-$oldprefix/*)
3015                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
3016         *) eval "$1=\"\$$2\"";;
3017         esac;;
3018 esac'
3019
3020 : set the base revision
3021 baserev=5.0
3022
3023 : get the patchlevel
3024 echo " "
3025 echo "Getting the current patchlevel..." >&4
3026 if $test -r $rsrc/patchlevel.h;then
3027         patchlevel=`awk '/define[       ]+PATCHLEVEL/ {print $3}' $rsrc/patchlevel.h`
3028         subversion=`awk '/define[       ]+SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
3029 else
3030         patchlevel=0
3031         subversion=0
3032 fi
3033 $echo $n "(You have $package" $c
3034 case "$package" in
3035 "*$baserev")    ;;
3036 *)              $echo $n " $baserev" $c ;;
3037 esac
3038 $echo $n " patchlevel $patchlevel" $c
3039 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
3040 echo ".)"
3041
3042 if test 0 -eq "$subversion"; then
3043         version=`LC_ALL=C; export LC_ALL; \
3044                  echo $baserev $patchlevel | \
3045                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3046 else
3047         version=`LC_ALL=C; export LC_ALL; \
3048                  echo $baserev $patchlevel $subversion | \
3049                  $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
3050 fi
3051 : Figure out perl API version.  Perhaps this should be in patchlevel.h
3052 if test "$subversion" -lt 50; then
3053         apiversion=`LC_ALL=C; export LC_ALL; \
3054                  LANGUAGE=C; export LANGUAGE; \
3055                  echo $baserev $patchlevel | \
3056                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3057 else
3058         apiversion="$version"
3059 fi
3060
3061 : determine where private library files go
3062 : Usual default is /usr/local/lib/perl5/$version.
3063 : Also allow things like /opt/perl/lib/$version, since 
3064 : /opt/perl/lib/perl5... would be redundant.
3065 case "$prefix" in
3066 *perl*) set dflt privlib lib/$version ;;
3067 *)       set dflt privlib lib/$package/$version ;;
3068 esac
3069 eval $prefixit
3070 $cat <<EOM
3071
3072 There are some auxiliary files for $package that need to be put into a
3073 private library directory that is accessible by everyone.
3074
3075 EOM
3076 fn=d~+
3077 rp='Pathname where the private library files will reside?'
3078 . ./getfile
3079 if $test "X$privlibexp" != "X$ansexp"; then
3080         installprivlib=''
3081 fi
3082 privlib="$ans"
3083 privlibexp="$ansexp"
3084 if $afs; then
3085         $cat <<EOM
3086
3087 Since you are running AFS, I need to distinguish the directory in which
3088 private files reside from the directory in which they are installed (and from
3089 which they are presumably copied to the former directory by occult means).
3090
3091 EOM
3092         case "$installprivlib" in
3093         '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
3094         *) dflt="$installprivlib";;
3095         esac
3096         fn=de~
3097         rp='Where will private files be installed?'
3098         . ./getfile
3099         installprivlib="$ans"
3100 else
3101         installprivlib="$privlibexp"
3102 fi
3103
3104 : set the prefixup variable, to restore leading tilda escape
3105 prefixup='case "$prefixexp" in
3106 "$prefix") ;;
3107 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
3108 esac'
3109
3110 : determine where public architecture dependent libraries go
3111 set archlib archlib
3112 eval $prefixit
3113 : privlib default is /usr/local/lib/$package/$version
3114 : archlib default is /usr/local/lib/$package/$version/$archname
3115 : privlib may have an optional trailing /share.
3116 tdflt=`echo $privlib | $sed 's,/share$,,'`
3117 tdflt=$tdflt/$archname
3118 case "$archlib" in
3119 '')     dflt=$tdflt
3120         ;;
3121 *)      dflt="$archlib"
3122     ;;
3123 esac
3124 cat <<EOM
3125
3126 $spackage contains architecture-dependent library files.  If you are
3127 sharing libraries in a heterogeneous environment, you might store
3128 these files in a separate location.  Otherwise, you can just include
3129 them with the rest of the public library files.
3130
3131 EOM
3132 fn=d+~
3133 rp='Where do you want to put the public architecture-dependent libraries?'
3134 . ./getfile
3135 archlib="$ans"
3136 archlibexp="$ansexp"
3137
3138 if $afs; then
3139         $cat <<EOM
3140
3141 Since you are running AFS, I need to distinguish the directory in
3142 which architecture-dependent library files reside from the directory
3143 in which they are installed (and from which they are presumably copied
3144 to the former directory by occult means).
3145
3146 EOM
3147         case "$installarchlib" in
3148         '') dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;;
3149         *) dflt="$installarchlib";;
3150         esac
3151         fn=de~
3152         rp='Where will architecture-dependent library files be installed?'
3153         . ./getfile
3154         installarchlib="$ans"
3155 else
3156         installarchlib="$archlibexp"
3157 fi
3158 if $test X"$archlib" = X"$privlib"; then
3159         d_archlib="$undef"
3160 else
3161         d_archlib="$define"
3162 fi
3163
3164 : make some quick guesses about what we are up against
3165 echo " "
3166 $echo $n "Hmm...  $c"
3167 echo exit 1 >bsd
3168 echo exit 1 >usg
3169 echo exit 1 >v7
3170 echo exit 1 >osf1
3171 echo exit 1 >eunice
3172 echo exit 1 >xenix
3173 echo exit 1 >venix
3174 echo exit 1 >os2
3175 d_bsd="$undef"
3176 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3177 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3178 then
3179         echo "Looks kind of like an OSF/1 system, but we'll see..."
3180         echo exit 0 >osf1
3181 elif test `echo abc | tr a-z A-Z` = Abc ; then
3182         xxx=`./loc addbib blurfl $pth`
3183         if $test -f $xxx; then
3184         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3185                 echo exit 0 >bsd
3186                 echo exit 0 >usg
3187         else
3188                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3189                         echo "Looks kind of like an extended USG system, but we'll see..."
3190                 else
3191                         echo "Looks kind of like a USG system, but we'll see..."
3192                 fi
3193                 echo exit 0 >usg
3194         fi
3195 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3196         echo "Looks kind of like a BSD system, but we'll see..."
3197         d_bsd="$define"
3198         echo exit 0 >bsd
3199 else
3200         echo "Looks kind of like a Version 7 system, but we'll see..."
3201         echo exit 0 >v7
3202 fi
3203 case "$eunicefix" in
3204 *unixtovms*)
3205         $cat <<'EOI'
3206 There is, however, a strange, musty smell in the air that reminds me of
3207 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3208 EOI
3209         echo exit 0 >eunice
3210         d_eunice="$define"
3211 : it so happens the Eunice I know will not run shell scripts in Unix format
3212         ;;
3213 *)
3214         echo " "
3215         echo "Congratulations.  You aren't running Eunice."
3216         d_eunice="$undef"
3217         ;;
3218 esac
3219 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3220 case "$p_" in
3221 :) ;;
3222 *)
3223         $cat <<'EOI'
3224 I have the feeling something is not exactly right, however...don't tell me...
3225 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3226 EOI
3227         echo exit 0 >os2
3228         ;;
3229 esac
3230 if test -f /xenix; then
3231         echo "Actually, this looks more like a XENIX system..."
3232         echo exit 0 >xenix
3233         d_xenix="$define"
3234 else
3235         echo " "
3236         echo "It's not Xenix..."
3237         d_xenix="$undef"
3238 fi
3239 chmod +x xenix
3240 $eunicefix xenix
3241 if test -f /venix; then
3242         echo "Actually, this looks more like a VENIX system..."
3243         echo exit 0 >venix
3244 else
3245         echo " "
3246         if ./xenix; then
3247                 : null
3248         else
3249                 echo "Nor is it Venix..."
3250         fi
3251 fi
3252 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3253 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3254 $rm -f foo
3255
3256 : see if setuid scripts can be secure
3257 $cat <<EOM
3258
3259 Some kernels have a bug that prevents setuid #! scripts from being
3260 secure.  Some sites have disabled setuid #! scripts because of this.
3261
3262 First let's decide if your kernel supports secure setuid #! scripts.
3263 (If setuid #! scripts would be secure but have been disabled anyway,
3264 don't say that they are secure if asked.)
3265
3266 EOM
3267
3268 val="$undef"
3269 if $test -d /dev/fd; then
3270         echo "#!$ls" >reflect
3271         chmod +x,u+s reflect
3272         ./reflect >flect 2>&1
3273         if $contains "/dev/fd" flect >/dev/null; then
3274                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
3275                 val="$define"
3276         else
3277                 $cat <<EOM
3278 If you are not sure if they are secure, I can check but I'll need a
3279 username and password different from the one you are using right now.
3280 If you don't have such a username or don't want me to test, simply
3281 enter 'none'.
3282
3283 EOM
3284                 rp='Other username to test security of setuid scripts with?'
3285                 dflt='none'
3286                 . ./myread
3287                 case "$ans" in
3288                 n|none)
3289                         case "$d_suidsafe" in
3290                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
3291                                 dflt=n;;
3292                         "$undef")
3293                                 echo "Well, the $hint value is *not* secure." >&4
3294                                 dflt=n;;
3295                         *)      echo "Well, the $hint value *is* secure." >&4
3296                                 dflt=y;;
3297                         esac
3298                         ;;
3299                 *)
3300                         $rm -f reflect flect
3301                         echo "#!$ls" >reflect
3302                         chmod +x,u+s reflect
3303                         echo >flect
3304                         chmod a+w flect
3305                         echo '"su" will (probably) prompt you for '"$ans's password."
3306                         su $ans -c './reflect >flect'
3307                         if $contains "/dev/fd" flect >/dev/null; then
3308                                 echo "Okay, it looks like setuid scripts are secure." >&4
3309                                 dflt=y
3310                         else
3311                                 echo "I don't think setuid scripts are secure." >&4
3312                                 dflt=n
3313                         fi
3314                         ;;
3315                 esac
3316                 rp='Does your kernel have *secure* setuid scripts?'
3317                 . ./myread
3318                 case "$ans" in
3319                 [yY]*)  val="$define";;
3320                 *)      val="$undef";;
3321                 esac
3322         fi
3323 else
3324         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
3325         echo "(That's for file descriptors, not floppy disks.)"
3326         val="$undef"
3327 fi
3328 set d_suidsafe
3329 eval $setvar
3330
3331 $rm -f reflect flect
3332
3333 : now see if they want to do setuid emulation
3334 echo " "
3335 val="$undef"
3336 case "$d_suidsafe" in
3337 "$define")
3338         val="$undef"
3339         echo "No need to emulate SUID scripts since they are secure here." >& 4
3340         ;;
3341 *)
3342         $cat <<EOM
3343 Some systems have disabled setuid scripts, especially systems where
3344 setuid scripts cannot be secure.  On systems where setuid scripts have
3345 been disabled, the setuid/setgid bits on scripts are currently
3346 useless.  It is possible for $package to detect those bits and emulate
3347 setuid/setgid in a secure fashion.  This emulation will only work if
3348 setuid scripts have been disabled in your kernel.
3349
3350 EOM
3351         case "$d_dosuid" in
3352         "$define") dflt=y ;;
3353         *) dflt=n ;;
3354         esac
3355         rp="Do you want to do setuid/setgid emulation?"
3356         . ./myread
3357         case "$ans" in
3358         [yY]*)  val="$define";;
3359         *)      val="$undef";;
3360         esac
3361         ;;
3362 esac
3363 set d_dosuid
3364 eval $setvar
3365
3366 : determine where manual pages are on this system
3367 echo " "
3368 case "$sysman" in
3369 '') 
3370         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
3371         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
3372         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
3373         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
3374         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
3375         sysman=`./loc . /usr/man/man1 $syspath`
3376         ;;
3377 esac
3378 if $test -d "$sysman"; then
3379         echo "System manual is in $sysman." >&4
3380 else
3381         echo "Could not find manual pages in source form." >&4
3382 fi
3383
3384 : see what memory models we can support
3385 case "$models" in
3386 '')
3387         $cat >pdp11.c <<'EOP'
3388 int main() {
3389 #ifdef pdp11
3390         exit(0);
3391 #else
3392         exit(1);
3393 #endif
3394 }
3395 EOP
3396         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
3397         if $test -f pdp11 && ./pdp11 2>/dev/null; then
3398                 dflt='unsplit split'
3399         else
3400                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
3401                 case "$tans" in
3402                 X) dflt='none';;
3403                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
3404                                 dflt='small'
3405                         else
3406                                 dflt=''
3407                         fi
3408                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
3409                                 dflt="$dflt medium"
3410                         fi
3411                         if $test -d /lib/large || $test -d /usr/lib/large; then
3412                                 dflt="$dflt large"
3413                         fi
3414                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
3415                                 dflt="$dflt huge"
3416                         fi
3417                 esac
3418         fi;;
3419 *) dflt="$models";;
3420 esac
3421 $cat <<EOM
3422  
3423 Some systems have different model sizes.  On most systems they are called
3424 small, medium, large, and huge.  On the PDP11 they are called unsplit and
3425 split.  If your system doesn't support different memory models, say "none".
3426 If you wish to force everything to one memory model, say "none" here and
3427 put the appropriate flags later when it asks you for other cc and ld flags.
3428 Venix systems may wish to put "none" and let the compiler figure things out.
3429 (In the following question multiple model names should be space separated.)
3430
3431 The default for most systems is "none".
3432
3433 EOM
3434 rp="Which memory models are supported?"
3435 . ./myread
3436 models="$ans"
3437
3438 case "$models" in
3439 none)
3440         small=''
3441         medium=''
3442         large=''
3443         huge=''
3444         unsplit=''
3445         split=''
3446         ;;
3447 *split)
3448         case "$split" in
3449         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
3450                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
3451                         dflt='-i'
3452                 else
3453                         dflt='none'
3454                 fi;;
3455         *) dflt="$split";;
3456         esac
3457         rp="What flag indicates separate I and D space?"
3458         . ./myread
3459         tans="$ans"
3460         case "$tans" in
3461         none) tans='';;
3462         esac
3463         split="$tans"
3464         unsplit='';;
3465 *large*|*small*|*medium*|*huge*)
3466         case "$models" in
3467         *large*)
3468                 case "$large" in
3469                 '') dflt='-Ml';;
3470                 *) dflt="$large";;
3471                 esac
3472         rp="What flag indicates large model?"
3473         . ./myread
3474         tans="$ans"
3475         case "$tans" in
3476         none) tans='';
3477         esac
3478         large="$tans";;
3479         *) large='';;
3480         esac
3481         case "$models" in
3482         *huge*) case "$huge" in
3483                 '') dflt='-Mh';;
3484                 *) dflt="$huge";;
3485                 esac
3486                 rp="What flag indicates huge model?"
3487                 . ./myread
3488                 tans="$ans"
3489                 case "$tans" in
3490                 none) tans='';
3491                 esac
3492                 huge="$tans";;
3493         *) huge="$large";;
3494         esac
3495         case "$models" in
3496         *medium*) case "$medium" in
3497                 '') dflt='-Mm';;
3498                 *) dflt="$medium";;
3499                 esac
3500                 rp="What flag indicates medium model?"
3501                 . ./myread
3502                 tans="$ans"
3503                 case "$tans" in
3504                 none) tans='';
3505                 esac
3506                 medium="$tans";;
3507         *) medium="$large";;
3508         esac
3509         case "$models" in
3510         *small*) case "$small" in
3511                 '') dflt='none';;
3512                 *) dflt="$small";;
3513                 esac
3514                 rp="What flag indicates small model?"
3515                 . ./myread
3516                 tans="$ans"
3517                 case "$tans" in
3518                 none) tans='';
3519                 esac
3520                 small="$tans";;
3521         *) small='';;
3522         esac
3523         ;;
3524 *)
3525         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
3526         ;;
3527 esac
3528 $rm -f pdp11.* pdp11
3529
3530 : see if we need a special compiler
3531 echo " "
3532 if ./usg; then
3533         case "$cc" in
3534         '') case "$Mcc" in
3535                 /*) dflt='Mcc';;
3536                 *) case "$large" in
3537                         -M*) dflt='cc';;
3538                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3539                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3540                                                 dflt='cc'
3541                                         else
3542                                                 dflt='cc -M'
3543                                         fi
3544                                 else
3545                                         dflt='cc'
3546                                 fi;;
3547                         esac;;
3548                 esac;;
3549         *)  dflt="$cc";;
3550         esac
3551         case "$dflt" in
3552         *M*)    $cat <<'EOM'
3553 On some older systems the default C compiler will not resolve multiple global
3554 references that happen to have the same name.  On some such systems the "Mcc"
3555 command may be used to force these to be resolved.  On other systems a "cc -M"
3556 command is required.  (Note that the -M flag on other systems indicates a
3557 memory model to use!) If you have the Gnu C compiler, you might wish to use
3558 that instead.
3559
3560 EOM
3561         ;;
3562         esac
3563         rp="Use which C compiler?"
3564         . ./myread
3565         cc="$ans"
3566 else
3567         case "$cc" in
3568         '') dflt=cc;;
3569         *) dflt="$cc";;
3570         esac
3571         rp="Use which C compiler?"
3572         . ./myread
3573         cc="$ans"
3574 fi
3575 : Look for a hint-file generated 'call-back-unit'.  Now that the
3576 : user has specified the compiler, we may need to set or change some
3577 : other defaults.
3578 if $test -f cc.cbu; then
3579     . ./cc.cbu
3580 fi
3581 echo " "
3582 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3583 $cat >gccvers.c <<EOM
3584 #include <stdio.h>
3585 int main() {
3586 #ifdef __GNUC__
3587 #ifdef __VERSION__
3588         printf("%s\n", __VERSION__);
3589 #else
3590         printf("%s\n", "1");
3591 #endif
3592 #endif
3593         exit(0);
3594 }
3595 EOM
3596 if $cc -o gccvers gccvers.c >/dev/null 2>&1; then
3597         gccversion=`./gccvers`
3598         case "$gccversion" in
3599         '') echo "You are not using GNU cc." ;;
3600         *)  echo "You are using GNU cc $gccversion." ;;
3601         esac
3602 else
3603         echo " "
3604         echo "*** WHOA THERE!!! ***" >&4
3605         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3606         case "$knowitall" in
3607         '')
3608         echo "    You'd better start hunting for one and let me know about it." >&4
3609                 exit 1
3610                 ;;
3611         esac
3612 fi
3613 $rm -f gccvers*
3614 case "$gccversion" in
3615 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3616 esac
3617
3618 : What should the include directory be ?
3619 echo " "
3620 $echo $n "Hmm...  $c"
3621 dflt='/usr/include'
3622 incpath=''
3623 mips_type=''
3624 if $test -f /bin/mips && /bin/mips; then
3625         echo "Looks like a MIPS system..."
3626         $cat >usr.c <<'EOCP'
3627 #ifdef SYSTYPE_BSD43
3628 /bsd43
3629 #endif
3630 EOCP
3631         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3632                 dflt='/bsd43/usr/include'
3633                 incpath='/bsd43'
3634                 mips_type='BSD 4.3'
3635         else
3636                 mips_type='System V'
3637         fi
3638         $rm -f usr.c usr.out
3639         echo "and you're compiling with the $mips_type compiler and libraries."
3640         xxx_prompt=y
3641         echo "exit 0" >mips
3642 else
3643         echo "Doesn't look like a MIPS system."
3644         xxx_prompt=n
3645         echo "exit 1" >mips
3646 fi
3647 chmod +x mips
3648 $eunicefix mips
3649 case "$usrinc" in
3650 '') ;;
3651 *) dflt="$usrinc";;
3652 esac
3653 case "$xxx_prompt" in
3654 y)      fn=d/
3655         echo " "
3656         rp='Where are the include files you want to use?'
3657         . ./getfile
3658         usrinc="$ans"
3659         ;;
3660 *)      usrinc="$dflt"
3661         ;;
3662 esac
3663
3664 : see how we invoke the C preprocessor
3665 echo " "
3666 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3667 cat <<'EOT' >testcpp.c
3668 #define ABC abc
3669 #define XYZ xyz
3670 ABC.XYZ
3671 EOT
3672 cd ..
3673 if test ! -f cppstdin; then
3674         echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3675 else
3676         echo "Keeping your $hint cppstdin wrapper."
3677 fi
3678 chmod 755 cppstdin
3679 wrapper=`pwd`/cppstdin
3680 ok='false'
3681 cd UU
3682
3683 if $test "X$cppstdin" != "X" && \
3684         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3685         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3686 then
3687         echo "You used to use $cppstdin $cppminus so we'll use that again."
3688         case "$cpprun" in
3689         '') echo "But let's see if we can live without a wrapper..." ;;
3690         *)
3691                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3692                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3693                 then
3694                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3695                         ok='true'
3696                 else
3697                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3698                 fi
3699                 ;;
3700         esac
3701 else
3702         case "$cppstdin" in
3703         '') ;;
3704         *)
3705                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3706                 ;;
3707         esac
3708 fi
3709
3710 if $ok; then
3711         : nothing
3712 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3713         $cc -E <testcpp.c >testcpp.out 2>&1; \
3714         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3715         echo "Yup, it does."
3716         x_cpp="$cc -E"
3717         x_minus='';
3718 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3719         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3720         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3721         echo "Yup, it does."
3722         x_cpp="$cc -E"
3723         x_minus='-';
3724 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3725         $cc -P <testcpp.c >testcpp.out 2>&1; \
3726         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3727         echo "Yipee, that works!"
3728         x_cpp="$cc -P"
3729         x_minus='';
3730 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3731         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3732         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3733         echo "At long last!"
3734         x_cpp="$cc -P"
3735         x_minus='-';
3736 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3737         $cpp <testcpp.c >testcpp.out 2>&1; \
3738         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3739         echo "It works!"
3740         x_cpp="$cpp"
3741         x_minus='';
3742 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3743         $cpp - <testcpp.c >testcpp.out 2>&1; \
3744         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3745         echo "Hooray, it works!  I was beginning to wonder."
3746         x_cpp="$cpp"
3747         x_minus='-';
3748 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3749         $wrapper <testcpp.c >testcpp.out 2>&1; \
3750         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3751         x_cpp="$wrapper"
3752         x_minus=''
3753         echo "Eureka!"
3754 else
3755         dflt=''
3756         rp="No dice.  I can't find a C preprocessor.  Name one:"
3757         . ./myread
3758         x_cpp="$ans"
3759         x_minus=''
3760         $x_cpp <testcpp.c >testcpp.out 2>&1
3761         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3762                 echo "OK, that will do." >&4
3763         else
3764 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3765                 exit 1
3766         fi
3767 fi
3768
3769 case "$ok" in
3770 false)
3771         cppstdin="$x_cpp"
3772         cppminus="$x_minus"
3773         cpprun="$x_cpp"
3774         cpplast="$x_minus"
3775         set X $x_cpp
3776         shift
3777         case "$1" in
3778         "$cpp")
3779                 echo "Perhaps can we force $cc -E using a wrapper..."
3780                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3781                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3782                 then
3783                         echo "Yup, we can."
3784                         cppstdin="$wrapper"
3785                         cppminus='';
3786                 else
3787                         echo "Nope, we'll have to live without it..."
3788                 fi
3789                 ;;
3790         esac
3791         case "$cpprun" in
3792         "$wrapper")
3793                 cpprun=''
3794                 cpplast=''
3795                 ;;
3796         esac
3797         ;;
3798 esac
3799
3800 case "$cppstdin" in
3801 "$wrapper"|'cppstdin') ;;
3802 *) $rm -f $wrapper;;
3803 esac
3804 $rm -f testcpp.c testcpp.out
3805
3806 : Set private lib path
3807 case "$plibpth" in
3808 '') if ./mips; then
3809                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3810         fi;;
3811 esac
3812 case "$libpth" in
3813 ' ') dlist='';;
3814 '') dlist="$loclibpth $plibpth $glibpth";;
3815 *) dlist="$libpth";;
3816 esac
3817
3818 : Now check and see which directories actually exist, avoiding duplicates
3819 libpth=''
3820 for xxx in $dlist
3821 do
3822     if $test -d $xxx; then
3823                 case " $libpth " in
3824                 *" $xxx "*) ;;
3825                 *) libpth="$libpth $xxx";;
3826                 esac
3827     fi
3828 done
3829 $cat <<'EOM'
3830
3831 Some systems have incompatible or broken versions of libraries.  Among
3832 the directories listed in the question below, please remove any you
3833 know not to be holding relevant libraries, and add any that are needed.
3834 Say "none" for none.
3835
3836 EOM
3837 case "$libpth" in
3838 '') dflt='none';;
3839 *)
3840         set X $libpth
3841         shift
3842         dflt=${1+"$@"}
3843         ;;
3844 esac
3845 rp="Directories to use for library searches?"
3846 . ./myread
3847 case "$ans" in
3848 none) libpth=' ';;
3849 *) libpth="$ans";;
3850 esac
3851
3852 : compute shared library extension
3853 case "$so" in
3854 '')
3855         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3856                 dflt='sl'
3857         else
3858                 dflt='so'
3859         fi
3860         ;;
3861 *) dflt="$so";;
3862 esac
3863 $cat <<EOM
3864
3865 On some systems, shared libraries may be available.  Answer 'none' if
3866 you want to suppress searching of shared libraries for the remaining
3867 of this configuration.
3868
3869 EOM
3870 rp='What is the file extension used for shared libraries?'
3871 . ./myread
3872 so="$ans"
3873
3874 : Define several unixisms.
3875 : Hints files or command line option can be used to override them.
3876 : The convoluted testing is in case hints files set either the old
3877 : or the new name.
3878 case "$_exe" in
3879 '')     case "$exe_ext" in
3880     '') ;;
3881         *)      _exe="$exe_ext" ;;
3882         esac
3883         ;;
3884 esac
3885 case "$_a" in
3886 '')     case "$lib_ext" in
3887     '') _a='.a';;
3888         *)      _a="$lib_ext" ;;
3889         esac
3890         ;;
3891 esac
3892 case "$_o" in
3893 '') case "$obj_ext" in
3894         '')     _o='.o';;
3895         *)      _o="$obj_ext";;
3896         esac
3897         ;;
3898 esac
3899 case "$p_" in
3900 '') case "$path_sep" in
3901         '')     p_=':';;
3902         *)      p_="$path_sep";;
3903         esac
3904         ;;
3905 esac
3906 exe_ext=$_exe
3907 lib_ext=$_a
3908 obj_ext=$_o
3909 path_sep=$p_
3910
3911 : Which makefile gets called first.  This is used by make depend.
3912 case "$firstmakefile" in
3913 '') firstmakefile='makefile';;
3914 esac
3915
3916 : Looking for optional libraries
3917 echo " "
3918 echo "Checking for optional libraries..." >&4
3919 case "$libs" in
3920 ' '|'') dflt='';;
3921 *) dflt="$libs";;
3922 esac
3923 case "$libswanted" in
3924 '') libswanted='c_s';;
3925 esac
3926 for thislib in $libswanted; do
3927         
3928         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
3929                 $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3930                 echo "Found -l$thislib (shared)."
3931                 case " $dflt " in
3932                 *"-l$thislib "*);;
3933                 *) dflt="$dflt -l$thislib";;
3934                 esac
3935         elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
3936                 echo "Found -l$thislib (shared)."
3937                 case " $dflt " in
3938                 *"-l$thislib "*);;
3939                 *) dflt="$dflt -l$thislib";;
3940                 esac
3941         elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
3942                 echo "Found -l$thislib."
3943                 case " $dflt " in
3944                 *"-l$thislib "*);;
3945                 *) dflt="$dflt -l$thislib";;
3946                 esac
3947         elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
3948                 echo "Found -l$thislib."
3949                 case " $dflt " in
3950                 *"-l$thislib "*);;
3951                 *) dflt="$dflt -l$thislib";;
3952                 esac
3953         elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
3954                 echo "Found -l${thislib}_s."
3955                 case " $dflt " in
3956                 *"-l$thislib "*);;
3957                 *) dflt="$dflt -l${thislib}_s";;
3958                 esac
3959         elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
3960                 echo "Found -l$thislib."
3961                 case " $dflt " in
3962                 *"-l$thislib "*);;
3963                 *) dflt="$dflt -l$thislib";;
3964                 esac
3965         else
3966                 echo "No -l$thislib."
3967         fi
3968 done
3969 set X $dflt
3970 shift
3971 dflt="$*"
3972 case "$libs" in
3973 '') dflt="$dflt";;
3974 *) dflt="$libs";;
3975 esac
3976 case "$dflt" in
3977 ' '|'') dflt='none';;
3978 esac
3979
3980 $cat <<EOM
3981  
3982 Some versions of Unix support shared libraries, which make executables smaller
3983 but make load time slightly longer.
3984
3985 On some systems, mostly System V Release 3's, the shared library is included
3986 by putting the option "-lc_s" as the last thing on the cc command line when
3987 linking.  Other systems use shared libraries by default.  There may be other
3988 libraries needed to compile $package on your machine as well.  If your system
3989 needs the "-lc_s" option, include it here.  Include any other special libraries
3990 here as well.  Say "none" for none.
3991 EOM
3992
3993 echo " "
3994 rp="Any additional libraries?"
3995 . ./myread
3996 case "$ans" in
3997 none) libs=' ';;
3998 *) libs="$ans";;
3999 esac
4000
4001 : determine optimize, if desired, or use for debug flag also
4002 case "$optimize" in
4003 ' '|$undef) dflt='none';;
4004 '') dflt='-O';;
4005 *) dflt="$optimize";;
4006 esac
4007 $cat <<EOH
4008
4009 Some C compilers have problems with their optimizers.  By default, $package
4010 compiles with the -O flag to use the optimizer.  Alternately, you might want
4011 to use the symbolic debugger, which uses the -g flag (on traditional Unix
4012 systems).  Either flag can be specified here.  To use neither flag, specify
4013 the word "none".
4014
4015 EOH
4016 rp="What optimizer/debugger flag should be used?"
4017 . ./myread
4018 optimize="$ans"
4019 case "$optimize" in
4020 'none') optimize=" ";;
4021 esac
4022
4023 dflt=''
4024 : We will not override a previous value, but we might want to
4025 : augment a hint file
4026 case "$hint" in
4027 none|recommended)
4028         case "$gccversion" in
4029         1*) dflt='-fpcc-struct-return' ;;
4030         esac
4031         case "$optimize" in
4032         *-g*) dflt="$dflt -DDEBUGGING";;
4033         esac
4034         case "$gccversion" in
4035         2*) if test -d /etc/conf/kconfig.d &&
4036                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4037                 then
4038                         dflt="$dflt -posix"
4039                 fi
4040                 ;;
4041         esac
4042         ;;
4043 esac
4044
4045 case "$mips_type" in
4046 *BSD*|'') inclwanted="$locincpth $usrinc";;
4047 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4048 esac
4049 for thisincl in $inclwanted; do
4050         if $test -d $thisincl; then
4051                 if $test x$thisincl != x$usrinc; then
4052                         case "$dflt" in
4053                         *$thisincl*);;
4054                         *) dflt="$dflt -I$thisincl";;
4055                         esac
4056                 fi
4057         fi
4058 done
4059
4060 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4061         xxx=true;
4062 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4063         xxx=true;
4064 else
4065         xxx=false;
4066 fi;
4067 if $xxx; then
4068         case "$dflt" in
4069         *$2*);;
4070         *) dflt="$dflt -D$2";;
4071         esac;
4072 fi'
4073
4074 if ./osf1; then
4075         set signal.h __LANGUAGE_C__; eval $inctest
4076 else
4077         set signal.h LANGUAGE_C; eval $inctest
4078 fi
4079
4080 case "$hint" in
4081 none|recommended) dflt="$ccflags $dflt" ;;
4082 *) dflt="$ccflags";;
4083 esac
4084
4085 case "$dflt" in
4086 ''|' ') dflt=none;;
4087 esac
4088 $cat <<EOH
4089
4090 Your C compiler may want other flags.  For this question you should include
4091 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4092 but you should NOT include libraries or ld flags like -lwhatever.  If you
4093 want $package to honor its debug switch, you should include -DDEBUGGING here.
4094 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4095
4096 To use no flags, specify the word "none".
4097
4098 EOH
4099 set X $dflt
4100 shift
4101 dflt=${1+"$@"}
4102 rp="Any additional cc flags?"
4103 . ./myread
4104 case "$ans" in
4105 none) ccflags='';;
4106 *) ccflags="$ans";;
4107 esac
4108
4109 : the following weeds options from ccflags that are of no interest to cpp
4110 cppflags="$ccflags"
4111 case "$gccversion" in
4112 1*) cppflags="$cppflags -D__GNUC__"
4113 esac
4114 case "$mips_type" in
4115 '');;
4116 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4117 esac
4118 case "$cppflags" in
4119 '');;
4120 *)
4121         echo " "
4122         echo "Let me guess what the preprocessor flags are..." >&4
4123         set X $cppflags
4124         shift
4125         cppflags=''
4126         $cat >cpp.c <<'EOM'
4127 #define BLURFL foo
4128
4129 BLURFL xx LFRULB
4130 EOM
4131         previous=''
4132         for flag in $*
4133         do
4134                 case "$flag" in
4135                 -*) ftry="$flag";;
4136                 *) ftry="$previous $flag";;
4137                 esac
4138                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4139                         >cpp1.out 2>/dev/null && \
4140                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4141                         >cpp2.out 2>/dev/null && \
4142                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4143                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4144                 then
4145                         cppflags="$cppflags $ftry"
4146                         previous=''
4147                 else
4148                         previous="$flag"
4149                 fi
4150         done
4151         set X $cppflags
4152         shift
4153         cppflags=${1+"$@"}
4154         case "$cppflags" in
4155         *-*)  echo "They appear to be: $cppflags";;
4156         esac
4157         $rm -f cpp.c cpp?.out
4158         ;;
4159 esac
4160
4161 : flags used in final linking phase
4162 case "$ldflags" in
4163 '') if ./venix; then
4164                 dflt='-i -z'
4165         else
4166                 dflt=''
4167         fi
4168         case "$ccflags" in
4169         *-posix*) dflt="$dflt -posix" ;;
4170         esac
4171         ;;
4172 *) dflt="$ldflags";;
4173 esac
4174
4175 : Try to guess additional flags to pick up local libraries.
4176 for thislibdir in $libpth; do
4177         case " $loclibpth " in
4178         *" $thislibdir "*)
4179                 case "$dflt " in 
4180                 *"-L$thislibdir "*) ;;
4181                 *)  dflt="$dflt -L$thislibdir" ;;
4182                 esac
4183                 ;;
4184         esac
4185 done
4186
4187 case "$dflt" in
4188 '') dflt='none' ;;
4189 esac
4190
4191 $cat <<EOH
4192
4193 Your C linker may need flags.  For this question you should
4194 include -L/whatever and any other flags used by the C linker, but you
4195 should NOT include libraries like -lwhatever.
4196
4197 Make sure you include the appropriate -L/path flags if your C linker
4198 does not normally search all of the directories you specified above,
4199 namely
4200         $libpth
4201 To use no flags, specify the word "none".
4202
4203 EOH
4204
4205 rp="Any additional ld flags (NOT including libraries)?"
4206 . ./myread
4207 case "$ans" in
4208 none) ldflags='';;
4209 *) ldflags="$ans";;
4210 esac
4211 rmlist="$rmlist pdp11"
4212
4213 : coherency check
4214 echo " "
4215 echo "Checking your choice of C compiler and flags for coherency..." >&4
4216 $cat > try.c <<'EOF'
4217 #include <stdio.h>
4218 int main() { printf("Ok\n"); exit(0); }
4219 EOF
4220 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4221 shift
4222 $cat >try.msg <<'EOM'
4223 I've tried to compile and run the following simple program:
4224
4225 EOM
4226 $cat try.c >> try.msg
4227
4228 $cat >> try.msg <<EOM
4229
4230 I used the command:
4231
4232         $*
4233         ./try
4234
4235 and I got the following output:
4236
4237 EOM
4238 dflt=y
4239 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4240         if sh -c './try' >>try.msg 2>&1; then
4241                 xxx=`./try`
4242                 case "$xxx" in
4243                 "Ok") dflt=n ;;
4244                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4245                         case " $libs " in
4246                         *" -lsfio "*)
4247                                 cat >> try.msg <<'EOQS'
4248 If $libs contains -lsfio, and sfio is mis-configured, then it
4249 sometimes (apparently) runs and exits with a 0 status, but with no
4250 output!  It may have to do with sfio's use of _exit vs. exit.
4251
4252 EOQS
4253                                 rp="You have a big problem.  Shall I abort Configure"
4254                                 dflt=y
4255                                 ;;
4256                         esac
4257                         ;;
4258                 esac
4259         else
4260                 echo "The program compiled OK, but exited with status $?." >>try.msg
4261                 rp="You have a problem.  Shall I abort Configure"
4262                 dflt=y
4263         fi
4264 else
4265         echo "I can't compile the test program." >>try.msg
4266         rp="You have a BIG problem.  Shall I abort Configure"
4267         dflt=y
4268 fi
4269 case "$dflt" in
4270 y)
4271         $cat try.msg >&4
4272         case "$knowitall" in
4273         '')
4274                 echo "(The supplied flags or libraries might be incorrect.)"
4275                 ;;
4276         *) dflt=n;;
4277         esac
4278         echo " "
4279         . ./myread
4280         case "$ans" in
4281         n*|N*) ;;
4282         *)      echo "Ok.  Stopping Configure." >&4
4283                 exit 1
4284                 ;;
4285         esac
4286         ;;
4287 n) echo "OK, that should do.";;
4288 esac
4289 $rm -f try try.* core
4290
4291 : determine filename position in cpp output
4292 echo " "
4293 echo "Computing filename position in cpp output for #include directives..." >&4
4294 echo '#include <stdio.h>' > foo.c
4295 $cat >fieldn <<EOF
4296 $startsh
4297 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4298 $grep '^[       ]*#.*stdio\.h' | \
4299 while read cline; do
4300         pos=1
4301         set \$cline
4302         while $test \$# -gt 0; do
4303                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4304                         echo "\$pos"
4305                         exit 0
4306                 fi
4307                 shift
4308                 pos=\`expr \$pos + 1\`
4309         done
4310 done
4311 EOF
4312 chmod +x fieldn
4313 fieldn=`./fieldn`
4314 $rm -f foo.c fieldn
4315 case $fieldn in
4316 '') pos='???';;
4317 1) pos=first;;
4318 2) pos=second;;
4319 3) pos=third;;
4320 *) pos="${fieldn}th";;
4321 esac
4322 echo "Your cpp writes the filename in the $pos field of the line."
4323
4324 : locate header file
4325 $cat >findhdr <<EOF
4326 $startsh
4327 wanted=\$1
4328 name=''
4329 if test -f $usrinc/\$wanted; then
4330         echo "$usrinc/\$wanted"
4331         exit 0
4332 fi
4333 awkprg='{ print \$$fieldn }'
4334 echo "#include <\$wanted>" > foo\$\$.c
4335 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4336 $grep "^[       ]*#.*\$wanted" | \
4337 while read cline; do
4338         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4339         case "\$name" in
4340         */\$wanted) echo "\$name"; exit 0;;
4341         *) name='';;
4342         esac;
4343 done;
4344 $rm -f foo\$\$.c;
4345 case "\$name" in
4346 '') exit 1;;
4347 esac
4348 EOF
4349 chmod +x findhdr
4350
4351 : define an alternate in-header-list? function
4352 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4353 cont=true; xxf="echo \"<\$1> found.\" >&4";
4354 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4355 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4356 esac;
4357 case $# in 4) instead=instead;; *) instead="at last";; esac;
4358 while $test "$cont"; do
4359         xxx=`./findhdr $1`
4360         var=$2; eval "was=\$$2";
4361         if $test "$xxx" && $test -r "$xxx";
4362         then eval $xxf;
4363         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4364                 cont="";
4365         else eval $xxnf;
4366         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4367         set $yyy; shift; shift; yyy=$@;
4368         case $# in 0) cont="";;
4369         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4370                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4371         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4372                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4373         esac;
4374 done;
4375 while $test "$yyy";
4376 do set $yyy; var=$2; eval "was=\$$2";
4377         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4378         set $yyy; shift; shift; yyy=$@;
4379 done'
4380
4381 : see if this is a malloc.h system
4382 set malloc.h i_malloc
4383 eval $inhdr
4384
4385 : see if stdlib is available
4386 set stdlib.h i_stdlib
4387 eval $inhdr
4388
4389 : determine which malloc to compile in
4390 echo " "
4391 case "$usemymalloc" in
4392 ''|[yY]*|true|$define)  dflt='y' ;;
4393 *)      dflt='n' ;;
4394 esac
4395 rp="Do you wish to attempt to use the malloc that comes with $package?"
4396 . ./myread
4397 usemymalloc="$ans"
4398 case "$ans" in
4399 y*|true)
4400         usemymalloc='y'
4401         mallocsrc='malloc.c'
4402         mallocobj="malloc$_o"
4403         d_mymalloc="$define"
4404         case "$libs" in
4405         *-lmalloc*)
4406                 : Remove malloc from list of libraries to use
4407                 echo "Removing unneeded -lmalloc from library list" >&4
4408                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4409                 shift
4410                 libs="$*"
4411                 echo "libs = $libs" >&4
4412                 ;;
4413         esac
4414         ;;
4415 *)
4416         usemymalloc='n'
4417         mallocsrc=''
4418         mallocobj=''
4419         d_mymalloc="$undef"
4420         ;;
4421 esac
4422
4423 : compute the return types of malloc and free
4424 echo " "
4425 $cat >malloc.c <<END
4426 #$i_malloc I_MALLOC
4427 #$i_stdlib I_STDLIB
4428 #include <stdio.h>
4429 #include <sys/types.h>
4430 #ifdef I_MALLOC
4431 #include <malloc.h>
4432 #endif
4433 #ifdef I_STDLIB
4434 #include <stdlib.h>
4435 #endif
4436 #ifdef TRY_MALLOC
4437 void *malloc();
4438 #endif
4439 #ifdef TRY_FREE
4440 void free();
4441 #endif
4442 END
4443 case "$malloctype" in
4444 '')
4445         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4446                 malloctype='void *'
4447         else
4448                 malloctype='char *'
4449         fi
4450         ;;
4451 esac
4452 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4453
4454 case "$freetype" in
4455 '')
4456         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4457                 freetype='void'
4458         else
4459                 freetype='int'
4460         fi
4461         ;;
4462 esac
4463 echo "Your system uses $freetype free(), it would seem." >&4
4464 $rm -f malloc.[co]
4465 : Cruising for prototypes
4466 echo " "
4467 echo "Checking out function prototypes..." >&4
4468 $cat >prototype.c <<'EOCP'
4469 int main(int argc, char *argv[]) {
4470         exit(0);}
4471 EOCP
4472 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
4473         echo "Your C compiler appears to support function prototypes."
4474         val="$define"
4475 else
4476         echo "Your C compiler doesn't seem to understand function prototypes."
4477         val="$undef"
4478 fi
4479 set prototype
4480 eval $setvar
4481 $rm -f prototype*
4482
4483 case "$prototype" in
4484 "$define") ;;
4485 *)      ansi2knr='ansi2knr'
4486         echo " "
4487         cat <<EOM >&4
4488
4489 $me:  FATAL ERROR:
4490 This version of $package can only be compiled by a compiler that 
4491 understands function prototypes.  Unfortunately, your C compiler 
4492         $cc $ccflags
4493 doesn't seem to understand them.  Sorry about that.
4494
4495 If GNU cc is available for your system, perhaps you could try that instead.  
4496
4497 Eventually, we hope to support building Perl with pre-ANSI compilers.
4498 If you would like to help in that effort, please contact <perlbug@perl.org>.
4499
4500 Aborting Configure now.
4501 EOM
4502         exit 2
4503         ;;
4504 esac
4505
4506 : determine where public executables go
4507 echo " "
4508 set dflt bin bin
4509 eval $prefixit
4510 fn=d~
4511 rp='Pathname where the public executables will reside?'
4512 . ./getfile
4513 if $test "X$ansexp" != "X$binexp"; then
4514         installbin=''
4515 fi
4516 bin="$ans"
4517 binexp="$ansexp"
4518 if $afs; then
4519         $cat <<EOM
4520
4521 Since you are running AFS, I need to distinguish the directory in which
4522 executables reside from the directory in which they are installed (and from
4523 which they are presumably copied to the former directory by occult means).
4524
4525 EOM
4526         case "$installbin" in
4527         '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
4528         *) dflt="$installbin";;
4529         esac
4530         fn=de~
4531         rp='Where will public executables be installed?'
4532         . ./getfile
4533         installbin="$ans"
4534 else
4535         installbin="$binexp"
4536 fi
4537
4538 : determine whether to install perl also as /usr/bin/perl
4539
4540 echo " "
4541 if test -d /usr/bin -a "X$installbin" != X/usr/bin; then
4542         $cat <<EOM
4543 Many scripts expect to perl to be installed as /usr/bin/perl.
4544 I can install the perl you are about to compile also as /usr/bin/perl
4545 (in addition to $installbin/perl).
4546 EOM
4547         case "$installusrbinperl" in
4548         "$undef"|[nN]*) dflt='n';;
4549         *)              dflt='y';;
4550         esac
4551         rp="Do you want to install perl as /usr/bin/perl?"
4552         . ./myread
4553         case "$ans" in
4554         [yY]*)  val="$define";;
4555         *)      val="$undef" ;;
4556         esac
4557 else
4558         val="$undef"
4559 fi
4560 set installusrbinperl
4561 eval $setvar
4562
4563 : define a shorthand compile call
4564 compile='
4565 mc_file=$1;
4566 shift;
4567 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4568 : define a shorthand compile call for compilations that should be ok.
4569 compile_ok='
4570 mc_file=$1;
4571 shift;
4572 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4573
4574 echo " "
4575 echo "Checking for GNU C Library..." >&4
4576 cat >gnulibc.c <<EOM
4577 #include <stdio.h>
4578 int main()
4579 {
4580 #ifdef __GLIBC__
4581     exit(0);
4582 #else
4583     exit(1);
4584 #endif
4585 }
4586 EOM
4587 set gnulibc
4588 if eval $compile_ok && ./gnulibc; then
4589         val="$define"
4590         echo "You are using the GNU C Library"
4591 else
4592         val="$undef"
4593         echo "You are not using the GNU C Library"
4594 fi
4595 $rm -f gnulibc*
4596 set d_gnulibc
4597 eval $setvar
4598
4599 : see if nm is to be used to determine whether a symbol is defined or not
4600 case "$usenm" in
4601 '')
4602         dflt=''
4603         case "$d_gnulibc" in
4604         "$define")
4605                 echo " "
4606                 echo "nm probably won't work on the GNU C Library." >&4
4607                 dflt=n
4608                 ;;
4609         esac
4610         case "$dflt" in
4611         '') 
4612                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4613                         echo " "
4614                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4615                         echo "'nm' won't be sufficient on this sytem." >&4
4616                         dflt=n
4617                 fi
4618                 ;;
4619         esac
4620         case "$dflt" in
4621         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4622                 if $test $dflt -gt 20; then
4623                         dflt=y
4624                 else
4625                         dflt=n
4626                 fi
4627                 ;;
4628         esac
4629         ;;
4630 *)
4631         case "$usenm" in
4632         true|$define) dflt=y;;
4633         *) dflt=n;;
4634         esac
4635         ;;
4636 esac
4637 $cat <<EOM
4638
4639 I can use $nm to extract the symbols from your C libraries. This
4640 is a time consuming task which may generate huge output on the disk (up
4641 to 3 megabytes) but that should make the symbols extraction faster. The
4642 alternative is to skip the 'nm' extraction part and to compile a small
4643 test program instead to determine whether each symbol is present. If
4644 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4645 this may be the best solution.
4646
4647 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4648
4649 EOM
4650 rp="Shall I use $nm to extract C symbols from the libraries?"
4651 . ./myread
4652 case "$ans" in
4653 [Nn]*) usenm=false;;
4654 *) usenm=true;;
4655 esac
4656
4657 runnm=$usenm
4658 case "$reuseval" in
4659 true) runnm=false;;
4660 esac
4661
4662 : nm options which may be necessary
4663 case "$nm_opt" in
4664 '') if $test -f /mach_boot; then
4665                 nm_opt=''       # Mach
4666         elif $test -d /usr/ccs/lib; then
4667                 nm_opt='-p'     # Solaris (and SunOS?)
4668         elif $test -f /dgux; then
4669                 nm_opt='-p'     # DG-UX
4670         elif $test -f /lib64/rld; then
4671                 nm_opt='-p'     # 64-bit Irix
4672         else
4673                 nm_opt=''
4674         fi;;
4675 esac
4676
4677 : nm options which may be necessary for shared libraries but illegal
4678 : for archive libraries.  Thank you, Linux.
4679 case "$nm_so_opt" in
4680 '')     case "$myuname" in
4681         *linux*)
4682                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4683                         nm_so_opt='--dynamic'
4684                 fi
4685                 ;;
4686         esac
4687         ;;
4688 esac
4689
4690 case "$runnm" in
4691 true)
4692 : get list of predefined functions in a handy place
4693 echo " "
4694 case "$libc" in
4695 '') libc=unknown
4696         case "$libs" in
4697         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4698         esac
4699         ;;
4700 esac
4701 libnames='';
4702 case "$libs" in
4703 '') ;;
4704 *)  for thislib in $libs; do
4705         case "$thislib" in
4706         -lc|-lc_s)
4707                 : Handle C library specially below.
4708                 ;;
4709         -l*)
4710                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4711                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4712                         :
4713                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4714                         :
4715                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4716                         :
4717                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4718                         :
4719                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4720                         :
4721                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4722                         :
4723                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4724                         :
4725                 else
4726                         try=''
4727                 fi
4728                 libnames="$libnames $try"
4729                 ;;
4730         *) libnames="$libnames $thislib" ;;
4731         esac
4732         done
4733         ;;
4734 esac
4735 xxx=normal
4736 case "$libc" in
4737 unknown)
4738         set /lib/libc.$so
4739         for xxx in $libpth; do
4740                 $test -r $1 || set $xxx/libc.$so
4741                 : The messy sed command sorts on library version numbers.
4742                 $test -r $1 || \
4743                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4744                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4745                                 h
4746                                 s/[0-9][0-9]*/0000&/g
4747                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4748                                 G
4749                                 s/\n/ /' | \
4750                          sort | $sed -e 's/^.* //'`
4751                 eval set \$$#
4752         done
4753         $test -r $1 || set /usr/ccs/lib/libc.$so
4754         $test -r $1 || set /lib/libsys_s$_a
4755         ;;
4756 *)
4757         set blurfl
4758         ;;
4759 esac
4760 if $test -r "$1"; then
4761         echo "Your (shared) C library seems to be in $1."
4762         libc="$1"
4763 elif $test -r /lib/libc && $test -r /lib/clib; then
4764         echo "Your C library seems to be in both /lib/clib and /lib/libc."
4765         xxx=apollo
4766         libc='/lib/clib /lib/libc'
4767         if $test -r /lib/syslib; then
4768                 echo "(Your math library is in /lib/syslib.)"
4769                 libc="$libc /lib/syslib"
4770         fi
4771 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4772         echo "Your C library seems to be in $libc, as you said before."
4773 elif $test -r $incpath/usr/lib/libc$_a; then
4774         libc=$incpath/usr/lib/libc$_a;
4775         echo "Your C library seems to be in $libc.  That's fine."
4776 elif $test -r /lib/libc$_a; then
4777         libc=/lib/libc$_a;
4778         echo "Your C library seems to be in $libc.  You're normal."
4779 else
4780         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
4781                 :
4782         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4783                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4784         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4785                 :
4786         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4787                 :
4788         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4789                 :
4790         else
4791                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4792         fi
4793         if $test -r "$tans"; then
4794                 echo "Your C library seems to be in $tans, of all places."
4795                 libc=$tans
4796         else
4797                 libc='blurfl'
4798         fi
4799 fi
4800 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4801         dflt="$libc"
4802         cat <<EOM
4803
4804 If the guess above is wrong (which it might be if you're using a strange
4805 compiler, or your machine supports multiple models), you can override it here.
4806
4807 EOM
4808 else
4809         dflt=''
4810         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
4811         cat >&4 <<EOM
4812 I can't seem to find your C library.  I've looked in the following places:
4813
4814 EOM
4815         $sed 's/^/      /' libpath
4816         cat <<EOM
4817
4818 None of these seems to contain your C library. I need to get its name...
4819
4820 EOM
4821 fi
4822 fn=f
4823 rp='Where is your C library?'
4824 . ./getfile
4825 libc="$ans"
4826
4827 echo " "
4828 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
4829 set X `cat libnames`
4830 shift
4831 xxx=files
4832 case $# in 1) xxx=file; esac
4833 echo "Extracting names from the following $xxx for later perusal:" >&4
4834 echo " "
4835 $sed 's/^/      /' libnames >&4
4836 echo " "
4837 $echo $n "This may take a while...$c" >&4
4838
4839 for file in $*; do
4840         case $file in
4841         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
4842         *) $nm $nm_opt $file 2>/dev/null;;
4843         esac
4844 done >libc.tmp
4845
4846 $echo $n ".$c"
4847 $grep fprintf libc.tmp > libc.ptf
4848 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
4849 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
4850 xxx='[ADTSIW]'
4851 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
4852         eval $xscan;\
4853         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4854                 eval $xrun
4855 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
4856         eval $xscan;\
4857         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4858                 eval $xrun
4859 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
4860         eval $xscan;\
4861         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4862                 eval $xrun
4863 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
4864         eval $xscan;\
4865         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4866                 eval $xrun
4867 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
4868         eval $xscan;\
4869         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4870                 eval $xrun
4871 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
4872         eval $xscan;\
4873         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4874                 eval $xrun
4875 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
4876                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
4877         eval $xscan;\
4878         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4879                 eval $xrun
4880 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
4881         eval $xscan;\
4882         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4883                 eval $xrun
4884 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
4885         eval $xscan;\
4886         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4887                 eval $xrun
4888 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
4889         eval $xscan;\
4890         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4891                 eval $xrun
4892 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
4893         eval $xscan;\
4894         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4895                 eval $xrun
4896 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
4897         eval $xscan;\
4898         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4899                 eval $xrun
4900 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
4901         eval $xscan;\
4902         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4903                 eval $xrun
4904 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
4905         eval $xscan;\
4906         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4907                 eval $xrun
4908 else
4909         $nm -p $* 2>/dev/null >libc.tmp
4910         $grep fprintf libc.tmp > libc.ptf
4911         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
4912                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
4913         then
4914                 nm_opt='-p'
4915                 eval $xrun
4916         else
4917                 echo " "
4918                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
4919                 com=''
4920                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
4921                         for thisname in $libnames $libc; do
4922                                 $ar t $thisname >>libc.tmp
4923                         done
4924                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
4925                         echo "Ok." >&4
4926                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
4927                         # Repeat libc to extract forwarders to DLL entries too
4928                         for thisname in $libnames $libc; do
4929                                 $ar tv $thisname >>libc.tmp
4930                                 # Revision 50 of EMX has bug in $ar.
4931                                 # it will not extract forwarders to DLL entries
4932                                 # Use emximp which will extract exactly them.
4933                                 emximp -o tmp.imp $thisname \
4934                                     2>/dev/null && \
4935                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
4936                                     < tmp.imp >>libc.tmp
4937                                 $rm tmp.imp
4938                         done
4939                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
4940                         echo "Ok." >&4
4941                 else
4942                         echo "$ar didn't seem to work right." >&4
4943                         echo "Maybe this is a Cray...trying bld instead..." >&4
4944                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
4945                         then
4946                                 for thisname in $libnames; do
4947                                         bld t $libnames | \
4948                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
4949                                         $ar t $thisname >>libc.tmp
4950                                 done
4951                                 echo "Ok." >&4
4952                         else
4953                                 echo "That didn't work either.  Giving up." >&4
4954                                 exit 1
4955                         fi
4956                 fi
4957         fi
4958 fi
4959 nm_extract="$com"
4960 if $test -f /lib/syscalls.exp; then
4961         echo " "
4962         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
4963         $sed -n 's/^\([^        ]*\)[   ]*syscall$/\1/p' /lib/syscalls.exp >>libc.list
4964 fi
4965 ;;
4966 esac
4967 $rm -f libnames libpath
4968
4969 : see if dld is available
4970 set dld.h i_dld
4971 eval $inhdr
4972
4973 : is a C symbol defined?
4974 csym='tlook=$1;
4975 case "$3" in
4976 -v) tf=libc.tmp; tc=""; tdc="";;
4977 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
4978 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
4979 esac;
4980 tx=yes;
4981 case "$reuseval-$4" in
4982 true-) ;;
4983 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
4984 esac;
4985 case "$tx" in
4986 yes)
4987         case "$runnm" in
4988         true)
4989                 if $contains $tlook $tf >/dev/null 2>&1;
4990                 then tval=true;
4991                 else tval=false;
4992                 fi;;
4993         *)
4994                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
4995                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
4996                 then tval=true;
4997                 else tval=false;
4998                 fi;
4999                 $rm -f t t.c;;
5000         esac;;
5001 *)
5002         case "$tval" in
5003         $define) tval=true;;
5004         *) tval=false;;
5005         esac;;
5006 esac;
5007 eval "$2=$tval"'
5008
5009 : define an is-in-libc? function
5010 inlibc='echo " "; td=$define; tu=$undef;
5011 sym=$1; var=$2; eval "was=\$$2";
5012 tx=yes;
5013 case "$reuseval$was" in
5014 true) ;;
5015 true*) tx=no;;
5016 esac;
5017 case "$tx" in
5018 yes)
5019         set $sym tres -f;
5020         eval $csym;
5021         case "$tres" in
5022         true)
5023                 echo "$sym() found." >&4;
5024                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5025         *)
5026                 echo "$sym() NOT found." >&4;
5027                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5028         esac;;
5029 *)
5030         case "$was" in
5031         $define) echo "$sym() found." >&4;;
5032         *) echo "$sym() NOT found." >&4;;
5033         esac;;
5034 esac'
5035
5036 : see if dlopen exists
5037 xxx_runnm="$runnm"
5038 runnm=false
5039 set dlopen d_dlopen
5040 eval $inlibc
5041 runnm="$xxx_runnm"
5042
5043 : determine which dynamic loading, if any, to compile in
5044 echo " "
5045 dldir="ext/DynaLoader"
5046 case "$usedl" in
5047 $define|y|true)
5048         dflt='y'
5049         usedl="$define"
5050         ;;
5051 $undef|n|false)
5052         dflt='n'
5053         usedl="$undef"
5054         ;;
5055 *) 
5056         dflt='n'
5057         case "$d_dlopen" in
5058             $define) dflt='y' ;;
5059         esac
5060         case "$i_dld" in
5061             $define) dflt='y' ;;
5062         esac
5063         : Does a dl_xxx.xs file exist for this operating system
5064         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
5065         ;;
5066 esac
5067 rp="Do you wish to use dynamic loading?"
5068 . ./myread
5069 usedl="$ans"
5070 case "$ans" in
5071 y*) usedl="$define"
5072         case "$dlsrc" in
5073         '')
5074                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
5075                         dflt="$dldir/dl_${osname}.xs"
5076                 elif $test "$d_dlopen" = "$define" ; then
5077                         dflt="$dldir/dl_dlopen.xs"
5078                 elif $test "$i_dld" = "$define" ; then
5079                         dflt="$dldir/dl_dld.xs"
5080                 else
5081                         dflt=''
5082                 fi
5083                 ;;
5084         *)      dflt="$dldir/$dlsrc"
5085                 ;;
5086         esac
5087     echo "The following dynamic loading files are available:"
5088         : Can not go over to $dldir because getfile has path hard-coded in.
5089         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
5090         rp="Source file to use for dynamic loading"
5091         fn="fne"
5092         # XXX This getfile call will fail the existence check if you try 
5093         # building away from $src (this is not supported yet).
5094         . ./getfile
5095         usedl="$define"
5096         : emulate basename
5097         dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
5098
5099         $cat << EOM
5100
5101 Some systems may require passing special flags to $cc -c to
5102 compile modules that will be used to create a shared library.
5103 To use no flags, say "none".
5104
5105 EOM
5106     case "$cccdlflags" in
5107     '') case "$gccversion" in
5108                 '') case "$osname" in
5109                         hpux)   dflt='+z' ;;
5110                         next)   dflt='none' ;;
5111                         irix*)  dflt='-KPIC' ;;
5112                         svr4*|esix*|solaris) dflt='-KPIC' ;;
5113                         sunos)  dflt='-pic' ;;
5114                         *)      dflt='none' ;;
5115                     esac
5116                         ;;
5117                 *)  case "$osname" in
5118                         svr4*|esix*|solaris) dflt='-fPIC' ;;
5119                         *)      dflt='-fpic' ;;
5120                     esac ;;
5121             esac ;;
5122         ' ') dflt='none' ;;
5123     *)  dflt="$cccdlflags" ;;
5124     esac
5125     rp="Any special flags to pass to $cc -c to compile shared library modules?"
5126     . ./myread
5127     case "$ans" in
5128     none) cccdlflags=' ' ;;
5129     *) cccdlflags="$ans" ;;
5130     esac
5131
5132     cat << EOM
5133
5134 Some systems use ld to create libraries that can be dynamically loaded,
5135 while other systems (such as those using ELF) use $cc.
5136
5137 EOM
5138         case "$ld" in
5139         '')     $cat >try.c <<'EOM'
5140 /* Test for whether ELF binaries are produced */
5141 #include <fcntl.h>
5142 #include <stdlib.h>
5143 int main() {
5144         char b[4];
5145         int i = open("a.out",O_RDONLY);
5146         if(i == -1) 
5147                 exit(1); /* fail */
5148         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
5149                 exit(0); /* succeed (yes, it's ELF) */
5150         else
5151                 exit(1); /* fail */
5152 }
5153 EOM
5154                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
5155                         cat <<EOM
5156 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
5157 EOM
5158                         dflt="$cc"
5159                 else
5160                         echo "I'll use ld to build dynamic libraries."
5161                         dflt='ld'
5162                 fi
5163                 rm -f try.c a.out
5164                 ;;
5165         *)      dflt="$ld"
5166                 ;;
5167         esac
5168
5169     rp="What command should be used to create dynamic libraries?"
5170     . ./myread
5171         ld="$ans"
5172
5173     cat << EOM
5174
5175 Some systems may require passing special flags to $ld to create a
5176 library that can be dynamically loaded.  If your ld flags include
5177 -L/other/path options to locate libraries outside your loader's normal
5178 search path, you may need to specify those -L options here as well.  To
5179 use no flags, say "none".
5180
5181 EOM
5182     case "$lddlflags" in
5183     '') case "$osname" in
5184                         beos) dflt='-nostart' ;;
5185                         hpux)  dflt='-b' ;;
5186                         linux|irix*)    dflt='-shared' ;;
5187                         next)  dflt='none' ;;
5188                         solaris) dflt='-G' ;;
5189                         sunos) dflt='-assert nodefinitions' ;;
5190                         svr4*|esix*) dflt="-G $ldflags" ;;
5191                 *)     dflt='none' ;;
5192                         esac
5193                         ;;
5194     *) dflt="$lddlflags" ;;
5195     esac
5196
5197         : Try to guess additional flags to pick up local libraries.
5198         : Be careful not to append to a plain 'none'
5199         case "$dflt" in
5200         none) dflt='' ;;
5201         esac
5202         for thisflag in $ldflags; do
5203                 case "$thisflag" in
5204                 -L*)
5205                         case " $dflt " in
5206                         *" $thisflag "*) ;;
5207                         *) dflt="$dflt $thisflag" ;;
5208                         esac
5209                         ;;
5210                 esac
5211         done
5212
5213         case "$dflt" in
5214         ''|' ') dflt='none' ;;
5215         esac
5216
5217     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
5218     . ./myread
5219     case "$ans" in
5220     none) lddlflags=' ' ;;
5221     *) lddlflags="$ans" ;;
5222     esac
5223
5224         cat <<EOM
5225
5226 Some systems may require passing special flags to $cc to indicate that
5227 the resulting executable will use dynamic linking.  To use no flags,
5228 say "none".
5229
5230 EOM
5231     case "$ccdlflags" in
5232     '') case "$osname" in
5233                 hpux)   dflt='-Wl,-E' ;;
5234                 linux)  dflt='-rdynamic' ;;
5235                 next)   dflt='none' ;;
5236                 sunos)  dflt='none' ;;
5237                 *)      dflt='none' ;;
5238             esac ;;
5239     ' ')  dflt='none' ;;
5240     *)  dflt="$ccdlflags" ;;
5241     esac
5242     rp="Any special flags to pass to $cc to use dynamic loading?"
5243     . ./myread
5244     case "$ans" in
5245     none) ccdlflags=' ' ;;
5246     *) ccdlflags="$ans" ;;
5247     esac
5248     ;;
5249 *)  usedl="$undef"
5250         ld='ld'
5251     dlsrc='dl_none.xs'
5252     lddlflags=''
5253     ccdlflags=''
5254     ;;
5255 esac
5256
5257 also=''
5258 case "$usedl" in
5259 $undef)
5260         # No dynamic loading being used, so don't bother even to prompt.
5261         useshrplib='false'
5262         ;;
5263 *)      case "$useshrplib" in
5264         '')     case "$osname" in
5265                 svr4*|dgux|dynixptx|esix|powerux|beos)
5266                         dflt=y
5267                         also='Building a shared libperl is required for dynamic loading to work on your system.'
5268                         ;;
5269                 next*)
5270                         case "$osvers" in
5271                         4*)     dflt=y
5272                                 also='Building a shared libperl is needed for MAB support.'
5273                                 ;;
5274                         *)      dflt=n
5275                                 ;;
5276                         esac
5277                         ;;
5278                 *)      dflt=n
5279                         ;;
5280                 esac
5281                 ;;
5282         $define|true|[Yy]*)
5283                 dflt=y
5284                 ;;
5285         *)      dflt=n
5286                 ;;
5287         esac
5288         $cat << EOM
5289
5290 The perl executable is normally obtained by linking perlmain.c with
5291 libperl${_a}, any static extensions (usually just DynaLoader), and
5292 any other libraries needed on this system (such as -lm, etc.).  Since
5293 your system supports dynamic loading, it is probably possible to build
5294 a shared libperl.$so.  If you will have more than one executable linked
5295 to libperl.$so, this will significantly reduce the size of each
5296 executable, but it may have a noticeable affect on performance.  The
5297 default is probably sensible for your system.
5298 $also
5299
5300 EOM
5301         rp="Build a shared libperl.$so (y/n)"
5302         . ./myread
5303         case "$ans" in
5304         true|$define|[Yy]*)
5305                 useshrplib='true'
5306                 # Why does next4 have to be so different?
5307                 case "${osname}${osvers}" in
5308                 next4*) xxx='DYLD_LIBRARY_PATH' ;;
5309                 os2*)   xxx='' ;; # Nothing special needed.
5310                 beos*)  xxx='' ;;
5311                 *)              xxx='LD_LIBRARY_PATH' ;;
5312                 esac
5313                 if test X"$xxx" != "X"; then
5314                         $cat <<EOM  | $tee -a ../config.msg >&4
5315
5316 To build perl, you must add the current working directory to your
5317 $xxx environment variable before running make.  You can do
5318 this with
5319    $xxx=\`pwd\`:\$$xxx; export $xxx
5320 for Bourne-style shells, or
5321    setenv $xxx \`pwd\`
5322 for Csh-style shells.  You *MUST* do this before running make.
5323
5324 EOM
5325                 fi
5326                 ;;
5327         *)      useshrplib='false' ;;
5328         esac
5329         ;;
5330 esac
5331
5332 case "$useshrplib" in
5333 true)
5334         case "$libperl" in
5335         '')
5336                 # Figure out a good name for libperl.so.  Since it gets stored in
5337                 # a version-specific architecture-dependent library, the version
5338                 # number isn't really that important, except for making cc/ld happy.
5339                 #
5340                 # A name such as libperl.so.3.1
5341                 majmin="libperl.$so.$patchlevel.$subversion"
5342                 # A name such as libperl.so.301
5343                 majonly=`echo $patchlevel $subversion |
5344                         $awk '{printf "%d%02d", $1, $2}'`
5345                 majonly=libperl.$so.$majonly
5346                 # I'd prefer to keep the os-specific stuff here to a minimum, and
5347                 # rely on figuring it out from the naming of libc.
5348                 case "${osname}${osvers}" in
5349                 next4*)
5350                         dflt=libperl.5.$so
5351                         # XXX How handle the --version stuff for MAB?
5352                         ;;
5353                 linux*)  # ld won't link with a bare -lperl otherwise.
5354                         dflt=libperl.$so
5355                         ;;
5356                 *)      # Try to guess based on whether libc has major.minor.
5357                         case "$libc" in
5358                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
5359                         *libc.$so.[0-9]*) dflt=$majonly ;;
5360                         *)      dflt=libperl.$so ;;
5361                         esac
5362                         ;;
5363                 esac
5364                 ;;
5365         *)      dflt=$libperl
5366                 ;;
5367         esac
5368         cat << EOM
5369
5370 I need to select a good name for the shared libperl.  If your system uses
5371 library names with major and minor numbers, then you might want something
5372 like $majmin.  Alternatively, if your system uses a single version
5373 number for shared libraries, then you might want to use $majonly.
5374 Or, your system might be quite happy with a simple libperl.$so.
5375
5376 Since the shared libperl will get installed into a version-specific
5377 architecture-dependent directory, the version number of the shared perl
5378 library probably isn't important, so the default should be o.k.
5379
5380 EOM
5381         rp='What name do you want to give to the shared libperl?'
5382         . ./myread
5383         libperl=$ans
5384         echo "Ok, I'll use $libperl"
5385         ;;
5386 *)
5387         libperl="libperl${_a}"
5388         ;;
5389 esac
5390
5391 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
5392 case "$shrpdir" in
5393 '') ;;
5394 *)      $cat >&4 <<EOM
5395 WARNING:  Use of the shrpdir variable for the installation location of
5396 the shared $libperl is not supported.  It was never documented and
5397 will not work in this version.  Let me (perlbug@perl.com)
5398 know of any problems this may cause.
5399
5400 EOM
5401         case "$shrpdir" in
5402         "$archlibexp/CORE")
5403                 $cat >&4 <<EOM
5404 But your current setting of $shrpdir is
5405 the default anyway, so it's harmless.
5406 EOM
5407                 ;;
5408         *)
5409                 $cat >&4 <<EOM
5410 Further, your current attempted setting of $shrpdir
5411 conflicts with the value of $archlibexp/CORE
5412 that installperl will use.
5413 EOM
5414                 ;;
5415         esac
5416         ;;
5417 esac
5418
5419 # How will the perl executable find the installed shared $libperl?
5420 # Add $xxx to ccdlflags.
5421 # If we can't figure out a command-line option, use $shrpenv to
5422 # set env LD_RUN_PATH.  The main perl makefile uses this.
5423 shrpdir=$archlibexp/CORE
5424 xxx=''
5425 tmp_shrpenv=''
5426 if "$useshrplib"; then
5427     case "$osname" in 
5428         aix)
5429                 # We'll set it in Makefile.SH...
5430                 ;;
5431         solaris|netbsd)
5432                 xxx="-R $shrpdir"
5433                 ;;
5434         freebsd)
5435                 xxx="-Wl,-R$shrpdir"
5436                 ;;
5437         linux|irix*|dec_osf)
5438                 xxx="-Wl,-rpath,$shrpdir"
5439                 ;;
5440         next)
5441                 # next doesn't like the default...
5442                 ;;
5443         beos)
5444                 # beos doesn't like the default, either.
5445                 ;;
5446         *)
5447                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
5448                 ;;
5449         esac
5450         case "$xxx" in
5451         '') ;;
5452         *)      
5453                 # Only add $xxx if it isn't already in ccdlflags.
5454                 case " $ccdlflags " in
5455                 *" $xxx "*)     ;;
5456                 *)      ccdlflags="$ccdlflags $xxx"
5457                         cat <<EOM >&4
5458
5459 Adding $xxx to the flags
5460 passed to $ld so that the perl executable will find the 
5461 installed shared $libperl.
5462
5463 EOM
5464                         ;;
5465                 esac
5466                 ;;
5467         esac
5468 fi
5469 # Respect a hint or command-line value.
5470 case "$shrpenv" in
5471 '') shrpenv="$tmp_shrpenv" ;;
5472 esac
5473
5474 : determine where manual pages go
5475 set man1dir man1dir none
5476 eval $prefixit
5477 $cat <<EOM
5478
5479 $spackage has manual pages available in source form.
5480 EOM
5481 case "$nroff" in
5482 nroff)
5483         echo "However, you don't have nroff, so they're probably useless to you."
5484         case "$man1dir" in
5485         '') man1dir="none";;
5486         esac;;
5487 esac
5488 echo "If you don't want the manual sources installed, answer 'none'."
5489 case "$man1dir" in
5490 ' ') dflt=none
5491         ;;
5492 '')
5493         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
5494         lookpath="$lookpath $prefixexp/man/p_man/man1"
5495         lookpath="$lookpath $prefixexp/man/u_man/man1"
5496         lookpath="$lookpath $prefixexp/man/man.1"
5497         case "$sysman" in
5498         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
5499         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
5500         esac
5501         set dflt
5502         eval $prefixup
5503         ;;
5504 *)  dflt="$man1dir"
5505         ;;
5506 esac
5507 echo " "
5508 fn=dn+~
5509 rp="Where do the main $spackage manual pages (source) go?"
5510 . ./getfile
5511 if $test "X$man1direxp" != "X$ansexp"; then
5512         installman1dir=''
5513 fi
5514 man1dir="$ans"
5515 man1direxp="$ansexp"
5516 case "$man1dir" in
5517 '') man1dir=' '
5518         installman1dir='';;
5519 esac
5520 if $afs; then
5521         $cat <<EOM
5522
5523 Since you are running AFS, I need to distinguish the directory in which
5524 manual pages reside from the directory in which they are installed (and from
5525 which they are presumably copied to the former directory by occult means).
5526
5527 EOM
5528         case "$installman1dir" in
5529         '') dflt=`echo $man1direxp | sed 's#^/afs/#/afs/.#'`;;
5530         *) dflt="$installman1dir";;
5531         esac
5532         fn=de~
5533         rp='Where will man pages be installed?'
5534         . ./getfile
5535         installman1dir="$ans"
5536 else
5537         installman1dir="$man1direxp"
5538 fi
5539
5540 : What suffix to use on installed man pages
5541
5542 case "$man1dir" in
5543 ' ')
5544         man1ext='0'
5545         ;;
5546 *)
5547         rp="What suffix should be used for the main $spackage man pages?"
5548         case "$man1ext" in
5549         '')     case "$man1dir" in
5550                 *1)  dflt=1 ;;
5551                 *1p) dflt=1p ;;
5552                 *1pm) dflt=1pm ;;
5553                 *l) dflt=l;;
5554                 *n) dflt=n;;
5555                 *o) dflt=o;;
5556                 *p) dflt=p;;
5557                 *C) dflt=C;;
5558                 *L) dflt=L;;
5559                 *L1) dflt=L1;;
5560                 *) dflt=1;;
5561                 esac
5562                 ;;
5563         *)      dflt="$man1ext";;
5564         esac
5565         . ./myread
5566         man1ext="$ans"
5567         ;;
5568 esac
5569
5570 : see if we can have long filenames
5571 echo " "
5572 rmlist="$rmlist /tmp/cf$$"
5573 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
5574 first=123456789abcdef
5575 second=/tmp/cf$$/$first
5576 $rm -f $first $second
5577 if (echo hi >$first) 2>/dev/null; then
5578         if $test -f 123456789abcde; then
5579                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
5580                 val="$undef"
5581         else
5582                 if (echo hi >$second) 2>/dev/null; then
5583                         if $test -f /tmp/cf$$/123456789abcde; then
5584                                 $cat <<'EOM'
5585 That's peculiar... You can have filenames longer than 14 characters, but only
5586 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
5587 I shall consider your system cannot support long filenames at all.
5588 EOM
5589                                 val="$undef"
5590                         else
5591                                 echo 'You can have filenames longer than 14 characters.' >&4
5592                                 val="$define"
5593                         fi
5594                 else
5595                         $cat <<'EOM'
5596 How confusing! Some of your filesystems are sane enough to allow filenames
5597 longer than 14 characters but some others like /tmp can't even think about them.
5598 So, for now on, I shall assume your kernel does not allow them at all.
5599 EOM
5600                         val="$undef"
5601                 fi
5602         fi
5603 else
5604         $cat <<'EOM'
5605 You can't have filenames longer than 14 chars.  You can't even think about them!
5606 EOM
5607         val="$undef"
5608 fi 
5609 set d_flexfnam
5610 eval $setvar
5611 $rm -rf /tmp/cf$$ 123456789abcde*
5612
5613 : determine where library module manual pages go
5614 set man3dir man3dir none
5615 eval $prefixit
5616 $cat <<EOM
5617
5618 $spackage has manual pages for many of the library modules.
5619 EOM
5620
5621 case "$nroff" in
5622 nroff)
5623         $cat <<'EOM'
5624 However, you don't have nroff, so they're probably useless to you.
5625 EOM
5626         case "$man3dir" in
5627         '') man3dir="none";;
5628         esac;;
5629 esac
5630
5631 case "$d_flexfnam" in
5632 undef)
5633         $cat <<'EOM'
5634 However, your system can't handle the long file names like File::Basename.3. 
5635 EOM
5636         case "$man3dir" in
5637         '') man3dir="none";;
5638         esac;;
5639 esac
5640
5641 echo "If you don't want the manual sources installed, answer 'none'."
5642 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5643 case "$man3dir" in
5644 '')     case "$prefix" in 
5645         *$prog*) dflt=`echo $man1dir | 
5646                         $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;;
5647         *)      dflt="$privlib/man/man3" ;;
5648         esac
5649         ;;
5650 ' ') dflt=none;;
5651 *)      dflt="$man3dir" ;;
5652 esac
5653 echo " "
5654
5655 fn=dn+~
5656 rp="Where do the $package library man pages (source) go?"
5657 . ./getfile
5658 if test "X$man3direxp" != "X$ansexp"; then
5659         installman3dir=''
5660 fi
5661
5662 man3dir="$ans"
5663 man3direxp="$ansexp"
5664 case "$man3dir" in
5665 '') man3dir=' '
5666         installman3dir='';;
5667 esac
5668 if $afs; then
5669         $cat <<EOM
5670
5671 Since you are running AFS, I need to distinguish the directory in which
5672 manual pages reside from the directory in which they are installed (and from
5673 which they are presumably copied to the former directory by occult means).
5674
5675 EOM
5676         case "$installman3dir" in
5677         '') dflt=`echo $man3direxp | sed 's#^/afs/#/afs/.#'`;;
5678         *) dflt="$installman3dir";;
5679         esac
5680         fn=de~
5681         rp='Where will man pages be installed?'
5682         . ./getfile
5683         installman3dir="$ans"
5684 else
5685         installman3dir="$man3direxp"
5686 fi
5687
5688 : What suffix to use on installed man pages
5689
5690 case "$man3dir" in
5691 ' ')
5692         man3ext='0'
5693         ;;
5694 *)
5695         rp="What suffix should be used for the $package library man pages?"
5696         case "$man3ext" in
5697         '')     case "$man3dir" in
5698                 *3)  dflt=3 ;;
5699                 *3p) dflt=3p ;;
5700                 *3pm) dflt=3pm ;;
5701                 *l) dflt=l;;
5702                 *n) dflt=n;;
5703                 *o) dflt=o;;
5704                 *p) dflt=p;;
5705                 *C) dflt=C;;
5706                 *L) dflt=L;;
5707                 *L3) dflt=L3;;
5708                 *) dflt=3;;
5709                 esac
5710                 ;;
5711         *)      dflt="$man3ext";;
5712         esac
5713         . ./myread
5714         man3ext="$ans"
5715         ;;
5716 esac
5717
5718 : see if we have to deal with yellow pages, now NIS.
5719 if $test -d /usr/etc/yp || $test -d /etc/yp; then
5720         if $test -f /usr/etc/nibindd; then
5721                 echo " "
5722                 echo "I'm fairly confident you're on a NeXT."
5723                 echo " "
5724                 rp='Do you get the hosts file via NetInfo?'
5725                 dflt=y
5726                 case "$hostcat" in
5727                 nidump*) ;;
5728                 '') ;;
5729                 *) dflt=n;;
5730                 esac
5731                 . ./myread
5732                 case "$ans" in
5733                 y*) hostcat='nidump hosts .';;
5734                 *)      case "$hostcat" in
5735                         nidump*) hostcat='';;
5736                         esac
5737                         ;;
5738                 esac
5739         fi
5740         case "$hostcat" in
5741         nidump*) ;;
5742         *)
5743                 case "$hostcat" in
5744                 *ypcat*) dflt=y;;
5745                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
5746                                 dflt=y
5747                         else
5748                                 dflt=n
5749                         fi;;
5750                 *) dflt=n;;
5751                 esac
5752                 echo " "
5753                 rp='Are you getting the hosts file via yellow pages?'
5754                 . ./myread
5755                 case "$ans" in
5756                 y*) hostcat='ypcat hosts';;
5757                 *) hostcat='cat /etc/hosts';;
5758                 esac
5759                 ;;
5760         esac
5761 fi
5762 case "$hostcat" in
5763 '') hostcat='cat /etc/hosts';;
5764 esac
5765 case "$groupcat" in
5766 '') groupcat='cat /etc/group';;
5767 esac
5768 case "$passcat" in
5769 '') passcat='cat /etc/passwd';;
5770 esac
5771
5772 : now get the host name
5773 echo " "
5774 echo "Figuring out host name..." >&4
5775 case "$myhostname" in
5776 '') cont=true
5777         echo 'Maybe "hostname" will work...'
5778         if tans=`sh -c hostname 2>&1` ; then
5779                 myhostname=$tans
5780                 phostname=hostname
5781                 cont=''
5782         fi
5783         ;;
5784 *) cont='';;
5785 esac
5786 if $test "$cont"; then
5787         if ./xenix; then
5788                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
5789                 if tans=`cat /etc/systemid 2>&1` ; then
5790                         myhostname=$tans
5791                         phostname='cat /etc/systemid'
5792                         echo "Whadyaknow.  Xenix always was a bit strange..."
5793                         cont=''
5794                 fi
5795         elif $test -r /etc/systemid; then
5796                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
5797         fi
5798 fi
5799 if $test "$cont"; then
5800         echo 'No, maybe "uuname -l" will work...'
5801         if tans=`sh -c 'uuname -l' 2>&1` ; then
5802                 myhostname=$tans
5803                 phostname='uuname -l'
5804         else
5805                 echo 'Strange.  Maybe "uname -n" will work...'
5806                 if tans=`sh -c 'uname -n' 2>&1` ; then
5807                         myhostname=$tans
5808                         phostname='uname -n'
5809                 else
5810                         echo 'Oh well, maybe I can mine it out of whoami.h...'
5811                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
5812                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
5813                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
5814                         else
5815                                 case "$myhostname" in
5816                                 '') echo "Does this machine have an identity crisis or something?"
5817                                         phostname='';;
5818                                 *)
5819                                         echo "Well, you said $myhostname before..."
5820                                         phostname='echo $myhostname';;
5821                                 esac
5822                         fi
5823                 fi
5824         fi
5825 fi
5826 : you do not want to know about this
5827 set $myhostname
5828 myhostname=$1
5829
5830 : verify guess
5831 if $test "$myhostname" ; then
5832         dflt=y
5833         rp='Your host name appears to be "'$myhostname'".'" Right?"
5834         . ./myread
5835         case "$ans" in
5836         y*) ;;
5837         *) myhostname='';;
5838         esac
5839 fi
5840
5841 : bad guess or no guess
5842 while $test "X$myhostname" = X ; do
5843         dflt=''
5844         rp="Please type the (one word) name of your host:"
5845         . ./myread
5846         myhostname="$ans"
5847 done
5848
5849 : translate upper to lower if necessary
5850 case "$myhostname" in
5851 *[A-Z]*)
5852         echo "(Normalizing case in your host name)"
5853         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
5854         ;;
5855 esac
5856
5857 case "$myhostname" in
5858 *.*)
5859         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
5860         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
5861         echo "(Trimming domain name from host name--host name is now $myhostname)"
5862         ;;
5863 *) case "$mydomain" in
5864         '')
5865                 {
5866                         test "X$hostcat" = "Xypcat hosts" &&
5867                         ypmatch "$myhostname" hosts 2>/dev/null |\
5868                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
5869                         $test -s hosts
5870                 } || {
5871                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
5872                                         /[       ]$myhostname[  . ]/p" > hosts
5873                 }
5874                 tmp_re="[       . ]"
5875                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
5876                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
5877                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
5878                         hosts | $sort | $uniq | \
5879                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
5880                 case `$echo X$dflt` in
5881                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
5882                         dflt=.
5883                         ;;
5884                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
5885                         ;;
5886                 esac
5887                 case "$dflt" in
5888                 .)
5889                         tans=`./loc resolv.conf X /etc /usr/etc`
5890                         if $test -f "$tans"; then
5891                                 echo "(Attempting domain name extraction from $tans)"
5892                                 dflt=.`$sed -n -e 's/   / /g' \
5893                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
5894                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5895                                 case "$dflt" in
5896                                 .) dflt=.`$sed -n -e 's/        / /g' \
5897                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
5898                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5899                                         ;;
5900                                 esac
5901                         fi
5902                         ;;
5903                 esac
5904                 case "$dflt" in
5905                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
5906                         dflt=.`sh -c domainname 2>/dev/null`
5907                         case "$dflt" in
5908                         '') dflt='.';;
5909                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
5910                         esac
5911                         ;;
5912                 esac
5913                 case "$dflt" in
5914                 .) echo "(Lost all hope -- silly guess then)"
5915                         dflt='.uucp'
5916                         ;;
5917                 esac
5918                 $rm -f hosts
5919                 ;;
5920         *) dflt="$mydomain";;
5921         esac;;
5922 esac
5923 echo " "
5924 rp="What is your domain name?"
5925 . ./myread
5926 tans="$ans"
5927 case "$ans" in
5928 '') ;;
5929 .*) ;;
5930 *) tans=".$tans";;
5931 esac
5932 mydomain="$tans"
5933
5934 : translate upper to lower if necessary
5935 case "$mydomain" in
5936 *[A-Z]*)
5937         echo "(Normalizing case in your domain name)"
5938         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
5939         ;;
5940 esac
5941
5942 : a little sanity check here
5943 case "$phostname" in
5944 '') ;;
5945 *)
5946         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
5947         $myhostname$mydomain|$myhostname) ;;
5948         *)
5949                 case "$phostname" in
5950                 sed*)
5951                         echo "(That doesn't agree with your whoami.h file, by the way.)"
5952                         ;;
5953                 *)
5954                         echo "(That doesn't agree with your $phostname command, by the way.)"
5955                         ;;
5956                 esac
5957         ;;
5958         esac
5959         ;;
5960 esac
5961
5962 $cat <<EOM
5963
5964 I need to get your e-mail address in Internet format if possible, i.e.
5965 something like user@host.domain. Please answer accurately since I have
5966 no easy means to double check it. The default value provided below
5967 is most probably close to the reality but may not be valid from outside
5968 your organization...
5969
5970 EOM
5971 cont=x
5972 while test "$cont"; do
5973         case "$cf_email" in
5974         '') dflt="$cf_by@$myhostname$mydomain";;
5975         *) dflt="$cf_email";;
5976         esac
5977         rp='What is your e-mail address?'
5978         . ./myread
5979         cf_email="$ans"
5980         case "$cf_email" in
5981         *@*.*) cont='' ;;
5982         *)
5983                 rp='Address does not look like an Internet one.  Use it anyway?'
5984                 case "$fastread" in
5985                 yes) dflt=y ;;
5986                 *) dflt=n ;;
5987                 esac
5988                 . ./myread
5989                 case "$ans" in
5990                 y*) cont='' ;;
5991                 *) echo " " ;;
5992                 esac
5993                 ;;
5994         esac
5995 done
5996
5997 $cat <<EOM
5998
5999 If you or somebody else will be maintaining perl at your site, please
6000 fill in the correct e-mail address here so that they may be contacted
6001 if necessary. Currently, the "perlbug" program included with perl
6002 will send mail to this address in addition to perlbug@perl.com. You may
6003 enter "none" for no administrator.
6004
6005 EOM
6006 case "$perladmin" in
6007 '') dflt="$cf_email";;
6008 *) dflt="$perladmin";;
6009 esac
6010 rp='Perl administrator e-mail address'
6011 . ./myread
6012 perladmin="$ans"
6013
6014 : figure out how to guarantee perl startup
6015 case "$startperl" in
6016 '')
6017         case "$sharpbang" in
6018         *!)
6019                 $cat <<EOH
6020
6021 I can use the #! construct to start perl on your system. This will
6022 make startup of perl scripts faster, but may cause problems if you
6023 want to share those scripts and perl is not in a standard place
6024 ($binexp/perl) on all your platforms. The alternative is to force
6025 a shell by starting the script with a single ':' character.
6026
6027 EOH
6028                 dflt="$binexp/perl"
6029                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
6030                 . ./myread
6031                 case "$ans" in
6032                 none)   startperl=": # use perl";;
6033                 *)      startperl="#!$ans"
6034                         if $test 30 -lt `echo "$ans" | wc -c`; then
6035                                 $cat >&4 <<EOM
6036
6037 WARNING:  Some systems limit the #! command to 32 characters.
6038 If you experience difficulty running Perl scripts with #!, try
6039 installing Perl in a directory with a shorter pathname.
6040
6041 EOM
6042                         fi ;;
6043                 esac
6044                 ;;
6045         *) startperl=": # use perl"
6046                 ;;
6047         esac
6048         ;;
6049 esac
6050 echo "I'll use $startperl to start perl scripts."
6051
6052 : figure best path for perl in scripts
6053 case "$perlpath" in
6054 '')
6055         perlpath="$binexp/perl"
6056         case "$startperl" in
6057         *!*) ;;
6058         *)
6059                 $cat <<EOH
6060
6061 I will use the "eval 'exec'" idiom to start Perl on your system.
6062 I can use the full path of your Perl binary for this purpose, but
6063 doing so may cause problems if you want to share those scripts and
6064 Perl is not always in a standard place ($binexp/perl).
6065
6066 EOH
6067                 dflt="$binexp/perl"
6068                 rp="What path shall I use in \"eval 'exec'\"?"
6069                 . ./myread
6070                 perlpath="$ans"
6071                 ;;
6072         esac
6073         ;;
6074 esac
6075 case "$startperl" in
6076 *!*)    ;;
6077 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
6078 esac
6079
6080 : determine where public executable scripts go
6081 set scriptdir scriptdir
6082 eval $prefixit
6083 case "$scriptdir" in
6084 '')
6085         dflt="$bin"
6086         : guess some guesses
6087         $test -d /usr/share/scripts && dflt=/usr/share/scripts
6088         $test -d /usr/share/bin && dflt=/usr/share/bin
6089         $test -d /usr/local/script && dflt=/usr/local/script
6090         $test -d $prefixexp/script && dflt=$prefixexp/script
6091         set dflt
6092         eval $prefixup
6093         ;;
6094 *)  dflt="$scriptdir"
6095         ;;
6096 esac
6097 $cat <<EOM
6098  
6099 Some installations have a separate directory just for executable scripts so
6100 that they can mount it across multiple architectures but keep the scripts in
6101 one spot.  You might, for example, have a subdirectory of /usr/share for this.
6102 Or you might just lump your scripts in with all your other executables.
6103  
6104 EOM
6105 fn=d~
6106 rp='Where do you keep publicly executable scripts?'
6107 . ./getfile
6108 if $test "X$ansexp" != "X$scriptdirexp"; then
6109         installscript=''
6110 fi
6111 scriptdir="$ans"
6112 scriptdirexp="$ansexp"
6113 if $afs; then
6114         $cat <<EOM
6115
6116 Since you are running AFS, I need to distinguish the directory in which
6117 scripts reside from the directory in which they are installed (and from
6118 which they are presumably copied to the former directory by occult means).
6119
6120 EOM
6121         case "$installscript" in
6122         '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
6123         *) dflt="$installscript";;
6124         esac
6125         fn=de~
6126         rp='Where will public scripts be installed?'
6127         . ./getfile
6128         installscript="$ans"
6129 else
6130         installscript="$scriptdirexp"
6131 fi
6132
6133 : determine where site specific libraries go.
6134 : Usual default is /usr/local/lib/perl5/site_perl/$apiversion
6135 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6136 case "$prefix" in
6137 *perl*) set dflt sitelib lib/site_$prog/$apiversion ;;
6138 *)       set dflt sitelib lib/$package/site_$prog/$apiversion ;;
6139 esac
6140 eval $prefixit
6141 $cat <<EOM
6142
6143 The installation process will also create a directory for
6144 site-specific extensions and modules.  Some users find it convenient
6145 to place all local files in this directory rather than in the main
6146 distribution directory.
6147
6148 EOM
6149 fn=d~+
6150 rp='Pathname for the site-specific library files?'
6151 . ./getfile
6152 if $test "X$sitelibexp" != "X$ansexp"; then
6153         installsitelib=''
6154 fi
6155 sitelib="$ans"
6156 sitelibexp="$ansexp"
6157 if $afs; then
6158         $cat <<EOM
6159
6160 Since you are running AFS, I need to distinguish the directory in
6161 which site-specific files reside from the directory in which they are
6162 installed (and from which they are presumably copied to the former
6163 directory by occult means).
6164
6165 EOM
6166         case "$installsitelib" in
6167         '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;;
6168         *) dflt="$installsitelib";;
6169         esac
6170         fn=de~
6171         rp='Where will site-specific files be installed?'
6172         . ./getfile
6173         installsitelib="$ans"
6174 else
6175         installsitelib="$sitelibexp"
6176 fi
6177
6178 : determine where site specific architecture-dependent libraries go.
6179 : sitelib  default is /usr/local/lib/perl5/site_perl/$apiversion
6180 : sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
6181 : sitelib may have an optional trailing /share.
6182 tdflt=`echo $sitelib | $sed 's,/share$,,'`
6183 tdflt="$tdflt/$archname"
6184 set sitearch sitearch none
6185 eval $prefixit
6186 case "$sitearch" in
6187 '')     dflt="$tdflt" ;;
6188 *)      dflt="$sitearch" ;;
6189 esac
6190 $cat <<EOM
6191
6192 The installation process will also create a directory for
6193 architecture-dependent site-specific extensions and modules.
6194
6195 EOM
6196 fn=nd~+
6197 rp='Pathname for the site-specific architecture-dependent library files?'
6198 . ./getfile
6199 if $test "X$sitearchexp" != "X$ansexp"; then
6200         installsitearch=''
6201 fi
6202 sitearch="$ans"
6203 sitearchexp="$ansexp"
6204 if $afs; then
6205         $cat <<EOM
6206
6207 Since you are running AFS, I need to distinguish the directory in
6208 which site-specific architecture-dependent library files reside from
6209 the directory in which they are installed (and from which they are
6210 presumably copied to the former directory by occult means).
6211
6212 EOM
6213         case "$installsitearch" in
6214         '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;;
6215         *) dflt="$installsitearch";;
6216         esac
6217         fn=de~
6218         rp='Where will site-specific architecture-dependent files be installed?'
6219         . ./getfile
6220         installsitearch="$ans"
6221 else
6222         installsitearch="$sitearchexp"
6223 fi
6224
6225 cat <<EOM
6226
6227 Previous version of $package used the standard IO mechanisms as defined
6228 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
6229 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
6230 the default.  This abstraction layer can use AT&T's sfio (if you already
6231 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
6232 problems with some extension modules.  Using PerlIO with stdio is safe,
6233 but it is slower than plain stdio and therefore is not the default.
6234
6235 If this doesn't make any sense to you, just accept the default 'n'.
6236 EOM
6237 case "$useperlio" in
6238 $define|true|[yY]*)     dflt='y';;
6239 *) dflt='n';;
6240 esac
6241 rp='Use the experimental PerlIO abstraction layer?'
6242 . ./myread
6243 case "$ans" in
6244 y|Y) 
6245         val="$define"
6246         ;;     
6247 *)      
6248         echo "Ok, doing things the stdio way"
6249         val="$undef"
6250         ;;
6251 esac
6252 set useperlio
6253 eval $setvar 
6254
6255 : Check how to convert floats to strings.
6256 if test "X$d_Gconvert" = X; then
6257         echo " "
6258         echo "Checking for an efficient way to convert floats to strings."
6259         $cat >try.c <<'EOP'
6260 #ifdef TRY_gconvert
6261 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
6262 char *myname = "gconvert";
6263 #endif
6264 #ifdef TRY_gcvt
6265 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
6266 char *myname = "gcvt";
6267 #endif
6268 #ifdef TRY_sprintf
6269 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
6270 char *myname = "sprintf";
6271 #endif
6272
6273 #include <stdio.h>
6274
6275 int
6276 checkit(expect, got)
6277 char *expect;
6278 char *got;
6279 {
6280     if (strcmp(expect, got)) {
6281                 printf("%s oddity:  Expected %s, got %s\n",
6282                         myname, expect, got);
6283                 exit(1);
6284         }
6285 }
6286
6287 int main()
6288
6289         char buf[64]; 
6290         buf[63] = '\0';
6291
6292         /* This must be 1st test on (which?) platform */
6293         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
6294         Gconvert(0.1, 8, 0, buf);
6295         checkit("0.1", buf);
6296
6297         Gconvert(1.0, 8, 0, buf); 
6298         checkit("1", buf);
6299
6300         Gconvert(0.0, 8, 0, buf); 
6301         checkit("0", buf);
6302
6303         Gconvert(-1.0, 8, 0, buf); 
6304         checkit("-1", buf);
6305
6306         /* Some Linux gcvt's give 1.e+5 here. */
6307         Gconvert(100000.0, 8, 0, buf); 
6308         checkit("100000", buf);
6309         
6310         /* Some Linux gcvt's give -1.e+5 here. */
6311         Gconvert(-100000.0, 8, 0, buf); 
6312         checkit("-100000", buf);
6313
6314         exit(0);
6315 }
6316 EOP
6317         case "$d_Gconvert" in
6318         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
6319         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
6320         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
6321         *) xxx_list='gconvert gcvt sprintf' ;;
6322         esac
6323
6324         for xxx_convert in $xxx_list; do
6325                 echo "Trying $xxx_convert"
6326                 $rm -f try try$_o
6327                 set try -DTRY_$xxx_convert
6328                 if eval $compile; then
6329                         echo "$xxx_convert" found. >&4
6330                         if ./try; then
6331                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
6332                                 break;
6333                         else
6334                                 echo "...But $xxx_convert didn't work as I expected."
6335                         fi
6336                 else
6337                         echo "$xxx_convert NOT found." >&4
6338                 fi
6339         done
6340                 
6341         case "$xxx_convert" in
6342         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
6343         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
6344         *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
6345         esac
6346 fi
6347
6348 : Initialize h_fcntl
6349 h_fcntl=false
6350
6351 : Initialize h_sysfile
6352 h_sysfile=false
6353
6354 : access call always available on UNIX
6355 set access d_access
6356 eval $inlibc
6357
6358 : locate the flags for 'access()'
6359 case "$d_access" in
6360 "$define")
6361         echo " "
6362         $cat >access.c <<'EOCP'
6363 #include <sys/types.h>
6364 #ifdef I_FCNTL
6365 #include <fcntl.h>
6366 #endif
6367 #ifdef I_SYS_FILE
6368 #include <sys/file.h>
6369 #endif
6370 #ifdef I_UNISTD
6371 #include <unistd.h>
6372 #endif
6373 int main() {
6374         exit(R_OK);
6375 }
6376 EOCP
6377         : check sys/file.h first, no particular reason here
6378         if $test `./findhdr sys/file.h` && \
6379                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
6380                 h_sysfile=true;
6381                 echo "<sys/file.h> defines the *_OK access constants." >&4
6382         elif $test `./findhdr fcntl.h` && \
6383                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
6384                 h_fcntl=true;
6385                 echo "<fcntl.h> defines the *_OK access constants." >&4
6386         elif $test `./findhdr unistd.h` && \
6387                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
6388                 echo "<unistd.h> defines the *_OK access constants." >&4
6389         else
6390                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
6391         fi
6392         ;;
6393 esac
6394 $rm -f access*
6395
6396 : see if accessx exists
6397 set accessx d_accessx
6398 eval $inlibc
6399
6400 : see if alarm exists
6401 set alarm d_alarm
6402 eval $inlibc
6403
6404 : Look for GNU-cc style attribute checking
6405 echo " "
6406 echo "Checking whether your compiler can handle __attribute__ ..." >&4
6407 $cat >attrib.c <<'EOCP'
6408 #include <stdio.h>
6409 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
6410 EOCP
6411 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
6412         if $contains 'warning' attrib.out >/dev/null 2>&1; then
6413                 echo "Your C compiler doesn't fully support __attribute__."
6414                 val="$undef"
6415         else
6416                 echo "Your C compiler supports __attribute__."
6417                 val="$define"
6418         fi
6419 else
6420         echo "Your C compiler doesn't seem to understand __attribute__ at all."
6421         val="$undef"
6422 fi
6423 set d_attribut
6424 eval $setvar
6425 $rm -f attrib*
6426
6427 : see if bcmp exists
6428 set bcmp d_bcmp
6429 eval $inlibc
6430
6431 : see if bcopy exists
6432 set bcopy d_bcopy
6433 eval $inlibc
6434
6435 : see if this is a unistd.h system
6436 set unistd.h i_unistd
6437 eval $inhdr
6438
6439 : see if getpgrp exists
6440 set getpgrp d_getpgrp
6441 eval $inlibc
6442
6443 case "$d_getpgrp" in
6444 "$define")
6445         echo " "
6446         echo "Checking to see which flavor of getpgrp is in use..."
6447         $cat >set.c <<EOP
6448 #$i_unistd I_UNISTD
6449 #include <sys/types.h>
6450 #ifdef I_UNISTD
6451 #  include <unistd.h>
6452 #endif
6453 int main()
6454 {
6455         if (getuid() == 0) {
6456                 printf("(I see you are running Configure as super-user...)\n");
6457                 setuid(1);
6458         }
6459 #ifdef TRY_BSD_PGRP
6460         if (getpgrp(1) == 0)
6461                 exit(0);
6462 #else
6463         if (getpgrp() > 0)
6464                 exit(0);
6465 #endif
6466         exit(1);
6467 }
6468 EOP
6469         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6470                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
6471                 val="$define"
6472         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6473                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
6474                 val="$undef"
6475         else
6476                 echo "I can't seem to compile and run the test program."
6477                 if ./usg; then
6478                         xxx="a USG one, i.e. you use getpgrp()."
6479                 else
6480                         # SVR4 systems can appear rather BSD-ish.
6481                         case "$i_unistd" in
6482                         $undef)
6483                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
6484                                 val="$define"
6485                                 ;;
6486                         $define)
6487                                 xxx="probably a USG one, i.e. you use getpgrp()."
6488                                 val="$undef"
6489                                 ;;
6490                         esac
6491                 fi
6492                 echo "Assuming your getpgrp is $xxx" >&4
6493         fi
6494         ;;
6495 *) val="$undef";;
6496 esac
6497 set d_bsdgetpgrp
6498 eval $setvar
6499 $rm -f set set.c
6500
6501 : see if setpgrp exists
6502 set setpgrp d_setpgrp
6503 eval $inlibc
6504
6505 case "$d_setpgrp" in
6506 "$define")
6507         echo " "
6508         echo "Checking to see which flavor of setpgrp is in use..."
6509         $cat >set.c <<EOP
6510 #$i_unistd I_UNISTD
6511 #include <sys/types.h>
6512 #ifdef I_UNISTD
6513 #  include <unistd.h>
6514 #endif
6515 int main()
6516 {
6517         if (getuid() == 0) {
6518                 printf("(I see you are running Configure as super-user...)\n");
6519                 setuid(1);
6520         }
6521 #ifdef TRY_BSD_PGRP
6522         if (-1 == setpgrp(1, 1))
6523                 exit(0);
6524 #else
6525         if (setpgrp() != -1)
6526                 exit(0);
6527 #endif
6528         exit(1);
6529 }
6530 EOP
6531         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6532                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
6533                 val="$define"
6534         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6535                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
6536                 val="$undef"
6537         else
6538                 echo "(I can't seem to compile and run the test program.)"
6539                 if ./usg; then
6540                         xxx="a USG one, i.e. you use setpgrp()."
6541                 else
6542                         # SVR4 systems can appear rather BSD-ish.
6543                         case "$i_unistd" in
6544                         $undef)
6545                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
6546                                 val="$define"
6547                                 ;;
6548                         $define)
6549                                 xxx="probably a USG one, i.e. you use setpgrp()."
6550                                 val="$undef"
6551                                 ;;
6552                         esac
6553                 fi
6554                 echo "Assuming your setpgrp is $xxx" >&4
6555         fi
6556         ;;
6557 *) val="$undef";;
6558 esac
6559 set d_bsdsetpgrp
6560 eval $setvar
6561 $rm -f set set.c
6562 : see if bzero exists
6563 set bzero d_bzero
6564 eval $inlibc
6565
6566 : check for lengths of integral types
6567 echo " "
6568 case "$intsize" in
6569 '')
6570         echo "Checking to see how big your integers are..." >&4
6571         $cat >intsize.c <<'EOCP'
6572 #include <stdio.h>
6573 int main()
6574 {
6575         printf("intsize=%d;\n", sizeof(int));
6576         printf("longsize=%d;\n", sizeof(long));
6577         printf("shortsize=%d;\n", sizeof(short));
6578         exit(0);
6579 }
6580 EOCP
6581         set intsize
6582         if eval $compile_ok && ./intsize > /dev/null; then
6583                 eval `./intsize`
6584                 echo "Your integers are $intsize bytes long."
6585                 echo "Your long integers are $longsize bytes long."
6586                 echo "Your short integers are $shortsize bytes long."
6587         else
6588                 $cat >&4 <<EOM
6589 !
6590 Help! I can't compile and run the intsize test program: please enlighten me!
6591 (This is probably a misconfiguration in your system or libraries, and
6592 you really ought to fix it.  Still, I'll try anyway.)
6593 !
6594 EOM
6595                 dflt=4
6596                 rp="What is the size of an integer (in bytes)?"
6597                 . ./myread
6598                 intsize="$ans"
6599                 dflt=$intsize
6600                 rp="What is the size of a long integer (in bytes)?"
6601                 . ./myread
6602                 longsize="$ans"
6603                 dflt=2
6604                 rp="What is the size of a short integer (in bytes)?"
6605                 . ./myread
6606                 shortsize="$ans"
6607         fi
6608         ;;
6609 esac
6610 $rm -f intsize intsize.*
6611
6612 : see if signal is declared as pointer to function returning int or void
6613 echo " "
6614 xxx=`./findhdr signal.h`
6615 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
6616 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
6617         echo "You have int (*signal())() instead of void." >&4
6618         val="$undef"
6619 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
6620         echo "You have void (*signal())()." >&4
6621         val="$define"
6622 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
6623         echo "You have int (*signal())() instead of void." >&4
6624         val="$undef"
6625 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
6626         echo "You have void (*signal())()." >&4
6627         val="$define"
6628 else
6629         case "$d_voidsig" in
6630         '')
6631         echo "I can't determine whether signal handler returns void or int..." >&4
6632                 dflt=void
6633                 rp="What type does your signal handler return?"
6634                 . ./myread
6635                 case "$ans" in
6636                 v*) val="$define";;
6637                 *) val="$undef";;
6638                 esac;;
6639         "$define")
6640                 echo "As you already told me, signal handler returns void." >&4
6641                 val="$define"
6642                 ;;
6643         *)      echo "As you already told me, signal handler returns int." >&4
6644                 val="$undef"
6645                 ;;
6646         esac
6647 fi
6648 set d_voidsig
6649 eval $setvar
6650 case "$d_voidsig" in
6651 "$define") signal_t="void";;
6652 *) signal_t="int";;
6653 esac
6654 $rm -f $$.tmp
6655
6656 : check for ability to cast large floats to 32-bit ints.
6657 echo " "
6658 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
6659 if $test "$intsize" -ge 4; then
6660         xxx=int
6661 else
6662         xxx=long
6663 fi
6664 $cat >try.c <<EOCP
6665 #include <stdio.h>
6666 #include <sys/types.h>
6667 #include <signal.h>
6668 $signal_t blech(s) int s; { exit(3); }
6669 int main()
6670 {
6671         $xxx i32;
6672         double f, g;
6673         int result = 0;
6674         char str[16];
6675         signal(SIGFPE, blech);
6676
6677         /* Don't let compiler optimize the test away.  Store the number 
6678            in a writable string for gcc to pass to sscanf under HP/UX.
6679         */
6680         sprintf(str, "2147483647");
6681         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
6682         g = 10 * f;
6683         i32  = ($xxx) g;
6684
6685         /* x86 processors will probably give 0x8000 0000, which is a
6686        sign change.  We don't want that.  We want to mimic SPARC
6687            behavior here, which is to preserve the sign and give
6688            back 0x7fff ffff.
6689         */
6690         if (i32 != ($xxx) f)
6691                 result |= 1;
6692         exit(result);
6693 }
6694 EOCP
6695 set try
6696 if eval $compile_ok; then
6697         ./try
6698         yyy=$?
6699 else
6700         echo "(I can't seem to compile the test program--assuming it can't)"
6701         yyy=1
6702 fi
6703 case "$yyy" in
6704 0)      val="$define"
6705         echo "Yup, it can."
6706         ;;
6707 *)      val="$undef"
6708         echo "Nope, it can't."
6709         ;;
6710 esac
6711 set d_casti32
6712 eval $setvar
6713 $rm -f try try.*
6714
6715 : check for ability to cast negative floats to unsigned
6716 echo " "
6717 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
6718 $cat >try.c <<EOCP
6719 #include <stdio.h>
6720 #include <sys/types.h>
6721 #include <signal.h>
6722 $signal_t blech(s) int s; { exit(7); }
6723 $signal_t blech_in_list(s) int s; { exit(4); }
6724 unsigned long dummy_long(p) unsigned long p; { return p; }
6725 unsigned int dummy_int(p) unsigned int p; { return p; }
6726 unsigned short dummy_short(p) unsigned short p; { return p; }
6727 int main()
6728 {
6729         double f;
6730         unsigned long along;
6731         unsigned int aint;
6732         unsigned short ashort;
6733         int result = 0;
6734         char str[16];
6735         
6736         /* Frustrate gcc-2.7.2's optimizer which failed this test with
6737            a direct f = -123. assignment.  gcc-2.8.0 reportedly
6738            optimized the whole file away
6739         */
6740         /* Store the number in a writable string for gcc to pass to 
6741            sscanf under HP/UX.
6742         */
6743         sprintf(str, "-123");
6744         sscanf(str, "%lf", &f);  /* f = -123.; */
6745
6746         signal(SIGFPE, blech);
6747         along = (unsigned long)f;
6748         aint = (unsigned int)f;
6749         ashort = (unsigned short)f;
6750         if (along != (unsigned long)-123)
6751                 result |= 1;
6752         if (aint != (unsigned int)-123)
6753                 result |= 1;
6754         if (ashort != (unsigned short)-123)
6755                 result |= 1;
6756         sprintf(str, "1073741824.");
6757         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
6758         f = f + f;
6759         along = 0;
6760         along = (unsigned long)f;
6761         if (along != 0x80000000)
6762                 result |= 2;
6763         f -= 1.;
6764         along = 0;
6765         along = (unsigned long)f;
6766         if (along != 0x7fffffff)
6767                 result |= 1;
6768         f += 2.;
6769         along = 0;
6770         along = (unsigned long)f;
6771         if (along != 0x80000001)
6772                 result |= 2;
6773         if (result)
6774                 exit(result);
6775         signal(SIGFPE, blech_in_list);
6776         sprintf(str, "123.");
6777         sscanf(str, "%lf", &f);  /* f = 123.; */
6778         along = dummy_long((unsigned long)f);
6779         aint = dummy_int((unsigned int)f);
6780         ashort = dummy_short((unsigned short)f);
6781         if (along != (unsigned long)123)
6782                 result |= 4;
6783         if (aint != (unsigned int)123)
6784                 result |= 4;
6785         if (ashort != (unsigned short)123)
6786                 result |= 4;
6787         exit(result);
6788
6789 }
6790 EOCP
6791 set try
6792 if eval $compile_ok; then
6793         ./try
6794         castflags=$?
6795 else
6796         echo "(I can't seem to compile the test program--assuming it can't)"
6797         castflags=7
6798 fi
6799 case "$castflags" in
6800 0)      val="$define"
6801         echo "Yup, it can."
6802         ;;
6803 *)      val="$undef"
6804         echo "Nope, it can't."
6805         ;;
6806 esac
6807 set d_castneg
6808 eval $setvar
6809 $rm -f try.*
6810
6811 : see if vprintf exists
6812 echo " "
6813 if set vprintf val -f d_vprintf; eval $csym; $val; then
6814         echo 'vprintf() found.' >&4
6815         val="$define"
6816         $cat >vprintf.c <<'EOF'
6817 #include <varargs.h>
6818
6819 int main() { xxx("foo"); }
6820
6821 xxx(va_alist)
6822 va_dcl
6823 {
6824         va_list args;
6825         char buf[10];
6826
6827         va_start(args);
6828         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
6829 }
6830 EOF
6831         set vprintf
6832         if eval $compile && ./vprintf; then
6833                 echo "Your vsprintf() returns (int)." >&4
6834                 val2="$undef"
6835         else
6836                 echo "Your vsprintf() returns (char*)." >&4
6837                 val2="$define"
6838         fi
6839 else
6840         echo 'vprintf() NOT found.' >&4
6841                 val="$undef"
6842                 val2="$undef"
6843 fi
6844 set d_vprintf
6845 eval $setvar
6846 val=$val2
6847 set d_charvspr
6848 eval $setvar
6849
6850 : see if chown exists
6851 set chown d_chown
6852 eval $inlibc
6853
6854 : see if chroot exists
6855 set chroot d_chroot
6856 eval $inlibc
6857
6858 : see if chsize exists
6859 set chsize d_chsize
6860 eval $inlibc
6861
6862 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
6863 while $test $# -ge 2; do
6864         case "$1" in
6865         $define) echo "#include <$2>";;
6866         esac ;
6867     shift 2;
6868 done > try.c;
6869 echo "int main () { struct $struct foo; foo.$field = 0; }" >> try.c;
6870 if eval $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
6871         val="$define";
6872 else
6873         val="$undef";
6874 fi;
6875 set $varname;
6876 eval $setvar;
6877 $rm -f try.c try.o'
6878
6879 : see if this is a sys/uio.h system
6880 set sys/uio.h i_sysuio
6881 eval $inhdr
6882
6883 echo "Checking to see if your system supports struct iovec..." >&4
6884 set d_iovec_s iovec iov_base $i_sysuio sys/uio.h
6885 eval $hasfield
6886 case "$d_iovec_s" in
6887 "$define")      echo "Yup, it does." >&4
6888                 ;;
6889 *)              echo "Nope, it doesn't." >&4
6890                 ;;
6891 esac
6892
6893 socketlib=''
6894 sockethdr=''
6895 : see whether socket exists
6896 echo " "
6897 $echo $n "Hmm... $c" >&4
6898 if set socket val -f d_socket; eval $csym; $val; then
6899         echo "Looks like you have Berkeley networking support." >&4
6900         d_socket="$define"
6901         if set setsockopt val -f; eval $csym; $val; then
6902                 d_oldsock="$undef"
6903         else
6904                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
6905                 d_oldsock="$define"
6906         fi
6907 else
6908         if $contains socklib libc.list >/dev/null 2>&1; then
6909                 echo "Looks like you have Berkeley networking support." >&4
6910                 d_socket="$define"
6911                 : we will have to assume that it supports the 4.2 BSD interface
6912                 d_oldsock="$undef"
6913         else
6914                 echo "You don't have Berkeley networking in libc$_a..." >&4
6915                 if test "X$d_socket" = "X$define"; then
6916                    echo "...but you seem to believe that you have sockets." >&4
6917                 else
6918                         for net in net socket
6919                         do
6920                                 if test -f /usr/lib/lib$net$_a; then
6921                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
6922                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
6923                                         if $contains socket libc.list >/dev/null 2>&1; then
6924                                                 d_socket="$define"
6925                                                 socketlib="-l$net"
6926                                                 case "$net" in
6927                                                 net)
6928                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
6929                                                         sockethdr="-I/usr/netinclude"
6930                                                         ;;
6931                                                 esac
6932                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
6933                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
6934                                                         d_oldsock="$undef"
6935                                                 else
6936                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
6937                                                         d_oldsock="$define"
6938                                                 fi
6939                                                 break
6940                                         fi
6941                                 fi
6942                         done
6943                         if test "X$d_socket" != "X$define"; then
6944                            echo "or anywhere else I see." >&4
6945                            d_socket="$undef"
6946                            d_oldsock="$undef"
6947                         fi
6948                 fi
6949         fi
6950 fi
6951
6952 : see if socketpair exists
6953 set socketpair d_sockpair
6954 eval $inlibc
6955
6956
6957 echo " "
6958 echo "Checking the availability of certain socket constants..." >& 4
6959 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
6960         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
6961         $cat >try.c <<EOF
6962 #include <sys/types.h>
6963 #include <sys/socket.h>
6964 int main() {
6965     int i = $ENUM;
6966 }
6967 EOF
6968         val="$undef"
6969         set try; if eval $compile; then
6970                 val="$define"
6971         fi
6972         set d_${enum}; eval $setvar
6973         $rm -f try.c try
6974 done
6975
6976 set sendmsg d_sendmsg
6977 eval $inlibc
6978
6979 set recvmsg d_recvmsg
6980 eval $inlibc
6981
6982 echo " "
6983 $echo $n "Checking to see if your system supports struct msghdr...$c" >&4
6984 set d_msghdr_s msghdr msg_name define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
6985 eval $hasfield
6986 case "$d_msghdr_s" in
6987 "$define")      echo "Yup, it does." >&4
6988                 ;;
6989 *)              echo "Nope, it doesn't." >&4
6990                 ;;
6991 esac
6992
6993 $echo $n "Checking to see if your system supports struct cmsghdr...$c" >&4
6994 set d_cmsghdr_s cmsghdr cmsg_len define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
6995 eval $hasfield
6996 case "$d_cmsghdr_s" in
6997 "$define")      echo "Yup, it does." >&4
6998                 ;;
6999 *)              echo "Nope, it doesn't." >&4
7000                 ;;
7001 esac
7002
7003 : check for const keyword
7004 echo " "
7005 echo 'Checking to see if your C compiler knows about "const"...' >&4
7006 $cat >const.c <<'EOCP'
7007 typedef struct spug { int drokk; } spug;
7008 int main()
7009 {
7010         const char *foo;
7011         const spug y;
7012 }
7013 EOCP
7014 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
7015         val="$define"
7016         echo "Yup, it does."
7017 else
7018         val="$undef"
7019         echo "Nope, it doesn't."
7020 fi
7021 set d_const
7022 eval $setvar
7023
7024 : see if crypt exists
7025 echo " "
7026 if set crypt val -f d_crypt; eval $csym; $val; then
7027         echo 'crypt() found.' >&4
7028         val="$define"
7029         cryptlib=''
7030 else
7031         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
7032         if $test -z "$cryptlib"; then
7033                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
7034         else
7035                 cryptlib=-lcrypt
7036         fi
7037         if $test -z "$cryptlib"; then
7038                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
7039         else
7040                 cryptlib=-lcrypt
7041         fi
7042         if $test -z "$cryptlib"; then
7043                 cryptlib=`./loc libcrypt$_a "" $libpth`
7044         else
7045                 cryptlib=-lcrypt
7046         fi
7047         if $test -z "$cryptlib"; then
7048                 echo 'crypt() NOT found.' >&4
7049                 val="$undef"
7050         else
7051                 val="$define"
7052         fi
7053 fi
7054 set d_crypt
7055 eval $setvar
7056
7057 : get csh whereabouts
7058 case "$csh" in
7059 'csh') val="$undef" ;;
7060 *) val="$define" ;;
7061 esac
7062 set d_csh
7063 eval $setvar
7064 : Respect a hint or command line value for full_csh.
7065 case "$full_csh" in
7066 '') full_csh=$csh ;;
7067 esac
7068
7069 : see if cuserid exists
7070 set cuserid d_cuserid
7071 eval $inlibc
7072
7073 : see if this is a limits.h system
7074 set limits.h i_limits
7075 eval $inhdr
7076
7077 : see if this is a float.h system
7078 set float.h i_float
7079 eval $inhdr
7080
7081 : See if number of significant digits in a double precision number is known
7082 echo " "
7083 $cat >dbl_dig.c <<EOM
7084 #$i_limits I_LIMITS
7085 #$i_float I_FLOAT
7086 #ifdef I_LIMITS
7087 #include <limits.h>
7088 #endif
7089 #ifdef I_FLOAT
7090 #include <float.h>
7091 #endif
7092 #ifdef DBL_DIG
7093 printf("Contains DBL_DIG");
7094 #endif
7095 EOM
7096 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
7097 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
7098         echo "DBL_DIG found." >&4
7099         val="$define"
7100 else
7101         echo "DBL_DIG NOT found." >&4
7102         val="$undef"
7103 fi
7104 $rm -f dbl_dig.?
7105 set d_dbl_dig
7106 eval $setvar
7107
7108
7109 if $test X"$use64bits" = X"$define"; then
7110         : see if dbminit64 exists
7111         set dbminit64 d_dbminit64
7112         eval $inlibc
7113
7114         : see if dbmclose64 exists
7115         set dbmclose64 d_dbmclose64
7116         eval $inlibc
7117
7118         : see if fetch64 exists
7119         set fetch64 d_fetch64
7120         eval $inlibc
7121
7122         : see if store64 exists
7123         set store64 d_store64
7124         eval $inlibc
7125
7126         : see if delete64 exists
7127         set delete64 d_delete64
7128         eval $inlibc
7129
7130         : see if firstkey64 exists
7131         set firstkey64 d_firstkey64
7132         eval $inlibc
7133
7134         : see if nextkey64 exists
7135         set nextkey64 d_nextkey64
7136         eval $inlibc
7137 else
7138         val="$undef"
7139         for xxx in d_dbminit64 d_dbmclose64 d_fetch64 d_store64 d_delete64 d_firstkey64 d_nextkey64
7140         do
7141                 set $xxx
7142                 eval $setvar
7143         done
7144 fi
7145
7146 : see if difftime exists
7147 set difftime d_difftime
7148 eval $inlibc
7149
7150 : see if sys/stat.h is available
7151 set sys/stat.h i_sysstat
7152 eval $inhdr
7153
7154 : see if this is a dirent system
7155 echo " "
7156 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
7157         val="$define"
7158         echo "<dirent.h> found." >&4
7159 else
7160         val="$undef"
7161         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
7162                 echo "<sys/dir.h> found." >&4
7163                 echo " "
7164         else
7165                 xinc=`./findhdr sys/ndir.h`
7166         fi
7167         echo "<dirent.h> NOT found." >&4
7168 fi
7169 set i_dirent
7170 eval $setvar
7171
7172 : Look for type of directory structure.
7173 echo " "
7174 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7175
7176 case "$direntrytype" in
7177 ''|' ')
7178         case "$i_dirent" in
7179         $define) guess1='struct dirent' ;;
7180         *) guess1='struct direct'  ;;
7181         esac
7182         ;;
7183 *)      guess1="$direntrytype"
7184         ;;
7185 esac
7186
7187 case "$guess1" in
7188 'struct dirent') guess2='struct direct' ;;
7189 *) guess2='struct dirent' ;;
7190 esac
7191                 
7192 if $contains "$guess1" try.c >/dev/null 2>&1; then
7193         direntrytype="$guess1"
7194         echo "Your directory entries are $direntrytype." >&4
7195 elif $contains "$guess2" try.c >/dev/null 2>&1; then
7196         direntrytype="$guess2"
7197         echo "Your directory entries seem to be $direntrytype." >&4
7198 else
7199         echo "I don't recognize your system's directory entries." >&4
7200         rp="What type is used for directory entries on this system?"
7201         dflt="$guess1"
7202         . ./myread
7203         direntrytype="$ans"
7204 fi
7205 $rm -f try.c
7206
7207
7208 : see if the directory entry stores field length
7209 echo " "
7210 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7211 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
7212         echo "Good, your directory entry keeps length information in d_namlen." >&4
7213         val="$define"
7214 else
7215         echo "Your directory entry does not know about the d_namlen field." >&4
7216         val="$undef"
7217 fi
7218 set d_dirnamlen
7219 eval $setvar
7220 $rm -f try.c
7221
7222
7223 if $test X"$use64bits" = X"$define"; then
7224         : see if fstat64 exists
7225         set fstat64 d_fstat64
7226         eval $inlibc
7227
7228         : see if ftruncate64 exists
7229         set ftruncate64 d_ftruncate64
7230         eval $inlibc
7231
7232         : see if lockf64 exists
7233         set lockf64 d_lockf64
7234         eval $inlibc
7235
7236         : see if lseek64 exists
7237         set lseek64 d_lseek64
7238         eval $inlibc
7239
7240         : see if lstat64 exists
7241         set lstat64 d_lstat64
7242         eval $inlibc
7243
7244         : see if open64 exists
7245         set open64 d_open64
7246         eval $inlibc
7247
7248         : see if opendir64 exists
7249         set opendir64 d_opendir64
7250         eval $inlibc
7251
7252         : see if readdir64 exists
7253         set readdir64 d_readdir64
7254         eval $inlibc
7255
7256         : see if seekdir64 exists
7257         set seekdir64 d_seekdir64
7258         eval $inlibc
7259
7260         : see if stat64 exists
7261         set stat64 d_stat64
7262         eval $inlibc
7263
7264         : see if telldir64 exists
7265         set telldir64 d_telldir64
7266         eval $inlibc
7267
7268         : see if truncate64 exists
7269         set truncate64 d_truncate64
7270         eval $inlibc
7271
7272         : check for off64_t
7273         echo " "
7274         echo $n "Checking to see if your system supports off64_t...$c" >&4
7275         $cat >try.c <<EOCP
7276 #include <sys/types.h>
7277 off64_t foo() { off64_t x; x = 7; return x; }'
7278 EOCP
7279         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7280                 val="$define"
7281                 echo " Yup, it does." >&4
7282         else
7283                 val="$undef"
7284                 echo " Nope, it doesn't." >&4
7285         fi
7286         $rm -f try.*
7287         set d_off64t
7288         eval $setvar
7289
7290         : check for ino64_t
7291         echo " "
7292         echo $n "Checking to see if your system supports ino64_t...$c" >&4
7293         val="$undef"
7294         case "$i_sysstat" in
7295         "$define" )
7296                 $cat >try.c <<EOCP
7297 #include <sys/types.h>
7298 #include <sys/stat.h>
7299 ino64_t foo() { ino64_t x; x = 7; return x; }'
7300 EOCP
7301                 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7302                         val="$define"
7303                 fi
7304                 $rm -f try.*
7305                 ;;
7306         esac
7307         if $test "X$val" = X"$define"; then
7308                 echo " Yup, it does." >&4
7309         else
7310                 echo " Nope, it doesn't." >&4
7311         fi
7312         set d_ino64t
7313         eval $setvar
7314
7315         : check for struct flock64
7316         echo " "
7317         echo "Checking to see if your system supports struct flock64..." >&4
7318         if $h_fcntl; then
7319                 set d_flock64_s flock64 l_len define fcntl.h
7320                 eval $hasfield
7321         else
7322                 val="$undef"
7323                 set d_flock64_s
7324                 eval $setvar
7325         fi
7326         case "$d_flock64_s" in
7327         "$define")      echo "Yup, it does." >&4
7328                         ;;
7329         *)              echo "Nope, it doesn't." >&4
7330                         ;;
7331         esac
7332
7333         : check for struct dirent64
7334         echo " "
7335         echo "Checking to see if your system supports struct dirent64..." >&4
7336         set d_dirent64_s dirent64 d_off $i_dirent dirent.h
7337         eval $hasfield
7338         case "$d_dirent64_s" in
7339         "$define")      echo "Yup, it does." >&4
7340                         ;;
7341         *)              echo "Nope, it doesn't." >&4
7342                         ;;
7343         esac
7344
7345 else
7346         val="$undef"
7347         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_off64t d_ino64t d_flock64_s d_dirent64_s
7348         do
7349                 set $xxx
7350                 eval $setvar
7351         done
7352 fi
7353
7354 : see if dlerror exists
7355 xxx_runnm="$runnm"
7356 runnm=false
7357 set dlerror d_dlerror
7358 eval $inlibc
7359 runnm="$xxx_runnm"
7360
7361 : see if dlfcn is available
7362 set dlfcn.h i_dlfcn
7363 eval $inhdr
7364
7365 case "$usedl" in
7366 $define|y|true)
7367         $cat << EOM
7368
7369 On a few systems, the dynamically loaded modules that perl generates and uses
7370 will need a different extension than shared libs. The default will probably
7371 be appropriate.
7372
7373 EOM
7374         case "$dlext" in
7375         '')     dflt="$so" ;;
7376         *)      dflt="$dlext" ;;
7377         esac
7378         rp='What is the extension of dynamically loaded modules'
7379         . ./myread
7380         dlext="$ans"
7381         ;;
7382 *)
7383         dlext="none"
7384         ;;
7385 esac
7386
7387 : Check if dlsym need a leading underscore
7388 echo " "
7389 val="$undef"
7390
7391 case "$dlsrc" in
7392 dl_dlopen.xs)
7393         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
7394         $cat >dyna.c <<'EOM'
7395 fred () { }
7396 EOM
7397
7398 $cat >fred.c<<EOM
7399
7400 #include <stdio.h>
7401 #$i_dlfcn I_DLFCN
7402 #ifdef I_DLFCN
7403 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
7404 #else
7405 #include <sys/types.h>
7406 #include <nlist.h>
7407 #include <link.h>
7408 #endif
7409
7410 extern int fred() ;
7411
7412 int main()
7413 {
7414     void * handle ;
7415     void * symbol ;
7416 #ifndef RTLD_LAZY
7417     int mode = 1 ;
7418 #else
7419     int mode = RTLD_LAZY ;
7420 #endif
7421     handle = dlopen("./dyna.$dlext", mode) ;
7422     if (handle == NULL) {
7423         printf ("1\n") ;
7424         fflush (stdout) ;
7425         exit(0);
7426     }
7427     symbol = dlsym(handle, "fred") ;
7428     if (symbol == NULL) {
7429         /* try putting a leading underscore */
7430         symbol = dlsym(handle, "_fred") ;
7431         if (symbol == NULL) {
7432             printf ("2\n") ;
7433             fflush (stdout) ;
7434             exit(0);
7435         }
7436         printf ("3\n") ;
7437     }
7438     else
7439         printf ("4\n") ;
7440     fflush (stdout) ;
7441     exit(0);
7442 }
7443 EOM
7444         : Call the object file tmp-dyna.o in case dlext=o.
7445         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
7446                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
7447                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
7448                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
7449                 xxx=`./fred`
7450                 case $xxx in
7451                 1)      echo "Test program failed using dlopen." >&4
7452                         echo "Perhaps you should not use dynamic loading." >&4;;
7453                 2)      echo "Test program failed using dlsym." >&4
7454                         echo "Perhaps you should not use dynamic loading." >&4;;
7455                 3)      echo "dlsym needs a leading underscore" >&4
7456                         val="$define" ;;
7457                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
7458                 esac
7459         else
7460                 echo "I can't compile and run the test program." >&4
7461         fi
7462         ;;
7463 esac
7464                 
7465 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
7466
7467 set d_dlsymun
7468 eval $setvar
7469
7470 hasproto='varname=$1; func=$2; shift; shift;
7471 while $test $# -ge 2; do
7472         case "$1" in
7473         $define) echo "#include <$2>";;
7474         esac ;
7475     shift 2;
7476 done > try.c;
7477 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
7478 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
7479         echo "$func() prototype found.";
7480         val="$define";
7481 else
7482         echo "$func() prototype NOT found.";
7483         val="$undef";
7484 fi;
7485 set $varname;
7486 eval $setvar;
7487 $rm -f try.c tryout.c'
7488
7489 : see if prototype for drand48 is available
7490 echo " "
7491 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
7492 eval $hasproto
7493
7494 : see if dup2 exists
7495 set dup2 d_dup2
7496 eval $inlibc
7497
7498 : see if eaccess exists
7499 set eaccess d_eaccess
7500 eval $inlibc
7501
7502 : see if endgrent exists
7503 set endgrent d_endgrent
7504 eval $inlibc
7505
7506 : see if endhostent exists
7507 set endhostent d_endhent
7508 eval $inlibc
7509
7510 : see if endnetent exists
7511 set endnetent d_endnent
7512 eval $inlibc
7513
7514 : see if endprotoent exists
7515 set endprotoent d_endpent
7516 eval $inlibc
7517
7518 : see if endpwent exists
7519 set endpwent d_endpwent
7520 eval $inlibc
7521
7522 : see if endservent exists
7523 set endservent d_endsent
7524 eval $inlibc
7525
7526 : Locate the flags for 'open()'
7527 echo " "
7528 $cat >open3.c <<'EOCP'
7529 #include <sys/types.h>
7530 #ifdef I_FCNTL
7531 #include <fcntl.h>
7532 #endif
7533 #ifdef I_SYS_FILE
7534 #include <sys/file.h>
7535 #endif
7536 int main() {
7537         if(O_RDONLY);
7538 #ifdef O_TRUNC
7539         exit(0);
7540 #else
7541         exit(1);
7542 #endif
7543 }
7544 EOCP
7545 : check sys/file.h first to get FREAD on Sun
7546 if $test `./findhdr sys/file.h` && \
7547                 set open3 -DI_SYS_FILE && eval $compile; then
7548         h_sysfile=true;
7549         echo "<sys/file.h> defines the O_* constants..." >&4
7550         if ./open3; then
7551                 echo "and you have the 3 argument form of open()." >&4
7552                 val="$define"
7553         else
7554                 echo "but not the 3 argument form of open().  Oh, well." >&4
7555                 val="$undef"
7556         fi
7557 elif $test `./findhdr fcntl.h` && \
7558                 set open3 -DI_FCNTL && eval $compile; then
7559         h_fcntl=true;
7560         echo "<fcntl.h> defines the O_* constants..." >&4
7561         if ./open3; then
7562                 echo "and you have the 3 argument form of open()." >&4
7563                 val="$define"
7564         else
7565                 echo "but not the 3 argument form of open().  Oh, well." >&4
7566                 val="$undef"
7567         fi
7568 else
7569         val="$undef"
7570         echo "I can't find the O_* constant definitions!  You got problems." >&4
7571 fi
7572 set d_open3
7573 eval $setvar
7574 $rm -f open3*
7575
7576 : check for non-blocking I/O stuff
7577 case "$h_sysfile" in
7578 true) echo "#include <sys/file.h>" > head.c;;
7579 *)
7580         case "$h_fcntl" in
7581         true) echo "#include <fcntl.h>" > head.c;;
7582         *) echo "#include <sys/fcntl.h>" > head.c;;
7583         esac
7584         ;;
7585 esac
7586 echo " "
7587 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
7588 case "$o_nonblock" in
7589 '')
7590         $cat head.c > try.c
7591         $cat >>try.c <<'EOCP'
7592 int main() {
7593 #ifdef O_NONBLOCK
7594         printf("O_NONBLOCK\n");
7595         exit(0);
7596 #endif
7597 #ifdef O_NDELAY
7598         printf("O_NDELAY\n");
7599         exit(0);
7600 #endif
7601 #ifdef FNDELAY
7602         printf("FNDELAY\n");
7603         exit(0);
7604 #endif
7605         exit(0);
7606 }
7607 EOCP
7608         set try
7609         if eval $compile_ok; then
7610                 o_nonblock=`./try`
7611                 case "$o_nonblock" in
7612                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
7613                 *) echo "Seems like we can use $o_nonblock.";;
7614                 esac
7615         else
7616                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
7617         fi
7618         ;;
7619 *) echo "Using $hint value $o_nonblock.";;
7620 esac
7621 $rm -f try try.* .out core
7622
7623 echo " "
7624 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
7625 case "$eagain" in
7626 '')
7627         $cat head.c > try.c
7628         $cat >>try.c <<EOCP
7629 #include <errno.h>
7630 #include <sys/types.h>
7631 #include <signal.h>
7632 #define MY_O_NONBLOCK $o_nonblock
7633 #ifndef errno  /* XXX need better Configure test */
7634 extern int errno;
7635 #endif
7636 $signal_t blech(x) int x; { exit(3); }
7637 EOCP
7638         $cat >> try.c <<'EOCP'
7639 int main()
7640 {
7641         int pd[2];
7642         int pu[2];
7643         char buf[1];
7644         char string[100];
7645
7646         pipe(pd);       /* Down: child -> parent */
7647         pipe(pu);       /* Up: parent -> child */
7648         if (0 != fork()) {
7649                 int ret;
7650                 close(pd[1]);   /* Parent reads from pd[0] */
7651                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
7652                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
7653                         exit(1);
7654                 signal(SIGALRM, blech);
7655                 alarm(5);
7656                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
7657                         exit(2);
7658                 sprintf(string, "%d\n", ret);
7659                 write(2, string, strlen(string));
7660                 alarm(0);
7661 #ifdef EAGAIN
7662                 if (errno == EAGAIN) {
7663                         printf("EAGAIN\n");
7664                         goto ok;
7665                 }
7666 #endif
7667 #ifdef EWOULDBLOCK
7668                 if (errno == EWOULDBLOCK)
7669                         printf("EWOULDBLOCK\n");
7670 #endif
7671         ok:
7672                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
7673                 sleep(2);                               /* Give it time to close our pipe */
7674                 alarm(5);
7675                 ret = read(pd[0], buf, 1);      /* Should read EOF */
7676                 alarm(0);
7677                 sprintf(string, "%d\n", ret);
7678                 write(3, string, strlen(string));
7679                 exit(0);
7680         }
7681
7682         close(pd[0]);                   /* We write to pd[1] */
7683         close(pu[1]);                   /* We read from pu[0] */
7684         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
7685         close(pd[1]);                   /* Pipe pd is now fully closed! */
7686         exit(0);                                /* Bye bye, thank you for playing! */
7687 }
7688 EOCP
7689         set try
7690         if eval $compile_ok; then
7691                 echo "$startsh" >mtry
7692                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
7693                 chmod +x mtry
7694                 ./mtry >/dev/null 2>&1
7695                 case $? in
7696                 0) eagain=`$cat try.out`;;
7697                 1) echo "Could not perform non-blocking setting!";;
7698                 2) echo "I did a successful read() for something that was not there!";;
7699                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
7700                 *) echo "Something terribly wrong happened during testing.";;
7701                 esac
7702                 rd_nodata=`$cat try.ret`
7703                 echo "A read() system call with no data present returns $rd_nodata."
7704                 case "$rd_nodata" in
7705                 0|-1) ;;
7706                 *)
7707                         echo "(That's peculiar, fixing that to be -1.)"
7708                         rd_nodata=-1
7709                         ;;
7710                 esac
7711                 case "$eagain" in
7712                 '')
7713                         echo "Forcing errno EAGAIN on read() with no data available."
7714                         eagain=EAGAIN
7715                         ;;
7716                 *)
7717                         echo "Your read() sets errno to $eagain when no data is available."
7718                         ;;
7719                 esac
7720                 status=`$cat try.err`
7721                 case "$status" in
7722                 0) echo "And it correctly returns 0 to signal EOF.";;
7723                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
7724                 *) echo "However, your read() returns '$status' on EOF??";;
7725                 esac
7726                 val="$define"
7727                 if test "$status" = "$rd_nodata"; then
7728                         echo "WARNING: you can't distinguish between EOF and no data!"
7729                         val="$undef"
7730                 fi
7731         else
7732                 echo "I can't compile the test program--assuming errno EAGAIN will do."
7733                 eagain=EAGAIN
7734         fi
7735         set d_eofnblk
7736         eval $setvar
7737         ;;
7738 *)
7739         echo "Using $hint value $eagain."
7740         echo "Your read() returns $rd_nodata when no data is present."
7741         case "$d_eofnblk" in
7742         "$define") echo "And you can see EOF because read() returns 0.";;
7743         "$undef") echo "But you can't see EOF status from read() returned value.";;
7744         *)
7745                 echo "(Assuming you can't see EOF status from read anyway.)"
7746                 d_eofnblk=$undef
7747                 ;;
7748         esac
7749         ;;
7750 esac
7751 $rm -f try try.* .out core head.c mtry
7752
7753 : see if fchmod exists
7754 set fchmod d_fchmod
7755 eval $inlibc
7756
7757 : see if fchown exists
7758 set fchown d_fchown
7759 eval $inlibc
7760
7761 : see if this is an fcntl system
7762 set fcntl d_fcntl
7763 eval $inlibc
7764
7765 : see if sys/select.h has to be included
7766 set sys/select.h i_sysselct
7767 eval $inhdr
7768
7769 : see if we should include time.h, sys/time.h, or both
7770 echo " "
7771 if test "X$timeincl" = X; then
7772         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
7773         $echo $n "I'm now running the test program...$c"
7774         $cat >try.c <<'EOCP'
7775 #include <sys/types.h>
7776 #ifdef I_TIME
7777 #include <time.h>
7778 #endif
7779 #ifdef I_SYSTIME
7780 #ifdef SYSTIMEKERNEL
7781 #define KERNEL
7782 #endif
7783 #include <sys/time.h>
7784 #endif
7785 #ifdef I_SYSSELECT
7786 #include <sys/select.h>
7787 #endif
7788 int main()
7789 {
7790         struct tm foo;
7791 #ifdef S_TIMEVAL
7792         struct timeval bar;
7793 #endif
7794 #ifdef S_TIMEZONE
7795         struct timezone tzp;
7796 #endif
7797         if (foo.tm_sec == foo.tm_sec)
7798                 exit(0);
7799 #ifdef S_TIMEVAL
7800         if (bar.tv_sec == bar.tv_sec)
7801                 exit(0);
7802 #endif
7803         exit(1);
7804 }
7805 EOCP
7806         flags=''
7807         for s_timezone in '-DS_TIMEZONE' ''; do
7808         sysselect=''
7809         for s_timeval in '-DS_TIMEVAL' ''; do
7810         for i_systimek in '' '-DSYSTIMEKERNEL'; do
7811         for i_time in '' '-DI_TIME'; do
7812         for i_systime in '-DI_SYSTIME' ''; do
7813                 case "$flags" in
7814                 '') $echo $n ".$c"
7815                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
7816                         if eval $compile; then
7817                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
7818                                 shift
7819                                 flags="$*"
7820                                 echo " "
7821                                 $echo $n "Succeeded with $flags$c"
7822                         fi
7823                         ;;
7824                 esac
7825         done
7826         done
7827         done
7828         done
7829         done
7830         timeincl=''
7831         echo " "
7832         case "$flags" in
7833         *SYSTIMEKERNEL*) i_systimek="$define"
7834                 timeincl=`./findhdr sys/time.h`
7835                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
7836         *) i_systimek="$undef";;
7837         esac
7838         case "$flags" in
7839         *I_TIME*) i_time="$define"
7840                 timeincl=`./findhdr time.h`" $timeincl"
7841                 echo "We'll include <time.h>." >&4;;
7842         *) i_time="$undef";;
7843         esac
7844         case "$flags" in
7845         *I_SYSTIME*) i_systime="$define"
7846                 timeincl=`./findhdr sys/time.h`" $timeincl"
7847                 echo "We'll include <sys/time.h>." >&4;;
7848         *) i_systime="$undef";;
7849         esac
7850         $rm -f try.c try
7851 fi
7852
7853 : check for fd_set items
7854 $cat <<EOM
7855
7856 Checking to see how well your C compiler handles fd_set and friends ...
7857 EOM
7858 $cat >fd_set.c <<EOCP
7859 #$i_systime I_SYS_TIME
7860 #$i_sysselct I_SYS_SELECT
7861 #$d_socket HAS_SOCKET
7862 #include <sys/types.h>
7863 #ifdef HAS_SOCKET
7864 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
7865 #endif
7866 #ifdef I_SYS_TIME
7867 #include <sys/time.h>
7868 #endif
7869 #ifdef I_SYS_SELECT
7870 #include <sys/select.h>
7871 #endif
7872 int main() {
7873         fd_set fds;
7874
7875 #ifdef TRYBITS
7876         if(fds.fds_bits);
7877 #endif
7878
7879 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
7880         exit(0);
7881 #else
7882         exit(1);
7883 #endif
7884 }
7885 EOCP
7886 set fd_set -DTRYBITS
7887 if eval $compile; then
7888         d_fds_bits="$define"
7889         d_fd_set="$define"
7890         echo "Well, your system knows about the normal fd_set typedef..." >&4
7891         if ./fd_set; then
7892                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
7893                 d_fd_macros="$define"
7894         else
7895                 $cat >&4 <<'EOM'
7896 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
7897 EOM
7898                 d_fd_macros="$undef"
7899         fi
7900 else
7901         $cat <<'EOM'
7902 Hmm, your compiler has some difficulty with fd_set.  Checking further...
7903 EOM
7904         set fd_set
7905         if eval $compile; then
7906                 d_fds_bits="$undef"
7907                 d_fd_set="$define"
7908                 echo "Well, your system has some sort of fd_set available..." >&4
7909                 if ./fd_set; then
7910                         echo "and you have the normal fd_set macros." >&4
7911                         d_fd_macros="$define"
7912                 else
7913                         $cat <<'EOM'
7914 but not the normal fd_set macros!  Gross!  More work for me...
7915 EOM
7916                         d_fd_macros="$undef"
7917                 fi
7918         else
7919         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
7920                 d_fd_set="$undef"
7921                 d_fds_bits="$undef"
7922                 d_fd_macros="$undef"
7923         fi
7924 fi
7925 $rm -f fd_set*
7926
7927 : see if fgetpos exists
7928 set fgetpos d_fgetpos
7929 eval $inlibc
7930
7931
7932 if $test X"$use64bits" = X"$define"; then
7933         : see if fgetpos64 exists
7934         set fgetpos64 d_fgetpos64
7935         eval $inlibc
7936
7937         : see if fopen64 exists
7938         set freopen64 d_fopen64
7939         eval $inlibc
7940
7941         : see if freopen64 exists
7942         set freopen64 d_freopen64
7943         eval $inlibc
7944
7945         : see if fseek64 exists
7946         set fseek64 d_fseek64
7947         eval $inlibc
7948
7949         : see if fseeko64 exists
7950         set fseeko64 d_fseeko64
7951         eval $inlibc
7952
7953         : see if fsetpos64 exists
7954         set fsetpos64 d_fsetpos64
7955         eval $inlibc
7956
7957         : see if ftell64 exists
7958         set ftell64 d_ftell64
7959         eval $inlibc
7960
7961         : see if ftello64 exists
7962         set ftello64 d_ftello64
7963         eval $inlibc
7964
7965         : see if tmpfile64 exists
7966         set tmpfile64 d_tmpfile64
7967         eval $inlibc
7968 else
7969         val="$undef"
7970         for xxx in d_fgetpos64 d_fopen64 d_freopen64 d_fseek64 d_fseeko64 d_fsetpos64 d_ftell64 d_ftello64 d_tmpfile64
7971         do
7972                 set $xxx
7973                 eval $setvar
7974         done
7975 fi
7976
7977 : see if flock exists
7978 set flock d_flock
7979 eval $inlibc
7980
7981 : see if fork exists
7982 set fork d_fork
7983 eval $inlibc
7984
7985 : see if pathconf exists
7986 set pathconf d_pathconf
7987 eval $inlibc
7988
7989 : see if fpathconf exists
7990 set fpathconf d_fpathconf
7991 eval $inlibc
7992
7993 : see if fseeko exists
7994 set fseeko d_fseeko
7995 eval $inlibc
7996
7997 : see if fsetpos exists
7998 set fsetpos d_fsetpos
7999 eval $inlibc
8000
8001 : see if this is a sys/param system
8002 set sys/param.h i_sysparam
8003 eval $inhdr
8004
8005 : see if this is a sys/mount.h system
8006 set sys/mount.h i_sysmount
8007 eval $inhdr
8008
8009
8010 : see if statfs exists
8011 set statfs d_statfs
8012 eval $inlibc
8013
8014 : see if fstatfs exists
8015 set fstatfs d_fstatfs
8016 eval $inlibc
8017
8018 : see if statfs knows about mount flags
8019 set d_statfsflags statfs f_flags $i_sysparam sys/param.h $i_sysmount sys/mount.h
8020 eval $hasfield
8021
8022
8023 : see if statvfs exists
8024 set statvfs d_statvfs
8025 eval $inlibc
8026
8027 : see if fstatvfs exists
8028 set fstatvfs d_fstatvfs
8029 eval $inlibc
8030
8031
8032 : see if ftello exists
8033 set ftello d_ftello
8034 eval $inlibc
8035
8036 : see if getgrent exists
8037 set getgrent d_getgrent
8038 eval $inlibc
8039
8040 : see if gethostbyaddr exists
8041 set gethostbyaddr d_gethbyaddr
8042 eval $inlibc
8043
8044 : see if gethostbyname exists
8045 set gethostbyname d_gethbyname
8046 eval $inlibc
8047
8048 : see if gethostent exists
8049 set gethostent d_gethent
8050 eval $inlibc
8051
8052 : see how we will look up host name
8053 echo " "
8054 if false; then
8055         : dummy stub to allow use of elif
8056 elif set gethostname val -f d_gethname; eval $csym; $val; then
8057         echo 'gethostname() found.' >&4
8058         d_gethname="$define"
8059         call=gethostname
8060 elif set uname val -f d_uname; eval $csym; $val; then
8061         if ./xenix; then
8062                 $cat <<'EOM'
8063 uname() was found, but you're running xenix, and older versions of xenix
8064 have a broken uname(). If you don't really know whether your xenix is old
8065 enough to have a broken system call, use the default answer.
8066
8067 EOM
8068                 dflt=y
8069                 case "$d_uname" in
8070                 "$define") dflt=n;;
8071                 esac
8072                 rp='Is your uname() broken?'
8073                 . ./myread
8074                 case "$ans" in
8075                 n*) d_uname="$define"; call=uname;;
8076                 esac
8077         else
8078                 echo 'uname() found.' >&4
8079                 d_uname="$define"
8080                 call=uname
8081         fi
8082 fi
8083 case "$d_gethname" in
8084 '') d_gethname="$undef";;
8085 esac
8086 case "$d_uname" in
8087 '') d_uname="$undef";;
8088 esac
8089 case "$d_uname$d_gethname" in
8090 *define*)
8091         dflt=n
8092         cat <<EOM
8093  
8094 Every now and then someone has a $call() that lies about the hostname
8095 but can't be fixed for political or economic reasons.  If you wish, I can
8096 pretend $call() isn't there and maybe compute hostname at run-time
8097 thanks to the '$phostname' command.
8098
8099 EOM
8100         rp="Shall I ignore $call() from now on?"
8101         . ./myread
8102         case "$ans" in
8103         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
8104         esac;;
8105 esac
8106 case "$phostname" in
8107 '') aphostname='';;
8108 *) case "$aphostname" in
8109         /*) ;;
8110         *) set X $phostname
8111                 shift
8112                 file=$1
8113                 shift
8114                 file=`./loc $file $file $pth`
8115                 aphostname=`echo $file $*`
8116                 ;;
8117         esac
8118         ;;
8119 esac
8120 case "$d_uname$d_gethname" in
8121 *define*) ;;
8122 *)
8123         case "$phostname" in
8124         '')
8125                 echo "There will be no way for $package to get your hostname." >&4;;
8126         *)
8127         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
8128                 ;;
8129         esac;;
8130 esac
8131 case "$d_phostname" in
8132 '') d_phostname="$undef";;
8133 esac
8134
8135 : see if this is a netdb.h system
8136 set netdb.h i_netdb
8137 eval $inhdr
8138
8139 : see if prototypes for various gethostxxx netdb.h functions are available
8140 echo " "
8141 set d_gethostprotos gethostent $i_netdb netdb.h
8142 eval $hasproto
8143
8144 : see if getlogin exists
8145 set getlogin d_getlogin
8146 eval $inlibc
8147
8148 : see if getnetbyaddr exists
8149 set getnetbyaddr d_getnbyaddr
8150 eval $inlibc
8151
8152 : see if getnetbyname exists
8153 set getnetbyname d_getnbyname
8154 eval $inlibc
8155
8156 : see if getnetent exists
8157 set getnetent d_getnent
8158 eval $inlibc
8159
8160 : see if prototypes for various getnetxxx netdb.h functions are available
8161 echo " "
8162 set d_getnetprotos getnetent $i_netdb netdb.h
8163 eval $hasproto
8164
8165
8166 : see if getprotobyname exists
8167 set getprotobyname d_getpbyname
8168 eval $inlibc
8169
8170 : see if getprotobynumber exists
8171 set getprotobynumber d_getpbynumber
8172 eval $inlibc
8173
8174 : see if getprotoent exists
8175 set getprotoent d_getpent
8176 eval $inlibc
8177
8178 : see if getpgid exists
8179 set getpgid d_getpgid
8180 eval $inlibc
8181
8182 : see if getpgrp2 exists
8183 set getpgrp2 d_getpgrp2
8184 eval $inlibc
8185
8186 : see if getppid exists
8187 set getppid d_getppid
8188 eval $inlibc
8189
8190 : see if getpriority exists
8191 set getpriority d_getprior
8192 eval $inlibc
8193
8194 : see if prototypes for various getprotoxxx netdb.h functions are available
8195 echo " "
8196 set d_getprotoprotos getprotoent $i_netdb netdb.h
8197 eval $hasproto
8198
8199 : see if getpwent exists
8200 set getpwent d_getpwent
8201 eval $inlibc
8202
8203
8204 : see if getservbyname exists
8205 set getservbyname d_getsbyname
8206 eval $inlibc
8207
8208 : see if getservbyport exists
8209 set getservbyport d_getsbyport
8210 eval $inlibc
8211
8212 : see if getservent exists
8213 set getservent d_getsent
8214 eval $inlibc
8215
8216 : see if prototypes for various getservxxx netdb.h functions are available
8217 echo " "
8218 set d_getservprotos getservent $i_netdb netdb.h
8219 eval $hasproto
8220
8221 : see if gettimeofday or ftime exists
8222 set gettimeofday d_gettimeod
8223 eval $inlibc
8224 case "$d_gettimeod" in
8225 "$undef")
8226         set ftime d_ftime 
8227         eval $inlibc
8228         ;;
8229 *)
8230         val="$undef"; set d_ftime; eval $setvar
8231         ;;
8232 esac
8233 case "$d_gettimeod$d_ftime" in
8234 "$undef$undef")
8235         echo " "
8236         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
8237         ;;
8238 esac
8239
8240 : see if this is an grp system
8241 set grp.h i_grp
8242 eval $inhdr
8243
8244 case "$i_grp" in
8245 $define)
8246         xxx=`./findhdr grp.h`
8247         $cppstdin $cppflags $cppminus < $xxx >$$.h
8248
8249         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
8250                 val="$define"
8251         else
8252                 val="$undef"
8253         fi
8254         set d_grpasswd
8255         eval $setvar
8256
8257         $rm -f $$.h
8258         ;;
8259 *)
8260         val="$undef";
8261         set d_grpasswd; eval $setvar
8262         ;;
8263 esac
8264
8265 : see if this is a netinet/in.h or sys/in.h system
8266 set netinet/in.h i_niin sys/in.h i_sysin
8267 eval $inhdr
8268
8269 : see if arpa/inet.h has to be included
8270 set arpa/inet.h i_arpainet
8271 eval $inhdr
8272
8273 : see if htonl --and friends-- exists
8274 val=''
8275 set htonl val
8276 eval $inlibc
8277
8278 : Maybe they are macros.
8279 case "$val" in
8280 $undef)
8281         $cat >htonl.c <<EOM
8282 #include <stdio.h>
8283 #include <sys/types.h>
8284 #$i_niin I_NETINET_IN
8285 #$i_sysin I_SYS_IN
8286 #$i_arpainet I_ARPA_INET
8287 #ifdef I_NETINET_IN
8288 #include <netinet/in.h>
8289 #endif
8290 #ifdef I_SYS_IN
8291 #include <sys/in.h>
8292 #endif
8293 #ifdef I_ARPA_INET
8294 #include <arpa/inet.h>
8295 #endif
8296 #ifdef htonl
8297 printf("Defined as a macro.");
8298 #endif
8299 EOM
8300         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
8301         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
8302                 val="$define"
8303                 echo "But it seems to be defined as a macro." >&4
8304         fi
8305         $rm -f htonl.?
8306         ;;
8307 esac
8308 set d_htonl
8309 eval $setvar
8310
8311 : see which of string.h or strings.h is needed
8312 echo " "
8313 strings=`./findhdr string.h`
8314 if $test "$strings" && $test -r "$strings"; then
8315         echo "Using <string.h> instead of <strings.h>." >&4
8316         val="$define"
8317 else
8318         val="$undef"
8319         strings=`./findhdr strings.h`
8320         if $test "$strings" && $test -r "$strings"; then
8321                 echo "Using <strings.h> instead of <string.h>." >&4
8322         else
8323                 echo "No string header found -- You'll surely have problems." >&4
8324         fi
8325 fi
8326 set i_string
8327 eval $setvar
8328 case "$i_string" in
8329 "$undef") strings=`./findhdr strings.h`;;
8330 *)        strings=`./findhdr string.h`;;
8331 esac
8332
8333 : index or strchr
8334 echo " "
8335 if set index val -f; eval $csym; $val; then
8336         if set strchr val -f d_strchr; eval $csym; $val; then
8337                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
8338                         val="$define"
8339                         vali="$undef"
8340                         echo "strchr() found." >&4
8341                 else
8342                         val="$undef"
8343                         vali="$define"
8344                         echo "index() found." >&4
8345                 fi
8346         else
8347                 val="$undef"
8348                 vali="$define"
8349                 echo "index() found." >&4
8350         fi
8351 else
8352         if set strchr val -f d_strchr; eval $csym; $val; then
8353                 val="$define"
8354                 vali="$undef"
8355                 echo "strchr() found." >&4
8356         else
8357                 echo "No index() or strchr() found!" >&4
8358                 val="$undef"
8359                 vali="$undef"
8360         fi
8361 fi
8362 set d_strchr; eval $setvar
8363 val="$vali"
8364 set d_index; eval $setvar
8365
8366 : check whether inet_aton exists
8367 set inet_aton d_inetaton
8368 eval $inlibc
8369
8370 : see if inttypes.h is available
8371 : we want a real compile instead of Inhdr because some systems
8372 : have an inttypes.h which includes non-existent headers
8373 echo " "
8374 $cat >try.c <<EOCP
8375 #include <inttypes.h>
8376 int main() {
8377         static int32_t foo32 = 0x12345678;
8378 }
8379 EOCP
8380 set try
8381 if eval $compile; then
8382         echo "<inttypes.h> found." >&4
8383         val="$define"
8384 else
8385         echo "<inttypes.h> NOT found." >&4
8386         val="$undef"
8387 fi
8388 $rm -f try.c try
8389 set i_inttypes
8390 eval $setvar
8391
8392 : check for int64_t
8393 case "$use64bits" in
8394 "$define" )
8395         echo " "
8396         echo $n "Checking to see if your system supports int64_t...$c" >&4
8397         $cat >try.c <<EOCP
8398 #include <sys/types.h>
8399 #$i_inttypes I_INTTYPES
8400 #ifdef I_INTTYPES
8401 #include <inttypes.h>
8402 #endif
8403 int64_t foo() { int64_t x; x = 7; return x; }
8404 EOCP
8405         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8406                 val="$define"
8407                 echo " Yup, it does." >&4
8408         else
8409                 val="$undef"
8410                 echo " Nope, it doesn't." >&4
8411         fi
8412         $rm -f try.*
8413         ;;
8414 *)      val="$undef"
8415         ;;
8416 esac
8417 set d_int64t
8418 eval $setvar
8419
8420
8421 : Look for isascii
8422 echo " "
8423 $cat >isascii.c <<'EOCP'
8424 #include <stdio.h>
8425 #include <ctype.h>
8426 int main() {
8427         int c = 'A';
8428         if (isascii(c))
8429                 exit(0);
8430         else
8431                 exit(1);
8432 }
8433 EOCP
8434 set isascii
8435 if eval $compile; then
8436         echo "isascii() found." >&4
8437         val="$define"
8438 else
8439         echo "isascii() NOT found." >&4
8440         val="$undef"
8441 fi
8442 set d_isascii
8443 eval $setvar
8444 $rm -f isascii*
8445
8446 : see if killpg exists
8447 set killpg d_killpg
8448 eval $inlibc
8449
8450 : see if lchown exists
8451 echo " "
8452 $cat > try.c <<'EOCP'
8453 /* System header to define __stub macros and hopefully few prototypes,
8454     which can conflict with char lchown(); below.  */
8455 #include <assert.h>
8456 /* Override any gcc2 internal prototype to avoid an error.  */
8457 /* We use char because int might match the return type of a gcc2
8458    builtin and then its argument prototype would still apply.  */
8459 char lchown();
8460 int main() {
8461     /*  The GNU C library defines this for functions which it implements
8462         to always fail with ENOSYS.  Some functions are actually named
8463         something starting with __ and the normal name is an alias.  */
8464 #if defined (__stub_lchown) || defined (__stub___lchown)
8465 choke me
8466 #else
8467 lchown();
8468 #endif
8469 ; return 0; }
8470 EOCP
8471 set try
8472 if eval $compile; then
8473     $echo "lchown() found." >&4
8474     val="$define"
8475 else
8476     $echo "lchown() NOT found." >&4
8477     val="$undef"
8478 fi
8479 set d_lchown
8480 eval $setvar
8481
8482 : see if link exists
8483 set link d_link
8484 eval $inlibc
8485
8486 : see if localeconv exists
8487 set localeconv d_locconv
8488 eval $inlibc
8489
8490 : see if lockf exists
8491 set lockf d_lockf
8492 eval $inlibc
8493
8494 : check for length of double
8495 echo " "
8496 case "$doublesize" in
8497 '')
8498         $echo $n "Checking to see how big your double precision numbers are...$c" >&4
8499         $cat >try.c <<'EOCP'
8500 #include <stdio.h>
8501 int main()
8502 {
8503         printf("%d\n", sizeof(double));
8504 }
8505 EOCP
8506         set try
8507         if eval $compile_ok; then
8508                 doublesize=`./try`
8509                 $echo " $doublesize bytes." >&4
8510         else
8511                 dflt='8'
8512                 echo "(I can't seem to compile the test program.  Guessing...)"
8513                 rp="What is the size of a double precision number (in bytes)?"
8514                 . ./myread
8515                 doublesize="$ans"
8516         fi
8517         ;;
8518 esac
8519 $rm -f try.c try
8520
8521 : check for long doubles
8522 echo " "
8523 echo $n "Checking to see if your system supports long doubles...$c" >&4
8524 echo 'long double foo() { long double x; x = 7.0; return x; }' > try.c
8525 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8526         val="$define"
8527         echo " Yup, it does." >&4
8528 else
8529         val="$undef"
8530         echo " Nope, it doesn't." >&4
8531 fi
8532 $rm try.*
8533 set d_longdbl
8534 eval $setvar
8535
8536 : check for length of long double
8537 case "${d_longdbl}${longdblsize}" in
8538 $define)
8539         echo " "
8540         $echo $n "Checking to see how big your long doubles are...$c" >&4
8541         $cat >try.c <<'EOCP'
8542 #include <stdio.h>
8543 int main()
8544 {
8545         printf("%d\n", sizeof(long double));
8546 }
8547 EOCP
8548         set try
8549         if eval $compile; then
8550                 longdblsize=`./try`
8551                 $echo " $longdblsize bytes." >&4
8552         else
8553                 dflt='8'
8554                 echo " "
8555                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
8556                 rp="What is the size of a long double (in bytes)?"
8557                 . ./myread
8558                 longdblsize="$ans"
8559         fi
8560         if $test "X$doublesize" = "X$longdblsize"; then
8561                 echo "(That isn't any different from an ordinary double.)"
8562         fi      
8563         ;;
8564 esac
8565 $rm -f try.c try
8566
8567 : check for long long
8568 echo " "
8569 echo $n "Checking to see if your system supports long long...$c" >&4
8570 echo 'long long foo() { long long x; x = 7; return x; }' > try.c
8571 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8572         val="$define"
8573         echo " Yup, it does." >&4
8574 else
8575         val="$undef"
8576         echo " Nope, it doesn't." >&4
8577 fi
8578 $rm try.*
8579 set d_longlong
8580 eval $setvar
8581
8582 : check for length of long long
8583 case "${d_longlong}${longlongsize}" in
8584 $define)
8585         echo " "
8586         $echo $n "Checking to see how big your long longs are...$c" >&4
8587         $cat >try.c <<'EOCP'
8588 #include <stdio.h>
8589 int main()
8590 {
8591         printf("%d\n", sizeof(long long));
8592 }
8593 EOCP
8594         set try
8595         if eval $compile_ok; then
8596                 longlongsize=`./try`
8597                 $echo " $longlongsize bytes." >&4
8598         else
8599                 dflt='8'
8600                 echo " "
8601                 echo "(I can't seem to compile the test program.  Guessing...)"
8602                 rp="What is the size of a long long (in bytes)?"
8603                 . ./myread
8604                 longlongsize="$ans"
8605         fi
8606         if $test "X$longsize" = "X$longlongsize"; then
8607                 echo "(That isn't any different from an ordinary long.)"
8608         fi      
8609         ;;
8610 esac
8611 $rm -f try.c try
8612
8613 : see if lstat exists
8614 set lstat d_lstat
8615 eval $inlibc
8616
8617 : see if madvise exists
8618 set madvise d_madvise
8619 eval $inlibc
8620
8621 : see if mblen exists
8622 set mblen d_mblen
8623 eval $inlibc
8624
8625 : see if mbstowcs exists
8626 set mbstowcs d_mbstowcs
8627 eval $inlibc
8628
8629 : see if mbtowc exists
8630 set mbtowc d_mbtowc
8631 eval $inlibc
8632
8633 : see if memcmp exists
8634 set memcmp d_memcmp
8635 eval $inlibc
8636
8637 : see if memcpy exists
8638 set memcpy d_memcpy
8639 eval $inlibc
8640
8641 : see if memmove exists
8642 set memmove d_memmove
8643 eval $inlibc
8644
8645 : see if memset exists
8646 set memset d_memset
8647 eval $inlibc
8648
8649 : see if mkdir exists
8650 set mkdir d_mkdir
8651 eval $inlibc
8652
8653 : see if mkfifo exists
8654 set mkfifo d_mkfifo
8655 eval $inlibc
8656
8657 : see if mktime exists
8658 set mktime d_mktime
8659 eval $inlibc
8660
8661 : see if this is a sys/mman.h system
8662 set sys/mman.h i_sysmman
8663 eval $inhdr
8664
8665 : see if mmap exists
8666 set mmap d_mmap
8667 eval $inlibc
8668 : see what shmat returns
8669 : default to something harmless
8670 mmaptype='void *'
8671 case "$i_sysmman$d_mmap" in
8672 "$define$define")
8673         $cat >mmap.c <<'END'
8674 #include <sys/mman.h>
8675 void *mmap();
8676 END
8677         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
8678                 mmaptype='void *'
8679         else
8680                 mmaptype='caddr_t'
8681         fi
8682         echo "and it returns ($mmaptype)." >&4
8683         ;;
8684 esac
8685
8686
8687
8688 : see if mprotect exists
8689 set mprotect d_mprotect
8690 eval $inlibc
8691
8692 : see if msgctl exists
8693 set msgctl d_msgctl
8694 eval $inlibc
8695
8696 : see if msgget exists
8697 set msgget d_msgget
8698 eval $inlibc
8699
8700 : see if msgsnd exists
8701 set msgsnd d_msgsnd
8702 eval $inlibc
8703
8704 : see if msgrcv exists
8705 set msgrcv d_msgrcv
8706 eval $inlibc
8707
8708 : see how much of the 'msg*(2)' library is present.
8709 h_msg=true
8710 echo " "
8711 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
8712 *"$undef"*) h_msg=false;;
8713 esac
8714 case "$osname" in
8715 freebsd)
8716     case "`ipcs 2>&1`" in
8717     "SVID messages"*"not configured"*)
8718         echo "Your $osname does not have the msg*(2) configured." >&4
8719         h_msg=false
8720         val="$undef"
8721         set msgctl d_msgctl
8722         eval $setvar
8723         set msgget d_msgget
8724         eval $setvar
8725         set msgsnd d_msgsnd
8726         eval $setvar
8727         set msgrcv d_msgrcv
8728         eval $setvar
8729         ;;
8730     esac
8731     ;;
8732 esac
8733 : we could also check for sys/ipc.h ...
8734 if $h_msg && $test `./findhdr sys/msg.h`; then
8735         echo "You have the full msg*(2) library." >&4
8736         val="$define"
8737 else
8738         echo "You don't have the full msg*(2) library." >&4
8739         val="$undef"
8740 fi
8741 set d_msg
8742 eval $setvar
8743
8744 : see if msync exists
8745 set msync d_msync
8746 eval $inlibc
8747
8748 : see if munmap exists
8749 set munmap d_munmap
8750 eval $inlibc
8751
8752 : see if nice exists
8753 set nice d_nice
8754 eval $inlibc
8755
8756 : how to create joinable pthreads
8757 if test "X$usethreads" = "X$define"; then
8758         echo " "
8759         echo "Checking what constant to use for creating joinable pthreads..." >&4 
8760         $cat >try.c <<'EOCP'
8761 #include <pthread.h>
8762 int main() {
8763     int detachstate = JOINABLE;
8764 }
8765 EOCP
8766         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
8767         if eval $compile; then
8768                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&2
8769                 val="$undef" # Yes, undef.
8770                 set d_old_pthread_create_joinable
8771                 eval $setvar
8772                 val=""
8773                 set old_pthread_create_joinable
8774                 eval $setvar
8775         else
8776                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
8777                 if eval $compile; then
8778                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&2
8779                         val="$define"
8780                         set d_old_pthread_create_joinable
8781                         eval $setvar
8782                         val=PTHREAD_CREATE_UNDETACHED
8783                         set old_pthread_create_joinable
8784                         eval $setvar
8785                 else            
8786                         set try -DJOINABLE=__UNDETACHED
8787                         if eval $compile; then
8788                                 echo "You seem to use __UNDETACHED." >&2
8789                                 val="$define"
8790                                 set d_old_pthread_create_joinable
8791                                 eval $setvar
8792                                 val=__UNDETACHED
8793                                 set old_pthread_create_joinable
8794                                 eval $setvar
8795                         else
8796                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&2
8797                                 val="$define"
8798                                 set d_old_pthread_create_joinable
8799                                 eval $setvar
8800                                 val=0
8801                                 set old_pthread_create_joinable
8802                                 eval $setvar
8803                         fi
8804                 fi
8805         fi
8806         $rm -f try try.*
8807 else
8808     d_old_pthread_create_joinable="$undef"
8809     old_pthread_create_joinable=""
8810 fi
8811
8812 : see if pause exists
8813 set pause d_pause
8814 eval $inlibc
8815
8816 : see if pipe exists
8817 set pipe d_pipe
8818 eval $inlibc
8819
8820 : see if poll exists
8821 set poll d_poll
8822 eval $inlibc
8823
8824
8825 : see whether the various POSIXish _yields exist
8826 $cat >try.c <<EOP
8827 #include <pthread.h>
8828 #include <stdio.h>
8829 int main() {
8830 #ifdef SCHED_YIELD
8831         sched_yield();
8832 #else
8833 #ifdef PTHREAD_YIELD
8834         pthread_yield();
8835 #else
8836 #ifdef PTHREAD_YIELD_NULL
8837         pthread_yield(NULL);
8838 #endif
8839 #endif
8840 #endif
8841 }
8842 EOP
8843 : see if sched_yield exists
8844 set try -DSCHED_YIELD
8845 if eval $compile; then
8846     val="$define"
8847     sched_yield='sched_yield()'
8848 else
8849     val="$undef"
8850 fi
8851 case "$usethreads" in
8852 $define)
8853         case "$val" in
8854         $define) echo 'sched_yield() found.' >&4        ;;
8855         *)       echo 'sched_yield() NOT found.' >&4    ;;
8856         esac
8857 esac
8858 set d_sched_yield
8859 eval $setvar
8860
8861 : see if pthread_yield exists
8862 set try -DPTHREAD_YIELD
8863 if eval $compile; then
8864     val="$define"
8865     case "$sched_yield" in
8866     '') sched_yield='pthread_yield()' ;;
8867     esac
8868 else
8869     set try -DPTHREAD_YIELD_NULL
8870     if eval $compile; then
8871         val="$define"
8872         case "$sched_yield" in
8873         '') sched_yield='pthread_yield(NULL)' ;;
8874         esac
8875     else
8876         val="$undef"
8877     fi
8878 fi
8879 case "$usethreads" in
8880 $define)
8881         case "$val" in
8882         $define) echo 'pthread_yield() found.' >&4      ;;
8883         *)       echo 'pthread_yield() NOT found.' >&4  ;;
8884         esac
8885         ;;
8886 esac
8887 set d_pthread_yield
8888 eval $setvar
8889
8890 case "$sched_yield" in
8891 '') sched_yield=undef ;;
8892 esac
8893
8894 $rm -f try try.*
8895
8896 : see if this is a pwd.h system
8897 set pwd.h i_pwd
8898 eval $inhdr
8899
8900 case "$i_pwd" in
8901 $define)
8902         xxx=`./findhdr pwd.h`
8903         $cppstdin $cppflags $cppminus < $xxx >$$.h
8904
8905         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
8906                 val="$define"
8907         else
8908                 val="$undef"
8909         fi
8910         set d_pwquota
8911         eval $setvar
8912
8913         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
8914                 val="$define"
8915         else
8916                 val="$undef"
8917         fi
8918         set d_pwage
8919         eval $setvar
8920
8921         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
8922                 val="$define"
8923         else
8924                 val="$undef"
8925         fi
8926         set d_pwchange
8927         eval $setvar
8928
8929         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
8930                 val="$define"
8931         else
8932                 val="$undef"
8933         fi
8934         set d_pwclass
8935         eval $setvar
8936
8937         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
8938                 val="$define"
8939         else
8940                 val="$undef"
8941         fi
8942         set d_pwexpire
8943         eval $setvar
8944
8945         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
8946                 val="$define"
8947         else
8948                 val="$undef"
8949         fi
8950         set d_pwcomment
8951         eval $setvar
8952
8953         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
8954                 val="$define"
8955         else
8956                 val="$undef"
8957         fi
8958         set d_pwgecos
8959         eval $setvar
8960
8961         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
8962                 val="$define"
8963         else
8964                 val="$undef"
8965         fi
8966         set d_pwpasswd
8967         eval $setvar
8968
8969         $rm -f $$.h
8970         ;;
8971 *)
8972         val="$undef"; 
8973         set d_pwquota; eval $setvar
8974         set d_pwage; eval $setvar
8975         set d_pwchange; eval $setvar
8976         set d_pwclass; eval $setvar
8977         set d_pwexpire; eval $setvar
8978         set d_pwcomment; eval $setvar
8979         set d_pwgecos; eval $setvar
8980         set d_pwpasswd; eval $setvar
8981         ;;
8982 esac
8983
8984 : see if readdir and friends exist
8985 set readdir d_readdir
8986 eval $inlibc
8987 set seekdir d_seekdir
8988 eval $inlibc
8989 set telldir d_telldir
8990 eval $inlibc
8991 set rewinddir d_rewinddir
8992 eval $inlibc
8993
8994 : see if readlink exists
8995 set readlink d_readlink
8996 eval $inlibc
8997
8998 : see if readv exists
8999 set readv d_readv
9000 eval $inlibc
9001
9002 : see if rename exists
9003 set rename d_rename
9004 eval $inlibc
9005
9006 : see if rmdir exists
9007 set rmdir d_rmdir
9008 eval $inlibc
9009
9010 : see if memory.h is available.
9011 val=''
9012 set memory.h val
9013 eval $inhdr
9014
9015 : See if it conflicts with string.h
9016 case "$val" in
9017 $define)
9018         case "$strings" in
9019         '') ;;
9020         *)
9021                 $cppstdin $cppflags $cppminus < $strings > mem.h
9022                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
9023                         echo " "
9024                         echo "We won't be including <memory.h>."
9025                         val="$undef"
9026                 fi
9027                 $rm -f mem.h
9028                 ;;
9029         esac
9030 esac
9031 set i_memory
9032 eval $setvar
9033
9034 : can bcopy handle overlapping blocks?
9035 val="$undef"
9036 case "$d_bcopy" in
9037 "$define")
9038         echo " "
9039         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
9040         $cat >try.c <<EOCP
9041 #$i_memory I_MEMORY
9042 #$i_stdlib I_STDLIB
9043 #$i_string I_STRING
9044 #$i_unistd I_UNISTD
9045 EOCP
9046         $cat >>try.c <<'EOCP'
9047 #include <stdio.h>
9048 #ifdef I_MEMORY
9049 #  include <memory.h>
9050 #endif
9051 #ifdef I_STDLIB
9052 #  include <stdlib.h>
9053 #endif
9054 #ifdef I_STRING
9055 #  include <string.h>
9056 #else
9057 #  include <strings.h>
9058 #endif
9059 #ifdef I_UNISTD
9060 #  include <unistd.h>  /* Needed for NetBSD */
9061 #endif
9062 int main()
9063 {
9064 char buf[128], abc[128];
9065 char *b;
9066 int len;
9067 int off;
9068 int align;
9069
9070 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
9071
9072 for (align = 7; align >= 0; align--) {
9073         for (len = 36; len; len--) {
9074                 b = buf+align;
9075                 bcopy(abc, b, len);
9076                 for (off = 1; off <= len; off++) {
9077                         bcopy(b, b+off, len);
9078                         bcopy(b+off, b, len);
9079                         if (bcmp(b, abc, len))
9080                                 exit(1);
9081                 }
9082         }
9083 }
9084 exit(0);
9085 }
9086 EOCP
9087         set try
9088         if eval $compile_ok; then
9089                 if ./try 2>/dev/null; then
9090                         echo "Yes, it can."
9091                         val="$define"
9092                 else
9093                         echo "It can't, sorry."
9094                         case "$d_memmove" in
9095                         "$define") echo "But that's Ok since you have memmove()." ;;
9096                         esac
9097                 fi
9098         else
9099                 echo "(I can't compile the test program, so we'll assume not...)"
9100                 case "$d_memmove" in
9101                 "$define") echo "But that's Ok since you have memmove()." ;;
9102                 esac
9103         fi
9104         ;;
9105 esac
9106 $rm -f try.* try core
9107 set d_safebcpy
9108 eval $setvar
9109
9110 : can memcpy handle overlapping blocks?
9111 val="$undef"
9112 case "$d_memcpy" in
9113 "$define")
9114         echo " "
9115         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
9116         $cat >try.c <<EOCP
9117 #$i_memory I_MEMORY
9118 #$i_stdlib I_STDLIB
9119 #$i_string I_STRING
9120 #$i_unistd I_UNISTD
9121 EOCP
9122         $cat >>try.c <<'EOCP'
9123 #include <stdio.h>
9124 #ifdef I_MEMORY
9125 #  include <memory.h>
9126 #endif
9127 #ifdef I_STDLIB
9128 #  include <stdlib.h>
9129 #endif
9130 #ifdef I_STRING
9131 #  include <string.h>
9132 #else
9133 #  include <strings.h>
9134 #endif
9135 #ifdef I_UNISTD
9136 #  include <unistd.h>  /* Needed for NetBSD */
9137 #endif
9138 int main()
9139 {
9140 char buf[128], abc[128];
9141 char *b;
9142 int len;
9143 int off;
9144 int align;
9145
9146 /* Copy "abcde..." string to char abc[] so that gcc doesn't
9147    try to store the string in read-only memory. */
9148 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
9149
9150 for (align = 7; align >= 0; align--) {
9151         for (len = 36; len; len--) {
9152                 b = buf+align;
9153                 memcpy(b, abc, len);
9154                 for (off = 1; off <= len; off++) {
9155                         memcpy(b+off, b, len);
9156                         memcpy(b, b+off, len);
9157                         if (memcmp(b, abc, len))
9158                                 exit(1);
9159                 }
9160         }
9161 }
9162 exit(0);
9163 }
9164 EOCP
9165         set try
9166         if eval $compile_ok; then
9167                 if ./try 2>/dev/null; then
9168                         echo "Yes, it can."
9169                         val="$define"
9170                 else
9171                         echo "It can't, sorry."
9172                         case "$d_memmove" in
9173                         "$define") echo "But that's Ok since you have memmove()." ;;
9174                         esac
9175                 fi
9176         else
9177                 echo "(I can't compile the test program, so we'll assume not...)"
9178                 case "$d_memmove" in
9179                 "$define") echo "But that's Ok since you have memmove()." ;;
9180                 esac
9181         fi
9182         ;;
9183 esac
9184 $rm -f try.* try core
9185 set d_safemcpy
9186 eval $setvar
9187
9188 : can memcmp be trusted to compare relative magnitude?
9189 val="$undef"
9190 case "$d_memcmp" in
9191 "$define")
9192         echo " "
9193         echo "Checking if your memcmp() can compare relative magnitude..." >&4
9194         $cat >try.c <<EOCP
9195 #$i_memory I_MEMORY
9196 #$i_stdlib I_STDLIB
9197 #$i_string I_STRING
9198 #$i_unistd I_UNISTD
9199 EOCP
9200         $cat >>try.c <<'EOCP'
9201 #include <stdio.h>
9202 #ifdef I_MEMORY
9203 #  include <memory.h>
9204 #endif
9205 #ifdef I_STDLIB
9206 #  include <stdlib.h>
9207 #endif
9208 #ifdef I_STRING
9209 #  include <string.h>
9210 #else
9211 #  include <strings.h>
9212 #endif
9213 #ifdef I_UNISTD
9214 #  include <unistd.h>  /* Needed for NetBSD */
9215 #endif
9216 int main()
9217 {
9218 char a = -1;
9219 char b = 0;
9220 if ((a < b) && memcmp(&a, &b, 1) < 0)
9221         exit(1);
9222 exit(0);
9223 }
9224 EOCP
9225         set try
9226         if eval $compile_ok; then
9227                 if ./try 2>/dev/null; then
9228                         echo "Yes, it can."
9229                         val="$define"
9230                 else
9231                         echo "No, it can't (it uses signed chars)."
9232                 fi
9233         else
9234                 echo "(I can't compile the test program, so we'll assume not...)"
9235         fi
9236         ;;
9237 esac
9238 $rm -f try.* try core
9239 set d_sanemcmp
9240 eval $setvar
9241
9242 : see if select exists
9243 set select d_select
9244 eval $inlibc
9245
9246 : see if semctl exists
9247 set semctl d_semctl
9248 eval $inlibc
9249
9250 : see if semget exists
9251 set semget d_semget
9252 eval $inlibc
9253
9254 : see if semop exists
9255 set semop d_semop
9256 eval $inlibc
9257
9258 : see how much of the 'sem*(2)' library is present.
9259 h_sem=true
9260 echo " "
9261 case "$d_semctl$d_semget$d_semop" in
9262 *"$undef"*) h_sem=false;;
9263 esac
9264 case "$osname" in
9265 freebsd)
9266     case "`ipcs 2>&1`" in
9267     "SVID messages"*"not configured"*)
9268         echo "Your $osname does not have the sem*(2) configured." >&4
9269         h_sem=false
9270         val="$undef"
9271         set semctl d_semctl
9272         eval $setvar
9273         set semget d_semget
9274         eval $setvar
9275         set semop d_semop
9276         eval $setvar
9277         ;;
9278     esac
9279     ;;
9280 esac
9281 : we could also check for sys/ipc.h ...
9282 if $h_sem && $test `./findhdr sys/sem.h`; then
9283         echo "You have the full sem*(2) library." >&4
9284         val="$define"
9285 else
9286         echo "You don't have the full sem*(2) library." >&4
9287         val="$undef"
9288 fi
9289 set d_sem
9290 eval $setvar
9291
9292 : see whether sys/sem.h defines union semun
9293 echo " "
9294 $cat > try.c <<'END'
9295 #include <sys/types.h>
9296 #include <sys/ipc.h>
9297 #include <sys/sem.h>
9298 int main () { union semun semun; semun.buf = 0; }
9299 END
9300 set try
9301 if eval $compile; then
9302     echo "You have union semun in <sys/sem.h>." >&4
9303     val="$define"
9304 else
9305     echo "You do not have union semun in <sys/sem.h>." >&4
9306     val="$undef"
9307 fi
9308 $rm -f try try.c try.h
9309 set d_union_semun
9310 eval $setvar
9311
9312 : see how to do semctl IPC_STAT
9313 case "$d_sem" in
9314 $define)
9315     : see whether semctl IPC_STAT can use union semun
9316     echo " "
9317     $cat > try.h <<END
9318 #ifndef S_IRUSR
9319 #   ifdef S_IREAD
9320 #       define S_IRUSR S_IREAD
9321 #       define S_IWUSR S_IWRITE
9322 #       define S_IXUSR S_IEXEC
9323 #   else
9324 #       define S_IRUSR 0400
9325 #       define S_IWUSR 0200
9326 #       define S_IXUSR 0100
9327 #   endif
9328 #   define S_IRGRP (S_IRUSR>>3)
9329 #   define S_IWGRP (S_IWUSR>>3)
9330 #   define S_IXGRP (S_IXUSR>>3)
9331 #   define S_IROTH (S_IRUSR>>6)
9332 #   define S_IWOTH (S_IWUSR>>6)
9333 #   define S_IXOTH (S_IXUSR>>6)
9334 #endif
9335 #ifndef S_IRWXU
9336 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
9337 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
9338 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
9339 #endif
9340 END
9341
9342     $cat > try.c <<END
9343 #include <sys/types.h>
9344 #include <sys/ipc.h>
9345 #include <sys/sem.h>
9346 #include <sys/stat.h>
9347 #include <stdio.h>
9348 #include <errno.h>
9349 #include "try.h"
9350 #ifndef errno
9351 extern int errno;
9352 #endif
9353 #$d_union_semun HAS_UNION_SEMUN
9354 int main() {
9355     union semun
9356 #ifndef HAS_UNION_SEMUN
9357     {
9358         int val;
9359         struct semid_ds *buf;
9360         unsigned short *array;
9361     }
9362 #endif
9363     arg;
9364     int sem, st;
9365
9366 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
9367     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9368     if (sem > -1) {
9369         struct semid_ds argbuf;
9370         arg.buf = &argbuf;
9371 #       ifdef IPC_STAT
9372         st = semctl(sem, 0, IPC_STAT, arg);
9373         if (st == 0)
9374             printf("semun\n");
9375         else
9376 #       endif /* IPC_STAT */
9377             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9378 #       ifdef IPC_RMID
9379         if (semctl(sem, 0, IPC_RMID, arg) != 0)
9380 #       endif /* IPC_RMID */
9381             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9382     } else
9383 #endif /* IPC_PRIVATE && ... */
9384         printf("semget failed: errno = %d\n", errno);
9385   return 0;
9386 }
9387 END
9388     val="$undef"
9389     set try
9390     if eval $compile; then
9391         xxx=`./try`
9392         case "$xxx" in
9393         semun) val="$define" ;;
9394         esac
9395     fi
9396     $rm -f try try.c
9397     set d_semctl_semun
9398     eval $setvar
9399     case "$d_semctl_semun" in
9400     $define)
9401         echo "You can use union semun for semctl IPC_STAT." >&4
9402         also='also'
9403         ;;
9404     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
9405         also=''
9406         ;;
9407     esac
9408
9409     : see whether semctl IPC_STAT can use struct semid_ds pointer
9410     $cat > try.c <<'END'
9411 #include <sys/types.h>
9412 #include <sys/ipc.h>
9413 #include <sys/sem.h>
9414 #include <sys/stat.h>
9415 #include "try.h"
9416 #include <stdio.h>
9417 #include <errno.h>
9418 #ifndef errno
9419 extern int errno;
9420 #endif
9421 int main() {
9422     struct semid_ds arg;
9423     int sem, st;
9424
9425 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
9426     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9427     if (sem > -1) {
9428 #       ifdef IPC_STAT
9429         st = semctl(sem, 0, IPC_STAT, &arg);
9430         if (st == 0)
9431             printf("semid_ds\n");
9432         else
9433 #       endif /* IPC_STAT */
9434             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9435 #       ifdef IPC_RMID
9436         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
9437 #       endif /* IPC_RMID */
9438             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9439     } else
9440 #endif /* IPC_PRIVATE && ... */
9441         printf("semget failed: errno = %d\n", errno);
9442
9443     return 0;
9444 }
9445 END
9446     val="$undef"
9447     set try
9448     if eval $compile; then
9449         xxx=`./try`
9450         case "$xxx" in
9451         semid_ds) val="$define" ;;
9452         esac
9453     fi
9454     $rm -f try try.c
9455     set d_semctl_semid_ds
9456     eval $setvar
9457     case "$d_semctl_semid_ds" in
9458     $define)
9459         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
9460         ;;
9461     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
9462         ;;
9463     esac
9464     $rm -f try.h
9465     ;;
9466 *)  val="$undef"
9467
9468     # We do not have the full sem*(2) library, so assume we can not
9469     # use either.
9470
9471     set d_semctl_semun
9472     eval $setvar
9473
9474     set d_semctl_semid_ds
9475     eval $setvar
9476     ;;
9477 esac
9478
9479 : see if setegid exists
9480 set setegid d_setegid
9481 eval $inlibc
9482
9483 : see if seteuid exists
9484 set seteuid d_seteuid
9485 eval $inlibc
9486
9487 : see if setgrent exists
9488 set setgrent d_setgrent
9489 eval $inlibc
9490
9491 : see if sethostent exists
9492 set sethostent d_sethent
9493 eval $inlibc
9494
9495 : see if setlinebuf exists
9496 set setlinebuf d_setlinebuf
9497 eval $inlibc
9498
9499 : see if setlocale exists
9500 set setlocale d_setlocale
9501 eval $inlibc
9502
9503 : see if setnetent exists
9504 set setnetent d_setnent
9505 eval $inlibc
9506
9507 : see if setprotoent exists
9508 set setprotoent d_setpent
9509 eval $inlibc
9510
9511 : see if setpgid exists
9512 set setpgid d_setpgid
9513 eval $inlibc
9514
9515 : see if setpgrp2 exists
9516 set setpgrp2 d_setpgrp2
9517 eval $inlibc
9518
9519 : see if setpriority exists
9520 set setpriority d_setprior
9521 eval $inlibc
9522
9523 : see if setpwent exists
9524 set setpwent d_setpwent
9525 eval $inlibc
9526
9527 : see if setregid exists
9528 set setregid d_setregid
9529 eval $inlibc
9530 set setresgid d_setresgid
9531 eval $inlibc
9532
9533 : see if setreuid exists
9534 set setreuid d_setreuid
9535 eval $inlibc
9536 set setresuid d_setresuid
9537 eval $inlibc
9538
9539 : see if setrgid exists
9540 set setrgid d_setrgid
9541 eval $inlibc
9542
9543 : see if setruid exists
9544 set setruid d_setruid
9545 eval $inlibc
9546
9547 : see if setservent exists
9548 set setservent d_setsent
9549 eval $inlibc
9550
9551 : see if setsid exists
9552 set setsid d_setsid
9553 eval $inlibc
9554
9555 : see if setvbuf exists
9556 set setvbuf d_setvbuf
9557 eval $inlibc
9558
9559 : see if sfio.h is available
9560 set sfio.h i_sfio
9561 eval $inhdr
9562
9563
9564 : see if sfio library is available
9565 case "$i_sfio" in
9566 $define)
9567         val=''
9568         set sfreserve val
9569         eval $inlibc
9570         ;;
9571 *)
9572         val="$undef"
9573         ;;
9574 esac
9575 : Ok, but do we want to use it.
9576 case "$val" in
9577 $define)
9578         case "$usesfio" in
9579         true|$define|[yY]*) dflt='y';;
9580         *) dflt='n';;
9581         esac
9582         echo "$package can use the sfio library, but it is experimental."
9583         rp="You seem to have sfio available, do you want to try using it?"
9584         . ./myread
9585         case "$ans" in
9586         y|Y) ;;
9587         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
9588                 val="$undef"
9589                 : Remove sfio from list of libraries to use
9590                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
9591                 shift
9592                 libs="$*"
9593                 echo "libs = $libs" >&4
9594                 ;;
9595         esac
9596         ;;
9597 *)      case "$usesfio" in
9598         true|$define|[yY]*)
9599                 echo "Sorry, cannot find sfio on this machine" >&4
9600                 echo "Ignoring your setting of usesfio=$usesfio" >&4
9601                 ;;
9602         esac
9603         ;;
9604 esac
9605 set d_sfio
9606 eval $setvar
9607 case "$d_sfio" in
9608 $define) usesfio='true';;
9609 *) usesfio='false';;
9610 esac
9611
9612 : see if shmctl exists
9613 set shmctl d_shmctl
9614 eval $inlibc
9615
9616 : see if shmget exists
9617 set shmget d_shmget
9618 eval $inlibc
9619
9620 : see if shmat exists
9621 set shmat d_shmat
9622 eval $inlibc
9623 : see what shmat returns
9624 case "$d_shmat" in
9625 "$define")
9626         $cat >shmat.c <<'END'
9627 #include <sys/shm.h>
9628 void *shmat();
9629 END
9630         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
9631                 shmattype='void *'
9632         else
9633                 shmattype='char *'
9634         fi
9635         echo "and it returns ($shmattype)." >&4
9636         : see if a prototype for shmat is available
9637         xxx=`./findhdr sys/shm.h`
9638         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
9639         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
9640                 val="$define"
9641         else
9642                 val="$undef"
9643         fi
9644         $rm -f shmat.[co]
9645         ;;
9646 *)
9647         val="$undef"
9648         ;;
9649 esac
9650 set d_shmatprototype
9651 eval $setvar
9652
9653 : see if shmdt exists
9654 set shmdt d_shmdt
9655 eval $inlibc
9656
9657 : see how much of the 'shm*(2)' library is present.
9658 h_shm=true
9659 echo " "
9660 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
9661 *"$undef"*) h_shm=false;;
9662 esac
9663 case "$osname" in
9664 freebsd)
9665     case "`ipcs 2>&1`" in
9666     "SVID shared memory"*"not configured"*)
9667         echo "Your $osname does not have the shm*(2) configured." >&4
9668         h_shm=false
9669         val="$undef"
9670         set shmctl d_shmctl
9671         evat $setvar
9672         set shmget d_shmget
9673         evat $setvar
9674         set shmat d_shmat
9675         evat $setvar
9676         set shmdt d_shmdt
9677         evat $setvar
9678         ;;
9679     esac
9680     ;;
9681 esac
9682 : we could also check for sys/ipc.h ...
9683 if $h_shm && $test `./findhdr sys/shm.h`; then
9684         echo "You have the full shm*(2) library." >&4
9685         val="$define"
9686 else
9687         echo "You don't have the full shm*(2) library." >&4
9688         val="$undef"
9689 fi
9690 set d_shm
9691 eval $setvar
9692
9693 echo " "
9694 : see if we have sigaction
9695 if set sigaction val -f d_sigaction; eval $csym; $val; then
9696         echo 'sigaction() found.' >&4
9697         $cat > try.c <<'EOP'
9698 #include <stdio.h>
9699 #include <sys/types.h>
9700 #include <signal.h>
9701 int main()
9702 {
9703     struct sigaction act, oact;
9704 }
9705 EOP
9706         set try
9707         if eval $compile_ok; then
9708                 val="$define"
9709         else
9710                 echo "But you don't seem to have a useable struct sigaction." >&4
9711                 val="$undef"
9712         fi
9713 else
9714         echo 'sigaction NOT found.' >&4
9715         val="$undef"
9716 fi
9717 set d_sigaction; eval $setvar
9718 $rm -f try try$_o try.c
9719
9720 : see if sigsetjmp exists
9721 echo " "
9722 case "$d_sigsetjmp" in
9723 '')
9724         $cat >try.c <<'EOP'
9725 #include <setjmp.h>
9726 sigjmp_buf env;
9727 int set = 1;
9728 int main()
9729 {
9730         if (sigsetjmp(env,1))
9731                 exit(set);
9732         set = 0;
9733         siglongjmp(env, 1);
9734         exit(1);
9735 }
9736 EOP
9737         set try
9738         if eval $compile; then
9739                 if ./try >/dev/null 2>&1; then
9740                         echo "POSIX sigsetjmp found." >&4
9741                         val="$define"
9742                 else
9743                         $cat >&4 <<EOM
9744 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
9745 I'll ignore them.
9746 EOM
9747                         val="$undef"
9748                 fi
9749         else
9750                 echo "sigsetjmp not found." >&4
9751                 val="$undef"
9752         fi
9753         ;;
9754 *) val="$d_sigsetjmp"
9755         case "$d_sigsetjmp" in
9756         $define) echo "POSIX sigsetjmp found." >&4;;
9757         $undef) echo "sigsetjmp not found." >&4;;
9758         esac
9759         ;;
9760 esac
9761 set d_sigsetjmp
9762 eval $setvar
9763 $rm -f try.c try
9764
9765 : see if stat knows about block sizes
9766 echo " "
9767 set d_statblks stat st_blocks $i_sysstat sys/stat.h
9768 eval $hasfield
9769
9770 : see if _ptr and _cnt from stdio act std
9771 echo " "
9772 if $contains '_IO_fpos_t' `./findhdr stdio.h` >/dev/null 2>&1 ; then
9773         echo "(Looks like you have stdio.h from Linux.)"
9774         case "$stdio_ptr" in
9775         '') stdio_ptr='((fp)->_IO_read_ptr)'
9776                 ptr_lval=$define
9777                 ;;
9778         *)      ptr_lval=$d_stdio_ptr_lval;;
9779         esac
9780         case "$stdio_cnt" in
9781         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
9782                 cnt_lval=$undef
9783                 ;;
9784         *)      cnt_lval=$d_stdio_cnt_lval;;
9785         esac
9786         case "$stdio_base" in
9787         '') stdio_base='((fp)->_IO_read_base)';;
9788         esac
9789         case "$stdio_bufsiz" in
9790         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
9791         esac
9792 else
9793         case "$stdio_ptr" in
9794         '') stdio_ptr='((fp)->_ptr)'
9795                 ptr_lval=$define
9796                 ;;
9797         *)      ptr_lval=$d_stdio_ptr_lval;;
9798         esac
9799         case "$stdio_cnt" in
9800         '') stdio_cnt='((fp)->_cnt)'
9801                 cnt_lval=$define
9802                 ;;
9803         *)      cnt_lval=$d_stdio_cnt_lval;;
9804         esac
9805         case "$stdio_base" in
9806         '') stdio_base='((fp)->_base)';;
9807         esac
9808         case "$stdio_bufsiz" in
9809         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
9810         esac
9811 fi
9812 : test whether _ptr and _cnt really work
9813 echo "Checking how std your stdio is..." >&4
9814 $cat >try.c <<EOP
9815 #include <stdio.h>
9816 #define FILE_ptr(fp)    $stdio_ptr
9817 #define FILE_cnt(fp)    $stdio_cnt
9818 int main() {
9819         FILE *fp = fopen("try.c", "r");
9820         char c = getc(fp);
9821         if (
9822                 18 <= FILE_cnt(fp) &&
9823                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
9824         )
9825                 exit(0);
9826         exit(1);
9827 }
9828 EOP
9829 val="$undef"
9830 set try
9831 if eval $compile; then
9832         if ./try; then
9833                 echo "Your stdio acts pretty std."
9834                 val="$define"
9835         else
9836                 echo "Your stdio isn't very std."
9837         fi
9838 else
9839         echo "Your stdio doesn't appear very std."
9840 fi
9841 $rm -f try.c try
9842 set d_stdstdio
9843 eval $setvar
9844
9845 : Can _ptr be used as an lvalue?
9846 case "$d_stdstdio$ptr_lval" in
9847 $define$define) val=$define ;;
9848 *) val=$undef ;;
9849 esac
9850 set d_stdio_ptr_lval
9851 eval $setvar
9852
9853 : Can _cnt be used as an lvalue?
9854 case "$d_stdstdio$cnt_lval" in
9855 $define$define) val=$define ;;
9856 *) val=$undef ;;
9857 esac
9858 set d_stdio_cnt_lval
9859 eval $setvar
9860
9861 : see if _base is also standard
9862 val="$undef"
9863 case "$d_stdstdio" in
9864 $define)
9865         $cat >try.c <<EOP
9866 #include <stdio.h>
9867 #define FILE_base(fp)   $stdio_base
9868 #define FILE_bufsiz(fp) $stdio_bufsiz
9869 int main() {
9870         FILE *fp = fopen("try.c", "r");
9871         char c = getc(fp);
9872         if (
9873                 19 <= FILE_bufsiz(fp) &&
9874                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
9875         )
9876                 exit(0);
9877         exit(1);
9878 }
9879 EOP
9880         set try
9881         if eval $compile; then
9882                 if ./try; then
9883                         echo "And its _base field acts std."
9884                         val="$define"
9885                 else
9886                         echo "But its _base field isn't std."
9887                 fi
9888         else
9889                 echo "However, it seems to be lacking the _base field."
9890         fi
9891         $rm -f try.c try
9892         ;;
9893 esac
9894 set d_stdiobase
9895 eval $setvar
9896
9897 : see if strcoll exists
9898 set strcoll d_strcoll
9899 eval $inlibc
9900
9901 : check for structure copying
9902 echo " "
9903 echo "Checking to see if your C compiler can copy structs..." >&4
9904 $cat >try.c <<'EOCP'
9905 int main()
9906 {
9907         struct blurfl {
9908                 int dyick;
9909         } foo, bar;
9910
9911         foo = bar;
9912 }
9913 EOCP
9914 if $cc -c try.c >/dev/null 2>&1 ; then
9915         val="$define"
9916         echo "Yup, it can."
9917 else
9918         val="$undef"
9919         echo "Nope, it can't."
9920 fi
9921 set d_strctcpy
9922 eval $setvar
9923 $rm -f try.*
9924
9925 : see if strerror and/or sys_errlist[] exist
9926 echo " "
9927 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
9928     if set strerror val -f d_strerror; eval $csym; $val; then
9929                 echo 'strerror() found.' >&4
9930                 d_strerror="$define"
9931                 d_strerrm='strerror(e)'
9932                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
9933                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
9934                         d_syserrlst="$define"
9935                 else
9936                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
9937                         d_syserrlst="$undef"
9938                 fi
9939     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
9940                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
9941                 echo 'strerror() found in string header.' >&4
9942                 d_strerror="$define"
9943                 d_strerrm='strerror(e)'
9944                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
9945                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
9946                                 d_syserrlst="$define"
9947                 else
9948                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
9949                         d_syserrlst="$undef"
9950                 fi
9951     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
9952                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
9953                 d_strerror="$undef"
9954                 d_syserrlst="$define"
9955                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
9956     else
9957                 echo 'strerror() and sys_errlist[] NOT found.' >&4
9958                 d_strerror="$undef"
9959                 d_syserrlst="$undef"
9960                 d_strerrm='"unknown"'
9961     fi
9962 fi
9963
9964 : see if strtod exists
9965 set strtod d_strtod
9966 eval $inlibc
9967
9968 : see if strtol exists
9969 set strtol d_strtol
9970 eval $inlibc
9971
9972 : see if strtoul exists
9973 set strtoul d_strtoul
9974 eval $inlibc
9975
9976 : see if strxfrm exists
9977 set strxfrm d_strxfrm
9978 eval $inlibc
9979
9980 : see if symlink exists
9981 set symlink d_symlink
9982 eval $inlibc
9983
9984 : see if syscall exists
9985 set syscall d_syscall
9986 eval $inlibc
9987
9988 : see if sysconf exists
9989 set sysconf d_sysconf
9990 eval $inlibc
9991
9992 : see if system exists
9993 set system d_system
9994 eval $inlibc
9995
9996 : see if tcgetpgrp exists
9997 set tcgetpgrp d_tcgetpgrp
9998 eval $inlibc
9999
10000 : see if tcsetpgrp exists
10001 set tcsetpgrp d_tcsetpgrp
10002 eval $inlibc
10003
10004 : see if sys/types.h has to be included
10005 set sys/types.h i_systypes
10006 eval $inhdr
10007
10008 : see if prototype for telldir is available
10009 echo " "
10010 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
10011 eval $hasproto
10012
10013 : define an is-a-typedef? function
10014 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10015 case "$inclist" in
10016 "") inclist="sys/types.h";;
10017 esac;
10018 eval "varval=\$$var";
10019 case "$varval" in
10020 "")
10021         $rm -f temp.c;
10022         for inc in $inclist; do
10023                 echo "#include <$inc>" >>temp.c;
10024         done;
10025         echo "#ifdef $type" >> temp.c;
10026         echo "printf(\"We have $type\");" >> temp.c;
10027         echo "#endif" >> temp.c;
10028         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10029         if $contains $type temp.E >/dev/null 2>&1; then
10030                 eval "$var=\$type";
10031         else
10032                 eval "$var=\$def";
10033         fi;
10034         $rm -f temp.?;;
10035 *) eval "$var=\$varval";;
10036 esac'
10037
10038 : define an is-a-typedef? function that prompts if the type is not available.
10039 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10040 case "$inclist" in
10041 "") inclist="sys/types.h";;
10042 esac;
10043 eval "varval=\$$var";
10044 case "$varval" in
10045 "")
10046         $rm -f temp.c;
10047         for inc in $inclist; do
10048                 echo "#include <$inc>" >>temp.c;
10049         done;
10050         echo "#ifdef $type" >> temp.c;
10051         echo "printf(\"We have $type\");" >> temp.c;
10052         echo "#endif" >> temp.c;
10053         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10054         echo " " ;
10055         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
10056         if $contains $type temp.E >/dev/null 2>&1; then
10057                 echo "$type found." >&4;
10058                 eval "$var=\$type";
10059         else
10060                 echo "$type NOT found." >&4;
10061                 dflt="$def";
10062                 . ./myread ;
10063                 eval "$var=\$ans";
10064         fi;
10065         $rm -f temp.?;;
10066 *) eval "$var=\$varval";;
10067 esac'
10068
10069 : see if this is a sys/times.h system
10070 set sys/times.h i_systimes
10071 eval $inhdr
10072
10073 : see if times exists
10074 echo " "
10075 if set times val -f d_times; eval $csym; $val; then
10076         echo 'times() found.' >&4
10077         d_times="$define"
10078         inc=''
10079         case "$i_systimes" in
10080         "$define") inc='sys/times.h';;
10081         esac
10082         rp="What is the type returned by times() on this system?"
10083         set clock_t clocktype long stdio.h sys/types.h $inc
10084         eval $typedef_ask
10085 else
10086         echo 'times() NOT found, hope that will do.' >&4
10087         d_times="$undef"
10088         clocktype='int'
10089 fi
10090
10091 : see if truncate exists
10092 set truncate d_truncate
10093 eval $inlibc
10094
10095 : see if tzname[] exists
10096 echo " "
10097 if set tzname val -a d_tzname; eval $csym; $val; then
10098         val="$define"
10099         echo 'tzname[] found.' >&4
10100 else
10101         val="$undef"
10102         echo 'tzname[] NOT found.' >&4
10103 fi
10104 set d_tzname
10105 eval $setvar
10106
10107 : see if umask exists
10108 set umask d_umask
10109 eval $inlibc
10110
10111 : backward compatibility for d_hvfork
10112 if test X$d_hvfork != X; then
10113         d_vfork="$d_hvfork"
10114         d_hvfork=''
10115 fi
10116 : see if there is a vfork
10117 val=''
10118 set vfork val
10119 eval $inlibc
10120
10121 : Ok, but do we want to use it. vfork is reportedly unreliable in 
10122 : perl on Solaris 2.x, and probably elsewhere.
10123 case "$val" in
10124 $define)
10125         echo " "
10126         case "$usevfork" in
10127         false) dflt='n';;
10128         *) dflt='y';;
10129         esac
10130         rp="Some systems have problems with vfork().  Do you want to use it?"
10131         . ./myread
10132         case "$ans" in
10133         y|Y) ;;
10134         *)
10135                 echo "Ok, we won't use vfork()."
10136                 val="$undef"
10137                 ;;
10138         esac
10139         ;;
10140 esac
10141 set d_vfork
10142 eval $setvar
10143 case "$d_vfork" in
10144 $define) usevfork='true';;
10145 *) usevfork='false';;
10146 esac
10147
10148 : see if this is an sysdir system
10149 set sys/dir.h i_sysdir
10150 eval $inhdr
10151
10152 : see if this is an sysndir system
10153 set sys/ndir.h i_sysndir
10154 eval $inhdr
10155
10156 : see if closedir exists
10157 set closedir d_closedir
10158 eval $inlibc
10159
10160 case "$d_closedir" in
10161 "$define")
10162         echo " "
10163         echo "Checking whether closedir() returns a status..." >&4
10164         cat > closedir.c <<EOM
10165 #$i_dirent I_DIRENT             /**/
10166 #$i_sysdir I_SYS_DIR            /**/
10167 #$i_sysndir I_SYS_NDIR          /**/
10168 #$i_systypes I_SYS_TYPES        /**/
10169
10170 #if defined(I_SYS_TYPES)
10171 #include <sys/types.h>
10172 #endif
10173 #if defined(I_DIRENT)
10174 #include <dirent.h>
10175 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
10176 #include <sys/dir.h>
10177 #endif
10178 #else
10179 #ifdef I_SYS_NDIR
10180 #include <sys/ndir.h>
10181 #else
10182 #ifdef I_SYS_DIR
10183 #ifdef hp9000s500
10184 #include <ndir.h>       /* may be wrong in the future */
10185 #else
10186 #include <sys/dir.h>
10187 #endif
10188 #endif
10189 #endif
10190 #endif 
10191 int main() { return closedir(opendir(".")); }
10192 EOM
10193         set closedir
10194         if eval $compile_ok; then
10195                 if ./closedir > /dev/null 2>&1 ; then
10196                         echo "Yes, it does."
10197                         val="$undef"
10198                 else
10199                         echo "No, it doesn't."
10200                         val="$define"
10201                 fi
10202         else
10203                 echo "(I can't seem to compile the test program--assuming it doesn't)"
10204                 val="$define"
10205         fi
10206         ;;
10207 *)
10208         val="$undef";
10209         ;;
10210 esac
10211 set d_void_closedir
10212 eval $setvar
10213 $rm -f closedir*
10214 : check for volatile keyword
10215 echo " "
10216 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10217 $cat >try.c <<'EOCP'
10218 int main()
10219 {
10220         typedef struct _goo_struct goo_struct;
10221         goo_struct * volatile goo = ((goo_struct *)0);
10222         struct _goo_struct {
10223                 long long_int;
10224                 int reg_int;
10225                 char char_var;
10226         };
10227         typedef unsigned short foo_t;
10228         char *volatile foo;
10229         volatile int bar;
10230         volatile foo_t blech;
10231         foo = foo;
10232 }
10233 EOCP
10234 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10235         val="$define"
10236         echo "Yup, it does."
10237 else
10238         val="$undef"
10239         echo "Nope, it doesn't."
10240 fi
10241 set d_volatile
10242 eval $setvar
10243 $rm -f try.*
10244
10245 : see if there is a wait4
10246 set wait4 d_wait4
10247 eval $inlibc
10248
10249 : see if waitpid exists
10250 set waitpid d_waitpid
10251 eval $inlibc
10252
10253 : see if wcstombs exists
10254 set wcstombs d_wcstombs
10255 eval $inlibc
10256
10257 : see if wctomb exists
10258 set wctomb d_wctomb
10259 eval $inlibc
10260
10261 : see if writev exists
10262 set writev d_writev
10263 eval $inlibc
10264
10265 : preserve RCS keywords in files with variable substitution, grrr
10266 Date='$Date'
10267 Id='$Id'
10268 Log='$Log'
10269 RCSfile='$RCSfile'
10270 Revision='$Revision'
10271
10272 : check for alignment requirements
10273 echo " "
10274 case "$alignbytes" in
10275 '') echo "Checking alignment constraints..." >&4
10276         $cat >try.c <<'EOCP'
10277 struct foobar {
10278         char foo;
10279         double bar;
10280 } try;
10281 int main()
10282 {
10283         printf("%d\n", (char *)&try.bar - (char *)&try.foo);
10284 }
10285 EOCP
10286         set try
10287         if eval $compile_ok; then
10288                 dflt=`./try`
10289         else
10290                 dflt='8'
10291                 echo "(I can't seem to compile the test program...)"
10292         fi
10293         ;;
10294 *) dflt="$alignbytes"
10295         ;;
10296 esac
10297 rp="Doubles must be aligned on a how-many-byte boundary?"
10298 . ./myread
10299 alignbytes="$ans"
10300 $rm -f try.c try
10301
10302 : check for ordering of bytes in a long
10303 case "$byteorder" in
10304 '')
10305         $cat <<'EOM'
10306   
10307 In the following, larger digits indicate more significance.  A big-endian
10308 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
10309 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
10310 machines may have weird orders like 3412.  A Cray will report 87654321. If
10311 the test program works the default is probably right.
10312 I'm now running the test program...
10313 EOM
10314         $cat >try.c <<'EOCP'
10315 #include <stdio.h>
10316 int main()
10317 {
10318         int i;
10319         union {
10320                 unsigned long l;
10321                 char c[sizeof(long)];
10322         } u;
10323
10324         if (sizeof(long) > 4)
10325                 u.l = (0x08070605L << 32) | 0x04030201L;
10326         else
10327                 u.l = 0x04030201L;
10328         for (i = 0; i < sizeof(long); i++)
10329                 printf("%c", u.c[i]+'0');
10330         printf("\n");
10331         exit(0);
10332 }
10333 EOCP
10334         xxx_prompt=y
10335         set try
10336         if eval $compile && ./try > /dev/null; then
10337                 dflt=`./try`
10338                 case "$dflt" in
10339                 [1-4][1-4][1-4][1-4]|12345678|87654321)
10340                         echo "(The test program ran ok.)"
10341                         echo "byteorder=$dflt"
10342                         xxx_prompt=n
10343                         ;;
10344                 ????|????????) echo "(The test program ran ok.)" ;;
10345                 *) echo "(The test program didn't run right for some reason.)" ;;
10346                 esac
10347         else
10348                 dflt='4321'
10349                 cat <<'EOM'
10350 (I can't seem to compile the test program.  Guessing big-endian...)
10351 EOM
10352         fi
10353         case "$xxx_prompt" in
10354         y)
10355                 rp="What is the order of bytes in a long?"
10356                 . ./myread
10357                 byteorder="$ans"
10358                 ;;
10359         *)      byteorder=$dflt
10360                 ;;
10361         esac
10362         ;;
10363 esac
10364 $rm -f try.c try
10365
10366 : how do we catenate cpp tokens here?
10367 echo " "
10368 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
10369 $cat >cpp_stuff.c <<'EOCP'
10370 #define RCAT(a,b)a/**/b
10371 #define ACAT(a,b)a ## b
10372 RCAT(Rei,ser)
10373 ACAT(Cir,cus)
10374 EOCP
10375 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
10376 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
10377         echo "Oh!  Smells like ANSI's been here." >&4
10378         echo "We can catify or stringify, separately or together!"
10379         cpp_stuff=42
10380 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
10381         echo "Ah, yes!  The good old days!" >&4
10382         echo "However, in the good old days we don't know how to stringify and"
10383         echo "catify at the same time."
10384         cpp_stuff=1
10385 else
10386         $cat >&4 <<EOM
10387 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
10388 to have to edit the values of CAT[2-5] in config.h...
10389 EOM
10390         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
10391 fi
10392 $rm -f cpp_stuff.*
10393
10394 : see if this is a db.h system
10395 set db.h i_db
10396 eval $inhdr
10397
10398 case "$i_db" in
10399 $define)
10400         : Check db version.
10401         echo " "
10402         echo "Checking Berkeley DB version ..." >&4
10403         $cat >try.c <<EOCP
10404 #$d_const HASCONST
10405 #ifndef HASCONST
10406 #define const
10407 #endif
10408 #include <sys/types.h>
10409 #include <stdio.h>
10410 #include <db.h>
10411 int main()
10412 {
10413 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
10414     int Major, Minor, Patch ;
10415     unsigned long Version ;
10416     (void)db_version(&Major, &Minor, &Patch) ;
10417     printf("You have Berkeley DB Version 2 or greater\n");
10418
10419     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
10420                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
10421     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
10422                 Major, Minor, Patch) ;
10423
10424     /* check that db.h & libdb are compatible */
10425     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
10426         printf("db.h and libdb are incompatible\n") ;
10427         exit(3);        
10428     }
10429
10430     printf("db.h and libdb are compatible\n") ;
10431
10432     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
10433                 + DB_VERSION_PATCH ;
10434
10435     /* needs to be >= 2.3.4 */
10436     if (Version < 2003004) {
10437     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
10438         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
10439         exit(2);        
10440     }
10441
10442     exit(0);
10443 #else
10444 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
10445     printf("You have Berkeley DB Version 1\n");
10446     exit(0);    /* DB version < 2: the coast is clear. */
10447 #else
10448     exit(1);    /* <db.h> not Berkeley DB? */
10449 #endif
10450 #endif
10451 }
10452 EOCP
10453         set try
10454         if eval $compile && ./try; then
10455                 echo 'Looks OK.' >&4
10456         else
10457                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
10458                 i_db=$undef
10459                 case " $libs " in
10460                 *"-ldb "*)
10461                         : Remove db from list of libraries to use
10462                         echo "Removing unusable -ldb from library list" >&4
10463                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
10464                         shift
10465                         libs="$*"
10466                         echo "libs = $libs" >&4
10467                         ;;
10468                 esac
10469         fi
10470         $rm -f try.*
10471         ;;
10472 esac
10473
10474 case "$i_db" in
10475 define)
10476         : Check the return type needed for hash 
10477         echo " "
10478         echo "Checking return type needed for hash for Berkeley DB ..." >&4
10479         $cat >try.c <<EOCP
10480 #$d_const HASCONST
10481 #ifndef HASCONST
10482 #define const
10483 #endif
10484 #include <sys/types.h>
10485 #include <db.h>
10486
10487 #ifndef DB_VERSION_MAJOR
10488 u_int32_t hash_cb (ptr, size)
10489 const void *ptr;
10490 size_t size;
10491 {
10492 }
10493 HASHINFO info;
10494 int main()
10495 {
10496         info.hash = hash_cb;
10497 }
10498 #endif
10499 EOCP
10500         if $cc $ccflags -c try.c >try.out 2>&1 ; then
10501                 if $contains warning try.out >>/dev/null 2>&1 ; then
10502                         db_hashtype='int'
10503                 else
10504                         db_hashtype='u_int32_t'
10505                 fi
10506         else
10507                 : XXX Maybe we should just give up here.
10508                 db_hashtype=u_int32_t
10509                 $cat try.out >&4
10510                 echo "Help:  I can't seem to compile the db test program." >&4
10511                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
10512         fi
10513         $rm -f try.*
10514         echo "Your version of Berkeley DB uses $db_hashtype for hash."
10515         ;;
10516 *)      db_hashtype=u_int32_t
10517         ;;
10518 esac
10519 case "$i_db" in
10520 define)
10521         : Check the return type needed for prefix 
10522         echo " "
10523         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
10524         cat >try.c <<EOCP
10525 #$d_const HASCONST
10526 #ifndef HASCONST
10527 #define const
10528 #endif
10529 #include <sys/types.h>
10530 #include <db.h>
10531
10532 #ifndef DB_VERSION_MAJOR
10533 size_t prefix_cb (key1, key2)
10534 const DBT *key1;
10535 const DBT *key2;
10536 {
10537 }
10538 BTREEINFO info;
10539 int main()
10540 {
10541         info.prefix = prefix_cb;
10542 }
10543 #endif
10544 EOCP
10545         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
10546                 if $contains warning try.out >>/dev/null 2>&1 ; then
10547                         db_prefixtype='int'
10548                 else
10549                         db_prefixtype='size_t'
10550                 fi
10551         else
10552                 db_prefixtype='size_t'
10553                 : XXX Maybe we should just give up here.
10554                 $cat try.out >&4
10555                 echo "Help:  I can't seem to compile the db test program." >&4
10556                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
10557         fi
10558         $rm -f try.*
10559         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
10560         ;;
10561 *)      db_prefixtype='size_t'
10562         ;;
10563 esac
10564
10565 : check for void type
10566 echo " "
10567 echo "Checking to see how well your C compiler groks the void type..." >&4
10568 case "$voidflags" in
10569 '')
10570         $cat >try.c <<'EOCP'
10571 #if TRY & 1
10572 void sub() {
10573 #else
10574 sub() {
10575 #endif
10576         extern void moo();      /* function returning void */
10577         void (*goo)();          /* ptr to func returning void */
10578 #if TRY & 8
10579         void *hue;              /* generic ptr */
10580 #endif
10581 #if TRY & 2
10582         void (*foo[10])();
10583 #endif
10584
10585 #if TRY & 4
10586         if(goo == moo) {
10587                 exit(0);
10588         }
10589 #endif
10590         exit(0);
10591 }
10592 int main() { sub(); }
10593 EOCP
10594         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
10595                 voidflags=$defvoidused
10596         echo "Good.  It appears to support void to the level $package wants.">&4
10597                 if $contains warning .out >/dev/null 2>&1; then
10598                         echo "However, you might get some warnings that look like this:"
10599                         $cat .out
10600                 fi
10601         else
10602 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
10603                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
10604                         echo "It supports 1..."
10605                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
10606                                 echo "It also supports 2..."
10607                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
10608                                         voidflags=7
10609                                         echo "And it supports 4 but not 8 definitely."
10610                                 else
10611                                         echo "It doesn't support 4..."
10612                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
10613                                                 voidflags=11
10614                                                 echo "But it supports 8."
10615                                         else
10616                                                 voidflags=3
10617                                                 echo "Neither does it support 8."
10618                                         fi
10619                                 fi
10620                         else
10621                                 echo "It does not support 2..."
10622                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
10623                                         voidflags=13
10624                                         echo "But it supports 4 and 8."
10625                                 else
10626                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
10627                                                 voidflags=5
10628                                                 echo "And it supports 4 but has not heard about 8."
10629                                         else
10630                                                 echo "However it supports 8 but not 4."
10631                                         fi
10632                                 fi
10633                         fi
10634                 else
10635                         echo "There is no support at all for void."
10636                         voidflags=0
10637                 fi
10638         fi
10639 esac
10640 case "$voidflags" in
10641 "$defvoidused") ;;
10642 *)      $cat >&4 <<'EOM'
10643   Support flag bits are:
10644     1: basic void declarations.
10645     2: arrays of pointers to functions returning void.
10646     4: operations between pointers to and addresses of void functions.
10647     8: generic void pointers.
10648 EOM
10649         dflt="$voidflags";
10650         rp="Your void support flags add up to what?"
10651         . ./myread
10652         voidflags="$ans"
10653         ;;
10654 esac
10655 $rm -f try.* .out
10656
10657
10658 : How can we generate normalized random numbers ?
10659 echo " "
10660 echo "Looking for a random number function..." >&4
10661 case "$randfunc" in
10662 '')
10663         if set drand48 val -f; eval $csym; $val; then
10664                 dflt="drand48"
10665                 echo "Good, found drand48()." >&4
10666         elif set random val -f; eval $csym; $val; then
10667                 dflt="random"
10668                 echo "OK, found random()." >&4
10669         else
10670                 dflt="rand"
10671                 echo "Yick, looks like I have to use rand()." >&4
10672         fi
10673         echo " "
10674         ;;
10675 *)
10676         dflt="$randfunc"
10677         ;;
10678 esac
10679 cont=true
10680
10681 case "$ccflags" in
10682 *-Dmy_rand=*|*-Dmy_srand=*)
10683         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
10684         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
10685         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
10686         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
10687         ;;
10688 esac
10689
10690 while $test "$cont"; do
10691         rp="Use which function to generate random numbers?"
10692         . ./myread
10693         if $test "$ans" = "$dflt"; then
10694                 : null
10695         else
10696                 randbits=''
10697         fi
10698         randfunc="$ans"
10699         if set $ans val -f; eval $csym; $val; then
10700                 cont=''
10701         else
10702                 dflt=y
10703                 rp="I cannot find function $ans. Use that name anyway?"
10704                 . ./myread
10705                 dflt=rand
10706                 case "$ans" in
10707                         [yY]*) cont='';;
10708                 esac
10709         fi
10710         case "$cont" in
10711         '')
10712                 case "$randfunc" in
10713                 drand48)
10714                         drand01="drand48()"
10715                         seedfunc="srand48"
10716                         randbits=48
10717                         randseedtype=long
10718                         ;;
10719                 rand|random)
10720                         case "$randbits" in
10721                         '')
10722 echo "Checking to see how many bits your $randfunc() function produces..." >&4
10723                                 $cat >try.c <<EOCP
10724 #$i_unistd I_UNISTD
10725 #$i_stdlib I_STDLIB
10726 #include <stdio.h>
10727 #ifdef I_UNISTD
10728 #  include <unistd.h>
10729 #endif
10730 #ifdef I_STDLIB
10731 #  include <stdlib.h>
10732 #endif
10733 int main()
10734 {
10735         register int i;
10736         register unsigned long tmp;
10737         register unsigned long max = 0L;
10738
10739         for (i = 1000; i; i--) {
10740                 tmp = (unsigned long) $randfunc();
10741                 if (tmp > max) max = tmp;
10742         }
10743         for (i = 0; max; i++)
10744                 max /= 2;
10745         printf("%d\n",i);
10746 }
10747 EOCP
10748                                 set try
10749                                 if eval $compile_ok; then
10750                                         dflt=`try`
10751                                 else
10752                                         dflt='?'
10753                                         echo "(I can't seem to compile the test program...)"
10754                                 fi
10755                                 ;;
10756                         *)
10757                                 dflt="$randbits"
10758                                 ;;
10759                         esac
10760                         rp="How many bits does your $randfunc() function produce?"
10761                         . ./myread
10762                         randbits="$ans"
10763                         $rm -f try.c try
10764                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10765                         seedfunc="s$randfunc"
10766                         randseedtype=unsigned
10767                         ;;
10768                 *)
10769                         dflt="31"
10770                         rp="How many bits does your $randfunc() function produce?"
10771                         . ./myread
10772                         randbits="$ans"
10773                         seedfunc="s$randfunc"
10774                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10775                         if set $seedfunc val -f; eval $csym; $val; then
10776                                 echo "(Using $seedfunc() to seed random generator)"
10777                         else
10778                                 echo "(Warning: no $seedfunc() to seed random generator)"
10779                                 seedfunc=rand
10780                         fi
10781                         randseedtype=unsigned
10782                         ;;
10783                 esac
10784                 ;;
10785         esac
10786 done
10787
10788 echo " "
10789 echo "Determining whether or not we are on an EBCDIC system..." >&4
10790 $cat >tebcdic.c <<'EOM'
10791 int main()
10792 {
10793   if ('M'==0xd4) return 0;
10794   return 1;
10795 }
10796 EOM
10797
10798 val=$undef
10799 set tebcdic
10800 if eval $compile_ok; then
10801         if ./tebcdic; then
10802                 echo "You have EBCDIC." >&4
10803                 val="$define"
10804         else
10805                 echo "Nope, no EBCDIC.  Assuming ASCII or some ISO Latin." >&4
10806         fi
10807 else
10808         echo "I'm unable to compile the test program." >&4
10809         echo "I'll assume ASCII or some ISO Latin." >&4
10810 fi
10811 $rm -f tebcdic.c tebcdic
10812 set ebcdic
10813 eval $setvar
10814
10815 : see what type file positions are declared as in the library
10816 rp="What is the type for file position used by fsetpos()?"
10817 set fpos_t fpostype long stdio.h sys/types.h
10818 eval $typedef_ask
10819
10820 : Store the full pathname to the sed program for use in the C program
10821 full_sed=$sed
10822
10823 : see what type gids are declared as in the kernel
10824 echo " "
10825 echo "Looking for the type for group ids returned by getgid()."
10826 set gid_t gidtype xxx stdio.h sys/types.h
10827 eval $typedef
10828 case "$gidtype" in
10829 xxx)
10830         xxx=`./findhdr sys/user.h`
10831         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
10832         case $1 in
10833         unsigned) dflt="$1 $2" ;;
10834         *) dflt="$1" ;;
10835         esac
10836         ;;
10837 *) dflt="$gidtype";;
10838 esac
10839 case "$gidtype" in
10840 gid_t) echo "gid_t found." ;;
10841 *)      rp="What is the type for group ids returned by getgid()?"
10842         . ./myread
10843         gidtype="$ans"
10844         ;;
10845 esac
10846
10847 : see if getgroups exists
10848 set getgroups d_getgrps
10849 eval $inlibc
10850
10851 : see if setgroups exists
10852 set setgroups d_setgrps
10853 eval $inlibc
10854
10855
10856 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
10857 echo " "
10858 case "$d_getgrps$d_setgrps" in
10859 *define*)
10860         case "$groupstype" in
10861         '') dflt="$gidtype" ;;
10862         *)  dflt="$groupstype" ;;
10863         esac
10864         $cat <<EOM
10865 What type of pointer is the second argument to getgroups() and setgroups()?
10866 Usually this is the same as group ids, $gidtype, but not always.
10867
10868 EOM
10869         rp='What type pointer is the second argument to getgroups() and setgroups()?'
10870         . ./myread
10871         groupstype="$ans"
10872         ;;
10873 *)  groupstype="$gidtype";;
10874 esac
10875
10876 : see what type lseek is declared as in the kernel
10877 rp="What is the type used for lseek's offset on this system?"
10878 set off_t lseektype long stdio.h sys/types.h
10879 eval $typedef_ask
10880
10881 echo " "
10882 $echo $n "Checking to see how big your file offsets are...$c" >&4
10883 $cat >try.c <<EOCP
10884 #include <sys/types.h>
10885 #include <stdio.h>
10886 int main()
10887 {
10888         printf("%d\n", sizeof($lseektype));
10889 }
10890 EOCP
10891 set try
10892 if eval $compile_ok; then
10893         lseeksize=`./try`
10894         $echo " $lseeksize bytes." >&4
10895 else
10896         dflt='4'
10897         echo " "
10898         echo "(I can't seem to compile the test program.  Guessing...)"
10899         rp="What is the size of your file offsets (in bytes)?"
10900         . ./myread
10901         lseeksize="$ans"
10902 fi
10903 $rm -f try.c try
10904
10905 echo " "
10906 echo "Checking if your $make program sets \$(MAKE)..." >&4
10907 case "$make_set_make" in
10908 '')
10909         $sed 's/^X //' > testmake.mak << 'EOF'
10910 Xall:
10911 X       @echo 'maketemp="$(MAKE)"'
10912 EOF
10913         case "`$make -f testmake.mak 2>/dev/null`" in
10914         *maketemp=*) make_set_make='#' ;;
10915         *)      make_set_make="MAKE=$make" ;;
10916         esac
10917         $rm -f testmake.mak
10918         ;;
10919 esac
10920 case "$make_set_make" in
10921 '#') echo "Yup, it does.";;
10922 *) echo "Nope, it doesn't.";;
10923 esac
10924
10925 : see what type is used for mode_t
10926 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
10927 set mode_t modetype int stdio.h sys/types.h
10928 eval $typedef_ask
10929
10930 : define a fucntion to check prototypes
10931 $cat > protochk <<EOSH
10932 $startsh
10933 cc="$cc"
10934 optimize="$optimize"
10935 ccflags="$ccflags"
10936 prototype="$prototype"
10937 define="$define"
10938 rm=$rm
10939 EOSH
10940
10941 $cat >> protochk <<'EOSH'
10942
10943 $rm -f try.c
10944 foo="$1"
10945 shift
10946 while test $# -ge 2; do
10947         case "$1" in
10948                 $define) echo "#include <$2>" >> try.c ;;
10949                 literal) echo "$2" >> try.c ;;
10950         esac
10951     shift 2
10952 done
10953 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
10954 cat >> try.c <<'EOCP'
10955 #ifdef CAN_PROTOTYPE
10956 #define _(args) args
10957 #else
10958 #define _(args) ()
10959 #endif
10960 EOCP
10961 echo "$foo" >> try.c
10962 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
10963 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
10964 status=$?
10965 $rm -f try.[co]
10966 exit $status
10967 EOSH
10968 chmod +x protochk
10969 $eunicefix protochk
10970
10971 : see what type is used for size_t
10972 rp="What is the type used for the length parameter for string functions?"
10973 set size_t sizetype 'unsigned int' stdio.h sys/types.h
10974 eval $typedef_ask
10975
10976 : check for type of arguments to gethostbyaddr. 
10977 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
10978         case "$d_gethbyaddr" in
10979         $define)
10980                 $cat <<EOM
10981
10982 Checking to see what type of arguments are accepted by gethostbyaddr().
10983 EOM
10984                 hdrs="$define sys/types.h
10985                         $d_socket sys/socket.h 
10986                         $i_niin netinet/in.h 
10987                         $i_netdb netdb.h
10988                         $i_unistd unistd.h"
10989                 : The first arg can 'char *' or 'void *'
10990                 : The second arg is some of integral type
10991                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
10992                         for yyy in size_t long int; do
10993                                 case "$netdb_host_type" in
10994                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
10995                                         if ./protochk "$try" $hdrs; then
10996                                                 echo "Your system accepts $xxx for the first arg."
10997                                                 echo "...and $yyy for the second arg."
10998                                                 netdb_host_type="$xxx"
10999                                                 netdb_hlen_type="$yyy"
11000                                         fi
11001                                         ;;
11002                                 esac
11003                         done
11004                 done
11005                 : In case none of those worked, prompt the user.
11006                 case "$netdb_host_type" in
11007                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
11008                         dflt='char *'
11009                         . ./myread
11010                         netdb_host_type=$ans
11011                         rp='What is the type for the 2nd argument to gethostbyaddr?'
11012                         dflt="$sizetype"
11013                         . ./myread
11014                         netdb_hlen_type=$ans
11015                         ;;
11016                 esac
11017                 ;;
11018         *)      : no gethostbyaddr, so pick harmless defaults
11019                 netdb_host_type='char *'
11020                 netdb_hlen_type="$sizetype"
11021                 ;;
11022         esac
11023         # Remove the "const" if needed. -- but then we'll have a 
11024         # prototype clash!
11025         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
11026 fi
11027
11028 : check for type of argument to gethostbyname. 
11029 if test "X$netdb_name_type" = X ; then
11030         case "$d_gethbyname" in
11031         $define)
11032                 $cat <<EOM
11033
11034 Checking to see what type of argument is accepted by gethostbyname().
11035 EOM
11036                 hdrs="$define sys/types.h
11037                         $d_socket sys/socket.h 
11038                         $i_niin netinet/in.h 
11039                         $i_netdb netdb.h
11040                         $i_unistd unistd.h"
11041                 for xxx in "const char *" "char *"; do
11042                         case "$netdb_name_type" in
11043                         '')     try="extern struct hostent *gethostbyname($xxx);"
11044                                 if ./protochk "$try" $hdrs; then
11045                                         echo "Your system accepts $xxx."
11046                                         netdb_name_type="$xxx"
11047                                 fi
11048                                 ;;
11049                         esac
11050                 done
11051                 : In case none of those worked, prompt the user.
11052                 case "$netdb_name_type" in
11053                 '')     rp='What is the type for the 1st argument to gethostbyname?'
11054                         dflt='char *'
11055                         . ./myread
11056                         netdb_name_type=$ans
11057                         ;;
11058                 esac
11059                 ;;
11060         *)      : no gethostbyname, so pick harmless default
11061                 netdb_name_type='char *'
11062                 ;;
11063         esac
11064 fi
11065
11066 : check for type of 1st argument to getnetbyaddr. 
11067 if test "X$netdb_net_type" = X ; then
11068         case "$d_getnbyaddr" in
11069         $define)
11070                 $cat <<EOM
11071
11072 Checking to see what type of 1st argument is accepted by getnetbyaddr().
11073 EOM
11074                 hdrs="$define sys/types.h
11075                         $d_socket sys/socket.h 
11076                         $i_niin netinet/in.h 
11077                         $i_netdb netdb.h
11078                         $i_unistd unistd.h"
11079                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
11080                         case "$netdb_net_type" in
11081                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
11082                                 if ./protochk "$try" $hdrs; then
11083                                         echo "Your system accepts $xxx."
11084                                         netdb_net_type="$xxx"
11085                                 fi
11086                                 ;;
11087                         esac
11088                 done
11089                 : In case none of those worked, prompt the user.
11090                 case "$netdb_net_type" in
11091                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
11092                         dflt='long'
11093                         . ./myread
11094                         netdb_net_type=$ans
11095                         ;;
11096                 esac
11097                 ;;
11098         *)      : no getnetbyaddr, so pick harmless default
11099                 netdb_net_type='long'
11100                 ;;
11101         esac
11102 fi
11103 : locate the preferred pager for this system
11104 case "$pager" in
11105 '')
11106         dflt=''
11107         case "$pg" in
11108         /*) dflt=$pg;;
11109         esac
11110         case "$more" in
11111         /*) dflt=$more;;
11112         esac
11113         case "$less" in
11114         /*) dflt=$less;;
11115         esac
11116         case "$dflt" in
11117         '') dflt=/usr/ucb/more;;
11118         esac
11119         ;;
11120 *) dflt="$pager";;
11121 esac
11122 echo " "
11123 fn=f/
11124 rp='What pager is used on your system?'
11125 . ./getfile
11126 pager="$ans"
11127
11128 : see what type pids are declared as in the kernel
11129 rp="What is the type of process ids on this system?"
11130 set pid_t pidtype int stdio.h sys/types.h
11131 eval $typedef_ask
11132
11133 : check for length of pointer
11134 echo " "
11135 case "$ptrsize" in
11136 '')
11137         $echo $n "Checking to see how big your pointers are...$c" >&4
11138         if test "$voidflags" -gt 7; then
11139                 echo '#define VOID_PTR char *' > try.c
11140         else
11141                 echo '#define VOID_PTR void *' > try.c
11142         fi
11143         $cat >>try.c <<'EOCP'
11144 #include <stdio.h>
11145 int main()
11146 {
11147         printf("%d\n", sizeof(VOID_PTR));
11148         exit(0);
11149 }
11150 EOCP
11151         set try
11152         if eval $compile_ok; then
11153                 ptrsize=`./try`
11154                 $echo " $ptrsize bytes." >&4
11155         else
11156                 dflt='4'
11157                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
11158                 rp="What is the size of a pointer (in bytes)?"
11159                 . ./myread
11160                 ptrsize="$ans"
11161         fi
11162         ;;
11163 esac
11164 $rm -f try.c try
11165
11166 : see if ar generates random libraries by itself
11167 echo " "
11168 echo "Checking how to generate random libraries on your machine..." >&4
11169 echo 'int bar1() { return bar2(); }' > bar1.c
11170 echo 'int bar2() { return 2; }' > bar2.c
11171 $cat > foo.c <<'EOP'
11172 int main() { printf("%d\n", bar1()); exit(0); }
11173 EOP
11174 $cc $ccflags -c bar1.c >/dev/null 2>&1
11175 $cc $ccflags -c bar2.c >/dev/null 2>&1
11176 $cc $ccflags -c foo.c >/dev/null 2>&1
11177 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
11178 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11179         ./foobar >/dev/null 2>&1; then
11180         echo "$ar appears to generate random libraries itself."
11181         orderlib=false
11182         ranlib=":"
11183 elif $ar ts bar$_a >/dev/null 2>&1 &&
11184         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11185         ./foobar >/dev/null 2>&1; then
11186                 echo "a table of contents needs to be added with '$ar ts'."
11187                 orderlib=false
11188                 ranlib="$ar ts"
11189 else
11190         case "$ranlib" in
11191         :) ranlib='';;
11192         '')
11193                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
11194                 $test -f $ranlib || ranlib=''
11195                 ;;
11196         esac
11197         if $test -n "$ranlib"; then
11198                 echo "your system has '$ranlib'; we'll use that."
11199                 orderlib=false
11200         else
11201                 echo "your system doesn't seem to support random libraries"
11202                 echo "so we'll use lorder and tsort to order the libraries."
11203                 orderlib=true
11204                 ranlib=":"
11205         fi
11206 fi
11207 $rm -f foo* bar* 
11208
11209 : check for type of arguments to select. 
11210 case "$selecttype" in
11211 '') case "$d_select" in
11212         $define)
11213                 $cat <<EOM
11214 Checking to see what type of arguments are accepted by select().
11215 EOM
11216                 hdrs="$define sys/types.h
11217                         $i_systime sys/time.h 
11218                         $i_sysselct sys/select.h
11219                         $d_socket sys/socket.h"
11220                 : The first arg can be int, unsigned, or size_t
11221                 : The last arg may or may not be 'const'
11222                 val=''
11223                 : void pointer has been seen but using that
11224                 : breaks the selectminbits test
11225                 for xxx in 'fd_set *' 'int *'; do
11226                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
11227                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
11228                                         case "$val" in
11229                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
11230                                                 if ./protochk "$try" $hdrs; then
11231                                                         echo "Your system accepts $xxx."
11232                                                         val="$xxx"
11233                                                 fi
11234                                                 ;;
11235                                         esac
11236                                 done
11237                         done
11238                 done
11239                 case "$val" in
11240                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
11241                         case "$d_fd_set" in
11242                                 $define) dflt="fd_set *" ;;
11243                                 *)              dflt="int *" ;;
11244                         esac
11245                         . ./myread
11246                         val=$ans
11247                         ;;
11248                 esac
11249                 selecttype="$val"
11250                 ;;
11251         *)      : no select, so pick a harmless default
11252                 selecttype='int *'
11253                 ;;
11254         esac
11255         ;;
11256 esac
11257
11258 : check for the select 'width'
11259 case "$selectminbits" in
11260 '') case "$d_select" in
11261         $define)
11262                 $cat <<EOM
11263
11264 Checking to see on how many bits at a time your select() operates...
11265 EOM
11266                 $cat >try.c <<EOCP
11267 #include <sys/types.h>
11268 #$i_time I_TIME
11269 #$i_systime I_SYS_TIME
11270 #$i_systimek I_SYS_TIME_KERNEL
11271 #ifdef I_TIME
11272 #   include <time.h>
11273 #endif
11274 #ifdef I_SYS_TIME
11275 #   ifdef I_SYS_TIME_KERNEL
11276 #       define KERNEL
11277 #   endif
11278 #   include <sys/time.h>
11279 #   ifdef I_SYS_TIME_KERNEL
11280 #       undef KERNEL
11281 #   endif
11282 #endif
11283 #$i_sysselct I_SYS_SELECT
11284 #ifdef I_SYS_SELECT
11285 #include <sys/select.h>
11286 #endif
11287 #include <stdio.h>
11288 $selecttype b;
11289 #define S sizeof(*(b))
11290 #define MINBITS 64
11291 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
11292 #define NBITS  (NBYTES * 8)
11293 int main() {
11294     char s[NBYTES];
11295     struct timeval t;
11296     int i;
11297     FILE* fp;
11298     int fd;
11299
11300     fclose(stdin);
11301     fp = fopen("try.c", "r");
11302     if (fp == 0)
11303       exit(1);
11304     fd = fileno(fp);
11305     if (fd < 0)
11306       exit(2);
11307     b = ($selecttype)s;
11308     for (i = 0; i < NBITS; i++)
11309         FD_SET(i, b);
11310     t.tv_sec  = 0;
11311     t.tv_usec = 0;
11312     select(fd + 1, b, 0, 0, &t);
11313     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
11314     printf("%d\n", i + 1);
11315     return 0;
11316 }
11317 EOCP
11318                 set try
11319                 if eval $compile_ok; then
11320                         selectminbits=`./try`
11321                         case "$selectminbits" in
11322                         '')     cat >&4 <<EOM
11323 Cannot figure out on how many bits at a time your select() operates.
11324 I'll play safe and guess it is 32 bits.
11325 EOM
11326                                 selectminbits=32
11327                                 bits="32 bits"
11328                                 ;;
11329                         1)      bits="1 bit" ;;
11330                         *)      bits="$selectminbits bits" ;;
11331                         esac
11332                         echo "Your select() operates on $bits at a time." >&4
11333                 else
11334                         rp='What is the minimum number of bits your select() operates on?'
11335                         case "$byteorder" in
11336                         1234|12345678)  dflt=32 ;;
11337                         *)              dflt=1  ;;
11338                         esac
11339                         . ./myread
11340                         val=$ans
11341                         selectminbits="$val"
11342                 fi
11343                 $rm -f try.* try
11344                 ;;
11345         *)      : no select, so pick a harmless default
11346                 selectminbits='32'
11347                 ;;
11348         esac
11349         ;;
11350 esac
11351
11352 : Trace out the files included by signal.h, then look for SIGxxx names.
11353 : Remove SIGARRAYSIZE used by HPUX.
11354 : Remove SIGTYP void lines used by OS2.
11355 xxx=`echo '#include <signal.h>' |
11356         $cppstdin $cppminus $cppflags 2>/dev/null |
11357         $grep '^[       ]*#.*include' | 
11358         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
11359 : Check this list of files to be sure we have parsed the cpp output ok.
11360 : This will also avoid potentially non-existent files, such 
11361 : as ../foo/bar.h
11362 xxxfiles=''
11363 for xx in $xxx /dev/null ; do
11364         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
11365 done
11366 : If we have found no files, at least try signal.h
11367 case "$xxxfiles" in
11368 '')     xxxfiles=`./findhdr signal.h` ;;
11369 esac
11370 xxx=`awk '
11371 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $3 !~ /void/ {
11372         print substr($2, 4, 20)
11373 }
11374 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
11375         print substr($3, 4, 20)
11376 }' $xxxfiles`
11377 : Append some common names just in case the awk scan failed.
11378 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
11379 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
11380 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
11381 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
11382 : generate a few handy files for later
11383 $cat > signal.c <<'EOCP'
11384 #include <sys/types.h>
11385 #include <signal.h>
11386 #include <stdio.h>
11387 int main() {
11388
11389 /* Strange style to avoid deeply-nested #if/#else/#endif */
11390 #ifndef NSIG
11391 #  ifdef _NSIG
11392 #    define NSIG (_NSIG)
11393 #  endif
11394 #endif
11395
11396 #ifndef NSIG
11397 #  ifdef SIGMAX
11398 #    define NSIG (SIGMAX+1)
11399 #  endif
11400 #endif
11401
11402 #ifndef NSIG
11403 #  ifdef SIG_MAX
11404 #    define NSIG (SIG_MAX+1)
11405 #  endif
11406 #endif
11407
11408 #ifndef NSIG
11409 #  ifdef MAXSIG
11410 #    define NSIG (MAXSIG+1)
11411 #  endif
11412 #endif
11413
11414 #ifndef NSIG
11415 #  ifdef MAX_SIG
11416 #    define NSIG (MAX_SIG+1)
11417 #  endif
11418 #endif
11419
11420 #ifndef NSIG
11421 #  ifdef SIGARRAYSIZE
11422 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
11423 #  endif
11424 #endif
11425
11426 #ifndef NSIG
11427 #  ifdef _sys_nsig
11428 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
11429 #  endif
11430 #endif
11431
11432 /* Default to some arbitrary number that's big enough to get most
11433    of the common signals.
11434 */
11435 #ifndef NSIG
11436 #    define NSIG 50
11437 #endif
11438
11439 printf("NSIG %d\n", NSIG);
11440
11441 #ifndef JUST_NSIG
11442
11443 EOCP
11444
11445 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
11446 {
11447         printf "#ifdef SIG"; printf $1; printf "\n"
11448         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
11449         printf $1; printf ");\n"
11450         printf "#endif\n"
11451 }
11452 END {
11453         printf "#endif /* JUST_NSIG */\n";
11454         printf "}\n";
11455 }
11456 ' >>signal.c
11457 $cat >signal.awk <<'EOP'
11458 BEGIN { ndups = 0 }
11459 $1 ~ /^NSIG$/ { nsig = $2 }
11460 ($1 !~ /^NSIG$/) && (NF == 2) {
11461     if ($2 > maxsig) { maxsig = $2 }
11462     if (sig_name[$2]) {
11463         dup_name[ndups] = $1
11464         dup_num[ndups] = $2
11465         ndups++ 
11466     }
11467     else {
11468         sig_name[$2] = $1
11469         sig_num[$2] = $2
11470     }
11471
11472 }
11473 END { 
11474     if (nsig == 0) { nsig = maxsig + 1 }
11475         for (n = 1; n < nsig; n++) {
11476                 if (sig_name[n]) {
11477                         printf("%s %d\n", sig_name[n], sig_num[n])
11478                 }
11479                 else {
11480                         printf("NUM%d %d\n", n, n) 
11481                 }
11482         }
11483     for (n = 0; n < ndups; n++) {
11484                 printf("%s %d\n", dup_name[n], dup_num[n])
11485     }
11486 }
11487 EOP
11488 $cat >signal_cmd <<EOS
11489 $startsh
11490 if $test -s signal.lst; then
11491     echo "Using your existing signal.lst file"
11492         exit 0
11493 fi
11494 xxx="$xxx"
11495 EOS
11496 $cat >>signal_cmd <<'EOS'
11497
11498 set signal
11499 if eval $compile_ok; then
11500         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11501 else
11502         echo "(I can't seem be able to compile the whole test program)" >&4
11503         echo "(I'll try it in little pieces.)" >&4
11504         set signal -DJUST_NSIG
11505         if eval $compile_ok; then
11506                 ./signal$_exe > signal.nsg
11507                 $cat signal.nsg
11508         else
11509                 echo "I can't seem to figure out how many signals you have." >&4
11510                 echo "Guessing 50." >&4
11511                 echo 'NSIG 50' > signal.nsg
11512         fi
11513         : Now look at all the signal names, one at a time.
11514         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
11515                 $cat > signal.c <<EOCP
11516 #include <sys/types.h>
11517 #include <signal.h>
11518 #include <stdio.h>
11519 int main() {
11520 printf("$xx %d\n", SIG${xx});
11521 return 0;
11522 }
11523 EOCP
11524                 set signal
11525                 if eval $compile; then
11526                         echo "SIG${xx} found."
11527                         ./signal$_exe  >> signal.ls1
11528                 else
11529                         echo "SIG${xx} NOT found."
11530                 fi
11531         done
11532         if $test -s signal.ls1; then
11533                 $cat signal.nsg signal.ls1 |
11534                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11535         fi
11536
11537 fi
11538 if $test -s signal.lst; then
11539         :
11540 else
11541         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
11542         echo 'kill -l' >signal
11543         set X `csh -f <signal`
11544         $rm -f signal
11545         shift
11546         case $# in
11547         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
11548         esac
11549         echo $@ | $tr ' ' $trnl | \
11550                 $awk '{ printf $1; printf " %d\n", ++s; }' >signal.lst
11551 fi
11552 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
11553 EOS
11554 chmod a+x signal_cmd
11555 $eunicefix signal_cmd
11556
11557 : generate list of signal names
11558 echo " "
11559 case "$sig_name_init" in
11560 '') doinit=yes ;;
11561 *)  case "$sig_num_init" in
11562     ''|*,*) doinit=yes ;;
11563     esac ;;
11564 esac
11565 case "$doinit" in
11566 yes)
11567         echo "Generating a list of signal names and numbers..." >&4
11568         . ./signal_cmd
11569         sig_name=`$awk '{printf "%s ", $1}' signal.lst`
11570         sig_name="ZERO $sig_name"
11571         sig_name_init=`$awk 'BEGIN { printf "\"ZERO\", " }
11572                                                 { printf "\"%s\", ", $1 }
11573                                                 END { printf "0\n" }' signal.lst`
11574         sig_num=`$awk '{printf "%d ", $2}' signal.lst`
11575         sig_num="0 $sig_num"
11576         sig_num_init=`$awk 'BEGIN { printf "0, " }
11577                                         { printf "%d, ", $2}
11578                                         END { printf "0\n"}' signal.lst`
11579         ;;
11580 esac
11581 echo "The following signals are available:"
11582 echo " "
11583 echo $sig_name | $awk \
11584 'BEGIN { linelen = 0 }
11585 {
11586         for (i = 1; i <= NF; i++) {
11587                 name = "SIG" $i " "
11588                 linelen = linelen + length(name)
11589                 if (linelen > 70) {
11590                         printf "\n"
11591                         linelen = length(name)
11592                 }
11593                 printf "%s", name
11594         }
11595         printf "\n"
11596 }'
11597 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
11598
11599 : see what type is used for signed size_t
11600 set ssize_t ssizetype int stdio.h sys/types.h
11601 eval $typedef
11602 dflt="$ssizetype"
11603 $cat > ssize.c <<EOM
11604 #include <stdio.h>
11605 #include <sys/types.h>
11606 #define Size_t $sizetype
11607 #define SSize_t $dflt
11608 int main()
11609 {
11610         if (sizeof(Size_t) == sizeof(SSize_t))
11611                 printf("$dflt\n");
11612         else if (sizeof(Size_t) == sizeof(int))
11613                 printf("int\n");
11614         else 
11615                 printf("long\n");
11616         exit(0);
11617 }
11618 EOM
11619 echo " "
11620 set ssize
11621 if eval $compile_ok && ./ssize > /dev/null; then
11622         ssizetype=`./ssize`
11623         echo "I'll be using $ssizetype for functions returning a byte count." >&4
11624 else
11625         $cat >&4 <<EOM
11626 Help! I can't compile and run the ssize_t test program: please enlighten me!
11627 (This is probably a misconfiguration in your system or libraries, and
11628 you really ought to fix it.  Still, I'll try anyway.)
11629
11630 I need a type that is the same size as $sizetype, but is guaranteed to
11631 be signed.  Common values are ssize_t, int and long.
11632
11633 EOM
11634         rp="What signed type is the same size as $sizetype?"
11635         . ./myread
11636         ssizetype="$ans"
11637 fi
11638 $rm -f ssize ssize.*
11639
11640 : see what type of char stdio uses.
11641 echo " "
11642 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
11643         echo "Your stdio uses unsigned chars." >&4
11644         stdchar="unsigned char"
11645 else
11646         echo "Your stdio uses signed chars." >&4
11647         stdchar="char"
11648 fi
11649
11650 : see if time exists
11651 echo " "
11652 if test "X$d_time" = X -o X"$timetype" = X; then
11653     if set time val -f d_time; eval $csym; $val; then
11654                 echo 'time() found.' >&4
11655                 val="$define"
11656                 rp="What is the type returned by time() on this system?"
11657                 set time_t timetype long stdio.h sys/types.h
11658                 eval $typedef_ask
11659     else
11660                 echo 'time() not found, hope that will do.' >&4
11661                 val="$undef"
11662                 timetype='int';
11663     fi
11664     set d_time
11665     eval $setvar
11666 fi
11667
11668 : see what type uids are declared as in the kernel
11669 echo " "
11670 echo "Looking for the type for user ids returned by getuid()."
11671 set uid_t uidtype xxx stdio.h sys/types.h
11672 eval $typedef
11673 case "$uidtype" in
11674 xxx)
11675         xxx=`./findhdr sys/user.h`
11676         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
11677         case $1 in
11678         unsigned) dflt="$1 $2" ;;
11679         *) dflt="$1" ;;
11680         esac
11681         ;;
11682 *) dflt="$uidtype";;
11683 esac
11684 case "$uidtype" in
11685 uid_t)  echo "uid_t found." ;;
11686 *)      rp="What is the type for user ids returned by getuid()?"
11687         . ./myread
11688         uidtype="$ans"
11689         ;;
11690 esac
11691
11692 : see if dbm.h is available
11693 : see if dbmclose exists
11694 set dbmclose d_dbmclose
11695 eval $inlibc
11696
11697 case "$d_dbmclose" in
11698 $define)
11699         set dbm.h i_dbm
11700         eval $inhdr
11701         case "$i_dbm" in
11702         $define)
11703                 val="$undef"
11704                 set i_rpcsvcdbm
11705                 eval $setvar
11706                 ;;
11707         *)      set rpcsvc/dbm.h i_rpcsvcdbm
11708                 eval $inhdr
11709                 ;;
11710         esac
11711         ;;
11712 *)      echo "We won't be including <dbm.h>"
11713         val="$undef"
11714         set i_dbm
11715         eval $setvar
11716         val="$undef"
11717         set i_rpcsvcdbm
11718         eval $setvar
11719         ;;
11720 esac
11721
11722 : see if this is a sys/file.h system
11723 val=''
11724 set sys/file.h val
11725 eval $inhdr
11726
11727 : do we need to include sys/file.h ?
11728 case "$val" in
11729 "$define")
11730         echo " "
11731         if $h_sysfile; then
11732                 val="$define"
11733                 echo "We'll be including <sys/file.h>." >&4
11734         else
11735                 val="$undef"
11736                 echo "We won't be including <sys/file.h>." >&4
11737         fi
11738         ;;
11739 *)
11740         h_sysfile=false
11741         ;;
11742 esac
11743 set i_sysfile
11744 eval $setvar
11745
11746 : see if fcntl.h is there
11747 val=''
11748 set fcntl.h val
11749 eval $inhdr
11750
11751 : see if we can include fcntl.h
11752 case "$val" in
11753 "$define")
11754         echo " "
11755         if $h_fcntl; then
11756                 val="$define"
11757                 echo "We'll be including <fcntl.h>." >&4
11758         else
11759                 val="$undef"
11760                 if $h_sysfile; then
11761         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
11762                 else
11763                         echo "We won't be including <fcntl.h>." >&4
11764                 fi
11765         fi
11766         ;;
11767 *)
11768         h_fcntl=false
11769         val="$undef"
11770         ;;
11771 esac
11772 set i_fcntl
11773 eval $setvar
11774
11775 : see if locale.h is available
11776 set locale.h i_locale
11777 eval $inhdr
11778
11779 : see if mach cthreads are available
11780 if test "X$usethreads" = "X$define"; then
11781         set mach/cthreads.h i_machcthr
11782         eval $inhdr
11783 else
11784         i_machcthr="$undef"
11785 fi
11786
11787
11788
11789 : see if this is a math.h system
11790 set math.h i_math
11791 eval $inhdr
11792
11793 : see if this is a mntent.h system
11794 set mntent.h i_mntent
11795 eval $inhdr
11796
11797 : see if ndbm.h is available
11798 set ndbm.h t_ndbm
11799 eval $inhdr
11800 case "$t_ndbm" in
11801 $define)
11802         : see if dbm_open exists
11803         set dbm_open d_dbm_open
11804         eval $inlibc
11805         case "$d_dbm_open" in
11806         $undef)
11807                 t_ndbm="$undef"
11808                 echo "We won't be including <ndbm.h>"
11809                 ;;
11810         esac
11811         ;;
11812 esac
11813 val="$t_ndbm"
11814 set i_ndbm
11815 eval $setvar
11816
11817 : see if net/errno.h is available
11818 val=''
11819 set net/errno.h val
11820 eval $inhdr
11821
11822 : Unfortunately, it causes problems on some systems.  Arrgh.
11823 case "$val" in
11824 $define)
11825         cat > try.c <<'EOM'
11826 #include <stdio.h>
11827 #include <errno.h>
11828 #include <net/errno.h>
11829 int func()
11830 {
11831         return ENOTSOCK;
11832 }
11833 EOM
11834         if $cc $ccflags -c try.c >/dev/null 2>&1; then
11835                 echo "We'll be including <net/errno.h>." >&4
11836         else
11837                 echo "We won't be including <net/errno.h>." >&4
11838                 val="$undef"
11839         fi
11840         $rm -f try.* try
11841         ;;
11842 esac
11843 set i_neterrno
11844 eval $setvar
11845
11846 : see if this is a poll.h system
11847 set poll.h i_poll
11848 eval $inhdr
11849
11850 : get C preprocessor symbols handy
11851 echo " "
11852 $echo $n "Hmm... $c"
11853 echo $al | $tr ' ' $trnl >Cppsym.know
11854 $cat <<EOSS >Cppsym
11855 $startsh
11856 case "\$1" in
11857 -l) list=true
11858         shift
11859         ;;
11860 esac
11861 unknown=''
11862 case "\$list\$#" in
11863 1|2)
11864         for sym do
11865                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
11866                         exit 0
11867                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
11868                         :
11869                 else
11870                         unknown="\$unknown \$sym"
11871                 fi
11872         done
11873         set X \$unknown
11874         shift
11875         ;;
11876 esac
11877 case \$# in
11878 0) exit 1;;
11879 esac
11880 echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
11881 #ifdef \1\\
11882 exit 0; _ _ _ _\1\\      \1\\
11883 #endif\\
11884 /' >Cppsym\$\$
11885 echo "exit 1; _ _ _" >>Cppsym\$\$
11886 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
11887 case "\$list" in
11888 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
11889 *)
11890         sh Cppsym2\$\$
11891         status=\$?
11892         ;;
11893 esac
11894 $rm -f Cppsym\$\$ Cppsym2\$\$
11895 exit \$status
11896 EOSS
11897 chmod +x Cppsym
11898 $eunicefix Cppsym
11899 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
11900
11901 : now check the C compiler for additional symbols
11902 $cat >ccsym <<EOS
11903 $startsh
11904 $cat >tmp.c <<EOF
11905 extern int foo;
11906 EOF
11907 for i in \`$cc -v -c tmp.c 2>&1\`
11908 do
11909         case "\$i" in
11910         -D*) echo "\$i" | $sed 's/^-D//';;
11911         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
11912         esac
11913 done
11914 $rm -f try.c
11915 EOS
11916 chmod +x ccsym
11917 $eunicefix ccsym
11918 ./ccsym > ccsym1.raw
11919 if $test -s ccsym1.raw; then
11920        $sort ccsym1.raw | $uniq >ccsym.raw
11921 else
11922        mv ccsym1.raw ccsym.raw
11923 fi
11924
11925 $awk '/\=/ { print $0; next }
11926         { print $0"=1" }' ccsym.raw >ccsym.list
11927 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
11928 $comm -13 ccsym.true ccsym.list >ccsym.own
11929 $comm -12 ccsym.true ccsym.list >ccsym.com
11930 $comm -23 ccsym.true ccsym.list >ccsym.cpp
11931 also=''
11932 if $test -z ccsym.raw; then
11933         echo "Your C compiler doesn't seem to define any symbols!" >&4
11934         echo " "
11935         echo "However, your C preprocessor defines the following symbols:"
11936         $cat Cppsym.true
11937         ccsymbols=''
11938         cppsymbols=`$cat Cppsym.true`
11939         cppsymbols=`echo $cppsymbols`
11940         cppccsymbols="$cppsymbols"
11941 else
11942         if $test -s ccsym.com; then
11943                 echo "Your C compiler and pre-processor define these symbols:"
11944                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
11945                 also='also '
11946                 symbols='ones'
11947                 cppccsymbols=`$cat ccsym.com`
11948                 cppccsymbols=`echo $cppccsymbols`
11949                 $test "$silent" || sleep 1
11950         fi
11951         if $test -s ccsym.cpp; then
11952                 $test "$also" && echo " "
11953                 echo "Your C pre-processor ${also}defines the following symbols:"
11954                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
11955                 also='further '
11956                 cppsymbols=`$cat ccsym.cpp`
11957                 cppsymbols=`echo $cppsymbols`
11958                 $test "$silent" || sleep 1
11959         fi
11960         if $test -s ccsym.own; then
11961                 $test "$also" && echo " "
11962                 echo "Your C compiler ${also}defines the following cpp symbols:"
11963                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
11964                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
11965                 ccsymbols=`$cat ccsym.own`
11966                 ccsymbols=`echo $ccsymbols`
11967                 $test "$silent" || sleep 1
11968         fi
11969 fi
11970 $rm -f ccsym*
11971
11972 : see if this is a termio system
11973 val="$undef"
11974 val2="$undef"
11975 val3="$undef"
11976 if $test `./findhdr termios.h`; then
11977         set tcsetattr i_termios
11978         eval $inlibc
11979         val3="$i_termios"
11980 fi
11981 echo " "
11982 case "$val3" in
11983 "$define") echo "You have POSIX termios.h... good!" >&4;;
11984 *) if ./Cppsym pyr; then
11985                 case "`/bin/universe`" in
11986                 ucb) if $test `./findhdr sgtty.h`; then
11987                                 val2="$define"
11988                                 echo "<sgtty.h> found." >&4
11989                         else
11990                                 echo "System is pyramid with BSD universe."
11991                                 echo "<sgtty.h> not found--you could have problems." >&4
11992                         fi;;
11993                 *) if $test `./findhdr termio.h`; then
11994                                 val="$define"
11995                                 echo "<termio.h> found." >&4
11996                         else
11997                                 echo "System is pyramid with USG universe."
11998                                 echo "<termio.h> not found--you could have problems." >&4
11999                         fi;;
12000                 esac
12001         elif ./usg; then
12002                 if $test `./findhdr termio.h`; then
12003                         echo "<termio.h> found." >&4
12004                         val="$define"
12005                 elif $test `./findhdr sgtty.h`; then
12006                         echo "<sgtty.h> found." >&4
12007                         val2="$define"
12008                 else
12009 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
12010                 fi
12011         else
12012                 if $test `./findhdr sgtty.h`; then
12013                         echo "<sgtty.h> found." >&4
12014                         val2="$define"
12015                 elif $test `./findhdr termio.h`; then
12016                         echo "<termio.h> found." >&4
12017                         val="$define"
12018                 else
12019 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
12020                 fi
12021         fi;;
12022 esac
12023 set i_termio; eval $setvar
12024 val=$val2; set i_sgtty; eval $setvar
12025 val=$val3; set i_termios; eval $setvar
12026
12027 : see if stdarg is available
12028 echo " "
12029 if $test `./findhdr stdarg.h`; then
12030         echo "<stdarg.h> found." >&4
12031         valstd="$define"
12032 else
12033         echo "<stdarg.h> NOT found." >&4
12034         valstd="$undef"
12035 fi
12036
12037 : see if varags is available
12038 echo " "
12039 if $test `./findhdr varargs.h`; then
12040         echo "<varargs.h> found." >&4
12041 else
12042         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
12043 fi
12044
12045 : set up the varargs testing programs
12046 $cat > varargs.c <<EOP
12047 #ifdef I_STDARG
12048 #include <stdarg.h>
12049 #endif
12050 #ifdef I_VARARGS
12051 #include <varargs.h>
12052 #endif
12053
12054 #ifdef I_STDARG
12055 int f(char *p, ...)
12056 #else
12057 int f(va_alist)
12058 va_dcl
12059 #endif
12060 {
12061         va_list ap;
12062 #ifndef I_STDARG
12063         char *p;
12064 #endif
12065 #ifdef I_STDARG
12066         va_start(ap,p);
12067 #else
12068         va_start(ap);
12069         p = va_arg(ap, char *);
12070 #endif
12071         va_end(ap);
12072 }
12073 EOP
12074 $cat > varargs <<EOP
12075 $startsh
12076 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
12077         echo "true"
12078 else
12079         echo "false"
12080 fi
12081 $rm -f varargs$_o
12082 EOP
12083 chmod +x varargs
12084
12085 : now check which varargs header should be included
12086 echo " "
12087 i_varhdr=''
12088 case "$valstd" in
12089 "$define")
12090         if `./varargs I_STDARG`; then
12091                 val='stdarg.h'
12092         elif `./varargs I_VARARGS`; then
12093                 val='varargs.h'
12094         fi
12095         ;;
12096 *)
12097         if `./varargs I_VARARGS`; then
12098                 val='varargs.h'
12099         fi
12100         ;;
12101 esac
12102 case "$val" in
12103 '')
12104 echo "I could not find the definition for va_dcl... You have problems..." >&4
12105         val="$undef"; set i_stdarg; eval $setvar
12106         val="$undef"; set i_varargs; eval $setvar
12107         ;;
12108 *) 
12109         set i_varhdr
12110         eval $setvar
12111         case "$i_varhdr" in
12112         stdarg.h)
12113                 val="$define"; set i_stdarg; eval $setvar
12114                 val="$undef"; set i_varargs; eval $setvar
12115                 ;;
12116         varargs.h)
12117                 val="$undef"; set i_stdarg; eval $setvar
12118                 val="$define"; set i_varargs; eval $setvar
12119                 ;;
12120         esac
12121         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
12122 esac
12123 $rm -f varargs*
12124
12125 : see if stddef is available
12126 set stddef.h i_stddef
12127 eval $inhdr
12128
12129 : see if sys/access.h is available
12130 set sys/access.h i_sysaccess
12131 eval $inhdr
12132
12133 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
12134 set sys/filio.h i_sysfilio
12135 eval $inhdr
12136 echo " "
12137 if $test `./findhdr sys/ioctl.h`; then
12138         val="$define"
12139         echo '<sys/ioctl.h> found.' >&4
12140 else
12141         val="$undef"
12142         if $test $i_sysfilio = "$define"; then
12143             echo '<sys/ioctl.h> NOT found.' >&4
12144         else
12145                 $test $i_sgtty = "$define" && xxx="sgtty.h"
12146                 $test $i_termio = "$define" && xxx="termio.h"
12147                 $test $i_termios = "$define" && xxx="termios.h"
12148 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
12149         fi
12150 fi
12151 set i_sysioctl
12152 eval $setvar
12153
12154 : see if sys/resource.h has to be included
12155 set sys/resource.h i_sysresrc
12156 eval $inhdr
12157
12158 : see if sys/security.h is available
12159 set sys/security.h i_syssecrt
12160 eval $inhdr
12161
12162 : see if this is a sys/statvfs.h system
12163 set sys/statvfs.h i_sysstatvfs
12164 eval $inhdr
12165
12166 : see if this is a sys/un.h system
12167 set sys/un.h i_sysun
12168 eval $inhdr
12169
12170 : see if this is a syswait system
12171 set sys/wait.h i_syswait
12172 eval $inhdr
12173
12174 : see if this is an utime system
12175 set utime.h i_utime
12176 eval $inhdr
12177
12178 : see if this is a values.h system
12179 set values.h i_values
12180 eval $inhdr
12181
12182 : see if this is a vfork system
12183 case "$d_vfork" in
12184 "$define")
12185         set vfork.h i_vfork
12186         eval $inhdr
12187         ;;
12188 *)
12189         i_vfork="$undef"
12190         ;;
12191 esac
12192
12193 : see if gdbm.h is available
12194 set gdbm.h t_gdbm
12195 eval $inhdr
12196 case "$t_gdbm" in
12197 $define)
12198         : see if gdbm_open exists
12199         set gdbm_open d_gdbm_open
12200         eval $inlibc
12201         case "$d_gdbm_open" in
12202         $undef)
12203                 t_gdbm="$undef"
12204                 echo "We won't be including <gdbm.h>"
12205                 ;;
12206         esac
12207         ;;
12208 esac
12209 val="$t_gdbm"
12210 set i_gdbm
12211 eval $setvar
12212
12213 echo " "
12214 echo "Looking for extensions..." >&4
12215 tdir=`pwd`
12216 cd $rsrc/ext
12217 : If we are using the old config.sh, known_extensions may contain
12218 : old or inaccurate or duplicate values.
12219 known_extensions=''
12220 nonxs_extensions=''
12221 : We do not use find because it might not be available.
12222 : We do not just use MANIFEST because the user may have dropped
12223 : some additional extensions into the source tree and expect them
12224 : to be built.
12225 for xxx in * ; do
12226         case "$xxx" in
12227         DynaLoader|dynaload) ;;
12228         *)      if $test -f $xxx/$xxx.xs; then
12229                         known_extensions="$known_extensions $xxx"
12230                 elif $test -f $xxx/Makefile.PL; then
12231                         nonxs_extensions="$nonxs_extensions $xxx"
12232                 else
12233                         if $test -d $xxx; then
12234                                 # Look for nested extensions, eg. Devel/Dprof.
12235                                 cd $xxx
12236                                 for yyy in * ; do
12237                                 if $test -f $yyy/$yyy.xs; then
12238                                         known_extensions="$known_extensions $xxx/$yyy"
12239                                 elif $test -f $yyy/Makefile.PL; then
12240                                         nonxs_extensions="$nonxs_extensions $xxx/$yyy"
12241                                 fi
12242                                 done
12243                                 cd ..
12244                         fi
12245                 fi 
12246                 ;;
12247         esac
12248 done
12249 set X $nonxs_extensions
12250 shift
12251 nonxs_extensions="$*"
12252 set X $known_extensions
12253 shift
12254 known_extensions="$*"
12255 cd $tdir
12256
12257 : Now see which are supported on this system.
12258 avail_ext=''
12259 for xxx in $known_extensions ; do
12260         case "$xxx" in
12261         DB_File|db_file)
12262                 case "$i_db" in
12263                 $define) avail_ext="$avail_ext $xxx" ;;
12264                 esac
12265                 ;;
12266         GDBM_File|gdbm_fil)
12267                 case "$i_gdbm" in 
12268                 $define) avail_ext="$avail_ext $xxx" ;;
12269                 esac
12270                 ;;
12271         NDBM_File|ndbm_fil)
12272                 case "$i_ndbm" in
12273                 $define) avail_ext="$avail_ext $xxx" ;;
12274                 esac
12275                 ;;
12276         ODBM_File|odbm_fil) 
12277                 case "${i_dbm}${i_rpcsvcdbm}" in
12278                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12279                 esac
12280                 ;;
12281         POSIX|posix)
12282                 case "$useposix" in
12283                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12284                 esac
12285                 ;;
12286         Opcode|opcode)
12287                 case "$useopcode" in
12288                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12289                 esac
12290                 ;;
12291         Socket|socket)
12292                 case "$d_socket" in 
12293                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12294                 esac
12295                 ;;
12296         Thread|thread)
12297                 case "$usethreads" in 
12298                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12299                 esac
12300                 ;;
12301         IPC/SysV|ipc/sysv)
12302                 : XXX Do we need a useipcsysv variable here
12303                 case "${d_msg}${d_sem}${d_shm}" in 
12304                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12305                 esac
12306                 ;;
12307         *)      avail_ext="$avail_ext $xxx"
12308                 ;;
12309         esac
12310 done
12311
12312 set X $avail_ext
12313 shift
12314 avail_ext="$*"
12315
12316 : Now see which nonxs extensions are supported on this system.
12317 : For now assume all are.
12318 nonxs_ext=''
12319 for xxx in $nonxs_extensions ; do
12320         case "$xxx" in
12321         *)      nonxs_ext="$nonxs_ext $xxx"
12322                 ;;
12323         esac
12324 done
12325
12326 set X $nonxs_ext
12327 shift
12328 nonxs_ext="$*"
12329
12330 case $usedl in
12331 $define)
12332         $cat <<EOM
12333 A number of extensions are supplied with $package.  You may choose to
12334 compile these extensions for dynamic loading (the default), compile
12335 them into the $package executable (static loading), or not include
12336 them at all.  Answer "none" to include no extensions.
12337 Note that DynaLoader is always built and need not be mentioned here.
12338
12339 EOM
12340         case "$dynamic_ext" in
12341         '') dflt="$avail_ext" ;;
12342         *)      dflt="$dynamic_ext"
12343                 # Perhaps we are reusing an old out-of-date config.sh.
12344                 case "$hint" in
12345                 previous)
12346                         if test X"$dynamic_ext" != X"$avail_ext"; then
12347                                 $cat <<EOM
12348 NOTICE:  Your previous config.sh list may be incorrect. 
12349 The extensions now available to you are 
12350         ${avail_ext}
12351 but the default list from your previous config.sh is
12352         ${dynamic_ext} 
12353
12354 EOM
12355                         fi
12356                         ;;
12357                 esac
12358                 ;;
12359         esac
12360         case "$dflt" in
12361         '')     dflt=none;;
12362         esac
12363         rp="What extensions do you wish to load dynamically?"
12364         . ./myread
12365         case "$ans" in
12366         none) dynamic_ext=' ' ;;
12367         *) dynamic_ext="$ans" ;;
12368         esac
12369
12370         case "$static_ext" in
12371         '')
12372                 : Exclude those already listed in dynamic linking
12373                 dflt=''
12374                 for xxx in $avail_ext; do
12375                         case " $dynamic_ext " in
12376                         *" $xxx "*) ;;
12377                         *) dflt="$dflt $xxx" ;;
12378                         esac
12379                 done
12380                 set X $dflt
12381                 shift
12382                 dflt="$*"
12383                 ;;
12384         *)  dflt="$static_ext" 
12385                 ;;
12386         esac
12387
12388         case "$dflt" in
12389         '')     dflt=none;;
12390         esac
12391         rp="What extensions do you wish to load statically?"
12392         . ./myread
12393         case "$ans" in
12394         none) static_ext=' ' ;;
12395         *) static_ext="$ans" ;;
12396         esac
12397         ;;
12398 *)
12399         $cat <<EOM
12400 A number of extensions are supplied with $package.  Answer "none" 
12401 to include no extensions. 
12402 Note that DynaLoader is always built and need not be mentioned here.
12403
12404 EOM
12405         case "$static_ext" in
12406         '') dflt="$avail_ext" ;;
12407         *)      dflt="$static_ext"
12408                 # Perhaps we are reusing an old out-of-date config.sh.
12409                 case "$hint" in
12410                 previous)
12411                         if test X"$static_ext" != X"$avail_ext"; then
12412                                 $cat <<EOM
12413 NOTICE:  Your previous config.sh list may be incorrect. 
12414 The extensions now available to you are 
12415         ${avail_ext}
12416 but the default list from your previous config.sh is
12417         ${static_ext} 
12418
12419 EOM
12420                         fi
12421                         ;;
12422                 esac
12423                 ;;
12424         esac
12425         : Exclude those that are not xs extensions
12426         case "$dflt" in
12427         '')     dflt=none;;
12428         esac
12429         rp="What extensions do you wish to include?"
12430         . ./myread
12431         case "$ans" in
12432         none) static_ext=' ' ;;
12433         *) static_ext="$ans" ;;
12434         esac
12435         ;;
12436 esac
12437
12438 set X $dynamic_ext $static_ext $nonxs_ext
12439 shift
12440 extensions="$*"
12441
12442 : Remove build directory name from cppstdin so it can be used from
12443 : either the present location or the final installed location.
12444 echo " "
12445 : Get out of the UU directory to get correct path name.
12446 cd ..
12447 case "$cppstdin" in
12448 `pwd`/cppstdin)
12449         echo "Stripping down cppstdin path name"
12450         cppstdin=cppstdin
12451         ;;
12452 esac
12453 cd UU
12454
12455 : end of configuration questions
12456 echo " "
12457 echo "End of configuration questions."
12458 echo " "
12459
12460 : back to where it started
12461 if test -d ../UU; then
12462         cd ..
12463 fi
12464
12465 : configuration may be patched via a 'config.over' file
12466 if $test -f config.over; then
12467         echo " "
12468         dflt=y
12469         rp='I see a config.over file.  Do you wish to load it?'
12470         . UU/myread
12471         case "$ans" in
12472         n*) echo "OK, I'll ignore it.";;
12473         *)      . ./config.over
12474                 echo "Configuration override changes have been loaded."
12475                 ;;
12476         esac
12477 fi
12478
12479 : in case they want portability, strip down executable paths
12480 case "$d_portable" in
12481 "$define")
12482         echo " "
12483         echo "Stripping down executable paths..." >&4
12484         for file in $loclist $trylist; do
12485                 if test X$file != Xln -a X$file != Xar -o X$osname != Xos2; then
12486                         eval $file="\$file"
12487                 fi
12488         done
12489         ;;
12490 esac
12491
12492 : create config.sh file
12493 echo " "
12494 echo "Creating config.sh..." >&4
12495 $spitshell <<EOT >config.sh
12496 $startsh
12497 #
12498 # This file was produced by running the Configure script. It holds all the
12499 # definitions figured out by Configure. Should you modify one of these values,
12500 # do not forget to propagate your changes by running "Configure -der". You may
12501 # instead choose to run each of the .SH files by yourself, or "Configure -S".
12502 #
12503
12504 # Package name      : $package
12505 # Source directory  : $src
12506 # Configuration time: $cf_time
12507 # Configured by     : $cf_by
12508 # Target system     : $myuname
12509
12510 Author='$Author'
12511 Date='$Date'
12512 Header='$Header'
12513 Id='$Id'
12514 Locker='$Locker'
12515 Log='$Log'
12516 Mcc='$Mcc'
12517 RCSfile='$RCSfile'
12518 Revision='$Revision'
12519 Source='$Source'
12520 State='$State'
12521 _a='$_a'
12522 _exe='$_exe'
12523 _o='$_o'
12524 afs='$afs'
12525 alignbytes='$alignbytes'
12526 ansi2knr='$ansi2knr'
12527 aphostname='$aphostname'
12528 apiversion='$apiversion'
12529 ar='$ar'
12530 archlib='$archlib'
12531 archlibexp='$archlibexp'
12532 archname64='$archname64'
12533 archname='$archname'
12534 archobjs='$archobjs'
12535 awk='$awk'
12536 baserev='$baserev'
12537 bash='$bash'
12538 bin='$bin'
12539 binexp='$binexp'
12540 bison='$bison'
12541 byacc='$byacc'
12542 byteorder='$byteorder'
12543 c='$c'
12544 castflags='$castflags'
12545 cat='$cat'
12546 cc='$cc'
12547 cccdlflags='$cccdlflags'
12548 ccdlflags='$ccdlflags'
12549 ccflags='$ccflags'
12550 ccsymbols='$ccsymbols'
12551 cf_by='$cf_by'
12552 cf_email='$cf_email'
12553 cf_time='$cf_time'
12554 chgrp='$chgrp'
12555 chmod='$chmod'
12556 chown='$chown'
12557 clocktype='$clocktype'
12558 comm='$comm'
12559 compress='$compress'
12560 contains='$contains'
12561 cp='$cp'
12562 cpio='$cpio'
12563 cpp='$cpp'
12564 cpp_stuff='$cpp_stuff'
12565 cppccsymbols='$cppccsymbols'
12566 cppflags='$cppflags'
12567 cpplast='$cpplast'
12568 cppminus='$cppminus'
12569 cpprun='$cpprun'
12570 cppstdin='$cppstdin'
12571 cppsymbols='$cppsymbols'
12572 cryptlib='$cryptlib'
12573 csh='$csh'
12574 d_Gconvert='$d_Gconvert'
12575 d_access='$d_access'
12576 d_accessx='$d_accessx'
12577 d_alarm='$d_alarm'
12578 d_archlib='$d_archlib'
12579 d_attribut='$d_attribut'
12580 d_bcmp='$d_bcmp'
12581 d_bcopy='$d_bcopy'
12582 d_bsd='$d_bsd'
12583 d_bsdgetpgrp='$d_bsdgetpgrp'
12584 d_bsdsetpgrp='$d_bsdsetpgrp'
12585 d_bzero='$d_bzero'
12586 d_casti32='$d_casti32'
12587 d_castneg='$d_castneg'
12588 d_charvspr='$d_charvspr'
12589 d_chown='$d_chown'
12590 d_chroot='$d_chroot'
12591 d_chsize='$d_chsize'
12592 d_closedir='$d_closedir'
12593 d_cmsghdr_s='$d_cmsghdr_s'
12594 d_const='$d_const'
12595 d_crypt='$d_crypt'
12596 d_csh='$d_csh'
12597 d_cuserid='$d_cuserid'
12598 d_dbl_dig='$d_dbl_dig'
12599 d_dbmclose64='$d_dbmclose64'
12600 d_dbminit64='$d_dbminit64'
12601 d_delete64='$d_delete64'
12602 d_difftime='$d_difftime'
12603 d_dirent64_s='$d_dirent64_s'
12604 d_dirnamlen='$d_dirnamlen'
12605 d_dlerror='$d_dlerror'
12606 d_dlopen='$d_dlopen'
12607 d_dlsymun='$d_dlsymun'
12608 d_dosuid='$d_dosuid'
12609 d_drand48proto='$d_drand48proto'
12610 d_dup2='$d_dup2'
12611 d_eaccess='$d_eaccess'
12612 d_endgrent='$d_endgrent'
12613 d_endhent='$d_endhent'
12614 d_endnent='$d_endnent'
12615 d_endpent='$d_endpent'
12616 d_endpwent='$d_endpwent'
12617 d_endsent='$d_endsent'
12618 d_eofnblk='$d_eofnblk'
12619 d_eunice='$d_eunice'
12620 d_fchmod='$d_fchmod'
12621 d_fchown='$d_fchown'
12622 d_fcntl='$d_fcntl'
12623 d_fd_macros='$d_fd_macros'
12624 d_fd_set='$d_fd_set'
12625 d_fds_bits='$d_fds_bits'
12626 d_fetch64='$d_fetch64'
12627 d_fgetpos64='$d_fgetpos64'
12628 d_fgetpos='$d_fgetpos'
12629 d_firstkey64='$d_firstkey64'
12630 d_flexfnam='$d_flexfnam'
12631 d_flock64_s='$d_flock64_s'
12632 d_flock='$d_flock'
12633 d_fopen64='$d_fopen64'
12634 d_fork='$d_fork'
12635 d_fpathconf='$d_fpathconf'
12636 d_freopen64='$d_freopen64'
12637 d_fseek64='$d_fseek64'
12638 d_fseeko64='$d_fseeko64'
12639 d_fseeko='$d_fseeko'
12640 d_fsetpos64='$d_fsetpos64'
12641 d_fsetpos='$d_fsetpos'
12642 d_fstat64='$d_fstat64'
12643 d_fstatfs='$d_fstatfs'
12644 d_fstatvfs='$d_fstatvfs'
12645 d_ftell64='$d_ftell64'
12646 d_ftello64='$d_ftello64'
12647 d_ftello='$d_ftello'
12648 d_ftime='$d_ftime'
12649 d_ftruncate64='$d_ftruncate64'
12650 d_getgrent='$d_getgrent'
12651 d_getgrps='$d_getgrps'
12652 d_gethbyaddr='$d_gethbyaddr'
12653 d_gethbyname='$d_gethbyname'
12654 d_gethent='$d_gethent'
12655 d_gethname='$d_gethname'
12656 d_gethostprotos='$d_gethostprotos'
12657 d_getlogin='$d_getlogin'
12658 d_getnbyaddr='$d_getnbyaddr'
12659 d_getnbyname='$d_getnbyname'
12660 d_getnent='$d_getnent'
12661 d_getnetprotos='$d_getnetprotos'
12662 d_getpbyname='$d_getpbyname'
12663 d_getpbynumber='$d_getpbynumber'
12664 d_getpent='$d_getpent'
12665 d_getpgid='$d_getpgid'
12666 d_getpgrp2='$d_getpgrp2'
12667 d_getpgrp='$d_getpgrp'
12668 d_getppid='$d_getppid'
12669 d_getprior='$d_getprior'
12670 d_getprotoprotos='$d_getprotoprotos'
12671 d_getpwent='$d_getpwent'
12672 d_getsbyname='$d_getsbyname'
12673 d_getsbyport='$d_getsbyport'
12674 d_getsent='$d_getsent'
12675 d_getservprotos='$d_getservprotos'
12676 d_gettimeod='$d_gettimeod'
12677 d_gnulibc='$d_gnulibc'
12678 d_grpasswd='$d_grpasswd'
12679 d_htonl='$d_htonl'
12680 d_index='$d_index'
12681 d_inetaton='$d_inetaton'
12682 d_ino64t='$d_ino64t'
12683 d_int64t='$d_int64t'
12684 d_iovec_s='$d_iovec_s'
12685 d_isascii='$d_isascii'
12686 d_killpg='$d_killpg'
12687 d_lchown='$d_lchown'
12688 d_link='$d_link'
12689 d_locconv='$d_locconv'
12690 d_lockf64='$d_lockf64'
12691 d_lockf='$d_lockf'
12692 d_longdbl='$d_longdbl'
12693 d_longlong='$d_longlong'
12694 d_lseek64='$d_lseek64'
12695 d_lstat64='$d_lstat64'
12696 d_lstat='$d_lstat'
12697 d_madvise='$d_madvise'
12698 d_mblen='$d_mblen'
12699 d_mbstowcs='$d_mbstowcs'
12700 d_mbtowc='$d_mbtowc'
12701 d_memcmp='$d_memcmp'
12702 d_memcpy='$d_memcpy'
12703 d_memmove='$d_memmove'
12704 d_memset='$d_memset'
12705 d_mkdir='$d_mkdir'
12706 d_mkfifo='$d_mkfifo'
12707 d_mktime='$d_mktime'
12708 d_mmap='$d_mmap'
12709 d_mprotect='$d_mprotect'
12710 d_msg='$d_msg'
12711 d_msg_ctrunc='$d_msg_ctrunc'
12712 d_msg_dontroute='$d_msg_dontroute'
12713 d_msg_oob='$d_msg_oob'
12714 d_msg_peek='$d_msg_peek'
12715 d_msg_proxy='$d_msg_proxy'
12716 d_msgctl='$d_msgctl'
12717 d_msgget='$d_msgget'
12718 d_msghdr_s='$d_msghdr_s'
12719 d_msgrcv='$d_msgrcv'
12720 d_msgsnd='$d_msgsnd'
12721 d_msync='$d_msync'
12722 d_munmap='$d_munmap'
12723 d_mymalloc='$d_mymalloc'
12724 d_nextkey64='$d_nextkey64'
12725 d_nice='$d_nice'
12726 d_off64t='$d_off64t'
12727 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
12728 d_oldpthreads='$d_oldpthreads'
12729 d_oldsock='$d_oldsock'
12730 d_open3='$d_open3'
12731 d_open64='$d_open64'
12732 d_opendir64='$d_opendir64'
12733 d_pathconf='$d_pathconf'
12734 d_pause='$d_pause'
12735 d_phostname='$d_phostname'
12736 d_pipe='$d_pipe'
12737 d_poll='$d_poll'
12738 d_portable='$d_portable'
12739 d_pthread_yield='$d_pthread_yield'
12740 d_pwage='$d_pwage'
12741 d_pwchange='$d_pwchange'
12742 d_pwclass='$d_pwclass'
12743 d_pwcomment='$d_pwcomment'
12744 d_pwexpire='$d_pwexpire'
12745 d_pwgecos='$d_pwgecos'
12746 d_pwpasswd='$d_pwpasswd'
12747 d_pwquota='$d_pwquota'
12748 d_readdir64='$d_readdir64'
12749 d_readdir='$d_readdir'
12750 d_readlink='$d_readlink'
12751 d_readv='$d_readv'
12752 d_recvmsg='$d_recvmsg'
12753 d_rename='$d_rename'
12754 d_rewinddir='$d_rewinddir'
12755 d_rmdir='$d_rmdir'
12756 d_safebcpy='$d_safebcpy'
12757 d_safemcpy='$d_safemcpy'
12758 d_sanemcmp='$d_sanemcmp'
12759 d_sched_yield='$d_sched_yield'
12760 d_scm_rights='$d_scm_rights'
12761 d_seekdir64='$d_seekdir64'
12762 d_seekdir='$d_seekdir'
12763 d_select='$d_select'
12764 d_sem='$d_sem'
12765 d_semctl='$d_semctl'
12766 d_semctl_semid_ds='$d_semctl_semid_ds'
12767 d_semctl_semun='$d_semctl_semun'
12768 d_semget='$d_semget'
12769 d_semop='$d_semop'
12770 d_sendmsg='$d_sendmsg'
12771 d_setegid='$d_setegid'
12772 d_seteuid='$d_seteuid'
12773 d_setgrent='$d_setgrent'
12774 d_setgrps='$d_setgrps'
12775 d_sethent='$d_sethent'
12776 d_setlinebuf='$d_setlinebuf'
12777 d_setlocale='$d_setlocale'
12778 d_setnent='$d_setnent'
12779 d_setpent='$d_setpent'
12780 d_setpgid='$d_setpgid'
12781 d_setpgrp2='$d_setpgrp2'
12782 d_setpgrp='$d_setpgrp'
12783 d_setprior='$d_setprior'
12784 d_setpwent='$d_setpwent'
12785 d_setregid='$d_setregid'
12786 d_setresgid='$d_setresgid'
12787 d_setresuid='$d_setresuid'
12788 d_setreuid='$d_setreuid'
12789 d_setrgid='$d_setrgid'
12790 d_setruid='$d_setruid'
12791 d_setsent='$d_setsent'
12792 d_setsid='$d_setsid'
12793 d_setvbuf='$d_setvbuf'
12794 d_sfio='$d_sfio'
12795 d_shm='$d_shm'
12796 d_shmat='$d_shmat'
12797 d_shmatprototype='$d_shmatprototype'
12798 d_shmctl='$d_shmctl'
12799 d_shmdt='$d_shmdt'
12800 d_shmget='$d_shmget'
12801 d_sigaction='$d_sigaction'
12802 d_sigsetjmp='$d_sigsetjmp'
12803 d_socket='$d_socket'
12804 d_sockpair='$d_sockpair'
12805 d_stat64='$d_stat64'
12806 d_statblks='$d_statblks'
12807 d_statfs='$d_statfs'
12808 d_statfsflags='$d_statfsflags'
12809 d_statvfs='$d_statvfs'
12810 d_stdio_cnt_lval='$d_stdio_cnt_lval'
12811 d_stdio_ptr_lval='$d_stdio_ptr_lval'
12812 d_stdiobase='$d_stdiobase'
12813 d_stdstdio='$d_stdstdio'
12814 d_store64='$d_store64'
12815 d_strchr='$d_strchr'
12816 d_strcoll='$d_strcoll'
12817 d_strctcpy='$d_strctcpy'
12818 d_strerrm='$d_strerrm'
12819 d_strerror='$d_strerror'
12820 d_strtod='$d_strtod'
12821 d_strtol='$d_strtol'
12822 d_strtoul='$d_strtoul'
12823 d_strxfrm='$d_strxfrm'
12824 d_suidsafe='$d_suidsafe'
12825 d_symlink='$d_symlink'
12826 d_syscall='$d_syscall'
12827 d_sysconf='$d_sysconf'
12828 d_sysernlst='$d_sysernlst'
12829 d_syserrlst='$d_syserrlst'
12830 d_system='$d_system'
12831 d_tcgetpgrp='$d_tcgetpgrp'
12832 d_tcsetpgrp='$d_tcsetpgrp'
12833 d_telldir64='$d_telldir64'
12834 d_telldir='$d_telldir'
12835 d_telldirproto='$d_telldirproto'
12836 d_time='$d_time'
12837 d_times='$d_times'
12838 d_tmpfile64='$d_tmpfile64'
12839 d_truncate64='$d_truncate64'
12840 d_truncate='$d_truncate'
12841 d_tzname='$d_tzname'
12842 d_umask='$d_umask'
12843 d_uname='$d_uname'
12844 d_union_semun='$d_union_semun'
12845 d_vfork='$d_vfork'
12846 d_void_closedir='$d_void_closedir'
12847 d_voidsig='$d_voidsig'
12848 d_voidtty='$d_voidtty'
12849 d_volatile='$d_volatile'
12850 d_vprintf='$d_vprintf'
12851 d_wait4='$d_wait4'
12852 d_waitpid='$d_waitpid'
12853 d_wcstombs='$d_wcstombs'
12854 d_wctomb='$d_wctomb'
12855 d_writev='$d_writev'
12856 d_xenix='$d_xenix'
12857 date='$date'
12858 db_hashtype='$db_hashtype'
12859 db_prefixtype='$db_prefixtype'
12860 defvoidused='$defvoidused'
12861 direntrytype='$direntrytype'
12862 dlext='$dlext'
12863 dlsrc='$dlsrc'
12864 doublesize='$doublesize'
12865 drand01='$drand01'
12866 dynamic_ext='$dynamic_ext'
12867 eagain='$eagain'
12868 ebcdic='$ebcdic'
12869 echo='$echo'
12870 egrep='$egrep'
12871 emacs='$emacs'
12872 eunicefix='$eunicefix'
12873 exe_ext='$exe_ext'
12874 expr='$expr'
12875 extensions='$extensions'
12876 find='$find'
12877 firstmakefile='$firstmakefile'
12878 flex='$flex'
12879 fpostype='$fpostype'
12880 freetype='$freetype'
12881 full_csh='$full_csh'
12882 full_sed='$full_sed'
12883 gccversion='$gccversion'
12884 gidtype='$gidtype'
12885 glibpth='$glibpth'
12886 grep='$grep'
12887 groupcat='$groupcat'
12888 groupstype='$groupstype'
12889 gzip='$gzip'
12890 h_fcntl='$h_fcntl'
12891 h_sysfile='$h_sysfile'
12892 hint='$hint'
12893 hostcat='$hostcat'
12894 huge='$huge'
12895 i_arpainet='$i_arpainet'
12896 i_bsdioctl='$i_bsdioctl'
12897 i_db='$i_db'
12898 i_dbm='$i_dbm'
12899 i_dirent='$i_dirent'
12900 i_dld='$i_dld'
12901 i_dlfcn='$i_dlfcn'
12902 i_fcntl='$i_fcntl'
12903 i_float='$i_float'
12904 i_gdbm='$i_gdbm'
12905 i_grp='$i_grp'
12906 i_inttypes='$i_inttypes'
12907 i_limits='$i_limits'
12908 i_locale='$i_locale'
12909 i_machcthr='$i_machcthr'
12910 i_malloc='$i_malloc'
12911 i_math='$i_math'
12912 i_memory='$i_memory'
12913 i_mntent='$i_mntent'
12914 i_ndbm='$i_ndbm'
12915 i_netdb='$i_netdb'
12916 i_neterrno='$i_neterrno'
12917 i_niin='$i_niin'
12918 i_poll='$i_poll'
12919 i_pwd='$i_pwd'
12920 i_rpcsvcdbm='$i_rpcsvcdbm'
12921 i_sfio='$i_sfio'
12922 i_sgtty='$i_sgtty'
12923 i_stdarg='$i_stdarg'
12924 i_stddef='$i_stddef'
12925 i_stdlib='$i_stdlib'
12926 i_string='$i_string'
12927 i_sysaccess='$i_sysaccess'
12928 i_sysdir='$i_sysdir'
12929 i_sysfile='$i_sysfile'
12930 i_sysfilio='$i_sysfilio'
12931 i_sysin='$i_sysin'
12932 i_sysioctl='$i_sysioctl'
12933 i_sysmman='$i_sysmman'
12934 i_sysmount='$i_sysmount'
12935 i_sysndir='$i_sysndir'
12936 i_sysparam='$i_sysparam'
12937 i_sysresrc='$i_sysresrc'
12938 i_syssecrt='$i_syssecrt'
12939 i_sysselct='$i_sysselct'
12940 i_syssockio='$i_syssockio'
12941 i_sysstat='$i_sysstat'
12942 i_sysstatvfs='$i_sysstatvfs'
12943 i_systime='$i_systime'
12944 i_systimek='$i_systimek'
12945 i_systimes='$i_systimes'
12946 i_systypes='$i_systypes'
12947 i_sysuio='$i_sysuio'
12948 i_sysun='$i_sysun'
12949 i_syswait='$i_syswait'
12950 i_termio='$i_termio'
12951 i_termios='$i_termios'
12952 i_time='$i_time'
12953 i_unistd='$i_unistd'
12954 i_utime='$i_utime'
12955 i_values='$i_values'
12956 i_varargs='$i_varargs'
12957 i_varhdr='$i_varhdr'
12958 i_vfork='$i_vfork'
12959 ignore_versioned_solibs='$ignore_versioned_solibs'
12960 incpath='$incpath'
12961 inews='$inews'
12962 installarchlib='$installarchlib'
12963 installbin='$installbin'
12964 installman1dir='$installman1dir'
12965 installman3dir='$installman3dir'
12966 installprivlib='$installprivlib'
12967 installscript='$installscript'
12968 installsitearch='$installsitearch'
12969 installsitelib='$installsitelib'
12970 installusrbinperl='$installusrbinperl'
12971 intsize='$intsize'
12972 known_extensions='$known_extensions'
12973 ksh='$ksh'
12974 large='$large'
12975 ld='$ld'
12976 lddlflags='$lddlflags'
12977 ldflags='$ldflags'
12978 less='$less'
12979 lib_ext='$lib_ext'
12980 libc='$libc'
12981 libperl='$libperl'
12982 libpth='$libpth'
12983 libs='$libs'
12984 libswanted='$libswanted'
12985 line='$line'
12986 lint='$lint'
12987 lkflags='$lkflags'
12988 ln='$ln'
12989 lns='$lns'
12990 locincpth='$locincpth'
12991 loclibpth='$loclibpth'
12992 longdblsize='$longdblsize'
12993 longlongsize='$longlongsize'
12994 longsize='$longsize'
12995 lp='$lp'
12996 lpr='$lpr'
12997 ls='$ls'
12998 lseeksize='$lseeksize'
12999 lseektype='$lseektype'
13000 mail='$mail'
13001 mailx='$mailx'
13002 make='$make'
13003 make_set_make='$make_set_make'
13004 mallocobj='$mallocobj'
13005 mallocsrc='$mallocsrc'
13006 malloctype='$malloctype'
13007 man1dir='$man1dir'
13008 man1direxp='$man1direxp'
13009 man1ext='$man1ext'
13010 man3dir='$man3dir'
13011 man3direxp='$man3direxp'
13012 man3ext='$man3ext'
13013 medium='$medium'
13014 mips='$mips'
13015 mips_type='$mips_type'
13016 mkdir='$mkdir'
13017 mmaptype='$mmaptype'
13018 models='$models'
13019 modetype='$modetype'
13020 more='$more'
13021 mv='$mv'
13022 myarchname='$myarchname'
13023 mydomain='$mydomain'
13024 myhostname='$myhostname'
13025 myuname='$myuname'
13026 n='$n'
13027 netdb_hlen_type='$netdb_hlen_type'
13028 netdb_host_type='$netdb_host_type'
13029 netdb_name_type='$netdb_name_type'
13030 netdb_net_type='$netdb_net_type'
13031 nm='$nm'
13032 nm_opt='$nm_opt'
13033 nm_so_opt='$nm_so_opt'
13034 nonxs_ext='$nonxs_ext'
13035 nroff='$nroff'
13036 o_nonblock='$o_nonblock'
13037 obj_ext='$obj_ext'
13038 old_pthread_create_joinable='$old_pthread_create_joinable'
13039 optimize='$optimize'
13040 orderlib='$orderlib'
13041 osname='$osname'
13042 osvers='$osvers'
13043 package='$package'
13044 pager='$pager'
13045 passcat='$passcat'
13046 patchlevel='$patchlevel'
13047 path_sep='$path_sep'
13048 perl='$perl'
13049 perladmin='$perladmin'
13050 perlpath='$perlpath'
13051 pg='$pg'
13052 phostname='$phostname'
13053 pidtype='$pidtype'
13054 plibpth='$plibpth'
13055 pmake='$pmake'
13056 pr='$pr'
13057 prefix='$prefix'
13058 prefixexp='$prefixexp'
13059 privlib='$privlib'
13060 privlibexp='$privlibexp'
13061 prototype='$prototype'
13062 ptrsize='$ptrsize'
13063 randbits='$randbits'
13064 randfunc='$randfunc'
13065 randseedtype='$randseedtype'
13066 ranlib='$ranlib'
13067 rd_nodata='$rd_nodata'
13068 rm='$rm'
13069 rmail='$rmail'
13070 runnm='$runnm'
13071 sched_yield='$sched_yield'
13072 scriptdir='$scriptdir'
13073 scriptdirexp='$scriptdirexp'
13074 sed='$sed'
13075 seedfunc='$seedfunc'
13076 selectminbits='$selectminbits'
13077 selecttype='$selecttype'
13078 sendmail='$sendmail'
13079 sh='$sh'
13080 shar='$shar'
13081 sharpbang='$sharpbang'
13082 shmattype='$shmattype'
13083 shortsize='$shortsize'
13084 shrpenv='$shrpenv'
13085 shsharp='$shsharp'
13086 sig_name='$sig_name'
13087 sig_name_init='$sig_name_init'
13088 sig_num='$sig_num'
13089 sig_num_init='$sig_num_init'
13090 signal_t='$signal_t'
13091 sitearch='$sitearch'
13092 sitearchexp='$sitearchexp'
13093 sitelib='$sitelib'
13094 sitelibexp='$sitelibexp'
13095 sizetype='$sizetype'
13096 sleep='$sleep'
13097 smail='$smail'
13098 small='$small'
13099 so='$so'
13100 sockethdr='$sockethdr'
13101 socketlib='$socketlib'
13102 sort='$sort'
13103 spackage='$spackage'
13104 spitshell='$spitshell'
13105 split='$split'
13106 src='$src'
13107 ssizetype='$ssizetype'
13108 startperl='$startperl'
13109 startsh='$startsh'
13110 static_ext='$static_ext'
13111 stdchar='$stdchar'
13112 stdio_base='$stdio_base'
13113 stdio_bufsiz='$stdio_bufsiz'
13114 stdio_cnt='$stdio_cnt'
13115 stdio_filbuf='$stdio_filbuf'
13116 stdio_ptr='$stdio_ptr'
13117 strings='$strings'
13118 submit='$submit'
13119 subversion='$subversion'
13120 sysman='$sysman'
13121 tail='$tail'
13122 tar='$tar'
13123 tbl='$tbl'
13124 tee='$tee'
13125 test='$test'
13126 timeincl='$timeincl'
13127 timetype='$timetype'
13128 touch='$touch'
13129 tr='$tr'
13130 trnl='$trnl'
13131 troff='$troff'
13132 uidtype='$uidtype'
13133 uname='$uname'
13134 uniq='$uniq'
13135 use64bits='$use64bits'
13136 usedl='$usedl'
13137 usemultiplicity='$usemultiplicity'
13138 usemymalloc='$usemymalloc'
13139 usenm='$usenm'
13140 useopcode='$useopcode'
13141 useperlio='$useperlio'
13142 useposix='$useposix'
13143 usesfio='$usesfio'
13144 useshrplib='$useshrplib'
13145 usethreads='$usethreads'
13146 usevfork='$usevfork'
13147 usrinc='$usrinc'
13148 uuname='$uuname'
13149 version='$version'
13150 vi='$vi'
13151 voidflags='$voidflags'
13152 xlibpth='$xlibpth'
13153 zcat='$zcat'
13154 zip='$zip'
13155 EOT
13156
13157 : Add in command line options if available
13158 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
13159
13160 : add special variables
13161 $test -f $src/patchlevel.h && \
13162 awk '/^#define/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
13163 echo "CONFIG=true" >>config.sh
13164
13165 : propagate old symbols
13166 if $test -f UU/config.sh; then
13167         <UU/config.sh sort | uniq >UU/oldconfig.sh
13168         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
13169         sort | uniq -u >UU/oldsyms
13170         set X `cat UU/oldsyms`
13171         shift
13172         case $# in
13173         0) ;;
13174         *)
13175                 cat <<EOM
13176 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
13177 EOM
13178                 echo "# Variables propagated from previous config.sh file." >>config.sh
13179                 for sym in `cat UU/oldsyms`; do
13180                         echo "    Propagating $hint variable "'$'"$sym..."
13181                         eval 'tmp="$'"${sym}"'"'
13182                         echo "$tmp" | \
13183                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
13184                 done
13185                 ;;
13186         esac
13187 fi
13188
13189 : Finish up by extracting the .SH files
13190 case "$alldone" in
13191 exit)
13192         $rm -rf UU
13193         echo "Done."
13194         exit 0
13195         ;;
13196 cont)
13197         ;;
13198 '')
13199         dflt=''
13200         nostick=true
13201         $cat <<EOM
13202
13203 If you'd like to make any changes to the config.sh file before I begin
13204 to configure things, do it as a shell escape now (e.g. !vi config.sh).
13205
13206 EOM
13207         rp="Press return or use a shell escape to edit config.sh:"
13208         . UU/myread
13209         nostick=''
13210         case "$ans" in
13211         '') ;;
13212         *) : in case they cannot read
13213                 sh 1>&4 -c "$ans";;
13214         esac
13215         ;;
13216 esac
13217
13218 : if this fails, just run all the .SH files by hand
13219 . ./config.sh
13220
13221 echo " "
13222 exec 1>&4
13223 . ./UU/extract
13224
13225 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
13226         dflt=y
13227         case "$silent" in
13228         true) ;;
13229         *)
13230                 $cat <<EOM
13231
13232 Now you need to generate make dependencies by running "$make depend".
13233 You might prefer to run it in background: "$make depend > makedepend.out &"
13234 It can take a while, so you might not want to run it right now.
13235
13236 EOM
13237                 ;;
13238         esac
13239         rp="Run $make depend now?"
13240         . UU/myread
13241         case "$ans" in
13242         y*)
13243                 $make depend && echo "Now you must run a $make."
13244                 ;;
13245         *)
13246                 echo "You must run '$make depend' then '$make'."
13247                 ;;
13248         esac
13249 elif test -f [Mm]akefile; then
13250         echo " "
13251         echo "Now you must run a $make."
13252 else
13253         echo "Done."
13254 fi
13255
13256 if $test -f Policy.sh; then
13257     $cat <<EOM
13258
13259 If you compile $package on a different machine or from a different object
13260 directory, copy the Policy.sh file from this object directory to the
13261 new one before you run Configure -- this will help you with most of
13262 the policy defaults.
13263
13264 EOM
13265 fi
13266 if $test -f config.msg; then
13267     echo "Hmm.  I also noted the following information while running:"
13268     echo " "
13269     $cat config.msg >&4
13270     $rm -f config.msg
13271 fi
13272 $rm -f kit*isdone ark*isdone
13273 $rm -rf UU
13274
13275 : End of Configure
13276