13691f8f002bba1ffc0150b682b69c1d196f5e93
[p5sagit/p5-mst-13.2.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Thu Feb 18 01:09:27 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 '/3\.2v[45]/{ print $(NF) }'`
2079                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/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
2491 Note that threading is a highly experimental feature, and
2492 some known race conditions still remain.  If you choose to try
2493 it, be very sure to not actually deploy it for production
2494 purposes.  README.threads has more details, and is required
2495 reading if you enable threads.
2496 EOM
2497 case "$usethreads" in
2498 $define|true|[yY]*)     dflt='y';;
2499 *) dflt='n';;
2500 esac
2501 rp='Build a threading Perl?'
2502 . ./myread
2503 case "$ans" in
2504 y|Y)    val="$define" ;;     
2505 *)      val="$undef" ;;
2506 esac
2507 set usethreads
2508 eval $setvar 
2509
2510 case "$d_oldpthreads" in
2511 '')     : Configure tests would be welcome here.  For now, assume undef.
2512         val="$undef" ;;
2513 *)      val="$d_oldpthreads" ;;
2514 esac
2515 set d_oldpthreads
2516 eval $setvar
2517
2518
2519 case "$usethreads" in
2520 "$define"|true|[yY]*)
2521 : Look for a hint-file generated 'call-back-unit'.  If the
2522 : user has specified that a threading perl is to be built,
2523 : we may need to set or change some other defaults.
2524         if $test -f usethreads.cbu; then
2525                 . ./usethreads.cbu
2526         fi
2527         case "$osname" in
2528         aix|dec_osf|dos_djgpp|freebsd|hpux|irix|linux|openbsd|os2|solaris|vmesa)
2529                 # Known thread-capable platforms.
2530                 ;;
2531         *)
2532                 cat >&4 <<EOM
2533 $osname is not known to support threads.
2534 Please let perlbug@perl.com know how to do that.
2535
2536 Cannot continue, aborting.
2537 EOM
2538                 exit 1
2539         ;;
2540         esac # $osname
2541     ;;
2542 esac # $usethreads
2543
2544 cat <<EOM
2545
2546 Perl can be built so that multiple Perl interpreters can coexist
2547 within the same Perl executable.  To do so, Configure must be run with
2548 -Dusemultiplicity.
2549
2550 Normally you do not need this and you should answer no.
2551
2552 EOM
2553 case "$usemultiplicity" in
2554 $define|true|[yY]*)     dflt='y';;
2555 *) dflt='n';;
2556 esac
2557 rp='Build Perl for multiplicity?'
2558 . ./myread
2559 case "$ans" in
2560 y|Y)    val="$define" ;;     
2561 *)      val="$undef" ;;
2562 esac
2563 set usemultiplicity
2564 eval $setvar 
2565
2566 cat <<EOM
2567
2568 Perl can be built to take advantage of explicit 64-bit interfaces,
2569 on some systems.  To do so, Configure must be run with -Duse64bits.
2570
2571 If this doesn't make any sense to you, just accept the default 'n'.
2572 EOM
2573 case "$use64bits" in
2574 $define|true|[yY]*)     dflt='y';;
2575 *) dflt='n';;
2576 esac
2577 rp='Try to use explicit 64-bit interfaces, if available?'
2578 . ./myread
2579 case "$ans" in
2580 y|Y) 
2581         val="$define"
2582         ;;     
2583 *)      
2584         val="$undef"
2585         ;;
2586 esac
2587 set use64bits
2588 eval $setvar
2589
2590 case "$archname64" in
2591 '') archname64='' ;;    # not a typo
2592 esac
2593
2594 case "$use64bits" in
2595 "$define"|true|[yY]*)
2596 : Look for a hint-file generated 'call-back-unit'.  If the
2597 : user has specified that a threading perl is to be built,
2598 : we may need to set or change some other defaults.
2599         if $test -f use64bits.cbu; then
2600                 . ./use64bits.cbu
2601         fi
2602         case "$osname" in
2603         dec_osf|hpux|irix|solaris|unicos)
2604                 # Known 64-bit capable platforms.
2605                 ;;
2606         *)
2607                 cat >&4 <<EOM
2608 $osname is not known to support 64-bit interfaces.
2609 Please let perlbug@perl.com know how to do that.
2610
2611 Cannot continue, aborting.
2612 EOM
2613                 exit 1
2614                 ;;
2615         esac
2616         ;;
2617 esac
2618
2619 : determine the architecture name
2620 echo " "
2621 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
2622         tarch=`arch`"-$osname"
2623 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
2624         if uname -m > tmparch 2>&1 ; then
2625                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
2626                         -e 's/$/'"-$osname/" tmparch`
2627         else
2628                 tarch="$osname"
2629         fi
2630         $rm -f tmparch
2631 else
2632         tarch="$osname"
2633 fi
2634 case "$myarchname" in
2635 ''|"$tarch") ;;
2636 *)
2637         echo "(Your architecture name used to be $myarchname.)"
2638         archname=''
2639         ;;
2640 esac
2641 myarchname="$tarch"
2642 case "$archname" in
2643 '') dflt="$tarch";;
2644 *) dflt="$archname";;
2645 esac
2646 rp='What is your architecture name'
2647 . ./myread
2648 archname="$ans"
2649 case "$usethreads" in
2650 $define)
2651         echo "Threads selected." >&4
2652         case "$archname" in
2653         *-thread*) echo "...and architecture name already has -thread." >&4
2654                 ;;
2655         *)      archname="$archname-thread"
2656                 echo "...setting architecture name to $archname." >&4
2657                 ;;
2658         esac
2659         ;;
2660 esac
2661 case "$usemultiplicity" in
2662 $define)
2663         echo "Multiplicity selected." >&4
2664         case "$archname" in
2665         *-multi*) echo "...and architecture name already has -multi." >&4
2666                 ;;
2667         *)      archname="$archname-multi"
2668                 echo "...setting architecture name to $archname." >&4
2669                 ;;
2670         esac
2671         ;;
2672 esac
2673 case "$use64bits" in
2674 $define)
2675         echo "Explicit 64-bitness selected." >&4
2676         case "$archname64" in
2677         '')
2678                 ;;
2679         *)
2680                 case "$archname" in
2681                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
2682                         ;;
2683                 *)      archname="$archname-$archname64"
2684                         echo "...setting architecture name to $archname." >&4
2685                         ;;
2686                 esac
2687                 ;;
2688         esac
2689 esac
2690
2691 : is AFS running?
2692 echo " "
2693 case "$afs" in
2694 $define|true)   afs=true ;;
2695 $undef|false)   afs=false ;;
2696 *)      if test -d /afs; then
2697                 afs=true
2698         else
2699                 afs=false
2700         fi
2701         ;;
2702 esac
2703 if $afs; then
2704         echo "AFS may be running... I'll be extra cautious then..." >&4
2705 else
2706         echo "AFS does not seem to be running..." >&4
2707 fi
2708
2709 : decide how portable to be.  Allow command line overrides.
2710 case "$d_portable" in
2711 "$undef") ;;
2712 *)      d_portable="$define" ;;
2713 esac
2714
2715 : set up shell script to do ~ expansion
2716 cat >filexp <<EOSS
2717 $startsh
2718 : expand filename
2719 case "\$1" in
2720  ~/*|~)
2721         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
2722         ;;
2723  ~*)
2724         if $test -f /bin/csh; then
2725                 /bin/csh -f -c "glob \$1"
2726                 failed=\$?
2727                 echo ""
2728                 exit \$failed
2729         else
2730                 name=\`$expr x\$1 : '..\([^/]*\)'\`
2731                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
2732                 if $test ! -d "\$dir"; then
2733                         me=\`basename \$0\`
2734                         echo "\$me: can't locate home directory for: \$name" >&2
2735                         exit 1
2736                 fi
2737                 case "\$1" in
2738                 */*)
2739                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
2740                         ;;
2741                 *)
2742                         echo \$dir
2743                         ;;
2744                 esac
2745         fi
2746         ;;
2747 *)
2748         echo \$1
2749         ;;
2750 esac
2751 EOSS
2752 chmod +x filexp
2753 $eunicefix filexp
2754
2755 : now set up to get a file name
2756 cat <<EOS >getfile
2757 $startsh
2758 EOS
2759 cat <<'EOSC' >>getfile
2760 tilde=''
2761 fullpath=''
2762 already=''
2763 skip=''
2764 none_ok=''
2765 exp_file=''
2766 nopath_ok=''
2767 orig_rp="$rp"
2768 orig_dflt="$dflt"
2769
2770 case "$fn" in
2771 *\(*)
2772         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
2773         fn=`echo $fn | sed 's/(.*)//'`
2774         ;;
2775 esac
2776
2777 case "$fn" in
2778 *:*)
2779         loc_file=`expr $fn : '.*:\(.*\)'`
2780         fn=`expr $fn : '\(.*\):.*'`
2781         ;;
2782 esac
2783
2784 case "$fn" in
2785 *~*) tilde=true;;
2786 esac
2787 case "$fn" in
2788 */*) fullpath=true;;
2789 esac
2790 case "$fn" in
2791 *+*) skip=true;;
2792 esac
2793 case "$fn" in
2794 *n*) none_ok=true;;
2795 esac
2796 case "$fn" in
2797 *e*) exp_file=true;;
2798 esac
2799 case "$fn" in
2800 *p*) nopath_ok=true;;
2801 esac
2802
2803 case "$fn" in
2804 *f*) type='File';;
2805 *d*) type='Directory';;
2806 *l*) type='Locate';;
2807 esac
2808
2809 what="$type"
2810 case "$what" in
2811 Locate) what='File';;
2812 esac
2813
2814 case "$exp_file" in
2815 '')
2816         case "$d_portable" in
2817         "$define") ;;
2818         *) exp_file=true;;
2819         esac
2820         ;;
2821 esac
2822
2823 cd ..
2824 while test "$type"; do
2825         redo=''
2826         rp="$orig_rp"
2827         dflt="$orig_dflt"
2828         case "$tilde" in
2829         true) rp="$rp (~name ok)";;
2830         esac
2831         . UU/myread
2832         if test -f UU/getfile.ok && \
2833                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
2834         then
2835                 value="$ans"
2836                 ansexp="$ans"
2837                 break
2838         fi
2839         case "$ans" in
2840         none)
2841                 value=''
2842                 ansexp=''
2843                 case "$none_ok" in
2844                 true) type='';;
2845                 esac
2846                 ;;
2847         *)
2848                 case "$tilde" in
2849                 '') value="$ans"
2850                         ansexp="$ans";;
2851                 *)
2852                         value=`UU/filexp $ans`
2853                         case $? in
2854                         0)
2855                                 if test "$ans" != "$value"; then
2856                                         echo "(That expands to $value on this system.)"
2857                                 fi
2858                                 ;;
2859                         *) value="$ans";;
2860                         esac
2861                         ansexp="$value"
2862                         case "$exp_file" in
2863                         '') value="$ans";;
2864                         esac
2865                         ;;
2866                 esac
2867                 case "$fullpath" in
2868                 true)
2869                         case "$ansexp" in
2870                         /*) value="$ansexp" ;;
2871                         *)
2872                                 redo=true
2873                                 case "$already" in
2874                                 true)
2875                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
2876                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
2877                                         ;;
2878                                 *)
2879                                 echo "Please give a full path name, starting with slash." >&4
2880                                         case "$tilde" in
2881                                         true)
2882                                 echo "Note that using ~name is ok provided it expands well." >&4
2883                                                 already=true
2884                                                 ;;
2885                                         esac
2886                                 esac
2887                                 ;;
2888                         esac
2889                         ;;
2890                 esac
2891                 case "$redo" in
2892                 '')
2893                         case "$type" in
2894                         File)
2895                                 if test -f "$ansexp"; then
2896                                         type=''
2897                                 elif test -r "$ansexp" || (test -h "$ansexp") >/dev/null 2>&1
2898                                 then
2899                                         echo "($value is not a plain file, but that's ok.)"
2900                                         type=''
2901                                 fi
2902                                 ;;
2903                         Directory)
2904                                 if test -d "$ansexp"; then
2905                                         type=''
2906                                 fi
2907                                 ;;
2908                         Locate)
2909                                 if test -d "$ansexp"; then
2910                                         echo "(Looking for $loc_file in directory $value.)"
2911                                         value="$value/$loc_file"
2912                                         ansexp="$ansexp/$loc_file"
2913                                 fi
2914                                 if test -f "$ansexp"; then
2915                                         type=''
2916                                 fi
2917                                 case "$nopath_ok" in
2918                                 true)   case "$value" in
2919                                         */*) ;;
2920                                         *)      echo "Assuming $value will be in people's path."
2921                                                 type=''
2922                                                 ;;
2923                                         esac
2924                                         ;;
2925                                 esac
2926                                 ;;
2927                         esac
2928
2929                         case "$skip" in
2930                         true) type='';
2931                         esac
2932
2933                         case "$type" in
2934                         '') ;;
2935                         *)
2936                                 if test "$fastread" = yes; then
2937                                         dflt=y
2938                                 else
2939                                         dflt=n
2940                                 fi
2941                                 rp="$what $value doesn't exist.  Use that name anyway?"
2942                                 . UU/myread
2943                                 dflt=''
2944                                 case "$ans" in
2945                                 y*) type='';;
2946                                 *) echo " ";;
2947                                 esac
2948                                 ;;
2949                         esac
2950                         ;;
2951                 esac
2952                 ;;
2953         esac
2954 done
2955 cd UU
2956 ans="$value"
2957 rp="$orig_rp"
2958 dflt="$orig_dflt"
2959 rm -f getfile.ok
2960 EOSC
2961
2962 : determine root of directory hierarchy where package will be installed.
2963 case "$prefix" in
2964 '')
2965         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
2966         ;;
2967 *)
2968         dflt="$prefix"
2969         ;;
2970 esac
2971 $cat <<EOM
2972
2973 By default, $package will be installed in $dflt/bin, manual
2974 pages under $dflt/man, etc..., i.e. with $dflt as prefix for
2975 all installation directories. Typically set to /usr/local, but you
2976 may choose /usr if you wish to install $package among your system
2977 binaries. If you wish to have binaries under /bin but manual pages
2978 under /usr/local/man, that's ok: you will be prompted separately
2979 for each of the installation directories, the prefix being only used
2980 to set the defaults.
2981
2982 EOM
2983 fn=d~
2984 rp='Installation prefix to use?'
2985 . ./getfile
2986 oldprefix=''
2987 case "$prefix" in
2988 '') ;;
2989 *)
2990         case "$ans" in
2991         "$prefix") ;;
2992         *) oldprefix="$prefix";;
2993         esac
2994         ;;
2995 esac
2996 prefix="$ans"
2997 prefixexp="$ansexp"
2998
2999 : set the prefixit variable, to compute a suitable default value
3000 prefixit='case "$3" in
3001 ""|none)
3002         case "$oldprefix" in
3003         "") eval "$1=\"\$$2\"";;
3004         *)
3005                 case "$3" in
3006                 "") eval "$1=";;
3007                 none)
3008                         eval "tp=\"\$$2\"";
3009                         case "$tp" in
3010                         ""|" ") eval "$1=\"\$$2\"";;
3011                         *) eval "$1=";;
3012                         esac;;
3013                 esac;;
3014         esac;;
3015 *)
3016         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
3017         case "$tp" in
3018         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
3019         /*-$oldprefix/*|\~*-$oldprefix/*)
3020                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
3021         *) eval "$1=\"\$$2\"";;
3022         esac;;
3023 esac'
3024
3025 : set the base revision
3026 baserev=5.0
3027
3028 : get the patchlevel
3029 echo " "
3030 echo "Getting the current patchlevel..." >&4
3031 if $test -r $rsrc/patchlevel.h;then
3032         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
3033         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
3034 else
3035         patchlevel=0
3036         subversion=0
3037 fi
3038 $echo $n "(You have $package" $c
3039 case "$package" in
3040 "*$baserev")    ;;
3041 *)              $echo $n " $baserev" $c ;;
3042 esac
3043 $echo $n " patchlevel $patchlevel" $c
3044 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
3045 echo ".)"
3046
3047 if test 0 -eq "$subversion"; then
3048         version=`LC_ALL=C; export LC_ALL; \
3049                  echo $baserev $patchlevel | \
3050                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3051 else
3052         version=`LC_ALL=C; export LC_ALL; \
3053                  echo $baserev $patchlevel $subversion | \
3054                  $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
3055 fi
3056 : Figure out perl API version.  Perhaps this should be in patchlevel.h
3057 if test "$subversion" -lt 50; then
3058         apiversion=`LC_ALL=C; export LC_ALL; \
3059                  LANGUAGE=C; export LANGUAGE; \
3060                  echo $baserev $patchlevel | \
3061                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3062 else
3063         apiversion="$version"
3064 fi
3065
3066 : determine where private library files go
3067 : Usual default is /usr/local/lib/perl5/$version.
3068 : Also allow things like /opt/perl/lib/$version, since 
3069 : /opt/perl/lib/perl5... would be redundant.
3070 case "$prefix" in
3071 *perl*) set dflt privlib lib/$version ;;
3072 *)       set dflt privlib lib/$package/$version ;;
3073 esac
3074 eval $prefixit
3075 $cat <<EOM
3076
3077 There are some auxiliary files for $package that need to be put into a
3078 private library directory that is accessible by everyone.
3079
3080 EOM
3081 fn=d~+
3082 rp='Pathname where the private library files will reside?'
3083 . ./getfile
3084 if $test "X$privlibexp" != "X$ansexp"; then
3085         installprivlib=''
3086 fi
3087 privlib="$ans"
3088 privlibexp="$ansexp"
3089 if $afs; then
3090         $cat <<EOM
3091
3092 Since you are running AFS, I need to distinguish the directory in which
3093 private files reside from the directory in which they are installed (and from
3094 which they are presumably copied to the former directory by occult means).
3095
3096 EOM
3097         case "$installprivlib" in
3098         '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
3099         *) dflt="$installprivlib";;
3100         esac
3101         fn=de~
3102         rp='Where will private files be installed?'
3103         . ./getfile
3104         installprivlib="$ans"
3105 else
3106         installprivlib="$privlibexp"
3107 fi
3108
3109 : set the prefixup variable, to restore leading tilda escape
3110 prefixup='case "$prefixexp" in
3111 "$prefix") ;;
3112 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
3113 esac'
3114
3115 : determine where public architecture dependent libraries go
3116 set archlib archlib
3117 eval $prefixit
3118 : privlib default is /usr/local/lib/$package/$version
3119 : archlib default is /usr/local/lib/$package/$version/$archname
3120 : privlib may have an optional trailing /share.
3121 tdflt=`echo $privlib | $sed 's,/share$,,'`
3122 tdflt=$tdflt/$archname
3123 case "$archlib" in
3124 '')     dflt=$tdflt
3125         ;;
3126 *)      dflt="$archlib"
3127     ;;
3128 esac
3129 cat <<EOM
3130
3131 $spackage contains architecture-dependent library files.  If you are
3132 sharing libraries in a heterogeneous environment, you might store
3133 these files in a separate location.  Otherwise, you can just include
3134 them with the rest of the public library files.
3135
3136 EOM
3137 fn=d+~
3138 rp='Where do you want to put the public architecture-dependent libraries?'
3139 . ./getfile
3140 archlib="$ans"
3141 archlibexp="$ansexp"
3142
3143 if $afs; then
3144         $cat <<EOM
3145
3146 Since you are running AFS, I need to distinguish the directory in
3147 which architecture-dependent library files reside from the directory
3148 in which they are installed (and from which they are presumably copied
3149 to the former directory by occult means).
3150
3151 EOM
3152         case "$installarchlib" in
3153         '') dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;;
3154         *) dflt="$installarchlib";;
3155         esac
3156         fn=de~
3157         rp='Where will architecture-dependent library files be installed?'
3158         . ./getfile
3159         installarchlib="$ans"
3160 else
3161         installarchlib="$archlibexp"
3162 fi
3163 if $test X"$archlib" = X"$privlib"; then
3164         d_archlib="$undef"
3165 else
3166         d_archlib="$define"
3167 fi
3168
3169 : make some quick guesses about what we are up against
3170 echo " "
3171 $echo $n "Hmm...  $c"
3172 echo exit 1 >bsd
3173 echo exit 1 >usg
3174 echo exit 1 >v7
3175 echo exit 1 >osf1
3176 echo exit 1 >eunice
3177 echo exit 1 >xenix
3178 echo exit 1 >venix
3179 echo exit 1 >os2
3180 d_bsd="$undef"
3181 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3182 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3183 then
3184         echo "Looks kind of like an OSF/1 system, but we'll see..."
3185         echo exit 0 >osf1
3186 elif test `echo abc | tr a-z A-Z` = Abc ; then
3187         xxx=`./loc addbib blurfl $pth`
3188         if $test -f $xxx; then
3189         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3190                 echo exit 0 >bsd
3191                 echo exit 0 >usg
3192         else
3193                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3194                         echo "Looks kind of like an extended USG system, but we'll see..."
3195                 else
3196                         echo "Looks kind of like a USG system, but we'll see..."
3197                 fi
3198                 echo exit 0 >usg
3199         fi
3200 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3201         echo "Looks kind of like a BSD system, but we'll see..."
3202         d_bsd="$define"
3203         echo exit 0 >bsd
3204 else
3205         echo "Looks kind of like a Version 7 system, but we'll see..."
3206         echo exit 0 >v7
3207 fi
3208 case "$eunicefix" in
3209 *unixtovms*)
3210         $cat <<'EOI'
3211 There is, however, a strange, musty smell in the air that reminds me of
3212 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3213 EOI
3214         echo exit 0 >eunice
3215         d_eunice="$define"
3216 : it so happens the Eunice I know will not run shell scripts in Unix format
3217         ;;
3218 *)
3219         echo " "
3220         echo "Congratulations.  You aren't running Eunice."
3221         d_eunice="$undef"
3222         ;;
3223 esac
3224 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3225 case "$p_" in
3226 :) ;;
3227 *)
3228         $cat <<'EOI'
3229 I have the feeling something is not exactly right, however...don't tell me...
3230 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3231 EOI
3232         echo exit 0 >os2
3233         ;;
3234 esac
3235 if test -f /xenix; then
3236         echo "Actually, this looks more like a XENIX system..."
3237         echo exit 0 >xenix
3238         d_xenix="$define"
3239 else
3240         echo " "
3241         echo "It's not Xenix..."
3242         d_xenix="$undef"
3243 fi
3244 chmod +x xenix
3245 $eunicefix xenix
3246 if test -f /venix; then
3247         echo "Actually, this looks more like a VENIX system..."
3248         echo exit 0 >venix
3249 else
3250         echo " "
3251         if ./xenix; then
3252                 : null
3253         else
3254                 echo "Nor is it Venix..."
3255         fi
3256 fi
3257 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3258 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3259 $rm -f foo
3260
3261 : see if setuid scripts can be secure
3262 $cat <<EOM
3263
3264 Some kernels have a bug that prevents setuid #! scripts from being
3265 secure.  Some sites have disabled setuid #! scripts because of this.
3266
3267 First let's decide if your kernel supports secure setuid #! scripts.
3268 (If setuid #! scripts would be secure but have been disabled anyway,
3269 don't say that they are secure if asked.)
3270
3271 EOM
3272
3273 val="$undef"
3274 if $test -d /dev/fd; then
3275         echo "#!$ls" >reflect
3276         chmod +x,u+s reflect
3277         ./reflect >flect 2>&1
3278         if $contains "/dev/fd" flect >/dev/null; then
3279                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
3280                 val="$define"
3281         else
3282                 $cat <<EOM
3283 If you are not sure if they are secure, I can check but I'll need a
3284 username and password different from the one you are using right now.
3285 If you don't have such a username or don't want me to test, simply
3286 enter 'none'.
3287
3288 EOM
3289                 rp='Other username to test security of setuid scripts with?'
3290                 dflt='none'
3291                 . ./myread
3292                 case "$ans" in
3293                 n|none)
3294                         case "$d_suidsafe" in
3295                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
3296                                 dflt=n;;
3297                         "$undef")
3298                                 echo "Well, the $hint value is *not* secure." >&4
3299                                 dflt=n;;
3300                         *)      echo "Well, the $hint value *is* secure." >&4
3301                                 dflt=y;;
3302                         esac
3303                         ;;
3304                 *)
3305                         $rm -f reflect flect
3306                         echo "#!$ls" >reflect
3307                         chmod +x,u+s reflect
3308                         echo >flect
3309                         chmod a+w flect
3310                         echo '"su" will (probably) prompt you for '"$ans's password."
3311                         su $ans -c './reflect >flect'
3312                         if $contains "/dev/fd" flect >/dev/null; then
3313                                 echo "Okay, it looks like setuid scripts are secure." >&4
3314                                 dflt=y
3315                         else
3316                                 echo "I don't think setuid scripts are secure." >&4
3317                                 dflt=n
3318                         fi
3319                         ;;
3320                 esac
3321                 rp='Does your kernel have *secure* setuid scripts?'
3322                 . ./myread
3323                 case "$ans" in
3324                 [yY]*)  val="$define";;
3325                 *)      val="$undef";;
3326                 esac
3327         fi
3328 else
3329         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
3330         echo "(That's for file descriptors, not floppy disks.)"
3331         val="$undef"
3332 fi
3333 set d_suidsafe
3334 eval $setvar
3335
3336 $rm -f reflect flect
3337
3338 : now see if they want to do setuid emulation
3339 echo " "
3340 val="$undef"
3341 case "$d_suidsafe" in
3342 "$define")
3343         val="$undef"
3344         echo "No need to emulate SUID scripts since they are secure here." >& 4
3345         ;;
3346 *)
3347         $cat <<EOM
3348 Some systems have disabled setuid scripts, especially systems where
3349 setuid scripts cannot be secure.  On systems where setuid scripts have
3350 been disabled, the setuid/setgid bits on scripts are currently
3351 useless.  It is possible for $package to detect those bits and emulate
3352 setuid/setgid in a secure fashion.  This emulation will only work if
3353 setuid scripts have been disabled in your kernel.
3354
3355 EOM
3356         case "$d_dosuid" in
3357         "$define") dflt=y ;;
3358         *) dflt=n ;;
3359         esac
3360         rp="Do you want to do setuid/setgid emulation?"
3361         . ./myread
3362         case "$ans" in
3363         [yY]*)  val="$define";;
3364         *)      val="$undef";;
3365         esac
3366         ;;
3367 esac
3368 set d_dosuid
3369 eval $setvar
3370
3371 : determine where manual pages are on this system
3372 echo " "
3373 case "$sysman" in
3374 '') 
3375         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
3376         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
3377         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
3378         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
3379         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
3380         sysman=`./loc . /usr/man/man1 $syspath`
3381         ;;
3382 esac
3383 if $test -d "$sysman"; then
3384         echo "System manual is in $sysman." >&4
3385 else
3386         echo "Could not find manual pages in source form." >&4
3387 fi
3388
3389 : see what memory models we can support
3390 case "$models" in
3391 '')
3392         $cat >pdp11.c <<'EOP'
3393 int main() {
3394 #ifdef pdp11
3395         exit(0);
3396 #else
3397         exit(1);
3398 #endif
3399 }
3400 EOP
3401         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
3402         if $test -f pdp11 && ./pdp11 2>/dev/null; then
3403                 dflt='unsplit split'
3404         else
3405                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
3406                 case "$tans" in
3407                 X) dflt='none';;
3408                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
3409                                 dflt='small'
3410                         else
3411                                 dflt=''
3412                         fi
3413                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
3414                                 dflt="$dflt medium"
3415                         fi
3416                         if $test -d /lib/large || $test -d /usr/lib/large; then
3417                                 dflt="$dflt large"
3418                         fi
3419                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
3420                                 dflt="$dflt huge"
3421                         fi
3422                 esac
3423         fi;;
3424 *) dflt="$models";;
3425 esac
3426 $cat <<EOM
3427  
3428 Some systems have different model sizes.  On most systems they are called
3429 small, medium, large, and huge.  On the PDP11 they are called unsplit and
3430 split.  If your system doesn't support different memory models, say "none".
3431 If you wish to force everything to one memory model, say "none" here and
3432 put the appropriate flags later when it asks you for other cc and ld flags.
3433 Venix systems may wish to put "none" and let the compiler figure things out.
3434 (In the following question multiple model names should be space separated.)
3435
3436 The default for most systems is "none".
3437
3438 EOM
3439 rp="Which memory models are supported?"
3440 . ./myread
3441 models="$ans"
3442
3443 case "$models" in
3444 none)
3445         small=''
3446         medium=''
3447         large=''
3448         huge=''
3449         unsplit=''
3450         split=''
3451         ;;
3452 *split)
3453         case "$split" in
3454         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
3455                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
3456                         dflt='-i'
3457                 else
3458                         dflt='none'
3459                 fi;;
3460         *) dflt="$split";;
3461         esac
3462         rp="What flag indicates separate I and D space?"
3463         . ./myread
3464         tans="$ans"
3465         case "$tans" in
3466         none) tans='';;
3467         esac
3468         split="$tans"
3469         unsplit='';;
3470 *large*|*small*|*medium*|*huge*)
3471         case "$models" in
3472         *large*)
3473                 case "$large" in
3474                 '') dflt='-Ml';;
3475                 *) dflt="$large";;
3476                 esac
3477         rp="What flag indicates large model?"
3478         . ./myread
3479         tans="$ans"
3480         case "$tans" in
3481         none) tans='';
3482         esac
3483         large="$tans";;
3484         *) large='';;
3485         esac
3486         case "$models" in
3487         *huge*) case "$huge" in
3488                 '') dflt='-Mh';;
3489                 *) dflt="$huge";;
3490                 esac
3491                 rp="What flag indicates huge model?"
3492                 . ./myread
3493                 tans="$ans"
3494                 case "$tans" in
3495                 none) tans='';
3496                 esac
3497                 huge="$tans";;
3498         *) huge="$large";;
3499         esac
3500         case "$models" in
3501         *medium*) case "$medium" in
3502                 '') dflt='-Mm';;
3503                 *) dflt="$medium";;
3504                 esac
3505                 rp="What flag indicates medium model?"
3506                 . ./myread
3507                 tans="$ans"
3508                 case "$tans" in
3509                 none) tans='';
3510                 esac
3511                 medium="$tans";;
3512         *) medium="$large";;
3513         esac
3514         case "$models" in
3515         *small*) case "$small" in
3516                 '') dflt='none';;
3517                 *) dflt="$small";;
3518                 esac
3519                 rp="What flag indicates small model?"
3520                 . ./myread
3521                 tans="$ans"
3522                 case "$tans" in
3523                 none) tans='';
3524                 esac
3525                 small="$tans";;
3526         *) small='';;
3527         esac
3528         ;;
3529 *)
3530         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
3531         ;;
3532 esac
3533 $rm -f pdp11.* pdp11
3534
3535 : see if we need a special compiler
3536 echo " "
3537 if ./usg; then
3538         case "$cc" in
3539         '') case "$Mcc" in
3540                 /*) dflt='Mcc';;
3541                 *) case "$large" in
3542                         -M*) dflt='cc';;
3543                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3544                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3545                                                 dflt='cc'
3546                                         else
3547                                                 dflt='cc -M'
3548                                         fi
3549                                 else
3550                                         dflt='cc'
3551                                 fi;;
3552                         esac;;
3553                 esac;;
3554         *)  dflt="$cc";;
3555         esac
3556         case "$dflt" in
3557         *M*)    $cat <<'EOM'
3558 On some older systems the default C compiler will not resolve multiple global
3559 references that happen to have the same name.  On some such systems the "Mcc"
3560 command may be used to force these to be resolved.  On other systems a "cc -M"
3561 command is required.  (Note that the -M flag on other systems indicates a
3562 memory model to use!) If you have the Gnu C compiler, you might wish to use
3563 that instead.
3564
3565 EOM
3566         ;;
3567         esac
3568         rp="Use which C compiler?"
3569         . ./myread
3570         cc="$ans"
3571 else
3572         case "$cc" in
3573         '') dflt=cc;;
3574         *) dflt="$cc";;
3575         esac
3576         rp="Use which C compiler?"
3577         . ./myread
3578         cc="$ans"
3579 fi
3580 : Look for a hint-file generated 'call-back-unit'.  Now that the
3581 : user has specified the compiler, we may need to set or change some
3582 : other defaults.
3583 if $test -f cc.cbu; then
3584     . ./cc.cbu
3585 fi
3586 echo " "
3587 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3588 $cat >gccvers.c <<EOM
3589 #include <stdio.h>
3590 int main() {
3591 #ifdef __GNUC__
3592 #ifdef __VERSION__
3593         printf("%s\n", __VERSION__);
3594 #else
3595         printf("%s\n", "1");
3596 #endif
3597 #endif
3598         exit(0);
3599 }
3600 EOM
3601 if $cc -o gccvers gccvers.c >/dev/null 2>&1; then
3602         gccversion=`./gccvers`
3603         case "$gccversion" in
3604         '') echo "You are not using GNU cc." ;;
3605         *)  echo "You are using GNU cc $gccversion." ;;
3606         esac
3607 else
3608         echo " "
3609         echo "*** WHOA THERE!!! ***" >&4
3610         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3611         case "$knowitall" in
3612         '')
3613         echo "    You'd better start hunting for one and let me know about it." >&4
3614                 exit 1
3615                 ;;
3616         esac
3617 fi
3618 $rm -f gccvers*
3619 case "$gccversion" in
3620 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3621 esac
3622
3623 : What should the include directory be ?
3624 echo " "
3625 $echo $n "Hmm...  $c"
3626 dflt='/usr/include'
3627 incpath=''
3628 mips_type=''
3629 if $test -f /bin/mips && /bin/mips; then
3630         echo "Looks like a MIPS system..."
3631         $cat >usr.c <<'EOCP'
3632 #ifdef SYSTYPE_BSD43
3633 /bsd43
3634 #endif
3635 EOCP
3636         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3637                 dflt='/bsd43/usr/include'
3638                 incpath='/bsd43'
3639                 mips_type='BSD 4.3'
3640         else
3641                 mips_type='System V'
3642         fi
3643         $rm -f usr.c usr.out
3644         echo "and you're compiling with the $mips_type compiler and libraries."
3645         xxx_prompt=y
3646         echo "exit 0" >mips
3647 else
3648         echo "Doesn't look like a MIPS system."
3649         xxx_prompt=n
3650         echo "exit 1" >mips
3651 fi
3652 chmod +x mips
3653 $eunicefix mips
3654 case "$usrinc" in
3655 '') ;;
3656 *) dflt="$usrinc";;
3657 esac
3658 case "$xxx_prompt" in
3659 y)      fn=d/
3660         echo " "
3661         rp='Where are the include files you want to use?'
3662         . ./getfile
3663         usrinc="$ans"
3664         ;;
3665 *)      usrinc="$dflt"
3666         ;;
3667 esac
3668
3669 : see how we invoke the C preprocessor
3670 echo " "
3671 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3672 cat <<'EOT' >testcpp.c
3673 #define ABC abc
3674 #define XYZ xyz
3675 ABC.XYZ
3676 EOT
3677 cd ..
3678 if test ! -f cppstdin; then
3679         echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3680 else
3681         echo "Keeping your $hint cppstdin wrapper."
3682 fi
3683 chmod 755 cppstdin
3684 wrapper=`pwd`/cppstdin
3685 ok='false'
3686 cd UU
3687
3688 if $test "X$cppstdin" != "X" && \
3689         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3690         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3691 then
3692         echo "You used to use $cppstdin $cppminus so we'll use that again."
3693         case "$cpprun" in
3694         '') echo "But let's see if we can live without a wrapper..." ;;
3695         *)
3696                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3697                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3698                 then
3699                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3700                         ok='true'
3701                 else
3702                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3703                 fi
3704                 ;;
3705         esac
3706 else
3707         case "$cppstdin" in
3708         '') ;;
3709         *)
3710                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3711                 ;;
3712         esac
3713 fi
3714
3715 if $ok; then
3716         : nothing
3717 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3718         $cc -E <testcpp.c >testcpp.out 2>&1; \
3719         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3720         echo "Yup, it does."
3721         x_cpp="$cc -E"
3722         x_minus='';
3723 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3724         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3725         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3726         echo "Yup, it does."
3727         x_cpp="$cc -E"
3728         x_minus='-';
3729 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3730         $cc -P <testcpp.c >testcpp.out 2>&1; \
3731         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3732         echo "Yipee, that works!"
3733         x_cpp="$cc -P"
3734         x_minus='';
3735 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3736         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3737         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3738         echo "At long last!"
3739         x_cpp="$cc -P"
3740         x_minus='-';
3741 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3742         $cpp <testcpp.c >testcpp.out 2>&1; \
3743         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3744         echo "It works!"
3745         x_cpp="$cpp"
3746         x_minus='';
3747 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3748         $cpp - <testcpp.c >testcpp.out 2>&1; \
3749         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3750         echo "Hooray, it works!  I was beginning to wonder."
3751         x_cpp="$cpp"
3752         x_minus='-';
3753 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3754         $wrapper <testcpp.c >testcpp.out 2>&1; \
3755         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3756         x_cpp="$wrapper"
3757         x_minus=''
3758         echo "Eureka!"
3759 else
3760         dflt=''
3761         rp="No dice.  I can't find a C preprocessor.  Name one:"
3762         . ./myread
3763         x_cpp="$ans"
3764         x_minus=''
3765         $x_cpp <testcpp.c >testcpp.out 2>&1
3766         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3767                 echo "OK, that will do." >&4
3768         else
3769 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3770                 exit 1
3771         fi
3772 fi
3773
3774 case "$ok" in
3775 false)
3776         cppstdin="$x_cpp"
3777         cppminus="$x_minus"
3778         cpprun="$x_cpp"
3779         cpplast="$x_minus"
3780         set X $x_cpp
3781         shift
3782         case "$1" in
3783         "$cpp")
3784                 echo "Perhaps can we force $cc -E using a wrapper..."
3785                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3786                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3787                 then
3788                         echo "Yup, we can."
3789                         cppstdin="$wrapper"
3790                         cppminus='';
3791                 else
3792                         echo "Nope, we'll have to live without it..."
3793                 fi
3794                 ;;
3795         esac
3796         case "$cpprun" in
3797         "$wrapper")
3798                 cpprun=''
3799                 cpplast=''
3800                 ;;
3801         esac
3802         ;;
3803 esac
3804
3805 case "$cppstdin" in
3806 "$wrapper"|'cppstdin') ;;
3807 *) $rm -f $wrapper;;
3808 esac
3809 $rm -f testcpp.c testcpp.out
3810
3811 : Set private lib path
3812 case "$plibpth" in
3813 '') if ./mips; then
3814                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3815         fi;;
3816 esac
3817 case "$libpth" in
3818 ' ') dlist='';;
3819 '') dlist="$loclibpth $plibpth $glibpth";;
3820 *) dlist="$libpth";;
3821 esac
3822
3823 : Now check and see which directories actually exist, avoiding duplicates
3824 libpth=''
3825 for xxx in $dlist
3826 do
3827     if $test -d $xxx; then
3828                 case " $libpth " in
3829                 *" $xxx "*) ;;
3830                 *) libpth="$libpth $xxx";;
3831                 esac
3832     fi
3833 done
3834 $cat <<'EOM'
3835
3836 Some systems have incompatible or broken versions of libraries.  Among
3837 the directories listed in the question below, please remove any you
3838 know not to be holding relevant libraries, and add any that are needed.
3839 Say "none" for none.
3840
3841 EOM
3842 case "$libpth" in
3843 '') dflt='none';;
3844 *)
3845         set X $libpth
3846         shift
3847         dflt=${1+"$@"}
3848         ;;
3849 esac
3850 rp="Directories to use for library searches?"
3851 . ./myread
3852 case "$ans" in
3853 none) libpth=' ';;
3854 *) libpth="$ans";;
3855 esac
3856
3857 : compute shared library extension
3858 case "$so" in
3859 '')
3860         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3861                 dflt='sl'
3862         else
3863                 dflt='so'
3864         fi
3865         ;;
3866 *) dflt="$so";;
3867 esac
3868 $cat <<EOM
3869
3870 On some systems, shared libraries may be available.  Answer 'none' if
3871 you want to suppress searching of shared libraries for the remaining
3872 of this configuration.
3873
3874 EOM
3875 rp='What is the file extension used for shared libraries?'
3876 . ./myread
3877 so="$ans"
3878
3879 : Define several unixisms.
3880 : Hints files or command line option can be used to override them.
3881 : The convoluted testing is in case hints files set either the old
3882 : or the new name.
3883 case "$_exe" in
3884 '')     case "$exe_ext" in
3885     '') ;;
3886         *)      _exe="$exe_ext" ;;
3887         esac
3888         ;;
3889 esac
3890 case "$_a" in
3891 '')     case "$lib_ext" in
3892     '') _a='.a';;
3893         *)      _a="$lib_ext" ;;
3894         esac
3895         ;;
3896 esac
3897 case "$_o" in
3898 '') case "$obj_ext" in
3899         '')     _o='.o';;
3900         *)      _o="$obj_ext";;
3901         esac
3902         ;;
3903 esac
3904 case "$p_" in
3905 '') case "$path_sep" in
3906         '')     p_=':';;
3907         *)      p_="$path_sep";;
3908         esac
3909         ;;
3910 esac
3911 exe_ext=$_exe
3912 lib_ext=$_a
3913 obj_ext=$_o
3914 path_sep=$p_
3915
3916 : Which makefile gets called first.  This is used by make depend.
3917 case "$firstmakefile" in
3918 '') firstmakefile='makefile';;
3919 esac
3920
3921 : Looking for optional libraries
3922 echo " "
3923 echo "Checking for optional libraries..." >&4
3924 case "$libs" in
3925 ' '|'') dflt='';;
3926 *) dflt="$libs";;
3927 esac
3928 case "$libswanted" in
3929 '') libswanted='c_s';;
3930 esac
3931 for thislib in $libswanted; do
3932         
3933         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
3934                 $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3935                 echo "Found -l$thislib (shared)."
3936                 case " $dflt " in
3937                 *"-l$thislib "*);;
3938                 *) dflt="$dflt -l$thislib";;
3939                 esac
3940         elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
3941                 echo "Found -l$thislib (shared)."
3942                 case " $dflt " in
3943                 *"-l$thislib "*);;
3944                 *) dflt="$dflt -l$thislib";;
3945                 esac
3946         elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
3947                 echo "Found -l$thislib."
3948                 case " $dflt " in
3949                 *"-l$thislib "*);;
3950                 *) dflt="$dflt -l$thislib";;
3951                 esac
3952         elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
3953                 echo "Found -l$thislib."
3954                 case " $dflt " in
3955                 *"-l$thislib "*);;
3956                 *) dflt="$dflt -l$thislib";;
3957                 esac
3958         elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
3959                 echo "Found -l${thislib}_s."
3960                 case " $dflt " in
3961                 *"-l$thislib "*);;
3962                 *) dflt="$dflt -l${thislib}_s";;
3963                 esac
3964         elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
3965                 echo "Found -l$thislib."
3966                 case " $dflt " in
3967                 *"-l$thislib "*);;
3968                 *) dflt="$dflt -l$thislib";;
3969                 esac
3970         else
3971                 echo "No -l$thislib."
3972         fi
3973 done
3974 set X $dflt
3975 shift
3976 dflt="$*"
3977 case "$libs" in
3978 '') dflt="$dflt";;
3979 *) dflt="$libs";;
3980 esac
3981 case "$dflt" in
3982 ' '|'') dflt='none';;
3983 esac
3984
3985 $cat <<EOM
3986  
3987 Some versions of Unix support shared libraries, which make executables smaller
3988 but make load time slightly longer.
3989
3990 On some systems, mostly System V Release 3's, the shared library is included
3991 by putting the option "-lc_s" as the last thing on the cc command line when
3992 linking.  Other systems use shared libraries by default.  There may be other
3993 libraries needed to compile $package on your machine as well.  If your system
3994 needs the "-lc_s" option, include it here.  Include any other special libraries
3995 here as well.  Say "none" for none.
3996 EOM
3997
3998 echo " "
3999 rp="Any additional libraries?"
4000 . ./myread
4001 case "$ans" in
4002 none) libs=' ';;
4003 *) libs="$ans";;
4004 esac
4005
4006 : determine optimize, if desired, or use for debug flag also
4007 case "$optimize" in
4008 ' '|$undef) dflt='none';;
4009 '') dflt='-O';;
4010 *) dflt="$optimize";;
4011 esac
4012 $cat <<EOH
4013
4014 Some C compilers have problems with their optimizers.  By default, $package
4015 compiles with the -O flag to use the optimizer.  Alternately, you might want
4016 to use the symbolic debugger, which uses the -g flag (on traditional Unix
4017 systems).  Either flag can be specified here.  To use neither flag, specify
4018 the word "none".
4019
4020 EOH
4021 rp="What optimizer/debugger flag should be used?"
4022 . ./myread
4023 optimize="$ans"
4024 case "$optimize" in
4025 'none') optimize=" ";;
4026 esac
4027
4028 dflt=''
4029 : We will not override a previous value, but we might want to
4030 : augment a hint file
4031 case "$hint" in
4032 none|recommended)
4033         case "$gccversion" in
4034         1*) dflt='-fpcc-struct-return' ;;
4035         esac
4036         case "$optimize" in
4037         *-g*) dflt="$dflt -DDEBUGGING";;
4038         esac
4039         case "$gccversion" in
4040         2*) if test -d /etc/conf/kconfig.d &&
4041                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4042                 then
4043                         dflt="$dflt -posix"
4044                 fi
4045                 ;;
4046         esac
4047         ;;
4048 esac
4049
4050 case "$mips_type" in
4051 *BSD*|'') inclwanted="$locincpth $usrinc";;
4052 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4053 esac
4054 for thisincl in $inclwanted; do
4055         if $test -d $thisincl; then
4056                 if $test x$thisincl != x$usrinc; then
4057                         case "$dflt" in
4058                         *$thisincl*);;
4059                         *) dflt="$dflt -I$thisincl";;
4060                         esac
4061                 fi
4062         fi
4063 done
4064
4065 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4066         xxx=true;
4067 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4068         xxx=true;
4069 else
4070         xxx=false;
4071 fi;
4072 if $xxx; then
4073         case "$dflt" in
4074         *$2*);;
4075         *) dflt="$dflt -D$2";;
4076         esac;
4077 fi'
4078
4079 if ./osf1; then
4080         set signal.h __LANGUAGE_C__; eval $inctest
4081 else
4082         set signal.h LANGUAGE_C; eval $inctest
4083 fi
4084
4085 case "$hint" in
4086 none|recommended) dflt="$ccflags $dflt" ;;
4087 *) dflt="$ccflags";;
4088 esac
4089
4090 case "$dflt" in
4091 ''|' ') dflt=none;;
4092 esac
4093 $cat <<EOH
4094
4095 Your C compiler may want other flags.  For this question you should include
4096 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4097 but you should NOT include libraries or ld flags like -lwhatever.  If you
4098 want $package to honor its debug switch, you should include -DDEBUGGING here.
4099 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4100
4101 To use no flags, specify the word "none".
4102
4103 EOH
4104 set X $dflt
4105 shift
4106 dflt=${1+"$@"}
4107 rp="Any additional cc flags?"
4108 . ./myread
4109 case "$ans" in
4110 none) ccflags='';;
4111 *) ccflags="$ans";;
4112 esac
4113
4114 : the following weeds options from ccflags that are of no interest to cpp
4115 cppflags="$ccflags"
4116 case "$gccversion" in
4117 1*) cppflags="$cppflags -D__GNUC__"
4118 esac
4119 case "$mips_type" in
4120 '');;
4121 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4122 esac
4123 case "$cppflags" in
4124 '');;
4125 *)
4126         echo " "
4127         echo "Let me guess what the preprocessor flags are..." >&4
4128         set X $cppflags
4129         shift
4130         cppflags=''
4131         $cat >cpp.c <<'EOM'
4132 #define BLURFL foo
4133
4134 BLURFL xx LFRULB
4135 EOM
4136         previous=''
4137         for flag in $*
4138         do
4139                 case "$flag" in
4140                 -*) ftry="$flag";;
4141                 *) ftry="$previous $flag";;
4142                 esac
4143                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4144                         >cpp1.out 2>/dev/null && \
4145                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4146                         >cpp2.out 2>/dev/null && \
4147                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4148                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4149                 then
4150                         cppflags="$cppflags $ftry"
4151                         previous=''
4152                 else
4153                         previous="$flag"
4154                 fi
4155         done
4156         set X $cppflags
4157         shift
4158         cppflags=${1+"$@"}
4159         case "$cppflags" in
4160         *-*)  echo "They appear to be: $cppflags";;
4161         esac
4162         $rm -f cpp.c cpp?.out
4163         ;;
4164 esac
4165
4166 : flags used in final linking phase
4167 case "$ldflags" in
4168 '') if ./venix; then
4169                 dflt='-i -z'
4170         else
4171                 dflt=''
4172         fi
4173         case "$ccflags" in
4174         *-posix*) dflt="$dflt -posix" ;;
4175         esac
4176         ;;
4177 *) dflt="$ldflags";;
4178 esac
4179
4180 : Try to guess additional flags to pick up local libraries.
4181 for thislibdir in $libpth; do
4182         case " $loclibpth " in
4183         *" $thislibdir "*)
4184                 case "$dflt " in 
4185                 *"-L$thislibdir "*) ;;
4186                 *)  dflt="$dflt -L$thislibdir" ;;
4187                 esac
4188                 ;;
4189         esac
4190 done
4191
4192 case "$dflt" in
4193 '') dflt='none' ;;
4194 esac
4195
4196 $cat <<EOH
4197
4198 Your C linker may need flags.  For this question you should
4199 include -L/whatever and any other flags used by the C linker, but you
4200 should NOT include libraries like -lwhatever.
4201
4202 Make sure you include the appropriate -L/path flags if your C linker
4203 does not normally search all of the directories you specified above,
4204 namely
4205         $libpth
4206 To use no flags, specify the word "none".
4207
4208 EOH
4209
4210 rp="Any additional ld flags (NOT including libraries)?"
4211 . ./myread
4212 case "$ans" in
4213 none) ldflags='';;
4214 *) ldflags="$ans";;
4215 esac
4216 rmlist="$rmlist pdp11"
4217
4218 : coherency check
4219 echo " "
4220 echo "Checking your choice of C compiler and flags for coherency..." >&4
4221 $cat > try.c <<'EOF'
4222 #include <stdio.h>
4223 int main() { printf("Ok\n"); exit(0); }
4224 EOF
4225 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4226 shift
4227 $cat >try.msg <<'EOM'
4228 I've tried to compile and run the following simple program:
4229
4230 EOM
4231 $cat try.c >> try.msg
4232
4233 $cat >> try.msg <<EOM
4234
4235 I used the command:
4236
4237         $*
4238         ./try
4239
4240 and I got the following output:
4241
4242 EOM
4243 dflt=y
4244 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4245         if sh -c './try' >>try.msg 2>&1; then
4246                 xxx=`./try`
4247                 case "$xxx" in
4248                 "Ok") dflt=n ;;
4249                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4250                         case " $libs " in
4251                         *" -lsfio "*)
4252                                 cat >> try.msg <<'EOQS'
4253 If $libs contains -lsfio, and sfio is mis-configured, then it
4254 sometimes (apparently) runs and exits with a 0 status, but with no
4255 output!  It may have to do with sfio's use of _exit vs. exit.
4256
4257 EOQS
4258                                 rp="You have a big problem.  Shall I abort Configure"
4259                                 dflt=y
4260                                 ;;
4261                         esac
4262                         ;;
4263                 esac
4264         else
4265                 echo "The program compiled OK, but exited with status $?." >>try.msg
4266                 rp="You have a problem.  Shall I abort Configure"
4267                 dflt=y
4268         fi
4269 else
4270         echo "I can't compile the test program." >>try.msg
4271         rp="You have a BIG problem.  Shall I abort Configure"
4272         dflt=y
4273 fi
4274 case "$dflt" in
4275 y)
4276         $cat try.msg >&4
4277         case "$knowitall" in
4278         '')
4279                 echo "(The supplied flags or libraries might be incorrect.)"
4280                 ;;
4281         *) dflt=n;;
4282         esac
4283         echo " "
4284         . ./myread
4285         case "$ans" in
4286         n*|N*) ;;
4287         *)      echo "Ok.  Stopping Configure." >&4
4288                 exit 1
4289                 ;;
4290         esac
4291         ;;
4292 n) echo "OK, that should do.";;
4293 esac
4294 $rm -f try try.* core
4295
4296 : determine filename position in cpp output
4297 echo " "
4298 echo "Computing filename position in cpp output for #include directives..." >&4
4299 echo '#include <stdio.h>' > foo.c
4300 $cat >fieldn <<EOF
4301 $startsh
4302 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4303 $grep '^[       ]*#.*stdio\.h' | \
4304 while read cline; do
4305         pos=1
4306         set \$cline
4307         while $test \$# -gt 0; do
4308                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4309                         echo "\$pos"
4310                         exit 0
4311                 fi
4312                 shift
4313                 pos=\`expr \$pos + 1\`
4314         done
4315 done
4316 EOF
4317 chmod +x fieldn
4318 fieldn=`./fieldn`
4319 $rm -f foo.c fieldn
4320 case $fieldn in
4321 '') pos='???';;
4322 1) pos=first;;
4323 2) pos=second;;
4324 3) pos=third;;
4325 *) pos="${fieldn}th";;
4326 esac
4327 echo "Your cpp writes the filename in the $pos field of the line."
4328
4329 : locate header file
4330 $cat >findhdr <<EOF
4331 $startsh
4332 wanted=\$1
4333 name=''
4334 if test -f $usrinc/\$wanted; then
4335         echo "$usrinc/\$wanted"
4336         exit 0
4337 fi
4338 awkprg='{ print \$$fieldn }'
4339 echo "#include <\$wanted>" > foo\$\$.c
4340 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4341 $grep "^[       ]*#.*\$wanted" | \
4342 while read cline; do
4343         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4344         case "\$name" in
4345         */\$wanted) echo "\$name"; exit 0;;
4346         *) name='';;
4347         esac;
4348 done;
4349 $rm -f foo\$\$.c;
4350 case "\$name" in
4351 '') exit 1;;
4352 esac
4353 EOF
4354 chmod +x findhdr
4355
4356 : define an alternate in-header-list? function
4357 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4358 cont=true; xxf="echo \"<\$1> found.\" >&4";
4359 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4360 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4361 esac;
4362 case $# in 4) instead=instead;; *) instead="at last";; esac;
4363 while $test "$cont"; do
4364         xxx=`./findhdr $1`
4365         var=$2; eval "was=\$$2";
4366         if $test "$xxx" && $test -r "$xxx";
4367         then eval $xxf;
4368         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4369                 cont="";
4370         else eval $xxnf;
4371         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4372         set $yyy; shift; shift; yyy=$@;
4373         case $# in 0) cont="";;
4374         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4375                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4376         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4377                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4378         esac;
4379 done;
4380 while $test "$yyy";
4381 do set $yyy; var=$2; eval "was=\$$2";
4382         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4383         set $yyy; shift; shift; yyy=$@;
4384 done'
4385
4386 : see if this is a malloc.h system
4387 set malloc.h i_malloc
4388 eval $inhdr
4389
4390 : see if stdlib is available
4391 set stdlib.h i_stdlib
4392 eval $inhdr
4393
4394 : determine which malloc to compile in
4395 echo " "
4396 case "$usemymalloc" in
4397 ''|[yY]*|true|$define)  dflt='y' ;;
4398 *)      dflt='n' ;;
4399 esac
4400 rp="Do you wish to attempt to use the malloc that comes with $package?"
4401 . ./myread
4402 usemymalloc="$ans"
4403 case "$ans" in
4404 y*|true)
4405         usemymalloc='y'
4406         mallocsrc='malloc.c'
4407         mallocobj="malloc$_o"
4408         d_mymalloc="$define"
4409         case "$libs" in
4410         *-lmalloc*)
4411                 : Remove malloc from list of libraries to use
4412                 echo "Removing unneeded -lmalloc from library list" >&4
4413                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4414                 shift
4415                 libs="$*"
4416                 echo "libs = $libs" >&4
4417                 ;;
4418         esac
4419         ;;
4420 *)
4421         usemymalloc='n'
4422         mallocsrc=''
4423         mallocobj=''
4424         d_mymalloc="$undef"
4425         ;;
4426 esac
4427
4428 : compute the return types of malloc and free
4429 echo " "
4430 $cat >malloc.c <<END
4431 #$i_malloc I_MALLOC
4432 #$i_stdlib I_STDLIB
4433 #include <stdio.h>
4434 #include <sys/types.h>
4435 #ifdef I_MALLOC
4436 #include <malloc.h>
4437 #endif
4438 #ifdef I_STDLIB
4439 #include <stdlib.h>
4440 #endif
4441 #ifdef TRY_MALLOC
4442 void *malloc();
4443 #endif
4444 #ifdef TRY_FREE
4445 void free();
4446 #endif
4447 END
4448 case "$malloctype" in
4449 '')
4450         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4451                 malloctype='void *'
4452         else
4453                 malloctype='char *'
4454         fi
4455         ;;
4456 esac
4457 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4458
4459 case "$freetype" in
4460 '')
4461         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4462                 freetype='void'
4463         else
4464                 freetype='int'
4465         fi
4466         ;;
4467 esac
4468 echo "Your system uses $freetype free(), it would seem." >&4
4469 $rm -f malloc.[co]
4470 : Cruising for prototypes
4471 echo " "
4472 echo "Checking out function prototypes..." >&4
4473 $cat >prototype.c <<'EOCP'
4474 int main(int argc, char *argv[]) {
4475         exit(0);}
4476 EOCP
4477 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
4478         echo "Your C compiler appears to support function prototypes."
4479         val="$define"
4480 else
4481         echo "Your C compiler doesn't seem to understand function prototypes."
4482         val="$undef"
4483 fi
4484 set prototype
4485 eval $setvar
4486 $rm -f prototype*
4487
4488 case "$prototype" in
4489 "$define") ;;
4490 *)      ansi2knr='ansi2knr'
4491         echo " "
4492         cat <<EOM >&4
4493
4494 $me:  FATAL ERROR:
4495 This version of $package can only be compiled by a compiler that 
4496 understands function prototypes.  Unfortunately, your C compiler 
4497         $cc $ccflags
4498 doesn't seem to understand them.  Sorry about that.
4499
4500 If GNU cc is available for your system, perhaps you could try that instead.  
4501
4502 Eventually, we hope to support building Perl with pre-ANSI compilers.
4503 If you would like to help in that effort, please contact <perlbug@perl.org>.
4504
4505 Aborting Configure now.
4506 EOM
4507         exit 2
4508         ;;
4509 esac
4510
4511 : determine where public executables go
4512 echo " "
4513 set dflt bin bin
4514 eval $prefixit
4515 fn=d~
4516 rp='Pathname where the public executables will reside?'
4517 . ./getfile
4518 if $test "X$ansexp" != "X$binexp"; then
4519         installbin=''
4520 fi
4521 bin="$ans"
4522 binexp="$ansexp"
4523 if $afs; then
4524         $cat <<EOM
4525
4526 Since you are running AFS, I need to distinguish the directory in which
4527 executables reside from the directory in which they are installed (and from
4528 which they are presumably copied to the former directory by occult means).
4529
4530 EOM
4531         case "$installbin" in
4532         '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
4533         *) dflt="$installbin";;
4534         esac
4535         fn=de~
4536         rp='Where will public executables be installed?'
4537         . ./getfile
4538         installbin="$ans"
4539 else
4540         installbin="$binexp"
4541 fi
4542
4543 : determine whether to install perl also as /usr/bin/perl
4544
4545 echo " "
4546 if test -d /usr/bin -a "X$installbin" != X/usr/bin; then
4547         $cat <<EOM
4548 Many scripts expect to perl to be installed as /usr/bin/perl.
4549 I can install the perl you are about to compile also as /usr/bin/perl
4550 (in addition to $installbin/perl).
4551 EOM
4552         case "$installusrbinperl" in
4553         "$undef"|[nN]*) dflt='n';;
4554         *)              dflt='y';;
4555         esac
4556         rp="Do you want to install perl as /usr/bin/perl?"
4557         . ./myread
4558         case "$ans" in
4559         [yY]*)  val="$define";;
4560         *)      val="$undef" ;;
4561         esac
4562 else
4563         val="$undef"
4564 fi
4565 set installusrbinperl
4566 eval $setvar
4567
4568 : define a shorthand compile call
4569 compile='
4570 mc_file=$1;
4571 shift;
4572 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4573 : define a shorthand compile call for compilations that should be ok.
4574 compile_ok='
4575 mc_file=$1;
4576 shift;
4577 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4578
4579 echo " "
4580 echo "Checking for GNU C Library..." >&4
4581 cat >gnulibc.c <<EOM
4582 #include <stdio.h>
4583 int main()
4584 {
4585 #ifdef __GLIBC__
4586     exit(0);
4587 #else
4588     exit(1);
4589 #endif
4590 }
4591 EOM
4592 set gnulibc
4593 if eval $compile_ok && ./gnulibc; then
4594         val="$define"
4595         echo "You are using the GNU C Library"
4596 else
4597         val="$undef"
4598         echo "You are not using the GNU C Library"
4599 fi
4600 $rm -f gnulibc*
4601 set d_gnulibc
4602 eval $setvar
4603
4604 : see if nm is to be used to determine whether a symbol is defined or not
4605 case "$usenm" in
4606 '')
4607         dflt=''
4608         case "$d_gnulibc" in
4609         "$define")
4610                 echo " "
4611                 echo "nm probably won't work on the GNU C Library." >&4
4612                 dflt=n
4613                 ;;
4614         esac
4615         case "$dflt" in
4616         '') 
4617                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4618                         echo " "
4619                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4620                         echo "'nm' won't be sufficient on this sytem." >&4
4621                         dflt=n
4622                 fi
4623                 ;;
4624         esac
4625         case "$dflt" in
4626         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4627                 if $test $dflt -gt 20; then
4628                         dflt=y
4629                 else
4630                         dflt=n
4631                 fi
4632                 ;;
4633         esac
4634         ;;
4635 *)
4636         case "$usenm" in
4637         true|$define) dflt=y;;
4638         *) dflt=n;;
4639         esac
4640         ;;
4641 esac
4642 $cat <<EOM
4643
4644 I can use $nm to extract the symbols from your C libraries. This
4645 is a time consuming task which may generate huge output on the disk (up
4646 to 3 megabytes) but that should make the symbols extraction faster. The
4647 alternative is to skip the 'nm' extraction part and to compile a small
4648 test program instead to determine whether each symbol is present. If
4649 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4650 this may be the best solution.
4651
4652 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4653
4654 EOM
4655 rp="Shall I use $nm to extract C symbols from the libraries?"
4656 . ./myread
4657 case "$ans" in
4658 [Nn]*) usenm=false;;
4659 *) usenm=true;;
4660 esac
4661
4662 runnm=$usenm
4663 case "$reuseval" in
4664 true) runnm=false;;
4665 esac
4666
4667 : nm options which may be necessary
4668 case "$nm_opt" in
4669 '') if $test -f /mach_boot; then
4670                 nm_opt=''       # Mach
4671         elif $test -d /usr/ccs/lib; then
4672                 nm_opt='-p'     # Solaris (and SunOS?)
4673         elif $test -f /dgux; then
4674                 nm_opt='-p'     # DG-UX
4675         elif $test -f /lib64/rld; then
4676                 nm_opt='-p'     # 64-bit Irix
4677         else
4678                 nm_opt=''
4679         fi;;
4680 esac
4681
4682 : nm options which may be necessary for shared libraries but illegal
4683 : for archive libraries.  Thank you, Linux.
4684 case "$nm_so_opt" in
4685 '')     case "$myuname" in
4686         *linux*)
4687                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4688                         nm_so_opt='--dynamic'
4689                 fi
4690                 ;;
4691         esac
4692         ;;
4693 esac
4694
4695 case "$runnm" in
4696 true)
4697 : get list of predefined functions in a handy place
4698 echo " "
4699 case "$libc" in
4700 '') libc=unknown
4701         case "$libs" in
4702         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4703         esac
4704         ;;
4705 esac
4706 libnames='';
4707 case "$libs" in
4708 '') ;;
4709 *)  for thislib in $libs; do
4710         case "$thislib" in
4711         -lc|-lc_s)
4712                 : Handle C library specially below.
4713                 ;;
4714         -l*)
4715                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4716                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4717                         :
4718                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4719                         :
4720                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4721                         :
4722                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4723                         :
4724                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4725                         :
4726                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4727                         :
4728                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4729                         :
4730                 else
4731                         try=''
4732                 fi
4733                 libnames="$libnames $try"
4734                 ;;
4735         *) libnames="$libnames $thislib" ;;
4736         esac
4737         done
4738         ;;
4739 esac
4740 xxx=normal
4741 case "$libc" in
4742 unknown)
4743         set /lib/libc.$so
4744         for xxx in $libpth; do
4745                 $test -r $1 || set $xxx/libc.$so
4746                 : The messy sed command sorts on library version numbers.
4747                 $test -r $1 || \
4748                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4749                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4750                                 h
4751                                 s/[0-9][0-9]*/0000&/g
4752                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4753                                 G
4754                                 s/\n/ /' | \
4755                          sort | $sed -e 's/^.* //'`
4756                 eval set \$$#
4757         done
4758         $test -r $1 || set /usr/ccs/lib/libc.$so
4759         $test -r $1 || set /lib/libsys_s$_a
4760         ;;
4761 *)
4762         set blurfl
4763         ;;
4764 esac
4765 if $test -r "$1"; then
4766         echo "Your (shared) C library seems to be in $1."
4767         libc="$1"
4768 elif $test -r /lib/libc && $test -r /lib/clib; then
4769         echo "Your C library seems to be in both /lib/clib and /lib/libc."
4770         xxx=apollo
4771         libc='/lib/clib /lib/libc'
4772         if $test -r /lib/syslib; then
4773                 echo "(Your math library is in /lib/syslib.)"
4774                 libc="$libc /lib/syslib"
4775         fi
4776 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4777         echo "Your C library seems to be in $libc, as you said before."
4778 elif $test -r $incpath/usr/lib/libc$_a; then
4779         libc=$incpath/usr/lib/libc$_a;
4780         echo "Your C library seems to be in $libc.  That's fine."
4781 elif $test -r /lib/libc$_a; then
4782         libc=/lib/libc$_a;
4783         echo "Your C library seems to be in $libc.  You're normal."
4784 else
4785         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
4786                 :
4787         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4788                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4789         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4790                 :
4791         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4792                 :
4793         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4794                 :
4795         else
4796                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4797         fi
4798         if $test -r "$tans"; then
4799                 echo "Your C library seems to be in $tans, of all places."
4800                 libc=$tans
4801         else
4802                 libc='blurfl'
4803         fi
4804 fi
4805 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4806         dflt="$libc"
4807         cat <<EOM
4808
4809 If the guess above is wrong (which it might be if you're using a strange
4810 compiler, or your machine supports multiple models), you can override it here.
4811
4812 EOM
4813 else
4814         dflt=''
4815         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
4816         cat >&4 <<EOM
4817 I can't seem to find your C library.  I've looked in the following places:
4818
4819 EOM
4820         $sed 's/^/      /' libpath
4821         cat <<EOM
4822
4823 None of these seems to contain your C library. I need to get its name...
4824
4825 EOM
4826 fi
4827 fn=f
4828 rp='Where is your C library?'
4829 . ./getfile
4830 libc="$ans"
4831
4832 echo " "
4833 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
4834 set X `cat libnames`
4835 shift
4836 xxx=files
4837 case $# in 1) xxx=file; esac
4838 echo "Extracting names from the following $xxx for later perusal:" >&4
4839 echo " "
4840 $sed 's/^/      /' libnames >&4
4841 echo " "
4842 $echo $n "This may take a while...$c" >&4
4843
4844 for file in $*; do
4845         case $file in
4846         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
4847         *) $nm $nm_opt $file 2>/dev/null;;
4848         esac
4849 done >libc.tmp
4850
4851 $echo $n ".$c"
4852 $grep fprintf libc.tmp > libc.ptf
4853 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
4854 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
4855 xxx='[ADTSIW]'
4856 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
4857         eval $xscan;\
4858         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4859                 eval $xrun
4860 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
4861         eval $xscan;\
4862         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4863                 eval $xrun
4864 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
4865         eval $xscan;\
4866         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4867                 eval $xrun
4868 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
4869         eval $xscan;\
4870         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4871                 eval $xrun
4872 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
4873         eval $xscan;\
4874         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4875                 eval $xrun
4876 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
4877         eval $xscan;\
4878         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4879                 eval $xrun
4880 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
4881                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
4882         eval $xscan;\
4883         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4884                 eval $xrun
4885 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
4886         eval $xscan;\
4887         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4888                 eval $xrun
4889 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
4890         eval $xscan;\
4891         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4892                 eval $xrun
4893 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
4894         eval $xscan;\
4895         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4896                 eval $xrun
4897 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
4898         eval $xscan;\
4899         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4900                 eval $xrun
4901 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
4902         eval $xscan;\
4903         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4904                 eval $xrun
4905 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
4906         eval $xscan;\
4907         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4908                 eval $xrun
4909 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
4910         eval $xscan;\
4911         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4912                 eval $xrun
4913 else
4914         $nm -p $* 2>/dev/null >libc.tmp
4915         $grep fprintf libc.tmp > libc.ptf
4916         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
4917                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
4918         then
4919                 nm_opt='-p'
4920                 eval $xrun
4921         else
4922                 echo " "
4923                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
4924                 com=''
4925                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
4926                         for thisname in $libnames $libc; do
4927                                 $ar t $thisname >>libc.tmp
4928                         done
4929                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
4930                         echo "Ok." >&4
4931                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
4932                         # Repeat libc to extract forwarders to DLL entries too
4933                         for thisname in $libnames $libc; do
4934                                 $ar tv $thisname >>libc.tmp
4935                                 # Revision 50 of EMX has bug in $ar.
4936                                 # it will not extract forwarders to DLL entries
4937                                 # Use emximp which will extract exactly them.
4938                                 emximp -o tmp.imp $thisname \
4939                                     2>/dev/null && \
4940                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
4941                                     < tmp.imp >>libc.tmp
4942                                 $rm tmp.imp
4943                         done
4944                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
4945                         echo "Ok." >&4
4946                 else
4947                         echo "$ar didn't seem to work right." >&4
4948                         echo "Maybe this is a Cray...trying bld instead..." >&4
4949                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
4950                         then
4951                                 for thisname in $libnames; do
4952                                         bld t $libnames | \
4953                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
4954                                         $ar t $thisname >>libc.tmp
4955                                 done
4956                                 echo "Ok." >&4
4957                         else
4958                                 echo "That didn't work either.  Giving up." >&4
4959                                 exit 1
4960                         fi
4961                 fi
4962         fi
4963 fi
4964 nm_extract="$com"
4965 if $test -f /lib/syscalls.exp; then
4966         echo " "
4967         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
4968         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
4969 fi
4970 ;;
4971 esac
4972 $rm -f libnames libpath
4973
4974 : see if dld is available
4975 set dld.h i_dld
4976 eval $inhdr
4977
4978 : is a C symbol defined?
4979 csym='tlook=$1;
4980 case "$3" in
4981 -v) tf=libc.tmp; tc=""; tdc="";;
4982 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
4983 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
4984 esac;
4985 tx=yes;
4986 case "$reuseval-$4" in
4987 true-) ;;
4988 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
4989 esac;
4990 case "$tx" in
4991 yes)
4992         case "$runnm" in
4993         true)
4994                 if $contains $tlook $tf >/dev/null 2>&1;
4995                 then tval=true;
4996                 else tval=false;
4997                 fi;;
4998         *)
4999                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5000                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
5001                 then tval=true;
5002                 else tval=false;
5003                 fi;
5004                 $rm -f t t.c;;
5005         esac;;
5006 *)
5007         case "$tval" in
5008         $define) tval=true;;
5009         *) tval=false;;
5010         esac;;
5011 esac;
5012 eval "$2=$tval"'
5013
5014 : define an is-in-libc? function
5015 inlibc='echo " "; td=$define; tu=$undef;
5016 sym=$1; var=$2; eval "was=\$$2";
5017 tx=yes;
5018 case "$reuseval$was" in
5019 true) ;;
5020 true*) tx=no;;
5021 esac;
5022 case "$tx" in
5023 yes)
5024         set $sym tres -f;
5025         eval $csym;
5026         case "$tres" in
5027         true)
5028                 echo "$sym() found." >&4;
5029                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5030         *)
5031                 echo "$sym() NOT found." >&4;
5032                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5033         esac;;
5034 *)
5035         case "$was" in
5036         $define) echo "$sym() found." >&4;;
5037         *) echo "$sym() NOT found." >&4;;
5038         esac;;
5039 esac'
5040
5041 : see if dlopen exists
5042 xxx_runnm="$runnm"
5043 runnm=false
5044 set dlopen d_dlopen
5045 eval $inlibc
5046 runnm="$xxx_runnm"
5047
5048 : determine which dynamic loading, if any, to compile in
5049 echo " "
5050 dldir="ext/DynaLoader"
5051 case "$usedl" in
5052 $define|y|true)
5053         dflt='y'
5054         usedl="$define"
5055         ;;
5056 $undef|n|false)
5057         dflt='n'
5058         usedl="$undef"
5059         ;;
5060 *) 
5061         dflt='n'
5062         case "$d_dlopen" in
5063             $define) dflt='y' ;;
5064         esac
5065         case "$i_dld" in
5066             $define) dflt='y' ;;
5067         esac
5068         : Does a dl_xxx.xs file exist for this operating system
5069         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
5070         ;;
5071 esac
5072 rp="Do you wish to use dynamic loading?"
5073 . ./myread
5074 usedl="$ans"
5075 case "$ans" in
5076 y*) usedl="$define"
5077         case "$dlsrc" in
5078         '')
5079                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
5080                         dflt="$dldir/dl_${osname}.xs"
5081                 elif $test "$d_dlopen" = "$define" ; then
5082                         dflt="$dldir/dl_dlopen.xs"
5083                 elif $test "$i_dld" = "$define" ; then
5084                         dflt="$dldir/dl_dld.xs"
5085                 else
5086                         dflt=''
5087                 fi
5088                 ;;
5089         *)      dflt="$dldir/$dlsrc"
5090                 ;;
5091         esac
5092     echo "The following dynamic loading files are available:"
5093         : Can not go over to $dldir because getfile has path hard-coded in.
5094         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
5095         rp="Source file to use for dynamic loading"
5096         fn="fne"
5097         # XXX This getfile call will fail the existence check if you try 
5098         # building away from $src (this is not supported yet).
5099         . ./getfile
5100         usedl="$define"
5101         : emulate basename
5102         dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
5103
5104         $cat << EOM
5105
5106 Some systems may require passing special flags to $cc -c to
5107 compile modules that will be used to create a shared library.
5108 To use no flags, say "none".
5109
5110 EOM
5111     case "$cccdlflags" in
5112     '') case "$gccversion" in
5113                 '') case "$osname" in
5114                         hpux)   dflt='+z' ;;
5115                         next)   dflt='none' ;;
5116                         irix*)  dflt='-KPIC' ;;
5117                         svr4*|esix*|solaris) dflt='-KPIC' ;;
5118                         sunos)  dflt='-pic' ;;
5119                         *)      dflt='none' ;;
5120                     esac
5121                         ;;
5122                 *)  case "$osname" in
5123                         svr4*|esix*|solaris) dflt='-fPIC' ;;
5124                         *)      dflt='-fpic' ;;
5125                     esac ;;
5126             esac ;;
5127         ' ') dflt='none' ;;
5128     *)  dflt="$cccdlflags" ;;
5129     esac
5130     rp="Any special flags to pass to $cc -c to compile shared library modules?"
5131     . ./myread
5132     case "$ans" in
5133     none) cccdlflags=' ' ;;
5134     *) cccdlflags="$ans" ;;
5135     esac
5136
5137     cat << EOM
5138
5139 Some systems use ld to create libraries that can be dynamically loaded,
5140 while other systems (such as those using ELF) use $cc.
5141
5142 EOM
5143         case "$ld" in
5144         '')     $cat >try.c <<'EOM'
5145 /* Test for whether ELF binaries are produced */
5146 #include <fcntl.h>
5147 #include <stdlib.h>
5148 int main() {
5149         char b[4];
5150         int i = open("a.out",O_RDONLY);
5151         if(i == -1) 
5152                 exit(1); /* fail */
5153         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
5154                 exit(0); /* succeed (yes, it's ELF) */
5155         else
5156                 exit(1); /* fail */
5157 }
5158 EOM
5159                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
5160                         cat <<EOM
5161 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
5162 EOM
5163                         dflt="$cc"
5164                 else
5165                         echo "I'll use ld to build dynamic libraries."
5166                         dflt='ld'
5167                 fi
5168                 rm -f try.c a.out
5169                 ;;
5170         *)      dflt="$ld"
5171                 ;;
5172         esac
5173
5174     rp="What command should be used to create dynamic libraries?"
5175     . ./myread
5176         ld="$ans"
5177
5178     cat << EOM
5179
5180 Some systems may require passing special flags to $ld to create a
5181 library that can be dynamically loaded.  If your ld flags include
5182 -L/other/path options to locate libraries outside your loader's normal
5183 search path, you may need to specify those -L options here as well.  To
5184 use no flags, say "none".
5185
5186 EOM
5187     case "$lddlflags" in
5188     '') case "$osname" in
5189                         beos) dflt='-nostart' ;;
5190                         hpux)  dflt='-b' ;;
5191                         linux|irix*)    dflt='-shared' ;;
5192                         next)  dflt='none' ;;
5193                         solaris) dflt='-G' ;;
5194                         sunos) dflt='-assert nodefinitions' ;;
5195                         svr4*|esix*) dflt="-G $ldflags" ;;
5196                 *)     dflt='none' ;;
5197                         esac
5198                         ;;
5199     *) dflt="$lddlflags" ;;
5200     esac
5201
5202         : Try to guess additional flags to pick up local libraries.
5203         : Be careful not to append to a plain 'none'
5204         case "$dflt" in
5205         none) dflt='' ;;
5206         esac
5207         for thisflag in $ldflags; do
5208                 case "$thisflag" in
5209                 -L*)
5210                         case " $dflt " in
5211                         *" $thisflag "*) ;;
5212                         *) dflt="$dflt $thisflag" ;;
5213                         esac
5214                         ;;
5215                 esac
5216         done
5217
5218         case "$dflt" in
5219         ''|' ') dflt='none' ;;
5220         esac
5221
5222     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
5223     . ./myread
5224     case "$ans" in
5225     none) lddlflags=' ' ;;
5226     *) lddlflags="$ans" ;;
5227     esac
5228
5229         cat <<EOM
5230
5231 Some systems may require passing special flags to $cc to indicate that
5232 the resulting executable will use dynamic linking.  To use no flags,
5233 say "none".
5234
5235 EOM
5236     case "$ccdlflags" in
5237     '') case "$osname" in
5238                 hpux)   dflt='-Wl,-E' ;;
5239                 linux)  dflt='-rdynamic' ;;
5240                 next)   dflt='none' ;;
5241                 sunos)  dflt='none' ;;
5242                 *)      dflt='none' ;;
5243             esac ;;
5244     ' ')  dflt='none' ;;
5245     *)  dflt="$ccdlflags" ;;
5246     esac
5247     rp="Any special flags to pass to $cc to use dynamic loading?"
5248     . ./myread
5249     case "$ans" in
5250     none) ccdlflags=' ' ;;
5251     *) ccdlflags="$ans" ;;
5252     esac
5253     ;;
5254 *)  usedl="$undef"
5255         ld='ld'
5256     dlsrc='dl_none.xs'
5257     lddlflags=''
5258     ccdlflags=''
5259     ;;
5260 esac
5261
5262 also=''
5263 case "$usedl" in
5264 $undef)
5265         # No dynamic loading being used, so don't bother even to prompt.
5266         useshrplib='false'
5267         ;;
5268 *)      case "$useshrplib" in
5269         '')     case "$osname" in
5270                 svr4*|dgux|dynixptx|esix|powerux|beos)
5271                         dflt=y
5272                         also='Building a shared libperl is required for dynamic loading to work on your system.'
5273                         ;;
5274                 next*)
5275                         case "$osvers" in
5276                         4*)     dflt=y
5277                                 also='Building a shared libperl is needed for MAB support.'
5278                                 ;;
5279                         *)      dflt=n
5280                                 ;;
5281                         esac
5282                         ;;
5283                 *)      dflt=n
5284                         ;;
5285                 esac
5286                 ;;
5287         $define|true|[Yy]*)
5288                 dflt=y
5289                 ;;
5290         *)      dflt=n
5291                 ;;
5292         esac
5293         $cat << EOM
5294
5295 The perl executable is normally obtained by linking perlmain.c with
5296 libperl${_a}, any static extensions (usually just DynaLoader), and
5297 any other libraries needed on this system (such as -lm, etc.).  Since
5298 your system supports dynamic loading, it is probably possible to build
5299 a shared libperl.$so.  If you will have more than one executable linked
5300 to libperl.$so, this will significantly reduce the size of each
5301 executable, but it may have a noticeable affect on performance.  The
5302 default is probably sensible for your system.
5303 $also
5304
5305 EOM
5306         rp="Build a shared libperl.$so (y/n)"
5307         . ./myread
5308         case "$ans" in
5309         true|$define|[Yy]*)
5310                 useshrplib='true'
5311                 # Why does next4 have to be so different?
5312                 case "${osname}${osvers}" in
5313                 next4*) xxx='DYLD_LIBRARY_PATH' ;;
5314                 os2*)   xxx='' ;; # Nothing special needed.
5315                 beos*)  xxx='' ;;
5316                 *)              xxx='LD_LIBRARY_PATH' ;;
5317                 esac
5318                 if test X"$xxx" != "X"; then
5319                         $cat <<EOM  | $tee -a ../config.msg >&4
5320
5321 To build perl, you must add the current working directory to your
5322 $xxx environment variable before running make.  You can do
5323 this with
5324    $xxx=\`pwd\`:\$$xxx; export $xxx
5325 for Bourne-style shells, or
5326    setenv $xxx \`pwd\`
5327 for Csh-style shells.  You *MUST* do this before running make.
5328
5329 EOM
5330                 fi
5331                 ;;
5332         *)      useshrplib='false' ;;
5333         esac
5334         ;;
5335 esac
5336
5337 case "$useshrplib" in
5338 true)
5339         case "$libperl" in
5340         '')
5341                 # Figure out a good name for libperl.so.  Since it gets stored in
5342                 # a version-specific architecture-dependent library, the version
5343                 # number isn't really that important, except for making cc/ld happy.
5344                 #
5345                 # A name such as libperl.so.3.1
5346                 majmin="libperl.$so.$patchlevel.$subversion"
5347                 # A name such as libperl.so.301
5348                 majonly=`echo $patchlevel $subversion |
5349                         $awk '{printf "%d%02d", $1, $2}'`
5350                 majonly=libperl.$so.$majonly
5351                 # I'd prefer to keep the os-specific stuff here to a minimum, and
5352                 # rely on figuring it out from the naming of libc.
5353                 case "${osname}${osvers}" in
5354                 next4*)
5355                         dflt=libperl.5.$so
5356                         # XXX How handle the --version stuff for MAB?
5357                         ;;
5358                 linux*)  # ld won't link with a bare -lperl otherwise.
5359                         dflt=libperl.$so
5360                         ;;
5361                 *)      # Try to guess based on whether libc has major.minor.
5362                         case "$libc" in
5363                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
5364                         *libc.$so.[0-9]*) dflt=$majonly ;;
5365                         *)      dflt=libperl.$so ;;
5366                         esac
5367                         ;;
5368                 esac
5369                 ;;
5370         *)      dflt=$libperl
5371                 ;;
5372         esac
5373         cat << EOM
5374
5375 I need to select a good name for the shared libperl.  If your system uses
5376 library names with major and minor numbers, then you might want something
5377 like $majmin.  Alternatively, if your system uses a single version
5378 number for shared libraries, then you might want to use $majonly.
5379 Or, your system might be quite happy with a simple libperl.$so.
5380
5381 Since the shared libperl will get installed into a version-specific
5382 architecture-dependent directory, the version number of the shared perl
5383 library probably isn't important, so the default should be o.k.
5384
5385 EOM
5386         rp='What name do you want to give to the shared libperl?'
5387         . ./myread
5388         libperl=$ans
5389         echo "Ok, I'll use $libperl"
5390         ;;
5391 *)
5392         libperl="libperl${_a}"
5393         ;;
5394 esac
5395
5396 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
5397 case "$shrpdir" in
5398 '') ;;
5399 *)      $cat >&4 <<EOM
5400 WARNING:  Use of the shrpdir variable for the installation location of
5401 the shared $libperl is not supported.  It was never documented and
5402 will not work in this version.  Let me (perlbug@perl.com)
5403 know of any problems this may cause.
5404
5405 EOM
5406         case "$shrpdir" in
5407         "$archlibexp/CORE")
5408                 $cat >&4 <<EOM
5409 But your current setting of $shrpdir is
5410 the default anyway, so it's harmless.
5411 EOM
5412                 ;;
5413         *)
5414                 $cat >&4 <<EOM
5415 Further, your current attempted setting of $shrpdir
5416 conflicts with the value of $archlibexp/CORE
5417 that installperl will use.
5418 EOM
5419                 ;;
5420         esac
5421         ;;
5422 esac
5423
5424 # How will the perl executable find the installed shared $libperl?
5425 # Add $xxx to ccdlflags.
5426 # If we can't figure out a command-line option, use $shrpenv to
5427 # set env LD_RUN_PATH.  The main perl makefile uses this.
5428 shrpdir=$archlibexp/CORE
5429 xxx=''
5430 tmp_shrpenv=''
5431 if "$useshrplib"; then
5432     case "$osname" in 
5433         aix)
5434                 # We'll set it in Makefile.SH...
5435                 ;;
5436         solaris|netbsd)
5437                 xxx="-R $shrpdir"
5438                 ;;
5439         freebsd)
5440                 xxx="-Wl,-R$shrpdir"
5441                 ;;
5442         linux|irix*|dec_osf)
5443                 xxx="-Wl,-rpath,$shrpdir"
5444                 ;;
5445         next)
5446                 # next doesn't like the default...
5447                 ;;
5448         beos)
5449                 # beos doesn't like the default, either.
5450                 ;;
5451         *)
5452                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
5453                 ;;
5454         esac
5455         case "$xxx" in
5456         '') ;;
5457         *)      
5458                 # Only add $xxx if it isn't already in ccdlflags.
5459                 case " $ccdlflags " in
5460                 *" $xxx "*)     ;;
5461                 *)      ccdlflags="$ccdlflags $xxx"
5462                         cat <<EOM >&4
5463
5464 Adding $xxx to the flags
5465 passed to $ld so that the perl executable will find the 
5466 installed shared $libperl.
5467
5468 EOM
5469                         ;;
5470                 esac
5471                 ;;
5472         esac
5473 fi
5474 # Respect a hint or command-line value.
5475 case "$shrpenv" in
5476 '') shrpenv="$tmp_shrpenv" ;;
5477 esac
5478
5479 : determine where manual pages go
5480 set man1dir man1dir none
5481 eval $prefixit
5482 $cat <<EOM
5483
5484 $spackage has manual pages available in source form.
5485 EOM
5486 case "$nroff" in
5487 nroff)
5488         echo "However, you don't have nroff, so they're probably useless to you."
5489         case "$man1dir" in
5490         '') man1dir="none";;
5491         esac;;
5492 esac
5493 echo "If you don't want the manual sources installed, answer 'none'."
5494 case "$man1dir" in
5495 ' ') dflt=none
5496         ;;
5497 '')
5498         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
5499         lookpath="$lookpath $prefixexp/man/p_man/man1"
5500         lookpath="$lookpath $prefixexp/man/u_man/man1"
5501         lookpath="$lookpath $prefixexp/man/man.1"
5502         case "$sysman" in
5503         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
5504         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
5505         esac
5506         set dflt
5507         eval $prefixup
5508         ;;
5509 *)  dflt="$man1dir"
5510         ;;
5511 esac
5512 echo " "
5513 fn=dn+~
5514 rp="Where do the main $spackage manual pages (source) go?"
5515 . ./getfile
5516 if $test "X$man1direxp" != "X$ansexp"; then
5517         installman1dir=''
5518 fi
5519 man1dir="$ans"
5520 man1direxp="$ansexp"
5521 case "$man1dir" in
5522 '') man1dir=' '
5523         installman1dir='';;
5524 esac
5525 if $afs; then
5526         $cat <<EOM
5527
5528 Since you are running AFS, I need to distinguish the directory in which
5529 manual pages reside from the directory in which they are installed (and from
5530 which they are presumably copied to the former directory by occult means).
5531
5532 EOM
5533         case "$installman1dir" in
5534         '') dflt=`echo $man1direxp | sed 's#^/afs/#/afs/.#'`;;
5535         *) dflt="$installman1dir";;
5536         esac
5537         fn=de~
5538         rp='Where will man pages be installed?'
5539         . ./getfile
5540         installman1dir="$ans"
5541 else
5542         installman1dir="$man1direxp"
5543 fi
5544
5545 : What suffix to use on installed man pages
5546
5547 case "$man1dir" in
5548 ' ')
5549         man1ext='0'
5550         ;;
5551 *)
5552         rp="What suffix should be used for the main $spackage man pages?"
5553         case "$man1ext" in
5554         '')     case "$man1dir" in
5555                 *1)  dflt=1 ;;
5556                 *1p) dflt=1p ;;
5557                 *1pm) dflt=1pm ;;
5558                 *l) dflt=l;;
5559                 *n) dflt=n;;
5560                 *o) dflt=o;;
5561                 *p) dflt=p;;
5562                 *C) dflt=C;;
5563                 *L) dflt=L;;
5564                 *L1) dflt=L1;;
5565                 *) dflt=1;;
5566                 esac
5567                 ;;
5568         *)      dflt="$man1ext";;
5569         esac
5570         . ./myread
5571         man1ext="$ans"
5572         ;;
5573 esac
5574
5575 : see if we can have long filenames
5576 echo " "
5577 rmlist="$rmlist /tmp/cf$$"
5578 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
5579 first=123456789abcdef
5580 second=/tmp/cf$$/$first
5581 $rm -f $first $second
5582 if (echo hi >$first) 2>/dev/null; then
5583         if $test -f 123456789abcde; then
5584                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
5585                 val="$undef"
5586         else
5587                 if (echo hi >$second) 2>/dev/null; then
5588                         if $test -f /tmp/cf$$/123456789abcde; then
5589                                 $cat <<'EOM'
5590 That's peculiar... You can have filenames longer than 14 characters, but only
5591 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
5592 I shall consider your system cannot support long filenames at all.
5593 EOM
5594                                 val="$undef"
5595                         else
5596                                 echo 'You can have filenames longer than 14 characters.' >&4
5597                                 val="$define"
5598                         fi
5599                 else
5600                         $cat <<'EOM'
5601 How confusing! Some of your filesystems are sane enough to allow filenames
5602 longer than 14 characters but some others like /tmp can't even think about them.
5603 So, for now on, I shall assume your kernel does not allow them at all.
5604 EOM
5605                         val="$undef"
5606                 fi
5607         fi
5608 else
5609         $cat <<'EOM'
5610 You can't have filenames longer than 14 chars.  You can't even think about them!
5611 EOM
5612         val="$undef"
5613 fi 
5614 set d_flexfnam
5615 eval $setvar
5616 $rm -rf /tmp/cf$$ 123456789abcde*
5617
5618 : determine where library module manual pages go
5619 set man3dir man3dir none
5620 eval $prefixit
5621 $cat <<EOM
5622
5623 $spackage has manual pages for many of the library modules.
5624 EOM
5625
5626 case "$nroff" in
5627 nroff)
5628         $cat <<'EOM'
5629 However, you don't have nroff, so they're probably useless to you.
5630 EOM
5631         case "$man3dir" in
5632         '') man3dir="none";;
5633         esac;;
5634 esac
5635
5636 case "$d_flexfnam" in
5637 undef)
5638         $cat <<'EOM'
5639 However, your system can't handle the long file names like File::Basename.3. 
5640 EOM
5641         case "$man3dir" in
5642         '') man3dir="none";;
5643         esac;;
5644 esac
5645
5646 echo "If you don't want the manual sources installed, answer 'none'."
5647 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5648 case "$man3dir" in
5649 '')     case "$prefix" in 
5650         *$prog*) dflt=`echo $man1dir | 
5651                         $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;;
5652         *)      dflt="$privlib/man/man3" ;;
5653         esac
5654         ;;
5655 ' ') dflt=none;;
5656 *)      dflt="$man3dir" ;;
5657 esac
5658 echo " "
5659
5660 fn=dn+~
5661 rp="Where do the $package library man pages (source) go?"
5662 . ./getfile
5663 if test "X$man3direxp" != "X$ansexp"; then
5664         installman3dir=''
5665 fi
5666
5667 man3dir="$ans"
5668 man3direxp="$ansexp"
5669 case "$man3dir" in
5670 '') man3dir=' '
5671         installman3dir='';;
5672 esac
5673 if $afs; then
5674         $cat <<EOM
5675
5676 Since you are running AFS, I need to distinguish the directory in which
5677 manual pages reside from the directory in which they are installed (and from
5678 which they are presumably copied to the former directory by occult means).
5679
5680 EOM
5681         case "$installman3dir" in
5682         '') dflt=`echo $man3direxp | sed 's#^/afs/#/afs/.#'`;;
5683         *) dflt="$installman3dir";;
5684         esac
5685         fn=de~
5686         rp='Where will man pages be installed?'
5687         . ./getfile
5688         installman3dir="$ans"
5689 else
5690         installman3dir="$man3direxp"
5691 fi
5692
5693 : What suffix to use on installed man pages
5694
5695 case "$man3dir" in
5696 ' ')
5697         man3ext='0'
5698         ;;
5699 *)
5700         rp="What suffix should be used for the $package library man pages?"
5701         case "$man3ext" in
5702         '')     case "$man3dir" in
5703                 *3)  dflt=3 ;;
5704                 *3p) dflt=3p ;;
5705                 *3pm) dflt=3pm ;;
5706                 *l) dflt=l;;
5707                 *n) dflt=n;;
5708                 *o) dflt=o;;
5709                 *p) dflt=p;;
5710                 *C) dflt=C;;
5711                 *L) dflt=L;;
5712                 *L3) dflt=L3;;
5713                 *) dflt=3;;
5714                 esac
5715                 ;;
5716         *)      dflt="$man3ext";;
5717         esac
5718         . ./myread
5719         man3ext="$ans"
5720         ;;
5721 esac
5722
5723 : see if we have to deal with yellow pages, now NIS.
5724 if $test -d /usr/etc/yp || $test -d /etc/yp; then
5725         if $test -f /usr/etc/nibindd; then
5726                 echo " "
5727                 echo "I'm fairly confident you're on a NeXT."
5728                 echo " "
5729                 rp='Do you get the hosts file via NetInfo?'
5730                 dflt=y
5731                 case "$hostcat" in
5732                 nidump*) ;;
5733                 '') ;;
5734                 *) dflt=n;;
5735                 esac
5736                 . ./myread
5737                 case "$ans" in
5738                 y*) hostcat='nidump hosts .';;
5739                 *)      case "$hostcat" in
5740                         nidump*) hostcat='';;
5741                         esac
5742                         ;;
5743                 esac
5744         fi
5745         case "$hostcat" in
5746         nidump*) ;;
5747         *)
5748                 case "$hostcat" in
5749                 *ypcat*) dflt=y;;
5750                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
5751                                 dflt=y
5752                         else
5753                                 dflt=n
5754                         fi;;
5755                 *) dflt=n;;
5756                 esac
5757                 echo " "
5758                 rp='Are you getting the hosts file via yellow pages?'
5759                 . ./myread
5760                 case "$ans" in
5761                 y*) hostcat='ypcat hosts';;
5762                 *) hostcat='cat /etc/hosts';;
5763                 esac
5764                 ;;
5765         esac
5766 fi
5767 case "$hostcat" in
5768 '') hostcat='cat /etc/hosts';;
5769 esac
5770 case "$groupcat" in
5771 '') groupcat='cat /etc/group';;
5772 esac
5773 case "$passcat" in
5774 '') passcat='cat /etc/passwd';;
5775 esac
5776
5777 : now get the host name
5778 echo " "
5779 echo "Figuring out host name..." >&4
5780 case "$myhostname" in
5781 '') cont=true
5782         echo 'Maybe "hostname" will work...'
5783         if tans=`sh -c hostname 2>&1` ; then
5784                 myhostname=$tans
5785                 phostname=hostname
5786                 cont=''
5787         fi
5788         ;;
5789 *) cont='';;
5790 esac
5791 if $test "$cont"; then
5792         if ./xenix; then
5793                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
5794                 if tans=`cat /etc/systemid 2>&1` ; then
5795                         myhostname=$tans
5796                         phostname='cat /etc/systemid'
5797                         echo "Whadyaknow.  Xenix always was a bit strange..."
5798                         cont=''
5799                 fi
5800         elif $test -r /etc/systemid; then
5801                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
5802         fi
5803 fi
5804 if $test "$cont"; then
5805         echo 'No, maybe "uuname -l" will work...'
5806         if tans=`sh -c 'uuname -l' 2>&1` ; then
5807                 myhostname=$tans
5808                 phostname='uuname -l'
5809         else
5810                 echo 'Strange.  Maybe "uname -n" will work...'
5811                 if tans=`sh -c 'uname -n' 2>&1` ; then
5812                         myhostname=$tans
5813                         phostname='uname -n'
5814                 else
5815                         echo 'Oh well, maybe I can mine it out of whoami.h...'
5816                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
5817                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
5818                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
5819                         else
5820                                 case "$myhostname" in
5821                                 '') echo "Does this machine have an identity crisis or something?"
5822                                         phostname='';;
5823                                 *)
5824                                         echo "Well, you said $myhostname before..."
5825                                         phostname='echo $myhostname';;
5826                                 esac
5827                         fi
5828                 fi
5829         fi
5830 fi
5831 : you do not want to know about this
5832 set $myhostname
5833 myhostname=$1
5834
5835 : verify guess
5836 if $test "$myhostname" ; then
5837         dflt=y
5838         rp='Your host name appears to be "'$myhostname'".'" Right?"
5839         . ./myread
5840         case "$ans" in
5841         y*) ;;
5842         *) myhostname='';;
5843         esac
5844 fi
5845
5846 : bad guess or no guess
5847 while $test "X$myhostname" = X ; do
5848         dflt=''
5849         rp="Please type the (one word) name of your host:"
5850         . ./myread
5851         myhostname="$ans"
5852 done
5853
5854 : translate upper to lower if necessary
5855 case "$myhostname" in
5856 *[A-Z]*)
5857         echo "(Normalizing case in your host name)"
5858         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
5859         ;;
5860 esac
5861
5862 case "$myhostname" in
5863 *.*)
5864         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
5865         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
5866         echo "(Trimming domain name from host name--host name is now $myhostname)"
5867         ;;
5868 *) case "$mydomain" in
5869         '')
5870                 {
5871                         test "X$hostcat" = "Xypcat hosts" &&
5872                         ypmatch "$myhostname" hosts 2>/dev/null |\
5873                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
5874                         $test -s hosts
5875                 } || {
5876                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
5877                                         /[       ]$myhostname[  . ]/p" > hosts
5878                 }
5879                 tmp_re="[       . ]"
5880                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
5881                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
5882                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
5883                         hosts | $sort | $uniq | \
5884                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
5885                 case `$echo X$dflt` in
5886                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
5887                         dflt=.
5888                         ;;
5889                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
5890                         ;;
5891                 esac
5892                 case "$dflt" in
5893                 .)
5894                         tans=`./loc resolv.conf X /etc /usr/etc`
5895                         if $test -f "$tans"; then
5896                                 echo "(Attempting domain name extraction from $tans)"
5897                                 dflt=.`$sed -n -e 's/   / /g' \
5898                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
5899                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5900                                 case "$dflt" in
5901                                 .) dflt=.`$sed -n -e 's/        / /g' \
5902                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
5903                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5904                                         ;;
5905                                 esac
5906                         fi
5907                         ;;
5908                 esac
5909                 case "$dflt" in
5910                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
5911                         dflt=.`sh -c domainname 2>/dev/null`
5912                         case "$dflt" in
5913                         '') dflt='.';;
5914                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
5915                         esac
5916                         ;;
5917                 esac
5918                 case "$dflt" in
5919                 .) echo "(Lost all hope -- silly guess then)"
5920                         dflt='.uucp'
5921                         ;;
5922                 esac
5923                 $rm -f hosts
5924                 ;;
5925         *) dflt="$mydomain";;
5926         esac;;
5927 esac
5928 echo " "
5929 rp="What is your domain name?"
5930 . ./myread
5931 tans="$ans"
5932 case "$ans" in
5933 '') ;;
5934 .*) ;;
5935 *) tans=".$tans";;
5936 esac
5937 mydomain="$tans"
5938
5939 : translate upper to lower if necessary
5940 case "$mydomain" in
5941 *[A-Z]*)
5942         echo "(Normalizing case in your domain name)"
5943         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
5944         ;;
5945 esac
5946
5947 : a little sanity check here
5948 case "$phostname" in
5949 '') ;;
5950 *)
5951         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
5952         $myhostname$mydomain|$myhostname) ;;
5953         *)
5954                 case "$phostname" in
5955                 sed*)
5956                         echo "(That doesn't agree with your whoami.h file, by the way.)"
5957                         ;;
5958                 *)
5959                         echo "(That doesn't agree with your $phostname command, by the way.)"
5960                         ;;
5961                 esac
5962         ;;
5963         esac
5964         ;;
5965 esac
5966
5967 $cat <<EOM
5968
5969 I need to get your e-mail address in Internet format if possible, i.e.
5970 something like user@host.domain. Please answer accurately since I have
5971 no easy means to double check it. The default value provided below
5972 is most probably close to the reality but may not be valid from outside
5973 your organization...
5974
5975 EOM
5976 cont=x
5977 while test "$cont"; do
5978         case "$cf_email" in
5979         '') dflt="$cf_by@$myhostname$mydomain";;
5980         *) dflt="$cf_email";;
5981         esac
5982         rp='What is your e-mail address?'
5983         . ./myread
5984         cf_email="$ans"
5985         case "$cf_email" in
5986         *@*.*) cont='' ;;
5987         *)
5988                 rp='Address does not look like an Internet one.  Use it anyway?'
5989                 case "$fastread" in
5990                 yes) dflt=y ;;
5991                 *) dflt=n ;;
5992                 esac
5993                 . ./myread
5994                 case "$ans" in
5995                 y*) cont='' ;;
5996                 *) echo " " ;;
5997                 esac
5998                 ;;
5999         esac
6000 done
6001
6002 $cat <<EOM
6003
6004 If you or somebody else will be maintaining perl at your site, please
6005 fill in the correct e-mail address here so that they may be contacted
6006 if necessary. Currently, the "perlbug" program included with perl
6007 will send mail to this address in addition to perlbug@perl.com. You may
6008 enter "none" for no administrator.
6009
6010 EOM
6011 case "$perladmin" in
6012 '') dflt="$cf_email";;
6013 *) dflt="$perladmin";;
6014 esac
6015 rp='Perl administrator e-mail address'
6016 . ./myread
6017 perladmin="$ans"
6018
6019 : figure out how to guarantee perl startup
6020 case "$startperl" in
6021 '')
6022         case "$sharpbang" in
6023         *!)
6024                 $cat <<EOH
6025
6026 I can use the #! construct to start perl on your system. This will
6027 make startup of perl scripts faster, but may cause problems if you
6028 want to share those scripts and perl is not in a standard place
6029 ($binexp/perl) on all your platforms. The alternative is to force
6030 a shell by starting the script with a single ':' character.
6031
6032 EOH
6033                 dflt="$binexp/perl"
6034                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
6035                 . ./myread
6036                 case "$ans" in
6037                 none)   startperl=": # use perl";;
6038                 *)      startperl="#!$ans"
6039                         if $test 30 -lt `echo "$ans" | wc -c`; then
6040                                 $cat >&4 <<EOM
6041
6042 WARNING:  Some systems limit the #! command to 32 characters.
6043 If you experience difficulty running Perl scripts with #!, try
6044 installing Perl in a directory with a shorter pathname.
6045
6046 EOM
6047                         fi ;;
6048                 esac
6049                 ;;
6050         *) startperl=": # use perl"
6051                 ;;
6052         esac
6053         ;;
6054 esac
6055 echo "I'll use $startperl to start perl scripts."
6056
6057 : figure best path for perl in scripts
6058 case "$perlpath" in
6059 '')
6060         perlpath="$binexp/perl"
6061         case "$startperl" in
6062         *!*) ;;
6063         *)
6064                 $cat <<EOH
6065
6066 I will use the "eval 'exec'" idiom to start Perl on your system.
6067 I can use the full path of your Perl binary for this purpose, but
6068 doing so may cause problems if you want to share those scripts and
6069 Perl is not always in a standard place ($binexp/perl).
6070
6071 EOH
6072                 dflt="$binexp/perl"
6073                 rp="What path shall I use in \"eval 'exec'\"?"
6074                 . ./myread
6075                 perlpath="$ans"
6076                 ;;
6077         esac
6078         ;;
6079 esac
6080 case "$startperl" in
6081 *!*)    ;;
6082 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
6083 esac
6084
6085 : determine where public executable scripts go
6086 set scriptdir scriptdir
6087 eval $prefixit
6088 case "$scriptdir" in
6089 '')
6090         dflt="$bin"
6091         : guess some guesses
6092         $test -d /usr/share/scripts && dflt=/usr/share/scripts
6093         $test -d /usr/share/bin && dflt=/usr/share/bin
6094         $test -d /usr/local/script && dflt=/usr/local/script
6095         $test -d $prefixexp/script && dflt=$prefixexp/script
6096         set dflt
6097         eval $prefixup
6098         ;;
6099 *)  dflt="$scriptdir"
6100         ;;
6101 esac
6102 $cat <<EOM
6103  
6104 Some installations have a separate directory just for executable scripts so
6105 that they can mount it across multiple architectures but keep the scripts in
6106 one spot.  You might, for example, have a subdirectory of /usr/share for this.
6107 Or you might just lump your scripts in with all your other executables.
6108  
6109 EOM
6110 fn=d~
6111 rp='Where do you keep publicly executable scripts?'
6112 . ./getfile
6113 if $test "X$ansexp" != "X$scriptdirexp"; then
6114         installscript=''
6115 fi
6116 scriptdir="$ans"
6117 scriptdirexp="$ansexp"
6118 if $afs; then
6119         $cat <<EOM
6120
6121 Since you are running AFS, I need to distinguish the directory in which
6122 scripts reside from the directory in which they are installed (and from
6123 which they are presumably copied to the former directory by occult means).
6124
6125 EOM
6126         case "$installscript" in
6127         '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
6128         *) dflt="$installscript";;
6129         esac
6130         fn=de~
6131         rp='Where will public scripts be installed?'
6132         . ./getfile
6133         installscript="$ans"
6134 else
6135         installscript="$scriptdirexp"
6136 fi
6137
6138 : determine where site specific libraries go.
6139 : Usual default is /usr/local/lib/perl5/site_perl/$apiversion
6140 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6141 case "$prefix" in
6142 *perl*) set dflt sitelib lib/site_$prog/$apiversion ;;
6143 *)       set dflt sitelib lib/$package/site_$prog/$apiversion ;;
6144 esac
6145 eval $prefixit
6146 $cat <<EOM
6147
6148 The installation process will also create a directory for
6149 site-specific extensions and modules.  Some users find it convenient
6150 to place all local files in this directory rather than in the main
6151 distribution directory.
6152
6153 EOM
6154 fn=d~+
6155 rp='Pathname for the site-specific library files?'
6156 . ./getfile
6157 if $test "X$sitelibexp" != "X$ansexp"; then
6158         installsitelib=''
6159 fi
6160 sitelib="$ans"
6161 sitelibexp="$ansexp"
6162 if $afs; then
6163         $cat <<EOM
6164
6165 Since you are running AFS, I need to distinguish the directory in
6166 which site-specific files reside from the directory in which they are
6167 installed (and from which they are presumably copied to the former
6168 directory by occult means).
6169
6170 EOM
6171         case "$installsitelib" in
6172         '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;;
6173         *) dflt="$installsitelib";;
6174         esac
6175         fn=de~
6176         rp='Where will site-specific files be installed?'
6177         . ./getfile
6178         installsitelib="$ans"
6179 else
6180         installsitelib="$sitelibexp"
6181 fi
6182
6183 : determine where site specific architecture-dependent libraries go.
6184 : sitelib  default is /usr/local/lib/perl5/site_perl/$apiversion
6185 : sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
6186 : sitelib may have an optional trailing /share.
6187 tdflt=`echo $sitelib | $sed 's,/share$,,'`
6188 tdflt="$tdflt/$archname"
6189 set sitearch sitearch none
6190 eval $prefixit
6191 case "$sitearch" in
6192 '')     dflt="$tdflt" ;;
6193 *)      dflt="$sitearch" ;;
6194 esac
6195 $cat <<EOM
6196
6197 The installation process will also create a directory for
6198 architecture-dependent site-specific extensions and modules.
6199
6200 EOM
6201 fn=nd~+
6202 rp='Pathname for the site-specific architecture-dependent library files?'
6203 . ./getfile
6204 if $test "X$sitearchexp" != "X$ansexp"; then
6205         installsitearch=''
6206 fi
6207 sitearch="$ans"
6208 sitearchexp="$ansexp"
6209 if $afs; then
6210         $cat <<EOM
6211
6212 Since you are running AFS, I need to distinguish the directory in
6213 which site-specific architecture-dependent library files reside from
6214 the directory in which they are installed (and from which they are
6215 presumably copied to the former directory by occult means).
6216
6217 EOM
6218         case "$installsitearch" in
6219         '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;;
6220         *) dflt="$installsitearch";;
6221         esac
6222         fn=de~
6223         rp='Where will site-specific architecture-dependent files be installed?'
6224         . ./getfile
6225         installsitearch="$ans"
6226 else
6227         installsitearch="$sitearchexp"
6228 fi
6229
6230 cat <<EOM
6231
6232 Previous version of $package used the standard IO mechanisms as defined
6233 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
6234 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
6235 the default.  This abstraction layer can use AT&T's sfio (if you already
6236 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
6237 problems with some extension modules.  Using PerlIO with stdio is safe,
6238 but it is slower than plain stdio and therefore is not the default.
6239
6240 If this doesn't make any sense to you, just accept the default 'n'.
6241 EOM
6242 case "$useperlio" in
6243 $define|true|[yY]*)     dflt='y';;
6244 *) dflt='n';;
6245 esac
6246 rp='Use the experimental PerlIO abstraction layer?'
6247 . ./myread
6248 case "$ans" in
6249 y|Y) 
6250         val="$define"
6251         ;;     
6252 *)      
6253         echo "Ok, doing things the stdio way"
6254         val="$undef"
6255         ;;
6256 esac
6257 set useperlio
6258 eval $setvar 
6259
6260 : Check how to convert floats to strings.
6261 if test "X$d_Gconvert" = X; then
6262         echo " "
6263         echo "Checking for an efficient way to convert floats to strings."
6264         $cat >try.c <<'EOP'
6265 #ifdef TRY_gconvert
6266 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
6267 char *myname = "gconvert";
6268 #endif
6269 #ifdef TRY_gcvt
6270 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
6271 char *myname = "gcvt";
6272 #endif
6273 #ifdef TRY_sprintf
6274 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
6275 char *myname = "sprintf";
6276 #endif
6277
6278 #include <stdio.h>
6279
6280 int
6281 checkit(expect, got)
6282 char *expect;
6283 char *got;
6284 {
6285     if (strcmp(expect, got)) {
6286                 printf("%s oddity:  Expected %s, got %s\n",
6287                         myname, expect, got);
6288                 exit(1);
6289         }
6290 }
6291
6292 int main()
6293
6294         char buf[64]; 
6295         buf[63] = '\0';
6296
6297         /* This must be 1st test on (which?) platform */
6298         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
6299         Gconvert(0.1, 8, 0, buf);
6300         checkit("0.1", buf);
6301
6302         Gconvert(1.0, 8, 0, buf); 
6303         checkit("1", buf);
6304
6305         Gconvert(0.0, 8, 0, buf); 
6306         checkit("0", buf);
6307
6308         Gconvert(-1.0, 8, 0, buf); 
6309         checkit("-1", buf);
6310
6311         /* Some Linux gcvt's give 1.e+5 here. */
6312         Gconvert(100000.0, 8, 0, buf); 
6313         checkit("100000", buf);
6314         
6315         /* Some Linux gcvt's give -1.e+5 here. */
6316         Gconvert(-100000.0, 8, 0, buf); 
6317         checkit("-100000", buf);
6318
6319         exit(0);
6320 }
6321 EOP
6322         case "$d_Gconvert" in
6323         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
6324         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
6325         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
6326         *) xxx_list='gconvert gcvt sprintf' ;;
6327         esac
6328
6329         for xxx_convert in $xxx_list; do
6330                 echo "Trying $xxx_convert"
6331                 $rm -f try try$_o
6332                 set try -DTRY_$xxx_convert
6333                 if eval $compile; then
6334                         echo "$xxx_convert" found. >&4
6335                         if ./try; then
6336                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
6337                                 break;
6338                         else
6339                                 echo "...But $xxx_convert didn't work as I expected."
6340                         fi
6341                 else
6342                         echo "$xxx_convert NOT found." >&4
6343                 fi
6344         done
6345                 
6346         case "$xxx_convert" in
6347         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
6348         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
6349         *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
6350         esac
6351 fi
6352
6353 : Initialize h_fcntl
6354 h_fcntl=false
6355
6356 : Initialize h_sysfile
6357 h_sysfile=false
6358
6359 : access call always available on UNIX
6360 set access d_access
6361 eval $inlibc
6362
6363 : locate the flags for 'access()'
6364 case "$d_access" in
6365 "$define")
6366         echo " "
6367         $cat >access.c <<'EOCP'
6368 #include <sys/types.h>
6369 #ifdef I_FCNTL
6370 #include <fcntl.h>
6371 #endif
6372 #ifdef I_SYS_FILE
6373 #include <sys/file.h>
6374 #endif
6375 #ifdef I_UNISTD
6376 #include <unistd.h>
6377 #endif
6378 int main() {
6379         exit(R_OK);
6380 }
6381 EOCP
6382         : check sys/file.h first, no particular reason here
6383         if $test `./findhdr sys/file.h` && \
6384                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
6385                 h_sysfile=true;
6386                 echo "<sys/file.h> defines the *_OK access constants." >&4
6387         elif $test `./findhdr fcntl.h` && \
6388                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
6389                 h_fcntl=true;
6390                 echo "<fcntl.h> defines the *_OK access constants." >&4
6391         elif $test `./findhdr unistd.h` && \
6392                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
6393                 echo "<unistd.h> defines the *_OK access constants." >&4
6394         else
6395                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
6396         fi
6397         ;;
6398 esac
6399 $rm -f access*
6400
6401 : see if accessx exists
6402 set accessx d_accessx
6403 eval $inlibc
6404
6405 : see if alarm exists
6406 set alarm d_alarm
6407 eval $inlibc
6408
6409 : Look for GNU-cc style attribute checking
6410 echo " "
6411 echo "Checking whether your compiler can handle __attribute__ ..." >&4
6412 $cat >attrib.c <<'EOCP'
6413 #include <stdio.h>
6414 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
6415 EOCP
6416 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
6417         if $contains 'warning' attrib.out >/dev/null 2>&1; then
6418                 echo "Your C compiler doesn't fully support __attribute__."
6419                 val="$undef"
6420         else
6421                 echo "Your C compiler supports __attribute__."
6422                 val="$define"
6423         fi
6424 else
6425         echo "Your C compiler doesn't seem to understand __attribute__ at all."
6426         val="$undef"
6427 fi
6428 set d_attribut
6429 eval $setvar
6430 $rm -f attrib*
6431
6432 : see if bcmp exists
6433 set bcmp d_bcmp
6434 eval $inlibc
6435
6436 : see if bcopy exists
6437 set bcopy d_bcopy
6438 eval $inlibc
6439
6440 : see if this is a unistd.h system
6441 set unistd.h i_unistd
6442 eval $inhdr
6443
6444 : see if getpgrp exists
6445 set getpgrp d_getpgrp
6446 eval $inlibc
6447
6448 case "$d_getpgrp" in
6449 "$define")
6450         echo " "
6451         echo "Checking to see which flavor of getpgrp is in use..."
6452         $cat >set.c <<EOP
6453 #$i_unistd I_UNISTD
6454 #include <sys/types.h>
6455 #ifdef I_UNISTD
6456 #  include <unistd.h>
6457 #endif
6458 int main()
6459 {
6460         if (getuid() == 0) {
6461                 printf("(I see you are running Configure as super-user...)\n");
6462                 setuid(1);
6463         }
6464 #ifdef TRY_BSD_PGRP
6465         if (getpgrp(1) == 0)
6466                 exit(0);
6467 #else
6468         if (getpgrp() > 0)
6469                 exit(0);
6470 #endif
6471         exit(1);
6472 }
6473 EOP
6474         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6475                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
6476                 val="$define"
6477         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6478                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
6479                 val="$undef"
6480         else
6481                 echo "I can't seem to compile and run the test program."
6482                 if ./usg; then
6483                         xxx="a USG one, i.e. you use getpgrp()."
6484                 else
6485                         # SVR4 systems can appear rather BSD-ish.
6486                         case "$i_unistd" in
6487                         $undef)
6488                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
6489                                 val="$define"
6490                                 ;;
6491                         $define)
6492                                 xxx="probably a USG one, i.e. you use getpgrp()."
6493                                 val="$undef"
6494                                 ;;
6495                         esac
6496                 fi
6497                 echo "Assuming your getpgrp is $xxx" >&4
6498         fi
6499         ;;
6500 *) val="$undef";;
6501 esac
6502 set d_bsdgetpgrp
6503 eval $setvar
6504 $rm -f set set.c
6505
6506 : see if setpgrp exists
6507 set setpgrp d_setpgrp
6508 eval $inlibc
6509
6510 case "$d_setpgrp" in
6511 "$define")
6512         echo " "
6513         echo "Checking to see which flavor of setpgrp is in use..."
6514         $cat >set.c <<EOP
6515 #$i_unistd I_UNISTD
6516 #include <sys/types.h>
6517 #ifdef I_UNISTD
6518 #  include <unistd.h>
6519 #endif
6520 int main()
6521 {
6522         if (getuid() == 0) {
6523                 printf("(I see you are running Configure as super-user...)\n");
6524                 setuid(1);
6525         }
6526 #ifdef TRY_BSD_PGRP
6527         if (-1 == setpgrp(1, 1))
6528                 exit(0);
6529 #else
6530         if (setpgrp() != -1)
6531                 exit(0);
6532 #endif
6533         exit(1);
6534 }
6535 EOP
6536         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6537                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
6538                 val="$define"
6539         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6540                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
6541                 val="$undef"
6542         else
6543                 echo "(I can't seem to compile and run the test program.)"
6544                 if ./usg; then
6545                         xxx="a USG one, i.e. you use setpgrp()."
6546                 else
6547                         # SVR4 systems can appear rather BSD-ish.
6548                         case "$i_unistd" in
6549                         $undef)
6550                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
6551                                 val="$define"
6552                                 ;;
6553                         $define)
6554                                 xxx="probably a USG one, i.e. you use setpgrp()."
6555                                 val="$undef"
6556                                 ;;
6557                         esac
6558                 fi
6559                 echo "Assuming your setpgrp is $xxx" >&4
6560         fi
6561         ;;
6562 *) val="$undef";;
6563 esac
6564 set d_bsdsetpgrp
6565 eval $setvar
6566 $rm -f set set.c
6567 : see if bzero exists
6568 set bzero d_bzero
6569 eval $inlibc
6570
6571 : check for lengths of integral types
6572 echo " "
6573 case "$intsize" in
6574 '')
6575         echo "Checking to see how big your integers are..." >&4
6576         $cat >intsize.c <<'EOCP'
6577 #include <stdio.h>
6578 int main()
6579 {
6580         printf("intsize=%d;\n", sizeof(int));
6581         printf("longsize=%d;\n", sizeof(long));
6582         printf("shortsize=%d;\n", sizeof(short));
6583         exit(0);
6584 }
6585 EOCP
6586         set intsize
6587         if eval $compile_ok && ./intsize > /dev/null; then
6588                 eval `./intsize`
6589                 echo "Your integers are $intsize bytes long."
6590                 echo "Your long integers are $longsize bytes long."
6591                 echo "Your short integers are $shortsize bytes long."
6592         else
6593                 $cat >&4 <<EOM
6594 !
6595 Help! I can't compile and run the intsize test program: please enlighten me!
6596 (This is probably a misconfiguration in your system or libraries, and
6597 you really ought to fix it.  Still, I'll try anyway.)
6598 !
6599 EOM
6600                 dflt=4
6601                 rp="What is the size of an integer (in bytes)?"
6602                 . ./myread
6603                 intsize="$ans"
6604                 dflt=$intsize
6605                 rp="What is the size of a long integer (in bytes)?"
6606                 . ./myread
6607                 longsize="$ans"
6608                 dflt=2
6609                 rp="What is the size of a short integer (in bytes)?"
6610                 . ./myread
6611                 shortsize="$ans"
6612         fi
6613         ;;
6614 esac
6615 $rm -f intsize intsize.*
6616
6617 : see if signal is declared as pointer to function returning int or void
6618 echo " "
6619 xxx=`./findhdr signal.h`
6620 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
6621 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
6622         echo "You have int (*signal())() instead of void." >&4
6623         val="$undef"
6624 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
6625         echo "You have void (*signal())()." >&4
6626         val="$define"
6627 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
6628         echo "You have int (*signal())() instead of void." >&4
6629         val="$undef"
6630 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
6631         echo "You have void (*signal())()." >&4
6632         val="$define"
6633 else
6634         case "$d_voidsig" in
6635         '')
6636         echo "I can't determine whether signal handler returns void or int..." >&4
6637                 dflt=void
6638                 rp="What type does your signal handler return?"
6639                 . ./myread
6640                 case "$ans" in
6641                 v*) val="$define";;
6642                 *) val="$undef";;
6643                 esac;;
6644         "$define")
6645                 echo "As you already told me, signal handler returns void." >&4
6646                 val="$define"
6647                 ;;
6648         *)      echo "As you already told me, signal handler returns int." >&4
6649                 val="$undef"
6650                 ;;
6651         esac
6652 fi
6653 set d_voidsig
6654 eval $setvar
6655 case "$d_voidsig" in
6656 "$define") signal_t="void";;
6657 *) signal_t="int";;
6658 esac
6659 $rm -f $$.tmp
6660
6661 : check for ability to cast large floats to 32-bit ints.
6662 echo " "
6663 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
6664 if $test "$intsize" -ge 4; then
6665         xxx=int
6666 else
6667         xxx=long
6668 fi
6669 $cat >try.c <<EOCP
6670 #include <stdio.h>
6671 #include <sys/types.h>
6672 #include <signal.h>
6673 $signal_t blech(s) int s; { exit(3); }
6674 int main()
6675 {
6676         $xxx i32;
6677         double f, g;
6678         int result = 0;
6679         char str[16];
6680         signal(SIGFPE, blech);
6681
6682         /* Don't let compiler optimize the test away.  Store the number 
6683            in a writable string for gcc to pass to sscanf under HP/UX.
6684         */
6685         sprintf(str, "2147483647");
6686         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
6687         g = 10 * f;
6688         i32  = ($xxx) g;
6689
6690         /* x86 processors will probably give 0x8000 0000, which is a
6691        sign change.  We don't want that.  We want to mimic SPARC
6692            behavior here, which is to preserve the sign and give
6693            back 0x7fff ffff.
6694         */
6695         if (i32 != ($xxx) f)
6696                 result |= 1;
6697         exit(result);
6698 }
6699 EOCP
6700 set try
6701 if eval $compile_ok; then
6702         ./try
6703         yyy=$?
6704 else
6705         echo "(I can't seem to compile the test program--assuming it can't)"
6706         yyy=1
6707 fi
6708 case "$yyy" in
6709 0)      val="$define"
6710         echo "Yup, it can."
6711         ;;
6712 *)      val="$undef"
6713         echo "Nope, it can't."
6714         ;;
6715 esac
6716 set d_casti32
6717 eval $setvar
6718 $rm -f try try.*
6719
6720 : check for ability to cast negative floats to unsigned
6721 echo " "
6722 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
6723 $cat >try.c <<EOCP
6724 #include <stdio.h>
6725 #include <sys/types.h>
6726 #include <signal.h>
6727 $signal_t blech(s) int s; { exit(7); }
6728 $signal_t blech_in_list(s) int s; { exit(4); }
6729 unsigned long dummy_long(p) unsigned long p; { return p; }
6730 unsigned int dummy_int(p) unsigned int p; { return p; }
6731 unsigned short dummy_short(p) unsigned short p; { return p; }
6732 int main()
6733 {
6734         double f;
6735         unsigned long along;
6736         unsigned int aint;
6737         unsigned short ashort;
6738         int result = 0;
6739         char str[16];
6740         
6741         /* Frustrate gcc-2.7.2's optimizer which failed this test with
6742            a direct f = -123. assignment.  gcc-2.8.0 reportedly
6743            optimized the whole file away
6744         */
6745         /* Store the number in a writable string for gcc to pass to 
6746            sscanf under HP/UX.
6747         */
6748         sprintf(str, "-123");
6749         sscanf(str, "%lf", &f);  /* f = -123.; */
6750
6751         signal(SIGFPE, blech);
6752         along = (unsigned long)f;
6753         aint = (unsigned int)f;
6754         ashort = (unsigned short)f;
6755         if (along != (unsigned long)-123)
6756                 result |= 1;
6757         if (aint != (unsigned int)-123)
6758                 result |= 1;
6759         if (ashort != (unsigned short)-123)
6760                 result |= 1;
6761         sprintf(str, "1073741824.");
6762         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
6763         f = f + f;
6764         along = 0;
6765         along = (unsigned long)f;
6766         if (along != 0x80000000)
6767                 result |= 2;
6768         f -= 1.;
6769         along = 0;
6770         along = (unsigned long)f;
6771         if (along != 0x7fffffff)
6772                 result |= 1;
6773         f += 2.;
6774         along = 0;
6775         along = (unsigned long)f;
6776         if (along != 0x80000001)
6777                 result |= 2;
6778         if (result)
6779                 exit(result);
6780         signal(SIGFPE, blech_in_list);
6781         sprintf(str, "123.");
6782         sscanf(str, "%lf", &f);  /* f = 123.; */
6783         along = dummy_long((unsigned long)f);
6784         aint = dummy_int((unsigned int)f);
6785         ashort = dummy_short((unsigned short)f);
6786         if (along != (unsigned long)123)
6787                 result |= 4;
6788         if (aint != (unsigned int)123)
6789                 result |= 4;
6790         if (ashort != (unsigned short)123)
6791                 result |= 4;
6792         exit(result);
6793
6794 }
6795 EOCP
6796 set try
6797 if eval $compile_ok; then
6798         ./try
6799         castflags=$?
6800 else
6801         echo "(I can't seem to compile the test program--assuming it can't)"
6802         castflags=7
6803 fi
6804 case "$castflags" in
6805 0)      val="$define"
6806         echo "Yup, it can."
6807         ;;
6808 *)      val="$undef"
6809         echo "Nope, it can't."
6810         ;;
6811 esac
6812 set d_castneg
6813 eval $setvar
6814 $rm -f try.*
6815
6816 : see if vprintf exists
6817 echo " "
6818 if set vprintf val -f d_vprintf; eval $csym; $val; then
6819         echo 'vprintf() found.' >&4
6820         val="$define"
6821         $cat >vprintf.c <<'EOF'
6822 #include <varargs.h>
6823
6824 int main() { xxx("foo"); }
6825
6826 xxx(va_alist)
6827 va_dcl
6828 {
6829         va_list args;
6830         char buf[10];
6831
6832         va_start(args);
6833         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
6834 }
6835 EOF
6836         set vprintf
6837         if eval $compile && ./vprintf; then
6838                 echo "Your vsprintf() returns (int)." >&4
6839                 val2="$undef"
6840         else
6841                 echo "Your vsprintf() returns (char*)." >&4
6842                 val2="$define"
6843         fi
6844 else
6845         echo 'vprintf() NOT found.' >&4
6846                 val="$undef"
6847                 val2="$undef"
6848 fi
6849 set d_vprintf
6850 eval $setvar
6851 val=$val2
6852 set d_charvspr
6853 eval $setvar
6854
6855 : see if chown exists
6856 set chown d_chown
6857 eval $inlibc
6858
6859 : see if chroot exists
6860 set chroot d_chroot
6861 eval $inlibc
6862
6863 : see if chsize exists
6864 set chsize d_chsize
6865 eval $inlibc
6866
6867 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
6868 while $test $# -ge 2; do
6869         case "$1" in
6870         $define) echo "#include <$2>";;
6871         esac ;
6872     shift 2;
6873 done > try.c;
6874 echo "int main () { struct $struct foo; foo.$field = 0; }" >> try.c;
6875 if eval $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
6876         val="$define";
6877 else
6878         val="$undef";
6879 fi;
6880 set $varname;
6881 eval $setvar;
6882 $rm -f try.c try.o'
6883
6884 : see if this is a sys/uio.h system
6885 set sys/uio.h i_sysuio
6886 eval $inhdr
6887
6888 echo "Checking to see if your system supports struct iovec..." >&4
6889 set d_iovec_s iovec iov_base $i_sysuio sys/uio.h
6890 eval $hasfield
6891 case "$d_iovec_s" in
6892 "$define")      echo "Yup, it does." >&4
6893                 ;;
6894 *)              echo "Nope, it doesn't." >&4
6895                 ;;
6896 esac
6897
6898 socketlib=''
6899 sockethdr=''
6900 : see whether socket exists
6901 echo " "
6902 $echo $n "Hmm... $c" >&4
6903 if set socket val -f d_socket; eval $csym; $val; then
6904         echo "Looks like you have Berkeley networking support." >&4
6905         d_socket="$define"
6906         if set setsockopt val -f; eval $csym; $val; then
6907                 d_oldsock="$undef"
6908         else
6909                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
6910                 d_oldsock="$define"
6911         fi
6912 else
6913         if $contains socklib libc.list >/dev/null 2>&1; then
6914                 echo "Looks like you have Berkeley networking support." >&4
6915                 d_socket="$define"
6916                 : we will have to assume that it supports the 4.2 BSD interface
6917                 d_oldsock="$undef"
6918         else
6919                 echo "You don't have Berkeley networking in libc$_a..." >&4
6920                 if test "X$d_socket" = "X$define"; then
6921                    echo "...but you seem to believe that you have sockets." >&4
6922                 else
6923                         for net in net socket
6924                         do
6925                                 if test -f /usr/lib/lib$net$_a; then
6926                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
6927                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
6928                                         if $contains socket libc.list >/dev/null 2>&1; then
6929                                                 d_socket="$define"
6930                                                 socketlib="-l$net"
6931                                                 case "$net" in
6932                                                 net)
6933                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
6934                                                         sockethdr="-I/usr/netinclude"
6935                                                         ;;
6936                                                 esac
6937                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
6938                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
6939                                                         d_oldsock="$undef"
6940                                                 else
6941                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
6942                                                         d_oldsock="$define"
6943                                                 fi
6944                                                 break
6945                                         fi
6946                                 fi
6947                         done
6948                         if test "X$d_socket" != "X$define"; then
6949                            echo "or anywhere else I see." >&4
6950                            d_socket="$undef"
6951                            d_oldsock="$undef"
6952                         fi
6953                 fi
6954         fi
6955 fi
6956
6957 : see if socketpair exists
6958 set socketpair d_sockpair
6959 eval $inlibc
6960
6961
6962 echo " "
6963 echo "Checking the availability of certain socket constants..." >& 4
6964 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
6965         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
6966         $cat >try.c <<EOF
6967 #include <sys/types.h>
6968 #include <sys/socket.h>
6969 int main() {
6970     int i = $ENUM;
6971 }
6972 EOF
6973         val="$undef"
6974         set try; if eval $compile; then
6975                 val="$define"
6976         fi
6977         set d_${enum}; eval $setvar
6978         $rm -f try.c try
6979 done
6980
6981 set sendmsg d_sendmsg
6982 eval $inlibc
6983
6984 set recvmsg d_recvmsg
6985 eval $inlibc
6986
6987 echo " "
6988 $echo $n "Checking to see if your system supports struct msghdr...$c" >&4
6989 set d_msghdr_s msghdr msg_name define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
6990 eval $hasfield
6991 case "$d_msghdr_s" in
6992 "$define")      echo "Yup, it does." >&4
6993                 ;;
6994 *)              echo "Nope, it doesn't." >&4
6995                 ;;
6996 esac
6997
6998 $echo $n "Checking to see if your system supports struct cmsghdr...$c" >&4
6999 set d_cmsghdr_s cmsghdr cmsg_len define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7000 eval $hasfield
7001 case "$d_cmsghdr_s" in
7002 "$define")      echo "Yup, it does." >&4
7003                 ;;
7004 *)              echo "Nope, it doesn't." >&4
7005                 ;;
7006 esac
7007
7008 : check for const keyword
7009 echo " "
7010 echo 'Checking to see if your C compiler knows about "const"...' >&4
7011 $cat >const.c <<'EOCP'
7012 typedef struct spug { int drokk; } spug;
7013 int main()
7014 {
7015         const char *foo;
7016         const spug y;
7017 }
7018 EOCP
7019 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
7020         val="$define"
7021         echo "Yup, it does."
7022 else
7023         val="$undef"
7024         echo "Nope, it doesn't."
7025 fi
7026 set d_const
7027 eval $setvar
7028
7029 : see if crypt exists
7030 echo " "
7031 if set crypt val -f d_crypt; eval $csym; $val; then
7032         echo 'crypt() found.' >&4
7033         val="$define"
7034         cryptlib=''
7035 else
7036         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
7037         if $test -z "$cryptlib"; then
7038                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
7039         else
7040                 cryptlib=-lcrypt
7041         fi
7042         if $test -z "$cryptlib"; then
7043                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
7044         else
7045                 cryptlib=-lcrypt
7046         fi
7047         if $test -z "$cryptlib"; then
7048                 cryptlib=`./loc libcrypt$_a "" $libpth`
7049         else
7050                 cryptlib=-lcrypt
7051         fi
7052         if $test -z "$cryptlib"; then
7053                 echo 'crypt() NOT found.' >&4
7054                 val="$undef"
7055         else
7056                 val="$define"
7057         fi
7058 fi
7059 set d_crypt
7060 eval $setvar
7061
7062 : get csh whereabouts
7063 case "$csh" in
7064 'csh') val="$undef" ;;
7065 *) val="$define" ;;
7066 esac
7067 set d_csh
7068 eval $setvar
7069 : Respect a hint or command line value for full_csh.
7070 case "$full_csh" in
7071 '') full_csh=$csh ;;
7072 esac
7073
7074 : see if cuserid exists
7075 set cuserid d_cuserid
7076 eval $inlibc
7077
7078 : see if this is a limits.h system
7079 set limits.h i_limits
7080 eval $inhdr
7081
7082 : see if this is a float.h system
7083 set float.h i_float
7084 eval $inhdr
7085
7086 : See if number of significant digits in a double precision number is known
7087 echo " "
7088 $cat >dbl_dig.c <<EOM
7089 #$i_limits I_LIMITS
7090 #$i_float I_FLOAT
7091 #ifdef I_LIMITS
7092 #include <limits.h>
7093 #endif
7094 #ifdef I_FLOAT
7095 #include <float.h>
7096 #endif
7097 #ifdef DBL_DIG
7098 printf("Contains DBL_DIG");
7099 #endif
7100 EOM
7101 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
7102 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
7103         echo "DBL_DIG found." >&4
7104         val="$define"
7105 else
7106         echo "DBL_DIG NOT found." >&4
7107         val="$undef"
7108 fi
7109 $rm -f dbl_dig.?
7110 set d_dbl_dig
7111 eval $setvar
7112
7113
7114 if $test X"$use64bits" = X"$define"; then
7115         : see if dbminit64 exists
7116         set dbminit64 d_dbminit64
7117         eval $inlibc
7118
7119         : see if dbmclose64 exists
7120         set dbmclose64 d_dbmclose64
7121         eval $inlibc
7122
7123         : see if fetch64 exists
7124         set fetch64 d_fetch64
7125         eval $inlibc
7126
7127         : see if store64 exists
7128         set store64 d_store64
7129         eval $inlibc
7130
7131         : see if delete64 exists
7132         set delete64 d_delete64
7133         eval $inlibc
7134
7135         : see if firstkey64 exists
7136         set firstkey64 d_firstkey64
7137         eval $inlibc
7138
7139         : see if nextkey64 exists
7140         set nextkey64 d_nextkey64
7141         eval $inlibc
7142 else
7143         val="$undef"
7144         for xxx in d_dbminit64 d_dbmclose64 d_fetch64 d_store64 d_delete64 d_firstkey64 d_nextkey64
7145         do
7146                 set $xxx
7147                 eval $setvar
7148         done
7149 fi
7150
7151 : see if difftime exists
7152 set difftime d_difftime
7153 eval $inlibc
7154
7155 : see if sys/stat.h is available
7156 set sys/stat.h i_sysstat
7157 eval $inhdr
7158
7159 : see if this is a dirent system
7160 echo " "
7161 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
7162         val="$define"
7163         echo "<dirent.h> found." >&4
7164 else
7165         val="$undef"
7166         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
7167                 echo "<sys/dir.h> found." >&4
7168                 echo " "
7169         else
7170                 xinc=`./findhdr sys/ndir.h`
7171         fi
7172         echo "<dirent.h> NOT found." >&4
7173 fi
7174 set i_dirent
7175 eval $setvar
7176
7177 : Look for type of directory structure.
7178 echo " "
7179 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7180
7181 case "$direntrytype" in
7182 ''|' ')
7183         case "$i_dirent" in
7184         $define) guess1='struct dirent' ;;
7185         *) guess1='struct direct'  ;;
7186         esac
7187         ;;
7188 *)      guess1="$direntrytype"
7189         ;;
7190 esac
7191
7192 case "$guess1" in
7193 'struct dirent') guess2='struct direct' ;;
7194 *) guess2='struct dirent' ;;
7195 esac
7196                 
7197 if $contains "$guess1" try.c >/dev/null 2>&1; then
7198         direntrytype="$guess1"
7199         echo "Your directory entries are $direntrytype." >&4
7200 elif $contains "$guess2" try.c >/dev/null 2>&1; then
7201         direntrytype="$guess2"
7202         echo "Your directory entries seem to be $direntrytype." >&4
7203 else
7204         echo "I don't recognize your system's directory entries." >&4
7205         rp="What type is used for directory entries on this system?"
7206         dflt="$guess1"
7207         . ./myread
7208         direntrytype="$ans"
7209 fi
7210 $rm -f try.c
7211
7212
7213 : see if the directory entry stores field length
7214 echo " "
7215 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7216 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
7217         echo "Good, your directory entry keeps length information in d_namlen." >&4
7218         val="$define"
7219 else
7220         echo "Your directory entry does not know about the d_namlen field." >&4
7221         val="$undef"
7222 fi
7223 set d_dirnamlen
7224 eval $setvar
7225 $rm -f try.c
7226
7227
7228 if $test X"$use64bits" = X"$define"; then
7229         : see if fstat64 exists
7230         set fstat64 d_fstat64
7231         eval $inlibc
7232
7233         : see if ftruncate64 exists
7234         set ftruncate64 d_ftruncate64
7235         eval $inlibc
7236
7237         : see if lockf64 exists
7238         set lockf64 d_lockf64
7239         eval $inlibc
7240
7241         : see if lseek64 exists
7242         set lseek64 d_lseek64
7243         eval $inlibc
7244
7245         : see if lstat64 exists
7246         set lstat64 d_lstat64
7247         eval $inlibc
7248
7249         : see if open64 exists
7250         set open64 d_open64
7251         eval $inlibc
7252
7253         : see if opendir64 exists
7254         set opendir64 d_opendir64
7255         eval $inlibc
7256
7257         : see if readdir64 exists
7258         set readdir64 d_readdir64
7259         eval $inlibc
7260
7261         : see if seekdir64 exists
7262         set seekdir64 d_seekdir64
7263         eval $inlibc
7264
7265         : see if stat64 exists
7266         set stat64 d_stat64
7267         eval $inlibc
7268
7269         : see if telldir64 exists
7270         set telldir64 d_telldir64
7271         eval $inlibc
7272
7273         : see if truncate64 exists
7274         set truncate64 d_truncate64
7275         eval $inlibc
7276
7277         : check for off64_t
7278         echo " "
7279         echo $n "Checking to see if your system supports off64_t...$c" >&4
7280         $cat >try.c <<EOCP
7281 #include <sys/types.h>
7282 off64_t foo() { off64_t x; x = 7; return x; }'
7283 EOCP
7284         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7285                 val="$define"
7286                 echo " Yup, it does." >&4
7287         else
7288                 val="$undef"
7289                 echo " Nope, it doesn't." >&4
7290         fi
7291         $rm -f try.*
7292         set d_off64t
7293         eval $setvar
7294
7295         : check for ino64_t
7296         echo " "
7297         echo $n "Checking to see if your system supports ino64_t...$c" >&4
7298         val="$undef"
7299         case "$i_sysstat" in
7300         "$define" )
7301                 $cat >try.c <<EOCP
7302 #include <sys/types.h>
7303 #include <sys/stat.h>
7304 ino64_t foo() { ino64_t x; x = 7; return x; }'
7305 EOCP
7306                 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7307                         val="$define"
7308                 fi
7309                 $rm -f try.*
7310                 ;;
7311         esac
7312         if $test "X$val" = X"$define"; then
7313                 echo " Yup, it does." >&4
7314         else
7315                 echo " Nope, it doesn't." >&4
7316         fi
7317         set d_ino64t
7318         eval $setvar
7319
7320         : check for struct flock64
7321         echo " "
7322         echo "Checking to see if your system supports struct flock64..." >&4
7323         if $h_fcntl; then
7324                 set d_flock64_s flock64 l_len define fcntl.h
7325                 eval $hasfield
7326         else
7327                 val="$undef"
7328                 set d_flock64_s
7329                 eval $setvar
7330         fi
7331         case "$d_flock64_s" in
7332         "$define")      echo "Yup, it does." >&4
7333                         ;;
7334         *)              echo "Nope, it doesn't." >&4
7335                         ;;
7336         esac
7337
7338         : check for struct dirent64
7339         echo " "
7340         echo "Checking to see if your system supports struct dirent64..." >&4
7341         set d_dirent64_s dirent64 d_off $i_dirent dirent.h
7342         eval $hasfield
7343         case "$d_dirent64_s" in
7344         "$define")      echo "Yup, it does." >&4
7345                         ;;
7346         *)              echo "Nope, it doesn't." >&4
7347                         ;;
7348         esac
7349
7350 else
7351         val="$undef"
7352         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
7353         do
7354                 set $xxx
7355                 eval $setvar
7356         done
7357 fi
7358
7359 : see if dlerror exists
7360 xxx_runnm="$runnm"
7361 runnm=false
7362 set dlerror d_dlerror
7363 eval $inlibc
7364 runnm="$xxx_runnm"
7365
7366 : see if dlfcn is available
7367 set dlfcn.h i_dlfcn
7368 eval $inhdr
7369
7370 case "$usedl" in
7371 $define|y|true)
7372         $cat << EOM
7373
7374 On a few systems, the dynamically loaded modules that perl generates and uses
7375 will need a different extension than shared libs. The default will probably
7376 be appropriate.
7377
7378 EOM
7379         case "$dlext" in
7380         '')     dflt="$so" ;;
7381         *)      dflt="$dlext" ;;
7382         esac
7383         rp='What is the extension of dynamically loaded modules'
7384         . ./myread
7385         dlext="$ans"
7386         ;;
7387 *)
7388         dlext="none"
7389         ;;
7390 esac
7391
7392 : Check if dlsym need a leading underscore
7393 echo " "
7394 val="$undef"
7395
7396 case "$dlsrc" in
7397 dl_dlopen.xs)
7398         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
7399         $cat >dyna.c <<'EOM'
7400 fred () { }
7401 EOM
7402
7403 $cat >fred.c<<EOM
7404
7405 #include <stdio.h>
7406 #$i_dlfcn I_DLFCN
7407 #ifdef I_DLFCN
7408 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
7409 #else
7410 #include <sys/types.h>
7411 #include <nlist.h>
7412 #include <link.h>
7413 #endif
7414
7415 extern int fred() ;
7416
7417 int main()
7418 {
7419     void * handle ;
7420     void * symbol ;
7421 #ifndef RTLD_LAZY
7422     int mode = 1 ;
7423 #else
7424     int mode = RTLD_LAZY ;
7425 #endif
7426     handle = dlopen("./dyna.$dlext", mode) ;
7427     if (handle == NULL) {
7428         printf ("1\n") ;
7429         fflush (stdout) ;
7430         exit(0);
7431     }
7432     symbol = dlsym(handle, "fred") ;
7433     if (symbol == NULL) {
7434         /* try putting a leading underscore */
7435         symbol = dlsym(handle, "_fred") ;
7436         if (symbol == NULL) {
7437             printf ("2\n") ;
7438             fflush (stdout) ;
7439             exit(0);
7440         }
7441         printf ("3\n") ;
7442     }
7443     else
7444         printf ("4\n") ;
7445     fflush (stdout) ;
7446     exit(0);
7447 }
7448 EOM
7449         : Call the object file tmp-dyna.o in case dlext=o.
7450         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
7451                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
7452                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
7453                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
7454                 xxx=`./fred`
7455                 case $xxx in
7456                 1)      echo "Test program failed using dlopen." >&4
7457                         echo "Perhaps you should not use dynamic loading." >&4;;
7458                 2)      echo "Test program failed using dlsym." >&4
7459                         echo "Perhaps you should not use dynamic loading." >&4;;
7460                 3)      echo "dlsym needs a leading underscore" >&4
7461                         val="$define" ;;
7462                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
7463                 esac
7464         else
7465                 echo "I can't compile and run the test program." >&4
7466         fi
7467         ;;
7468 esac
7469                 
7470 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
7471
7472 set d_dlsymun
7473 eval $setvar
7474
7475 hasproto='varname=$1; func=$2; shift; shift;
7476 while $test $# -ge 2; do
7477         case "$1" in
7478         $define) echo "#include <$2>";;
7479         esac ;
7480     shift 2;
7481 done > try.c;
7482 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
7483 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
7484         echo "$func() prototype found.";
7485         val="$define";
7486 else
7487         echo "$func() prototype NOT found.";
7488         val="$undef";
7489 fi;
7490 set $varname;
7491 eval $setvar;
7492 $rm -f try.c tryout.c'
7493
7494 : see if prototype for drand48 is available
7495 echo " "
7496 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
7497 eval $hasproto
7498
7499 : see if dup2 exists
7500 set dup2 d_dup2
7501 eval $inlibc
7502
7503 : see if eaccess exists
7504 set eaccess d_eaccess
7505 eval $inlibc
7506
7507 : see if endgrent exists
7508 set endgrent d_endgrent
7509 eval $inlibc
7510
7511 : see if endhostent exists
7512 set endhostent d_endhent
7513 eval $inlibc
7514
7515 : see if endnetent exists
7516 set endnetent d_endnent
7517 eval $inlibc
7518
7519 : see if endprotoent exists
7520 set endprotoent d_endpent
7521 eval $inlibc
7522
7523 : see if endpwent exists
7524 set endpwent d_endpwent
7525 eval $inlibc
7526
7527 : see if endservent exists
7528 set endservent d_endsent
7529 eval $inlibc
7530
7531 : Locate the flags for 'open()'
7532 echo " "
7533 $cat >open3.c <<'EOCP'
7534 #include <sys/types.h>
7535 #ifdef I_FCNTL
7536 #include <fcntl.h>
7537 #endif
7538 #ifdef I_SYS_FILE
7539 #include <sys/file.h>
7540 #endif
7541 int main() {
7542         if(O_RDONLY);
7543 #ifdef O_TRUNC
7544         exit(0);
7545 #else
7546         exit(1);
7547 #endif
7548 }
7549 EOCP
7550 : check sys/file.h first to get FREAD on Sun
7551 if $test `./findhdr sys/file.h` && \
7552                 set open3 -DI_SYS_FILE && eval $compile; then
7553         h_sysfile=true;
7554         echo "<sys/file.h> defines the O_* constants..." >&4
7555         if ./open3; then
7556                 echo "and you have the 3 argument form of open()." >&4
7557                 val="$define"
7558         else
7559                 echo "but not the 3 argument form of open().  Oh, well." >&4
7560                 val="$undef"
7561         fi
7562 elif $test `./findhdr fcntl.h` && \
7563                 set open3 -DI_FCNTL && eval $compile; then
7564         h_fcntl=true;
7565         echo "<fcntl.h> defines the O_* constants..." >&4
7566         if ./open3; then
7567                 echo "and you have the 3 argument form of open()." >&4
7568                 val="$define"
7569         else
7570                 echo "but not the 3 argument form of open().  Oh, well." >&4
7571                 val="$undef"
7572         fi
7573 else
7574         val="$undef"
7575         echo "I can't find the O_* constant definitions!  You got problems." >&4
7576 fi
7577 set d_open3
7578 eval $setvar
7579 $rm -f open3*
7580
7581 : check for non-blocking I/O stuff
7582 case "$h_sysfile" in
7583 true) echo "#include <sys/file.h>" > head.c;;
7584 *)
7585         case "$h_fcntl" in
7586         true) echo "#include <fcntl.h>" > head.c;;
7587         *) echo "#include <sys/fcntl.h>" > head.c;;
7588         esac
7589         ;;
7590 esac
7591 echo " "
7592 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
7593 case "$o_nonblock" in
7594 '')
7595         $cat head.c > try.c
7596         $cat >>try.c <<'EOCP'
7597 int main() {
7598 #ifdef O_NONBLOCK
7599         printf("O_NONBLOCK\n");
7600         exit(0);
7601 #endif
7602 #ifdef O_NDELAY
7603         printf("O_NDELAY\n");
7604         exit(0);
7605 #endif
7606 #ifdef FNDELAY
7607         printf("FNDELAY\n");
7608         exit(0);
7609 #endif
7610         exit(0);
7611 }
7612 EOCP
7613         set try
7614         if eval $compile_ok; then
7615                 o_nonblock=`./try`
7616                 case "$o_nonblock" in
7617                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
7618                 *) echo "Seems like we can use $o_nonblock.";;
7619                 esac
7620         else
7621                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
7622         fi
7623         ;;
7624 *) echo "Using $hint value $o_nonblock.";;
7625 esac
7626 $rm -f try try.* .out core
7627
7628 echo " "
7629 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
7630 case "$eagain" in
7631 '')
7632         $cat head.c > try.c
7633         $cat >>try.c <<EOCP
7634 #include <errno.h>
7635 #include <sys/types.h>
7636 #include <signal.h>
7637 #define MY_O_NONBLOCK $o_nonblock
7638 #ifndef errno  /* XXX need better Configure test */
7639 extern int errno;
7640 #endif
7641 $signal_t blech(x) int x; { exit(3); }
7642 EOCP
7643         $cat >> try.c <<'EOCP'
7644 int main()
7645 {
7646         int pd[2];
7647         int pu[2];
7648         char buf[1];
7649         char string[100];
7650
7651         pipe(pd);       /* Down: child -> parent */
7652         pipe(pu);       /* Up: parent -> child */
7653         if (0 != fork()) {
7654                 int ret;
7655                 close(pd[1]);   /* Parent reads from pd[0] */
7656                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
7657                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
7658                         exit(1);
7659                 signal(SIGALRM, blech);
7660                 alarm(5);
7661                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
7662                         exit(2);
7663                 sprintf(string, "%d\n", ret);
7664                 write(2, string, strlen(string));
7665                 alarm(0);
7666 #ifdef EAGAIN
7667                 if (errno == EAGAIN) {
7668                         printf("EAGAIN\n");
7669                         goto ok;
7670                 }
7671 #endif
7672 #ifdef EWOULDBLOCK
7673                 if (errno == EWOULDBLOCK)
7674                         printf("EWOULDBLOCK\n");
7675 #endif
7676         ok:
7677                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
7678                 sleep(2);                               /* Give it time to close our pipe */
7679                 alarm(5);
7680                 ret = read(pd[0], buf, 1);      /* Should read EOF */
7681                 alarm(0);
7682                 sprintf(string, "%d\n", ret);
7683                 write(3, string, strlen(string));
7684                 exit(0);
7685         }
7686
7687         close(pd[0]);                   /* We write to pd[1] */
7688         close(pu[1]);                   /* We read from pu[0] */
7689         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
7690         close(pd[1]);                   /* Pipe pd is now fully closed! */
7691         exit(0);                                /* Bye bye, thank you for playing! */
7692 }
7693 EOCP
7694         set try
7695         if eval $compile_ok; then
7696                 echo "$startsh" >mtry
7697                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
7698                 chmod +x mtry
7699                 ./mtry >/dev/null 2>&1
7700                 case $? in
7701                 0) eagain=`$cat try.out`;;
7702                 1) echo "Could not perform non-blocking setting!";;
7703                 2) echo "I did a successful read() for something that was not there!";;
7704                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
7705                 *) echo "Something terribly wrong happened during testing.";;
7706                 esac
7707                 rd_nodata=`$cat try.ret`
7708                 echo "A read() system call with no data present returns $rd_nodata."
7709                 case "$rd_nodata" in
7710                 0|-1) ;;
7711                 *)
7712                         echo "(That's peculiar, fixing that to be -1.)"
7713                         rd_nodata=-1
7714                         ;;
7715                 esac
7716                 case "$eagain" in
7717                 '')
7718                         echo "Forcing errno EAGAIN on read() with no data available."
7719                         eagain=EAGAIN
7720                         ;;
7721                 *)
7722                         echo "Your read() sets errno to $eagain when no data is available."
7723                         ;;
7724                 esac
7725                 status=`$cat try.err`
7726                 case "$status" in
7727                 0) echo "And it correctly returns 0 to signal EOF.";;
7728                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
7729                 *) echo "However, your read() returns '$status' on EOF??";;
7730                 esac
7731                 val="$define"
7732                 if test "$status" = "$rd_nodata"; then
7733                         echo "WARNING: you can't distinguish between EOF and no data!"
7734                         val="$undef"
7735                 fi
7736         else
7737                 echo "I can't compile the test program--assuming errno EAGAIN will do."
7738                 eagain=EAGAIN
7739         fi
7740         set d_eofnblk
7741         eval $setvar
7742         ;;
7743 *)
7744         echo "Using $hint value $eagain."
7745         echo "Your read() returns $rd_nodata when no data is present."
7746         case "$d_eofnblk" in
7747         "$define") echo "And you can see EOF because read() returns 0.";;
7748         "$undef") echo "But you can't see EOF status from read() returned value.";;
7749         *)
7750                 echo "(Assuming you can't see EOF status from read anyway.)"
7751                 d_eofnblk=$undef
7752                 ;;
7753         esac
7754         ;;
7755 esac
7756 $rm -f try try.* .out core head.c mtry
7757
7758 : see if fchmod exists
7759 set fchmod d_fchmod
7760 eval $inlibc
7761
7762 : see if fchown exists
7763 set fchown d_fchown
7764 eval $inlibc
7765
7766 : see if this is an fcntl system
7767 set fcntl d_fcntl
7768 eval $inlibc
7769
7770 : see if sys/select.h has to be included
7771 set sys/select.h i_sysselct
7772 eval $inhdr
7773
7774 : see if we should include time.h, sys/time.h, or both
7775 echo " "
7776 if test "X$timeincl" = X; then
7777         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
7778         $echo $n "I'm now running the test program...$c"
7779         $cat >try.c <<'EOCP'
7780 #include <sys/types.h>
7781 #ifdef I_TIME
7782 #include <time.h>
7783 #endif
7784 #ifdef I_SYSTIME
7785 #ifdef SYSTIMEKERNEL
7786 #define KERNEL
7787 #endif
7788 #include <sys/time.h>
7789 #endif
7790 #ifdef I_SYSSELECT
7791 #include <sys/select.h>
7792 #endif
7793 int main()
7794 {
7795         struct tm foo;
7796 #ifdef S_TIMEVAL
7797         struct timeval bar;
7798 #endif
7799 #ifdef S_TIMEZONE
7800         struct timezone tzp;
7801 #endif
7802         if (foo.tm_sec == foo.tm_sec)
7803                 exit(0);
7804 #ifdef S_TIMEVAL
7805         if (bar.tv_sec == bar.tv_sec)
7806                 exit(0);
7807 #endif
7808         exit(1);
7809 }
7810 EOCP
7811         flags=''
7812         for s_timezone in '-DS_TIMEZONE' ''; do
7813         sysselect=''
7814         for s_timeval in '-DS_TIMEVAL' ''; do
7815         for i_systimek in '' '-DSYSTIMEKERNEL'; do
7816         for i_time in '' '-DI_TIME'; do
7817         for i_systime in '-DI_SYSTIME' ''; do
7818                 case "$flags" in
7819                 '') $echo $n ".$c"
7820                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
7821                         if eval $compile; then
7822                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
7823                                 shift
7824                                 flags="$*"
7825                                 echo " "
7826                                 $echo $n "Succeeded with $flags$c"
7827                         fi
7828                         ;;
7829                 esac
7830         done
7831         done
7832         done
7833         done
7834         done
7835         timeincl=''
7836         echo " "
7837         case "$flags" in
7838         *SYSTIMEKERNEL*) i_systimek="$define"
7839                 timeincl=`./findhdr sys/time.h`
7840                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
7841         *) i_systimek="$undef";;
7842         esac
7843         case "$flags" in
7844         *I_TIME*) i_time="$define"
7845                 timeincl=`./findhdr time.h`" $timeincl"
7846                 echo "We'll include <time.h>." >&4;;
7847         *) i_time="$undef";;
7848         esac
7849         case "$flags" in
7850         *I_SYSTIME*) i_systime="$define"
7851                 timeincl=`./findhdr sys/time.h`" $timeincl"
7852                 echo "We'll include <sys/time.h>." >&4;;
7853         *) i_systime="$undef";;
7854         esac
7855         $rm -f try.c try
7856 fi
7857
7858 : check for fd_set items
7859 $cat <<EOM
7860
7861 Checking to see how well your C compiler handles fd_set and friends ...
7862 EOM
7863 $cat >fd_set.c <<EOCP
7864 #$i_systime I_SYS_TIME
7865 #$i_sysselct I_SYS_SELECT
7866 #$d_socket HAS_SOCKET
7867 #include <sys/types.h>
7868 #ifdef HAS_SOCKET
7869 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
7870 #endif
7871 #ifdef I_SYS_TIME
7872 #include <sys/time.h>
7873 #endif
7874 #ifdef I_SYS_SELECT
7875 #include <sys/select.h>
7876 #endif
7877 int main() {
7878         fd_set fds;
7879
7880 #ifdef TRYBITS
7881         if(fds.fds_bits);
7882 #endif
7883
7884 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
7885         exit(0);
7886 #else
7887         exit(1);
7888 #endif
7889 }
7890 EOCP
7891 set fd_set -DTRYBITS
7892 if eval $compile; then
7893         d_fds_bits="$define"
7894         d_fd_set="$define"
7895         echo "Well, your system knows about the normal fd_set typedef..." >&4
7896         if ./fd_set; then
7897                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
7898                 d_fd_macros="$define"
7899         else
7900                 $cat >&4 <<'EOM'
7901 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
7902 EOM
7903                 d_fd_macros="$undef"
7904         fi
7905 else
7906         $cat <<'EOM'
7907 Hmm, your compiler has some difficulty with fd_set.  Checking further...
7908 EOM
7909         set fd_set
7910         if eval $compile; then
7911                 d_fds_bits="$undef"
7912                 d_fd_set="$define"
7913                 echo "Well, your system has some sort of fd_set available..." >&4
7914                 if ./fd_set; then
7915                         echo "and you have the normal fd_set macros." >&4
7916                         d_fd_macros="$define"
7917                 else
7918                         $cat <<'EOM'
7919 but not the normal fd_set macros!  Gross!  More work for me...
7920 EOM
7921                         d_fd_macros="$undef"
7922                 fi
7923         else
7924         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
7925                 d_fd_set="$undef"
7926                 d_fds_bits="$undef"
7927                 d_fd_macros="$undef"
7928         fi
7929 fi
7930 $rm -f fd_set*
7931
7932 : see if fgetpos exists
7933 set fgetpos d_fgetpos
7934 eval $inlibc
7935
7936
7937 if $test X"$use64bits" = X"$define"; then
7938         : see if fgetpos64 exists
7939         set fgetpos64 d_fgetpos64
7940         eval $inlibc
7941
7942         : see if fopen64 exists
7943         set freopen64 d_fopen64
7944         eval $inlibc
7945
7946         : see if freopen64 exists
7947         set freopen64 d_freopen64
7948         eval $inlibc
7949
7950         : see if fseek64 exists
7951         set fseek64 d_fseek64
7952         eval $inlibc
7953
7954         : see if fseeko64 exists
7955         set fseeko64 d_fseeko64
7956         eval $inlibc
7957
7958         : see if fsetpos64 exists
7959         set fsetpos64 d_fsetpos64
7960         eval $inlibc
7961
7962         : see if ftell64 exists
7963         set ftell64 d_ftell64
7964         eval $inlibc
7965
7966         : see if ftello64 exists
7967         set ftello64 d_ftello64
7968         eval $inlibc
7969
7970         : see if tmpfile64 exists
7971         set tmpfile64 d_tmpfile64
7972         eval $inlibc
7973 else
7974         val="$undef"
7975         for xxx in d_fgetpos64 d_fopen64 d_freopen64 d_fseek64 d_fseeko64 d_fsetpos64 d_ftell64 d_ftello64 d_tmpfile64
7976         do
7977                 set $xxx
7978                 eval $setvar
7979         done
7980 fi
7981
7982 : see if flock exists
7983 set flock d_flock
7984 eval $inlibc
7985
7986 : see if fork exists
7987 set fork d_fork
7988 eval $inlibc
7989
7990 : see if pathconf exists
7991 set pathconf d_pathconf
7992 eval $inlibc
7993
7994 : see if fpathconf exists
7995 set fpathconf d_fpathconf
7996 eval $inlibc
7997
7998 : see if fseeko exists
7999 set fseeko d_fseeko
8000 eval $inlibc
8001
8002 : see if fsetpos exists
8003 set fsetpos d_fsetpos
8004 eval $inlibc
8005
8006 : see if this is a sys/param system
8007 set sys/param.h i_sysparam
8008 eval $inhdr
8009
8010 : see if this is a sys/mount.h system
8011 set sys/mount.h i_sysmount
8012 eval $inhdr
8013
8014
8015 : see if statfs exists
8016 set statfs d_statfs
8017 eval $inlibc
8018
8019 : see if fstatfs exists
8020 set fstatfs d_fstatfs
8021 eval $inlibc
8022
8023 : see if statfs knows about mount flags
8024 set d_statfsflags statfs f_flags $i_sysparam sys/param.h $i_sysmount sys/mount.h
8025 eval $hasfield
8026
8027
8028 : see if statvfs exists
8029 set statvfs d_statvfs
8030 eval $inlibc
8031
8032 : see if fstatvfs exists
8033 set fstatvfs d_fstatvfs
8034 eval $inlibc
8035
8036
8037 : see if ftello exists
8038 set ftello d_ftello
8039 eval $inlibc
8040
8041 : see if getgrent exists
8042 set getgrent d_getgrent
8043 eval $inlibc
8044
8045 : see if gethostbyaddr exists
8046 set gethostbyaddr d_gethbyaddr
8047 eval $inlibc
8048
8049 : see if gethostbyname exists
8050 set gethostbyname d_gethbyname
8051 eval $inlibc
8052
8053 : see if gethostent exists
8054 set gethostent d_gethent
8055 eval $inlibc
8056
8057 : see how we will look up host name
8058 echo " "
8059 if false; then
8060         : dummy stub to allow use of elif
8061 elif set gethostname val -f d_gethname; eval $csym; $val; then
8062         echo 'gethostname() found.' >&4
8063         d_gethname="$define"
8064         call=gethostname
8065 elif set uname val -f d_uname; eval $csym; $val; then
8066         if ./xenix; then
8067                 $cat <<'EOM'
8068 uname() was found, but you're running xenix, and older versions of xenix
8069 have a broken uname(). If you don't really know whether your xenix is old
8070 enough to have a broken system call, use the default answer.
8071
8072 EOM
8073                 dflt=y
8074                 case "$d_uname" in
8075                 "$define") dflt=n;;
8076                 esac
8077                 rp='Is your uname() broken?'
8078                 . ./myread
8079                 case "$ans" in
8080                 n*) d_uname="$define"; call=uname;;
8081                 esac
8082         else
8083                 echo 'uname() found.' >&4
8084                 d_uname="$define"
8085                 call=uname
8086         fi
8087 fi
8088 case "$d_gethname" in
8089 '') d_gethname="$undef";;
8090 esac
8091 case "$d_uname" in
8092 '') d_uname="$undef";;
8093 esac
8094 case "$d_uname$d_gethname" in
8095 *define*)
8096         dflt=n
8097         cat <<EOM
8098  
8099 Every now and then someone has a $call() that lies about the hostname
8100 but can't be fixed for political or economic reasons.  If you wish, I can
8101 pretend $call() isn't there and maybe compute hostname at run-time
8102 thanks to the '$phostname' command.
8103
8104 EOM
8105         rp="Shall I ignore $call() from now on?"
8106         . ./myread
8107         case "$ans" in
8108         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
8109         esac;;
8110 esac
8111 case "$phostname" in
8112 '') aphostname='';;
8113 *) case "$aphostname" in
8114         /*) ;;
8115         *) set X $phostname
8116                 shift
8117                 file=$1
8118                 shift
8119                 file=`./loc $file $file $pth`
8120                 aphostname=`echo $file $*`
8121                 ;;
8122         esac
8123         ;;
8124 esac
8125 case "$d_uname$d_gethname" in
8126 *define*) ;;
8127 *)
8128         case "$phostname" in
8129         '')
8130                 echo "There will be no way for $package to get your hostname." >&4;;
8131         *)
8132         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
8133                 ;;
8134         esac;;
8135 esac
8136 case "$d_phostname" in
8137 '') d_phostname="$undef";;
8138 esac
8139
8140 : see if this is a netdb.h system
8141 set netdb.h i_netdb
8142 eval $inhdr
8143
8144 : see if prototypes for various gethostxxx netdb.h functions are available
8145 echo " "
8146 set d_gethostprotos gethostent $i_netdb netdb.h
8147 eval $hasproto
8148
8149 : see if getlogin exists
8150 set getlogin d_getlogin
8151 eval $inlibc
8152
8153 : see if getnetbyaddr exists
8154 set getnetbyaddr d_getnbyaddr
8155 eval $inlibc
8156
8157 : see if getnetbyname exists
8158 set getnetbyname d_getnbyname
8159 eval $inlibc
8160
8161 : see if getnetent exists
8162 set getnetent d_getnent
8163 eval $inlibc
8164
8165 : see if prototypes for various getnetxxx netdb.h functions are available
8166 echo " "
8167 set d_getnetprotos getnetent $i_netdb netdb.h
8168 eval $hasproto
8169
8170
8171 : see if getprotobyname exists
8172 set getprotobyname d_getpbyname
8173 eval $inlibc
8174
8175 : see if getprotobynumber exists
8176 set getprotobynumber d_getpbynumber
8177 eval $inlibc
8178
8179 : see if getprotoent exists
8180 set getprotoent d_getpent
8181 eval $inlibc
8182
8183 : see if getpgid exists
8184 set getpgid d_getpgid
8185 eval $inlibc
8186
8187 : see if getpgrp2 exists
8188 set getpgrp2 d_getpgrp2
8189 eval $inlibc
8190
8191 : see if getppid exists
8192 set getppid d_getppid
8193 eval $inlibc
8194
8195 : see if getpriority exists
8196 set getpriority d_getprior
8197 eval $inlibc
8198
8199 : see if prototypes for various getprotoxxx netdb.h functions are available
8200 echo " "
8201 set d_getprotoprotos getprotoent $i_netdb netdb.h
8202 eval $hasproto
8203
8204 : see if getpwent exists
8205 set getpwent d_getpwent
8206 eval $inlibc
8207
8208
8209 : see if getservbyname exists
8210 set getservbyname d_getsbyname
8211 eval $inlibc
8212
8213 : see if getservbyport exists
8214 set getservbyport d_getsbyport
8215 eval $inlibc
8216
8217 : see if getservent exists
8218 set getservent d_getsent
8219 eval $inlibc
8220
8221 : see if prototypes for various getservxxx netdb.h functions are available
8222 echo " "
8223 set d_getservprotos getservent $i_netdb netdb.h
8224 eval $hasproto
8225
8226 : see if gettimeofday or ftime exists
8227 set gettimeofday d_gettimeod
8228 eval $inlibc
8229 case "$d_gettimeod" in
8230 "$undef")
8231         set ftime d_ftime 
8232         eval $inlibc
8233         ;;
8234 *)
8235         val="$undef"; set d_ftime; eval $setvar
8236         ;;
8237 esac
8238 case "$d_gettimeod$d_ftime" in
8239 "$undef$undef")
8240         echo " "
8241         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
8242         ;;
8243 esac
8244
8245 : see if this is an grp system
8246 set grp.h i_grp
8247 eval $inhdr
8248
8249 case "$i_grp" in
8250 $define)
8251         xxx=`./findhdr grp.h`
8252         $cppstdin $cppflags $cppminus < $xxx >$$.h
8253
8254         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
8255                 val="$define"
8256         else
8257                 val="$undef"
8258         fi
8259         set d_grpasswd
8260         eval $setvar
8261
8262         $rm -f $$.h
8263         ;;
8264 *)
8265         val="$undef";
8266         set d_grpasswd; eval $setvar
8267         ;;
8268 esac
8269
8270 : see if this is a netinet/in.h or sys/in.h system
8271 set netinet/in.h i_niin sys/in.h i_sysin
8272 eval $inhdr
8273
8274 : see if arpa/inet.h has to be included
8275 set arpa/inet.h i_arpainet
8276 eval $inhdr
8277
8278 : see if htonl --and friends-- exists
8279 val=''
8280 set htonl val
8281 eval $inlibc
8282
8283 : Maybe they are macros.
8284 case "$val" in
8285 $undef)
8286         $cat >htonl.c <<EOM
8287 #include <stdio.h>
8288 #include <sys/types.h>
8289 #$i_niin I_NETINET_IN
8290 #$i_sysin I_SYS_IN
8291 #$i_arpainet I_ARPA_INET
8292 #ifdef I_NETINET_IN
8293 #include <netinet/in.h>
8294 #endif
8295 #ifdef I_SYS_IN
8296 #include <sys/in.h>
8297 #endif
8298 #ifdef I_ARPA_INET
8299 #include <arpa/inet.h>
8300 #endif
8301 #ifdef htonl
8302 printf("Defined as a macro.");
8303 #endif
8304 EOM
8305         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
8306         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
8307                 val="$define"
8308                 echo "But it seems to be defined as a macro." >&4
8309         fi
8310         $rm -f htonl.?
8311         ;;
8312 esac
8313 set d_htonl
8314 eval $setvar
8315
8316 : see which of string.h or strings.h is needed
8317 echo " "
8318 strings=`./findhdr string.h`
8319 if $test "$strings" && $test -r "$strings"; then
8320         echo "Using <string.h> instead of <strings.h>." >&4
8321         val="$define"
8322 else
8323         val="$undef"
8324         strings=`./findhdr strings.h`
8325         if $test "$strings" && $test -r "$strings"; then
8326                 echo "Using <strings.h> instead of <string.h>." >&4
8327         else
8328                 echo "No string header found -- You'll surely have problems." >&4
8329         fi
8330 fi
8331 set i_string
8332 eval $setvar
8333 case "$i_string" in
8334 "$undef") strings=`./findhdr strings.h`;;
8335 *)        strings=`./findhdr string.h`;;
8336 esac
8337
8338 : index or strchr
8339 echo " "
8340 if set index val -f; eval $csym; $val; then
8341         if set strchr val -f d_strchr; eval $csym; $val; then
8342                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
8343                         val="$define"
8344                         vali="$undef"
8345                         echo "strchr() found." >&4
8346                 else
8347                         val="$undef"
8348                         vali="$define"
8349                         echo "index() found." >&4
8350                 fi
8351         else
8352                 val="$undef"
8353                 vali="$define"
8354                 echo "index() found." >&4
8355         fi
8356 else
8357         if set strchr val -f d_strchr; eval $csym; $val; then
8358                 val="$define"
8359                 vali="$undef"
8360                 echo "strchr() found." >&4
8361         else
8362                 echo "No index() or strchr() found!" >&4
8363                 val="$undef"
8364                 vali="$undef"
8365         fi
8366 fi
8367 set d_strchr; eval $setvar
8368 val="$vali"
8369 set d_index; eval $setvar
8370
8371 : check whether inet_aton exists
8372 set inet_aton d_inetaton
8373 eval $inlibc
8374
8375 : see if inttypes.h is available
8376 : we want a real compile instead of Inhdr because some systems
8377 : have an inttypes.h which includes non-existent headers
8378 echo " "
8379 $cat >try.c <<EOCP
8380 #include <inttypes.h>
8381 int main() {
8382         static int32_t foo32 = 0x12345678;
8383 }
8384 EOCP
8385 set try
8386 if eval $compile; then
8387         echo "<inttypes.h> found." >&4
8388         val="$define"
8389 else
8390         echo "<inttypes.h> NOT found." >&4
8391         val="$undef"
8392 fi
8393 $rm -f try.c try
8394 set i_inttypes
8395 eval $setvar
8396
8397 : check for int64_t
8398 case "$use64bits" in
8399 "$define" )
8400         echo " "
8401         echo $n "Checking to see if your system supports int64_t...$c" >&4
8402         $cat >try.c <<EOCP
8403 #include <sys/types.h>
8404 #$i_inttypes I_INTTYPES
8405 #ifdef I_INTTYPES
8406 #include <inttypes.h>
8407 #endif
8408 int64_t foo() { int64_t x; x = 7; return x; }
8409 EOCP
8410         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8411                 val="$define"
8412                 echo " Yup, it does." >&4
8413         else
8414                 val="$undef"
8415                 echo " Nope, it doesn't." >&4
8416         fi
8417         $rm -f try.*
8418         ;;
8419 *)      val="$undef"
8420         ;;
8421 esac
8422 set d_int64t
8423 eval $setvar
8424
8425
8426 : Look for isascii
8427 echo " "
8428 $cat >isascii.c <<'EOCP'
8429 #include <stdio.h>
8430 #include <ctype.h>
8431 int main() {
8432         int c = 'A';
8433         if (isascii(c))
8434                 exit(0);
8435         else
8436                 exit(1);
8437 }
8438 EOCP
8439 set isascii
8440 if eval $compile; then
8441         echo "isascii() found." >&4
8442         val="$define"
8443 else
8444         echo "isascii() NOT found." >&4
8445         val="$undef"
8446 fi
8447 set d_isascii
8448 eval $setvar
8449 $rm -f isascii*
8450
8451 : see if killpg exists
8452 set killpg d_killpg
8453 eval $inlibc
8454
8455 : see if lchown exists
8456 echo " "
8457 $cat > try.c <<'EOCP'
8458 /* System header to define __stub macros and hopefully few prototypes,
8459     which can conflict with char lchown(); below.  */
8460 #include <assert.h>
8461 /* Override any gcc2 internal prototype to avoid an error.  */
8462 /* We use char because int might match the return type of a gcc2
8463    builtin and then its argument prototype would still apply.  */
8464 char lchown();
8465 int main() {
8466     /*  The GNU C library defines this for functions which it implements
8467         to always fail with ENOSYS.  Some functions are actually named
8468         something starting with __ and the normal name is an alias.  */
8469 #if defined (__stub_lchown) || defined (__stub___lchown)
8470 choke me
8471 #else
8472 lchown();
8473 #endif
8474 ; return 0; }
8475 EOCP
8476 set try
8477 if eval $compile; then
8478     $echo "lchown() found." >&4
8479     val="$define"
8480 else
8481     $echo "lchown() NOT found." >&4
8482     val="$undef"
8483 fi
8484 set d_lchown
8485 eval $setvar
8486
8487 : see if link exists
8488 set link d_link
8489 eval $inlibc
8490
8491 : see if localeconv exists
8492 set localeconv d_locconv
8493 eval $inlibc
8494
8495 : see if lockf exists
8496 set lockf d_lockf
8497 eval $inlibc
8498
8499 : check for length of double
8500 echo " "
8501 case "$doublesize" in
8502 '')
8503         $echo $n "Checking to see how big your double precision numbers are...$c" >&4
8504         $cat >try.c <<'EOCP'
8505 #include <stdio.h>
8506 int main()
8507 {
8508         printf("%d\n", sizeof(double));
8509 }
8510 EOCP
8511         set try
8512         if eval $compile_ok; then
8513                 doublesize=`./try`
8514                 $echo " $doublesize bytes." >&4
8515         else
8516                 dflt='8'
8517                 echo "(I can't seem to compile the test program.  Guessing...)"
8518                 rp="What is the size of a double precision number (in bytes)?"
8519                 . ./myread
8520                 doublesize="$ans"
8521         fi
8522         ;;
8523 esac
8524 $rm -f try.c try
8525
8526 : check for long doubles
8527 echo " "
8528 echo $n "Checking to see if your system supports long doubles...$c" >&4
8529 echo 'long double foo() { long double x; x = 7.0; return x; }' > try.c
8530 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8531         val="$define"
8532         echo " Yup, it does." >&4
8533 else
8534         val="$undef"
8535         echo " Nope, it doesn't." >&4
8536 fi
8537 $rm try.*
8538 set d_longdbl
8539 eval $setvar
8540
8541 : check for length of long double
8542 case "${d_longdbl}${longdblsize}" in
8543 $define)
8544         echo " "
8545         $echo $n "Checking to see how big your long doubles are...$c" >&4
8546         $cat >try.c <<'EOCP'
8547 #include <stdio.h>
8548 int main()
8549 {
8550         printf("%d\n", sizeof(long double));
8551 }
8552 EOCP
8553         set try
8554         if eval $compile; then
8555                 longdblsize=`./try`
8556                 $echo " $longdblsize bytes." >&4
8557         else
8558                 dflt='8'
8559                 echo " "
8560                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
8561                 rp="What is the size of a long double (in bytes)?"
8562                 . ./myread
8563                 longdblsize="$ans"
8564         fi
8565         if $test "X$doublesize" = "X$longdblsize"; then
8566                 echo "(That isn't any different from an ordinary double.)"
8567         fi      
8568         ;;
8569 esac
8570 $rm -f try.c try
8571
8572 : check for long long
8573 echo " "
8574 echo $n "Checking to see if your system supports long long...$c" >&4
8575 echo 'long long foo() { long long x; x = 7; return x; }' > try.c
8576 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8577         val="$define"
8578         echo " Yup, it does." >&4
8579 else
8580         val="$undef"
8581         echo " Nope, it doesn't." >&4
8582 fi
8583 $rm try.*
8584 set d_longlong
8585 eval $setvar
8586
8587 : check for length of long long
8588 case "${d_longlong}${longlongsize}" in
8589 $define)
8590         echo " "
8591         $echo $n "Checking to see how big your long longs are...$c" >&4
8592         $cat >try.c <<'EOCP'
8593 #include <stdio.h>
8594 int main()
8595 {
8596         printf("%d\n", sizeof(long long));
8597 }
8598 EOCP
8599         set try
8600         if eval $compile_ok; then
8601                 longlongsize=`./try`
8602                 $echo " $longlongsize bytes." >&4
8603         else
8604                 dflt='8'
8605                 echo " "
8606                 echo "(I can't seem to compile the test program.  Guessing...)"
8607                 rp="What is the size of a long long (in bytes)?"
8608                 . ./myread
8609                 longlongsize="$ans"
8610         fi
8611         if $test "X$longsize" = "X$longlongsize"; then
8612                 echo "(That isn't any different from an ordinary long.)"
8613         fi      
8614         ;;
8615 esac
8616 $rm -f try.c try
8617
8618 : see if lstat exists
8619 set lstat d_lstat
8620 eval $inlibc
8621
8622 : see if madvise exists
8623 set madvise d_madvise
8624 eval $inlibc
8625
8626 : see if mblen exists
8627 set mblen d_mblen
8628 eval $inlibc
8629
8630 : see if mbstowcs exists
8631 set mbstowcs d_mbstowcs
8632 eval $inlibc
8633
8634 : see if mbtowc exists
8635 set mbtowc d_mbtowc
8636 eval $inlibc
8637
8638 : see if memcmp exists
8639 set memcmp d_memcmp
8640 eval $inlibc
8641
8642 : see if memcpy exists
8643 set memcpy d_memcpy
8644 eval $inlibc
8645
8646 : see if memmove exists
8647 set memmove d_memmove
8648 eval $inlibc
8649
8650 : see if memset exists
8651 set memset d_memset
8652 eval $inlibc
8653
8654 : see if mkdir exists
8655 set mkdir d_mkdir
8656 eval $inlibc
8657
8658 : see if mkfifo exists
8659 set mkfifo d_mkfifo
8660 eval $inlibc
8661
8662 : see if mktime exists
8663 set mktime d_mktime
8664 eval $inlibc
8665
8666 : see if this is a sys/mman.h system
8667 set sys/mman.h i_sysmman
8668 eval $inhdr
8669
8670 : see if mmap exists
8671 set mmap d_mmap
8672 eval $inlibc
8673 : see what shmat returns
8674 : default to something harmless
8675 mmaptype='void *'
8676 case "$i_sysmman$d_mmap" in
8677 "$define$define")
8678         $cat >mmap.c <<'END'
8679 #include <sys/mman.h>
8680 void *mmap();
8681 END
8682         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
8683                 mmaptype='void *'
8684         else
8685                 mmaptype='caddr_t'
8686         fi
8687         echo "and it returns ($mmaptype)." >&4
8688         ;;
8689 esac
8690
8691
8692
8693 : see if mprotect exists
8694 set mprotect d_mprotect
8695 eval $inlibc
8696
8697 : see if msgctl exists
8698 set msgctl d_msgctl
8699 eval $inlibc
8700
8701 : see if msgget exists
8702 set msgget d_msgget
8703 eval $inlibc
8704
8705 : see if msgsnd exists
8706 set msgsnd d_msgsnd
8707 eval $inlibc
8708
8709 : see if msgrcv exists
8710 set msgrcv d_msgrcv
8711 eval $inlibc
8712
8713 : see how much of the 'msg*(2)' library is present.
8714 h_msg=true
8715 echo " "
8716 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
8717 *"$undef"*) h_msg=false;;
8718 esac
8719 case "$osname" in
8720 freebsd)
8721     case "`ipcs 2>&1`" in
8722     "SVID messages"*"not configured"*)
8723         echo "Your $osname does not have the msg*(2) configured." >&4
8724         h_msg=false
8725         val="$undef"
8726         set msgctl d_msgctl
8727         eval $setvar
8728         set msgget d_msgget
8729         eval $setvar
8730         set msgsnd d_msgsnd
8731         eval $setvar
8732         set msgrcv d_msgrcv
8733         eval $setvar
8734         ;;
8735     esac
8736     ;;
8737 esac
8738 : we could also check for sys/ipc.h ...
8739 if $h_msg && $test `./findhdr sys/msg.h`; then
8740         echo "You have the full msg*(2) library." >&4
8741         val="$define"
8742 else
8743         echo "You don't have the full msg*(2) library." >&4
8744         val="$undef"
8745 fi
8746 set d_msg
8747 eval $setvar
8748
8749 : see if msync exists
8750 set msync d_msync
8751 eval $inlibc
8752
8753 : see if munmap exists
8754 set munmap d_munmap
8755 eval $inlibc
8756
8757 : see if nice exists
8758 set nice d_nice
8759 eval $inlibc
8760
8761 : how to create joinable pthreads
8762 if test "X$usethreads" = "X$define"; then
8763         echo " "
8764         echo "Checking what constant to use for creating joinable pthreads..." >&4 
8765         $cat >try.c <<'EOCP'
8766 #include <pthread.h>
8767 int main() {
8768     int detachstate = JOINABLE;
8769 }
8770 EOCP
8771         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
8772         if eval $compile; then
8773                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
8774                 val="$undef" # Yes, undef.
8775                 set d_old_pthread_create_joinable
8776                 eval $setvar
8777                 val=""
8778                 set old_pthread_create_joinable
8779                 eval $setvar
8780         else
8781                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
8782                 if eval $compile; then
8783                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
8784                         val="$define"
8785                         set d_old_pthread_create_joinable
8786                         eval $setvar
8787                         val=PTHREAD_CREATE_UNDETACHED
8788                         set old_pthread_create_joinable
8789                         eval $setvar
8790                 else            
8791                         set try -DJOINABLE=__UNDETACHED
8792                         if eval $compile; then
8793                                 echo "You seem to use __UNDETACHED." >&4
8794                                 val="$define"
8795                                 set d_old_pthread_create_joinable
8796                                 eval $setvar
8797                                 val=__UNDETACHED
8798                                 set old_pthread_create_joinable
8799                                 eval $setvar
8800                         else
8801                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
8802                                 val="$define"
8803                                 set d_old_pthread_create_joinable
8804                                 eval $setvar
8805                                 val=0
8806                                 set old_pthread_create_joinable
8807                                 eval $setvar
8808                         fi
8809                 fi
8810         fi
8811         $rm -f try try.*
8812 else
8813     d_old_pthread_create_joinable="$undef"
8814     old_pthread_create_joinable=""
8815 fi
8816
8817 : see if pause exists
8818 set pause d_pause
8819 eval $inlibc
8820
8821 : see if pipe exists
8822 set pipe d_pipe
8823 eval $inlibc
8824
8825 : see if poll exists
8826 set poll d_poll
8827 eval $inlibc
8828
8829
8830 : see whether the various POSIXish _yields exist
8831 $cat >try.c <<EOP
8832 #include <pthread.h>
8833 #include <stdio.h>
8834 int main() {
8835 #ifdef SCHED_YIELD
8836         sched_yield();
8837 #else
8838 #ifdef PTHREAD_YIELD
8839         pthread_yield();
8840 #else
8841 #ifdef PTHREAD_YIELD_NULL
8842         pthread_yield(NULL);
8843 #endif
8844 #endif
8845 #endif
8846 }
8847 EOP
8848 : see if sched_yield exists
8849 set try -DSCHED_YIELD
8850 if eval $compile; then
8851     val="$define"
8852     sched_yield='sched_yield()'
8853 else
8854     val="$undef"
8855 fi
8856 case "$usethreads" in
8857 $define)
8858         case "$val" in
8859         $define) echo 'sched_yield() found.' >&4        ;;
8860         *)       echo 'sched_yield() NOT found.' >&4    ;;
8861         esac
8862 esac
8863 set d_sched_yield
8864 eval $setvar
8865
8866 : see if pthread_yield exists
8867 set try -DPTHREAD_YIELD
8868 if eval $compile; then
8869     val="$define"
8870     case "$sched_yield" in
8871     '') sched_yield='pthread_yield()' ;;
8872     esac
8873 else
8874     set try -DPTHREAD_YIELD_NULL
8875     if eval $compile; then
8876         val="$define"
8877         case "$sched_yield" in
8878         '') sched_yield='pthread_yield(NULL)' ;;
8879         esac
8880     else
8881         val="$undef"
8882     fi
8883 fi
8884 case "$usethreads" in
8885 $define)
8886         case "$val" in
8887         $define) echo 'pthread_yield() found.' >&4      ;;
8888         *)       echo 'pthread_yield() NOT found.' >&4  ;;
8889         esac
8890         ;;
8891 esac
8892 set d_pthread_yield
8893 eval $setvar
8894
8895 case "$sched_yield" in
8896 '') sched_yield=undef ;;
8897 esac
8898
8899 $rm -f try try.*
8900
8901 : see if this is a pwd.h system
8902 set pwd.h i_pwd
8903 eval $inhdr
8904
8905 case "$i_pwd" in
8906 $define)
8907         xxx=`./findhdr pwd.h`
8908         $cppstdin $cppflags $cppminus < $xxx >$$.h
8909
8910         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
8911                 val="$define"
8912         else
8913                 val="$undef"
8914         fi
8915         set d_pwquota
8916         eval $setvar
8917
8918         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
8919                 val="$define"
8920         else
8921                 val="$undef"
8922         fi
8923         set d_pwage
8924         eval $setvar
8925
8926         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
8927                 val="$define"
8928         else
8929                 val="$undef"
8930         fi
8931         set d_pwchange
8932         eval $setvar
8933
8934         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
8935                 val="$define"
8936         else
8937                 val="$undef"
8938         fi
8939         set d_pwclass
8940         eval $setvar
8941
8942         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
8943                 val="$define"
8944         else
8945                 val="$undef"
8946         fi
8947         set d_pwexpire
8948         eval $setvar
8949
8950         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
8951                 val="$define"
8952         else
8953                 val="$undef"
8954         fi
8955         set d_pwcomment
8956         eval $setvar
8957
8958         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
8959                 val="$define"
8960         else
8961                 val="$undef"
8962         fi
8963         set d_pwgecos
8964         eval $setvar
8965
8966         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
8967                 val="$define"
8968         else
8969                 val="$undef"
8970         fi
8971         set d_pwpasswd
8972         eval $setvar
8973
8974         $rm -f $$.h
8975         ;;
8976 *)
8977         val="$undef"; 
8978         set d_pwquota; eval $setvar
8979         set d_pwage; eval $setvar
8980         set d_pwchange; eval $setvar
8981         set d_pwclass; eval $setvar
8982         set d_pwexpire; eval $setvar
8983         set d_pwcomment; eval $setvar
8984         set d_pwgecos; eval $setvar
8985         set d_pwpasswd; eval $setvar
8986         ;;
8987 esac
8988
8989 : see if readdir and friends exist
8990 set readdir d_readdir
8991 eval $inlibc
8992 set seekdir d_seekdir
8993 eval $inlibc
8994 set telldir d_telldir
8995 eval $inlibc
8996 set rewinddir d_rewinddir
8997 eval $inlibc
8998
8999 : see if readlink exists
9000 set readlink d_readlink
9001 eval $inlibc
9002
9003 : see if readv exists
9004 set readv d_readv
9005 eval $inlibc
9006
9007 : see if rename exists
9008 set rename d_rename
9009 eval $inlibc
9010
9011 : see if rmdir exists
9012 set rmdir d_rmdir
9013 eval $inlibc
9014
9015 : see if memory.h is available.
9016 val=''
9017 set memory.h val
9018 eval $inhdr
9019
9020 : See if it conflicts with string.h
9021 case "$val" in
9022 $define)
9023         case "$strings" in
9024         '') ;;
9025         *)
9026                 $cppstdin $cppflags $cppminus < $strings > mem.h
9027                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
9028                         echo " "
9029                         echo "We won't be including <memory.h>."
9030                         val="$undef"
9031                 fi
9032                 $rm -f mem.h
9033                 ;;
9034         esac
9035 esac
9036 set i_memory
9037 eval $setvar
9038
9039 : can bcopy handle overlapping blocks?
9040 val="$undef"
9041 case "$d_bcopy" in
9042 "$define")
9043         echo " "
9044         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
9045         $cat >try.c <<EOCP
9046 #$i_memory I_MEMORY
9047 #$i_stdlib I_STDLIB
9048 #$i_string I_STRING
9049 #$i_unistd I_UNISTD
9050 EOCP
9051         $cat >>try.c <<'EOCP'
9052 #include <stdio.h>
9053 #ifdef I_MEMORY
9054 #  include <memory.h>
9055 #endif
9056 #ifdef I_STDLIB
9057 #  include <stdlib.h>
9058 #endif
9059 #ifdef I_STRING
9060 #  include <string.h>
9061 #else
9062 #  include <strings.h>
9063 #endif
9064 #ifdef I_UNISTD
9065 #  include <unistd.h>  /* Needed for NetBSD */
9066 #endif
9067 int main()
9068 {
9069 char buf[128], abc[128];
9070 char *b;
9071 int len;
9072 int off;
9073 int align;
9074
9075 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
9076
9077 for (align = 7; align >= 0; align--) {
9078         for (len = 36; len; len--) {
9079                 b = buf+align;
9080                 bcopy(abc, b, len);
9081                 for (off = 1; off <= len; off++) {
9082                         bcopy(b, b+off, len);
9083                         bcopy(b+off, b, len);
9084                         if (bcmp(b, abc, len))
9085                                 exit(1);
9086                 }
9087         }
9088 }
9089 exit(0);
9090 }
9091 EOCP
9092         set try
9093         if eval $compile_ok; then
9094                 if ./try 2>/dev/null; then
9095                         echo "Yes, it can."
9096                         val="$define"
9097                 else
9098                         echo "It can't, sorry."
9099                         case "$d_memmove" in
9100                         "$define") echo "But that's Ok since you have memmove()." ;;
9101                         esac
9102                 fi
9103         else
9104                 echo "(I can't compile the test program, so we'll assume not...)"
9105                 case "$d_memmove" in
9106                 "$define") echo "But that's Ok since you have memmove()." ;;
9107                 esac
9108         fi
9109         ;;
9110 esac
9111 $rm -f try.* try core
9112 set d_safebcpy
9113 eval $setvar
9114
9115 : can memcpy handle overlapping blocks?
9116 val="$undef"
9117 case "$d_memcpy" in
9118 "$define")
9119         echo " "
9120         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
9121         $cat >try.c <<EOCP
9122 #$i_memory I_MEMORY
9123 #$i_stdlib I_STDLIB
9124 #$i_string I_STRING
9125 #$i_unistd I_UNISTD
9126 EOCP
9127         $cat >>try.c <<'EOCP'
9128 #include <stdio.h>
9129 #ifdef I_MEMORY
9130 #  include <memory.h>
9131 #endif
9132 #ifdef I_STDLIB
9133 #  include <stdlib.h>
9134 #endif
9135 #ifdef I_STRING
9136 #  include <string.h>
9137 #else
9138 #  include <strings.h>
9139 #endif
9140 #ifdef I_UNISTD
9141 #  include <unistd.h>  /* Needed for NetBSD */
9142 #endif
9143 int main()
9144 {
9145 char buf[128], abc[128];
9146 char *b;
9147 int len;
9148 int off;
9149 int align;
9150
9151 /* Copy "abcde..." string to char abc[] so that gcc doesn't
9152    try to store the string in read-only memory. */
9153 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
9154
9155 for (align = 7; align >= 0; align--) {
9156         for (len = 36; len; len--) {
9157                 b = buf+align;
9158                 memcpy(b, abc, len);
9159                 for (off = 1; off <= len; off++) {
9160                         memcpy(b+off, b, len);
9161                         memcpy(b, b+off, len);
9162                         if (memcmp(b, abc, len))
9163                                 exit(1);
9164                 }
9165         }
9166 }
9167 exit(0);
9168 }
9169 EOCP
9170         set try
9171         if eval $compile_ok; then
9172                 if ./try 2>/dev/null; then
9173                         echo "Yes, it can."
9174                         val="$define"
9175                 else
9176                         echo "It can't, sorry."
9177                         case "$d_memmove" in
9178                         "$define") echo "But that's Ok since you have memmove()." ;;
9179                         esac
9180                 fi
9181         else
9182                 echo "(I can't compile the test program, so we'll assume not...)"
9183                 case "$d_memmove" in
9184                 "$define") echo "But that's Ok since you have memmove()." ;;
9185                 esac
9186         fi
9187         ;;
9188 esac
9189 $rm -f try.* try core
9190 set d_safemcpy
9191 eval $setvar
9192
9193 : can memcmp be trusted to compare relative magnitude?
9194 val="$undef"
9195 case "$d_memcmp" in
9196 "$define")
9197         echo " "
9198         echo "Checking if your memcmp() can compare relative magnitude..." >&4
9199         $cat >try.c <<EOCP
9200 #$i_memory I_MEMORY
9201 #$i_stdlib I_STDLIB
9202 #$i_string I_STRING
9203 #$i_unistd I_UNISTD
9204 EOCP
9205         $cat >>try.c <<'EOCP'
9206 #include <stdio.h>
9207 #ifdef I_MEMORY
9208 #  include <memory.h>
9209 #endif
9210 #ifdef I_STDLIB
9211 #  include <stdlib.h>
9212 #endif
9213 #ifdef I_STRING
9214 #  include <string.h>
9215 #else
9216 #  include <strings.h>
9217 #endif
9218 #ifdef I_UNISTD
9219 #  include <unistd.h>  /* Needed for NetBSD */
9220 #endif
9221 int main()
9222 {
9223 char a = -1;
9224 char b = 0;
9225 if ((a < b) && memcmp(&a, &b, 1) < 0)
9226         exit(1);
9227 exit(0);
9228 }
9229 EOCP
9230         set try
9231         if eval $compile_ok; then
9232                 if ./try 2>/dev/null; then
9233                         echo "Yes, it can."
9234                         val="$define"
9235                 else
9236                         echo "No, it can't (it uses signed chars)."
9237                 fi
9238         else
9239                 echo "(I can't compile the test program, so we'll assume not...)"
9240         fi
9241         ;;
9242 esac
9243 $rm -f try.* try core
9244 set d_sanemcmp
9245 eval $setvar
9246
9247 : see if select exists
9248 set select d_select
9249 eval $inlibc
9250
9251 : see if semctl exists
9252 set semctl d_semctl
9253 eval $inlibc
9254
9255 : see if semget exists
9256 set semget d_semget
9257 eval $inlibc
9258
9259 : see if semop exists
9260 set semop d_semop
9261 eval $inlibc
9262
9263 : see how much of the 'sem*(2)' library is present.
9264 h_sem=true
9265 echo " "
9266 case "$d_semctl$d_semget$d_semop" in
9267 *"$undef"*) h_sem=false;;
9268 esac
9269 case "$osname" in
9270 freebsd)
9271     case "`ipcs 2>&1`" in
9272     "SVID messages"*"not configured"*)
9273         echo "Your $osname does not have the sem*(2) configured." >&4
9274         h_sem=false
9275         val="$undef"
9276         set semctl d_semctl
9277         eval $setvar
9278         set semget d_semget
9279         eval $setvar
9280         set semop d_semop
9281         eval $setvar
9282         ;;
9283     esac
9284     ;;
9285 esac
9286 : we could also check for sys/ipc.h ...
9287 if $h_sem && $test `./findhdr sys/sem.h`; then
9288         echo "You have the full sem*(2) library." >&4
9289         val="$define"
9290 else
9291         echo "You don't have the full sem*(2) library." >&4
9292         val="$undef"
9293 fi
9294 set d_sem
9295 eval $setvar
9296
9297 : see whether sys/sem.h defines union semun
9298 echo " "
9299 $cat > try.c <<'END'
9300 #include <sys/types.h>
9301 #include <sys/ipc.h>
9302 #include <sys/sem.h>
9303 int main () { union semun semun; semun.buf = 0; }
9304 END
9305 set try
9306 if eval $compile; then
9307     echo "You have union semun in <sys/sem.h>." >&4
9308     val="$define"
9309 else
9310     echo "You do not have union semun in <sys/sem.h>." >&4
9311     val="$undef"
9312 fi
9313 $rm -f try try.c try.h
9314 set d_union_semun
9315 eval $setvar
9316
9317 : see how to do semctl IPC_STAT
9318 case "$d_sem" in
9319 $define)
9320     : see whether semctl IPC_STAT can use union semun
9321     echo " "
9322     $cat > try.h <<END
9323 #ifndef S_IRUSR
9324 #   ifdef S_IREAD
9325 #       define S_IRUSR S_IREAD
9326 #       define S_IWUSR S_IWRITE
9327 #       define S_IXUSR S_IEXEC
9328 #   else
9329 #       define S_IRUSR 0400
9330 #       define S_IWUSR 0200
9331 #       define S_IXUSR 0100
9332 #   endif
9333 #   define S_IRGRP (S_IRUSR>>3)
9334 #   define S_IWGRP (S_IWUSR>>3)
9335 #   define S_IXGRP (S_IXUSR>>3)
9336 #   define S_IROTH (S_IRUSR>>6)
9337 #   define S_IWOTH (S_IWUSR>>6)
9338 #   define S_IXOTH (S_IXUSR>>6)
9339 #endif
9340 #ifndef S_IRWXU
9341 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
9342 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
9343 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
9344 #endif
9345 END
9346
9347     $cat > try.c <<END
9348 #include <sys/types.h>
9349 #include <sys/ipc.h>
9350 #include <sys/sem.h>
9351 #include <sys/stat.h>
9352 #include <stdio.h>
9353 #include <errno.h>
9354 #include "try.h"
9355 #ifndef errno
9356 extern int errno;
9357 #endif
9358 #$d_union_semun HAS_UNION_SEMUN
9359 int main() {
9360     union semun
9361 #ifndef HAS_UNION_SEMUN
9362     {
9363         int val;
9364         struct semid_ds *buf;
9365         unsigned short *array;
9366     }
9367 #endif
9368     arg;
9369     int sem, st;
9370
9371 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
9372     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9373     if (sem > -1) {
9374         struct semid_ds argbuf;
9375         arg.buf = &argbuf;
9376 #       ifdef IPC_STAT
9377         st = semctl(sem, 0, IPC_STAT, arg);
9378         if (st == 0)
9379             printf("semun\n");
9380         else
9381 #       endif /* IPC_STAT */
9382             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9383 #       ifdef IPC_RMID
9384         if (semctl(sem, 0, IPC_RMID, arg) != 0)
9385 #       endif /* IPC_RMID */
9386             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9387     } else
9388 #endif /* IPC_PRIVATE && ... */
9389         printf("semget failed: errno = %d\n", errno);
9390   return 0;
9391 }
9392 END
9393     val="$undef"
9394     set try
9395     if eval $compile; then
9396         xxx=`./try`
9397         case "$xxx" in
9398         semun) val="$define" ;;
9399         esac
9400     fi
9401     $rm -f try try.c
9402     set d_semctl_semun
9403     eval $setvar
9404     case "$d_semctl_semun" in
9405     $define)
9406         echo "You can use union semun for semctl IPC_STAT." >&4
9407         also='also'
9408         ;;
9409     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
9410         also=''
9411         ;;
9412     esac
9413
9414     : see whether semctl IPC_STAT can use struct semid_ds pointer
9415     $cat > try.c <<'END'
9416 #include <sys/types.h>
9417 #include <sys/ipc.h>
9418 #include <sys/sem.h>
9419 #include <sys/stat.h>
9420 #include "try.h"
9421 #include <stdio.h>
9422 #include <errno.h>
9423 #ifndef errno
9424 extern int errno;
9425 #endif
9426 int main() {
9427     struct semid_ds arg;
9428     int sem, st;
9429
9430 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
9431     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9432     if (sem > -1) {
9433 #       ifdef IPC_STAT
9434         st = semctl(sem, 0, IPC_STAT, &arg);
9435         if (st == 0)
9436             printf("semid_ds\n");
9437         else
9438 #       endif /* IPC_STAT */
9439             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9440 #       ifdef IPC_RMID
9441         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
9442 #       endif /* IPC_RMID */
9443             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9444     } else
9445 #endif /* IPC_PRIVATE && ... */
9446         printf("semget failed: errno = %d\n", errno);
9447
9448     return 0;
9449 }
9450 END
9451     val="$undef"
9452     set try
9453     if eval $compile; then
9454         xxx=`./try`
9455         case "$xxx" in
9456         semid_ds) val="$define" ;;
9457         esac
9458     fi
9459     $rm -f try try.c
9460     set d_semctl_semid_ds
9461     eval $setvar
9462     case "$d_semctl_semid_ds" in
9463     $define)
9464         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
9465         ;;
9466     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
9467         ;;
9468     esac
9469     $rm -f try.h
9470     ;;
9471 *)  val="$undef"
9472
9473     # We do not have the full sem*(2) library, so assume we can not
9474     # use either.
9475
9476     set d_semctl_semun
9477     eval $setvar
9478
9479     set d_semctl_semid_ds
9480     eval $setvar
9481     ;;
9482 esac
9483
9484 : see if setegid exists
9485 set setegid d_setegid
9486 eval $inlibc
9487
9488 : see if seteuid exists
9489 set seteuid d_seteuid
9490 eval $inlibc
9491
9492 : see if setgrent exists
9493 set setgrent d_setgrent
9494 eval $inlibc
9495
9496 : see if sethostent exists
9497 set sethostent d_sethent
9498 eval $inlibc
9499
9500 : see if setlinebuf exists
9501 set setlinebuf d_setlinebuf
9502 eval $inlibc
9503
9504 : see if setlocale exists
9505 set setlocale d_setlocale
9506 eval $inlibc
9507
9508 : see if setnetent exists
9509 set setnetent d_setnent
9510 eval $inlibc
9511
9512 : see if setprotoent exists
9513 set setprotoent d_setpent
9514 eval $inlibc
9515
9516 : see if setpgid exists
9517 set setpgid d_setpgid
9518 eval $inlibc
9519
9520 : see if setpgrp2 exists
9521 set setpgrp2 d_setpgrp2
9522 eval $inlibc
9523
9524 : see if setpriority exists
9525 set setpriority d_setprior
9526 eval $inlibc
9527
9528 : see if setpwent exists
9529 set setpwent d_setpwent
9530 eval $inlibc
9531
9532 : see if setregid exists
9533 set setregid d_setregid
9534 eval $inlibc
9535 set setresgid d_setresgid
9536 eval $inlibc
9537
9538 : see if setreuid exists
9539 set setreuid d_setreuid
9540 eval $inlibc
9541 set setresuid d_setresuid
9542 eval $inlibc
9543
9544 : see if setrgid exists
9545 set setrgid d_setrgid
9546 eval $inlibc
9547
9548 : see if setruid exists
9549 set setruid d_setruid
9550 eval $inlibc
9551
9552 : see if setservent exists
9553 set setservent d_setsent
9554 eval $inlibc
9555
9556 : see if setsid exists
9557 set setsid d_setsid
9558 eval $inlibc
9559
9560 : see if setvbuf exists
9561 set setvbuf d_setvbuf
9562 eval $inlibc
9563
9564 : see if sfio.h is available
9565 set sfio.h i_sfio
9566 eval $inhdr
9567
9568
9569 : see if sfio library is available
9570 case "$i_sfio" in
9571 $define)
9572         val=''
9573         set sfreserve val
9574         eval $inlibc
9575         ;;
9576 *)
9577         val="$undef"
9578         ;;
9579 esac
9580 : Ok, but do we want to use it.
9581 case "$val" in
9582 $define)
9583         case "$usesfio" in
9584         true|$define|[yY]*) dflt='y';;
9585         *) dflt='n';;
9586         esac
9587         echo "$package can use the sfio library, but it is experimental."
9588         rp="You seem to have sfio available, do you want to try using it?"
9589         . ./myread
9590         case "$ans" in
9591         y|Y) ;;
9592         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
9593                 val="$undef"
9594                 : Remove sfio from list of libraries to use
9595                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
9596                 shift
9597                 libs="$*"
9598                 echo "libs = $libs" >&4
9599                 ;;
9600         esac
9601         ;;
9602 *)      case "$usesfio" in
9603         true|$define|[yY]*)
9604                 echo "Sorry, cannot find sfio on this machine" >&4
9605                 echo "Ignoring your setting of usesfio=$usesfio" >&4
9606                 ;;
9607         esac
9608         ;;
9609 esac
9610 set d_sfio
9611 eval $setvar
9612 case "$d_sfio" in
9613 $define) usesfio='true';;
9614 *) usesfio='false';;
9615 esac
9616
9617 : see if shmctl exists
9618 set shmctl d_shmctl
9619 eval $inlibc
9620
9621 : see if shmget exists
9622 set shmget d_shmget
9623 eval $inlibc
9624
9625 : see if shmat exists
9626 set shmat d_shmat
9627 eval $inlibc
9628 : see what shmat returns
9629 case "$d_shmat" in
9630 "$define")
9631         $cat >shmat.c <<'END'
9632 #include <sys/shm.h>
9633 void *shmat();
9634 END
9635         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
9636                 shmattype='void *'
9637         else
9638                 shmattype='char *'
9639         fi
9640         echo "and it returns ($shmattype)." >&4
9641         : see if a prototype for shmat is available
9642         xxx=`./findhdr sys/shm.h`
9643         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
9644         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
9645                 val="$define"
9646         else
9647                 val="$undef"
9648         fi
9649         $rm -f shmat.[co]
9650         ;;
9651 *)
9652         val="$undef"
9653         ;;
9654 esac
9655 set d_shmatprototype
9656 eval $setvar
9657
9658 : see if shmdt exists
9659 set shmdt d_shmdt
9660 eval $inlibc
9661
9662 : see how much of the 'shm*(2)' library is present.
9663 h_shm=true
9664 echo " "
9665 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
9666 *"$undef"*) h_shm=false;;
9667 esac
9668 case "$osname" in
9669 freebsd)
9670     case "`ipcs 2>&1`" in
9671     "SVID shared memory"*"not configured"*)
9672         echo "Your $osname does not have the shm*(2) configured." >&4
9673         h_shm=false
9674         val="$undef"
9675         set shmctl d_shmctl
9676         evat $setvar
9677         set shmget d_shmget
9678         evat $setvar
9679         set shmat d_shmat
9680         evat $setvar
9681         set shmdt d_shmdt
9682         evat $setvar
9683         ;;
9684     esac
9685     ;;
9686 esac
9687 : we could also check for sys/ipc.h ...
9688 if $h_shm && $test `./findhdr sys/shm.h`; then
9689         echo "You have the full shm*(2) library." >&4
9690         val="$define"
9691 else
9692         echo "You don't have the full shm*(2) library." >&4
9693         val="$undef"
9694 fi
9695 set d_shm
9696 eval $setvar
9697
9698 echo " "
9699 : see if we have sigaction
9700 if set sigaction val -f d_sigaction; eval $csym; $val; then
9701         echo 'sigaction() found.' >&4
9702         $cat > try.c <<'EOP'
9703 #include <stdio.h>
9704 #include <sys/types.h>
9705 #include <signal.h>
9706 int main()
9707 {
9708     struct sigaction act, oact;
9709 }
9710 EOP
9711         set try
9712         if eval $compile_ok; then
9713                 val="$define"
9714         else
9715                 echo "But you don't seem to have a useable struct sigaction." >&4
9716                 val="$undef"
9717         fi
9718 else
9719         echo 'sigaction NOT found.' >&4
9720         val="$undef"
9721 fi
9722 set d_sigaction; eval $setvar
9723 $rm -f try try$_o try.c
9724
9725 : see if sigsetjmp exists
9726 echo " "
9727 case "$d_sigsetjmp" in
9728 '')
9729         $cat >try.c <<'EOP'
9730 #include <setjmp.h>
9731 sigjmp_buf env;
9732 int set = 1;
9733 int main()
9734 {
9735         if (sigsetjmp(env,1))
9736                 exit(set);
9737         set = 0;
9738         siglongjmp(env, 1);
9739         exit(1);
9740 }
9741 EOP
9742         set try
9743         if eval $compile; then
9744                 if ./try >/dev/null 2>&1; then
9745                         echo "POSIX sigsetjmp found." >&4
9746                         val="$define"
9747                 else
9748                         $cat >&4 <<EOM
9749 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
9750 I'll ignore them.
9751 EOM
9752                         val="$undef"
9753                 fi
9754         else
9755                 echo "sigsetjmp not found." >&4
9756                 val="$undef"
9757         fi
9758         ;;
9759 *) val="$d_sigsetjmp"
9760         case "$d_sigsetjmp" in
9761         $define) echo "POSIX sigsetjmp found." >&4;;
9762         $undef) echo "sigsetjmp not found." >&4;;
9763         esac
9764         ;;
9765 esac
9766 set d_sigsetjmp
9767 eval $setvar
9768 $rm -f try.c try
9769
9770 : see if stat knows about block sizes
9771 echo " "
9772 set d_statblks stat st_blocks $i_sysstat sys/stat.h
9773 eval $hasfield
9774
9775 : see if _ptr and _cnt from stdio act std
9776 echo " "
9777 if $contains '_IO_fpos_t' `./findhdr stdio.h` >/dev/null 2>&1 ; then
9778         echo "(Looks like you have stdio.h from Linux.)"
9779         case "$stdio_ptr" in
9780         '') stdio_ptr='((fp)->_IO_read_ptr)'
9781                 ptr_lval=$define
9782                 ;;
9783         *)      ptr_lval=$d_stdio_ptr_lval;;
9784         esac
9785         case "$stdio_cnt" in
9786         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
9787                 cnt_lval=$undef
9788                 ;;
9789         *)      cnt_lval=$d_stdio_cnt_lval;;
9790         esac
9791         case "$stdio_base" in
9792         '') stdio_base='((fp)->_IO_read_base)';;
9793         esac
9794         case "$stdio_bufsiz" in
9795         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
9796         esac
9797 else
9798         case "$stdio_ptr" in
9799         '') stdio_ptr='((fp)->_ptr)'
9800                 ptr_lval=$define
9801                 ;;
9802         *)      ptr_lval=$d_stdio_ptr_lval;;
9803         esac
9804         case "$stdio_cnt" in
9805         '') stdio_cnt='((fp)->_cnt)'
9806                 cnt_lval=$define
9807                 ;;
9808         *)      cnt_lval=$d_stdio_cnt_lval;;
9809         esac
9810         case "$stdio_base" in
9811         '') stdio_base='((fp)->_base)';;
9812         esac
9813         case "$stdio_bufsiz" in
9814         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
9815         esac
9816 fi
9817 : test whether _ptr and _cnt really work
9818 echo "Checking how std your stdio is..." >&4
9819 $cat >try.c <<EOP
9820 #include <stdio.h>
9821 #define FILE_ptr(fp)    $stdio_ptr
9822 #define FILE_cnt(fp)    $stdio_cnt
9823 int main() {
9824         FILE *fp = fopen("try.c", "r");
9825         char c = getc(fp);
9826         if (
9827                 18 <= FILE_cnt(fp) &&
9828                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
9829         )
9830                 exit(0);
9831         exit(1);
9832 }
9833 EOP
9834 val="$undef"
9835 set try
9836 if eval $compile; then
9837         if ./try; then
9838                 echo "Your stdio acts pretty std."
9839                 val="$define"
9840         else
9841                 echo "Your stdio isn't very std."
9842         fi
9843 else
9844         echo "Your stdio doesn't appear very std."
9845 fi
9846 $rm -f try.c try
9847 set d_stdstdio
9848 eval $setvar
9849
9850 : Can _ptr be used as an lvalue?
9851 case "$d_stdstdio$ptr_lval" in
9852 $define$define) val=$define ;;
9853 *) val=$undef ;;
9854 esac
9855 set d_stdio_ptr_lval
9856 eval $setvar
9857
9858 : Can _cnt be used as an lvalue?
9859 case "$d_stdstdio$cnt_lval" in
9860 $define$define) val=$define ;;
9861 *) val=$undef ;;
9862 esac
9863 set d_stdio_cnt_lval
9864 eval $setvar
9865
9866 : see if _base is also standard
9867 val="$undef"
9868 case "$d_stdstdio" in
9869 $define)
9870         $cat >try.c <<EOP
9871 #include <stdio.h>
9872 #define FILE_base(fp)   $stdio_base
9873 #define FILE_bufsiz(fp) $stdio_bufsiz
9874 int main() {
9875         FILE *fp = fopen("try.c", "r");
9876         char c = getc(fp);
9877         if (
9878                 19 <= FILE_bufsiz(fp) &&
9879                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
9880         )
9881                 exit(0);
9882         exit(1);
9883 }
9884 EOP
9885         set try
9886         if eval $compile; then
9887                 if ./try; then
9888                         echo "And its _base field acts std."
9889                         val="$define"
9890                 else
9891                         echo "But its _base field isn't std."
9892                 fi
9893         else
9894                 echo "However, it seems to be lacking the _base field."
9895         fi
9896         $rm -f try.c try
9897         ;;
9898 esac
9899 set d_stdiobase
9900 eval $setvar
9901
9902 : see if strcoll exists
9903 set strcoll d_strcoll
9904 eval $inlibc
9905
9906 : check for structure copying
9907 echo " "
9908 echo "Checking to see if your C compiler can copy structs..." >&4
9909 $cat >try.c <<'EOCP'
9910 int main()
9911 {
9912         struct blurfl {
9913                 int dyick;
9914         } foo, bar;
9915
9916         foo = bar;
9917 }
9918 EOCP
9919 if $cc -c try.c >/dev/null 2>&1 ; then
9920         val="$define"
9921         echo "Yup, it can."
9922 else
9923         val="$undef"
9924         echo "Nope, it can't."
9925 fi
9926 set d_strctcpy
9927 eval $setvar
9928 $rm -f try.*
9929
9930 : see if strerror and/or sys_errlist[] exist
9931 echo " "
9932 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
9933     if set strerror val -f d_strerror; eval $csym; $val; then
9934                 echo 'strerror() found.' >&4
9935                 d_strerror="$define"
9936                 d_strerrm='strerror(e)'
9937                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
9938                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
9939                         d_syserrlst="$define"
9940                 else
9941                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
9942                         d_syserrlst="$undef"
9943                 fi
9944     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
9945                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
9946                 echo 'strerror() found in string header.' >&4
9947                 d_strerror="$define"
9948                 d_strerrm='strerror(e)'
9949                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
9950                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
9951                                 d_syserrlst="$define"
9952                 else
9953                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
9954                         d_syserrlst="$undef"
9955                 fi
9956     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
9957                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
9958                 d_strerror="$undef"
9959                 d_syserrlst="$define"
9960                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
9961     else
9962                 echo 'strerror() and sys_errlist[] NOT found.' >&4
9963                 d_strerror="$undef"
9964                 d_syserrlst="$undef"
9965                 d_strerrm='"unknown"'
9966     fi
9967 fi
9968
9969 : see if strtod exists
9970 set strtod d_strtod
9971 eval $inlibc
9972
9973 : see if strtol exists
9974 set strtol d_strtol
9975 eval $inlibc
9976
9977 : see if strtoul exists
9978 set strtoul d_strtoul
9979 eval $inlibc
9980
9981 : see if strxfrm exists
9982 set strxfrm d_strxfrm
9983 eval $inlibc
9984
9985 : see if symlink exists
9986 set symlink d_symlink
9987 eval $inlibc
9988
9989 : see if syscall exists
9990 set syscall d_syscall
9991 eval $inlibc
9992
9993 : see if sysconf exists
9994 set sysconf d_sysconf
9995 eval $inlibc
9996
9997 : see if system exists
9998 set system d_system
9999 eval $inlibc
10000
10001 : see if tcgetpgrp exists
10002 set tcgetpgrp d_tcgetpgrp
10003 eval $inlibc
10004
10005 : see if tcsetpgrp exists
10006 set tcsetpgrp d_tcsetpgrp
10007 eval $inlibc
10008
10009 : see if sys/types.h has to be included
10010 set sys/types.h i_systypes
10011 eval $inhdr
10012
10013 : see if prototype for telldir is available
10014 echo " "
10015 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
10016 eval $hasproto
10017
10018 : define an is-a-typedef? function
10019 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10020 case "$inclist" in
10021 "") inclist="sys/types.h";;
10022 esac;
10023 eval "varval=\$$var";
10024 case "$varval" in
10025 "")
10026         $rm -f temp.c;
10027         for inc in $inclist; do
10028                 echo "#include <$inc>" >>temp.c;
10029         done;
10030         echo "#ifdef $type" >> temp.c;
10031         echo "printf(\"We have $type\");" >> temp.c;
10032         echo "#endif" >> temp.c;
10033         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10034         if $contains $type temp.E >/dev/null 2>&1; then
10035                 eval "$var=\$type";
10036         else
10037                 eval "$var=\$def";
10038         fi;
10039         $rm -f temp.?;;
10040 *) eval "$var=\$varval";;
10041 esac'
10042
10043 : define an is-a-typedef? function that prompts if the type is not available.
10044 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10045 case "$inclist" in
10046 "") inclist="sys/types.h";;
10047 esac;
10048 eval "varval=\$$var";
10049 case "$varval" in
10050 "")
10051         $rm -f temp.c;
10052         for inc in $inclist; do
10053                 echo "#include <$inc>" >>temp.c;
10054         done;
10055         echo "#ifdef $type" >> temp.c;
10056         echo "printf(\"We have $type\");" >> temp.c;
10057         echo "#endif" >> temp.c;
10058         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10059         echo " " ;
10060         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
10061         if $contains $type temp.E >/dev/null 2>&1; then
10062                 echo "$type found." >&4;
10063                 eval "$var=\$type";
10064         else
10065                 echo "$type NOT found." >&4;
10066                 dflt="$def";
10067                 . ./myread ;
10068                 eval "$var=\$ans";
10069         fi;
10070         $rm -f temp.?;;
10071 *) eval "$var=\$varval";;
10072 esac'
10073
10074 : see if this is a sys/times.h system
10075 set sys/times.h i_systimes
10076 eval $inhdr
10077
10078 : see if times exists
10079 echo " "
10080 if set times val -f d_times; eval $csym; $val; then
10081         echo 'times() found.' >&4
10082         d_times="$define"
10083         inc=''
10084         case "$i_systimes" in
10085         "$define") inc='sys/times.h';;
10086         esac
10087         rp="What is the type returned by times() on this system?"
10088         set clock_t clocktype long stdio.h sys/types.h $inc
10089         eval $typedef_ask
10090 else
10091         echo 'times() NOT found, hope that will do.' >&4
10092         d_times="$undef"
10093         clocktype='int'
10094 fi
10095
10096 : see if truncate exists
10097 set truncate d_truncate
10098 eval $inlibc
10099
10100 : see if tzname[] exists
10101 echo " "
10102 if set tzname val -a d_tzname; eval $csym; $val; then
10103         val="$define"
10104         echo 'tzname[] found.' >&4
10105 else
10106         val="$undef"
10107         echo 'tzname[] NOT found.' >&4
10108 fi
10109 set d_tzname
10110 eval $setvar
10111
10112 : see if umask exists
10113 set umask d_umask
10114 eval $inlibc
10115
10116 : backward compatibility for d_hvfork
10117 if test X$d_hvfork != X; then
10118         d_vfork="$d_hvfork"
10119         d_hvfork=''
10120 fi
10121 : see if there is a vfork
10122 val=''
10123 set vfork val
10124 eval $inlibc
10125
10126 : Ok, but do we want to use it. vfork is reportedly unreliable in 
10127 : perl on Solaris 2.x, and probably elsewhere.
10128 case "$val" in
10129 $define)
10130         echo " "
10131         case "$usevfork" in
10132         false) dflt='n';;
10133         *) dflt='y';;
10134         esac
10135         rp="Some systems have problems with vfork().  Do you want to use it?"
10136         . ./myread
10137         case "$ans" in
10138         y|Y) ;;
10139         *)
10140                 echo "Ok, we won't use vfork()."
10141                 val="$undef"
10142                 ;;
10143         esac
10144         ;;
10145 esac
10146 set d_vfork
10147 eval $setvar
10148 case "$d_vfork" in
10149 $define) usevfork='true';;
10150 *) usevfork='false';;
10151 esac
10152
10153 : see if this is an sysdir system
10154 set sys/dir.h i_sysdir
10155 eval $inhdr
10156
10157 : see if this is an sysndir system
10158 set sys/ndir.h i_sysndir
10159 eval $inhdr
10160
10161 : see if closedir exists
10162 set closedir d_closedir
10163 eval $inlibc
10164
10165 case "$d_closedir" in
10166 "$define")
10167         echo " "
10168         echo "Checking whether closedir() returns a status..." >&4
10169         cat > closedir.c <<EOM
10170 #$i_dirent I_DIRENT             /**/
10171 #$i_sysdir I_SYS_DIR            /**/
10172 #$i_sysndir I_SYS_NDIR          /**/
10173 #$i_systypes I_SYS_TYPES        /**/
10174
10175 #if defined(I_SYS_TYPES)
10176 #include <sys/types.h>
10177 #endif
10178 #if defined(I_DIRENT)
10179 #include <dirent.h>
10180 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
10181 #include <sys/dir.h>
10182 #endif
10183 #else
10184 #ifdef I_SYS_NDIR
10185 #include <sys/ndir.h>
10186 #else
10187 #ifdef I_SYS_DIR
10188 #ifdef hp9000s500
10189 #include <ndir.h>       /* may be wrong in the future */
10190 #else
10191 #include <sys/dir.h>
10192 #endif
10193 #endif
10194 #endif
10195 #endif 
10196 int main() { return closedir(opendir(".")); }
10197 EOM
10198         set closedir
10199         if eval $compile_ok; then
10200                 if ./closedir > /dev/null 2>&1 ; then
10201                         echo "Yes, it does."
10202                         val="$undef"
10203                 else
10204                         echo "No, it doesn't."
10205                         val="$define"
10206                 fi
10207         else
10208                 echo "(I can't seem to compile the test program--assuming it doesn't)"
10209                 val="$define"
10210         fi
10211         ;;
10212 *)
10213         val="$undef";
10214         ;;
10215 esac
10216 set d_void_closedir
10217 eval $setvar
10218 $rm -f closedir*
10219 : check for volatile keyword
10220 echo " "
10221 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10222 $cat >try.c <<'EOCP'
10223 int main()
10224 {
10225         typedef struct _goo_struct goo_struct;
10226         goo_struct * volatile goo = ((goo_struct *)0);
10227         struct _goo_struct {
10228                 long long_int;
10229                 int reg_int;
10230                 char char_var;
10231         };
10232         typedef unsigned short foo_t;
10233         char *volatile foo;
10234         volatile int bar;
10235         volatile foo_t blech;
10236         foo = foo;
10237 }
10238 EOCP
10239 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10240         val="$define"
10241         echo "Yup, it does."
10242 else
10243         val="$undef"
10244         echo "Nope, it doesn't."
10245 fi
10246 set d_volatile
10247 eval $setvar
10248 $rm -f try.*
10249
10250 : see if there is a wait4
10251 set wait4 d_wait4
10252 eval $inlibc
10253
10254 : see if waitpid exists
10255 set waitpid d_waitpid
10256 eval $inlibc
10257
10258 : see if wcstombs exists
10259 set wcstombs d_wcstombs
10260 eval $inlibc
10261
10262 : see if wctomb exists
10263 set wctomb d_wctomb
10264 eval $inlibc
10265
10266 : see if writev exists
10267 set writev d_writev
10268 eval $inlibc
10269
10270 : preserve RCS keywords in files with variable substitution, grrr
10271 Date='$Date'
10272 Id='$Id'
10273 Log='$Log'
10274 RCSfile='$RCSfile'
10275 Revision='$Revision'
10276
10277 : check for alignment requirements
10278 echo " "
10279 case "$alignbytes" in
10280 '') echo "Checking alignment constraints..." >&4
10281         $cat >try.c <<'EOCP'
10282 struct foobar {
10283         char foo;
10284         double bar;
10285 } try;
10286 int main()
10287 {
10288         printf("%d\n", (char *)&try.bar - (char *)&try.foo);
10289 }
10290 EOCP
10291         set try
10292         if eval $compile_ok; then
10293                 dflt=`./try`
10294         else
10295                 dflt='8'
10296                 echo "(I can't seem to compile the test program...)"
10297         fi
10298         ;;
10299 *) dflt="$alignbytes"
10300         ;;
10301 esac
10302 rp="Doubles must be aligned on a how-many-byte boundary?"
10303 . ./myread
10304 alignbytes="$ans"
10305 $rm -f try.c try
10306
10307 : check for ordering of bytes in a long
10308 case "$byteorder" in
10309 '')
10310         $cat <<'EOM'
10311   
10312 In the following, larger digits indicate more significance.  A big-endian
10313 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
10314 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
10315 machines may have weird orders like 3412.  A Cray will report 87654321. If
10316 the test program works the default is probably right.
10317 I'm now running the test program...
10318 EOM
10319         $cat >try.c <<'EOCP'
10320 #include <stdio.h>
10321 int main()
10322 {
10323         int i;
10324         union {
10325                 unsigned long l;
10326                 char c[sizeof(long)];
10327         } u;
10328
10329         if (sizeof(long) > 4)
10330                 u.l = (0x08070605L << 32) | 0x04030201L;
10331         else
10332                 u.l = 0x04030201L;
10333         for (i = 0; i < sizeof(long); i++)
10334                 printf("%c", u.c[i]+'0');
10335         printf("\n");
10336         exit(0);
10337 }
10338 EOCP
10339         xxx_prompt=y
10340         set try
10341         if eval $compile && ./try > /dev/null; then
10342                 dflt=`./try`
10343                 case "$dflt" in
10344                 [1-4][1-4][1-4][1-4]|12345678|87654321)
10345                         echo "(The test program ran ok.)"
10346                         echo "byteorder=$dflt"
10347                         xxx_prompt=n
10348                         ;;
10349                 ????|????????) echo "(The test program ran ok.)" ;;
10350                 *) echo "(The test program didn't run right for some reason.)" ;;
10351                 esac
10352         else
10353                 dflt='4321'
10354                 cat <<'EOM'
10355 (I can't seem to compile the test program.  Guessing big-endian...)
10356 EOM
10357         fi
10358         case "$xxx_prompt" in
10359         y)
10360                 rp="What is the order of bytes in a long?"
10361                 . ./myread
10362                 byteorder="$ans"
10363                 ;;
10364         *)      byteorder=$dflt
10365                 ;;
10366         esac
10367         ;;
10368 esac
10369 $rm -f try.c try
10370
10371 : how do we catenate cpp tokens here?
10372 echo " "
10373 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
10374 $cat >cpp_stuff.c <<'EOCP'
10375 #define RCAT(a,b)a/**/b
10376 #define ACAT(a,b)a ## b
10377 RCAT(Rei,ser)
10378 ACAT(Cir,cus)
10379 EOCP
10380 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
10381 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
10382         echo "Oh!  Smells like ANSI's been here." >&4
10383         echo "We can catify or stringify, separately or together!"
10384         cpp_stuff=42
10385 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
10386         echo "Ah, yes!  The good old days!" >&4
10387         echo "However, in the good old days we don't know how to stringify and"
10388         echo "catify at the same time."
10389         cpp_stuff=1
10390 else
10391         $cat >&4 <<EOM
10392 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
10393 to have to edit the values of CAT[2-5] in config.h...
10394 EOM
10395         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
10396 fi
10397 $rm -f cpp_stuff.*
10398
10399 : see if this is a db.h system
10400 set db.h i_db
10401 eval $inhdr
10402
10403 case "$i_db" in
10404 $define)
10405         : Check db version.
10406         echo " "
10407         echo "Checking Berkeley DB version ..." >&4
10408         $cat >try.c <<EOCP
10409 #$d_const HASCONST
10410 #ifndef HASCONST
10411 #define const
10412 #endif
10413 #include <sys/types.h>
10414 #include <stdio.h>
10415 #include <db.h>
10416 int main()
10417 {
10418 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
10419     int Major, Minor, Patch ;
10420     unsigned long Version ;
10421     (void)db_version(&Major, &Minor, &Patch) ;
10422     printf("You have Berkeley DB Version 2 or greater\n");
10423
10424     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
10425                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
10426     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
10427                 Major, Minor, Patch) ;
10428
10429     /* check that db.h & libdb are compatible */
10430     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
10431         printf("db.h and libdb are incompatible\n") ;
10432         exit(3);        
10433     }
10434
10435     printf("db.h and libdb are compatible\n") ;
10436
10437     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
10438                 + DB_VERSION_PATCH ;
10439
10440     /* needs to be >= 2.3.4 */
10441     if (Version < 2003004) {
10442     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
10443         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
10444         exit(2);        
10445     }
10446
10447     exit(0);
10448 #else
10449 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
10450     printf("You have Berkeley DB Version 1\n");
10451     exit(0);    /* DB version < 2: the coast is clear. */
10452 #else
10453     exit(1);    /* <db.h> not Berkeley DB? */
10454 #endif
10455 #endif
10456 }
10457 EOCP
10458         set try
10459         if eval $compile && ./try; then
10460                 echo 'Looks OK.' >&4
10461         else
10462                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
10463                 i_db=$undef
10464                 case " $libs " in
10465                 *"-ldb "*)
10466                         : Remove db from list of libraries to use
10467                         echo "Removing unusable -ldb from library list" >&4
10468                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
10469                         shift
10470                         libs="$*"
10471                         echo "libs = $libs" >&4
10472                         ;;
10473                 esac
10474         fi
10475         $rm -f try.*
10476         ;;
10477 esac
10478
10479 case "$i_db" in
10480 define)
10481         : Check the return type needed for hash 
10482         echo " "
10483         echo "Checking return type needed for hash for Berkeley DB ..." >&4
10484         $cat >try.c <<EOCP
10485 #$d_const HASCONST
10486 #ifndef HASCONST
10487 #define const
10488 #endif
10489 #include <sys/types.h>
10490 #include <db.h>
10491
10492 #ifndef DB_VERSION_MAJOR
10493 u_int32_t hash_cb (ptr, size)
10494 const void *ptr;
10495 size_t size;
10496 {
10497 }
10498 HASHINFO info;
10499 int main()
10500 {
10501         info.hash = hash_cb;
10502 }
10503 #endif
10504 EOCP
10505         if $cc $ccflags -c try.c >try.out 2>&1 ; then
10506                 if $contains warning try.out >>/dev/null 2>&1 ; then
10507                         db_hashtype='int'
10508                 else
10509                         db_hashtype='u_int32_t'
10510                 fi
10511         else
10512                 : XXX Maybe we should just give up here.
10513                 db_hashtype=u_int32_t
10514                 $cat try.out >&4
10515                 echo "Help:  I can't seem to compile the db test program." >&4
10516                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
10517         fi
10518         $rm -f try.*
10519         echo "Your version of Berkeley DB uses $db_hashtype for hash."
10520         ;;
10521 *)      db_hashtype=u_int32_t
10522         ;;
10523 esac
10524 case "$i_db" in
10525 define)
10526         : Check the return type needed for prefix 
10527         echo " "
10528         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
10529         cat >try.c <<EOCP
10530 #$d_const HASCONST
10531 #ifndef HASCONST
10532 #define const
10533 #endif
10534 #include <sys/types.h>
10535 #include <db.h>
10536
10537 #ifndef DB_VERSION_MAJOR
10538 size_t prefix_cb (key1, key2)
10539 const DBT *key1;
10540 const DBT *key2;
10541 {
10542 }
10543 BTREEINFO info;
10544 int main()
10545 {
10546         info.prefix = prefix_cb;
10547 }
10548 #endif
10549 EOCP
10550         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
10551                 if $contains warning try.out >>/dev/null 2>&1 ; then
10552                         db_prefixtype='int'
10553                 else
10554                         db_prefixtype='size_t'
10555                 fi
10556         else
10557                 db_prefixtype='size_t'
10558                 : XXX Maybe we should just give up here.
10559                 $cat try.out >&4
10560                 echo "Help:  I can't seem to compile the db test program." >&4
10561                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
10562         fi
10563         $rm -f try.*
10564         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
10565         ;;
10566 *)      db_prefixtype='size_t'
10567         ;;
10568 esac
10569
10570 : check for void type
10571 echo " "
10572 echo "Checking to see how well your C compiler groks the void type..." >&4
10573 case "$voidflags" in
10574 '')
10575         $cat >try.c <<'EOCP'
10576 #if TRY & 1
10577 void sub() {
10578 #else
10579 sub() {
10580 #endif
10581         extern void moo();      /* function returning void */
10582         void (*goo)();          /* ptr to func returning void */
10583 #if TRY & 8
10584         void *hue;              /* generic ptr */
10585 #endif
10586 #if TRY & 2
10587         void (*foo[10])();
10588 #endif
10589
10590 #if TRY & 4
10591         if(goo == moo) {
10592                 exit(0);
10593         }
10594 #endif
10595         exit(0);
10596 }
10597 int main() { sub(); }
10598 EOCP
10599         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
10600                 voidflags=$defvoidused
10601         echo "Good.  It appears to support void to the level $package wants.">&4
10602                 if $contains warning .out >/dev/null 2>&1; then
10603                         echo "However, you might get some warnings that look like this:"
10604                         $cat .out
10605                 fi
10606         else
10607 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
10608                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
10609                         echo "It supports 1..."
10610                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
10611                                 echo "It also supports 2..."
10612                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
10613                                         voidflags=7
10614                                         echo "And it supports 4 but not 8 definitely."
10615                                 else
10616                                         echo "It doesn't support 4..."
10617                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
10618                                                 voidflags=11
10619                                                 echo "But it supports 8."
10620                                         else
10621                                                 voidflags=3
10622                                                 echo "Neither does it support 8."
10623                                         fi
10624                                 fi
10625                         else
10626                                 echo "It does not support 2..."
10627                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
10628                                         voidflags=13
10629                                         echo "But it supports 4 and 8."
10630                                 else
10631                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
10632                                                 voidflags=5
10633                                                 echo "And it supports 4 but has not heard about 8."
10634                                         else
10635                                                 echo "However it supports 8 but not 4."
10636                                         fi
10637                                 fi
10638                         fi
10639                 else
10640                         echo "There is no support at all for void."
10641                         voidflags=0
10642                 fi
10643         fi
10644 esac
10645 case "$voidflags" in
10646 "$defvoidused") ;;
10647 *)      $cat >&4 <<'EOM'
10648   Support flag bits are:
10649     1: basic void declarations.
10650     2: arrays of pointers to functions returning void.
10651     4: operations between pointers to and addresses of void functions.
10652     8: generic void pointers.
10653 EOM
10654         dflt="$voidflags";
10655         rp="Your void support flags add up to what?"
10656         . ./myread
10657         voidflags="$ans"
10658         ;;
10659 esac
10660 $rm -f try.* .out
10661
10662
10663 : How can we generate normalized random numbers ?
10664 echo " "
10665 echo "Looking for a random number function..." >&4
10666 case "$randfunc" in
10667 '')
10668         if set drand48 val -f; eval $csym; $val; then
10669                 dflt="drand48"
10670                 echo "Good, found drand48()." >&4
10671         elif set random val -f; eval $csym; $val; then
10672                 dflt="random"
10673                 echo "OK, found random()." >&4
10674         else
10675                 dflt="rand"
10676                 echo "Yick, looks like I have to use rand()." >&4
10677         fi
10678         echo " "
10679         ;;
10680 *)
10681         dflt="$randfunc"
10682         ;;
10683 esac
10684 cont=true
10685
10686 case "$ccflags" in
10687 *-Dmy_rand=*|*-Dmy_srand=*)
10688         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
10689         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
10690         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
10691         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
10692         ;;
10693 esac
10694
10695 while $test "$cont"; do
10696         rp="Use which function to generate random numbers?"
10697         . ./myread
10698         if $test "$ans" = "$dflt"; then
10699                 : null
10700         else
10701                 randbits=''
10702         fi
10703         randfunc="$ans"
10704         if set $ans val -f; eval $csym; $val; then
10705                 cont=''
10706         else
10707                 dflt=y
10708                 rp="I cannot find function $ans. Use that name anyway?"
10709                 . ./myread
10710                 dflt=rand
10711                 case "$ans" in
10712                         [yY]*) cont='';;
10713                 esac
10714         fi
10715         case "$cont" in
10716         '')
10717                 case "$randfunc" in
10718                 drand48)
10719                         drand01="drand48()"
10720                         seedfunc="srand48"
10721                         randbits=48
10722                         randseedtype=long
10723                         ;;
10724                 rand|random)
10725                         case "$randbits" in
10726                         '')
10727 echo "Checking to see how many bits your $randfunc() function produces..." >&4
10728                                 $cat >try.c <<EOCP
10729 #$i_unistd I_UNISTD
10730 #$i_stdlib I_STDLIB
10731 #include <stdio.h>
10732 #ifdef I_UNISTD
10733 #  include <unistd.h>
10734 #endif
10735 #ifdef I_STDLIB
10736 #  include <stdlib.h>
10737 #endif
10738 int main()
10739 {
10740         register int i;
10741         register unsigned long tmp;
10742         register unsigned long max = 0L;
10743
10744         for (i = 1000; i; i--) {
10745                 tmp = (unsigned long) $randfunc();
10746                 if (tmp > max) max = tmp;
10747         }
10748         for (i = 0; max; i++)
10749                 max /= 2;
10750         printf("%d\n",i);
10751 }
10752 EOCP
10753                                 set try
10754                                 if eval $compile_ok; then
10755                                         dflt=`try`
10756                                 else
10757                                         dflt='?'
10758                                         echo "(I can't seem to compile the test program...)"
10759                                 fi
10760                                 ;;
10761                         *)
10762                                 dflt="$randbits"
10763                                 ;;
10764                         esac
10765                         rp="How many bits does your $randfunc() function produce?"
10766                         . ./myread
10767                         randbits="$ans"
10768                         $rm -f try.c try
10769                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10770                         seedfunc="s$randfunc"
10771                         randseedtype=unsigned
10772                         ;;
10773                 *)
10774                         dflt="31"
10775                         rp="How many bits does your $randfunc() function produce?"
10776                         . ./myread
10777                         randbits="$ans"
10778                         seedfunc="s$randfunc"
10779                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10780                         if set $seedfunc val -f; eval $csym; $val; then
10781                                 echo "(Using $seedfunc() to seed random generator)"
10782                         else
10783                                 echo "(Warning: no $seedfunc() to seed random generator)"
10784                                 seedfunc=rand
10785                         fi
10786                         randseedtype=unsigned
10787                         ;;
10788                 esac
10789                 ;;
10790         esac
10791 done
10792
10793 echo " "
10794 echo "Determining whether or not we are on an EBCDIC system..." >&4
10795 $cat >tebcdic.c <<'EOM'
10796 int main()
10797 {
10798   if ('M'==0xd4) return 0;
10799   return 1;
10800 }
10801 EOM
10802
10803 val=$undef
10804 set tebcdic
10805 if eval $compile_ok; then
10806         if ./tebcdic; then
10807                 echo "You have EBCDIC." >&4
10808                 val="$define"
10809         else
10810                 echo "Nope, no EBCDIC.  Assuming ASCII or some ISO Latin." >&4
10811         fi
10812 else
10813         echo "I'm unable to compile the test program." >&4
10814         echo "I'll assume ASCII or some ISO Latin." >&4
10815 fi
10816 $rm -f tebcdic.c tebcdic
10817 set ebcdic
10818 eval $setvar
10819
10820 : see what type file positions are declared as in the library
10821 rp="What is the type for file position used by fsetpos()?"
10822 set fpos_t fpostype long stdio.h sys/types.h
10823 eval $typedef_ask
10824
10825 : Store the full pathname to the sed program for use in the C program
10826 full_sed=$sed
10827
10828 : see what type gids are declared as in the kernel
10829 echo " "
10830 echo "Looking for the type for group ids returned by getgid()."
10831 set gid_t gidtype xxx stdio.h sys/types.h
10832 eval $typedef
10833 case "$gidtype" in
10834 xxx)
10835         xxx=`./findhdr sys/user.h`
10836         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
10837         case $1 in
10838         unsigned) dflt="$1 $2" ;;
10839         *) dflt="$1" ;;
10840         esac
10841         ;;
10842 *) dflt="$gidtype";;
10843 esac
10844 case "$gidtype" in
10845 gid_t) echo "gid_t found." ;;
10846 *)      rp="What is the type for group ids returned by getgid()?"
10847         . ./myread
10848         gidtype="$ans"
10849         ;;
10850 esac
10851
10852 : see if getgroups exists
10853 set getgroups d_getgrps
10854 eval $inlibc
10855
10856 : see if setgroups exists
10857 set setgroups d_setgrps
10858 eval $inlibc
10859
10860
10861 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
10862 echo " "
10863 case "$d_getgrps$d_setgrps" in
10864 *define*)
10865         case "$groupstype" in
10866         '') dflt="$gidtype" ;;
10867         *)  dflt="$groupstype" ;;
10868         esac
10869         $cat <<EOM
10870 What type of pointer is the second argument to getgroups() and setgroups()?
10871 Usually this is the same as group ids, $gidtype, but not always.
10872
10873 EOM
10874         rp='What type pointer is the second argument to getgroups() and setgroups()?'
10875         . ./myread
10876         groupstype="$ans"
10877         ;;
10878 *)  groupstype="$gidtype";;
10879 esac
10880
10881 : see what type lseek is declared as in the kernel
10882 rp="What is the type used for lseek's offset on this system?"
10883 set off_t lseektype long stdio.h sys/types.h
10884 eval $typedef_ask
10885
10886 echo " "
10887 $echo $n "Checking to see how big your file offsets are...$c" >&4
10888 $cat >try.c <<EOCP
10889 #include <sys/types.h>
10890 #include <stdio.h>
10891 int main()
10892 {
10893         printf("%d\n", sizeof($lseektype));
10894 }
10895 EOCP
10896 set try
10897 if eval $compile_ok; then
10898         lseeksize=`./try`
10899         $echo " $lseeksize bytes." >&4
10900 else
10901         dflt='4'
10902         echo " "
10903         echo "(I can't seem to compile the test program.  Guessing...)"
10904         rp="What is the size of your file offsets (in bytes)?"
10905         . ./myread
10906         lseeksize="$ans"
10907 fi
10908 $rm -f try.c try
10909
10910 echo " "
10911 echo "Checking if your $make program sets \$(MAKE)..." >&4
10912 case "$make_set_make" in
10913 '')
10914         $sed 's/^X //' > testmake.mak << 'EOF'
10915 Xall:
10916 X       @echo 'maketemp="$(MAKE)"'
10917 EOF
10918         case "`$make -f testmake.mak 2>/dev/null`" in
10919         *maketemp=*) make_set_make='#' ;;
10920         *)      make_set_make="MAKE=$make" ;;
10921         esac
10922         $rm -f testmake.mak
10923         ;;
10924 esac
10925 case "$make_set_make" in
10926 '#') echo "Yup, it does.";;
10927 *) echo "Nope, it doesn't.";;
10928 esac
10929
10930 : see what type is used for mode_t
10931 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
10932 set mode_t modetype int stdio.h sys/types.h
10933 eval $typedef_ask
10934
10935 : define a fucntion to check prototypes
10936 $cat > protochk <<EOSH
10937 $startsh
10938 cc="$cc"
10939 optimize="$optimize"
10940 ccflags="$ccflags"
10941 prototype="$prototype"
10942 define="$define"
10943 rm=$rm
10944 EOSH
10945
10946 $cat >> protochk <<'EOSH'
10947
10948 $rm -f try.c
10949 foo="$1"
10950 shift
10951 while test $# -ge 2; do
10952         case "$1" in
10953                 $define) echo "#include <$2>" >> try.c ;;
10954                 literal) echo "$2" >> try.c ;;
10955         esac
10956     shift 2
10957 done
10958 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
10959 cat >> try.c <<'EOCP'
10960 #ifdef CAN_PROTOTYPE
10961 #define _(args) args
10962 #else
10963 #define _(args) ()
10964 #endif
10965 EOCP
10966 echo "$foo" >> try.c
10967 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
10968 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
10969 status=$?
10970 $rm -f try.[co]
10971 exit $status
10972 EOSH
10973 chmod +x protochk
10974 $eunicefix protochk
10975
10976 : see what type is used for size_t
10977 rp="What is the type used for the length parameter for string functions?"
10978 set size_t sizetype 'unsigned int' stdio.h sys/types.h
10979 eval $typedef_ask
10980
10981 : check for type of arguments to gethostbyaddr. 
10982 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
10983         case "$d_gethbyaddr" in
10984         $define)
10985                 $cat <<EOM
10986
10987 Checking to see what type of arguments are accepted by gethostbyaddr().
10988 EOM
10989                 hdrs="$define sys/types.h
10990                         $d_socket sys/socket.h 
10991                         $i_niin netinet/in.h 
10992                         $i_netdb netdb.h
10993                         $i_unistd unistd.h"
10994                 : The first arg can 'char *' or 'void *'
10995                 : The second arg is some of integral type
10996                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
10997                         for yyy in size_t long int; do
10998                                 case "$netdb_host_type" in
10999                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
11000                                         if ./protochk "$try" $hdrs; then
11001                                                 echo "Your system accepts $xxx for the first arg."
11002                                                 echo "...and $yyy for the second arg."
11003                                                 netdb_host_type="$xxx"
11004                                                 netdb_hlen_type="$yyy"
11005                                         fi
11006                                         ;;
11007                                 esac
11008                         done
11009                 done
11010                 : In case none of those worked, prompt the user.
11011                 case "$netdb_host_type" in
11012                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
11013                         dflt='char *'
11014                         . ./myread
11015                         netdb_host_type=$ans
11016                         rp='What is the type for the 2nd argument to gethostbyaddr?'
11017                         dflt="$sizetype"
11018                         . ./myread
11019                         netdb_hlen_type=$ans
11020                         ;;
11021                 esac
11022                 ;;
11023         *)      : no gethostbyaddr, so pick harmless defaults
11024                 netdb_host_type='char *'
11025                 netdb_hlen_type="$sizetype"
11026                 ;;
11027         esac
11028         # Remove the "const" if needed. -- but then we'll have a 
11029         # prototype clash!
11030         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
11031 fi
11032
11033 : check for type of argument to gethostbyname. 
11034 if test "X$netdb_name_type" = X ; then
11035         case "$d_gethbyname" in
11036         $define)
11037                 $cat <<EOM
11038
11039 Checking to see what type of argument is accepted by gethostbyname().
11040 EOM
11041                 hdrs="$define sys/types.h
11042                         $d_socket sys/socket.h 
11043                         $i_niin netinet/in.h 
11044                         $i_netdb netdb.h
11045                         $i_unistd unistd.h"
11046                 for xxx in "const char *" "char *"; do
11047                         case "$netdb_name_type" in
11048                         '')     try="extern struct hostent *gethostbyname($xxx);"
11049                                 if ./protochk "$try" $hdrs; then
11050                                         echo "Your system accepts $xxx."
11051                                         netdb_name_type="$xxx"
11052                                 fi
11053                                 ;;
11054                         esac
11055                 done
11056                 : In case none of those worked, prompt the user.
11057                 case "$netdb_name_type" in
11058                 '')     rp='What is the type for the 1st argument to gethostbyname?'
11059                         dflt='char *'
11060                         . ./myread
11061                         netdb_name_type=$ans
11062                         ;;
11063                 esac
11064                 ;;
11065         *)      : no gethostbyname, so pick harmless default
11066                 netdb_name_type='char *'
11067                 ;;
11068         esac
11069 fi
11070
11071 : check for type of 1st argument to getnetbyaddr. 
11072 if test "X$netdb_net_type" = X ; then
11073         case "$d_getnbyaddr" in
11074         $define)
11075                 $cat <<EOM
11076
11077 Checking to see what type of 1st argument is accepted by getnetbyaddr().
11078 EOM
11079                 hdrs="$define sys/types.h
11080                         $d_socket sys/socket.h 
11081                         $i_niin netinet/in.h 
11082                         $i_netdb netdb.h
11083                         $i_unistd unistd.h"
11084                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
11085                         case "$netdb_net_type" in
11086                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
11087                                 if ./protochk "$try" $hdrs; then
11088                                         echo "Your system accepts $xxx."
11089                                         netdb_net_type="$xxx"
11090                                 fi
11091                                 ;;
11092                         esac
11093                 done
11094                 : In case none of those worked, prompt the user.
11095                 case "$netdb_net_type" in
11096                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
11097                         dflt='long'
11098                         . ./myread
11099                         netdb_net_type=$ans
11100                         ;;
11101                 esac
11102                 ;;
11103         *)      : no getnetbyaddr, so pick harmless default
11104                 netdb_net_type='long'
11105                 ;;
11106         esac
11107 fi
11108 : locate the preferred pager for this system
11109 case "$pager" in
11110 '')
11111         dflt=''
11112         case "$pg" in
11113         /*) dflt=$pg;;
11114         esac
11115         case "$more" in
11116         /*) dflt=$more;;
11117         esac
11118         case "$less" in
11119         /*) dflt=$less;;
11120         esac
11121         case "$dflt" in
11122         '') dflt=/usr/ucb/more;;
11123         esac
11124         ;;
11125 *) dflt="$pager";;
11126 esac
11127 echo " "
11128 fn=f/
11129 rp='What pager is used on your system?'
11130 . ./getfile
11131 pager="$ans"
11132
11133 : see what type pids are declared as in the kernel
11134 rp="What is the type of process ids on this system?"
11135 set pid_t pidtype int stdio.h sys/types.h
11136 eval $typedef_ask
11137
11138 : check for length of pointer
11139 echo " "
11140 case "$ptrsize" in
11141 '')
11142         $echo $n "Checking to see how big your pointers are...$c" >&4
11143         if test "$voidflags" -gt 7; then
11144                 echo '#define VOID_PTR char *' > try.c
11145         else
11146                 echo '#define VOID_PTR void *' > try.c
11147         fi
11148         $cat >>try.c <<'EOCP'
11149 #include <stdio.h>
11150 int main()
11151 {
11152         printf("%d\n", sizeof(VOID_PTR));
11153         exit(0);
11154 }
11155 EOCP
11156         set try
11157         if eval $compile_ok; then
11158                 ptrsize=`./try`
11159                 $echo " $ptrsize bytes." >&4
11160         else
11161                 dflt='4'
11162                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
11163                 rp="What is the size of a pointer (in bytes)?"
11164                 . ./myread
11165                 ptrsize="$ans"
11166         fi
11167         ;;
11168 esac
11169 $rm -f try.c try
11170
11171 : see if ar generates random libraries by itself
11172 echo " "
11173 echo "Checking how to generate random libraries on your machine..." >&4
11174 echo 'int bar1() { return bar2(); }' > bar1.c
11175 echo 'int bar2() { return 2; }' > bar2.c
11176 $cat > foo.c <<'EOP'
11177 int main() { printf("%d\n", bar1()); exit(0); }
11178 EOP
11179 $cc $ccflags -c bar1.c >/dev/null 2>&1
11180 $cc $ccflags -c bar2.c >/dev/null 2>&1
11181 $cc $ccflags -c foo.c >/dev/null 2>&1
11182 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
11183 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11184         ./foobar >/dev/null 2>&1; then
11185         echo "$ar appears to generate random libraries itself."
11186         orderlib=false
11187         ranlib=":"
11188 elif $ar ts bar$_a >/dev/null 2>&1 &&
11189         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11190         ./foobar >/dev/null 2>&1; then
11191                 echo "a table of contents needs to be added with '$ar ts'."
11192                 orderlib=false
11193                 ranlib="$ar ts"
11194 else
11195         case "$ranlib" in
11196         :) ranlib='';;
11197         '')
11198                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
11199                 $test -f $ranlib || ranlib=''
11200                 ;;
11201         esac
11202         if $test -n "$ranlib"; then
11203                 echo "your system has '$ranlib'; we'll use that."
11204                 orderlib=false
11205         else
11206                 echo "your system doesn't seem to support random libraries"
11207                 echo "so we'll use lorder and tsort to order the libraries."
11208                 orderlib=true
11209                 ranlib=":"
11210         fi
11211 fi
11212 $rm -f foo* bar* 
11213
11214 : check for type of arguments to select. 
11215 case "$selecttype" in
11216 '') case "$d_select" in
11217         $define)
11218                 $cat <<EOM
11219 Checking to see what type of arguments are accepted by select().
11220 EOM
11221                 hdrs="$define sys/types.h
11222                         $i_systime sys/time.h 
11223                         $i_sysselct sys/select.h
11224                         $d_socket sys/socket.h"
11225                 : The first arg can be int, unsigned, or size_t
11226                 : The last arg may or may not be 'const'
11227                 val=''
11228                 : void pointer has been seen but using that
11229                 : breaks the selectminbits test
11230                 for xxx in 'fd_set *' 'int *'; do
11231                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
11232                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
11233                                         case "$val" in
11234                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
11235                                                 if ./protochk "$try" $hdrs; then
11236                                                         echo "Your system accepts $xxx."
11237                                                         val="$xxx"
11238                                                 fi
11239                                                 ;;
11240                                         esac
11241                                 done
11242                         done
11243                 done
11244                 case "$val" in
11245                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
11246                         case "$d_fd_set" in
11247                                 $define) dflt="fd_set *" ;;
11248                                 *)              dflt="int *" ;;
11249                         esac
11250                         . ./myread
11251                         val=$ans
11252                         ;;
11253                 esac
11254                 selecttype="$val"
11255                 ;;
11256         *)      : no select, so pick a harmless default
11257                 selecttype='int *'
11258                 ;;
11259         esac
11260         ;;
11261 esac
11262
11263 : check for the select 'width'
11264 case "$selectminbits" in
11265 '') case "$d_select" in
11266         $define)
11267                 $cat <<EOM
11268
11269 Checking to see on how many bits at a time your select() operates...
11270 EOM
11271                 $cat >try.c <<EOCP
11272 #include <sys/types.h>
11273 #$i_time I_TIME
11274 #$i_systime I_SYS_TIME
11275 #$i_systimek I_SYS_TIME_KERNEL
11276 #ifdef I_TIME
11277 #   include <time.h>
11278 #endif
11279 #ifdef I_SYS_TIME
11280 #   ifdef I_SYS_TIME_KERNEL
11281 #       define KERNEL
11282 #   endif
11283 #   include <sys/time.h>
11284 #   ifdef I_SYS_TIME_KERNEL
11285 #       undef KERNEL
11286 #   endif
11287 #endif
11288 #$i_sysselct I_SYS_SELECT
11289 #ifdef I_SYS_SELECT
11290 #include <sys/select.h>
11291 #endif
11292 #include <stdio.h>
11293 $selecttype b;
11294 #define S sizeof(*(b))
11295 #define MINBITS 64
11296 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
11297 #define NBITS  (NBYTES * 8)
11298 int main() {
11299     char s[NBYTES];
11300     struct timeval t;
11301     int i;
11302     FILE* fp;
11303     int fd;
11304
11305     fclose(stdin);
11306     fp = fopen("try.c", "r");
11307     if (fp == 0)
11308       exit(1);
11309     fd = fileno(fp);
11310     if (fd < 0)
11311       exit(2);
11312     b = ($selecttype)s;
11313     for (i = 0; i < NBITS; i++)
11314         FD_SET(i, b);
11315     t.tv_sec  = 0;
11316     t.tv_usec = 0;
11317     select(fd + 1, b, 0, 0, &t);
11318     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
11319     printf("%d\n", i + 1);
11320     return 0;
11321 }
11322 EOCP
11323                 set try
11324                 if eval $compile_ok; then
11325                         selectminbits=`./try`
11326                         case "$selectminbits" in
11327                         '')     cat >&4 <<EOM
11328 Cannot figure out on how many bits at a time your select() operates.
11329 I'll play safe and guess it is 32 bits.
11330 EOM
11331                                 selectminbits=32
11332                                 bits="32 bits"
11333                                 ;;
11334                         1)      bits="1 bit" ;;
11335                         *)      bits="$selectminbits bits" ;;
11336                         esac
11337                         echo "Your select() operates on $bits at a time." >&4
11338                 else
11339                         rp='What is the minimum number of bits your select() operates on?'
11340                         case "$byteorder" in
11341                         1234|12345678)  dflt=32 ;;
11342                         *)              dflt=1  ;;
11343                         esac
11344                         . ./myread
11345                         val=$ans
11346                         selectminbits="$val"
11347                 fi
11348                 $rm -f try.* try
11349                 ;;
11350         *)      : no select, so pick a harmless default
11351                 selectminbits='32'
11352                 ;;
11353         esac
11354         ;;
11355 esac
11356
11357 : Trace out the files included by signal.h, then look for SIGxxx names.
11358 : Remove SIGARRAYSIZE used by HPUX.
11359 : Remove SIGTYP void lines used by OS2.
11360 xxx=`echo '#include <signal.h>' |
11361         $cppstdin $cppminus $cppflags 2>/dev/null |
11362         $grep '^[       ]*#.*include' | 
11363         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
11364 : Check this list of files to be sure we have parsed the cpp output ok.
11365 : This will also avoid potentially non-existent files, such 
11366 : as ../foo/bar.h
11367 xxxfiles=''
11368 for xx in $xxx /dev/null ; do
11369         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
11370 done
11371 : If we have found no files, at least try signal.h
11372 case "$xxxfiles" in
11373 '')     xxxfiles=`./findhdr signal.h` ;;
11374 esac
11375 xxx=`awk '
11376 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $3 !~ /void/ {
11377         print substr($2, 4, 20)
11378 }
11379 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
11380         print substr($3, 4, 20)
11381 }' $xxxfiles`
11382 : Append some common names just in case the awk scan failed.
11383 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
11384 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
11385 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
11386 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
11387 : generate a few handy files for later
11388 $cat > signal.c <<'EOCP'
11389 #include <sys/types.h>
11390 #include <signal.h>
11391 #include <stdio.h>
11392 int main() {
11393
11394 /* Strange style to avoid deeply-nested #if/#else/#endif */
11395 #ifndef NSIG
11396 #  ifdef _NSIG
11397 #    define NSIG (_NSIG)
11398 #  endif
11399 #endif
11400
11401 #ifndef NSIG
11402 #  ifdef SIGMAX
11403 #    define NSIG (SIGMAX+1)
11404 #  endif
11405 #endif
11406
11407 #ifndef NSIG
11408 #  ifdef SIG_MAX
11409 #    define NSIG (SIG_MAX+1)
11410 #  endif
11411 #endif
11412
11413 #ifndef NSIG
11414 #  ifdef MAXSIG
11415 #    define NSIG (MAXSIG+1)
11416 #  endif
11417 #endif
11418
11419 #ifndef NSIG
11420 #  ifdef MAX_SIG
11421 #    define NSIG (MAX_SIG+1)
11422 #  endif
11423 #endif
11424
11425 #ifndef NSIG
11426 #  ifdef SIGARRAYSIZE
11427 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
11428 #  endif
11429 #endif
11430
11431 #ifndef NSIG
11432 #  ifdef _sys_nsig
11433 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
11434 #  endif
11435 #endif
11436
11437 /* Default to some arbitrary number that's big enough to get most
11438    of the common signals.
11439 */
11440 #ifndef NSIG
11441 #    define NSIG 50
11442 #endif
11443
11444 printf("NSIG %d\n", NSIG);
11445
11446 #ifndef JUST_NSIG
11447
11448 EOCP
11449
11450 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
11451 {
11452         printf "#ifdef SIG"; printf $1; printf "\n"
11453         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
11454         printf $1; printf ");\n"
11455         printf "#endif\n"
11456 }
11457 END {
11458         printf "#endif /* JUST_NSIG */\n";
11459         printf "}\n";
11460 }
11461 ' >>signal.c
11462 $cat >signal.awk <<'EOP'
11463 BEGIN { ndups = 0 }
11464 $1 ~ /^NSIG$/ { nsig = $2 }
11465 ($1 !~ /^NSIG$/) && (NF == 2) {
11466     if ($2 > maxsig) { maxsig = $2 }
11467     if (sig_name[$2]) {
11468         dup_name[ndups] = $1
11469         dup_num[ndups] = $2
11470         ndups++ 
11471     }
11472     else {
11473         sig_name[$2] = $1
11474         sig_num[$2] = $2
11475     }
11476
11477 }
11478 END { 
11479     if (nsig == 0) { nsig = maxsig + 1 }
11480         for (n = 1; n < nsig; n++) {
11481                 if (sig_name[n]) {
11482                         printf("%s %d\n", sig_name[n], sig_num[n])
11483                 }
11484                 else {
11485                         printf("NUM%d %d\n", n, n) 
11486                 }
11487         }
11488     for (n = 0; n < ndups; n++) {
11489                 printf("%s %d\n", dup_name[n], dup_num[n])
11490     }
11491 }
11492 EOP
11493 $cat >signal_cmd <<EOS
11494 $startsh
11495 if $test -s signal.lst; then
11496     echo "Using your existing signal.lst file"
11497         exit 0
11498 fi
11499 xxx="$xxx"
11500 EOS
11501 $cat >>signal_cmd <<'EOS'
11502
11503 set signal
11504 if eval $compile_ok; then
11505         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11506 else
11507         echo "(I can't seem be able to compile the whole test program)" >&4
11508         echo "(I'll try it in little pieces.)" >&4
11509         set signal -DJUST_NSIG
11510         if eval $compile_ok; then
11511                 ./signal$_exe > signal.nsg
11512                 $cat signal.nsg
11513         else
11514                 echo "I can't seem to figure out how many signals you have." >&4
11515                 echo "Guessing 50." >&4
11516                 echo 'NSIG 50' > signal.nsg
11517         fi
11518         : Now look at all the signal names, one at a time.
11519         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
11520                 $cat > signal.c <<EOCP
11521 #include <sys/types.h>
11522 #include <signal.h>
11523 #include <stdio.h>
11524 int main() {
11525 printf("$xx %d\n", SIG${xx});
11526 return 0;
11527 }
11528 EOCP
11529                 set signal
11530                 if eval $compile; then
11531                         echo "SIG${xx} found."
11532                         ./signal$_exe  >> signal.ls1
11533                 else
11534                         echo "SIG${xx} NOT found."
11535                 fi
11536         done
11537         if $test -s signal.ls1; then
11538                 $cat signal.nsg signal.ls1 |
11539                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11540         fi
11541
11542 fi
11543 if $test -s signal.lst; then
11544         :
11545 else
11546         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
11547         echo 'kill -l' >signal
11548         set X `csh -f <signal`
11549         $rm -f signal
11550         shift
11551         case $# in
11552         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
11553         esac
11554         echo $@ | $tr ' ' $trnl | \
11555                 $awk '{ printf $1; printf " %d\n", ++s; }' >signal.lst
11556 fi
11557 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
11558 EOS
11559 chmod a+x signal_cmd
11560 $eunicefix signal_cmd
11561
11562 : generate list of signal names
11563 echo " "
11564 case "$sig_name_init" in
11565 '') doinit=yes ;;
11566 *)  case "$sig_num_init" in
11567     ''|*,*) doinit=yes ;;
11568     esac ;;
11569 esac
11570 case "$doinit" in
11571 yes)
11572         echo "Generating a list of signal names and numbers..." >&4
11573         . ./signal_cmd
11574         sig_name=`$awk '{printf "%s ", $1}' signal.lst`
11575         sig_name="ZERO $sig_name"
11576         sig_name_init=`$awk 'BEGIN { printf "\"ZERO\", " }
11577                                                 { printf "\"%s\", ", $1 }
11578                                                 END { printf "0\n" }' signal.lst`
11579         sig_num=`$awk '{printf "%d ", $2}' signal.lst`
11580         sig_num="0 $sig_num"
11581         sig_num_init=`$awk 'BEGIN { printf "0, " }
11582                                         { printf "%d, ", $2}
11583                                         END { printf "0\n"}' signal.lst`
11584         ;;
11585 esac
11586 echo "The following signals are available:"
11587 echo " "
11588 echo $sig_name | $awk \
11589 'BEGIN { linelen = 0 }
11590 {
11591         for (i = 1; i <= NF; i++) {
11592                 name = "SIG" $i " "
11593                 linelen = linelen + length(name)
11594                 if (linelen > 70) {
11595                         printf "\n"
11596                         linelen = length(name)
11597                 }
11598                 printf "%s", name
11599         }
11600         printf "\n"
11601 }'
11602 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
11603
11604 : see what type is used for signed size_t
11605 set ssize_t ssizetype int stdio.h sys/types.h
11606 eval $typedef
11607 dflt="$ssizetype"
11608 $cat > ssize.c <<EOM
11609 #include <stdio.h>
11610 #include <sys/types.h>
11611 #define Size_t $sizetype
11612 #define SSize_t $dflt
11613 int main()
11614 {
11615         if (sizeof(Size_t) == sizeof(SSize_t))
11616                 printf("$dflt\n");
11617         else if (sizeof(Size_t) == sizeof(int))
11618                 printf("int\n");
11619         else 
11620                 printf("long\n");
11621         exit(0);
11622 }
11623 EOM
11624 echo " "
11625 set ssize
11626 if eval $compile_ok && ./ssize > /dev/null; then
11627         ssizetype=`./ssize`
11628         echo "I'll be using $ssizetype for functions returning a byte count." >&4
11629 else
11630         $cat >&4 <<EOM
11631 Help! I can't compile and run the ssize_t test program: please enlighten me!
11632 (This is probably a misconfiguration in your system or libraries, and
11633 you really ought to fix it.  Still, I'll try anyway.)
11634
11635 I need a type that is the same size as $sizetype, but is guaranteed to
11636 be signed.  Common values are ssize_t, int and long.
11637
11638 EOM
11639         rp="What signed type is the same size as $sizetype?"
11640         . ./myread
11641         ssizetype="$ans"
11642 fi
11643 $rm -f ssize ssize.*
11644
11645 : see what type of char stdio uses.
11646 echo " "
11647 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
11648         echo "Your stdio uses unsigned chars." >&4
11649         stdchar="unsigned char"
11650 else
11651         echo "Your stdio uses signed chars." >&4
11652         stdchar="char"
11653 fi
11654
11655 : see if time exists
11656 echo " "
11657 if test "X$d_time" = X -o X"$timetype" = X; then
11658     if set time val -f d_time; eval $csym; $val; then
11659                 echo 'time() found.' >&4
11660                 val="$define"
11661                 rp="What is the type returned by time() on this system?"
11662                 set time_t timetype long stdio.h sys/types.h
11663                 eval $typedef_ask
11664     else
11665                 echo 'time() not found, hope that will do.' >&4
11666                 val="$undef"
11667                 timetype='int';
11668     fi
11669     set d_time
11670     eval $setvar
11671 fi
11672
11673 : see what type uids are declared as in the kernel
11674 echo " "
11675 echo "Looking for the type for user ids returned by getuid()."
11676 set uid_t uidtype xxx stdio.h sys/types.h
11677 eval $typedef
11678 case "$uidtype" in
11679 xxx)
11680         xxx=`./findhdr sys/user.h`
11681         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
11682         case $1 in
11683         unsigned) dflt="$1 $2" ;;
11684         *) dflt="$1" ;;
11685         esac
11686         ;;
11687 *) dflt="$uidtype";;
11688 esac
11689 case "$uidtype" in
11690 uid_t)  echo "uid_t found." ;;
11691 *)      rp="What is the type for user ids returned by getuid()?"
11692         . ./myread
11693         uidtype="$ans"
11694         ;;
11695 esac
11696
11697 : see if dbm.h is available
11698 : see if dbmclose exists
11699 set dbmclose d_dbmclose
11700 eval $inlibc
11701
11702 case "$d_dbmclose" in
11703 $define)
11704         set dbm.h i_dbm
11705         eval $inhdr
11706         case "$i_dbm" in
11707         $define)
11708                 val="$undef"
11709                 set i_rpcsvcdbm
11710                 eval $setvar
11711                 ;;
11712         *)      set rpcsvc/dbm.h i_rpcsvcdbm
11713                 eval $inhdr
11714                 ;;
11715         esac
11716         ;;
11717 *)      echo "We won't be including <dbm.h>"
11718         val="$undef"
11719         set i_dbm
11720         eval $setvar
11721         val="$undef"
11722         set i_rpcsvcdbm
11723         eval $setvar
11724         ;;
11725 esac
11726
11727 : see if this is a sys/file.h system
11728 val=''
11729 set sys/file.h val
11730 eval $inhdr
11731
11732 : do we need to include sys/file.h ?
11733 case "$val" in
11734 "$define")
11735         echo " "
11736         if $h_sysfile; then
11737                 val="$define"
11738                 echo "We'll be including <sys/file.h>." >&4
11739         else
11740                 val="$undef"
11741                 echo "We won't be including <sys/file.h>." >&4
11742         fi
11743         ;;
11744 *)
11745         h_sysfile=false
11746         ;;
11747 esac
11748 set i_sysfile
11749 eval $setvar
11750
11751 : see if fcntl.h is there
11752 val=''
11753 set fcntl.h val
11754 eval $inhdr
11755
11756 : see if we can include fcntl.h
11757 case "$val" in
11758 "$define")
11759         echo " "
11760         if $h_fcntl; then
11761                 val="$define"
11762                 echo "We'll be including <fcntl.h>." >&4
11763         else
11764                 val="$undef"
11765                 if $h_sysfile; then
11766         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
11767                 else
11768                         echo "We won't be including <fcntl.h>." >&4
11769                 fi
11770         fi
11771         ;;
11772 *)
11773         h_fcntl=false
11774         val="$undef"
11775         ;;
11776 esac
11777 set i_fcntl
11778 eval $setvar
11779
11780 : see if locale.h is available
11781 set locale.h i_locale
11782 eval $inhdr
11783
11784 : see if mach cthreads are available
11785 if test "X$usethreads" = "X$define"; then
11786         set mach/cthreads.h i_machcthr
11787         eval $inhdr
11788 else
11789         i_machcthr="$undef"
11790 fi
11791
11792
11793
11794 : see if this is a math.h system
11795 set math.h i_math
11796 eval $inhdr
11797
11798 : see if this is a mntent.h system
11799 set mntent.h i_mntent
11800 eval $inhdr
11801
11802 : see if ndbm.h is available
11803 set ndbm.h t_ndbm
11804 eval $inhdr
11805 case "$t_ndbm" in
11806 $define)
11807         : see if dbm_open exists
11808         set dbm_open d_dbm_open
11809         eval $inlibc
11810         case "$d_dbm_open" in
11811         $undef)
11812                 t_ndbm="$undef"
11813                 echo "We won't be including <ndbm.h>"
11814                 ;;
11815         esac
11816         ;;
11817 esac
11818 val="$t_ndbm"
11819 set i_ndbm
11820 eval $setvar
11821
11822 : see if net/errno.h is available
11823 val=''
11824 set net/errno.h val
11825 eval $inhdr
11826
11827 : Unfortunately, it causes problems on some systems.  Arrgh.
11828 case "$val" in
11829 $define)
11830         cat > try.c <<'EOM'
11831 #include <stdio.h>
11832 #include <errno.h>
11833 #include <net/errno.h>
11834 int func()
11835 {
11836         return ENOTSOCK;
11837 }
11838 EOM
11839         if $cc $ccflags -c try.c >/dev/null 2>&1; then
11840                 echo "We'll be including <net/errno.h>." >&4
11841         else
11842                 echo "We won't be including <net/errno.h>." >&4
11843                 val="$undef"
11844         fi
11845         $rm -f try.* try
11846         ;;
11847 esac
11848 set i_neterrno
11849 eval $setvar
11850
11851 : see if this is a poll.h system
11852 set poll.h i_poll
11853 eval $inhdr
11854
11855 : get C preprocessor symbols handy
11856 echo " "
11857 $echo $n "Hmm... $c"
11858 echo $al | $tr ' ' $trnl >Cppsym.know
11859 $cat <<EOSS >Cppsym
11860 $startsh
11861 case "\$1" in
11862 -l) list=true
11863         shift
11864         ;;
11865 esac
11866 unknown=''
11867 case "\$list\$#" in
11868 1|2)
11869         for sym do
11870                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
11871                         exit 0
11872                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
11873                         :
11874                 else
11875                         unknown="\$unknown \$sym"
11876                 fi
11877         done
11878         set X \$unknown
11879         shift
11880         ;;
11881 esac
11882 case \$# in
11883 0) exit 1;;
11884 esac
11885 echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
11886 #ifdef \1\\
11887 exit 0; _ _ _ _\1\\      \1\\
11888 #endif\\
11889 /' >Cppsym\$\$
11890 echo "exit 1; _ _ _" >>Cppsym\$\$
11891 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
11892 case "\$list" in
11893 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
11894 *)
11895         sh Cppsym2\$\$
11896         status=\$?
11897         ;;
11898 esac
11899 $rm -f Cppsym\$\$ Cppsym2\$\$
11900 exit \$status
11901 EOSS
11902 chmod +x Cppsym
11903 $eunicefix Cppsym
11904 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
11905
11906 : now check the C compiler for additional symbols
11907 $cat >ccsym <<EOS
11908 $startsh
11909 $cat >tmp.c <<EOF
11910 extern int foo;
11911 EOF
11912 for i in \`$cc -v -c tmp.c 2>&1\`
11913 do
11914         case "\$i" in
11915         -D*) echo "\$i" | $sed 's/^-D//';;
11916         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
11917         esac
11918 done
11919 $rm -f try.c
11920 EOS
11921 chmod +x ccsym
11922 $eunicefix ccsym
11923 ./ccsym > ccsym1.raw
11924 if $test -s ccsym1.raw; then
11925        $sort ccsym1.raw | $uniq >ccsym.raw
11926 else
11927        mv ccsym1.raw ccsym.raw
11928 fi
11929
11930 $awk '/\=/ { print $0; next }
11931         { print $0"=1" }' ccsym.raw >ccsym.list
11932 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
11933 $comm -13 ccsym.true ccsym.list >ccsym.own
11934 $comm -12 ccsym.true ccsym.list >ccsym.com
11935 $comm -23 ccsym.true ccsym.list >ccsym.cpp
11936 also=''
11937 if $test -z ccsym.raw; then
11938         echo "Your C compiler doesn't seem to define any symbols!" >&4
11939         echo " "
11940         echo "However, your C preprocessor defines the following symbols:"
11941         $cat Cppsym.true
11942         ccsymbols=''
11943         cppsymbols=`$cat Cppsym.true`
11944         cppsymbols=`echo $cppsymbols`
11945         cppccsymbols="$cppsymbols"
11946 else
11947         if $test -s ccsym.com; then
11948                 echo "Your C compiler and pre-processor define these symbols:"
11949                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
11950                 also='also '
11951                 symbols='ones'
11952                 cppccsymbols=`$cat ccsym.com`
11953                 cppccsymbols=`echo $cppccsymbols`
11954                 $test "$silent" || sleep 1
11955         fi
11956         if $test -s ccsym.cpp; then
11957                 $test "$also" && echo " "
11958                 echo "Your C pre-processor ${also}defines the following symbols:"
11959                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
11960                 also='further '
11961                 cppsymbols=`$cat ccsym.cpp`
11962                 cppsymbols=`echo $cppsymbols`
11963                 $test "$silent" || sleep 1
11964         fi
11965         if $test -s ccsym.own; then
11966                 $test "$also" && echo " "
11967                 echo "Your C compiler ${also}defines the following cpp symbols:"
11968                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
11969                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
11970                 ccsymbols=`$cat ccsym.own`
11971                 ccsymbols=`echo $ccsymbols`
11972                 $test "$silent" || sleep 1
11973         fi
11974 fi
11975 $rm -f ccsym*
11976
11977 : see if this is a termio system
11978 val="$undef"
11979 val2="$undef"
11980 val3="$undef"
11981 if $test `./findhdr termios.h`; then
11982         set tcsetattr i_termios
11983         eval $inlibc
11984         val3="$i_termios"
11985 fi
11986 echo " "
11987 case "$val3" in
11988 "$define") echo "You have POSIX termios.h... good!" >&4;;
11989 *) if ./Cppsym pyr; then
11990                 case "`/bin/universe`" in
11991                 ucb) if $test `./findhdr sgtty.h`; then
11992                                 val2="$define"
11993                                 echo "<sgtty.h> found." >&4
11994                         else
11995                                 echo "System is pyramid with BSD universe."
11996                                 echo "<sgtty.h> not found--you could have problems." >&4
11997                         fi;;
11998                 *) if $test `./findhdr termio.h`; then
11999                                 val="$define"
12000                                 echo "<termio.h> found." >&4
12001                         else
12002                                 echo "System is pyramid with USG universe."
12003                                 echo "<termio.h> not found--you could have problems." >&4
12004                         fi;;
12005                 esac
12006         elif ./usg; then
12007                 if $test `./findhdr termio.h`; then
12008                         echo "<termio.h> found." >&4
12009                         val="$define"
12010                 elif $test `./findhdr sgtty.h`; then
12011                         echo "<sgtty.h> found." >&4
12012                         val2="$define"
12013                 else
12014 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
12015                 fi
12016         else
12017                 if $test `./findhdr sgtty.h`; then
12018                         echo "<sgtty.h> found." >&4
12019                         val2="$define"
12020                 elif $test `./findhdr termio.h`; then
12021                         echo "<termio.h> found." >&4
12022                         val="$define"
12023                 else
12024 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
12025                 fi
12026         fi;;
12027 esac
12028 set i_termio; eval $setvar
12029 val=$val2; set i_sgtty; eval $setvar
12030 val=$val3; set i_termios; eval $setvar
12031
12032 : see if stdarg is available
12033 echo " "
12034 if $test `./findhdr stdarg.h`; then
12035         echo "<stdarg.h> found." >&4
12036         valstd="$define"
12037 else
12038         echo "<stdarg.h> NOT found." >&4
12039         valstd="$undef"
12040 fi
12041
12042 : see if varags is available
12043 echo " "
12044 if $test `./findhdr varargs.h`; then
12045         echo "<varargs.h> found." >&4
12046 else
12047         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
12048 fi
12049
12050 : set up the varargs testing programs
12051 $cat > varargs.c <<EOP
12052 #ifdef I_STDARG
12053 #include <stdarg.h>
12054 #endif
12055 #ifdef I_VARARGS
12056 #include <varargs.h>
12057 #endif
12058
12059 #ifdef I_STDARG
12060 int f(char *p, ...)
12061 #else
12062 int f(va_alist)
12063 va_dcl
12064 #endif
12065 {
12066         va_list ap;
12067 #ifndef I_STDARG
12068         char *p;
12069 #endif
12070 #ifdef I_STDARG
12071         va_start(ap,p);
12072 #else
12073         va_start(ap);
12074         p = va_arg(ap, char *);
12075 #endif
12076         va_end(ap);
12077 }
12078 EOP
12079 $cat > varargs <<EOP
12080 $startsh
12081 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
12082         echo "true"
12083 else
12084         echo "false"
12085 fi
12086 $rm -f varargs$_o
12087 EOP
12088 chmod +x varargs
12089
12090 : now check which varargs header should be included
12091 echo " "
12092 i_varhdr=''
12093 case "$valstd" in
12094 "$define")
12095         if `./varargs I_STDARG`; then
12096                 val='stdarg.h'
12097         elif `./varargs I_VARARGS`; then
12098                 val='varargs.h'
12099         fi
12100         ;;
12101 *)
12102         if `./varargs I_VARARGS`; then
12103                 val='varargs.h'
12104         fi
12105         ;;
12106 esac
12107 case "$val" in
12108 '')
12109 echo "I could not find the definition for va_dcl... You have problems..." >&4
12110         val="$undef"; set i_stdarg; eval $setvar
12111         val="$undef"; set i_varargs; eval $setvar
12112         ;;
12113 *) 
12114         set i_varhdr
12115         eval $setvar
12116         case "$i_varhdr" in
12117         stdarg.h)
12118                 val="$define"; set i_stdarg; eval $setvar
12119                 val="$undef"; set i_varargs; eval $setvar
12120                 ;;
12121         varargs.h)
12122                 val="$undef"; set i_stdarg; eval $setvar
12123                 val="$define"; set i_varargs; eval $setvar
12124                 ;;
12125         esac
12126         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
12127 esac
12128 $rm -f varargs*
12129
12130 : see if stddef is available
12131 set stddef.h i_stddef
12132 eval $inhdr
12133
12134 : see if sys/access.h is available
12135 set sys/access.h i_sysaccess
12136 eval $inhdr
12137
12138 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
12139 set sys/filio.h i_sysfilio
12140 eval $inhdr
12141 echo " "
12142 if $test `./findhdr sys/ioctl.h`; then
12143         val="$define"
12144         echo '<sys/ioctl.h> found.' >&4
12145 else
12146         val="$undef"
12147         if $test $i_sysfilio = "$define"; then
12148             echo '<sys/ioctl.h> NOT found.' >&4
12149         else
12150                 $test $i_sgtty = "$define" && xxx="sgtty.h"
12151                 $test $i_termio = "$define" && xxx="termio.h"
12152                 $test $i_termios = "$define" && xxx="termios.h"
12153 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
12154         fi
12155 fi
12156 set i_sysioctl
12157 eval $setvar
12158
12159 : see if sys/resource.h has to be included
12160 set sys/resource.h i_sysresrc
12161 eval $inhdr
12162
12163 : see if sys/security.h is available
12164 set sys/security.h i_syssecrt
12165 eval $inhdr
12166
12167 : see if this is a sys/statvfs.h system
12168 set sys/statvfs.h i_sysstatvfs
12169 eval $inhdr
12170
12171 : see if this is a sys/un.h system
12172 set sys/un.h i_sysun
12173 eval $inhdr
12174
12175 : see if this is a syswait system
12176 set sys/wait.h i_syswait
12177 eval $inhdr
12178
12179 : see if this is an utime system
12180 set utime.h i_utime
12181 eval $inhdr
12182
12183 : see if this is a values.h system
12184 set values.h i_values
12185 eval $inhdr
12186
12187 : see if this is a vfork system
12188 case "$d_vfork" in
12189 "$define")
12190         set vfork.h i_vfork
12191         eval $inhdr
12192         ;;
12193 *)
12194         i_vfork="$undef"
12195         ;;
12196 esac
12197
12198 : see if gdbm.h is available
12199 set gdbm.h t_gdbm
12200 eval $inhdr
12201 case "$t_gdbm" in
12202 $define)
12203         : see if gdbm_open exists
12204         set gdbm_open d_gdbm_open
12205         eval $inlibc
12206         case "$d_gdbm_open" in
12207         $undef)
12208                 t_gdbm="$undef"
12209                 echo "We won't be including <gdbm.h>"
12210                 ;;
12211         esac
12212         ;;
12213 esac
12214 val="$t_gdbm"
12215 set i_gdbm
12216 eval $setvar
12217
12218 echo " "
12219 echo "Looking for extensions..." >&4
12220 tdir=`pwd`
12221 cd $rsrc/ext
12222 : If we are using the old config.sh, known_extensions may contain
12223 : old or inaccurate or duplicate values.
12224 known_extensions=''
12225 nonxs_extensions=''
12226 : We do not use find because it might not be available.
12227 : We do not just use MANIFEST because the user may have dropped
12228 : some additional extensions into the source tree and expect them
12229 : to be built.
12230 for xxx in * ; do
12231         case "$xxx" in
12232         DynaLoader|dynaload) ;;
12233         *)      if $test -f $xxx/$xxx.xs; then
12234                         known_extensions="$known_extensions $xxx"
12235                 elif $test -f $xxx/Makefile.PL; then
12236                         nonxs_extensions="$nonxs_extensions $xxx"
12237                 else
12238                         if $test -d $xxx; then
12239                                 # Look for nested extensions, eg. Devel/Dprof.
12240                                 cd $xxx
12241                                 for yyy in * ; do
12242                                 if $test -f $yyy/$yyy.xs; then
12243                                         known_extensions="$known_extensions $xxx/$yyy"
12244                                 elif $test -f $yyy/Makefile.PL; then
12245                                         nonxs_extensions="$nonxs_extensions $xxx/$yyy"
12246                                 fi
12247                                 done
12248                                 cd ..
12249                         fi
12250                 fi 
12251                 ;;
12252         esac
12253 done
12254 set X $nonxs_extensions
12255 shift
12256 nonxs_extensions="$*"
12257 set X $known_extensions
12258 shift
12259 known_extensions="$*"
12260 cd $tdir
12261
12262 : Now see which are supported on this system.
12263 avail_ext=''
12264 for xxx in $known_extensions ; do
12265         case "$xxx" in
12266         DB_File|db_file)
12267                 case "$i_db" in
12268                 $define) avail_ext="$avail_ext $xxx" ;;
12269                 esac
12270                 ;;
12271         GDBM_File|gdbm_fil)
12272                 case "$i_gdbm" in 
12273                 $define) avail_ext="$avail_ext $xxx" ;;
12274                 esac
12275                 ;;
12276         NDBM_File|ndbm_fil)
12277                 case "$i_ndbm" in
12278                 $define) avail_ext="$avail_ext $xxx" ;;
12279                 esac
12280                 ;;
12281         ODBM_File|odbm_fil) 
12282                 case "${i_dbm}${i_rpcsvcdbm}" in
12283                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12284                 esac
12285                 ;;
12286         POSIX|posix)
12287                 case "$useposix" in
12288                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12289                 esac
12290                 ;;
12291         Opcode|opcode)
12292                 case "$useopcode" in
12293                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12294                 esac
12295                 ;;
12296         Socket|socket)
12297                 case "$d_socket" in 
12298                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12299                 esac
12300                 ;;
12301         Thread|thread)
12302                 case "$usethreads" in 
12303                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12304                 esac
12305                 ;;
12306         IPC/SysV|ipc/sysv)
12307                 : XXX Do we need a useipcsysv variable here
12308                 case "${d_msg}${d_sem}${d_shm}" in 
12309                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12310                 esac
12311                 ;;
12312         *)      avail_ext="$avail_ext $xxx"
12313                 ;;
12314         esac
12315 done
12316
12317 set X $avail_ext
12318 shift
12319 avail_ext="$*"
12320
12321 : Now see which nonxs extensions are supported on this system.
12322 : For now assume all are.
12323 nonxs_ext=''
12324 for xxx in $nonxs_extensions ; do
12325         case "$xxx" in
12326         *)      nonxs_ext="$nonxs_ext $xxx"
12327                 ;;
12328         esac
12329 done
12330
12331 set X $nonxs_ext
12332 shift
12333 nonxs_ext="$*"
12334
12335 case $usedl in
12336 $define)
12337         $cat <<EOM
12338 A number of extensions are supplied with $package.  You may choose to
12339 compile these extensions for dynamic loading (the default), compile
12340 them into the $package executable (static loading), or not include
12341 them at all.  Answer "none" to include no extensions.
12342 Note that DynaLoader is always built and need not be mentioned here.
12343
12344 EOM
12345         case "$dynamic_ext" in
12346         '') dflt="$avail_ext" ;;
12347         *)      dflt="$dynamic_ext"
12348                 # Perhaps we are reusing an old out-of-date config.sh.
12349                 case "$hint" in
12350                 previous)
12351                         if test X"$dynamic_ext" != X"$avail_ext"; then
12352                                 $cat <<EOM
12353 NOTICE:  Your previous config.sh list may be incorrect. 
12354 The extensions now available to you are 
12355         ${avail_ext}
12356 but the default list from your previous config.sh is
12357         ${dynamic_ext} 
12358
12359 EOM
12360                         fi
12361                         ;;
12362                 esac
12363                 ;;
12364         esac
12365         case "$dflt" in
12366         '')     dflt=none;;
12367         esac
12368         rp="What extensions do you wish to load dynamically?"
12369         . ./myread
12370         case "$ans" in
12371         none) dynamic_ext=' ' ;;
12372         *) dynamic_ext="$ans" ;;
12373         esac
12374
12375         case "$static_ext" in
12376         '')
12377                 : Exclude those already listed in dynamic linking
12378                 dflt=''
12379                 for xxx in $avail_ext; do
12380                         case " $dynamic_ext " in
12381                         *" $xxx "*) ;;
12382                         *) dflt="$dflt $xxx" ;;
12383                         esac
12384                 done
12385                 set X $dflt
12386                 shift
12387                 dflt="$*"
12388                 ;;
12389         *)  dflt="$static_ext" 
12390                 ;;
12391         esac
12392
12393         case "$dflt" in
12394         '')     dflt=none;;
12395         esac
12396         rp="What extensions do you wish to load statically?"
12397         . ./myread
12398         case "$ans" in
12399         none) static_ext=' ' ;;
12400         *) static_ext="$ans" ;;
12401         esac
12402         ;;
12403 *)
12404         $cat <<EOM
12405 A number of extensions are supplied with $package.  Answer "none" 
12406 to include no extensions. 
12407 Note that DynaLoader is always built and need not be mentioned here.
12408
12409 EOM
12410         case "$static_ext" in
12411         '') dflt="$avail_ext" ;;
12412         *)      dflt="$static_ext"
12413                 # Perhaps we are reusing an old out-of-date config.sh.
12414                 case "$hint" in
12415                 previous)
12416                         if test X"$static_ext" != X"$avail_ext"; then
12417                                 $cat <<EOM
12418 NOTICE:  Your previous config.sh list may be incorrect. 
12419 The extensions now available to you are 
12420         ${avail_ext}
12421 but the default list from your previous config.sh is
12422         ${static_ext} 
12423
12424 EOM
12425                         fi
12426                         ;;
12427                 esac
12428                 ;;
12429         esac
12430         : Exclude those that are not xs extensions
12431         case "$dflt" in
12432         '')     dflt=none;;
12433         esac
12434         rp="What extensions do you wish to include?"
12435         . ./myread
12436         case "$ans" in
12437         none) static_ext=' ' ;;
12438         *) static_ext="$ans" ;;
12439         esac
12440         ;;
12441 esac
12442
12443 set X $dynamic_ext $static_ext $nonxs_ext
12444 shift
12445 extensions="$*"
12446
12447 : Remove build directory name from cppstdin so it can be used from
12448 : either the present location or the final installed location.
12449 echo " "
12450 : Get out of the UU directory to get correct path name.
12451 cd ..
12452 case "$cppstdin" in
12453 `pwd`/cppstdin)
12454         echo "Stripping down cppstdin path name"
12455         cppstdin=cppstdin
12456         ;;
12457 esac
12458 cd UU
12459
12460 : end of configuration questions
12461 echo " "
12462 echo "End of configuration questions."
12463 echo " "
12464
12465 : back to where it started
12466 if test -d ../UU; then
12467         cd ..
12468 fi
12469
12470 : configuration may be patched via a 'config.over' file
12471 if $test -f config.over; then
12472         echo " "
12473         dflt=y
12474         rp='I see a config.over file.  Do you wish to load it?'
12475         . UU/myread
12476         case "$ans" in
12477         n*) echo "OK, I'll ignore it.";;
12478         *)      . ./config.over
12479                 echo "Configuration override changes have been loaded."
12480                 ;;
12481         esac
12482 fi
12483
12484 : in case they want portability, strip down executable paths
12485 case "$d_portable" in
12486 "$define")
12487         echo " "
12488         echo "Stripping down executable paths..." >&4
12489         for file in $loclist $trylist; do
12490                 if test X$file != Xln -a X$file != Xar -o X$osname != Xos2; then
12491                         eval $file="\$file"
12492                 fi
12493         done
12494         ;;
12495 esac
12496
12497 : create config.sh file
12498 echo " "
12499 echo "Creating config.sh..." >&4
12500 $spitshell <<EOT >config.sh
12501 $startsh
12502 #
12503 # This file was produced by running the Configure script. It holds all the
12504 # definitions figured out by Configure. Should you modify one of these values,
12505 # do not forget to propagate your changes by running "Configure -der". You may
12506 # instead choose to run each of the .SH files by yourself, or "Configure -S".
12507 #
12508
12509 # Package name      : $package
12510 # Source directory  : $src
12511 # Configuration time: $cf_time
12512 # Configured by     : $cf_by
12513 # Target system     : $myuname
12514
12515 Author='$Author'
12516 Date='$Date'
12517 Header='$Header'
12518 Id='$Id'
12519 Locker='$Locker'
12520 Log='$Log'
12521 Mcc='$Mcc'
12522 RCSfile='$RCSfile'
12523 Revision='$Revision'
12524 Source='$Source'
12525 State='$State'
12526 _a='$_a'
12527 _exe='$_exe'
12528 _o='$_o'
12529 afs='$afs'
12530 alignbytes='$alignbytes'
12531 ansi2knr='$ansi2knr'
12532 aphostname='$aphostname'
12533 apiversion='$apiversion'
12534 ar='$ar'
12535 archlib='$archlib'
12536 archlibexp='$archlibexp'
12537 archname64='$archname64'
12538 archname='$archname'
12539 archobjs='$archobjs'
12540 awk='$awk'
12541 baserev='$baserev'
12542 bash='$bash'
12543 bin='$bin'
12544 binexp='$binexp'
12545 bison='$bison'
12546 byacc='$byacc'
12547 byteorder='$byteorder'
12548 c='$c'
12549 castflags='$castflags'
12550 cat='$cat'
12551 cc='$cc'
12552 cccdlflags='$cccdlflags'
12553 ccdlflags='$ccdlflags'
12554 ccflags='$ccflags'
12555 ccsymbols='$ccsymbols'
12556 cf_by='$cf_by'
12557 cf_email='$cf_email'
12558 cf_time='$cf_time'
12559 chgrp='$chgrp'
12560 chmod='$chmod'
12561 chown='$chown'
12562 clocktype='$clocktype'
12563 comm='$comm'
12564 compress='$compress'
12565 contains='$contains'
12566 cp='$cp'
12567 cpio='$cpio'
12568 cpp='$cpp'
12569 cpp_stuff='$cpp_stuff'
12570 cppccsymbols='$cppccsymbols'
12571 cppflags='$cppflags'
12572 cpplast='$cpplast'
12573 cppminus='$cppminus'
12574 cpprun='$cpprun'
12575 cppstdin='$cppstdin'
12576 cppsymbols='$cppsymbols'
12577 cryptlib='$cryptlib'
12578 csh='$csh'
12579 d_Gconvert='$d_Gconvert'
12580 d_access='$d_access'
12581 d_accessx='$d_accessx'
12582 d_alarm='$d_alarm'
12583 d_archlib='$d_archlib'
12584 d_attribut='$d_attribut'
12585 d_bcmp='$d_bcmp'
12586 d_bcopy='$d_bcopy'
12587 d_bsd='$d_bsd'
12588 d_bsdgetpgrp='$d_bsdgetpgrp'
12589 d_bsdsetpgrp='$d_bsdsetpgrp'
12590 d_bzero='$d_bzero'
12591 d_casti32='$d_casti32'
12592 d_castneg='$d_castneg'
12593 d_charvspr='$d_charvspr'
12594 d_chown='$d_chown'
12595 d_chroot='$d_chroot'
12596 d_chsize='$d_chsize'
12597 d_closedir='$d_closedir'
12598 d_cmsghdr_s='$d_cmsghdr_s'
12599 d_const='$d_const'
12600 d_crypt='$d_crypt'
12601 d_csh='$d_csh'
12602 d_cuserid='$d_cuserid'
12603 d_dbl_dig='$d_dbl_dig'
12604 d_dbmclose64='$d_dbmclose64'
12605 d_dbminit64='$d_dbminit64'
12606 d_delete64='$d_delete64'
12607 d_difftime='$d_difftime'
12608 d_dirent64_s='$d_dirent64_s'
12609 d_dirnamlen='$d_dirnamlen'
12610 d_dlerror='$d_dlerror'
12611 d_dlopen='$d_dlopen'
12612 d_dlsymun='$d_dlsymun'
12613 d_dosuid='$d_dosuid'
12614 d_drand48proto='$d_drand48proto'
12615 d_dup2='$d_dup2'
12616 d_eaccess='$d_eaccess'
12617 d_endgrent='$d_endgrent'
12618 d_endhent='$d_endhent'
12619 d_endnent='$d_endnent'
12620 d_endpent='$d_endpent'
12621 d_endpwent='$d_endpwent'
12622 d_endsent='$d_endsent'
12623 d_eofnblk='$d_eofnblk'
12624 d_eunice='$d_eunice'
12625 d_fchmod='$d_fchmod'
12626 d_fchown='$d_fchown'
12627 d_fcntl='$d_fcntl'
12628 d_fd_macros='$d_fd_macros'
12629 d_fd_set='$d_fd_set'
12630 d_fds_bits='$d_fds_bits'
12631 d_fetch64='$d_fetch64'
12632 d_fgetpos64='$d_fgetpos64'
12633 d_fgetpos='$d_fgetpos'
12634 d_firstkey64='$d_firstkey64'
12635 d_flexfnam='$d_flexfnam'
12636 d_flock64_s='$d_flock64_s'
12637 d_flock='$d_flock'
12638 d_fopen64='$d_fopen64'
12639 d_fork='$d_fork'
12640 d_fpathconf='$d_fpathconf'
12641 d_freopen64='$d_freopen64'
12642 d_fseek64='$d_fseek64'
12643 d_fseeko64='$d_fseeko64'
12644 d_fseeko='$d_fseeko'
12645 d_fsetpos64='$d_fsetpos64'
12646 d_fsetpos='$d_fsetpos'
12647 d_fstat64='$d_fstat64'
12648 d_fstatfs='$d_fstatfs'
12649 d_fstatvfs='$d_fstatvfs'
12650 d_ftell64='$d_ftell64'
12651 d_ftello64='$d_ftello64'
12652 d_ftello='$d_ftello'
12653 d_ftime='$d_ftime'
12654 d_ftruncate64='$d_ftruncate64'
12655 d_getgrent='$d_getgrent'
12656 d_getgrps='$d_getgrps'
12657 d_gethbyaddr='$d_gethbyaddr'
12658 d_gethbyname='$d_gethbyname'
12659 d_gethent='$d_gethent'
12660 d_gethname='$d_gethname'
12661 d_gethostprotos='$d_gethostprotos'
12662 d_getlogin='$d_getlogin'
12663 d_getnbyaddr='$d_getnbyaddr'
12664 d_getnbyname='$d_getnbyname'
12665 d_getnent='$d_getnent'
12666 d_getnetprotos='$d_getnetprotos'
12667 d_getpbyname='$d_getpbyname'
12668 d_getpbynumber='$d_getpbynumber'
12669 d_getpent='$d_getpent'
12670 d_getpgid='$d_getpgid'
12671 d_getpgrp2='$d_getpgrp2'
12672 d_getpgrp='$d_getpgrp'
12673 d_getppid='$d_getppid'
12674 d_getprior='$d_getprior'
12675 d_getprotoprotos='$d_getprotoprotos'
12676 d_getpwent='$d_getpwent'
12677 d_getsbyname='$d_getsbyname'
12678 d_getsbyport='$d_getsbyport'
12679 d_getsent='$d_getsent'
12680 d_getservprotos='$d_getservprotos'
12681 d_gettimeod='$d_gettimeod'
12682 d_gnulibc='$d_gnulibc'
12683 d_grpasswd='$d_grpasswd'
12684 d_htonl='$d_htonl'
12685 d_index='$d_index'
12686 d_inetaton='$d_inetaton'
12687 d_ino64t='$d_ino64t'
12688 d_int64t='$d_int64t'
12689 d_iovec_s='$d_iovec_s'
12690 d_isascii='$d_isascii'
12691 d_killpg='$d_killpg'
12692 d_lchown='$d_lchown'
12693 d_link='$d_link'
12694 d_locconv='$d_locconv'
12695 d_lockf64='$d_lockf64'
12696 d_lockf='$d_lockf'
12697 d_longdbl='$d_longdbl'
12698 d_longlong='$d_longlong'
12699 d_lseek64='$d_lseek64'
12700 d_lstat64='$d_lstat64'
12701 d_lstat='$d_lstat'
12702 d_madvise='$d_madvise'
12703 d_mblen='$d_mblen'
12704 d_mbstowcs='$d_mbstowcs'
12705 d_mbtowc='$d_mbtowc'
12706 d_memcmp='$d_memcmp'
12707 d_memcpy='$d_memcpy'
12708 d_memmove='$d_memmove'
12709 d_memset='$d_memset'
12710 d_mkdir='$d_mkdir'
12711 d_mkfifo='$d_mkfifo'
12712 d_mktime='$d_mktime'
12713 d_mmap='$d_mmap'
12714 d_mprotect='$d_mprotect'
12715 d_msg='$d_msg'
12716 d_msg_ctrunc='$d_msg_ctrunc'
12717 d_msg_dontroute='$d_msg_dontroute'
12718 d_msg_oob='$d_msg_oob'
12719 d_msg_peek='$d_msg_peek'
12720 d_msg_proxy='$d_msg_proxy'
12721 d_msgctl='$d_msgctl'
12722 d_msgget='$d_msgget'
12723 d_msghdr_s='$d_msghdr_s'
12724 d_msgrcv='$d_msgrcv'
12725 d_msgsnd='$d_msgsnd'
12726 d_msync='$d_msync'
12727 d_munmap='$d_munmap'
12728 d_mymalloc='$d_mymalloc'
12729 d_nextkey64='$d_nextkey64'
12730 d_nice='$d_nice'
12731 d_off64t='$d_off64t'
12732 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
12733 d_oldpthreads='$d_oldpthreads'
12734 d_oldsock='$d_oldsock'
12735 d_open3='$d_open3'
12736 d_open64='$d_open64'
12737 d_opendir64='$d_opendir64'
12738 d_pathconf='$d_pathconf'
12739 d_pause='$d_pause'
12740 d_phostname='$d_phostname'
12741 d_pipe='$d_pipe'
12742 d_poll='$d_poll'
12743 d_portable='$d_portable'
12744 d_pthread_yield='$d_pthread_yield'
12745 d_pwage='$d_pwage'
12746 d_pwchange='$d_pwchange'
12747 d_pwclass='$d_pwclass'
12748 d_pwcomment='$d_pwcomment'
12749 d_pwexpire='$d_pwexpire'
12750 d_pwgecos='$d_pwgecos'
12751 d_pwpasswd='$d_pwpasswd'
12752 d_pwquota='$d_pwquota'
12753 d_readdir64='$d_readdir64'
12754 d_readdir='$d_readdir'
12755 d_readlink='$d_readlink'
12756 d_readv='$d_readv'
12757 d_recvmsg='$d_recvmsg'
12758 d_rename='$d_rename'
12759 d_rewinddir='$d_rewinddir'
12760 d_rmdir='$d_rmdir'
12761 d_safebcpy='$d_safebcpy'
12762 d_safemcpy='$d_safemcpy'
12763 d_sanemcmp='$d_sanemcmp'
12764 d_sched_yield='$d_sched_yield'
12765 d_scm_rights='$d_scm_rights'
12766 d_seekdir64='$d_seekdir64'
12767 d_seekdir='$d_seekdir'
12768 d_select='$d_select'
12769 d_sem='$d_sem'
12770 d_semctl='$d_semctl'
12771 d_semctl_semid_ds='$d_semctl_semid_ds'
12772 d_semctl_semun='$d_semctl_semun'
12773 d_semget='$d_semget'
12774 d_semop='$d_semop'
12775 d_sendmsg='$d_sendmsg'
12776 d_setegid='$d_setegid'
12777 d_seteuid='$d_seteuid'
12778 d_setgrent='$d_setgrent'
12779 d_setgrps='$d_setgrps'
12780 d_sethent='$d_sethent'
12781 d_setlinebuf='$d_setlinebuf'
12782 d_setlocale='$d_setlocale'
12783 d_setnent='$d_setnent'
12784 d_setpent='$d_setpent'
12785 d_setpgid='$d_setpgid'
12786 d_setpgrp2='$d_setpgrp2'
12787 d_setpgrp='$d_setpgrp'
12788 d_setprior='$d_setprior'
12789 d_setpwent='$d_setpwent'
12790 d_setregid='$d_setregid'
12791 d_setresgid='$d_setresgid'
12792 d_setresuid='$d_setresuid'
12793 d_setreuid='$d_setreuid'
12794 d_setrgid='$d_setrgid'
12795 d_setruid='$d_setruid'
12796 d_setsent='$d_setsent'
12797 d_setsid='$d_setsid'
12798 d_setvbuf='$d_setvbuf'
12799 d_sfio='$d_sfio'
12800 d_shm='$d_shm'
12801 d_shmat='$d_shmat'
12802 d_shmatprototype='$d_shmatprototype'
12803 d_shmctl='$d_shmctl'
12804 d_shmdt='$d_shmdt'
12805 d_shmget='$d_shmget'
12806 d_sigaction='$d_sigaction'
12807 d_sigsetjmp='$d_sigsetjmp'
12808 d_socket='$d_socket'
12809 d_sockpair='$d_sockpair'
12810 d_stat64='$d_stat64'
12811 d_statblks='$d_statblks'
12812 d_statfs='$d_statfs'
12813 d_statfsflags='$d_statfsflags'
12814 d_statvfs='$d_statvfs'
12815 d_stdio_cnt_lval='$d_stdio_cnt_lval'
12816 d_stdio_ptr_lval='$d_stdio_ptr_lval'
12817 d_stdiobase='$d_stdiobase'
12818 d_stdstdio='$d_stdstdio'
12819 d_store64='$d_store64'
12820 d_strchr='$d_strchr'
12821 d_strcoll='$d_strcoll'
12822 d_strctcpy='$d_strctcpy'
12823 d_strerrm='$d_strerrm'
12824 d_strerror='$d_strerror'
12825 d_strtod='$d_strtod'
12826 d_strtol='$d_strtol'
12827 d_strtoul='$d_strtoul'
12828 d_strxfrm='$d_strxfrm'
12829 d_suidsafe='$d_suidsafe'
12830 d_symlink='$d_symlink'
12831 d_syscall='$d_syscall'
12832 d_sysconf='$d_sysconf'
12833 d_sysernlst='$d_sysernlst'
12834 d_syserrlst='$d_syserrlst'
12835 d_system='$d_system'
12836 d_tcgetpgrp='$d_tcgetpgrp'
12837 d_tcsetpgrp='$d_tcsetpgrp'
12838 d_telldir64='$d_telldir64'
12839 d_telldir='$d_telldir'
12840 d_telldirproto='$d_telldirproto'
12841 d_time='$d_time'
12842 d_times='$d_times'
12843 d_tmpfile64='$d_tmpfile64'
12844 d_truncate64='$d_truncate64'
12845 d_truncate='$d_truncate'
12846 d_tzname='$d_tzname'
12847 d_umask='$d_umask'
12848 d_uname='$d_uname'
12849 d_union_semun='$d_union_semun'
12850 d_vfork='$d_vfork'
12851 d_void_closedir='$d_void_closedir'
12852 d_voidsig='$d_voidsig'
12853 d_voidtty='$d_voidtty'
12854 d_volatile='$d_volatile'
12855 d_vprintf='$d_vprintf'
12856 d_wait4='$d_wait4'
12857 d_waitpid='$d_waitpid'
12858 d_wcstombs='$d_wcstombs'
12859 d_wctomb='$d_wctomb'
12860 d_writev='$d_writev'
12861 d_xenix='$d_xenix'
12862 date='$date'
12863 db_hashtype='$db_hashtype'
12864 db_prefixtype='$db_prefixtype'
12865 defvoidused='$defvoidused'
12866 direntrytype='$direntrytype'
12867 dlext='$dlext'
12868 dlsrc='$dlsrc'
12869 doublesize='$doublesize'
12870 drand01='$drand01'
12871 dynamic_ext='$dynamic_ext'
12872 eagain='$eagain'
12873 ebcdic='$ebcdic'
12874 echo='$echo'
12875 egrep='$egrep'
12876 emacs='$emacs'
12877 eunicefix='$eunicefix'
12878 exe_ext='$exe_ext'
12879 expr='$expr'
12880 extensions='$extensions'
12881 find='$find'
12882 firstmakefile='$firstmakefile'
12883 flex='$flex'
12884 fpostype='$fpostype'
12885 freetype='$freetype'
12886 full_csh='$full_csh'
12887 full_sed='$full_sed'
12888 gccversion='$gccversion'
12889 gidtype='$gidtype'
12890 glibpth='$glibpth'
12891 grep='$grep'
12892 groupcat='$groupcat'
12893 groupstype='$groupstype'
12894 gzip='$gzip'
12895 h_fcntl='$h_fcntl'
12896 h_sysfile='$h_sysfile'
12897 hint='$hint'
12898 hostcat='$hostcat'
12899 huge='$huge'
12900 i_arpainet='$i_arpainet'
12901 i_bsdioctl='$i_bsdioctl'
12902 i_db='$i_db'
12903 i_dbm='$i_dbm'
12904 i_dirent='$i_dirent'
12905 i_dld='$i_dld'
12906 i_dlfcn='$i_dlfcn'
12907 i_fcntl='$i_fcntl'
12908 i_float='$i_float'
12909 i_gdbm='$i_gdbm'
12910 i_grp='$i_grp'
12911 i_inttypes='$i_inttypes'
12912 i_limits='$i_limits'
12913 i_locale='$i_locale'
12914 i_machcthr='$i_machcthr'
12915 i_malloc='$i_malloc'
12916 i_math='$i_math'
12917 i_memory='$i_memory'
12918 i_mntent='$i_mntent'
12919 i_ndbm='$i_ndbm'
12920 i_netdb='$i_netdb'
12921 i_neterrno='$i_neterrno'
12922 i_niin='$i_niin'
12923 i_poll='$i_poll'
12924 i_pwd='$i_pwd'
12925 i_rpcsvcdbm='$i_rpcsvcdbm'
12926 i_sfio='$i_sfio'
12927 i_sgtty='$i_sgtty'
12928 i_stdarg='$i_stdarg'
12929 i_stddef='$i_stddef'
12930 i_stdlib='$i_stdlib'
12931 i_string='$i_string'
12932 i_sysaccess='$i_sysaccess'
12933 i_sysdir='$i_sysdir'
12934 i_sysfile='$i_sysfile'
12935 i_sysfilio='$i_sysfilio'
12936 i_sysin='$i_sysin'
12937 i_sysioctl='$i_sysioctl'
12938 i_sysmman='$i_sysmman'
12939 i_sysmount='$i_sysmount'
12940 i_sysndir='$i_sysndir'
12941 i_sysparam='$i_sysparam'
12942 i_sysresrc='$i_sysresrc'
12943 i_syssecrt='$i_syssecrt'
12944 i_sysselct='$i_sysselct'
12945 i_syssockio='$i_syssockio'
12946 i_sysstat='$i_sysstat'
12947 i_sysstatvfs='$i_sysstatvfs'
12948 i_systime='$i_systime'
12949 i_systimek='$i_systimek'
12950 i_systimes='$i_systimes'
12951 i_systypes='$i_systypes'
12952 i_sysuio='$i_sysuio'
12953 i_sysun='$i_sysun'
12954 i_syswait='$i_syswait'
12955 i_termio='$i_termio'
12956 i_termios='$i_termios'
12957 i_time='$i_time'
12958 i_unistd='$i_unistd'
12959 i_utime='$i_utime'
12960 i_values='$i_values'
12961 i_varargs='$i_varargs'
12962 i_varhdr='$i_varhdr'
12963 i_vfork='$i_vfork'
12964 ignore_versioned_solibs='$ignore_versioned_solibs'
12965 incpath='$incpath'
12966 inews='$inews'
12967 installarchlib='$installarchlib'
12968 installbin='$installbin'
12969 installman1dir='$installman1dir'
12970 installman3dir='$installman3dir'
12971 installprivlib='$installprivlib'
12972 installscript='$installscript'
12973 installsitearch='$installsitearch'
12974 installsitelib='$installsitelib'
12975 installusrbinperl='$installusrbinperl'
12976 intsize='$intsize'
12977 known_extensions='$known_extensions'
12978 ksh='$ksh'
12979 large='$large'
12980 ld='$ld'
12981 lddlflags='$lddlflags'
12982 ldflags='$ldflags'
12983 less='$less'
12984 lib_ext='$lib_ext'
12985 libc='$libc'
12986 libperl='$libperl'
12987 libpth='$libpth'
12988 libs='$libs'
12989 libswanted='$libswanted'
12990 line='$line'
12991 lint='$lint'
12992 lkflags='$lkflags'
12993 ln='$ln'
12994 lns='$lns'
12995 locincpth='$locincpth'
12996 loclibpth='$loclibpth'
12997 longdblsize='$longdblsize'
12998 longlongsize='$longlongsize'
12999 longsize='$longsize'
13000 lp='$lp'
13001 lpr='$lpr'
13002 ls='$ls'
13003 lseeksize='$lseeksize'
13004 lseektype='$lseektype'
13005 mail='$mail'
13006 mailx='$mailx'
13007 make='$make'
13008 make_set_make='$make_set_make'
13009 mallocobj='$mallocobj'
13010 mallocsrc='$mallocsrc'
13011 malloctype='$malloctype'
13012 man1dir='$man1dir'
13013 man1direxp='$man1direxp'
13014 man1ext='$man1ext'
13015 man3dir='$man3dir'
13016 man3direxp='$man3direxp'
13017 man3ext='$man3ext'
13018 medium='$medium'
13019 mips='$mips'
13020 mips_type='$mips_type'
13021 mkdir='$mkdir'
13022 mmaptype='$mmaptype'
13023 models='$models'
13024 modetype='$modetype'
13025 more='$more'
13026 mv='$mv'
13027 myarchname='$myarchname'
13028 mydomain='$mydomain'
13029 myhostname='$myhostname'
13030 myuname='$myuname'
13031 n='$n'
13032 netdb_hlen_type='$netdb_hlen_type'
13033 netdb_host_type='$netdb_host_type'
13034 netdb_name_type='$netdb_name_type'
13035 netdb_net_type='$netdb_net_type'
13036 nm='$nm'
13037 nm_opt='$nm_opt'
13038 nm_so_opt='$nm_so_opt'
13039 nonxs_ext='$nonxs_ext'
13040 nroff='$nroff'
13041 o_nonblock='$o_nonblock'
13042 obj_ext='$obj_ext'
13043 old_pthread_create_joinable='$old_pthread_create_joinable'
13044 optimize='$optimize'
13045 orderlib='$orderlib'
13046 osname='$osname'
13047 osvers='$osvers'
13048 package='$package'
13049 pager='$pager'
13050 passcat='$passcat'
13051 patchlevel='$patchlevel'
13052 path_sep='$path_sep'
13053 perl='$perl'
13054 perladmin='$perladmin'
13055 perlpath='$perlpath'
13056 pg='$pg'
13057 phostname='$phostname'
13058 pidtype='$pidtype'
13059 plibpth='$plibpth'
13060 pmake='$pmake'
13061 pr='$pr'
13062 prefix='$prefix'
13063 prefixexp='$prefixexp'
13064 privlib='$privlib'
13065 privlibexp='$privlibexp'
13066 prototype='$prototype'
13067 ptrsize='$ptrsize'
13068 randbits='$randbits'
13069 randfunc='$randfunc'
13070 randseedtype='$randseedtype'
13071 ranlib='$ranlib'
13072 rd_nodata='$rd_nodata'
13073 rm='$rm'
13074 rmail='$rmail'
13075 runnm='$runnm'
13076 sched_yield='$sched_yield'
13077 scriptdir='$scriptdir'
13078 scriptdirexp='$scriptdirexp'
13079 sed='$sed'
13080 seedfunc='$seedfunc'
13081 selectminbits='$selectminbits'
13082 selecttype='$selecttype'
13083 sendmail='$sendmail'
13084 sh='$sh'
13085 shar='$shar'
13086 sharpbang='$sharpbang'
13087 shmattype='$shmattype'
13088 shortsize='$shortsize'
13089 shrpenv='$shrpenv'
13090 shsharp='$shsharp'
13091 sig_name='$sig_name'
13092 sig_name_init='$sig_name_init'
13093 sig_num='$sig_num'
13094 sig_num_init='$sig_num_init'
13095 signal_t='$signal_t'
13096 sitearch='$sitearch'
13097 sitearchexp='$sitearchexp'
13098 sitelib='$sitelib'
13099 sitelibexp='$sitelibexp'
13100 sizetype='$sizetype'
13101 sleep='$sleep'
13102 smail='$smail'
13103 small='$small'
13104 so='$so'
13105 sockethdr='$sockethdr'
13106 socketlib='$socketlib'
13107 sort='$sort'
13108 spackage='$spackage'
13109 spitshell='$spitshell'
13110 split='$split'
13111 src='$src'
13112 ssizetype='$ssizetype'
13113 startperl='$startperl'
13114 startsh='$startsh'
13115 static_ext='$static_ext'
13116 stdchar='$stdchar'
13117 stdio_base='$stdio_base'
13118 stdio_bufsiz='$stdio_bufsiz'
13119 stdio_cnt='$stdio_cnt'
13120 stdio_filbuf='$stdio_filbuf'
13121 stdio_ptr='$stdio_ptr'
13122 strings='$strings'
13123 submit='$submit'
13124 subversion='$subversion'
13125 sysman='$sysman'
13126 tail='$tail'
13127 tar='$tar'
13128 tbl='$tbl'
13129 tee='$tee'
13130 test='$test'
13131 timeincl='$timeincl'
13132 timetype='$timetype'
13133 touch='$touch'
13134 tr='$tr'
13135 trnl='$trnl'
13136 troff='$troff'
13137 uidtype='$uidtype'
13138 uname='$uname'
13139 uniq='$uniq'
13140 use64bits='$use64bits'
13141 usedl='$usedl'
13142 usemultiplicity='$usemultiplicity'
13143 usemymalloc='$usemymalloc'
13144 usenm='$usenm'
13145 useopcode='$useopcode'
13146 useperlio='$useperlio'
13147 useposix='$useposix'
13148 usesfio='$usesfio'
13149 useshrplib='$useshrplib'
13150 usethreads='$usethreads'
13151 usevfork='$usevfork'
13152 usrinc='$usrinc'
13153 uuname='$uuname'
13154 version='$version'
13155 vi='$vi'
13156 voidflags='$voidflags'
13157 xlibpth='$xlibpth'
13158 zcat='$zcat'
13159 zip='$zip'
13160 EOT
13161
13162 : Add in command line options if available
13163 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
13164
13165 : add special variables
13166 $test -f $src/patchlevel.h && \
13167 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
13168 echo "CONFIG=true" >>config.sh
13169
13170 : propagate old symbols
13171 if $test -f UU/config.sh; then
13172         <UU/config.sh sort | uniq >UU/oldconfig.sh
13173         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
13174         sort | uniq -u >UU/oldsyms
13175         set X `cat UU/oldsyms`
13176         shift
13177         case $# in
13178         0) ;;
13179         *)
13180                 cat <<EOM
13181 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
13182 EOM
13183                 echo "# Variables propagated from previous config.sh file." >>config.sh
13184                 for sym in `cat UU/oldsyms`; do
13185                         echo "    Propagating $hint variable "'$'"$sym..."
13186                         eval 'tmp="$'"${sym}"'"'
13187                         echo "$tmp" | \
13188                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
13189                 done
13190                 ;;
13191         esac
13192 fi
13193
13194 : Finish up by extracting the .SH files
13195 case "$alldone" in
13196 exit)
13197         $rm -rf UU
13198         echo "Done."
13199         exit 0
13200         ;;
13201 cont)
13202         ;;
13203 '')
13204         dflt=''
13205         nostick=true
13206         $cat <<EOM
13207
13208 If you'd like to make any changes to the config.sh file before I begin
13209 to configure things, do it as a shell escape now (e.g. !vi config.sh).
13210
13211 EOM
13212         rp="Press return or use a shell escape to edit config.sh:"
13213         . UU/myread
13214         nostick=''
13215         case "$ans" in
13216         '') ;;
13217         *) : in case they cannot read
13218                 sh 1>&4 -c "$ans";;
13219         esac
13220         ;;
13221 esac
13222
13223 : if this fails, just run all the .SH files by hand
13224 . ./config.sh
13225
13226 echo " "
13227 exec 1>&4
13228 . ./UU/extract
13229
13230 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
13231         dflt=y
13232         case "$silent" in
13233         true) ;;
13234         *)
13235                 $cat <<EOM
13236
13237 Now you need to generate make dependencies by running "$make depend".
13238 You might prefer to run it in background: "$make depend > makedepend.out &"
13239 It can take a while, so you might not want to run it right now.
13240
13241 EOM
13242                 ;;
13243         esac
13244         rp="Run $make depend now?"
13245         . UU/myread
13246         case "$ans" in
13247         y*)
13248                 $make depend && echo "Now you must run a $make."
13249                 ;;
13250         *)
13251                 echo "You must run '$make depend' then '$make'."
13252                 ;;
13253         esac
13254 elif test -f [Mm]akefile; then
13255         echo " "
13256         echo "Now you must run a $make."
13257 else
13258         echo "Done."
13259 fi
13260
13261 if $test -f Policy.sh; then
13262     $cat <<EOM
13263
13264 If you compile $package on a different machine or from a different object
13265 directory, copy the Policy.sh file from this object directory to the
13266 new one before you run Configure -- this will help you with most of
13267 the policy defaults.
13268
13269 EOM
13270 fi
13271 if $test -f config.msg; then
13272     echo "Hmm.  I also noted the following information while running:"
13273     echo " "
13274     $cat config.msg >&4
13275     $rm -f config.msg
13276 fi
13277 $rm -f kit*isdone ark*isdone
13278 $rm -rf UU
13279
13280 : End of Configure
13281