d359877c0b36c1ca12bdf5da7cc25cf3590127ae
[p5sagit/p5-mst-13.2.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Wed May 12 01:15:37 EET DST 1999 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.com)
25
26 cat >/tmp/c1$$ <<EOF
27 ARGGGHHHH!!!!!
28
29 SCO csh still thinks true is false.  Write to SCO today and tell them that next
30 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
31
32 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
33 we'd have to do is go in and swap the && and || tokens, wherever they are.)
34
35 [End of diatribe. We now return you to your regularly scheduled programming...]
36 EOF
37 cat >/tmp/c2$$ <<EOF
38
39 OOPS!  You naughty creature!  You didn't run Configure with sh!
40 I will attempt to remedy the situation by running sh for you...
41 EOF
42
43 true || cat /tmp/c1$$ /tmp/c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat /tmp/c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f /tmp/c1$$ /tmp/c2$$
49
50 : compute my invocation name
51 me=$0
52 case "$0" in
53 */*)
54         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
55         test "$me" || me=$0
56         ;;
57 esac
58
59 : Proper separator for the PATH environment variable
60 p_=:
61 : On OS/2 this directory should exist if this is not floppy only system :-]
62 if test -d c:/. ; then
63     if test -n "$OS2_SHELL"; then
64                 p_=\;
65                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
66                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
67         elif test -n "$DJGPP"; then
68                 p_=\;
69         fi
70 fi
71
72 : Proper PATH setting
73 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
74 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
75 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
76 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
77 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
78 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
79 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
80 paths="$paths /sbin /usr/sbin /usr/libexec"
81
82 for p in $paths
83 do
84         case "$p_$PATH$p_" in
85         *$p_$p$p_*) ;;
86         *) test -d $p && PATH=$PATH$p_$p ;;
87         esac
88 done
89
90 PATH=.$p_$PATH
91 export PATH
92
93 : shall we be using ksh?
94 inksh=''
95 needksh=''
96 avoidksh=''
97 newsh=/bin/ksh
98 changesh=''
99 if (PATH=.; alias -x) >/dev/null 2>&1; then
100                 inksh=true
101 fi
102 if test -f /hp-ux -a -f /bin/ksh; then
103         needksh='to avoid sh bug in "here document" expansion'
104 fi
105 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
106         if test X`/usr/bin/uname -v` = X4; then
107                 avoidksh="to avoid AIX 4's /bin/sh"
108                 newsh=/usr/bin/bsh
109         fi
110 fi
111 if test -f /osf_boot -a -f /usr/sbin/setld; then
112         if test X`/usr/bin/uname -s` = XOSF1; then
113                 avoidksh="to avoid Digital UNIX' ksh"
114                 newsh=/bin/sh
115                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
116         fi
117 fi
118 case "$inksh/$needksh" in
119 /[a-z]*)
120                 ENV=''
121                 changesh=true
122                 reason="$needksh"
123         ;;
124 esac
125 case "$inksh/$avoidksh" in
126 true/[a-z]*)
127         changesh=true
128         reason="$avoidksh"
129         ;;
130 esac
131 case "$inksh/$needksh-$avoidksh-" in
132 true/--)
133                 cat <<EOM
134 (I see you are using the Korn shell.  Some ksh's blow up on $me,
135 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
136 EOM
137         ;;
138 esac
139 case "$changesh" in
140 true)
141         echo "(Feeding myself to $newsh $reason.)"
142         case "$0" in
143         Configure|*/Configure) exec $newsh $0 "$@";;
144         *) exec $newsh Configure "$@";;
145         esac
146         ;;
147 esac
148
149 : if needed set CDPATH to a harmless value that is not chatty
150 : avoid bash 2.02 problems with empty CDPATH.
151 case "$CDPATH" in
152 '')     ;;
153 *)      case "$SHELL" in
154         *bash*) CDPATH='.' ;;
155         *)              CDPATH='' ;;
156         esac
157         ;;
158 esac
159 : Configure runs within the UU subdirectory
160 test -d UU || mkdir UU
161 cd UU && rm -f ./*
162
163 ccsymbols=''
164 cppccsymbols=''
165 cppsymbols=''
166 dynamic_ext=''
167 extensions=''
168 known_extensions=''
169 nonxs_ext=''
170 static_ext=''
171 useopcode=''
172 useposix=''
173 d_bsd=''
174 d_eunice=''
175 d_xenix=''
176 eunicefix=''
177 Mcc=''
178 ar=''
179 awk=''
180 bash=''
181 bison=''
182 byacc=''
183 cat=''
184 chgrp=''
185 chmod=''
186 chown=''
187 comm=''
188 compress=''
189 cp=''
190 cpio=''
191 cpp=''
192 csh=''
193 date=''
194 echo=''
195 egrep=''
196 emacs=''
197 expr=''
198 find=''
199 flex=''
200 grep=''
201 gzip=''
202 inews=''
203 ksh=''
204 less=''
205 line=''
206 lint=''
207 ln=''
208 lp=''
209 lpr=''
210 ls=''
211 mail=''
212 mailx=''
213 make=''
214 mkdir=''
215 more=''
216 mv=''
217 nm=''
218 nroff=''
219 perl=''
220 pg=''
221 pmake=''
222 pr=''
223 rm=''
224 rmail=''
225 sed=''
226 sendmail=''
227 shar=''
228 sleep=''
229 smail=''
230 sort=''
231 submit=''
232 tail=''
233 tar=''
234 tbl=''
235 tee=''
236 test=''
237 touch=''
238 tr=''
239 troff=''
240 uname=''
241 uniq=''
242 uuname=''
243 vi=''
244 zcat=''
245 zip=''
246 full_ar=''
247 full_sed=''
248 libswanted=''
249 hint=''
250 myuname=''
251 osname=''
252 osvers=''
253 Author=''
254 Date=''
255 Header=''
256 Id=''
257 Locker=''
258 Log=''
259 RCSfile=''
260 Revision=''
261 Source=''
262 State=''
263 _a=''
264 _exe=''
265 _o=''
266 archobjs=''
267 exe_ext=''
268 firstmakefile=''
269 lib_ext=''
270 obj_ext=''
271 path_sep=''
272 afs=''
273 alignbytes=''
274 ansi2knr=''
275 archlib=''
276 archlibexp=''
277 d_archlib=''
278 installarchlib=''
279 archname=''
280 myarchname=''
281 baserev=''
282 bin=''
283 binexp=''
284 installbin=''
285 byteorder=''
286 cc=''
287 gccversion=''
288 ccflags=''
289 cppflags=''
290 ldflags=''
291 lkflags=''
292 locincpth=''
293 optimize=''
294 cf_email=''
295 cf_by=''
296 cf_time=''
297 contains=''
298 cpp_stuff=''
299 cpplast=''
300 cppminus=''
301 cpprun=''
302 cppstdin=''
303 crosscompile=''
304 d_access=''
305 d_accessx=''
306 d_alarm=''
307 d_attribut=''
308 d_bcmp=''
309 d_bcopy=''
310 d_bzero=''
311 d_casti32=''
312 castflags=''
313 d_castneg=''
314 d_chown=''
315 d_chroot=''
316 d_chsize=''
317 d_closedir=''
318 d_void_closedir=''
319 d_const=''
320 cryptlib=''
321 d_crypt=''
322 d_csh=''
323 full_csh=''
324 d_cuserid=''
325 d_dbl_dig=''
326 d_difftime=''
327 d_dlerror=''
328 d_dlopen=''
329 d_dlsymun=''
330 d_dosuid=''
331 d_suidsafe=''
332 d_drand48proto=''
333 d_dup2=''
334 d_eaccess=''
335 d_endgrent=''
336 d_endhent=''
337 d_endnent=''
338 d_endpent=''
339 d_endpwent=''
340 d_endsent=''
341 d_fchmod=''
342 d_fchown=''
343 d_fcntl=''
344 d_fd_macros=''
345 d_fd_set=''
346 d_fds_bits=''
347 d_fgetpos=''
348 d_flexfnam=''
349 d_flock=''
350 d_fork=''
351 d_fseeko=''
352 d_fsetpos=''
353 d_ftello=''
354 d_ftime=''
355 d_gettimeod=''
356 d_Gconvert=''
357 d_getgrent=''
358 d_getgrps=''
359 d_gethbyaddr=''
360 d_gethbyname=''
361 d_gethent=''
362 aphostname=''
363 d_gethname=''
364 d_phostname=''
365 d_uname=''
366 d_gethostprotos=''
367 d_getlogin=''
368 d_getmntent=''
369 d_getnbyaddr=''
370 d_getnbyname=''
371 d_getnent=''
372 d_getnetprotos=''
373 d_getpent=''
374 d_getpgid=''
375 d_getpgrp2=''
376 d_bsdgetpgrp=''
377 d_getpgrp=''
378 d_getppid=''
379 d_getprior=''
380 d_getpbyname=''
381 d_getpbynumber=''
382 d_getprotoprotos=''
383 d_getpwent=''
384 d_getsent=''
385 d_getservprotos=''
386 d_getsbyname=''
387 d_getsbyport=''
388 d_gnulibc=''
389 d_hasmntopt=''
390 d_htonl=''
391 d_inetaton=''
392 d_isascii=''
393 d_killpg=''
394 d_lchown=''
395 d_link=''
396 d_locconv=''
397 d_lockf=''
398 d_longdbl=''
399 longdblsize=''
400 d_longlong=''
401 longlongsize=''
402 d_lstat=''
403 d_madvise=''
404 d_mblen=''
405 d_mbstowcs=''
406 d_mbtowc=''
407 d_memcmp=''
408 d_memcpy=''
409 d_memmove=''
410 d_memset=''
411 d_mkdir=''
412 d_mkfifo=''
413 d_mktime=''
414 d_mmap=''
415 mmaptype=''
416 d_mprotect=''
417 d_msg=''
418 d_msgctl=''
419 d_msgget=''
420 d_msgrcv=''
421 d_msgsnd=''
422 d_msync=''
423 d_munmap=''
424 d_nice=''
425 d_open3=''
426 d_fpathconf=''
427 d_pathconf=''
428 d_pause=''
429 d_pipe=''
430 d_poll=''
431 d_portable=''
432 d_old_pthread_create_joinable=''
433 old_pthread_create_joinable=''
434 d_pthread_yield=''
435 d_sched_yield=''
436 sched_yield=''
437 d_readdir=''
438 d_rewinddir=''
439 d_seekdir=''
440 d_telldir=''
441 d_readlink=''
442 d_readv=''
443 d_rename=''
444 d_rmdir=''
445 d_safebcpy=''
446 d_safemcpy=''
447 d_sanemcmp=''
448 d_select=''
449 d_sem=''
450 d_semctl=''
451 d_semget=''
452 d_semop=''
453 d_setegid=''
454 d_seteuid=''
455 d_setgrent=''
456 d_setgrps=''
457 d_sethent=''
458 d_setlinebuf=''
459 d_setlocale=''
460 d_setnent=''
461 d_setpent=''
462 d_setpgid=''
463 d_setpgrp2=''
464 d_bsdsetpgrp=''
465 d_setpgrp=''
466 d_setprior=''
467 d_setpwent=''
468 d_setregid=''
469 d_setresgid=''
470 d_setresuid=''
471 d_setreuid=''
472 d_setrgid=''
473 d_setruid=''
474 d_setsent=''
475 d_setsid=''
476 d_setvbuf=''
477 d_sfio=''
478 usesfio=''
479 d_shm=''
480 d_shmat=''
481 d_shmatprototype=''
482 shmattype=''
483 d_shmctl=''
484 d_shmdt=''
485 d_shmget=''
486 d_sigaction=''
487 d_sigsetjmp=''
488 d_cmsghdr_s=''
489 d_msg_ctrunc=''
490 d_msg_dontroute=''
491 d_msg_oob=''
492 d_msg_peek=''
493 d_msg_proxy=''
494 d_msghdr_s=''
495 d_oldsock=''
496 d_recvmsg=''
497 d_scm_rights=''
498 d_sendmsg=''
499 d_socket=''
500 d_sockpair=''
501 sockethdr=''
502 socketlib=''
503 d_statblks=''
504 d_fstatfs=''
505 d_statfs=''
506 d_statfsflags=''
507 d_fstatvfs=''
508 d_statvfs=''
509 d_stdio_cnt_lval=''
510 d_stdio_ptr_lval=''
511 d_stdiobase=''
512 d_stdstdio=''
513 stdio_base=''
514 stdio_bufsiz=''
515 stdio_cnt=''
516 stdio_filbuf=''
517 stdio_ptr=''
518 d_index=''
519 d_strchr=''
520 d_strcoll=''
521 d_strctcpy=''
522 d_strerrm=''
523 d_strerror=''
524 d_sysernlst=''
525 d_syserrlst=''
526 d_strtod=''
527 d_strtol=''
528 d_strtoul=''
529 d_strxfrm=''
530 d_symlink=''
531 d_syscall=''
532 d_sysconf=''
533 d_system=''
534 d_tcgetpgrp=''
535 d_tcsetpgrp=''
536 d_telldirproto=''
537 d_time=''
538 timetype=''
539 clocktype=''
540 d_times=''
541 d_truncate=''
542 d_tzname=''
543 d_umask=''
544 d_semctl_semid_ds=''
545 d_semctl_semun=''
546 d_union_semun=''
547 d_vfork=''
548 usevfork=''
549 d_voidsig=''
550 signal_t=''
551 d_volatile=''
552 d_charvspr=''
553 d_vprintf=''
554 d_wait4=''
555 d_waitpid=''
556 d_wcstombs=''
557 d_wctomb=''
558 d_writev=''
559 d_dbmclose64=''
560 d_dbminit64=''
561 d_delete64=''
562 d_fetch64=''
563 d_firstkey64=''
564 d_nextkey64=''
565 d_store64=''
566 dlext=''
567 cccdlflags=''
568 ccdlflags=''
569 dlsrc=''
570 ld=''
571 lddlflags=''
572 usedl=''
573 doublesize=''
574 ebcdic=''
575 fpostype=''
576 gidtype=''
577 groupstype=''
578 h_fcntl=''
579 h_sysfile=''
580 i_arpainet=''
581 db_hashtype=''
582 db_prefixtype=''
583 i_db=''
584 i_dbm=''
585 i_rpcsvcdbm=''
586 d_dirnamlen=''
587 direntrytype=''
588 i_dirent=''
589 i_dld=''
590 i_dlfcn=''
591 i_fcntl=''
592 i_float=''
593 i_gdbm=''
594 d_grpasswd=''
595 i_grp=''
596 d_int64t=''
597 i_inttypes=''
598 i_limits=''
599 i_locale=''
600 i_machcthr=''
601 i_malloc=''
602 i_math=''
603 i_memory=''
604 i_mntent=''
605 i_ndbm=''
606 i_netdb=''
607 i_neterrno=''
608 i_netinettcp=''
609 i_niin=''
610 i_sysin=''
611 i_poll=''
612 i_pthread=''
613 d_pwage=''
614 d_pwchange=''
615 d_pwclass=''
616 d_pwcomment=''
617 d_pwexpire=''
618 d_pwgecos=''
619 d_pwpasswd=''
620 d_pwquota=''
621 i_pwd=''
622 i_sfio=''
623 i_stddef=''
624 i_stdlib=''
625 i_string=''
626 strings=''
627 i_sysaccess=''
628 i_sysdir=''
629 i_sysfile=''
630 d_voidtty=''
631 i_bsdioctl=''
632 i_sysfilio=''
633 i_sysioctl=''
634 i_syssockio=''
635 i_sysmman=''
636 i_sysmount=''
637 i_sysndir=''
638 i_sysparam=''
639 i_sysresrc=''
640 i_syssecrt=''
641 i_sysselct=''
642 i_sysstat=''
643 i_sysstatvfs=''
644 i_systimes=''
645 i_systypes=''
646 d_iovec_s=''
647 i_sysuio=''
648 i_sysun=''
649 i_syswait=''
650 i_sgtty=''
651 i_termio=''
652 i_termios=''
653 i_systime=''
654 i_systimek=''
655 i_time=''
656 timeincl=''
657 i_unistd=''
658 i_utime=''
659 i_values=''
660 i_stdarg=''
661 i_varargs=''
662 i_varhdr=''
663 i_vfork=''
664 installusrbinperl=''
665 intsize=''
666 longsize=''
667 shortsize=''
668 d_dirent64_s=''
669 d_flock64_s=''
670 d_fstat64=''
671 d_ftruncate64=''
672 d_ino64_t=''
673 d_llseek=''
674 d_lockf64=''
675 d_lseek64=''
676 d_lstat64=''
677 d_off64_t=''
678 d_offset_t=''
679 d_open64=''
680 d_opendir64=''
681 d_readdir64=''
682 d_seekdir64=''
683 d_stat64=''
684 d_telldir64=''
685 d_truncate64=''
686 libc=''
687 libperl=''
688 shrpenv=''
689 useshrplib=''
690 glibpth=''
691 libpth=''
692 loclibpth=''
693 plibpth=''
694 xlibpth=''
695 ignore_versioned_solibs=''
696 libs=''
697 lns=''
698 lseeksize=''
699 lseektype=''
700 make_set_make=''
701 d_mymalloc=''
702 freetype=''
703 mallocobj=''
704 mallocsrc=''
705 malloctype=''
706 usemymalloc=''
707 installman1dir=''
708 man1dir=''
709 man1direxp=''
710 man1ext=''
711 installman3dir=''
712 man3dir=''
713 man3direxp=''
714 man3ext=''
715 huge=''
716 large=''
717 medium=''
718 models=''
719 small=''
720 split=''
721 modetype=''
722 multiarch=''
723 mydomain=''
724 myhostname=''
725 phostname=''
726 c=''
727 n=''
728 d_eofnblk=''
729 eagain=''
730 o_nonblock=''
731 rd_nodata=''
732 netdb_hlen_type=''
733 netdb_host_type=''
734 netdb_name_type=''
735 netdb_net_type=''
736 groupcat=''
737 hostcat=''
738 passcat=''
739 orderlib=''
740 ranlib=''
741 package=''
742 spackage=''
743 pager=''
744 apiversion=''
745 patchlevel=''
746 subversion=''
747 version=''
748 perladmin=''
749 perlpath=''
750 pidtype=''
751 prefix=''
752 prefixexp=''
753 installprivlib=''
754 privlib=''
755 privlibexp=''
756 prototype=''
757 ptrsize=''
758 drand01=''
759 randbits=''
760 randfunc=''
761 randseedtype=''
762 seedfunc=''
763 installscript=''
764 scriptdir=''
765 scriptdirexp=''
766 selectminbits=''
767 selecttype=''
768 sh=''
769 sig_count=''
770 sig_name=''
771 sig_name_init=''
772 sig_num=''
773 sig_num_init=''
774 installsitearch=''
775 sitearch=''
776 sitearchexp=''
777 installsitelib=''
778 sitelib=''
779 sitelibexp=''
780 sizetype=''
781 so=''
782 sharpbang=''
783 shsharp=''
784 spitshell=''
785 src=''
786 ssizetype=''
787 startperl=''
788 startsh=''
789 stdchar=''
790 d_fgetpos64=''
791 d_fopen64=''
792 d_freopen64=''
793 d_fseek64=''
794 d_fseeko64=''
795 d_fsetpos64=''
796 d_ftell64=''
797 d_ftello64=''
798 d_tmpfile64=''
799 sysman=''
800 trnl=''
801 uidtype=''
802 archname64=''
803 use64bits=''
804 usemultiplicity=''
805 nm_opt=''
806 nm_so_opt=''
807 runnm=''
808 usenm=''
809 useperlio=''
810 d_oldpthreads=''
811 usethreads=''
812 incpath=''
813 mips=''
814 mips_type=''
815 usrinc=''
816 defvoidused=''
817 voidflags=''
818 CONFIG=''
819
820 define='define'
821 undef='undef'
822 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
823 rmlist=''
824
825 : We must find out about Eunice early
826 eunicefix=':'
827 if test -f /etc/unixtovms; then
828         eunicefix=/etc/unixtovms
829 fi
830 if test -f /etc/unixtovms.exe; then
831         eunicefix=/etc/unixtovms.exe
832 fi
833
834 i_whoami=''
835 : Possible local include directories to search.
836 : Set locincpth to "" in a hint file to defeat local include searches.
837 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
838 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
839 :
840 : no include file wanted by default
841 inclwanted=''
842
843 : list of known cpp symbols, sorted alphabetically
844 al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
845 al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
846 al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
847 al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
848 al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
849 al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
850 al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
851 al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
852 al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
853 al="$al VMS Xenix286"
854 al="$al _AIX _AIX32 _AIX370 _AIX41 _AM29000 _COFF _CRAY _CX_UX _EPI"
855 al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET _POWER"
856 al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
857 al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
858 al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
859 al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
860 al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
861 al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
862 al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
863 al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
864 al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
865 al="$al __SVR4_2__ __UMAXV__"
866 al="$al ____386BSD____ __alpha __alpha__ __amiga"
867 al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
868 al="$al __host_mips__"
869 al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
870 al="$al __hp9000s500 __hp9000s700 __hp9000s800"
871 al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
872 al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
873 al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
874 al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
875 al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
876 al="$al __mc88100 __mc88100__ __mips __mips__"
877 al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
878 al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
879 al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
880 al="$al _host_mips _mips _unix"
881 al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
882 al="$al apollo ardent att386 att3b"
883 al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
884 al="$al cadmus clipper concurrent convex cray ctix"
885 al="$al dmert encore gcos gcx gimpel gould"
886 al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
887 al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
888 al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
889 al="$al i186 i286 i386 i486 i8086"
890 al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
891 al="$al ksr1 linux luna luna88k m68k m88100 m88k"
892 al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
893 al="$al mc68040 mc68060 mc68k mc68k32 mc700"
894 al="$al mc88000 mc88100 merlin mert mips mvs n16"
895 al="$al ncl_el ncl_mr"
896 al="$al news1500 news1700 news1800 news1900 news3700"
897 al="$al news700 news800 news900 ns16000 ns32000"
898 al="$al ns32016 ns32332 ns32k nsc32000 os osf"
899 al="$al parisc pc532 pdp11 plexus posix pyr"
900 al="$al riscix riscos scs sequent sgi sinix sony sony_news"
901 al="$al sonyrisc sparc sparclite spectrum stardent stratos"
902 al="$al sun sun3 sun386 svr4 sysV68 sysV88"
903 al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
904 al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
905 al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
906 al="$al xenix z8000"
907
908 : Trailing extension.  Override this in a hint file, if needed.
909 _exe=''
910 : Extra object files, if any, needed on this platform.
911 archobjs=''
912 groupstype=''
913 : change the next line if compiling for Xenix/286 on Xenix/386
914 xlibpth='/usr/lib/386 /lib/386'
915
916 : Possible local library directories to search.
917 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
918 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
919
920 : general looking path for locating libraries
921 glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
922 glibpth="$glibpth /lib /usr/lib $xlibpth"
923 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
924 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
925
926 : Private path used by Configure to find libraries.  Its value
927 : is prepended to libpth. This variable takes care of special
928 : machines, like the mips.  Usually, it should be empty.
929 plibpth=''
930
931 : default library list
932 libswanted=''
933 : some systems want to use only the non-versioned libso:s
934 ignore_versioned_solibs=''
935 : full support for void wanted by default
936 defvoidused=15
937
938 : set useposix=false in your hint file to disable the POSIX extension.
939 useposix=true
940 : set useopcode=false in your hint file to disable the Opcode extension.
941 useopcode=true
942 : set usemultiplicity on the Configure command line to enable multiplicity.
943 : set usethreads on the Configure command line to enable threads.
944 : List of libraries we want.
945 : If anyone needs -lnet, put it in a hint file.
946 libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
947 libswanted="$libswanted dld ld sun m rt c cposix posix"
948 libswanted="$libswanted ndir dir crypt"
949 libswanted="$libswanted ucb bsd BSD PW x"
950 : We probably want to search /usr/shlib before most other libraries.
951 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
952 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
953 glibpth="/usr/shlib $glibpth"
954 : Do not use vfork unless overridden by a hint file.
955 usevfork=false
956
957 : Find the basic shell for Bourne shell scripts
958 case "$sh" in
959 '')
960         case "$SYSTYPE" in
961         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
962         *) xxx='/bin/sh';;
963         esac
964         if test -f "$xxx"; then
965                 sh="$xxx"
966         else
967                 : Build up a list and do a single loop so we can 'break' out.
968                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
969                 for xxx in sh bash ksh pdksh ash; do
970                         for p in $pth; do
971                                 try="$try ${p}/${xxx}"
972                         done
973                 done
974                 for xxx in $try; do
975                         if test -f "$xxx"; then
976                                 sh="$xxx";
977                                 break
978                         elif test -f "$xxx.exe"; then
979                                 sh="$xxx";
980                                 break
981                         fi
982                 done
983         fi
984         ;;
985 esac
986
987 case "$sh" in
988 '')     cat <<EOM >&2
989 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
990
991 Usually it's in /bin/sh.  How did you even get this far?
992 Please contact me (Perl Maintainers) at perlbug@perl.com and 
993 we'll try to straighten this all out.
994 EOM
995         exit 1
996         ;;
997 esac
998
999 : see if sh knows # comments
1000 if `$sh -c '#' >/dev/null 2>&1`; then
1001         shsharp=true
1002         spitshell=cat
1003         xcat=/bin/cat
1004         test -f $xcat || xcat=/usr/bin/cat
1005         echo "#!$xcat" >try
1006         $eunicefix try
1007         chmod +x try
1008         ./try > today
1009         if test -s today; then
1010                 sharpbang='#!'
1011         else
1012                 echo "#! $xcat" > try
1013                 $eunicefix try
1014                 chmod +x try
1015                 ./try > today
1016                 if test -s today; then
1017                         sharpbang='#! '
1018                 else
1019                         sharpbang=': use '
1020                 fi
1021         fi
1022 else
1023         echo " "
1024         echo "Your $sh doesn't grok # comments--I will strip them later on."
1025         shsharp=false
1026         cd ..
1027         echo "exec grep -v '^[  ]*#'" >spitshell
1028         chmod +x spitshell
1029         $eunicefix spitshell
1030         spitshell=`pwd`/spitshell
1031         cd UU
1032         echo "I presume that if # doesn't work, #! won't work either!"
1033         sharpbang=': use '
1034 fi
1035 rm -f try today
1036
1037 : figure out how to guarantee sh startup
1038 case "$startsh" in
1039 '') startsh=${sharpbang}${sh} ;;
1040 *)
1041 esac
1042 cat >try <<EOSS
1043 $startsh
1044 set abc
1045 test "$?abc" != 1
1046 EOSS
1047
1048 chmod +x try
1049 $eunicefix try
1050 if ./try; then
1051         : echo "Yup, it does."
1052 else
1053         echo "Hmm... '$startsh' does not guarantee sh startup..."
1054         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1055 fi
1056 rm -f try
1057
1058
1059 : Save command line options in file UU/cmdline.opt for later use in
1060 : generating config.sh.
1061 cat > cmdline.opt <<EOSH
1062 # Configure command line arguments.
1063 config_arg0='$0'
1064 config_args='$*'
1065 config_argc=$#
1066 EOSH
1067 argn=1
1068 for arg in "$@"; do
1069         cat >>cmdline.opt <<EOSH
1070 config_arg$argn='$arg'
1071 EOSH
1072         argn=`expr $argn + 1`
1073 done
1074
1075 : produce awk script to parse command line options
1076 cat >options.awk <<'EOF'
1077 BEGIN {
1078         optstr = "dD:eEf:hKOrsSU:V";    # getopt-style specification
1079
1080         len = length(optstr);
1081         for (i = 1; i <= len; i++) {
1082                 c = substr(optstr, i, 1);
1083                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1084                 if (a == ":") {
1085                         arg[c] = 1;
1086                         i++;
1087                 }
1088                 opt[c] = 1;
1089         }
1090 }
1091 {
1092         expect = 0;
1093         str = $0;
1094         if (substr(str, 1, 1) != "-") {
1095                 printf("'%s'\n", str);
1096                 next;
1097         }
1098         len = length($0);
1099         for (i = 2; i <= len; i++) {
1100                 c = substr(str, i, 1);
1101                 if (!opt[c]) {
1102                         printf("-%s\n", substr(str, i));
1103                         next;
1104                 }
1105                 printf("-%s\n", c);
1106                 if (arg[c]) {
1107                         if (i < len)
1108                                 printf("'%s'\n", substr(str, i + 1));
1109                         else
1110                                 expect = 1;
1111                         next;
1112                 }
1113         }
1114 }
1115 END {
1116         if (expect)
1117                 print "?";
1118 }
1119 EOF
1120
1121 : process the command line options
1122 set X `for arg in "$@"; do echo "X$arg"; done |
1123         sed -e s/X// | awk -f options.awk`
1124 eval "set $*"
1125 shift
1126 rm -f options.awk
1127
1128 : set up default values
1129 fastread=''
1130 reuseval=false
1131 config_sh=''
1132 alldone=''
1133 error=''
1134 silent=''
1135 extractsh=''
1136 override=''
1137 knowitall=''
1138 rm -f optdef.sh
1139 cat >optdef.sh <<EOS
1140 $startsh
1141 EOS
1142
1143
1144 : option parsing
1145 while test $# -gt 0; do
1146         case "$1" in
1147         -d) shift; fastread=yes;;
1148         -e) shift; alldone=cont;;
1149         -f)
1150                 shift
1151                 cd ..
1152                 if test -r "$1"; then
1153                         config_sh="$1"
1154                 else
1155                         echo "$me: cannot read config file $1." >&2
1156                         error=true
1157                 fi
1158                 cd UU
1159                 shift;;
1160         -h) shift; error=true;;
1161         -r) shift; reuseval=true;;
1162         -s) shift; silent=true; realsilent=true;;
1163         -E) shift; alldone=exit;;
1164         -K) shift; knowitall=true;;
1165         -O) shift; override=true;;
1166         -S) shift; silent=true; extractsh=true;;
1167         -D)
1168                 shift
1169                 case "$1" in
1170                 *=)
1171                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1172                         echo "$me: ignoring -D $1" >&2
1173                         ;;
1174                 *=*) echo "$1" | \
1175                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1176                 *) echo "$1='define'" >> optdef.sh;;
1177                 esac
1178                 shift
1179                 ;;
1180         -U)
1181                 shift
1182                 case "$1" in
1183                 *=) echo "$1" >> optdef.sh;;
1184                 *=*)
1185                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1186                         echo "$me: ignoring -U $1" >&2
1187                         ;;
1188                 *) echo "$1='undef'" >> optdef.sh;;
1189                 esac
1190                 shift
1191                 ;;
1192         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1193                 exit 0;;
1194         --) break;;
1195         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1196         *) break;;
1197         esac
1198 done
1199
1200 case "$error" in
1201 true)
1202         cat >&2 <<EOM
1203 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1204                  [-U symbol] [-U symbol=]
1205   -d : use defaults for all answers.
1206   -e : go on without questioning past the production of config.sh.
1207   -f : specify an alternate default configuration file.
1208   -h : print this help message and exit (with an error status).
1209   -r : reuse C symbols value if possible (skips costly nm extraction).
1210   -s : silent mode, only echoes questions and essential information.
1211   -D : define symbol to have some value:
1212          -D symbol         symbol gets the value 'define'
1213          -D symbol=value   symbol gets the value 'value'
1214   -E : stop at the end of questions, after having produced config.sh.
1215   -K : do not use unless you know what you are doing.
1216   -O : let -D and -U override definitions from loaded configuration file.
1217   -S : perform variable substitutions on all .SH files (can mix with -f)
1218   -U : undefine symbol:
1219          -U symbol    symbol gets the value 'undef'
1220          -U symbol=   symbol gets completely empty
1221   -V : print version number and exit (with a zero status).
1222 EOM
1223         exit 1
1224         ;;
1225 esac
1226
1227 : Sanity checks
1228 case "$fastread$alldone" in
1229 yescont|yesexit) ;;
1230 *)
1231         if test ! -t 0; then
1232                 echo "Say 'sh Configure', not 'sh <Configure'"
1233                 exit 1
1234         fi
1235         ;;
1236 esac
1237
1238 exec 4>&1
1239 case "$silent" in
1240 true) exec 1>/dev/null;;
1241 esac
1242
1243 : run the defines and the undefines, if any, but leave the file out there...
1244 touch optdef.sh
1245 . ./optdef.sh
1246
1247 : set package name
1248 package=perl5
1249 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1250 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1251 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1252 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1253 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1254 esac
1255
1256 : Some greps do not return status, grrr.
1257 echo "grimblepritz" >grimble
1258 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1259         contains=contains
1260 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1261         contains=grep
1262 else
1263         contains=contains
1264 fi
1265 rm -f grimble
1266 : the following should work in any shell
1267 case "$contains" in
1268 contains*)
1269         echo " "
1270         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1271         cat >contains <<'EOSS'
1272 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1273 EOSS
1274 chmod +x contains
1275 esac
1276
1277 : Find the path to the source tree
1278 case "$src" in
1279 '') case "$0" in
1280     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`;;
1281     *)   src='.';;
1282     esac;;
1283 esac
1284 case "$src" in
1285 '')     src=/
1286         rsrc=/
1287         ;;
1288 /*) rsrc="$src";;
1289 *) rsrc="../$src";;
1290 esac
1291 if test -f $rsrc/Configure && \
1292         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1293 then
1294    : found it, so we are ok.
1295 else
1296         rsrc=''
1297         for src in . .. ../.. ../../.. ../../../..; do
1298                 if test -f ../$src/Configure && \
1299                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1300                 then
1301                         rsrc=../$src
1302                         break
1303                 fi
1304         done
1305 fi
1306 case "$rsrc" in
1307 '')
1308         cat <<EOM >&4
1309
1310 Sorry, I can't seem to locate the source dir for $package.  Please start
1311 Configure with an explicit path -- i.e. /some/path/Configure.
1312
1313 EOM
1314         exit 1
1315         ;;
1316 ../.)   rsrc='..';;
1317 *)
1318         echo " "
1319         echo "Sources for $package found in \"$src\"." >&4
1320         ;;
1321 esac
1322
1323 : script used to extract .SH files with variable substitutions
1324 cat >extract <<'EOS'
1325 CONFIGDOTSH=true
1326 echo "Doing variable substitutions on .SH files..."
1327 if test -f $src/MANIFEST; then
1328         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1329 else
1330         echo "(Looking for .SH files under the source directory.)"
1331         set x `(cd $src; find . -name "*.SH" -print)`
1332 fi
1333 shift
1334 case $# in
1335 0) set x `(cd $src; echo *.SH)`; shift;;
1336 esac
1337 if test ! -f $src/$1; then
1338         shift
1339 fi
1340 mkdir_p='
1341 name=$1;
1342 create="";
1343 while test $name; do
1344         if test ! -d "$name"; then
1345                 create="$name $create";
1346                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1347                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1348         else
1349                 name="";
1350         fi;
1351 done;
1352 for file in $create; do
1353         mkdir $file;
1354 done
1355 '
1356 for file in $*; do
1357         case "$src" in
1358         ".")
1359                 case "$file" in
1360                 */*)
1361                         dir=`expr X$file : 'X\(.*\)/'`
1362                         file=`expr X$file : 'X.*/\(.*\)'`
1363                         (cd $dir && . ./$file)
1364                         ;;
1365                 *)
1366                         . ./$file
1367                         ;;
1368                 esac
1369                 ;;
1370         *)
1371                 case "$file" in
1372                 */*)
1373                         dir=`expr X$file : 'X\(.*\)/'`
1374                         file=`expr X$file : 'X.*/\(.*\)'`
1375                         (set x $dir; shift; eval $mkdir_p)
1376                         sh <$src/$dir/$file
1377                         ;;
1378                 *)
1379                         sh <$src/$file
1380                         ;;
1381                 esac
1382                 ;;
1383         esac
1384 done
1385 if test -f $src/config_h.SH; then
1386         if test ! -f config.h; then
1387         : oops, they left it out of MANIFEST, probably, so do it anyway.
1388         . $src/config_h.SH
1389         fi
1390 fi
1391 EOS
1392
1393 : extract files and exit if asked to do so
1394 case "$extractsh" in
1395 true)
1396         case "$realsilent" in
1397         true) ;;
1398         *) exec 1>&4;;
1399         esac
1400         case "$config_sh" in
1401         '') config_sh='config.sh';;
1402         esac
1403         echo " "
1404         echo "Fetching answers from $config_sh..."
1405         cd ..
1406         . $config_sh
1407         test "$override" && . ./optdef.sh
1408         echo " "
1409         . UU/extract
1410         rm -rf UU
1411         echo "Done."
1412         exit 0
1413         ;;
1414 esac
1415
1416 : Eunice requires " " instead of "", can you believe it
1417 echo " "
1418 : Here we go...
1419 echo "Beginning of configuration questions for $package."
1420
1421 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1422
1423 : first determine how to suppress newline on echo command
1424 echo " "
1425 echo "Checking echo to see how to suppress newlines..."
1426 (echo "hi there\c" ; echo " ") >.echotmp
1427 if $contains c .echotmp >/dev/null 2>&1 ; then
1428         echo "...using -n."
1429         n='-n'
1430         c=''
1431 else
1432         cat <<'EOM'
1433 ...using \c
1434 EOM
1435         n=''
1436         c='\c'
1437 fi
1438 echo $n "The star should be here-->$c"
1439 echo '*'
1440 rm -f .echotmp
1441
1442 : Now test for existence of everything in MANIFEST
1443 echo " "
1444 if test -f $rsrc/MANIFEST; then
1445         echo "First let's make sure your kit is complete.  Checking..." >&4
1446         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1447         rm -f missing
1448         tmppwd=`pwd`
1449         for filelist in x??; do
1450                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1451         done
1452         if test -s missing; then
1453                 cat missing >&4
1454                 cat >&4 <<'EOM'
1455
1456 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1457
1458 You have the option of continuing the configuration process, despite the
1459 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1460 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1461 and contact the author (perlbug@perl.com).
1462
1463 EOM
1464                 echo $n "Continue? [n] $c" >&4
1465                 read ans
1466                 case "$ans" in
1467                 y*)
1468                         echo "Continuing..." >&4
1469                         rm -f missing
1470                         ;;
1471                 *)
1472                         echo "ABORTING..." >&4
1473                         kill $$
1474                         ;;
1475                 esac
1476         else
1477                 echo "Looks good..."
1478         fi
1479 else
1480         echo "There is no MANIFEST file.  I hope your kit is complete !"
1481 fi
1482 rm -f missing x??
1483
1484 echo " "
1485 : Find the appropriate value for a newline for tr
1486 if test -n "$DJGPP"; then
1487        trnl='\012'
1488 fi
1489 if test X"$trnl" = X; then
1490         case "`echo foo|tr '\n' x 2>/dev/null`" in
1491         foox) trnl='\n' ;;
1492         esac
1493 fi
1494 if test X"$trnl" = X; then
1495         case "`echo foo|tr '\012' x 2>/dev/null`" in
1496         foox) trnl='\012' ;;
1497         esac
1498 fi
1499 if test X"$trnl" = X; then
1500         cat <<EOM >&2
1501
1502 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1503
1504 EOM
1505         exit 1
1506 fi
1507
1508 : compute the number of columns on the terminal for proper question formatting
1509 case "$COLUMNS" in
1510 '') COLUMNS='80';;
1511 esac
1512
1513 : set up the echo used in my read
1514 myecho="case \"\$xxxm\" in
1515 '') echo $n \"\$rp $c\" >&4;;
1516 *) case \"\$rp\" in
1517         '') echo $n \"[\$xxxm] $c\";;
1518         *)
1519                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1520                         echo \"\$rp\" >&4
1521                         echo $n \"[\$xxxm] $c\" >&4
1522                 else
1523                         echo $n \"\$rp [\$xxxm] $c\" >&4
1524                 fi
1525                 ;;
1526         esac;;
1527 esac"
1528
1529 : now set up to do reads with possible shell escape and default assignment
1530 cat <<EOSC >myread
1531 $startsh
1532 xxxm=\$dflt
1533 $myecho
1534 ans='!'
1535 case "\$fastread" in
1536 yes) case "\$dflt" in
1537         '') ;;
1538         *) ans='';
1539                 case "\$silent-\$rp" in
1540                 true-) ;;
1541                 *) echo " " >&4;;
1542                 esac;;
1543         esac;;
1544 *) case "\$silent" in
1545         true) case "\$rp" in
1546                 '') ans='';;
1547                 esac;;
1548         esac;;
1549 esac
1550 while expr "X\$ans" : "X!" >/dev/null; do
1551         read answ
1552         set x \$xxxm
1553         shift
1554         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1555         case  "\$answ" in
1556         "!")
1557                 sh 1>&4
1558                 echo " "
1559                 $myecho
1560                 ;;
1561         !*)
1562                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1563                 shift
1564                 sh 1>&4 -c "\$*"
1565                 echo " "
1566                 $myecho
1567                 ;;
1568         "\$ans")
1569                 case "\$ans" in
1570                 \\&*)
1571                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1572                         shift
1573                         case "\$1" in
1574                         -d)
1575                                 fastread=yes
1576                                 echo "(OK, I'll run with -d after this question.)" >&4
1577                                 ;;
1578                         -*)
1579                                 echo "*** Sorry, \$1 not supported yet." >&4
1580                                 ;;
1581                         esac
1582                         $myecho
1583                         ans=!
1584                         ;;
1585                 esac;;
1586         *)
1587                 case "\$aok" in
1588                 y)
1589                         echo "*** Substitution done -- please confirm."
1590                         xxxm="\$ans"
1591                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1592                         xxxm="\$ans"
1593                         ans=!
1594                         ;;
1595                 *)
1596                         echo "*** Error -- try again."
1597                         ans=!
1598                         ;;
1599                 esac
1600                 $myecho
1601                 ;;
1602         esac
1603         case "\$ans\$xxxm\$nostick" in
1604         '')
1605                 ans=!
1606                 $myecho
1607                 ;;
1608         esac
1609 done
1610 case "\$ans" in
1611 '') ans="\$xxxm";;
1612 esac
1613 EOSC
1614
1615 : create .config dir to save info across Configure sessions
1616 test -d ../.config || mkdir ../.config
1617 cat >../.config/README <<EOF
1618 This directory created by Configure to save information that should
1619 persist across sessions for $package.
1620
1621 You may safely delete it if you wish.
1622 EOF
1623
1624 : general instructions
1625 needman=true
1626 firsttime=true
1627 user=`(logname) 2>/dev/null`
1628 case "$user" in
1629 '') user=`whoami 2>&1`;;
1630 esac
1631 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1632         firsttime=false
1633         echo " "
1634         rp='Would you like to see the instructions?'
1635         dflt=n
1636         . ./myread
1637         case "$ans" in
1638         [yY]*) ;;
1639         *) needman=false;;
1640         esac
1641 fi
1642 if $needman; then
1643         cat <<EOH
1644
1645 This installation shell script will examine your system and ask you questions
1646 to determine how the perl5 package should be installed. If you get
1647 stuck on a question, you may use a ! shell escape to start a subshell or
1648 execute a command.  Many of the questions will have default answers in square
1649 brackets; typing carriage return will give you the default.
1650
1651 On some of the questions which ask for file or directory names you are allowed
1652 to use the ~name construct to specify the login directory belonging to "name",
1653 even if you don't have a shell which knows about that.  Questions where this is
1654 allowed will be marked "(~name ok)".
1655
1656 EOH
1657         rp=''
1658         dflt='Type carriage return to continue'
1659         . ./myread
1660         cat <<'EOH'
1661
1662 The prompter used in this script allows you to use shell variables and
1663 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1664 in the default answer, as if the default line was a set of arguments given to a
1665 script shell.  This means you may also use $* to repeat the whole default line,
1666 so you do not have to re-type everything to add something to the default.
1667
1668 Everytime there is a substitution, you will have to confirm.  If there is an
1669 error (e.g. an unmatched backtick), the default answer will remain unchanged
1670 and you will be prompted again.
1671
1672 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1673 the questions and use the computed defaults (or the previous answers if there
1674 was already a config.sh file). Type 'Configure -h' for a list of options.
1675 You may also start interactively and then answer '& -d' at any prompt to turn
1676 on the non-interactive behaviour for the remainder of the execution.
1677
1678 EOH
1679         . ./myread
1680         cat <<EOH
1681
1682 Much effort has been expended to ensure that this shell script will run on any
1683 Unix system.  If despite that it blows up on yours, your best bet is to edit
1684 Configure and run it again.  If you can't run Configure for some reason,
1685 you'll have to generate a config.sh file by hand.  Whatever problems you
1686 have, let me (perlbug@perl.com) know how I blew it.
1687
1688 This installation script affects things in two ways:
1689
1690 1) it may do direct variable substitutions on some of the files included
1691    in this kit.
1692 2) it builds a config.h file for inclusion in C programs.  You may edit
1693    any of these files as the need arises after running this script.
1694
1695 If you make a mistake on a question, there is no easy way to back up to it
1696 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1697 files.  Configure will offer to let you do this before it runs the SH files.
1698
1699 EOH
1700         dflt='Type carriage return to continue'
1701         . ./myread
1702         case "$firsttime" in
1703         true) echo $user >>../.config/instruct;;
1704         esac
1705 fi
1706
1707 : find out where common programs are
1708 echo " "
1709 echo "Locating common programs..." >&4
1710 cat <<EOSC >loc
1711 $startsh
1712 case \$# in
1713 0) exit 1;;
1714 esac
1715 thing=\$1
1716 shift
1717 dflt=\$1
1718 shift
1719 for dir in \$*; do
1720         case "\$thing" in
1721         .)
1722         if test -d \$dir/\$thing; then
1723                 echo \$dir
1724                 exit 0
1725         fi
1726         ;;
1727         *)
1728         for thisthing in \$dir/\$thing; do
1729                 : just loop through to pick last item
1730         done
1731         if test -f \$thisthing; then
1732                 echo \$thisthing
1733                 exit 0
1734         elif test -f \$dir/\$thing.exe; then
1735                 if test -n "$DJGPP"; then
1736                         echo \$dir/\$thing.exe
1737                 else
1738                         : on Eunice apparently
1739                         echo \$dir/\$thing
1740                 fi
1741                 exit 0
1742         fi
1743         ;;
1744         esac
1745 done
1746 echo \$dflt
1747 exit 1
1748 EOSC
1749 chmod +x loc
1750 $eunicefix loc
1751 loclist="
1752 awk
1753 cat
1754 comm
1755 cp
1756 echo
1757 expr
1758 grep
1759 ls
1760 make
1761 mkdir
1762 rm
1763 sed
1764 sort
1765 touch
1766 tr
1767 uniq
1768 "
1769 trylist="
1770 Mcc
1771 ar
1772 byacc
1773 cpp
1774 csh
1775 date
1776 egrep
1777 gzip
1778 less
1779 ln
1780 more
1781 nm
1782 nroff
1783 pg
1784 test
1785 uname
1786 zip
1787 "
1788 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1789 pth="$pth /lib /usr/lib"
1790 for file in $loclist; do
1791         eval xxx=\$$file
1792         case "$xxx" in
1793         /*|?:[\\/]*)
1794                 if test -f "$xxx"; then
1795                         : ok
1796                 else
1797                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1798                         xxx=`./loc $file $file $pth`
1799                 fi
1800                 ;;
1801         '') xxx=`./loc $file $file $pth`;;
1802         *) xxx=`./loc $xxx $xxx $pth`;;
1803         esac
1804         eval $file=$xxx
1805         eval _$file=$xxx
1806         case "$xxx" in
1807         /*)
1808                 echo $file is in $xxx.
1809                 ;;
1810         ?:[\\/]*)
1811                 echo $file is in $xxx.
1812                 ;;
1813         *)
1814                 echo "I don't know where '$file' is, and my life depends on it." >&4
1815                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1816                 exit 1
1817                 ;;
1818         esac
1819 done
1820 echo " "
1821 echo "Don't worry if any of the following aren't found..."
1822 say=offhand
1823 for file in $trylist; do
1824         eval xxx=\$$file
1825         case "$xxx" in
1826         /*|?:[\\/]*)
1827                 if test -f "$xxx"; then
1828                         : ok
1829                 else
1830                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1831                         xxx=`./loc $file $file $pth`
1832                 fi
1833                 ;;
1834         '') xxx=`./loc $file $file $pth`;;
1835         *) xxx=`./loc $xxx $xxx $pth`;;
1836         esac
1837         eval $file=$xxx
1838         eval _$file=$xxx
1839         case "$xxx" in
1840         /*)
1841                 echo $file is in $xxx.
1842                 ;;
1843         ?:[\\/]*)
1844                 echo $file is in $xxx.
1845                 ;;
1846         *)
1847                 echo "I don't see $file out there, $say."
1848                 say=either
1849                 ;;
1850         esac
1851 done
1852 case "$egrep" in
1853 egrep)
1854         echo "Substituting grep for egrep."
1855         egrep=$grep
1856         ;;
1857 esac
1858 case "$ln" in
1859 ln)
1860         echo "Substituting cp for ln."
1861         ln=$cp
1862         ;;
1863 esac
1864 case "$test" in
1865 test)
1866         echo "Hopefully test is built into your sh."
1867         ;;
1868 *)
1869         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1870                 echo "Using the test built into your sh."
1871                 test=test
1872                 _test=test
1873         fi
1874         ;;
1875 esac
1876 case "$echo" in
1877 echo)
1878         echo "Hopefully echo is built into your sh."
1879         ;;
1880 '') ;;
1881 *)
1882         echo " "
1883 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1884         $echo $n "hi there$c" >foo1
1885         echo $n "hi there$c" >foo2
1886         if cmp foo1 foo2 >/dev/null 2>&1; then
1887                 echo "They are compatible.  In fact, they may be identical."
1888         else
1889                 case "$n" in
1890                 '-n') n='' c='\c';;
1891                 *) n='-n' c='';;
1892                 esac
1893                 cat <<FOO
1894 They are not compatible!  You are probably running ksh on a non-USG system.
1895 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
1896 have echo built in and we may have to run some Bourne shell scripts.  That
1897 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
1898
1899 FOO
1900                 $echo $n "The star should be here-->$c"
1901                 $echo "*"
1902         fi
1903         $rm -f foo1 foo2
1904         ;;
1905 esac
1906
1907 : determine whether symbolic links are supported
1908 echo " "
1909 $touch blurfl
1910 if $ln -s blurfl sym > /dev/null 2>&1 ; then
1911         echo "Symbolic links are supported." >&4
1912         lns="$ln -s"
1913 else
1914         echo "Symbolic links are NOT supported." >&4
1915         lns="$ln"
1916 fi
1917 $rm -f blurfl sym
1918
1919 : see whether [:lower:] and [:upper:] are supported character classes
1920 echo " "
1921 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1922 ABYZ)
1923         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
1924         up='[:upper:]'
1925         low='[:lower:]'
1926         ;;
1927 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
1928         # (0xc9 and 0xd1), therefore that is a nice testing point.
1929         if test "X$up" = X -o "X$low" = X; then
1930             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
1931             ij) up='[A-Z]'
1932                 low='[a-z]'
1933                 ;;
1934             esac
1935         fi
1936         if test "X$up" = X -o "X$low" = X; then
1937             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
1938             ij) up='A-Z'
1939                 low='a-z'
1940                 ;;
1941             esac
1942         fi
1943         if test "X$up" = X -o "X$low" = X; then
1944             case "`echo IJ | od -x 2>/dev/null`" in
1945             *C9D1*|*c9d1*)
1946                 echo "Hey, this might be EBCDIC." >&4
1947                 if test "X$up" = X -o "X$low" = X; then
1948                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
1949                     ij) up='[A-IJ-RS-Z]'
1950                         low='[a-ij-rs-z]'
1951                         ;;
1952                     esac
1953                 fi
1954                 if test "X$up" = X -o "X$low" = X; then
1955                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
1956                     ij) up='A-IJ-RS-Z'
1957                         low='a-ij-rs-z'
1958                         ;;
1959                     esac
1960                 fi
1961                 ;;
1962             esac
1963         fi
1964 esac
1965 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
1966 ij)
1967     echo "Using $up and $low to convert case." >&4
1968     ;;
1969 *)
1970     echo "I don't know how to translate letters from upper to lower case." >&4
1971     echo "Your tr is not acting any way I know of." >&4
1972     exit 1
1973     ;;
1974 esac
1975 : set up the translation script tr, must be called with ./tr of course
1976 cat >tr <<EOSC
1977 $startsh
1978 case "\$1\$2" in
1979 '[A-Z][a-z]') exec $tr '$up' '$low';;
1980 '[a-z][A-Z]') exec $tr '$low' '$up';;
1981 esac
1982 exec $tr "\$@"
1983 EOSC
1984 chmod +x tr
1985 $eunicefix tr
1986
1987 : Try to determine whether config.sh was made on this system
1988 case "$config_sh" in
1989 '')
1990 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
1991 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
1992 # because the A-Z/a-z are not consecutive.
1993 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
1994         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
1995 newmyuname="$myuname"
1996 dflt=n
1997 case "$knowitall" in
1998 '')
1999         if test -f ../config.sh; then
2000                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2001                         eval "`grep myuname= ../config.sh`"
2002                 fi
2003                 if test "X$myuname" = "X$newmyuname"; then
2004                         dflt=y
2005                 fi
2006         fi
2007         ;;
2008 *) dflt=y;;
2009 esac
2010
2011 : Get old answers from old config file if Configure was run on the
2012 : same system, otherwise use the hints.
2013 hint=default
2014 cd ..
2015 if test -f config.sh; then
2016         echo " "
2017         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2018         . UU/myread
2019         case "$ans" in
2020         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2021         *)  echo "Fetching default answers from your old config.sh file..." >&4
2022                 tmp_n="$n"
2023                 tmp_c="$c"
2024                 tmp_sh="$sh"
2025                 . ./config.sh
2026                 cp config.sh UU
2027                 n="$tmp_n"
2028                 c="$tmp_c"
2029                 : Older versions did not always set $sh.  Catch re-use of such
2030                 : an old config.sh.
2031                 case "$sh" in
2032                 '') sh="$tmp_sh" ;;
2033                 esac
2034                 hint=previous
2035                 ;;
2036         esac
2037 fi
2038 if test ! -f config.sh; then
2039         $cat <<EOM
2040
2041 First time through, eh?  I have some defaults handy for some systems
2042 that need some extra help getting the Configure answers right:
2043
2044 EOM
2045         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2046         dflt=''
2047         : Half the following guesses are probably wrong... If you have better
2048         : tests or hints, please send them to perlbug@perl.com
2049         : The metaconfig authors would also appreciate a copy...
2050         $test -f /irix && osname=irix
2051         $test -f /xenix && osname=sco_xenix
2052         $test -f /dynix && osname=dynix
2053         $test -f /dnix && osname=dnix
2054         $test -f /lynx.os && osname=lynxos
2055         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2056         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2057         $test -f /bin/mips && /bin/mips && osname=mips
2058         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2059                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2060         $test -d /usr/apollo/bin && osname=apollo
2061         $test -f /etc/saf/_sactab && osname=svr4
2062         $test -d /usr/include/minix && osname=minix
2063         if $test -d /MachTen -o -d /MachTen_Folder; then
2064                 osname=machten
2065                 if $test -x /sbin/version; then
2066                         osvers=`/sbin/version | $awk '{print $2}' |
2067                         $sed -e 's/[A-Za-z]$//'`
2068                 elif $test -x /usr/etc/version; then
2069                         osvers=`/usr/etc/version | $awk '{print $2}' |
2070                         $sed -e 's/[A-Za-z]$//'`
2071                 else
2072                         osvers="$2.$3"
2073                 fi
2074         fi
2075        $test -f /sys/posix.dll &&
2076                $test -f /usr/bin/what &&
2077                set X `/usr/bin/what /sys/posix.dll` &&
2078                $test "$3" = UWIN &&
2079                osname=uwin &&
2080                osvers="$5"
2081         if $test -f $uname; then
2082                 set X $myuname
2083                 shift
2084
2085                 case "$5" in
2086                 fps*) osname=fps ;;
2087                 mips*)
2088                         case "$4" in
2089                         umips) osname=umips ;;
2090                         *) osname=mips ;;
2091                         esac;;
2092                 [23]100) osname=mips ;;
2093                 next*) osname=next ;;
2094                 i386*)
2095                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2096                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2097                                 osname='sco'
2098                                 osvers=$tmp
2099                         elif $test -f /etc/kconfig; then
2100                                 osname=isc
2101                                 if test "$lns" = "ln -s"; then
2102                                         osvers=4
2103                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2104                                         osvers=3
2105                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2106                                         osvers=2
2107                                 fi
2108                         fi
2109                         tmp=''
2110                         ;;
2111                 pc*)
2112                         if test -n "$DJGPP"; then
2113                                 osname=dos
2114                                 osvers=djgpp
2115                         fi
2116                         ;;
2117                 esac
2118
2119                 case "$1" in
2120                 aix) osname=aix
2121                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2122                         case "$tmp" in
2123                         'not found') osvers="$4"."$3" ;;
2124                         '<3240'|'<>3240') osvers=3.2.0 ;;
2125                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2126                         '=3250'|'>3250') osvers=3.2.5 ;;
2127                         *) osvers=$tmp;;
2128                         esac
2129                         ;;
2130                 *dc.osx) osname=dcosx
2131                         osvers="$3"
2132                         ;;
2133                 dnix) osname=dnix
2134                         osvers="$3"
2135                         ;;
2136                 domainos) osname=apollo
2137                         osvers="$3"
2138                         ;;
2139                 dgux) osname=dgux 
2140                         osvers="$3"
2141                         ;;
2142                 dynixptx*) osname=dynixptx
2143                         osvers=`echo "$4"|sed 's/^v//'`
2144                         ;;
2145                 freebsd) osname=freebsd 
2146                         osvers="$3" ;;
2147                 genix) osname=genix ;;
2148                 hp*) osname=hpux 
2149                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2150                         ;;
2151                 irix*) osname=irix
2152                         case "$3" in
2153                         4*) osvers=4 ;;
2154                         5*) osvers=5 ;;
2155                         *)      osvers="$3" ;;
2156                         esac
2157                         ;;
2158                 linux) osname=linux
2159                         case "$3" in
2160                         *)      osvers="$3" ;;
2161                         esac
2162                         ;;
2163                 MiNT) osname=mint
2164                         ;;
2165                 netbsd*) osname=netbsd
2166                         osvers="$3"
2167                         ;;
2168                 news-os) osvers="$3"
2169                         case "$3" in
2170                         4*) osname=newsos4 ;;
2171                         *) osname=newsos ;;
2172                         esac
2173                         ;;
2174                 bsd386) osname=bsd386
2175                         osvers=`$uname -r`
2176                         ;;
2177                 POSIX-BC | posix-bc ) osname=posix-bc
2178                         osvers="$3"
2179                         ;;
2180                 powerux | power_ux | powermax_os | powermaxos | \
2181                 powerunix | power_unix) osname=powerux
2182                         osvers="$3"
2183                         ;;
2184                 next*) osname=next ;;
2185                 solaris) osname=solaris
2186                         case "$3" in
2187                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2188                         *)      osvers="$3" ;;
2189                         esac
2190                         ;;
2191                 sunos) osname=sunos
2192                         case "$3" in
2193                         5*) osname=solaris
2194                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2195                         *)      osvers="$3" ;;
2196                         esac
2197                         ;;
2198                 titanos) osname=titanos
2199                         case "$3" in
2200                         1*) osvers=1 ;;
2201                         2*) osvers=2 ;;
2202                         3*) osvers=3 ;;
2203                         4*) osvers=4 ;;
2204                         *)      osvers="$3" ;;
2205                         esac
2206                         ;;
2207                 ultrix) osname=ultrix
2208                         osvers="$3"
2209                         ;;
2210                 osf1|mls+)      case "$5" in
2211                                 alpha)
2212                                         osname=dec_osf
2213                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2214                                         ;;
2215                         hp*)    osname=hp_osf1  ;;
2216                         mips)   osname=mips_osf1 ;;
2217                         esac
2218                         ;;
2219                 uts) osname=uts 
2220                         osvers="$3"
2221                         ;;
2222                 qnx) osname=qnx
2223                         osvers="$4"
2224                         ;;
2225                 $2) case "$osname" in
2226                         *isc*) ;;
2227                         *freebsd*) ;;
2228                         svr*)
2229                                 : svr4.x or possibly later
2230                                 case "svr$3" in 
2231                                 ${osname}*)
2232                                         osname=svr$3
2233                                         osvers=$4
2234                                         ;;
2235                                 esac
2236                                 case "$osname" in
2237                                 svr4.0)
2238                                         : Check for ESIX
2239                                         if test -f /stand/boot ; then
2240                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2241                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2242                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2243                                                         if test -n "$isesix"; then
2244                                                                 osname=esix4
2245                                                         fi
2246                                                 fi
2247                                         fi
2248                                         ;;
2249                                 esac
2250                                 ;;
2251                         *)      if test -f /etc/systemid; then
2252                                         osname=sco
2253                                         set `echo $3 | $sed 's/\./ /g'` $4
2254                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2255                                                 osvers=$1.$2.$3
2256                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2257                                                 osvers=$1.$2
2258                                         elif $test -f $src/hints/sco_$1.sh; then
2259                                                 osvers=$1
2260                                         fi
2261                                 else
2262                                         case "$osname" in
2263                                         '') : Still unknown.  Probably a generic Sys V.
2264                                                 osname="sysv"
2265                                                 osvers="$3"
2266                                                 ;;
2267                                         esac
2268                                 fi
2269                                 ;;
2270                         esac
2271                         ;;
2272                 *)      case "$osname" in
2273                         '') : Still unknown.  Probably a generic BSD.
2274                                 osname="$1"
2275                                 osvers="$3"
2276                                 ;;
2277                         esac
2278                         ;;
2279                 esac
2280         else
2281                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2282                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2283                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2284                                 osname=news_os
2285                         fi
2286                         $rm -f UU/kernel.what
2287                 elif test -d c:/.; then
2288                         set X $myuname
2289                         osname=os2
2290                         osvers="$5"
2291                 fi
2292         fi
2293         
2294         : Now look for a hint file osname_osvers, unless one has been
2295         : specified already.
2296         case "$hintfile" in
2297         ''|' ')
2298                 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
2299                 : Also try without trailing minor version numbers.
2300                 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2301                 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2302                 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2303                 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
2304                 case "$file" in
2305                 '') dflt=none ;;
2306                 *)  case "$osvers" in
2307                         '') dflt=$file
2308                                 ;;
2309                         *)  if $test -f $src/hints/$file.sh ; then
2310                                         dflt=$file
2311                                 elif $test -f $src/hints/$xfile.sh ; then
2312                                         dflt=$xfile
2313                                 elif $test -f $src/hints/$xxfile.sh ; then
2314                                         dflt=$xxfile
2315                                 elif $test -f $src/hints/$xxxfile.sh ; then
2316                                         dflt=$xxxfile
2317                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2318                                         dflt=$xxxxfile
2319                                 elif $test -f "$src/hints/${osname}.sh" ; then
2320                                         dflt="${osname}"
2321                                 else
2322                                         dflt=none
2323                                 fi
2324                                 ;;
2325                         esac
2326                         ;;
2327                 esac
2328                 if $test -f Policy.sh ; then
2329                         case "$dflt" in
2330                         *Policy*) ;;
2331                         none) dflt="Policy" ;;
2332                         *) dflt="Policy $dflt" ;;
2333                         esac
2334                 fi
2335                 ;;
2336         *)
2337                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2338                 ;;
2339         esac
2340
2341         if $test -f Policy.sh ; then
2342                 $cat <<EOM
2343
2344 There's also a Policy hint file available, which should make the
2345 site-specific (policy) questions easier to answer.
2346 EOM
2347
2348         fi
2349
2350         $cat <<EOM
2351
2352 You may give one or more space-separated answers, or "none" if appropriate.
2353 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2354 is a good thing.  DO NOT give a wrong version.
2355
2356 EOM
2357
2358         rp="Which of these apply, if any?"
2359         . UU/myread
2360         tans=$ans
2361         for file in $tans; do
2362                 if $test X$file = XPolicy -a -f Policy.sh; then
2363                         . Policy.sh
2364                         $cat Policy.sh >> UU/config.sh
2365                 elif $test -f $src/hints/$file.sh; then
2366                         . $src/hints/$file.sh
2367                         $cat $src/hints/$file.sh >> UU/config.sh
2368                 elif $test X$tans = X -o X$tans = Xnone ; then
2369                         : nothing
2370                 else
2371                         : Give one chance to correct a possible typo.
2372                         echo "$file.sh does not exist"
2373                         dflt=$file
2374                         rp="hint to use instead?"
2375                         . UU/myread
2376                         for file in $ans; do
2377                                 if $test -f "$src/hints/$file.sh"; then
2378                                         . $src/hints/$file.sh
2379                                         $cat $src/hints/$file.sh >> UU/config.sh
2380                                 elif $test X$ans = X -o X$ans = Xnone ; then
2381                                         : nothing
2382                                 else
2383                                         echo "$file.sh does not exist -- ignored."
2384                                 fi
2385                         done
2386                 fi
2387         done
2388
2389         hint=recommended
2390         : Remember our hint file for later.
2391         if $test -f "$src/hints/$file.sh" ; then
2392                 hintfile="$file"
2393         else
2394                 hintfile=''
2395         fi
2396 fi
2397 cd UU
2398 ;;
2399 *)
2400         echo " "
2401         echo "Fetching default answers from $config_sh..." >&4
2402         tmp_n="$n"
2403         tmp_c="$c"
2404         cd ..
2405         cp $config_sh config.sh 2>/dev/null
2406         chmod +w config.sh
2407         . ./config.sh
2408         cd UU
2409         cp ../config.sh .
2410         n="$tmp_n"
2411         c="$tmp_c"
2412         hint=previous
2413         ;;
2414 esac
2415 test "$override" && . ./optdef.sh
2416 myuname="$newmyuname"
2417
2418 : Restore computed paths
2419 for file in $loclist $trylist; do
2420         eval $file="\$_$file"
2421 done
2422
2423 cat << EOM
2424
2425 Configure uses the operating system name and version to set some defaults.
2426 The default value is probably right if the name rings a bell. Otherwise,
2427 since spelling matters for me, either accept the default or answer "none"
2428 to leave it blank.
2429
2430 EOM
2431 case "$osname" in
2432         ''|' ')
2433                 case "$hintfile" in
2434                 ''|' '|none) dflt=none ;;
2435                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2436                 esac
2437                 ;;
2438         *) dflt="$osname" ;;
2439 esac
2440 rp="Operating system name?"
2441 . ./myread
2442 case "$ans" in
2443 none)  osname='' ;;
2444 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2445 esac
2446 echo " "
2447 case "$osvers" in
2448         ''|' ')
2449                 case "$hintfile" in
2450                 ''|' '|none) dflt=none ;;
2451                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2452                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2453                         case "$dflt" in
2454                         ''|' ') dflt=none ;;
2455                         esac
2456                         ;;
2457                 esac
2458                 ;;
2459         *) dflt="$osvers" ;;
2460 esac
2461 rp="Operating system version?"
2462 . ./myread
2463 case "$ans" in
2464 none)  osvers='' ;;
2465 *) osvers="$ans" ;;
2466 esac
2467
2468 : who configured the system
2469 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2470 cf_by=`(logname) 2>/dev/null`
2471 case "$cf_by" in
2472 "")
2473         cf_by=`(whoami) 2>/dev/null`
2474         case "$cf_by" in
2475         "") cf_by=unknown ;;
2476         esac ;;
2477 esac
2478
2479 : set up the script used to warn in case of inconsistency
2480 cat <<EOS >whoa
2481 $startsh
2482 EOS
2483 cat <<'EOSC' >>whoa
2484 dflt=y
2485 echo " "
2486 echo "*** WHOA THERE!!! ***" >&4
2487 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2488 rp="    Keep the $hint value?"
2489 . ./myread
2490 case "$ans" in
2491 y) td=$was; tu=$was;;
2492 esac
2493 EOSC
2494
2495 : function used to set $1 to $val
2496 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2497 case "$val$was" in
2498 $define$undef) . ./whoa; eval "$var=\$td";;
2499 $undef$define) . ./whoa; eval "$var=\$tu";;
2500 *) eval "$var=$val";;
2501 esac'
2502
2503 cat <<EOM
2504
2505 Perl can be built to take advantage of threads, on some systems.
2506 To do so, Configure must be run with -Dusethreads.
2507
2508 Note that threading is a highly experimental feature, and
2509 some known race conditions still remain.  If you choose to try
2510 it, be very sure to not actually deploy it for production
2511 purposes.  README.threads has more details, and is required
2512 reading if you enable threads.
2513 EOM
2514 case "$usethreads" in
2515 $define|true|[yY]*)     dflt='y';;
2516 *) dflt='n';;
2517 esac
2518 rp='Build a threading Perl?'
2519 . ./myread
2520 case "$ans" in
2521 y|Y)    val="$define" ;;     
2522 *)      val="$undef" ;;
2523 esac
2524 set usethreads
2525 eval $setvar 
2526
2527 case "$d_oldpthreads" in
2528 '')     : Configure tests would be welcome here.  For now, assume undef.
2529         val="$undef" ;;
2530 *)      val="$d_oldpthreads" ;;
2531 esac
2532 set d_oldpthreads
2533 eval $setvar
2534
2535
2536 case "$usethreads" in
2537 "$define"|true|[yY]*)
2538 : Look for a hint-file generated 'call-back-unit'.  If the
2539 : user has specified that a threading perl is to be built,
2540 : we may need to set or change some other defaults.
2541         if $test -f usethreads.cbu; then
2542                 . ./usethreads.cbu
2543         fi
2544         case "$osname" in
2545         aix|dec_osf|dos_djgpp|freebsd|hpux|irix|linux|next|openbsd|os2|solaris|vmesa)
2546                 # Known thread-capable platforms.
2547                 ;;
2548         *)
2549                 cat >&4 <<EOM
2550 $osname is not known to support threads.
2551 Please let perlbug@perl.com know how to do that.
2552
2553 Cannot continue, aborting.
2554 EOM
2555                 exit 1
2556         ;;
2557         esac # $osname
2558     ;;
2559 esac # $usethreads
2560
2561 cat <<EOM
2562
2563 Perl can be built so that multiple Perl interpreters can coexist
2564 within the same Perl executable.  To do so, Configure must be run with
2565 -Dusemultiplicity.
2566
2567 Normally you do not need this and you should answer no.
2568
2569 EOM
2570 case "$usemultiplicity" in
2571 $define|true|[yY]*)     dflt='y';;
2572 *) dflt='n';;
2573 esac
2574 rp='Build Perl for multiplicity?'
2575 . ./myread
2576 case "$ans" in
2577 y|Y)    val="$define" ;;     
2578 *)      val="$undef" ;;
2579 esac
2580 set usemultiplicity
2581 eval $setvar 
2582
2583 cat <<EOM
2584
2585 Perl can be built to take advantage of explicit 64-bit interfaces,
2586 on some systems.  To do so, Configure must be run with -Duse64bits.
2587
2588 If this doesn't make any sense to you, just accept the default 'n'.
2589 EOM
2590 case "$use64bits" in
2591 $define|true|[yY]*)     dflt='y';;
2592 *) dflt='n';;
2593 esac
2594 rp='Try to use explicit 64-bit interfaces, if available?'
2595 . ./myread
2596 case "$ans" in
2597 y|Y) 
2598         val="$define"
2599         ;;     
2600 *)      
2601         val="$undef"
2602         ;;
2603 esac
2604 set use64bits
2605 eval $setvar
2606
2607 case "$archname64" in
2608 '') archname64='' ;;    # not a typo
2609 esac
2610
2611 case "$use64bits" in
2612 "$define"|true|[yY]*)
2613 : Look for a hint-file generated 'call-back-unit'.  If the
2614 : user has specified that a threading perl is to be built,
2615 : we may need to set or change some other defaults.
2616         if $test -f use64bits.cbu; then
2617                 . ./use64bits.cbu
2618         fi
2619         case "$osname" in
2620         dec_osf|hpux|irix|solaris|unicos)
2621                 # Known 64-bit capable platforms.
2622                 ;;
2623         *)
2624                 cat >&4 <<EOM
2625 $osname is not known to support 64-bit interfaces.
2626 Please let perlbug@perl.com know how to do that.
2627
2628 Cannot continue, aborting.
2629 EOM
2630                 exit 1
2631                 ;;
2632         esac
2633         ;;
2634 esac
2635
2636 : determine the architecture name
2637 echo " "
2638 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
2639         tarch=`arch`"-$osname"
2640 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
2641         if uname -m > tmparch 2>&1 ; then
2642                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
2643                         -e 's/$/'"-$osname/" tmparch`
2644         else
2645                 tarch="$osname"
2646         fi
2647         $rm -f tmparch
2648 else
2649         tarch="$osname"
2650 fi
2651 case "$myarchname" in
2652 ''|"$tarch") ;;
2653 *)
2654         echo "(Your architecture name used to be $myarchname.)"
2655         archname=''
2656         ;;
2657 esac
2658 myarchname="$tarch"
2659 case "$archname" in
2660 '') dflt="$tarch";;
2661 *) dflt="$archname";;
2662 esac
2663 rp='What is your architecture name'
2664 . ./myread
2665 archname="$ans"
2666 case "$usethreads" in
2667 $define)
2668         echo "Threads selected." >&4
2669         case "$archname" in
2670         *-thread*) echo "...and architecture name already has -thread." >&4
2671                 ;;
2672         *)      archname="$archname-thread"
2673                 echo "...setting architecture name to $archname." >&4
2674                 ;;
2675         esac
2676         ;;
2677 esac
2678 case "$usemultiplicity" in
2679 $define)
2680         echo "Multiplicity selected." >&4
2681         case "$archname" in
2682         *-multi*) echo "...and architecture name already has -multi." >&4
2683                 ;;
2684         *)      archname="$archname-multi"
2685                 echo "...setting architecture name to $archname." >&4
2686                 ;;
2687         esac
2688         ;;
2689 esac
2690 case "$use64bits" in
2691 $define)
2692         echo "Explicit 64-bitness selected." >&4
2693         case "$archname64" in
2694         '')
2695                 ;;
2696         *)
2697                 case "$archname" in
2698                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
2699                         ;;
2700                 *)      archname="$archname-$archname64"
2701                         echo "...setting architecture name to $archname." >&4
2702                         ;;
2703                 esac
2704                 ;;
2705         esac
2706 esac
2707
2708 : is AFS running?
2709 echo " "
2710 case "$afs" in
2711 $define|true)   afs=true ;;
2712 $undef|false)   afs=false ;;
2713 *)      if test -d /afs; then
2714                 afs=true
2715         else
2716                 afs=false
2717         fi
2718         ;;
2719 esac
2720 if $afs; then
2721         echo "AFS may be running... I'll be extra cautious then..." >&4
2722 else
2723         echo "AFS does not seem to be running..." >&4
2724 fi
2725
2726 : decide how portable to be.  Allow command line overrides.
2727 case "$d_portable" in
2728 "$undef") ;;
2729 *)      d_portable="$define" ;;
2730 esac
2731
2732 : set up shell script to do ~ expansion
2733 cat >filexp <<EOSS
2734 $startsh
2735 : expand filename
2736 case "\$1" in
2737  ~/*|~)
2738         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
2739         ;;
2740  ~*)
2741         if $test -f /bin/csh; then
2742                 /bin/csh -f -c "glob \$1"
2743                 failed=\$?
2744                 echo ""
2745                 exit \$failed
2746         else
2747                 name=\`$expr x\$1 : '..\([^/]*\)'\`
2748                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
2749                 if $test ! -d "\$dir"; then
2750                         me=\`basename \$0\`
2751                         echo "\$me: can't locate home directory for: \$name" >&2
2752                         exit 1
2753                 fi
2754                 case "\$1" in
2755                 */*)
2756                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
2757                         ;;
2758                 *)
2759                         echo \$dir
2760                         ;;
2761                 esac
2762         fi
2763         ;;
2764 *)
2765         echo \$1
2766         ;;
2767 esac
2768 EOSS
2769 chmod +x filexp
2770 $eunicefix filexp
2771
2772 : now set up to get a file name
2773 cat <<EOS >getfile
2774 $startsh
2775 EOS
2776 cat <<'EOSC' >>getfile
2777 tilde=''
2778 fullpath=''
2779 already=''
2780 skip=''
2781 none_ok=''
2782 exp_file=''
2783 nopath_ok=''
2784 orig_rp="$rp"
2785 orig_dflt="$dflt"
2786
2787 case "$fn" in
2788 *\(*)
2789         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
2790         fn=`echo $fn | sed 's/(.*)//'`
2791         ;;
2792 esac
2793
2794 case "$fn" in
2795 *:*)
2796         loc_file=`expr $fn : '.*:\(.*\)'`
2797         fn=`expr $fn : '\(.*\):.*'`
2798         ;;
2799 esac
2800
2801 case "$fn" in
2802 *~*) tilde=true;;
2803 esac
2804 case "$fn" in
2805 */*) fullpath=true;;
2806 esac
2807 case "$fn" in
2808 *+*) skip=true;;
2809 esac
2810 case "$fn" in
2811 *n*) none_ok=true;;
2812 esac
2813 case "$fn" in
2814 *e*) exp_file=true;;
2815 esac
2816 case "$fn" in
2817 *p*) nopath_ok=true;;
2818 esac
2819
2820 case "$fn" in
2821 *f*) type='File';;
2822 *d*) type='Directory';;
2823 *l*) type='Locate';;
2824 esac
2825
2826 what="$type"
2827 case "$what" in
2828 Locate) what='File';;
2829 esac
2830
2831 case "$exp_file" in
2832 '')
2833         case "$d_portable" in
2834         "$define") ;;
2835         *) exp_file=true;;
2836         esac
2837         ;;
2838 esac
2839
2840 cd ..
2841 while test "$type"; do
2842         redo=''
2843         rp="$orig_rp"
2844         dflt="$orig_dflt"
2845         case "$tilde" in
2846         true) rp="$rp (~name ok)";;
2847         esac
2848         . UU/myread
2849         if test -f UU/getfile.ok && \
2850                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
2851         then
2852                 value="$ans"
2853                 ansexp="$ans"
2854                 break
2855         fi
2856         case "$ans" in
2857         none)
2858                 value=''
2859                 ansexp=''
2860                 case "$none_ok" in
2861                 true) type='';;
2862                 esac
2863                 ;;
2864         *)
2865                 case "$tilde" in
2866                 '') value="$ans"
2867                         ansexp="$ans";;
2868                 *)
2869                         value=`UU/filexp $ans`
2870                         case $? in
2871                         0)
2872                                 if test "$ans" != "$value"; then
2873                                         echo "(That expands to $value on this system.)"
2874                                 fi
2875                                 ;;
2876                         *) value="$ans";;
2877                         esac
2878                         ansexp="$value"
2879                         case "$exp_file" in
2880                         '') value="$ans";;
2881                         esac
2882                         ;;
2883                 esac
2884                 case "$fullpath" in
2885                 true)
2886                         case "$ansexp" in
2887                         /*) value="$ansexp" ;;
2888                         *)
2889                                 redo=true
2890                                 case "$already" in
2891                                 true)
2892                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
2893                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
2894                                         ;;
2895                                 *)
2896                                 echo "Please give a full path name, starting with slash." >&4
2897                                         case "$tilde" in
2898                                         true)
2899                                 echo "Note that using ~name is ok provided it expands well." >&4
2900                                                 already=true
2901                                                 ;;
2902                                         esac
2903                                 esac
2904                                 ;;
2905                         esac
2906                         ;;
2907                 esac
2908                 case "$redo" in
2909                 '')
2910                         case "$type" in
2911                         File)
2912                                 if test -f "$ansexp"; then
2913                                         type=''
2914                                 elif test -r "$ansexp" || (test -h "$ansexp") >/dev/null 2>&1
2915                                 then
2916                                         echo "($value is not a plain file, but that's ok.)"
2917                                         type=''
2918                                 fi
2919                                 ;;
2920                         Directory)
2921                                 if test -d "$ansexp"; then
2922                                         type=''
2923                                 fi
2924                                 ;;
2925                         Locate)
2926                                 if test -d "$ansexp"; then
2927                                         echo "(Looking for $loc_file in directory $value.)"
2928                                         value="$value/$loc_file"
2929                                         ansexp="$ansexp/$loc_file"
2930                                 fi
2931                                 if test -f "$ansexp"; then
2932                                         type=''
2933                                 fi
2934                                 case "$nopath_ok" in
2935                                 true)   case "$value" in
2936                                         */*) ;;
2937                                         *)      echo "Assuming $value will be in people's path."
2938                                                 type=''
2939                                                 ;;
2940                                         esac
2941                                         ;;
2942                                 esac
2943                                 ;;
2944                         esac
2945
2946                         case "$skip" in
2947                         true) type='';
2948                         esac
2949
2950                         case "$type" in
2951                         '') ;;
2952                         *)
2953                                 if test "$fastread" = yes; then
2954                                         dflt=y
2955                                 else
2956                                         dflt=n
2957                                 fi
2958                                 rp="$what $value doesn't exist.  Use that name anyway?"
2959                                 . UU/myread
2960                                 dflt=''
2961                                 case "$ans" in
2962                                 y*) type='';;
2963                                 *) echo " ";;
2964                                 esac
2965                                 ;;
2966                         esac
2967                         ;;
2968                 esac
2969                 ;;
2970         esac
2971 done
2972 cd UU
2973 ans="$value"
2974 rp="$orig_rp"
2975 dflt="$orig_dflt"
2976 rm -f getfile.ok
2977 EOSC
2978
2979 : determine root of directory hierarchy where package will be installed.
2980 case "$prefix" in
2981 '')
2982         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
2983         ;;
2984 *)
2985         dflt="$prefix"
2986         ;;
2987 esac
2988 $cat <<EOM
2989
2990 By default, $package will be installed in $dflt/bin, manual
2991 pages under $dflt/man, etc..., i.e. with $dflt as prefix for
2992 all installation directories. Typically set to /usr/local, but you
2993 may choose /usr if you wish to install $package among your system
2994 binaries. If you wish to have binaries under /bin but manual pages
2995 under /usr/local/man, that's ok: you will be prompted separately
2996 for each of the installation directories, the prefix being only used
2997 to set the defaults.
2998
2999 EOM
3000 fn=d~
3001 rp='Installation prefix to use?'
3002 . ./getfile
3003 oldprefix=''
3004 case "$prefix" in
3005 '') ;;
3006 *)
3007         case "$ans" in
3008         "$prefix") ;;
3009         *) oldprefix="$prefix";;
3010         esac
3011         ;;
3012 esac
3013 prefix="$ans"
3014 prefixexp="$ansexp"
3015
3016 : set the prefixit variable, to compute a suitable default value
3017 prefixit='case "$3" in
3018 ""|none)
3019         case "$oldprefix" in
3020         "") eval "$1=\"\$$2\"";;
3021         *)
3022                 case "$3" in
3023                 "") eval "$1=";;
3024                 none)
3025                         eval "tp=\"\$$2\"";
3026                         case "$tp" in
3027                         ""|" ") eval "$1=\"\$$2\"";;
3028                         *) eval "$1=";;
3029                         esac;;
3030                 esac;;
3031         esac;;
3032 *)
3033         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
3034         case "$tp" in
3035         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
3036         /*-$oldprefix/*|\~*-$oldprefix/*)
3037                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
3038         *) eval "$1=\"\$$2\"";;
3039         esac;;
3040 esac'
3041
3042 : set the base revision
3043 baserev=5.0
3044
3045 : get the patchlevel
3046 echo " "
3047 echo "Getting the current patchlevel..." >&4
3048 if $test -r $rsrc/patchlevel.h;then
3049         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
3050         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
3051 else
3052         patchlevel=0
3053         subversion=0
3054 fi
3055 $echo $n "(You have $package" $c
3056 case "$package" in
3057 "*$baserev")    ;;
3058 *)              $echo $n " $baserev" $c ;;
3059 esac
3060 $echo $n " patchlevel $patchlevel" $c
3061 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
3062 echo ".)"
3063
3064 if test 0 -eq "$subversion"; then
3065         version=`LC_ALL=C; export LC_ALL; \
3066                  echo $baserev $patchlevel | \
3067                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3068 else
3069         version=`LC_ALL=C; export LC_ALL; \
3070                  echo $baserev $patchlevel $subversion | \
3071                  $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
3072 fi
3073 : Figure out perl API version.  Perhaps this should be in patchlevel.h
3074 if test "$subversion" -lt 50; then
3075         apiversion=`LC_ALL=C; export LC_ALL; \
3076                  LANGUAGE=C; export LANGUAGE; \
3077                  echo $baserev $patchlevel | \
3078                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3079 else
3080         apiversion="$version"
3081 fi
3082
3083 : determine where private library files go
3084 : Usual default is /usr/local/lib/perl5/$version.
3085 : Also allow things like /opt/perl/lib/$version, since 
3086 : /opt/perl/lib/perl5... would be redundant.
3087 case "$prefix" in
3088 *perl*) set dflt privlib lib/$version ;;
3089 *)       set dflt privlib lib/$package/$version ;;
3090 esac
3091 eval $prefixit
3092 $cat <<EOM
3093
3094 There are some auxiliary files for $package that need to be put into a
3095 private library directory that is accessible by everyone.
3096
3097 EOM
3098 fn=d~+
3099 rp='Pathname where the private library files will reside?'
3100 . ./getfile
3101 if $test "X$privlibexp" != "X$ansexp"; then
3102         installprivlib=''
3103 fi
3104 privlib="$ans"
3105 privlibexp="$ansexp"
3106 if $afs; then
3107         $cat <<EOM
3108
3109 Since you are running AFS, I need to distinguish the directory in which
3110 private files reside from the directory in which they are installed (and from
3111 which they are presumably copied to the former directory by occult means).
3112
3113 EOM
3114         case "$installprivlib" in
3115         '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
3116         *) dflt="$installprivlib";;
3117         esac
3118         fn=de~
3119         rp='Where will private files be installed?'
3120         . ./getfile
3121         installprivlib="$ans"
3122 else
3123         installprivlib="$privlibexp"
3124 fi
3125
3126 : set the prefixup variable, to restore leading tilda escape
3127 prefixup='case "$prefixexp" in
3128 "$prefix") ;;
3129 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
3130 esac'
3131
3132 : determine where public architecture dependent libraries go
3133 set archlib archlib
3134 eval $prefixit
3135 : privlib default is /usr/local/lib/$package/$version
3136 : archlib default is /usr/local/lib/$package/$version/$archname
3137 : privlib may have an optional trailing /share.
3138 tdflt=`echo $privlib | $sed 's,/share$,,'`
3139 tdflt=$tdflt/$archname
3140 case "$archlib" in
3141 '')     dflt=$tdflt
3142         ;;
3143 *)      dflt="$archlib"
3144     ;;
3145 esac
3146 cat <<EOM
3147
3148 $spackage contains architecture-dependent library files.  If you are
3149 sharing libraries in a heterogeneous environment, you might store
3150 these files in a separate location.  Otherwise, you can just include
3151 them with the rest of the public library files.
3152
3153 EOM
3154 fn=d+~
3155 rp='Where do you want to put the public architecture-dependent libraries?'
3156 . ./getfile
3157 archlib="$ans"
3158 archlibexp="$ansexp"
3159
3160 if $afs; then
3161         $cat <<EOM
3162
3163 Since you are running AFS, I need to distinguish the directory in
3164 which architecture-dependent library files reside from the directory
3165 in which they are installed (and from which they are presumably copied
3166 to the former directory by occult means).
3167
3168 EOM
3169         case "$installarchlib" in
3170         '') dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;;
3171         *) dflt="$installarchlib";;
3172         esac
3173         fn=de~
3174         rp='Where will architecture-dependent library files be installed?'
3175         . ./getfile
3176         installarchlib="$ans"
3177 else
3178         installarchlib="$archlibexp"
3179 fi
3180 if $test X"$archlib" = X"$privlib"; then
3181         d_archlib="$undef"
3182 else
3183         d_archlib="$define"
3184 fi
3185
3186 : make some quick guesses about what we are up against
3187 echo " "
3188 $echo $n "Hmm...  $c"
3189 echo exit 1 >bsd
3190 echo exit 1 >usg
3191 echo exit 1 >v7
3192 echo exit 1 >osf1
3193 echo exit 1 >eunice
3194 echo exit 1 >xenix
3195 echo exit 1 >venix
3196 echo exit 1 >os2
3197 d_bsd="$undef"
3198 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3199 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3200 then
3201         echo "Looks kind of like an OSF/1 system, but we'll see..."
3202         echo exit 0 >osf1
3203 elif test `echo abc | tr a-z A-Z` = Abc ; then
3204         xxx=`./loc addbib blurfl $pth`
3205         if $test -f $xxx; then
3206         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3207                 echo exit 0 >bsd
3208                 echo exit 0 >usg
3209         else
3210                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3211                         echo "Looks kind of like an extended USG system, but we'll see..."
3212                 else
3213                         echo "Looks kind of like a USG system, but we'll see..."
3214                 fi
3215                 echo exit 0 >usg
3216         fi
3217 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3218         echo "Looks kind of like a BSD system, but we'll see..."
3219         d_bsd="$define"
3220         echo exit 0 >bsd
3221 else
3222         echo "Looks kind of like a Version 7 system, but we'll see..."
3223         echo exit 0 >v7
3224 fi
3225 case "$eunicefix" in
3226 *unixtovms*)
3227         $cat <<'EOI'
3228 There is, however, a strange, musty smell in the air that reminds me of
3229 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3230 EOI
3231         echo exit 0 >eunice
3232         d_eunice="$define"
3233 : it so happens the Eunice I know will not run shell scripts in Unix format
3234         ;;
3235 *)
3236         echo " "
3237         echo "Congratulations.  You aren't running Eunice."
3238         d_eunice="$undef"
3239         ;;
3240 esac
3241 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3242 case "$p_" in
3243 :) ;;
3244 *)
3245         $cat <<'EOI'
3246 I have the feeling something is not exactly right, however...don't tell me...
3247 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3248 EOI
3249         echo exit 0 >os2
3250         ;;
3251 esac
3252 if test -f /xenix; then
3253         echo "Actually, this looks more like a XENIX system..."
3254         echo exit 0 >xenix
3255         d_xenix="$define"
3256 else
3257         echo " "
3258         echo "It's not Xenix..."
3259         d_xenix="$undef"
3260 fi
3261 chmod +x xenix
3262 $eunicefix xenix
3263 if test -f /venix; then
3264         echo "Actually, this looks more like a VENIX system..."
3265         echo exit 0 >venix
3266 else
3267         echo " "
3268         if ./xenix; then
3269                 : null
3270         else
3271                 echo "Nor is it Venix..."
3272         fi
3273 fi
3274 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3275 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3276 $rm -f foo
3277
3278 : see if setuid scripts can be secure
3279 $cat <<EOM
3280
3281 Some kernels have a bug that prevents setuid #! scripts from being
3282 secure.  Some sites have disabled setuid #! scripts because of this.
3283
3284 First let's decide if your kernel supports secure setuid #! scripts.
3285 (If setuid #! scripts would be secure but have been disabled anyway,
3286 don't say that they are secure if asked.)
3287
3288 EOM
3289
3290 val="$undef"
3291 if $test -d /dev/fd; then
3292         echo "#!$ls" >reflect
3293         chmod +x,u+s reflect
3294         ./reflect >flect 2>&1
3295         if $contains "/dev/fd" flect >/dev/null; then
3296                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
3297                 val="$define"
3298         else
3299                 $cat <<EOM
3300 If you are not sure if they are secure, I can check but I'll need a
3301 username and password different from the one you are using right now.
3302 If you don't have such a username or don't want me to test, simply
3303 enter 'none'.
3304
3305 EOM
3306                 rp='Other username to test security of setuid scripts with?'
3307                 dflt='none'
3308                 . ./myread
3309                 case "$ans" in
3310                 n|none)
3311                         case "$d_suidsafe" in
3312                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
3313                                 dflt=n;;
3314                         "$undef")
3315                                 echo "Well, the $hint value is *not* secure." >&4
3316                                 dflt=n;;
3317                         *)      echo "Well, the $hint value *is* secure." >&4
3318                                 dflt=y;;
3319                         esac
3320                         ;;
3321                 *)
3322                         $rm -f reflect flect
3323                         echo "#!$ls" >reflect
3324                         chmod +x,u+s reflect
3325                         echo >flect
3326                         chmod a+w flect
3327                         echo '"su" will (probably) prompt you for '"$ans's password."
3328                         su $ans -c './reflect >flect'
3329                         if $contains "/dev/fd" flect >/dev/null; then
3330                                 echo "Okay, it looks like setuid scripts are secure." >&4
3331                                 dflt=y
3332                         else
3333                                 echo "I don't think setuid scripts are secure." >&4
3334                                 dflt=n
3335                         fi
3336                         ;;
3337                 esac
3338                 rp='Does your kernel have *secure* setuid scripts?'
3339                 . ./myread
3340                 case "$ans" in
3341                 [yY]*)  val="$define";;
3342                 *)      val="$undef";;
3343                 esac
3344         fi
3345 else
3346         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
3347         echo "(That's for file descriptors, not floppy disks.)"
3348         val="$undef"
3349 fi
3350 set d_suidsafe
3351 eval $setvar
3352
3353 $rm -f reflect flect
3354
3355 : now see if they want to do setuid emulation
3356 echo " "
3357 val="$undef"
3358 case "$d_suidsafe" in
3359 "$define")
3360         val="$undef"
3361         echo "No need to emulate SUID scripts since they are secure here." >& 4
3362         ;;
3363 *)
3364         $cat <<EOM
3365 Some systems have disabled setuid scripts, especially systems where
3366 setuid scripts cannot be secure.  On systems where setuid scripts have
3367 been disabled, the setuid/setgid bits on scripts are currently
3368 useless.  It is possible for $package to detect those bits and emulate
3369 setuid/setgid in a secure fashion.  This emulation will only work if
3370 setuid scripts have been disabled in your kernel.
3371
3372 EOM
3373         case "$d_dosuid" in
3374         "$define") dflt=y ;;
3375         *) dflt=n ;;
3376         esac
3377         rp="Do you want to do setuid/setgid emulation?"
3378         . ./myread
3379         case "$ans" in
3380         [yY]*)  val="$define";;
3381         *)      val="$undef";;
3382         esac
3383         ;;
3384 esac
3385 set d_dosuid
3386 eval $setvar
3387
3388 : determine where manual pages are on this system
3389 echo " "
3390 case "$sysman" in
3391 '') 
3392         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
3393         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
3394         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
3395         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
3396         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
3397         sysman=`./loc . /usr/man/man1 $syspath`
3398         ;;
3399 esac
3400 if $test -d "$sysman"; then
3401         echo "System manual is in $sysman." >&4
3402 else
3403         echo "Could not find manual pages in source form." >&4
3404 fi
3405
3406 : see what memory models we can support
3407 case "$models" in
3408 '')
3409         $cat >pdp11.c <<'EOP'
3410 int main() {
3411 #ifdef pdp11
3412         exit(0);
3413 #else
3414         exit(1);
3415 #endif
3416 }
3417 EOP
3418         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
3419         if $test -f pdp11 && ./pdp11 2>/dev/null; then
3420                 dflt='unsplit split'
3421         else
3422                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
3423                 case "$tans" in
3424                 X) dflt='none';;
3425                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
3426                                 dflt='small'
3427                         else
3428                                 dflt=''
3429                         fi
3430                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
3431                                 dflt="$dflt medium"
3432                         fi
3433                         if $test -d /lib/large || $test -d /usr/lib/large; then
3434                                 dflt="$dflt large"
3435                         fi
3436                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
3437                                 dflt="$dflt huge"
3438                         fi
3439                 esac
3440         fi;;
3441 *) dflt="$models";;
3442 esac
3443 $cat <<EOM
3444  
3445 Some systems have different model sizes.  On most systems they are called
3446 small, medium, large, and huge.  On the PDP11 they are called unsplit and
3447 split.  If your system doesn't support different memory models, say "none".
3448 If you wish to force everything to one memory model, say "none" here and
3449 put the appropriate flags later when it asks you for other cc and ld flags.
3450 Venix systems may wish to put "none" and let the compiler figure things out.
3451 (In the following question multiple model names should be space separated.)
3452
3453 The default for most systems is "none".
3454
3455 EOM
3456 rp="Which memory models are supported?"
3457 . ./myread
3458 models="$ans"
3459
3460 case "$models" in
3461 none)
3462         small=''
3463         medium=''
3464         large=''
3465         huge=''
3466         unsplit=''
3467         split=''
3468         ;;
3469 *split)
3470         case "$split" in
3471         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
3472                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
3473                         dflt='-i'
3474                 else
3475                         dflt='none'
3476                 fi;;
3477         *) dflt="$split";;
3478         esac
3479         rp="What flag indicates separate I and D space?"
3480         . ./myread
3481         tans="$ans"
3482         case "$tans" in
3483         none) tans='';;
3484         esac
3485         split="$tans"
3486         unsplit='';;
3487 *large*|*small*|*medium*|*huge*)
3488         case "$models" in
3489         *large*)
3490                 case "$large" in
3491                 '') dflt='-Ml';;
3492                 *) dflt="$large";;
3493                 esac
3494         rp="What flag indicates large model?"
3495         . ./myread
3496         tans="$ans"
3497         case "$tans" in
3498         none) tans='';
3499         esac
3500         large="$tans";;
3501         *) large='';;
3502         esac
3503         case "$models" in
3504         *huge*) case "$huge" in
3505                 '') dflt='-Mh';;
3506                 *) dflt="$huge";;
3507                 esac
3508                 rp="What flag indicates huge model?"
3509                 . ./myread
3510                 tans="$ans"
3511                 case "$tans" in
3512                 none) tans='';
3513                 esac
3514                 huge="$tans";;
3515         *) huge="$large";;
3516         esac
3517         case "$models" in
3518         *medium*) case "$medium" in
3519                 '') dflt='-Mm';;
3520                 *) dflt="$medium";;
3521                 esac
3522                 rp="What flag indicates medium model?"
3523                 . ./myread
3524                 tans="$ans"
3525                 case "$tans" in
3526                 none) tans='';
3527                 esac
3528                 medium="$tans";;
3529         *) medium="$large";;
3530         esac
3531         case "$models" in
3532         *small*) case "$small" in
3533                 '') dflt='none';;
3534                 *) dflt="$small";;
3535                 esac
3536                 rp="What flag indicates small model?"
3537                 . ./myread
3538                 tans="$ans"
3539                 case "$tans" in
3540                 none) tans='';
3541                 esac
3542                 small="$tans";;
3543         *) small='';;
3544         esac
3545         ;;
3546 *)
3547         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
3548         ;;
3549 esac
3550 $rm -f pdp11.* pdp11
3551
3552 : see if we need a special compiler
3553 echo " "
3554 if ./usg; then
3555         case "$cc" in
3556         '') case "$Mcc" in
3557                 /*) dflt='Mcc';;
3558                 *) case "$large" in
3559                         -M*) dflt='cc';;
3560                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3561                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3562                                                 dflt='cc'
3563                                         else
3564                                                 dflt='cc -M'
3565                                         fi
3566                                 else
3567                                         dflt='cc'
3568                                 fi;;
3569                         esac;;
3570                 esac;;
3571         *)  dflt="$cc";;
3572         esac
3573         case "$dflt" in
3574         *M*)    $cat <<'EOM'
3575 On some older systems the default C compiler will not resolve multiple global
3576 references that happen to have the same name.  On some such systems the "Mcc"
3577 command may be used to force these to be resolved.  On other systems a "cc -M"
3578 command is required.  (Note that the -M flag on other systems indicates a
3579 memory model to use!) If you have the Gnu C compiler, you might wish to use
3580 that instead.
3581
3582 EOM
3583         ;;
3584         esac
3585         rp="Use which C compiler?"
3586         . ./myread
3587         cc="$ans"
3588 else
3589         case "$cc" in
3590         '') dflt=cc;;
3591         *) dflt="$cc";;
3592         esac
3593         rp="Use which C compiler?"
3594         . ./myread
3595         cc="$ans"
3596 fi
3597 : Look for a hint-file generated 'call-back-unit'.  Now that the
3598 : user has specified the compiler, we may need to set or change some
3599 : other defaults.
3600 if $test -f cc.cbu; then
3601     . ./cc.cbu
3602 fi
3603 echo " "
3604 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3605 $cat >gccvers.c <<EOM
3606 #include <stdio.h>
3607 int main() {
3608 #ifdef __GNUC__
3609 #ifdef __VERSION__
3610         printf("%s\n", __VERSION__);
3611 #else
3612         printf("%s\n", "1");
3613 #endif
3614 #endif
3615         exit(0);
3616 }
3617 EOM
3618 if $cc -o gccvers gccvers.c >/dev/null 2>&1; then
3619         gccversion=`./gccvers`
3620         case "$gccversion" in
3621         '') echo "You are not using GNU cc." ;;
3622         *)  echo "You are using GNU cc $gccversion." ;;
3623         esac
3624 else
3625         echo " "
3626         echo "*** WHOA THERE!!! ***" >&4
3627         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3628         case "$knowitall" in
3629         '')
3630         echo "    You'd better start hunting for one and let me know about it." >&4
3631                 exit 1
3632                 ;;
3633         esac
3634 fi
3635 $rm -f gccvers*
3636 case "$gccversion" in
3637 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3638 esac
3639
3640 : What should the include directory be ?
3641 echo " "
3642 $echo $n "Hmm...  $c"
3643 dflt='/usr/include'
3644 incpath=''
3645 mips_type=''
3646 if $test -f /bin/mips && /bin/mips; then
3647         echo "Looks like a MIPS system..."
3648         $cat >usr.c <<'EOCP'
3649 #ifdef SYSTYPE_BSD43
3650 /bsd43
3651 #endif
3652 EOCP
3653         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3654                 dflt='/bsd43/usr/include'
3655                 incpath='/bsd43'
3656                 mips_type='BSD 4.3'
3657         else
3658                 mips_type='System V'
3659         fi
3660         $rm -f usr.c usr.out
3661         echo "and you're compiling with the $mips_type compiler and libraries."
3662         xxx_prompt=y
3663         echo "exit 0" >mips
3664 else
3665         echo "Doesn't look like a MIPS system."
3666         xxx_prompt=n
3667         echo "exit 1" >mips
3668 fi
3669 chmod +x mips
3670 $eunicefix mips
3671 case "$usrinc" in
3672 '') ;;
3673 *) dflt="$usrinc";;
3674 esac
3675 case "$xxx_prompt" in
3676 y)      fn=d/
3677         echo " "
3678         rp='Where are the include files you want to use?'
3679         . ./getfile
3680         usrinc="$ans"
3681         ;;
3682 *)      usrinc="$dflt"
3683         ;;
3684 esac
3685
3686 : see how we invoke the C preprocessor
3687 echo " "
3688 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3689 cat <<'EOT' >testcpp.c
3690 #define ABC abc
3691 #define XYZ xyz
3692 ABC.XYZ
3693 EOT
3694 cd ..
3695 if test ! -f cppstdin; then
3696         echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3697 else
3698         echo "Keeping your $hint cppstdin wrapper."
3699 fi
3700 chmod 755 cppstdin
3701 wrapper=`pwd`/cppstdin
3702 ok='false'
3703 cd UU
3704
3705 if $test "X$cppstdin" != "X" && \
3706         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3707         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3708 then
3709         echo "You used to use $cppstdin $cppminus so we'll use that again."
3710         case "$cpprun" in
3711         '') echo "But let's see if we can live without a wrapper..." ;;
3712         *)
3713                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3714                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3715                 then
3716                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3717                         ok='true'
3718                 else
3719                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3720                 fi
3721                 ;;
3722         esac
3723 else
3724         case "$cppstdin" in
3725         '') ;;
3726         *)
3727                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3728                 ;;
3729         esac
3730 fi
3731
3732 if $ok; then
3733         : nothing
3734 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3735         $cc -E <testcpp.c >testcpp.out 2>&1; \
3736         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3737         echo "Yup, it does."
3738         x_cpp="$cc -E"
3739         x_minus='';
3740 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3741         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3742         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3743         echo "Yup, it does."
3744         x_cpp="$cc -E"
3745         x_minus='-';
3746 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3747         $cc -P <testcpp.c >testcpp.out 2>&1; \
3748         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3749         echo "Yipee, that works!"
3750         x_cpp="$cc -P"
3751         x_minus='';
3752 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3753         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3754         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3755         echo "At long last!"
3756         x_cpp="$cc -P"
3757         x_minus='-';
3758 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3759         $cpp <testcpp.c >testcpp.out 2>&1; \
3760         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3761         echo "It works!"
3762         x_cpp="$cpp"
3763         x_minus='';
3764 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3765         $cpp - <testcpp.c >testcpp.out 2>&1; \
3766         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3767         echo "Hooray, it works!  I was beginning to wonder."
3768         x_cpp="$cpp"
3769         x_minus='-';
3770 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3771         $wrapper <testcpp.c >testcpp.out 2>&1; \
3772         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3773         x_cpp="$wrapper"
3774         x_minus=''
3775         echo "Eureka!"
3776 else
3777         dflt=''
3778         rp="No dice.  I can't find a C preprocessor.  Name one:"
3779         . ./myread
3780         x_cpp="$ans"
3781         x_minus=''
3782         $x_cpp <testcpp.c >testcpp.out 2>&1
3783         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3784                 echo "OK, that will do." >&4
3785         else
3786 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3787                 exit 1
3788         fi
3789 fi
3790
3791 case "$ok" in
3792 false)
3793         cppstdin="$x_cpp"
3794         cppminus="$x_minus"
3795         cpprun="$x_cpp"
3796         cpplast="$x_minus"
3797         set X $x_cpp
3798         shift
3799         case "$1" in
3800         "$cpp")
3801                 echo "Perhaps can we force $cc -E using a wrapper..."
3802                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3803                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3804                 then
3805                         echo "Yup, we can."
3806                         cppstdin="$wrapper"
3807                         cppminus='';
3808                 else
3809                         echo "Nope, we'll have to live without it..."
3810                 fi
3811                 ;;
3812         esac
3813         case "$cpprun" in
3814         "$wrapper")
3815                 cpprun=''
3816                 cpplast=''
3817                 ;;
3818         esac
3819         ;;
3820 esac
3821
3822 case "$cppstdin" in
3823 "$wrapper"|'cppstdin') ;;
3824 *) $rm -f $wrapper;;
3825 esac
3826 $rm -f testcpp.c testcpp.out
3827
3828 : Set private lib path
3829 case "$plibpth" in
3830 '') if ./mips; then
3831                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3832         fi;;
3833 esac
3834 case "$libpth" in
3835 ' ') dlist='';;
3836 '') dlist="$loclibpth $plibpth $glibpth";;
3837 *) dlist="$libpth";;
3838 esac
3839
3840 : Now check and see which directories actually exist, avoiding duplicates
3841 libpth=''
3842 for xxx in $dlist
3843 do
3844     if $test -d $xxx; then
3845                 case " $libpth " in
3846                 *" $xxx "*) ;;
3847                 *) libpth="$libpth $xxx";;
3848                 esac
3849     fi
3850 done
3851 $cat <<'EOM'
3852
3853 Some systems have incompatible or broken versions of libraries.  Among
3854 the directories listed in the question below, please remove any you
3855 know not to be holding relevant libraries, and add any that are needed.
3856 Say "none" for none.
3857
3858 EOM
3859 case "$libpth" in
3860 '') dflt='none';;
3861 *)
3862         set X $libpth
3863         shift
3864         dflt=${1+"$@"}
3865         ;;
3866 esac
3867 rp="Directories to use for library searches?"
3868 . ./myread
3869 case "$ans" in
3870 none) libpth=' ';;
3871 *) libpth="$ans";;
3872 esac
3873
3874 : compute shared library extension
3875 case "$so" in
3876 '')
3877         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3878                 dflt='sl'
3879         else
3880                 dflt='so'
3881         fi
3882         ;;
3883 *) dflt="$so";;
3884 esac
3885 $cat <<EOM
3886
3887 On some systems, shared libraries may be available.  Answer 'none' if
3888 you want to suppress searching of shared libraries for the remaining
3889 of this configuration.
3890
3891 EOM
3892 rp='What is the file extension used for shared libraries?'
3893 . ./myread
3894 so="$ans"
3895
3896 : Define several unixisms.
3897 : Hints files or command line option can be used to override them.
3898 : The convoluted testing is in case hints files set either the old
3899 : or the new name.
3900 case "$_exe" in
3901 '')     case "$exe_ext" in
3902     '') ;;
3903         *)      _exe="$exe_ext" ;;
3904         esac
3905         ;;
3906 esac
3907 case "$_a" in
3908 '')     case "$lib_ext" in
3909     '') _a='.a';;
3910         *)      _a="$lib_ext" ;;
3911         esac
3912         ;;
3913 esac
3914 case "$_o" in
3915 '') case "$obj_ext" in
3916         '')     _o='.o';;
3917         *)      _o="$obj_ext";;
3918         esac
3919         ;;
3920 esac
3921 case "$p_" in
3922 '') case "$path_sep" in
3923         '')     p_=':';;
3924         *)      p_="$path_sep";;
3925         esac
3926         ;;
3927 esac
3928 exe_ext=$_exe
3929 lib_ext=$_a
3930 obj_ext=$_o
3931 path_sep=$p_
3932
3933 : Which makefile gets called first.  This is used by make depend.
3934 case "$firstmakefile" in
3935 '') firstmakefile='makefile';;
3936 esac
3937
3938 : Looking for optional libraries
3939 echo " "
3940 echo "Checking for optional libraries..." >&4
3941 case "$libs" in
3942 ' '|'') dflt='';;
3943 *) dflt="$libs";;
3944 esac
3945 case "$libswanted" in
3946 '') libswanted='c_s';;
3947 esac
3948 for thislib in $libswanted; do
3949         
3950         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
3951                 $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3952                 echo "Found -l$thislib (shared)."
3953                 case " $dflt " in
3954                 *"-l$thislib "*);;
3955                 *) dflt="$dflt -l$thislib";;
3956                 esac
3957         elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
3958                 echo "Found -l$thislib (shared)."
3959                 case " $dflt " in
3960                 *"-l$thislib "*);;
3961                 *) dflt="$dflt -l$thislib";;
3962                 esac
3963         elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
3964                 echo "Found -l$thislib."
3965                 case " $dflt " in
3966                 *"-l$thislib "*);;
3967                 *) dflt="$dflt -l$thislib";;
3968                 esac
3969         elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
3970                 echo "Found -l$thislib."
3971                 case " $dflt " in
3972                 *"-l$thislib "*);;
3973                 *) dflt="$dflt -l$thislib";;
3974                 esac
3975         elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
3976                 echo "Found -l${thislib}_s."
3977                 case " $dflt " in
3978                 *"-l$thislib "*);;
3979                 *) dflt="$dflt -l${thislib}_s";;
3980                 esac
3981         elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
3982                 echo "Found -l$thislib."
3983                 case " $dflt " in
3984                 *"-l$thislib "*);;
3985                 *) dflt="$dflt -l$thislib";;
3986                 esac
3987         else
3988                 echo "No -l$thislib."
3989         fi
3990 done
3991 set X $dflt
3992 shift
3993 dflt="$*"
3994 case "$libs" in
3995 '') dflt="$dflt";;
3996 *) dflt="$libs";;
3997 esac
3998 case "$dflt" in
3999 ' '|'') dflt='none';;
4000 esac
4001
4002 $cat <<EOM
4003  
4004 Some versions of Unix support shared libraries, which make executables smaller
4005 but make load time slightly longer.
4006
4007 On some systems, mostly System V Release 3's, the shared library is included
4008 by putting the option "-lc_s" as the last thing on the cc command line when
4009 linking.  Other systems use shared libraries by default.  There may be other
4010 libraries needed to compile $package on your machine as well.  If your system
4011 needs the "-lc_s" option, include it here.  Include any other special libraries
4012 here as well.  Say "none" for none.
4013 EOM
4014
4015 echo " "
4016 rp="Any additional libraries?"
4017 . ./myread
4018 case "$ans" in
4019 none) libs=' ';;
4020 *) libs="$ans";;
4021 esac
4022
4023 : determine optimize, if desired, or use for debug flag also
4024 case "$optimize" in
4025 ' '|$undef) dflt='none';;
4026 '') dflt='-O';;
4027 *) dflt="$optimize";;
4028 esac
4029 $cat <<EOH
4030
4031 Some C compilers have problems with their optimizers.  By default, $package
4032 compiles with the -O flag to use the optimizer.  Alternately, you might want
4033 to use the symbolic debugger, which uses the -g flag (on traditional Unix
4034 systems).  Either flag can be specified here.  To use neither flag, specify
4035 the word "none".
4036
4037 EOH
4038 rp="What optimizer/debugger flag should be used?"
4039 . ./myread
4040 optimize="$ans"
4041 case "$optimize" in
4042 'none') optimize=" ";;
4043 esac
4044
4045 dflt=''
4046 : We will not override a previous value, but we might want to
4047 : augment a hint file
4048 case "$hint" in
4049 none|recommended)
4050         case "$gccversion" in
4051         1*) dflt='-fpcc-struct-return' ;;
4052         esac
4053         case "$optimize" in
4054         *-g*) dflt="$dflt -DDEBUGGING";;
4055         esac
4056         case "$gccversion" in
4057         2*) if test -d /etc/conf/kconfig.d &&
4058                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4059                 then
4060                         dflt="$dflt -posix"
4061                 fi
4062                 ;;
4063         esac
4064         ;;
4065 esac
4066
4067 case "$mips_type" in
4068 *BSD*|'') inclwanted="$locincpth $usrinc";;
4069 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4070 esac
4071 for thisincl in $inclwanted; do
4072         if $test -d $thisincl; then
4073                 if $test x$thisincl != x$usrinc; then
4074                         case "$dflt" in
4075                         *$thisincl*);;
4076                         *) dflt="$dflt -I$thisincl";;
4077                         esac
4078                 fi
4079         fi
4080 done
4081
4082 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4083         xxx=true;
4084 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4085         xxx=true;
4086 else
4087         xxx=false;
4088 fi;
4089 if $xxx; then
4090         case "$dflt" in
4091         *$2*);;
4092         *) dflt="$dflt -D$2";;
4093         esac;
4094 fi'
4095
4096 set signal.h LANGUAGE_C; eval $inctest
4097
4098 case "$hint" in
4099 none|recommended) dflt="$ccflags $dflt" ;;
4100 *) dflt="$ccflags";;
4101 esac
4102
4103 case "$dflt" in
4104 ''|' ') dflt=none;;
4105 esac
4106 $cat <<EOH
4107
4108 Your C compiler may want other flags.  For this question you should include
4109 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4110 but you should NOT include libraries or ld flags like -lwhatever.  If you
4111 want $package to honor its debug switch, you should include -DDEBUGGING here.
4112 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4113
4114 To use no flags, specify the word "none".
4115
4116 EOH
4117 set X $dflt
4118 shift
4119 dflt=${1+"$@"}
4120 rp="Any additional cc flags?"
4121 . ./myread
4122 case "$ans" in
4123 none) ccflags='';;
4124 *) ccflags="$ans";;
4125 esac
4126
4127 : the following weeds options from ccflags that are of no interest to cpp
4128 cppflags="$ccflags"
4129 case "$gccversion" in
4130 1*) cppflags="$cppflags -D__GNUC__"
4131 esac
4132 case "$mips_type" in
4133 '');;
4134 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4135 esac
4136 case "$cppflags" in
4137 '');;
4138 *)
4139         echo " "
4140         echo "Let me guess what the preprocessor flags are..." >&4
4141         set X $cppflags
4142         shift
4143         cppflags=''
4144         $cat >cpp.c <<'EOM'
4145 #define BLURFL foo
4146
4147 BLURFL xx LFRULB
4148 EOM
4149         previous=''
4150         for flag in $*
4151         do
4152                 case "$flag" in
4153                 -*) ftry="$flag";;
4154                 *) ftry="$previous $flag";;
4155                 esac
4156                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4157                         >cpp1.out 2>/dev/null && \
4158                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4159                         >cpp2.out 2>/dev/null && \
4160                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4161                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4162                 then
4163                         cppflags="$cppflags $ftry"
4164                         previous=''
4165                 else
4166                         previous="$flag"
4167                 fi
4168         done
4169         set X $cppflags
4170         shift
4171         cppflags=${1+"$@"}
4172         case "$cppflags" in
4173         *-*)  echo "They appear to be: $cppflags";;
4174         esac
4175         $rm -f cpp.c cpp?.out
4176         ;;
4177 esac
4178
4179 : flags used in final linking phase
4180 case "$ldflags" in
4181 '') if ./venix; then
4182                 dflt='-i -z'
4183         else
4184                 dflt=''
4185         fi
4186         case "$ccflags" in
4187         *-posix*) dflt="$dflt -posix" ;;
4188         esac
4189         ;;
4190 *) dflt="$ldflags";;
4191 esac
4192
4193 : Try to guess additional flags to pick up local libraries.
4194 for thislibdir in $libpth; do
4195         case " $loclibpth " in
4196         *" $thislibdir "*)
4197                 case "$dflt " in 
4198                 *"-L$thislibdir "*) ;;
4199                 *)  dflt="$dflt -L$thislibdir" ;;
4200                 esac
4201                 ;;
4202         esac
4203 done
4204
4205 case "$dflt" in
4206 '') dflt='none' ;;
4207 esac
4208
4209 $cat <<EOH
4210
4211 Your C linker may need flags.  For this question you should
4212 include -L/whatever and any other flags used by the C linker, but you
4213 should NOT include libraries like -lwhatever.
4214
4215 Make sure you include the appropriate -L/path flags if your C linker
4216 does not normally search all of the directories you specified above,
4217 namely
4218         $libpth
4219 To use no flags, specify the word "none".
4220
4221 EOH
4222
4223 rp="Any additional ld flags (NOT including libraries)?"
4224 . ./myread
4225 case "$ans" in
4226 none) ldflags='';;
4227 *) ldflags="$ans";;
4228 esac
4229 rmlist="$rmlist pdp11"
4230
4231 : coherency check
4232 echo " "
4233 echo "Checking your choice of C compiler and flags for coherency..." >&4
4234 $cat > try.c <<'EOF'
4235 #include <stdio.h>
4236 int main() { printf("Ok\n"); exit(0); }
4237 EOF
4238 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4239 shift
4240 $cat >try.msg <<'EOM'
4241 I've tried to compile and run the following simple program:
4242
4243 EOM
4244 $cat try.c >> try.msg
4245
4246 $cat >> try.msg <<EOM
4247
4248 I used the command:
4249
4250         $*
4251         ./try
4252
4253 and I got the following output:
4254
4255 EOM
4256 dflt=y
4257 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4258         if sh -c './try' >>try.msg 2>&1; then
4259                 xxx=`./try`
4260                 case "$xxx" in
4261                 "Ok") dflt=n ;;
4262                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4263                         case " $libs " in
4264                         *" -lsfio "*)
4265                                 cat >> try.msg <<'EOQS'
4266 If $libs contains -lsfio, and sfio is mis-configured, then it
4267 sometimes (apparently) runs and exits with a 0 status, but with no
4268 output!  It may have to do with sfio's use of _exit vs. exit.
4269
4270 EOQS
4271                                 rp="You have a big problem.  Shall I abort Configure"
4272                                 dflt=y
4273                                 ;;
4274                         esac
4275                         ;;
4276                 esac
4277         else
4278                 echo "The program compiled OK, but exited with status $?." >>try.msg
4279                 rp="You have a problem.  Shall I abort Configure"
4280                 dflt=y
4281         fi
4282 else
4283         echo "I can't compile the test program." >>try.msg
4284         rp="You have a BIG problem.  Shall I abort Configure"
4285         dflt=y
4286 fi
4287 case "$dflt" in
4288 y)
4289         $cat try.msg >&4
4290         case "$knowitall" in
4291         '')
4292                 echo "(The supplied flags or libraries might be incorrect.)"
4293                 ;;
4294         *) dflt=n;;
4295         esac
4296         echo " "
4297         . ./myread
4298         case "$ans" in
4299         n*|N*) ;;
4300         *)      echo "Ok.  Stopping Configure." >&4
4301                 exit 1
4302                 ;;
4303         esac
4304         ;;
4305 n) echo "OK, that should do.";;
4306 esac
4307 $rm -f try try.* core
4308
4309 : determine filename position in cpp output
4310 echo " "
4311 echo "Computing filename position in cpp output for #include directives..." >&4
4312 echo '#include <stdio.h>' > foo.c
4313 $cat >fieldn <<EOF
4314 $startsh
4315 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4316 $grep '^[       ]*#.*stdio\.h' | \
4317 while read cline; do
4318         pos=1
4319         set \$cline
4320         while $test \$# -gt 0; do
4321                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4322                         echo "\$pos"
4323                         exit 0
4324                 fi
4325                 shift
4326                 pos=\`expr \$pos + 1\`
4327         done
4328 done
4329 EOF
4330 chmod +x fieldn
4331 fieldn=`./fieldn`
4332 $rm -f foo.c fieldn
4333 case $fieldn in
4334 '') pos='???';;
4335 1) pos=first;;
4336 2) pos=second;;
4337 3) pos=third;;
4338 *) pos="${fieldn}th";;
4339 esac
4340 echo "Your cpp writes the filename in the $pos field of the line."
4341
4342 : locate header file
4343 $cat >findhdr <<EOF
4344 $startsh
4345 wanted=\$1
4346 name=''
4347 for usrincdir in $usrinc
4348 do
4349         if test -f \$usrincdir/\$wanted; then
4350                 echo "\$usrincdir/\$wanted"
4351                 exit 0
4352         fi
4353 done
4354 awkprg='{ print \$$fieldn }'
4355 echo "#include <\$wanted>" > foo\$\$.c
4356 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4357 $grep "^[       ]*#.*\$wanted" | \
4358 while read cline; do
4359         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4360         case "\$name" in
4361         *[/\\\\]\$wanted) echo "\$name"; exit 0;;
4362         *) name='';;
4363         esac;
4364 done;
4365 $rm -f foo\$\$.c;
4366 case "\$name" in
4367 '') exit 1;;
4368 esac
4369 EOF
4370 chmod +x findhdr
4371
4372 : define an alternate in-header-list? function
4373 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4374 cont=true; xxf="echo \"<\$1> found.\" >&4";
4375 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4376 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4377 esac;
4378 case $# in 4) instead=instead;; *) instead="at last";; esac;
4379 while $test "$cont"; do
4380         xxx=`./findhdr $1`
4381         var=$2; eval "was=\$$2";
4382         if $test "$xxx" && $test -r "$xxx";
4383         then eval $xxf;
4384         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4385                 cont="";
4386         else eval $xxnf;
4387         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4388         set $yyy; shift; shift; yyy=$@;
4389         case $# in 0) cont="";;
4390         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4391                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4392         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4393                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4394         esac;
4395 done;
4396 while $test "$yyy";
4397 do set $yyy; var=$2; eval "was=\$$2";
4398         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4399         set $yyy; shift; shift; yyy=$@;
4400 done'
4401
4402 : see if this is a malloc.h system
4403 set malloc.h i_malloc
4404 eval $inhdr
4405
4406 : see if stdlib is available
4407 set stdlib.h i_stdlib
4408 eval $inhdr
4409
4410 : determine which malloc to compile in
4411 echo " "
4412 case "$usemymalloc" in
4413 ''|[yY]*|true|$define)  dflt='y' ;;
4414 *)      dflt='n' ;;
4415 esac
4416 rp="Do you wish to attempt to use the malloc that comes with $package?"
4417 . ./myread
4418 usemymalloc="$ans"
4419 case "$ans" in
4420 y*|true)
4421         usemymalloc='y'
4422         mallocsrc='malloc.c'
4423         mallocobj="malloc$_o"
4424         d_mymalloc="$define"
4425         case "$libs" in
4426         *-lmalloc*)
4427                 : Remove malloc from list of libraries to use
4428                 echo "Removing unneeded -lmalloc from library list" >&4
4429                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4430                 shift
4431                 libs="$*"
4432                 echo "libs = $libs" >&4
4433                 ;;
4434         esac
4435         ;;
4436 *)
4437         usemymalloc='n'
4438         mallocsrc=''
4439         mallocobj=''
4440         d_mymalloc="$undef"
4441         ;;
4442 esac
4443
4444 : compute the return types of malloc and free
4445 echo " "
4446 $cat >malloc.c <<END
4447 #$i_malloc I_MALLOC
4448 #$i_stdlib I_STDLIB
4449 #include <stdio.h>
4450 #include <sys/types.h>
4451 #ifdef I_MALLOC
4452 #include <malloc.h>
4453 #endif
4454 #ifdef I_STDLIB
4455 #include <stdlib.h>
4456 #endif
4457 #ifdef TRY_MALLOC
4458 void *malloc();
4459 #endif
4460 #ifdef TRY_FREE
4461 void free();
4462 #endif
4463 END
4464 case "$malloctype" in
4465 '')
4466         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4467                 malloctype='void *'
4468         else
4469                 malloctype='char *'
4470         fi
4471         ;;
4472 esac
4473 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4474
4475 case "$freetype" in
4476 '')
4477         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4478                 freetype='void'
4479         else
4480                 freetype='int'
4481         fi
4482         ;;
4483 esac
4484 echo "Your system uses $freetype free(), it would seem." >&4
4485 $rm -f malloc.[co]
4486 : Cruising for prototypes
4487 echo " "
4488 echo "Checking out function prototypes..." >&4
4489 $cat >prototype.c <<'EOCP'
4490 int main(int argc, char *argv[]) {
4491         exit(0);}
4492 EOCP
4493 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
4494         echo "Your C compiler appears to support function prototypes."
4495         val="$define"
4496 else
4497         echo "Your C compiler doesn't seem to understand function prototypes."
4498         val="$undef"
4499 fi
4500 set prototype
4501 eval $setvar
4502 $rm -f prototype*
4503
4504 case "$prototype" in
4505 "$define") ;;
4506 *)      ansi2knr='ansi2knr'
4507         echo " "
4508         cat <<EOM >&4
4509
4510 $me:  FATAL ERROR:
4511 This version of $package can only be compiled by a compiler that 
4512 understands function prototypes.  Unfortunately, your C compiler 
4513         $cc $ccflags
4514 doesn't seem to understand them.  Sorry about that.
4515
4516 If GNU cc is available for your system, perhaps you could try that instead.  
4517
4518 Eventually, we hope to support building Perl with pre-ANSI compilers.
4519 If you would like to help in that effort, please contact <perlbug@perl.org>.
4520
4521 Aborting Configure now.
4522 EOM
4523         exit 2
4524         ;;
4525 esac
4526
4527 : determine where public executables go
4528 echo " "
4529 set dflt bin bin
4530 eval $prefixit
4531 fn=d~
4532 rp='Pathname where the public executables will reside?'
4533 . ./getfile
4534 if $test "X$ansexp" != "X$binexp"; then
4535         installbin=''
4536 fi
4537 bin="$ans"
4538 binexp="$ansexp"
4539 if $afs; then
4540         $cat <<EOM
4541
4542 Since you are running AFS, I need to distinguish the directory in which
4543 executables reside from the directory in which they are installed (and from
4544 which they are presumably copied to the former directory by occult means).
4545
4546 EOM
4547         case "$installbin" in
4548         '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
4549         *) dflt="$installbin";;
4550         esac
4551         fn=de~
4552         rp='Where will public executables be installed?'
4553         . ./getfile
4554         installbin="$ans"
4555 else
4556         installbin="$binexp"
4557 fi
4558
4559 : determine whether to install perl also as /usr/bin/perl
4560
4561 echo " "
4562 if test -d /usr/bin -a "X$installbin" != X/usr/bin; then
4563         $cat <<EOM
4564 Many scripts expect to perl to be installed as /usr/bin/perl.
4565 I can install the perl you are about to compile also as /usr/bin/perl
4566 (in addition to $installbin/perl).
4567 EOM
4568         case "$installusrbinperl" in
4569         "$undef"|[nN]*) dflt='n';;
4570         *)              dflt='y';;
4571         esac
4572         rp="Do you want to install perl as /usr/bin/perl?"
4573         . ./myread
4574         case "$ans" in
4575         [yY]*)  val="$define";;
4576         *)      val="$undef" ;;
4577         esac
4578 else
4579         val="$undef"
4580 fi
4581 set installusrbinperl
4582 eval $setvar
4583
4584 : define a shorthand compile call
4585 compile='
4586 mc_file=$1;
4587 shift;
4588 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4589 : define a shorthand compile call for compilations that should be ok.
4590 compile_ok='
4591 mc_file=$1;
4592 shift;
4593 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4594
4595 echo " "
4596 echo "Checking for GNU C Library..." >&4
4597 cat >gnulibc.c <<EOM
4598 #include <stdio.h>
4599 int main()
4600 {
4601 #ifdef __GLIBC__
4602     exit(0);
4603 #else
4604     exit(1);
4605 #endif
4606 }
4607 EOM
4608 set gnulibc
4609 if eval $compile_ok && ./gnulibc; then
4610         val="$define"
4611         echo "You are using the GNU C Library"
4612 else
4613         val="$undef"
4614         echo "You are not using the GNU C Library"
4615 fi
4616 $rm -f gnulibc*
4617 set d_gnulibc
4618 eval $setvar
4619
4620 : see if nm is to be used to determine whether a symbol is defined or not
4621 case "$usenm" in
4622 '')
4623         dflt=''
4624         case "$d_gnulibc" in
4625         "$define")
4626                 echo " "
4627                 echo "nm probably won't work on the GNU C Library." >&4
4628                 dflt=n
4629                 ;;
4630         esac
4631         case "$dflt" in
4632         '') 
4633                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4634                         echo " "
4635                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4636                         echo "'nm' won't be sufficient on this sytem." >&4
4637                         dflt=n
4638                 fi
4639                 ;;
4640         esac
4641         case "$dflt" in
4642         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4643                 if $test $dflt -gt 20; then
4644                         dflt=y
4645                 else
4646                         dflt=n
4647                 fi
4648                 ;;
4649         esac
4650         ;;
4651 *)
4652         case "$usenm" in
4653         true|$define) dflt=y;;
4654         *) dflt=n;;
4655         esac
4656         ;;
4657 esac
4658 $cat <<EOM
4659
4660 I can use $nm to extract the symbols from your C libraries. This
4661 is a time consuming task which may generate huge output on the disk (up
4662 to 3 megabytes) but that should make the symbols extraction faster. The
4663 alternative is to skip the 'nm' extraction part and to compile a small
4664 test program instead to determine whether each symbol is present. If
4665 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4666 this may be the best solution.
4667
4668 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4669
4670 EOM
4671 rp="Shall I use $nm to extract C symbols from the libraries?"
4672 . ./myread
4673 case "$ans" in
4674 [Nn]*) usenm=false;;
4675 *) usenm=true;;
4676 esac
4677
4678 runnm=$usenm
4679 case "$reuseval" in
4680 true) runnm=false;;
4681 esac
4682
4683 : nm options which may be necessary
4684 case "$nm_opt" in
4685 '') if $test -f /mach_boot; then
4686                 nm_opt=''       # Mach
4687         elif $test -d /usr/ccs/lib; then
4688                 nm_opt='-p'     # Solaris (and SunOS?)
4689         elif $test -f /dgux; then
4690                 nm_opt='-p'     # DG-UX
4691         elif $test -f /lib64/rld; then
4692                 nm_opt='-p'     # 64-bit Irix
4693         else
4694                 nm_opt=''
4695         fi;;
4696 esac
4697
4698 : nm options which may be necessary for shared libraries but illegal
4699 : for archive libraries.  Thank you, Linux.
4700 case "$nm_so_opt" in
4701 '')     case "$myuname" in
4702         *linux*)
4703                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4704                         nm_so_opt='--dynamic'
4705                 fi
4706                 ;;
4707         esac
4708         ;;
4709 esac
4710
4711 case "$runnm" in
4712 true)
4713 : get list of predefined functions in a handy place
4714 echo " "
4715 case "$libc" in
4716 '') libc=unknown
4717         case "$libs" in
4718         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4719         esac
4720         ;;
4721 esac
4722 libnames='';
4723 case "$libs" in
4724 '') ;;
4725 *)  for thislib in $libs; do
4726         case "$thislib" in
4727         -lc|-lc_s)
4728                 : Handle C library specially below.
4729                 ;;
4730         -l*)
4731                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4732                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4733                         :
4734                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4735                         :
4736                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4737                         :
4738                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4739                         :
4740                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4741                         :
4742                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4743                         :
4744                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4745                         :
4746                 else
4747                         try=''
4748                 fi
4749                 libnames="$libnames $try"
4750                 ;;
4751         *) libnames="$libnames $thislib" ;;
4752         esac
4753         done
4754         ;;
4755 esac
4756 xxx=normal
4757 case "$libc" in
4758 unknown)
4759         set /lib/libc.$so
4760         for xxx in $libpth; do
4761                 $test -r $1 || set $xxx/libc.$so
4762                 : The messy sed command sorts on library version numbers.
4763                 $test -r $1 || \
4764                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4765                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4766                                 h
4767                                 s/[0-9][0-9]*/0000&/g
4768                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4769                                 G
4770                                 s/\n/ /' | \
4771                          sort | $sed -e 's/^.* //'`
4772                 eval set \$$#
4773         done
4774         $test -r $1 || set /usr/ccs/lib/libc.$so
4775         $test -r $1 || set /lib/libsys_s$_a
4776         ;;
4777 *)
4778         set blurfl
4779         ;;
4780 esac
4781 if $test -r "$1"; then
4782         echo "Your (shared) C library seems to be in $1."
4783         libc="$1"
4784 elif $test -r /lib/libc && $test -r /lib/clib; then
4785         echo "Your C library seems to be in both /lib/clib and /lib/libc."
4786         xxx=apollo
4787         libc='/lib/clib /lib/libc'
4788         if $test -r /lib/syslib; then
4789                 echo "(Your math library is in /lib/syslib.)"
4790                 libc="$libc /lib/syslib"
4791         fi
4792 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4793         echo "Your C library seems to be in $libc, as you said before."
4794 elif $test -r $incpath/usr/lib/libc$_a; then
4795         libc=$incpath/usr/lib/libc$_a;
4796         echo "Your C library seems to be in $libc.  That's fine."
4797 elif $test -r /lib/libc$_a; then
4798         libc=/lib/libc$_a;
4799         echo "Your C library seems to be in $libc.  You're normal."
4800 else
4801         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
4802                 :
4803         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4804                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4805         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4806                 :
4807         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4808                 :
4809         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4810                 :
4811         else
4812                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4813         fi
4814         if $test -r "$tans"; then
4815                 echo "Your C library seems to be in $tans, of all places."
4816                 libc=$tans
4817         else
4818                 libc='blurfl'
4819         fi
4820 fi
4821 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4822         dflt="$libc"
4823         cat <<EOM
4824
4825 If the guess above is wrong (which it might be if you're using a strange
4826 compiler, or your machine supports multiple models), you can override it here.
4827
4828 EOM
4829 else
4830         dflt=''
4831         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
4832         cat >&4 <<EOM
4833 I can't seem to find your C library.  I've looked in the following places:
4834
4835 EOM
4836         $sed 's/^/      /' libpath
4837         cat <<EOM
4838
4839 None of these seems to contain your C library. I need to get its name...
4840
4841 EOM
4842 fi
4843 fn=f
4844 rp='Where is your C library?'
4845 . ./getfile
4846 libc="$ans"
4847
4848 echo " "
4849 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
4850 set X `cat libnames`
4851 shift
4852 xxx=files
4853 case $# in 1) xxx=file; esac
4854 echo "Extracting names from the following $xxx for later perusal:" >&4
4855 echo " "
4856 $sed 's/^/      /' libnames >&4
4857 echo " "
4858 $echo $n "This may take a while...$c" >&4
4859
4860 for file in $*; do
4861         case $file in
4862         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
4863         *) $nm $nm_opt $file 2>/dev/null;;
4864         esac
4865 done >libc.tmp
4866
4867 $echo $n ".$c"
4868 $grep fprintf libc.tmp > libc.ptf
4869 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
4870 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
4871 xxx='[ADTSIW]'
4872 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
4873         eval $xscan;\
4874         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4875                 eval $xrun
4876 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
4877         eval $xscan;\
4878         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4879                 eval $xrun
4880 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
4881         eval $xscan;\
4882         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4883                 eval $xrun
4884 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
4885         eval $xscan;\
4886         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4887                 eval $xrun
4888 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
4889         eval $xscan;\
4890         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4891                 eval $xrun
4892 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
4893         eval $xscan;\
4894         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4895                 eval $xrun
4896 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
4897                                 -e '/ file/d' -e '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/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
4902         eval $xscan;\
4903         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4904                 eval $xrun
4905 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
4906         eval $xscan;\
4907         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4908                 eval $xrun
4909 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
4910         eval $xscan;\
4911         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4912                 eval $xrun
4913 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
4914         eval $xscan;\
4915         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4916                 eval $xrun
4917 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
4918         eval $xscan;\
4919         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4920                 eval $xrun
4921 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
4922         eval $xscan;\
4923         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4924                 eval $xrun
4925 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
4926         eval $xscan;\
4927         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4928                 eval $xrun
4929 else
4930         $nm -p $* 2>/dev/null >libc.tmp
4931         $grep fprintf libc.tmp > libc.ptf
4932         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
4933                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
4934         then
4935                 nm_opt='-p'
4936                 eval $xrun
4937         else
4938                 echo " "
4939                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
4940                 com=''
4941                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
4942                         for thisname in $libnames $libc; do
4943                                 $ar t $thisname >>libc.tmp
4944                         done
4945                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
4946                         echo "Ok." >&4
4947                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
4948                         # Repeat libc to extract forwarders to DLL entries too
4949                         for thisname in $libnames $libc; do
4950                                 $ar tv $thisname >>libc.tmp
4951                                 # Revision 50 of EMX has bug in $ar.
4952                                 # it will not extract forwarders to DLL entries
4953                                 # Use emximp which will extract exactly them.
4954                                 emximp -o tmp.imp $thisname \
4955                                     2>/dev/null && \
4956                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
4957                                     < tmp.imp >>libc.tmp
4958                                 $rm tmp.imp
4959                         done
4960                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
4961                         echo "Ok." >&4
4962                 else
4963                         echo "$ar didn't seem to work right." >&4
4964                         echo "Maybe this is a Cray...trying bld instead..." >&4
4965                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
4966                         then
4967                                 for thisname in $libnames; do
4968                                         bld t $libnames | \
4969                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
4970                                         $ar t $thisname >>libc.tmp
4971                                 done
4972                                 echo "Ok." >&4
4973                         else
4974                                 echo "That didn't work either.  Giving up." >&4
4975                                 exit 1
4976                         fi
4977                 fi
4978         fi
4979 fi
4980 nm_extract="$com"
4981 if $test -f /lib/syscalls.exp; then
4982         echo " "
4983         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
4984         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
4985 fi
4986 ;;
4987 esac
4988 $rm -f libnames libpath
4989
4990 : see if dld is available
4991 set dld.h i_dld
4992 eval $inhdr
4993
4994 : is a C symbol defined?
4995 csym='tlook=$1;
4996 case "$3" in
4997 -v) tf=libc.tmp; tc=""; tdc="";;
4998 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
4999 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5000 esac;
5001 tx=yes;
5002 case "$reuseval-$4" in
5003 true-) ;;
5004 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5005 esac;
5006 case "$tx" in
5007 yes)
5008         case "$runnm" in
5009         true)
5010                 if $contains $tlook $tf >/dev/null 2>&1;
5011                 then tval=true;
5012                 else tval=false;
5013                 fi;;
5014         *)
5015                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5016                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
5017                 then tval=true;
5018                 else tval=false;
5019                 fi;
5020                 $rm -f t t.c;;
5021         esac;;
5022 *)
5023         case "$tval" in
5024         $define) tval=true;;
5025         *) tval=false;;
5026         esac;;
5027 esac;
5028 eval "$2=$tval"'
5029
5030 : define an is-in-libc? function
5031 inlibc='echo " "; td=$define; tu=$undef;
5032 sym=$1; var=$2; eval "was=\$$2";
5033 tx=yes;
5034 case "$reuseval$was" in
5035 true) ;;
5036 true*) tx=no;;
5037 esac;
5038 case "$tx" in
5039 yes)
5040         set $sym tres -f;
5041         eval $csym;
5042         case "$tres" in
5043         true)
5044                 echo "$sym() found." >&4;
5045                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5046         *)
5047                 echo "$sym() NOT found." >&4;
5048                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5049         esac;;
5050 *)
5051         case "$was" in
5052         $define) echo "$sym() found." >&4;;
5053         *) echo "$sym() NOT found." >&4;;
5054         esac;;
5055 esac'
5056
5057 : see if dlopen exists
5058 xxx_runnm="$runnm"
5059 runnm=false
5060 set dlopen d_dlopen
5061 eval $inlibc
5062 runnm="$xxx_runnm"
5063
5064 : determine which dynamic loading, if any, to compile in
5065 echo " "
5066 dldir="ext/DynaLoader"
5067 case "$usedl" in
5068 $define|y|true)
5069         dflt='y'
5070         usedl="$define"
5071         ;;
5072 $undef|n|false)
5073         dflt='n'
5074         usedl="$undef"
5075         ;;
5076 *) 
5077         dflt='n'
5078         case "$d_dlopen" in
5079             $define) dflt='y' ;;
5080         esac
5081         case "$i_dld" in
5082             $define) dflt='y' ;;
5083         esac
5084         : Does a dl_xxx.xs file exist for this operating system
5085         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
5086         ;;
5087 esac
5088 rp="Do you wish to use dynamic loading?"
5089 . ./myread
5090 usedl="$ans"
5091 case "$ans" in
5092 y*) usedl="$define"
5093         case "$dlsrc" in
5094         '')
5095                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
5096                         dflt="$dldir/dl_${osname}.xs"
5097                 elif $test "$d_dlopen" = "$define" ; then
5098                         dflt="$dldir/dl_dlopen.xs"
5099                 elif $test "$i_dld" = "$define" ; then
5100                         dflt="$dldir/dl_dld.xs"
5101                 else
5102                         dflt=''
5103                 fi
5104                 ;;
5105         *)      dflt="$dldir/$dlsrc"
5106                 ;;
5107         esac
5108     echo "The following dynamic loading files are available:"
5109         : Can not go over to $dldir because getfile has path hard-coded in.
5110         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
5111         rp="Source file to use for dynamic loading"
5112         fn="fne"
5113         # XXX This getfile call will fail the existence check if you try 
5114         # building away from $src (this is not supported yet).
5115         . ./getfile
5116         usedl="$define"
5117         : emulate basename
5118         dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
5119
5120         $cat << EOM
5121
5122 Some systems may require passing special flags to $cc -c to
5123 compile modules that will be used to create a shared library.
5124 To use no flags, say "none".
5125
5126 EOM
5127     case "$cccdlflags" in
5128     '') case "$gccversion" in
5129                 '') case "$osname" in
5130                         hpux)   dflt='+z' ;;
5131                         next)   dflt='none' ;;
5132                         irix*)  dflt='-KPIC' ;;
5133                         svr4*|esix*|solaris) dflt='-KPIC' ;;
5134                         sunos)  dflt='-pic' ;;
5135                         *)      dflt='none' ;;
5136                     esac
5137                         ;;
5138                 *)  case "$osname" in
5139                         svr4*|esix*|solaris) dflt='-fPIC' ;;
5140                         *)      dflt='-fpic' ;;
5141                     esac ;;
5142             esac ;;
5143         ' ') dflt='none' ;;
5144     *)  dflt="$cccdlflags" ;;
5145     esac
5146     rp="Any special flags to pass to $cc -c to compile shared library modules?"
5147     . ./myread
5148     case "$ans" in
5149     none) cccdlflags=' ' ;;
5150     *) cccdlflags="$ans" ;;
5151     esac
5152
5153     cat << EOM
5154
5155 Some systems use ld to create libraries that can be dynamically loaded,
5156 while other systems (such as those using ELF) use $cc.
5157
5158 EOM
5159         case "$ld" in
5160         '')     $cat >try.c <<'EOM'
5161 /* Test for whether ELF binaries are produced */
5162 #include <fcntl.h>
5163 #include <stdlib.h>
5164 int main() {
5165         char b[4];
5166         int i = open("a.out",O_RDONLY);
5167         if(i == -1) 
5168                 exit(1); /* fail */
5169         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
5170                 exit(0); /* succeed (yes, it's ELF) */
5171         else
5172                 exit(1); /* fail */
5173 }
5174 EOM
5175                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
5176                         cat <<EOM
5177 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
5178 EOM
5179                         dflt="$cc"
5180                 else
5181                         echo "I'll use ld to build dynamic libraries."
5182                         dflt='ld'
5183                 fi
5184                 rm -f try.c a.out
5185                 ;;
5186         *)      dflt="$ld"
5187                 ;;
5188         esac
5189
5190     rp="What command should be used to create dynamic libraries?"
5191     . ./myread
5192         ld="$ans"
5193
5194     cat << EOM
5195
5196 Some systems may require passing special flags to $ld to create a
5197 library that can be dynamically loaded.  If your ld flags include
5198 -L/other/path options to locate libraries outside your loader's normal
5199 search path, you may need to specify those -L options here as well.  To
5200 use no flags, say "none".
5201
5202 EOM
5203     case "$lddlflags" in
5204     '') case "$osname" in
5205                         beos) dflt='-nostart' ;;
5206                         hpux)  dflt='-b' ;;
5207                         linux|irix*)    dflt='-shared' ;;
5208                         next)  dflt='none' ;;
5209                         solaris) dflt='-G' ;;
5210                         sunos) dflt='-assert nodefinitions' ;;
5211                         svr4*|esix*) dflt="-G $ldflags" ;;
5212                 *)     dflt='none' ;;
5213                         esac
5214                         ;;
5215     *) dflt="$lddlflags" ;;
5216     esac
5217
5218         : Try to guess additional flags to pick up local libraries.
5219         : Be careful not to append to a plain 'none'
5220         case "$dflt" in
5221         none) dflt='' ;;
5222         esac
5223         for thisflag in $ldflags; do
5224                 case "$thisflag" in
5225                 -L*)
5226                         case " $dflt " in
5227                         *" $thisflag "*) ;;
5228                         *) dflt="$dflt $thisflag" ;;
5229                         esac
5230                         ;;
5231                 esac
5232         done
5233
5234         case "$dflt" in
5235         ''|' ') dflt='none' ;;
5236         esac
5237
5238     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
5239     . ./myread
5240     case "$ans" in
5241     none) lddlflags=' ' ;;
5242     *) lddlflags="$ans" ;;
5243     esac
5244
5245         cat <<EOM
5246
5247 Some systems may require passing special flags to $cc to indicate that
5248 the resulting executable will use dynamic linking.  To use no flags,
5249 say "none".
5250
5251 EOM
5252     case "$ccdlflags" in
5253     '') case "$osname" in
5254                 hpux)   dflt='-Wl,-E' ;;
5255                 linux)  dflt='-rdynamic' ;;
5256                 next)   dflt='none' ;;
5257                 sunos)  dflt='none' ;;
5258                 *)      dflt='none' ;;
5259             esac ;;
5260     ' ')  dflt='none' ;;
5261     *)  dflt="$ccdlflags" ;;
5262     esac
5263     rp="Any special flags to pass to $cc to use dynamic loading?"
5264     . ./myread
5265     case "$ans" in
5266     none) ccdlflags=' ' ;;
5267     *) ccdlflags="$ans" ;;
5268     esac
5269     ;;
5270 *)  usedl="$undef"
5271         ld='ld'
5272     dlsrc='dl_none.xs'
5273     lddlflags=''
5274     ccdlflags=''
5275     ;;
5276 esac
5277
5278 also=''
5279 case "$usedl" in
5280 $undef)
5281         # No dynamic loading being used, so don't bother even to prompt.
5282         useshrplib='false'
5283         ;;
5284 *)      case "$useshrplib" in
5285         '')     case "$osname" in
5286                 svr4*|dgux|dynixptx|esix|powerux|beos)
5287                         dflt=y
5288                         also='Building a shared libperl is required for dynamic loading to work on your system.'
5289                         ;;
5290                 next*)
5291                         case "$osvers" in
5292                         4*)     dflt=y
5293                                 also='Building a shared libperl is needed for MAB support.'
5294                                 ;;
5295                         *)      dflt=n
5296                                 ;;
5297                         esac
5298                         ;;
5299                 *)      dflt=n
5300                         ;;
5301                 esac
5302                 ;;
5303         $define|true|[Yy]*)
5304                 dflt=y
5305                 ;;
5306         *)      dflt=n
5307                 ;;
5308         esac
5309         $cat << EOM
5310
5311 The perl executable is normally obtained by linking perlmain.c with
5312 libperl${_a}, any static extensions (usually just DynaLoader), and
5313 any other libraries needed on this system (such as -lm, etc.).  Since
5314 your system supports dynamic loading, it is probably possible to build
5315 a shared libperl.$so.  If you will have more than one executable linked
5316 to libperl.$so, this will significantly reduce the size of each
5317 executable, but it may have a noticeable affect on performance.  The
5318 default is probably sensible for your system.
5319 $also
5320
5321 EOM
5322         rp="Build a shared libperl.$so (y/n)"
5323         . ./myread
5324         case "$ans" in
5325         true|$define|[Yy]*)
5326                 useshrplib='true'
5327                 # Why does next4 have to be so different?
5328                 case "${osname}${osvers}" in
5329                 next4*|rhapsody*)
5330                         xxx='DYLD_LIBRARY_PATH' ;;
5331                 os2*)   xxx='' ;; # Nothing special needed.
5332                 beos*)  xxx='' ;;
5333                 *)              xxx='LD_LIBRARY_PATH' ;;
5334                 esac
5335                 ;;
5336         *)      useshrplib='false' ;;
5337         esac
5338         ;;
5339 esac
5340
5341 case "$useshrplib" in
5342 true)
5343         case "$libperl" in
5344         '')
5345                 # Figure out a good name for libperl.so.  Since it gets stored in
5346                 # a version-specific architecture-dependent library, the version
5347                 # number isn't really that important, except for making cc/ld happy.
5348                 #
5349                 # A name such as libperl.so.3.1
5350                 majmin="libperl.$so.$patchlevel.$subversion"
5351                 # A name such as libperl.so.301
5352                 majonly=`echo $patchlevel $subversion |
5353                         $awk '{printf "%d%02d", $1, $2}'`
5354                 majonly=libperl.$so.$majonly
5355                 # I'd prefer to keep the os-specific stuff here to a minimum, and
5356                 # rely on figuring it out from the naming of libc.
5357                 case "${osname}${osvers}" in
5358                 next4*)
5359                         dflt=libperl.5.$so
5360                         # XXX How handle the --version stuff for MAB?
5361                         ;;
5362                 linux*)  # ld won't link with a bare -lperl otherwise.
5363                         dflt=libperl.$so
5364                         ;;
5365                 *)      # Try to guess based on whether libc has major.minor.
5366                         case "$libc" in
5367                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
5368                         *libc.$so.[0-9]*) dflt=$majonly ;;
5369                         *)      dflt=libperl.$so ;;
5370                         esac
5371                         ;;
5372                 esac
5373                 ;;
5374         *)      dflt=$libperl
5375                 ;;
5376         esac
5377         cat << EOM
5378
5379 I need to select a good name for the shared libperl.  If your system uses
5380 library names with major and minor numbers, then you might want something
5381 like $majmin.  Alternatively, if your system uses a single version
5382 number for shared libraries, then you might want to use $majonly.
5383 Or, your system might be quite happy with a simple libperl.$so.
5384
5385 Since the shared libperl will get installed into a version-specific
5386 architecture-dependent directory, the version number of the shared perl
5387 library probably isn't important, so the default should be o.k.
5388
5389 EOM
5390         rp='What name do you want to give to the shared libperl?'
5391         . ./myread
5392         libperl=$ans
5393         echo "Ok, I'll use $libperl"
5394         ;;
5395 *)
5396         libperl="libperl${_a}"
5397         ;;
5398 esac
5399
5400 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
5401 case "$shrpdir" in
5402 '') ;;
5403 *)      $cat >&4 <<EOM
5404 WARNING:  Use of the shrpdir variable for the installation location of
5405 the shared $libperl is not supported.  It was never documented and
5406 will not work in this version.  Let me (perlbug@perl.com)
5407 know of any problems this may cause.
5408
5409 EOM
5410         case "$shrpdir" in
5411         "$archlibexp/CORE")
5412                 $cat >&4 <<EOM
5413 But your current setting of $shrpdir is
5414 the default anyway, so it's harmless.
5415 EOM
5416                 ;;
5417         *)
5418                 $cat >&4 <<EOM
5419 Further, your current attempted setting of $shrpdir
5420 conflicts with the value of $archlibexp/CORE
5421 that installperl will use.
5422 EOM
5423                 ;;
5424         esac
5425         ;;
5426 esac
5427
5428 # How will the perl executable find the installed shared $libperl?
5429 # Add $xxx to ccdlflags.
5430 # If we can't figure out a command-line option, use $shrpenv to
5431 # set env LD_RUN_PATH.  The main perl makefile uses this.
5432 shrpdir=$archlibexp/CORE
5433 xxx=''
5434 tmp_shrpenv=''
5435 if "$useshrplib"; then
5436     case "$osname" in 
5437         aix)
5438                 # We'll set it in Makefile.SH...
5439                 ;;
5440         solaris|netbsd)
5441                 xxx="-R $shrpdir"
5442                 ;;
5443         freebsd)
5444                 xxx="-Wl,-R$shrpdir"
5445                 ;;
5446         linux|irix*|dec_osf)
5447                 xxx="-Wl,-rpath,$shrpdir"
5448                 ;;
5449         next)
5450                 # next doesn't like the default...
5451                 ;;
5452         beos)
5453                 # beos doesn't like the default, either.
5454                 ;;
5455         hpux*)
5456                 # hpux doesn't like the default, either.
5457                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
5458                 ;;
5459         *)
5460                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
5461                 ;;
5462         esac
5463         case "$xxx" in
5464         '') ;;
5465         *)      
5466                 # Only add $xxx if it isn't already in ccdlflags.
5467                 case " $ccdlflags " in
5468                 *" $xxx "*)     ;;
5469                 *)      ccdlflags="$ccdlflags $xxx"
5470                         cat <<EOM >&4
5471
5472 Adding $xxx to the flags
5473 passed to $ld so that the perl executable will find the 
5474 installed shared $libperl.
5475
5476 EOM
5477                         ;;
5478                 esac
5479                 ;;
5480         esac
5481 fi
5482 # Respect a hint or command-line value.
5483 case "$shrpenv" in
5484 '') shrpenv="$tmp_shrpenv" ;;
5485 esac
5486
5487 : determine where manual pages go
5488 set man1dir man1dir none
5489 eval $prefixit
5490 $cat <<EOM
5491
5492 $spackage has manual pages available in source form.
5493 EOM
5494 case "$nroff" in
5495 nroff)
5496         echo "However, you don't have nroff, so they're probably useless to you."
5497         case "$man1dir" in
5498         '') man1dir="none";;
5499         esac;;
5500 esac
5501 echo "If you don't want the manual sources installed, answer 'none'."
5502 case "$man1dir" in
5503 ' ') dflt=none
5504         ;;
5505 '')
5506         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
5507         lookpath="$lookpath $prefixexp/man/p_man/man1"
5508         lookpath="$lookpath $prefixexp/man/u_man/man1"
5509         lookpath="$lookpath $prefixexp/man/man.1"
5510         case "$sysman" in
5511         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
5512         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
5513         esac
5514         set dflt
5515         eval $prefixup
5516         ;;
5517 *)  dflt="$man1dir"
5518         ;;
5519 esac
5520 echo " "
5521 fn=dn+~
5522 rp="Where do the main $spackage manual pages (source) go?"
5523 . ./getfile
5524 if $test "X$man1direxp" != "X$ansexp"; then
5525         installman1dir=''
5526 fi
5527 man1dir="$ans"
5528 man1direxp="$ansexp"
5529 case "$man1dir" in
5530 '') man1dir=' '
5531         installman1dir='';;
5532 esac
5533 if $afs; then
5534         $cat <<EOM
5535
5536 Since you are running AFS, I need to distinguish the directory in which
5537 manual pages reside from the directory in which they are installed (and from
5538 which they are presumably copied to the former directory by occult means).
5539
5540 EOM
5541         case "$installman1dir" in
5542         '') dflt=`echo $man1direxp | sed 's#^/afs/#/afs/.#'`;;
5543         *) dflt="$installman1dir";;
5544         esac
5545         fn=de~
5546         rp='Where will man pages be installed?'
5547         . ./getfile
5548         installman1dir="$ans"
5549 else
5550         installman1dir="$man1direxp"
5551 fi
5552
5553 : What suffix to use on installed man pages
5554
5555 case "$man1dir" in
5556 ' ')
5557         man1ext='0'
5558         ;;
5559 *)
5560         rp="What suffix should be used for the main $spackage man pages?"
5561         case "$man1ext" in
5562         '')     case "$man1dir" in
5563                 *1)  dflt=1 ;;
5564                 *1p) dflt=1p ;;
5565                 *1pm) dflt=1pm ;;
5566                 *l) dflt=l;;
5567                 *n) dflt=n;;
5568                 *o) dflt=o;;
5569                 *p) dflt=p;;
5570                 *C) dflt=C;;
5571                 *L) dflt=L;;
5572                 *L1) dflt=L1;;
5573                 *) dflt=1;;
5574                 esac
5575                 ;;
5576         *)      dflt="$man1ext";;
5577         esac
5578         . ./myread
5579         man1ext="$ans"
5580         ;;
5581 esac
5582
5583 : see if we can have long filenames
5584 echo " "
5585 rmlist="$rmlist /tmp/cf$$"
5586 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
5587 first=123456789abcdef
5588 second=/tmp/cf$$/$first
5589 $rm -f $first $second
5590 if (echo hi >$first) 2>/dev/null; then
5591         if $test -f 123456789abcde; then
5592                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
5593                 val="$undef"
5594         else
5595                 if (echo hi >$second) 2>/dev/null; then
5596                         if $test -f /tmp/cf$$/123456789abcde; then
5597                                 $cat <<'EOM'
5598 That's peculiar... You can have filenames longer than 14 characters, but only
5599 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
5600 I shall consider your system cannot support long filenames at all.
5601 EOM
5602                                 val="$undef"
5603                         else
5604                                 echo 'You can have filenames longer than 14 characters.' >&4
5605                                 val="$define"
5606                         fi
5607                 else
5608                         $cat <<'EOM'
5609 How confusing! Some of your filesystems are sane enough to allow filenames
5610 longer than 14 characters but some others like /tmp can't even think about them.
5611 So, for now on, I shall assume your kernel does not allow them at all.
5612 EOM
5613                         val="$undef"
5614                 fi
5615         fi
5616 else
5617         $cat <<'EOM'
5618 You can't have filenames longer than 14 chars.  You can't even think about them!
5619 EOM
5620         val="$undef"
5621 fi 
5622 set d_flexfnam
5623 eval $setvar
5624 $rm -rf /tmp/cf$$ 123456789abcde*
5625
5626 : determine where library module manual pages go
5627 set man3dir man3dir none
5628 eval $prefixit
5629 $cat <<EOM
5630
5631 $spackage has manual pages for many of the library modules.
5632 EOM
5633
5634 case "$nroff" in
5635 nroff)
5636         $cat <<'EOM'
5637 However, you don't have nroff, so they're probably useless to you.
5638 EOM
5639         case "$man3dir" in
5640         '') man3dir="none";;
5641         esac;;
5642 esac
5643
5644 case "$d_flexfnam" in
5645 undef)
5646         $cat <<'EOM'
5647 However, your system can't handle the long file names like File::Basename.3. 
5648 EOM
5649         case "$man3dir" in
5650         '') man3dir="none";;
5651         esac;;
5652 esac
5653
5654 echo "If you don't want the manual sources installed, answer 'none'."
5655 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5656 case "$man3dir" in
5657 '')     case "$prefix" in 
5658         *$prog*) dflt=`echo $man1dir | 
5659                         $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;;
5660         *)      dflt="$privlib/man/man3" ;;
5661         esac
5662         ;;
5663 ' ') dflt=none;;
5664 *)      dflt="$man3dir" ;;
5665 esac
5666 echo " "
5667
5668 fn=dn+~
5669 rp="Where do the $package library man pages (source) go?"
5670 . ./getfile
5671 if test "X$man3direxp" != "X$ansexp"; then
5672         installman3dir=''
5673 fi
5674
5675 man3dir="$ans"
5676 man3direxp="$ansexp"
5677 case "$man3dir" in
5678 '') man3dir=' '
5679         installman3dir='';;
5680 esac
5681 if $afs; then
5682         $cat <<EOM
5683
5684 Since you are running AFS, I need to distinguish the directory in which
5685 manual pages reside from the directory in which they are installed (and from
5686 which they are presumably copied to the former directory by occult means).
5687
5688 EOM
5689         case "$installman3dir" in
5690         '') dflt=`echo $man3direxp | sed 's#^/afs/#/afs/.#'`;;
5691         *) dflt="$installman3dir";;
5692         esac
5693         fn=de~
5694         rp='Where will man pages be installed?'
5695         . ./getfile
5696         installman3dir="$ans"
5697 else
5698         installman3dir="$man3direxp"
5699 fi
5700
5701 : What suffix to use on installed man pages
5702
5703 case "$man3dir" in
5704 ' ')
5705         man3ext='0'
5706         ;;
5707 *)
5708         rp="What suffix should be used for the $package library man pages?"
5709         case "$man3ext" in
5710         '')     case "$man3dir" in
5711                 *3)  dflt=3 ;;
5712                 *3p) dflt=3p ;;
5713                 *3pm) dflt=3pm ;;
5714                 *l) dflt=l;;
5715                 *n) dflt=n;;
5716                 *o) dflt=o;;
5717                 *p) dflt=p;;
5718                 *C) dflt=C;;
5719                 *L) dflt=L;;
5720                 *L3) dflt=L3;;
5721                 *) dflt=3;;
5722                 esac
5723                 ;;
5724         *)      dflt="$man3ext";;
5725         esac
5726         . ./myread
5727         man3ext="$ans"
5728         ;;
5729 esac
5730
5731 : see if we have to deal with yellow pages, now NIS.
5732 if $test -d /usr/etc/yp || $test -d /etc/yp; then
5733         if $test -f /usr/etc/nibindd; then
5734                 echo " "
5735                 echo "I'm fairly confident you're on a NeXT."
5736                 echo " "
5737                 rp='Do you get the hosts file via NetInfo?'
5738                 dflt=y
5739                 case "$hostcat" in
5740                 nidump*) ;;
5741                 '') ;;
5742                 *) dflt=n;;
5743                 esac
5744                 . ./myread
5745                 case "$ans" in
5746                 y*) hostcat='nidump hosts .';;
5747                 *)      case "$hostcat" in
5748                         nidump*) hostcat='';;
5749                         esac
5750                         ;;
5751                 esac
5752         fi
5753         case "$hostcat" in
5754         nidump*) ;;
5755         *)
5756                 case "$hostcat" in
5757                 *ypcat*) dflt=y;;
5758                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
5759                                 dflt=y
5760                         else
5761                                 dflt=n
5762                         fi;;
5763                 *) dflt=n;;
5764                 esac
5765                 echo " "
5766                 rp='Are you getting the hosts file via yellow pages?'
5767                 . ./myread
5768                 case "$ans" in
5769                 y*) hostcat='ypcat hosts';;
5770                 *) hostcat='cat /etc/hosts';;
5771                 esac
5772                 ;;
5773         esac
5774 fi
5775 case "$hostcat" in
5776 '') hostcat='cat /etc/hosts';;
5777 esac
5778 case "$groupcat" in
5779 '') groupcat='cat /etc/group';;
5780 esac
5781 case "$passcat" in
5782 '') passcat='cat /etc/passwd';;
5783 esac
5784
5785 : now get the host name
5786 echo " "
5787 echo "Figuring out host name..." >&4
5788 case "$myhostname" in
5789 '') cont=true
5790         echo 'Maybe "hostname" will work...'
5791         if tans=`sh -c hostname 2>&1` ; then
5792                 myhostname=$tans
5793                 phostname=hostname
5794                 cont=''
5795         fi
5796         ;;
5797 *) cont='';;
5798 esac
5799 if $test "$cont"; then
5800         if ./xenix; then
5801                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
5802                 if tans=`cat /etc/systemid 2>&1` ; then
5803                         myhostname=$tans
5804                         phostname='cat /etc/systemid'
5805                         echo "Whadyaknow.  Xenix always was a bit strange..."
5806                         cont=''
5807                 fi
5808         elif $test -r /etc/systemid; then
5809                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
5810         fi
5811 fi
5812 if $test "$cont"; then
5813         echo 'No, maybe "uuname -l" will work...'
5814         if tans=`sh -c 'uuname -l' 2>&1` ; then
5815                 myhostname=$tans
5816                 phostname='uuname -l'
5817         else
5818                 echo 'Strange.  Maybe "uname -n" will work...'
5819                 if tans=`sh -c 'uname -n' 2>&1` ; then
5820                         myhostname=$tans
5821                         phostname='uname -n'
5822                 else
5823                         echo 'Oh well, maybe I can mine it out of whoami.h...'
5824                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
5825                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
5826                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
5827                         else
5828                                 case "$myhostname" in
5829                                 '') echo "Does this machine have an identity crisis or something?"
5830                                         phostname='';;
5831                                 *)
5832                                         echo "Well, you said $myhostname before..."
5833                                         phostname='echo $myhostname';;
5834                                 esac
5835                         fi
5836                 fi
5837         fi
5838 fi
5839 : you do not want to know about this
5840 set $myhostname
5841 myhostname=$1
5842
5843 : verify guess
5844 if $test "$myhostname" ; then
5845         dflt=y
5846         rp='Your host name appears to be "'$myhostname'".'" Right?"
5847         . ./myread
5848         case "$ans" in
5849         y*) ;;
5850         *) myhostname='';;
5851         esac
5852 fi
5853
5854 : bad guess or no guess
5855 while $test "X$myhostname" = X ; do
5856         dflt=''
5857         rp="Please type the (one word) name of your host:"
5858         . ./myread
5859         myhostname="$ans"
5860 done
5861
5862 : translate upper to lower if necessary
5863 case "$myhostname" in
5864 *[A-Z]*)
5865         echo "(Normalizing case in your host name)"
5866         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
5867         ;;
5868 esac
5869
5870 case "$myhostname" in
5871 *.*)
5872         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
5873         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
5874         echo "(Trimming domain name from host name--host name is now $myhostname)"
5875         ;;
5876 *) case "$mydomain" in
5877         '')
5878                 {
5879                         test "X$hostcat" = "Xypcat hosts" &&
5880                         ypmatch "$myhostname" hosts 2>/dev/null |\
5881                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
5882                         $test -s hosts
5883                 } || {
5884                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
5885                                         /[       ]$myhostname[  . ]/p" > hosts
5886                 }
5887                 tmp_re="[       . ]"
5888                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
5889                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
5890                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
5891                         hosts | $sort | $uniq | \
5892                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
5893                 case `$echo X$dflt` in
5894                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
5895                         dflt=.
5896                         ;;
5897                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
5898                         ;;
5899                 esac
5900                 case "$dflt" in
5901                 .)
5902                         tans=`./loc resolv.conf X /etc /usr/etc`
5903                         if $test -f "$tans"; then
5904                                 echo "(Attempting domain name extraction from $tans)"
5905                                 dflt=.`$sed -n -e 's/   / /g' \
5906                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
5907                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5908                                 case "$dflt" in
5909                                 .) dflt=.`$sed -n -e 's/        / /g' \
5910                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
5911                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5912                                         ;;
5913                                 esac
5914                         fi
5915                         ;;
5916                 esac
5917                 case "$dflt" in
5918                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
5919                         dflt=.`sh -c domainname 2>/dev/null`
5920                         case "$dflt" in
5921                         '') dflt='.';;
5922                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
5923                         esac
5924                         ;;
5925                 esac
5926                 case "$dflt" in
5927                 .) echo "(Lost all hope -- silly guess then)"
5928                         dflt='.uucp'
5929                         ;;
5930                 esac
5931                 $rm -f hosts
5932                 ;;
5933         *) dflt="$mydomain";;
5934         esac;;
5935 esac
5936 echo " "
5937 rp="What is your domain name?"
5938 . ./myread
5939 tans="$ans"
5940 case "$ans" in
5941 '') ;;
5942 .*) ;;
5943 *) tans=".$tans";;
5944 esac
5945 mydomain="$tans"
5946
5947 : translate upper to lower if necessary
5948 case "$mydomain" in
5949 *[A-Z]*)
5950         echo "(Normalizing case in your domain name)"
5951         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
5952         ;;
5953 esac
5954
5955 : a little sanity check here
5956 case "$phostname" in
5957 '') ;;
5958 *)
5959         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
5960         $myhostname$mydomain|$myhostname) ;;
5961         *)
5962                 case "$phostname" in
5963                 sed*)
5964                         echo "(That doesn't agree with your whoami.h file, by the way.)"
5965                         ;;
5966                 *)
5967                         echo "(That doesn't agree with your $phostname command, by the way.)"
5968                         ;;
5969                 esac
5970         ;;
5971         esac
5972         ;;
5973 esac
5974
5975 $cat <<EOM
5976
5977 I need to get your e-mail address in Internet format if possible, i.e.
5978 something like user@host.domain. Please answer accurately since I have
5979 no easy means to double check it. The default value provided below
5980 is most probably close to the reality but may not be valid from outside
5981 your organization...
5982
5983 EOM
5984 cont=x
5985 while test "$cont"; do
5986         case "$cf_email" in
5987         '') dflt="$cf_by@$myhostname$mydomain";;
5988         *) dflt="$cf_email";;
5989         esac
5990         rp='What is your e-mail address?'
5991         . ./myread
5992         cf_email="$ans"
5993         case "$cf_email" in
5994         *@*.*) cont='' ;;
5995         *)
5996                 rp='Address does not look like an Internet one.  Use it anyway?'
5997                 case "$fastread" in
5998                 yes) dflt=y ;;
5999                 *) dflt=n ;;
6000                 esac
6001                 . ./myread
6002                 case "$ans" in
6003                 y*) cont='' ;;
6004                 *) echo " " ;;
6005                 esac
6006                 ;;
6007         esac
6008 done
6009
6010 $cat <<EOM
6011
6012 If you or somebody else will be maintaining perl at your site, please
6013 fill in the correct e-mail address here so that they may be contacted
6014 if necessary. Currently, the "perlbug" program included with perl
6015 will send mail to this address in addition to perlbug@perl.com. You may
6016 enter "none" for no administrator.
6017
6018 EOM
6019 case "$perladmin" in
6020 '') dflt="$cf_email";;
6021 *) dflt="$perladmin";;
6022 esac
6023 rp='Perl administrator e-mail address'
6024 . ./myread
6025 perladmin="$ans"
6026
6027 : figure out how to guarantee perl startup
6028 case "$startperl" in
6029 '')
6030         case "$sharpbang" in
6031         *!)
6032                 $cat <<EOH
6033
6034 I can use the #! construct to start perl on your system. This will
6035 make startup of perl scripts faster, but may cause problems if you
6036 want to share those scripts and perl is not in a standard place
6037 ($binexp/perl) on all your platforms. The alternative is to force
6038 a shell by starting the script with a single ':' character.
6039
6040 EOH
6041                 dflt="$binexp/perl"
6042                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
6043                 . ./myread
6044                 case "$ans" in
6045                 none)   startperl=": # use perl";;
6046                 *)      startperl="#!$ans"
6047                         if $test 30 -lt `echo "$ans" | wc -c`; then
6048                                 $cat >&4 <<EOM
6049
6050 WARNING:  Some systems limit the #! command to 32 characters.
6051 If you experience difficulty running Perl scripts with #!, try
6052 installing Perl in a directory with a shorter pathname.
6053
6054 EOM
6055                         fi ;;
6056                 esac
6057                 ;;
6058         *) startperl=": # use perl"
6059                 ;;
6060         esac
6061         ;;
6062 esac
6063 echo "I'll use $startperl to start perl scripts."
6064
6065 : figure best path for perl in scripts
6066 case "$perlpath" in
6067 '')
6068         perlpath="$binexp/perl"
6069         case "$startperl" in
6070         *!*) ;;
6071         *)
6072                 $cat <<EOH
6073
6074 I will use the "eval 'exec'" idiom to start Perl on your system.
6075 I can use the full path of your Perl binary for this purpose, but
6076 doing so may cause problems if you want to share those scripts and
6077 Perl is not always in a standard place ($binexp/perl).
6078
6079 EOH
6080                 dflt="$binexp/perl"
6081                 rp="What path shall I use in \"eval 'exec'\"?"
6082                 . ./myread
6083                 perlpath="$ans"
6084                 ;;
6085         esac
6086         ;;
6087 esac
6088 case "$startperl" in
6089 *!*)    ;;
6090 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
6091 esac
6092
6093 : determine where public executable scripts go
6094 set scriptdir scriptdir
6095 eval $prefixit
6096 case "$scriptdir" in
6097 '')
6098         dflt="$bin"
6099         : guess some guesses
6100         $test -d /usr/share/scripts && dflt=/usr/share/scripts
6101         $test -d /usr/share/bin && dflt=/usr/share/bin
6102         $test -d /usr/local/script && dflt=/usr/local/script
6103         $test -d $prefixexp/script && dflt=$prefixexp/script
6104         set dflt
6105         eval $prefixup
6106         ;;
6107 *)  dflt="$scriptdir"
6108         ;;
6109 esac
6110 $cat <<EOM
6111  
6112 Some installations have a separate directory just for executable scripts so
6113 that they can mount it across multiple architectures but keep the scripts in
6114 one spot.  You might, for example, have a subdirectory of /usr/share for this.
6115 Or you might just lump your scripts in with all your other executables.
6116  
6117 EOM
6118 fn=d~
6119 rp='Where do you keep publicly executable scripts?'
6120 . ./getfile
6121 if $test "X$ansexp" != "X$scriptdirexp"; then
6122         installscript=''
6123 fi
6124 scriptdir="$ans"
6125 scriptdirexp="$ansexp"
6126 if $afs; then
6127         $cat <<EOM
6128
6129 Since you are running AFS, I need to distinguish the directory in which
6130 scripts reside from the directory in which they are installed (and from
6131 which they are presumably copied to the former directory by occult means).
6132
6133 EOM
6134         case "$installscript" in
6135         '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
6136         *) dflt="$installscript";;
6137         esac
6138         fn=de~
6139         rp='Where will public scripts be installed?'
6140         . ./getfile
6141         installscript="$ans"
6142 else
6143         installscript="$scriptdirexp"
6144 fi
6145
6146 : determine where site specific libraries go.
6147 : Usual default is /usr/local/lib/perl5/site_perl/$apiversion
6148 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6149 case "$prefix" in
6150 *perl*) set dflt sitelib lib/site_$prog/$apiversion ;;
6151 *)       set dflt sitelib lib/$package/site_$prog/$apiversion ;;
6152 esac
6153 eval $prefixit
6154 $cat <<EOM
6155
6156 The installation process will also create a directory for
6157 site-specific extensions and modules.  Some users find it convenient
6158 to place all site-specific files in this directory rather than in the
6159 main distribution directory.
6160
6161 EOM
6162 fn=d~+
6163 rp='Pathname for the site-specific library files?'
6164 . ./getfile
6165 if $test "X$sitelibexp" != "X$ansexp"; then
6166         installsitelib=''
6167 fi
6168 sitelib="$ans"
6169 sitelibexp="$ansexp"
6170 if $afs; then
6171         $cat <<EOM
6172
6173 Since you are running AFS, I need to distinguish the directory in
6174 which site-specific files reside from the directory in which they are
6175 installed (and from which they are presumably copied to the former
6176 directory by occult means).
6177
6178 EOM
6179         case "$installsitelib" in
6180         '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;;
6181         *) dflt="$installsitelib";;
6182         esac
6183         fn=de~
6184         rp='Where will site-specific files be installed?'
6185         . ./getfile
6186         installsitelib="$ans"
6187 else
6188         installsitelib="$sitelibexp"
6189 fi
6190
6191 : determine where site specific architecture-dependent libraries go.
6192 : sitelib  default is /usr/local/lib/perl5/site_perl/$apiversion
6193 : sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
6194 : sitelib may have an optional trailing /share.
6195 tdflt=`echo $sitelib | $sed 's,/share$,,'`
6196 tdflt="$tdflt/$archname"
6197 set sitearch sitearch none
6198 eval $prefixit
6199 case "$sitearch" in
6200 '')     dflt="$tdflt" ;;
6201 *)      dflt="$sitearch" ;;
6202 esac
6203 $cat <<EOM
6204
6205 The installation process will also create a directory for
6206 architecture-dependent site-specific extensions and modules.
6207
6208 EOM
6209 fn=nd~+
6210 rp='Pathname for the site-specific architecture-dependent library files?'
6211 . ./getfile
6212 if $test "X$sitearchexp" != "X$ansexp"; then
6213         installsitearch=''
6214 fi
6215 sitearch="$ans"
6216 sitearchexp="$ansexp"
6217 if $afs; then
6218         $cat <<EOM
6219
6220 Since you are running AFS, I need to distinguish the directory in
6221 which site-specific architecture-dependent library files reside from
6222 the directory in which they are installed (and from which they are
6223 presumably copied to the former directory by occult means).
6224
6225 EOM
6226         case "$installsitearch" in
6227         '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;;
6228         *) dflt="$installsitearch";;
6229         esac
6230         fn=de~
6231         rp='Where will site-specific architecture-dependent files be installed?'
6232         . ./getfile
6233         installsitearch="$ans"
6234 else
6235         installsitearch="$sitearchexp"
6236 fi
6237
6238 cat <<EOM
6239
6240 Previous version of $package used the standard IO mechanisms as defined
6241 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
6242 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
6243 the default.  This abstraction layer can use AT&T's sfio (if you already
6244 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
6245 problems with some extension modules.  Using PerlIO with stdio is safe,
6246 but it is slower than plain stdio and therefore is not the default.
6247
6248 If this doesn't make any sense to you, just accept the default 'n'.
6249 EOM
6250 case "$useperlio" in
6251 $define|true|[yY]*)     dflt='y';;
6252 *) dflt='n';;
6253 esac
6254 rp='Use the experimental PerlIO abstraction layer?'
6255 . ./myread
6256 case "$ans" in
6257 y|Y) 
6258         val="$define"
6259         ;;     
6260 *)      
6261         echo "Ok, doing things the stdio way"
6262         val="$undef"
6263         ;;
6264 esac
6265 set useperlio
6266 eval $setvar 
6267
6268 : Check how to convert floats to strings.
6269 if test "X$d_Gconvert" = X; then
6270         echo " "
6271         echo "Checking for an efficient way to convert floats to strings."
6272         $cat >try.c <<'EOP'
6273 #ifdef TRY_gconvert
6274 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
6275 char *myname = "gconvert";
6276 #endif
6277 #ifdef TRY_gcvt
6278 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
6279 char *myname = "gcvt";
6280 #endif
6281 #ifdef TRY_sprintf
6282 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
6283 char *myname = "sprintf";
6284 #endif
6285
6286 #include <stdio.h>
6287
6288 int
6289 checkit(expect, got)
6290 char *expect;
6291 char *got;
6292 {
6293     if (strcmp(expect, got)) {
6294                 printf("%s oddity:  Expected %s, got %s\n",
6295                         myname, expect, got);
6296                 exit(1);
6297         }
6298 }
6299
6300 int main()
6301
6302         char buf[64]; 
6303         buf[63] = '\0';
6304
6305         /* This must be 1st test on (which?) platform */
6306         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
6307         Gconvert(0.1, 8, 0, buf);
6308         checkit("0.1", buf);
6309
6310         Gconvert(1.0, 8, 0, buf); 
6311         checkit("1", buf);
6312
6313         Gconvert(0.0, 8, 0, buf); 
6314         checkit("0", buf);
6315
6316         Gconvert(-1.0, 8, 0, buf); 
6317         checkit("-1", buf);
6318
6319         /* Some Linux gcvt's give 1.e+5 here. */
6320         Gconvert(100000.0, 8, 0, buf); 
6321         checkit("100000", buf);
6322         
6323         /* Some Linux gcvt's give -1.e+5 here. */
6324         Gconvert(-100000.0, 8, 0, buf); 
6325         checkit("-100000", buf);
6326
6327         exit(0);
6328 }
6329 EOP
6330         case "$d_Gconvert" in
6331         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
6332         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
6333         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
6334         *) xxx_list='gconvert gcvt sprintf' ;;
6335         esac
6336
6337         for xxx_convert in $xxx_list; do
6338                 echo "Trying $xxx_convert"
6339                 $rm -f try try$_o
6340                 set try -DTRY_$xxx_convert
6341                 if eval $compile; then
6342                         echo "$xxx_convert" found. >&4
6343                         if ./try; then
6344                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
6345                                 break;
6346                         else
6347                                 echo "...But $xxx_convert didn't work as I expected."
6348                         fi
6349                 else
6350                         echo "$xxx_convert NOT found." >&4
6351                 fi
6352         done
6353                 
6354         case "$xxx_convert" in
6355         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
6356         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
6357         *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
6358         esac
6359 fi
6360
6361 : Initialize h_fcntl
6362 h_fcntl=false
6363
6364 : Initialize h_sysfile
6365 h_sysfile=false
6366
6367 : access call always available on UNIX
6368 set access d_access
6369 eval $inlibc
6370
6371 : locate the flags for 'access()'
6372 case "$d_access" in
6373 "$define")
6374         echo " "
6375         $cat >access.c <<'EOCP'
6376 #include <sys/types.h>
6377 #ifdef I_FCNTL
6378 #include <fcntl.h>
6379 #endif
6380 #ifdef I_SYS_FILE
6381 #include <sys/file.h>
6382 #endif
6383 #ifdef I_UNISTD
6384 #include <unistd.h>
6385 #endif
6386 int main() {
6387         exit(R_OK);
6388 }
6389 EOCP
6390         : check sys/file.h first, no particular reason here
6391         if $test `./findhdr sys/file.h` && \
6392                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
6393                 h_sysfile=true;
6394                 echo "<sys/file.h> defines the *_OK access constants." >&4
6395         elif $test `./findhdr fcntl.h` && \
6396                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
6397                 h_fcntl=true;
6398                 echo "<fcntl.h> defines the *_OK access constants." >&4
6399         elif $test `./findhdr unistd.h` && \
6400                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
6401                 echo "<unistd.h> defines the *_OK access constants." >&4
6402         else
6403                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
6404         fi
6405         ;;
6406 esac
6407 $rm -f access*
6408
6409 : see if accessx exists
6410 set accessx d_accessx
6411 eval $inlibc
6412
6413 : see if alarm exists
6414 set alarm d_alarm
6415 eval $inlibc
6416
6417 : Look for GNU-cc style attribute checking
6418 echo " "
6419 echo "Checking whether your compiler can handle __attribute__ ..." >&4
6420 $cat >attrib.c <<'EOCP'
6421 #include <stdio.h>
6422 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
6423 EOCP
6424 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
6425         if $contains 'warning' attrib.out >/dev/null 2>&1; then
6426                 echo "Your C compiler doesn't fully support __attribute__."
6427                 val="$undef"
6428         else
6429                 echo "Your C compiler supports __attribute__."
6430                 val="$define"
6431         fi
6432 else
6433         echo "Your C compiler doesn't seem to understand __attribute__ at all."
6434         val="$undef"
6435 fi
6436 set d_attribut
6437 eval $setvar
6438 $rm -f attrib*
6439
6440 : see if bcmp exists
6441 set bcmp d_bcmp
6442 eval $inlibc
6443
6444 : see if bcopy exists
6445 set bcopy d_bcopy
6446 eval $inlibc
6447
6448 : see if this is a unistd.h system
6449 set unistd.h i_unistd
6450 eval $inhdr
6451
6452 : see if getpgrp exists
6453 set getpgrp d_getpgrp
6454 eval $inlibc
6455
6456 case "$d_getpgrp" in
6457 "$define")
6458         echo " "
6459         echo "Checking to see which flavor of getpgrp is in use..."
6460         $cat >set.c <<EOP
6461 #$i_unistd I_UNISTD
6462 #include <sys/types.h>
6463 #ifdef I_UNISTD
6464 #  include <unistd.h>
6465 #endif
6466 int main()
6467 {
6468         if (getuid() == 0) {
6469                 printf("(I see you are running Configure as super-user...)\n");
6470                 setuid(1);
6471         }
6472 #ifdef TRY_BSD_PGRP
6473         if (getpgrp(1) == 0)
6474                 exit(0);
6475 #else
6476         if (getpgrp() > 0)
6477                 exit(0);
6478 #endif
6479         exit(1);
6480 }
6481 EOP
6482         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6483                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
6484                 val="$define"
6485         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6486                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
6487                 val="$undef"
6488         else
6489                 echo "I can't seem to compile and run the test program."
6490                 if ./usg; then
6491                         xxx="a USG one, i.e. you use getpgrp()."
6492                 else
6493                         # SVR4 systems can appear rather BSD-ish.
6494                         case "$i_unistd" in
6495                         $undef)
6496                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
6497                                 val="$define"
6498                                 ;;
6499                         $define)
6500                                 xxx="probably a USG one, i.e. you use getpgrp()."
6501                                 val="$undef"
6502                                 ;;
6503                         esac
6504                 fi
6505                 echo "Assuming your getpgrp is $xxx" >&4
6506         fi
6507         ;;
6508 *) val="$undef";;
6509 esac
6510 set d_bsdgetpgrp
6511 eval $setvar
6512 $rm -f set set.c
6513
6514 : see if setpgrp exists
6515 set setpgrp d_setpgrp
6516 eval $inlibc
6517
6518 case "$d_setpgrp" in
6519 "$define")
6520         echo " "
6521         echo "Checking to see which flavor of setpgrp is in use..."
6522         $cat >set.c <<EOP
6523 #$i_unistd I_UNISTD
6524 #include <sys/types.h>
6525 #ifdef I_UNISTD
6526 #  include <unistd.h>
6527 #endif
6528 int main()
6529 {
6530         if (getuid() == 0) {
6531                 printf("(I see you are running Configure as super-user...)\n");
6532                 setuid(1);
6533         }
6534 #ifdef TRY_BSD_PGRP
6535         if (-1 == setpgrp(1, 1))
6536                 exit(0);
6537 #else
6538         if (setpgrp() != -1)
6539                 exit(0);
6540 #endif
6541         exit(1);
6542 }
6543 EOP
6544         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6545                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
6546                 val="$define"
6547         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6548                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
6549                 val="$undef"
6550         else
6551                 echo "(I can't seem to compile and run the test program.)"
6552                 if ./usg; then
6553                         xxx="a USG one, i.e. you use setpgrp()."
6554                 else
6555                         # SVR4 systems can appear rather BSD-ish.
6556                         case "$i_unistd" in
6557                         $undef)
6558                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
6559                                 val="$define"
6560                                 ;;
6561                         $define)
6562                                 xxx="probably a USG one, i.e. you use setpgrp()."
6563                                 val="$undef"
6564                                 ;;
6565                         esac
6566                 fi
6567                 echo "Assuming your setpgrp is $xxx" >&4
6568         fi
6569         ;;
6570 *) val="$undef";;
6571 esac
6572 set d_bsdsetpgrp
6573 eval $setvar
6574 $rm -f set set.c
6575 : see if bzero exists
6576 set bzero d_bzero
6577 eval $inlibc
6578
6579 : check for lengths of integral types
6580 echo " "
6581 case "$intsize" in
6582 '')
6583         echo "Checking to see how big your integers are..." >&4
6584         $cat >intsize.c <<'EOCP'
6585 #include <stdio.h>
6586 int main()
6587 {
6588         printf("intsize=%d;\n", sizeof(int));
6589         printf("longsize=%d;\n", sizeof(long));
6590         printf("shortsize=%d;\n", sizeof(short));
6591         exit(0);
6592 }
6593 EOCP
6594         set intsize
6595         if eval $compile_ok && ./intsize > /dev/null; then
6596                 eval `./intsize`
6597                 echo "Your integers are $intsize bytes long."
6598                 echo "Your long integers are $longsize bytes long."
6599                 echo "Your short integers are $shortsize bytes long."
6600         else
6601                 $cat >&4 <<EOM
6602 !
6603 Help! I can't compile and run the intsize test program: please enlighten me!
6604 (This is probably a misconfiguration in your system or libraries, and
6605 you really ought to fix it.  Still, I'll try anyway.)
6606 !
6607 EOM
6608                 dflt=4
6609                 rp="What is the size of an integer (in bytes)?"
6610                 . ./myread
6611                 intsize="$ans"
6612                 dflt=$intsize
6613                 rp="What is the size of a long integer (in bytes)?"
6614                 . ./myread
6615                 longsize="$ans"
6616                 dflt=2
6617                 rp="What is the size of a short integer (in bytes)?"
6618                 . ./myread
6619                 shortsize="$ans"
6620         fi
6621         ;;
6622 esac
6623 $rm -f intsize intsize.*
6624
6625 : see if signal is declared as pointer to function returning int or void
6626 echo " "
6627 xxx=`./findhdr signal.h`
6628 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
6629 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
6630         echo "You have int (*signal())() instead of void." >&4
6631         val="$undef"
6632 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
6633         echo "You have void (*signal())()." >&4
6634         val="$define"
6635 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
6636         echo "You have int (*signal())() instead of void." >&4
6637         val="$undef"
6638 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
6639         echo "You have void (*signal())()." >&4
6640         val="$define"
6641 else
6642         case "$d_voidsig" in
6643         '')
6644         echo "I can't determine whether signal handler returns void or int..." >&4
6645                 dflt=void
6646                 rp="What type does your signal handler return?"
6647                 . ./myread
6648                 case "$ans" in
6649                 v*) val="$define";;
6650                 *) val="$undef";;
6651                 esac;;
6652         "$define")
6653                 echo "As you already told me, signal handler returns void." >&4
6654                 val="$define"
6655                 ;;
6656         *)      echo "As you already told me, signal handler returns int." >&4
6657                 val="$undef"
6658                 ;;
6659         esac
6660 fi
6661 set d_voidsig
6662 eval $setvar
6663 case "$d_voidsig" in
6664 "$define") signal_t="void";;
6665 *) signal_t="int";;
6666 esac
6667 $rm -f $$.tmp
6668
6669 : check for ability to cast large floats to 32-bit ints.
6670 echo " "
6671 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
6672 if $test "$intsize" -ge 4; then
6673         xxx=int
6674 else
6675         xxx=long
6676 fi
6677 $cat >try.c <<EOCP
6678 #include <stdio.h>
6679 #include <sys/types.h>
6680 #include <signal.h>
6681 $signal_t blech(s) int s; { exit(3); }
6682 int main()
6683 {
6684         $xxx i32;
6685         double f, g;
6686         int result = 0;
6687         char str[16];
6688         signal(SIGFPE, blech);
6689
6690         /* Don't let compiler optimize the test away.  Store the number 
6691            in a writable string for gcc to pass to sscanf under HP/UX.
6692         */
6693         sprintf(str, "2147483647");
6694         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
6695         g = 10 * f;
6696         i32  = ($xxx) g;
6697
6698         /* x86 processors will probably give 0x8000 0000, which is a
6699        sign change.  We don't want that.  We want to mimic SPARC
6700            behavior here, which is to preserve the sign and give
6701            back 0x7fff ffff.
6702         */
6703         if (i32 != ($xxx) f)
6704                 result |= 1;
6705         exit(result);
6706 }
6707 EOCP
6708 set try
6709 if eval $compile_ok; then
6710         ./try
6711         yyy=$?
6712 else
6713         echo "(I can't seem to compile the test program--assuming it can't)"
6714         yyy=1
6715 fi
6716 case "$yyy" in
6717 0)      val="$define"
6718         echo "Yup, it can."
6719         ;;
6720 *)      val="$undef"
6721         echo "Nope, it can't."
6722         ;;
6723 esac
6724 set d_casti32
6725 eval $setvar
6726 $rm -f try try.*
6727
6728 : check for ability to cast negative floats to unsigned
6729 echo " "
6730 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
6731 $cat >try.c <<EOCP
6732 #include <stdio.h>
6733 #include <sys/types.h>
6734 #include <signal.h>
6735 $signal_t blech(s) int s; { exit(7); }
6736 $signal_t blech_in_list(s) int s; { exit(4); }
6737 unsigned long dummy_long(p) unsigned long p; { return p; }
6738 unsigned int dummy_int(p) unsigned int p; { return p; }
6739 unsigned short dummy_short(p) unsigned short p; { return p; }
6740 int main()
6741 {
6742         double f;
6743         unsigned long along;
6744         unsigned int aint;
6745         unsigned short ashort;
6746         int result = 0;
6747         char str[16];
6748         
6749         /* Frustrate gcc-2.7.2's optimizer which failed this test with
6750            a direct f = -123. assignment.  gcc-2.8.0 reportedly
6751            optimized the whole file away
6752         */
6753         /* Store the number in a writable string for gcc to pass to 
6754            sscanf under HP/UX.
6755         */
6756         sprintf(str, "-123");
6757         sscanf(str, "%lf", &f);  /* f = -123.; */
6758
6759         signal(SIGFPE, blech);
6760         along = (unsigned long)f;
6761         aint = (unsigned int)f;
6762         ashort = (unsigned short)f;
6763         if (along != (unsigned long)-123)
6764                 result |= 1;
6765         if (aint != (unsigned int)-123)
6766                 result |= 1;
6767         if (ashort != (unsigned short)-123)
6768                 result |= 1;
6769         sprintf(str, "1073741824.");
6770         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
6771         f = f + f;
6772         along = 0;
6773         along = (unsigned long)f;
6774         if (along != 0x80000000)
6775                 result |= 2;
6776         f -= 1.;
6777         along = 0;
6778         along = (unsigned long)f;
6779         if (along != 0x7fffffff)
6780                 result |= 1;
6781         f += 2.;
6782         along = 0;
6783         along = (unsigned long)f;
6784         if (along != 0x80000001)
6785                 result |= 2;
6786         if (result)
6787                 exit(result);
6788         signal(SIGFPE, blech_in_list);
6789         sprintf(str, "123.");
6790         sscanf(str, "%lf", &f);  /* f = 123.; */
6791         along = dummy_long((unsigned long)f);
6792         aint = dummy_int((unsigned int)f);
6793         ashort = dummy_short((unsigned short)f);
6794         if (along != (unsigned long)123)
6795                 result |= 4;
6796         if (aint != (unsigned int)123)
6797                 result |= 4;
6798         if (ashort != (unsigned short)123)
6799                 result |= 4;
6800         exit(result);
6801
6802 }
6803 EOCP
6804 set try
6805 if eval $compile_ok; then
6806         ./try
6807         castflags=$?
6808 else
6809         echo "(I can't seem to compile the test program--assuming it can't)"
6810         castflags=7
6811 fi
6812 case "$castflags" in
6813 0)      val="$define"
6814         echo "Yup, it can."
6815         ;;
6816 *)      val="$undef"
6817         echo "Nope, it can't."
6818         ;;
6819 esac
6820 set d_castneg
6821 eval $setvar
6822 $rm -f try.*
6823
6824 : see if vprintf exists
6825 echo " "
6826 if set vprintf val -f d_vprintf; eval $csym; $val; then
6827         echo 'vprintf() found.' >&4
6828         val="$define"
6829         $cat >vprintf.c <<'EOF'
6830 #include <varargs.h>
6831
6832 int main() { xxx("foo"); }
6833
6834 xxx(va_alist)
6835 va_dcl
6836 {
6837         va_list args;
6838         char buf[10];
6839
6840         va_start(args);
6841         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
6842 }
6843 EOF
6844         set vprintf
6845         if eval $compile && ./vprintf; then
6846                 echo "Your vsprintf() returns (int)." >&4
6847                 val2="$undef"
6848         else
6849                 echo "Your vsprintf() returns (char*)." >&4
6850                 val2="$define"
6851         fi
6852 else
6853         echo 'vprintf() NOT found.' >&4
6854                 val="$undef"
6855                 val2="$undef"
6856 fi
6857 set d_vprintf
6858 eval $setvar
6859 val=$val2
6860 set d_charvspr
6861 eval $setvar
6862
6863 : see if chown exists
6864 set chown d_chown
6865 eval $inlibc
6866
6867 : see if chroot exists
6868 set chroot d_chroot
6869 eval $inlibc
6870
6871 : see if chsize exists
6872 set chsize d_chsize
6873 eval $inlibc
6874
6875 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
6876 while $test $# -ge 2; do
6877         case "$1" in
6878         $define) echo "#include <$2>";;
6879         esac ;
6880     shift 2;
6881 done > try.c;
6882 echo "int main () { struct $struct foo; foo.$field = 0; }" >> try.c;
6883 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
6884         val="$define";
6885 else
6886         val="$undef";
6887 fi;
6888 set $varname;
6889 eval $setvar;
6890 $rm -f try.c try.o'
6891
6892 : see if this is a sys/uio.h system
6893 set sys/uio.h i_sysuio
6894 eval $inhdr
6895
6896 echo "Checking to see if your system supports struct iovec..." >&4
6897 set d_iovec_s iovec iov_base $i_sysuio sys/uio.h
6898 eval $hasfield
6899 case "$d_iovec_s" in
6900 "$define")      echo "Yup, it does." >&4
6901                 ;;
6902 *)              echo "Nope, it doesn't." >&4
6903                 ;;
6904 esac
6905
6906 socketlib=''
6907 sockethdr=''
6908 : see whether socket exists
6909 echo " "
6910 $echo $n "Hmm... $c" >&4
6911 if set socket val -f d_socket; eval $csym; $val; then
6912         echo "Looks like you have Berkeley networking support." >&4
6913         d_socket="$define"
6914         if set setsockopt val -f; eval $csym; $val; then
6915                 d_oldsock="$undef"
6916         else
6917                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
6918                 d_oldsock="$define"
6919         fi
6920 else
6921         if $contains socklib libc.list >/dev/null 2>&1; then
6922                 echo "Looks like you have Berkeley networking support." >&4
6923                 d_socket="$define"
6924                 : we will have to assume that it supports the 4.2 BSD interface
6925                 d_oldsock="$undef"
6926         else
6927                 echo "You don't have Berkeley networking in libc$_a..." >&4
6928                 if test "X$d_socket" = "X$define"; then
6929                    echo "...but you seem to believe that you have sockets." >&4
6930                 else
6931                         for net in net socket
6932                         do
6933                                 if test -f /usr/lib/lib$net$_a; then
6934                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
6935                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
6936                                         if $contains socket libc.list >/dev/null 2>&1; then
6937                                                 d_socket="$define"
6938                                                 socketlib="-l$net"
6939                                                 case "$net" in
6940                                                 net)
6941                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
6942                                                         sockethdr="-I/usr/netinclude"
6943                                                         ;;
6944                                                 esac
6945                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
6946                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
6947                                                         d_oldsock="$undef"
6948                                                 else
6949                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
6950                                                         d_oldsock="$define"
6951                                                 fi
6952                                                 break
6953                                         fi
6954                                 fi
6955                         done
6956                         if test "X$d_socket" != "X$define"; then
6957                            echo "or anywhere else I see." >&4
6958                            d_socket="$undef"
6959                            d_oldsock="$undef"
6960                         fi
6961                 fi
6962         fi
6963 fi
6964
6965 : see if socketpair exists
6966 set socketpair d_sockpair
6967 eval $inlibc
6968
6969
6970 echo " "
6971 echo "Checking the availability of certain socket constants..." >& 4
6972 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
6973         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
6974         $cat >try.c <<EOF
6975 #include <sys/types.h>
6976 #include <sys/socket.h>
6977 int main() {
6978     int i = $ENUM;
6979 }
6980 EOF
6981         val="$undef"
6982         set try; if eval $compile; then
6983                 val="$define"
6984         fi
6985         set d_${enum}; eval $setvar
6986         $rm -f try.c try
6987 done
6988
6989 set sendmsg d_sendmsg
6990 eval $inlibc
6991
6992 set recvmsg d_recvmsg
6993 eval $inlibc
6994
6995 echo " "
6996 $echo $n "Checking to see if your system supports struct msghdr...$c" >&4
6997 set d_msghdr_s msghdr msg_name define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
6998 eval $hasfield
6999 case "$d_msghdr_s" in
7000 "$define")      echo "Yup, it does." >&4
7001                 ;;
7002 *)              echo "Nope, it doesn't." >&4
7003                 ;;
7004 esac
7005
7006 $echo $n "Checking to see if your system supports struct cmsghdr...$c" >&4
7007 set d_cmsghdr_s cmsghdr cmsg_len define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7008 eval $hasfield
7009 case "$d_cmsghdr_s" in
7010 "$define")      echo "Yup, it does." >&4
7011                 ;;
7012 *)              echo "Nope, it doesn't." >&4
7013                 ;;
7014 esac
7015
7016 : check for const keyword
7017 echo " "
7018 echo 'Checking to see if your C compiler knows about "const"...' >&4
7019 $cat >const.c <<'EOCP'
7020 typedef struct spug { int drokk; } spug;
7021 int main()
7022 {
7023         const char *foo;
7024         const spug y;
7025 }
7026 EOCP
7027 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
7028         val="$define"
7029         echo "Yup, it does."
7030 else
7031         val="$undef"
7032         echo "Nope, it doesn't."
7033 fi
7034 set d_const
7035 eval $setvar
7036
7037 : see if crypt exists
7038 echo " "
7039 if set crypt val -f d_crypt; eval $csym; $val; then
7040         echo 'crypt() found.' >&4
7041         val="$define"
7042         cryptlib=''
7043 else
7044         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
7045         if $test -z "$cryptlib"; then
7046                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
7047         else
7048                 cryptlib=-lcrypt
7049         fi
7050         if $test -z "$cryptlib"; then
7051                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
7052         else
7053                 cryptlib=-lcrypt
7054         fi
7055         if $test -z "$cryptlib"; then
7056                 cryptlib=`./loc libcrypt$_a "" $libpth`
7057         else
7058                 cryptlib=-lcrypt
7059         fi
7060         if $test -z "$cryptlib"; then
7061                 echo 'crypt() NOT found.' >&4
7062                 val="$undef"
7063         else
7064                 val="$define"
7065         fi
7066 fi
7067 set d_crypt
7068 eval $setvar
7069
7070 : get csh whereabouts
7071 case "$csh" in
7072 'csh') val="$undef" ;;
7073 *) val="$define" ;;
7074 esac
7075 set d_csh
7076 eval $setvar
7077 : Respect a hint or command line value for full_csh.
7078 case "$full_csh" in
7079 '') full_csh=$csh ;;
7080 esac
7081
7082 : see if cuserid exists
7083 set cuserid d_cuserid
7084 eval $inlibc
7085
7086 : see if this is a limits.h system
7087 set limits.h i_limits
7088 eval $inhdr
7089
7090 : see if this is a float.h system
7091 set float.h i_float
7092 eval $inhdr
7093
7094 : See if number of significant digits in a double precision number is known
7095 echo " "
7096 $cat >dbl_dig.c <<EOM
7097 #$i_limits I_LIMITS
7098 #$i_float I_FLOAT
7099 #ifdef I_LIMITS
7100 #include <limits.h>
7101 #endif
7102 #ifdef I_FLOAT
7103 #include <float.h>
7104 #endif
7105 #ifdef DBL_DIG
7106 printf("Contains DBL_DIG");
7107 #endif
7108 EOM
7109 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
7110 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
7111         echo "DBL_DIG found." >&4
7112         val="$define"
7113 else
7114         echo "DBL_DIG NOT found." >&4
7115         val="$undef"
7116 fi
7117 $rm -f dbl_dig.?
7118 set d_dbl_dig
7119 eval $setvar
7120
7121
7122 if $test X"$use64bits" = X"$define"; then
7123         : see if dbminit64 exists
7124         set dbminit64 d_dbminit64
7125         eval $inlibc
7126
7127         : see if dbmclose64 exists
7128         set dbmclose64 d_dbmclose64
7129         eval $inlibc
7130
7131         : see if fetch64 exists
7132         set fetch64 d_fetch64
7133         eval $inlibc
7134
7135         : see if store64 exists
7136         set store64 d_store64
7137         eval $inlibc
7138
7139         : see if delete64 exists
7140         set delete64 d_delete64
7141         eval $inlibc
7142
7143         : see if firstkey64 exists
7144         set firstkey64 d_firstkey64
7145         eval $inlibc
7146
7147         : see if nextkey64 exists
7148         set nextkey64 d_nextkey64
7149         eval $inlibc
7150 else
7151         val="$undef"
7152         for xxx in d_dbminit64 d_dbmclose64 d_fetch64 d_store64 d_delete64 d_firstkey64 d_nextkey64
7153         do
7154                 set $xxx
7155                 eval $setvar
7156         done
7157 fi
7158
7159 : see if difftime exists
7160 set difftime d_difftime
7161 eval $inlibc
7162
7163 : see if sys/stat.h is available
7164 set sys/stat.h i_sysstat
7165 eval $inhdr
7166
7167 : see if this is a dirent system
7168 echo " "
7169 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
7170         val="$define"
7171         echo "<dirent.h> found." >&4
7172 else
7173         val="$undef"
7174         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
7175                 echo "<sys/dir.h> found." >&4
7176                 echo " "
7177         else
7178                 xinc=`./findhdr sys/ndir.h`
7179         fi
7180         echo "<dirent.h> NOT found." >&4
7181 fi
7182 set i_dirent
7183 eval $setvar
7184
7185 : Look for type of directory structure.
7186 echo " "
7187 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7188
7189 case "$direntrytype" in
7190 ''|' ')
7191         case "$i_dirent" in
7192         $define) guess1='struct dirent' ;;
7193         *) guess1='struct direct'  ;;
7194         esac
7195         ;;
7196 *)      guess1="$direntrytype"
7197         ;;
7198 esac
7199
7200 case "$guess1" in
7201 'struct dirent') guess2='struct direct' ;;
7202 *) guess2='struct dirent' ;;
7203 esac
7204                 
7205 if $contains "$guess1" try.c >/dev/null 2>&1; then
7206         direntrytype="$guess1"
7207         echo "Your directory entries are $direntrytype." >&4
7208 elif $contains "$guess2" try.c >/dev/null 2>&1; then
7209         direntrytype="$guess2"
7210         echo "Your directory entries seem to be $direntrytype." >&4
7211 else
7212         echo "I don't recognize your system's directory entries." >&4
7213         rp="What type is used for directory entries on this system?"
7214         dflt="$guess1"
7215         . ./myread
7216         direntrytype="$ans"
7217 fi
7218 $rm -f try.c
7219
7220
7221 : see if the directory entry stores field length
7222 echo " "
7223 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7224 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
7225         echo "Good, your directory entry keeps length information in d_namlen." >&4
7226         val="$define"
7227 else
7228         echo "Your directory entry does not know about the d_namlen field." >&4
7229         val="$undef"
7230 fi
7231 set d_dirnamlen
7232 eval $setvar
7233 $rm -f try.c
7234
7235
7236 if $test X"$use64bits" = X"$define"; then
7237         : see if fstat64 exists
7238         set fstat64 d_fstat64
7239         eval $inlibc
7240
7241         : see if ftruncate64 exists
7242         set ftruncate64 d_ftruncate64
7243         eval $inlibc
7244
7245         : see if lockf64 exists
7246         set lockf64 d_lockf64
7247         eval $inlibc
7248
7249         : see if llseek exists
7250         set llseek d_llseek
7251         eval $inlibc
7252
7253         : see if lseek64 exists
7254         set lseek64 d_lseek64
7255         eval $inlibc
7256
7257         : see if lstat64 exists
7258         set lstat64 d_lstat64
7259         eval $inlibc
7260
7261         : see if open64 exists
7262         set open64 d_open64
7263         eval $inlibc
7264
7265         : see if opendir64 exists
7266         set opendir64 d_opendir64
7267         eval $inlibc
7268
7269         : see if readdir64 exists
7270         set readdir64 d_readdir64
7271         eval $inlibc
7272
7273         : see if seekdir64 exists
7274         set seekdir64 d_seekdir64
7275         eval $inlibc
7276
7277         : see if stat64 exists
7278         set stat64 d_stat64
7279         eval $inlibc
7280
7281         : see if telldir64 exists
7282         set telldir64 d_telldir64
7283         eval $inlibc
7284
7285         : see if truncate64 exists
7286         set truncate64 d_truncate64
7287         eval $inlibc
7288
7289         : check for off64_t
7290         echo " "
7291         echo $n "Checking to see if your system supports off64_t...$c" >&4
7292         $cat >try.c <<EOCP
7293 #include <sys/types.h>
7294 #include <unistd.h>
7295 off64_t foo() { off64_t x; x = 7; return x; }'
7296 EOCP
7297         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7298                 val="$define"
7299                 echo " Yup, it does." >&4
7300         else
7301                 val="$undef"
7302                 echo " Nope, it doesn't." >&4
7303         fi
7304         $rm -f try.*
7305         set d_off64_t
7306         eval $setvar
7307
7308         : check for offset_t
7309         echo " "
7310         echo $n "Checking to see if your system supports offset_t...$c" >&4
7311         $cat >try.c <<EOCP
7312 #include <sys/types.h>
7313 #include <unistd.h>
7314 offset_t foo() { offset_t x; x = 7; return x; }'
7315 EOCP
7316         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7317                 val="$define"
7318                 echo " Yup, it does." >&4
7319         else
7320                 val="$undef"
7321                 echo " Nope, it doesn't." >&4
7322         fi
7323         $rm -f try.*
7324         set d_offset_t
7325         eval $setvar
7326
7327         : check for ino64_t
7328         echo " "
7329         echo $n "Checking to see if your system supports ino64_t...$c" >&4
7330         val="$undef"
7331         case "$i_sysstat" in
7332         "$define" )
7333                 $cat >try.c <<EOCP
7334 #include <sys/types.h>
7335 #include <sys/stat.h>
7336 ino64_t foo() { ino64_t x; x = 7; return x; }'
7337 EOCP
7338                 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7339                         val="$define"
7340                 fi
7341                 $rm -f try.*
7342                 ;;
7343         esac
7344         if $test "X$val" = X"$define"; then
7345                 echo " Yup, it does." >&4
7346         else
7347                 echo " Nope, it doesn't." >&4
7348         fi
7349         set d_ino64_t
7350         eval $setvar
7351
7352         : check for struct flock64
7353         echo " "
7354         echo "Checking to see if your system supports struct flock64..." >&4
7355         if $h_fcntl; then
7356                 set d_flock64_s flock64 l_len define fcntl.h
7357                 eval $hasfield
7358         else
7359                 val="$undef"
7360                 set d_flock64_s
7361                 eval $setvar
7362         fi
7363         case "$d_flock64_s" in
7364         "$define")      echo "Yup, it does." >&4
7365                         ;;
7366         *)              echo "Nope, it doesn't." >&4
7367                         ;;
7368         esac
7369
7370         : check for struct dirent64
7371         echo " "
7372         echo "Checking to see if your system supports struct dirent64..." >&4
7373         set d_dirent64_s dirent64 d_off $i_dirent dirent.h
7374         eval $hasfield
7375         case "$d_dirent64_s" in
7376         "$define")      echo "Yup, it does." >&4
7377                         ;;
7378         *)              echo "Nope, it doesn't." >&4
7379                         ;;
7380         esac
7381
7382 else
7383         val="$undef"
7384         for xxx in d_fstat64 d_ftruncate64 d_lockf64 d_lseek64 d_lstat64 d_open64 d_opendir64 d_readdir64 d_seekdir64 d_stat64 d_telldir64 d_truncate64 d_off64_t d_offset_t d_ino64_t d_flock64_s d_dirent64_s
7385         do
7386                 set $xxx
7387                 eval $setvar
7388         done
7389 fi
7390
7391 : see if dlerror exists
7392 xxx_runnm="$runnm"
7393 runnm=false
7394 set dlerror d_dlerror
7395 eval $inlibc
7396 runnm="$xxx_runnm"
7397
7398 : see if dlfcn is available
7399 set dlfcn.h i_dlfcn
7400 eval $inhdr
7401
7402 case "$usedl" in
7403 $define|y|true)
7404         $cat << EOM
7405
7406 On a few systems, the dynamically loaded modules that perl generates and uses
7407 will need a different extension than shared libs. The default will probably
7408 be appropriate.
7409
7410 EOM
7411         case "$dlext" in
7412         '')     dflt="$so" ;;
7413         *)      dflt="$dlext" ;;
7414         esac
7415         rp='What is the extension of dynamically loaded modules'
7416         . ./myread
7417         dlext="$ans"
7418         ;;
7419 *)
7420         dlext="none"
7421         ;;
7422 esac
7423
7424 : Check if dlsym need a leading underscore
7425 echo " "
7426 val="$undef"
7427
7428 case "$dlsrc" in
7429 dl_dlopen.xs)
7430         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
7431         $cat >dyna.c <<'EOM'
7432 fred () { }
7433 EOM
7434
7435 $cat >fred.c<<EOM
7436
7437 #include <stdio.h>
7438 #$i_dlfcn I_DLFCN
7439 #ifdef I_DLFCN
7440 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
7441 #else
7442 #include <sys/types.h>
7443 #include <nlist.h>
7444 #include <link.h>
7445 #endif
7446
7447 extern int fred() ;
7448
7449 int main()
7450 {
7451     void * handle ;
7452     void * symbol ;
7453 #ifndef RTLD_LAZY
7454     int mode = 1 ;
7455 #else
7456     int mode = RTLD_LAZY ;
7457 #endif
7458     handle = dlopen("./dyna.$dlext", mode) ;
7459     if (handle == NULL) {
7460         printf ("1\n") ;
7461         fflush (stdout) ;
7462         exit(0);
7463     }
7464     symbol = dlsym(handle, "fred") ;
7465     if (symbol == NULL) {
7466         /* try putting a leading underscore */
7467         symbol = dlsym(handle, "_fred") ;
7468         if (symbol == NULL) {
7469             printf ("2\n") ;
7470             fflush (stdout) ;
7471             exit(0);
7472         }
7473         printf ("3\n") ;
7474     }
7475     else
7476         printf ("4\n") ;
7477     fflush (stdout) ;
7478     exit(0);
7479 }
7480 EOM
7481         : Call the object file tmp-dyna.o in case dlext=o.
7482         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
7483                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
7484                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
7485                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
7486                 xxx=`./fred`
7487                 case $xxx in
7488                 1)      echo "Test program failed using dlopen." >&4
7489                         echo "Perhaps you should not use dynamic loading." >&4;;
7490                 2)      echo "Test program failed using dlsym." >&4
7491                         echo "Perhaps you should not use dynamic loading." >&4;;
7492                 3)      echo "dlsym needs a leading underscore" >&4
7493                         val="$define" ;;
7494                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
7495                 esac
7496         else
7497                 echo "I can't compile and run the test program." >&4
7498         fi
7499         ;;
7500 esac
7501                 
7502 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
7503
7504 set d_dlsymun
7505 eval $setvar
7506
7507 hasproto='varname=$1; func=$2; shift; shift;
7508 while $test $# -ge 2; do
7509         case "$1" in
7510         $define) echo "#include <$2>";;
7511         esac ;
7512     shift 2;
7513 done > try.c;
7514 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
7515 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
7516         echo "$func() prototype found.";
7517         val="$define";
7518 else
7519         echo "$func() prototype NOT found.";
7520         val="$undef";
7521 fi;
7522 set $varname;
7523 eval $setvar;
7524 $rm -f try.c tryout.c'
7525
7526 : see if prototype for drand48 is available
7527 echo " "
7528 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
7529 eval $hasproto
7530
7531 : see if dup2 exists
7532 set dup2 d_dup2
7533 eval $inlibc
7534
7535 : see if eaccess exists
7536 set eaccess d_eaccess
7537 eval $inlibc
7538
7539 : see if endgrent exists
7540 set endgrent d_endgrent
7541 eval $inlibc
7542
7543 : see if endhostent exists
7544 set endhostent d_endhent
7545 eval $inlibc
7546
7547 : see if endnetent exists
7548 set endnetent d_endnent
7549 eval $inlibc
7550
7551 : see if endprotoent exists
7552 set endprotoent d_endpent
7553 eval $inlibc
7554
7555 : see if endpwent exists
7556 set endpwent d_endpwent
7557 eval $inlibc
7558
7559 : see if endservent exists
7560 set endservent d_endsent
7561 eval $inlibc
7562
7563 : Locate the flags for 'open()'
7564 echo " "
7565 $cat >open3.c <<'EOCP'
7566 #include <sys/types.h>
7567 #ifdef I_FCNTL
7568 #include <fcntl.h>
7569 #endif
7570 #ifdef I_SYS_FILE
7571 #include <sys/file.h>
7572 #endif
7573 int main() {
7574         if(O_RDONLY);
7575 #ifdef O_TRUNC
7576         exit(0);
7577 #else
7578         exit(1);
7579 #endif
7580 }
7581 EOCP
7582 : check sys/file.h first to get FREAD on Sun
7583 if $test `./findhdr sys/file.h` && \
7584                 set open3 -DI_SYS_FILE && eval $compile; then
7585         h_sysfile=true;
7586         echo "<sys/file.h> defines the O_* constants..." >&4
7587         if ./open3; then
7588                 echo "and you have the 3 argument form of open()." >&4
7589                 val="$define"
7590         else
7591                 echo "but not the 3 argument form of open().  Oh, well." >&4
7592                 val="$undef"
7593         fi
7594 elif $test `./findhdr fcntl.h` && \
7595                 set open3 -DI_FCNTL && eval $compile; then
7596         h_fcntl=true;
7597         echo "<fcntl.h> defines the O_* constants..." >&4
7598         if ./open3; then
7599                 echo "and you have the 3 argument form of open()." >&4
7600                 val="$define"
7601         else
7602                 echo "but not the 3 argument form of open().  Oh, well." >&4
7603                 val="$undef"
7604         fi
7605 else
7606         val="$undef"
7607         echo "I can't find the O_* constant definitions!  You got problems." >&4
7608 fi
7609 set d_open3
7610 eval $setvar
7611 $rm -f open3*
7612
7613 : check for non-blocking I/O stuff
7614 case "$h_sysfile" in
7615 true) echo "#include <sys/file.h>" > head.c;;
7616 *)
7617         case "$h_fcntl" in
7618         true) echo "#include <fcntl.h>" > head.c;;
7619         *) echo "#include <sys/fcntl.h>" > head.c;;
7620         esac
7621         ;;
7622 esac
7623 echo " "
7624 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
7625 case "$o_nonblock" in
7626 '')
7627         $cat head.c > try.c
7628         $cat >>try.c <<'EOCP'
7629 int main() {
7630 #ifdef O_NONBLOCK
7631         printf("O_NONBLOCK\n");
7632         exit(0);
7633 #endif
7634 #ifdef O_NDELAY
7635         printf("O_NDELAY\n");
7636         exit(0);
7637 #endif
7638 #ifdef FNDELAY
7639         printf("FNDELAY\n");
7640         exit(0);
7641 #endif
7642         exit(0);
7643 }
7644 EOCP
7645         set try
7646         if eval $compile_ok; then
7647                 o_nonblock=`./try`
7648                 case "$o_nonblock" in
7649                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
7650                 *) echo "Seems like we can use $o_nonblock.";;
7651                 esac
7652         else
7653                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
7654         fi
7655         ;;
7656 *) echo "Using $hint value $o_nonblock.";;
7657 esac
7658 $rm -f try try.* .out core
7659
7660 echo " "
7661 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
7662 case "$eagain" in
7663 '')
7664         $cat head.c > try.c
7665         $cat >>try.c <<EOCP
7666 #include <errno.h>
7667 #include <sys/types.h>
7668 #include <signal.h>
7669 #define MY_O_NONBLOCK $o_nonblock
7670 #ifndef errno  /* XXX need better Configure test */
7671 extern int errno;
7672 #endif
7673 $signal_t blech(x) int x; { exit(3); }
7674 EOCP
7675         $cat >> try.c <<'EOCP'
7676 int main()
7677 {
7678         int pd[2];
7679         int pu[2];
7680         char buf[1];
7681         char string[100];
7682
7683         pipe(pd);       /* Down: child -> parent */
7684         pipe(pu);       /* Up: parent -> child */
7685         if (0 != fork()) {
7686                 int ret;
7687                 close(pd[1]);   /* Parent reads from pd[0] */
7688                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
7689                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
7690                         exit(1);
7691                 signal(SIGALRM, blech);
7692                 alarm(5);
7693                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
7694                         exit(2);
7695                 sprintf(string, "%d\n", ret);
7696                 write(2, string, strlen(string));
7697                 alarm(0);
7698 #ifdef EAGAIN
7699                 if (errno == EAGAIN) {
7700                         printf("EAGAIN\n");
7701                         goto ok;
7702                 }
7703 #endif
7704 #ifdef EWOULDBLOCK
7705                 if (errno == EWOULDBLOCK)
7706                         printf("EWOULDBLOCK\n");
7707 #endif
7708         ok:
7709                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
7710                 sleep(2);                               /* Give it time to close our pipe */
7711                 alarm(5);
7712                 ret = read(pd[0], buf, 1);      /* Should read EOF */
7713                 alarm(0);
7714                 sprintf(string, "%d\n", ret);
7715                 write(3, string, strlen(string));
7716                 exit(0);
7717         }
7718
7719         close(pd[0]);                   /* We write to pd[1] */
7720         close(pu[1]);                   /* We read from pu[0] */
7721         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
7722         close(pd[1]);                   /* Pipe pd is now fully closed! */
7723         exit(0);                                /* Bye bye, thank you for playing! */
7724 }
7725 EOCP
7726         set try
7727         if eval $compile_ok; then
7728                 echo "$startsh" >mtry
7729                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
7730                 chmod +x mtry
7731                 ./mtry >/dev/null 2>&1
7732                 case $? in
7733                 0) eagain=`$cat try.out`;;
7734                 1) echo "Could not perform non-blocking setting!";;
7735                 2) echo "I did a successful read() for something that was not there!";;
7736                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
7737                 *) echo "Something terribly wrong happened during testing.";;
7738                 esac
7739                 rd_nodata=`$cat try.ret`
7740                 echo "A read() system call with no data present returns $rd_nodata."
7741                 case "$rd_nodata" in
7742                 0|-1) ;;
7743                 *)
7744                         echo "(That's peculiar, fixing that to be -1.)"
7745                         rd_nodata=-1
7746                         ;;
7747                 esac
7748                 case "$eagain" in
7749                 '')
7750                         echo "Forcing errno EAGAIN on read() with no data available."
7751                         eagain=EAGAIN
7752                         ;;
7753                 *)
7754                         echo "Your read() sets errno to $eagain when no data is available."
7755                         ;;
7756                 esac
7757                 status=`$cat try.err`
7758                 case "$status" in
7759                 0) echo "And it correctly returns 0 to signal EOF.";;
7760                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
7761                 *) echo "However, your read() returns '$status' on EOF??";;
7762                 esac
7763                 val="$define"
7764                 if test "$status" = "$rd_nodata"; then
7765                         echo "WARNING: you can't distinguish between EOF and no data!"
7766                         val="$undef"
7767                 fi
7768         else
7769                 echo "I can't compile the test program--assuming errno EAGAIN will do."
7770                 eagain=EAGAIN
7771         fi
7772         set d_eofnblk
7773         eval $setvar
7774         ;;
7775 *)
7776         echo "Using $hint value $eagain."
7777         echo "Your read() returns $rd_nodata when no data is present."
7778         case "$d_eofnblk" in
7779         "$define") echo "And you can see EOF because read() returns 0.";;
7780         "$undef") echo "But you can't see EOF status from read() returned value.";;
7781         *)
7782                 echo "(Assuming you can't see EOF status from read anyway.)"
7783                 d_eofnblk=$undef
7784                 ;;
7785         esac
7786         ;;
7787 esac
7788 $rm -f try try.* .out core head.c mtry
7789
7790 : see if fchmod exists
7791 set fchmod d_fchmod
7792 eval $inlibc
7793
7794 : see if fchown exists
7795 set fchown d_fchown
7796 eval $inlibc
7797
7798 : see if this is an fcntl system
7799 set fcntl d_fcntl
7800 eval $inlibc
7801
7802 : see if sys/select.h has to be included
7803 set sys/select.h i_sysselct
7804 eval $inhdr
7805
7806 : see if we should include time.h, sys/time.h, or both
7807 echo " "
7808 if test "X$timeincl" = X; then
7809         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
7810         $echo $n "I'm now running the test program...$c"
7811         $cat >try.c <<'EOCP'
7812 #include <sys/types.h>
7813 #ifdef I_TIME
7814 #include <time.h>
7815 #endif
7816 #ifdef I_SYSTIME
7817 #ifdef SYSTIMEKERNEL
7818 #define KERNEL
7819 #endif
7820 #include <sys/time.h>
7821 #endif
7822 #ifdef I_SYSSELECT
7823 #include <sys/select.h>
7824 #endif
7825 int main()
7826 {
7827         struct tm foo;
7828 #ifdef S_TIMEVAL
7829         struct timeval bar;
7830 #endif
7831 #ifdef S_TIMEZONE
7832         struct timezone tzp;
7833 #endif
7834         if (foo.tm_sec == foo.tm_sec)
7835                 exit(0);
7836 #ifdef S_TIMEVAL
7837         if (bar.tv_sec == bar.tv_sec)
7838                 exit(0);
7839 #endif
7840         exit(1);
7841 }
7842 EOCP
7843         flags=''
7844         for s_timezone in '-DS_TIMEZONE' ''; do
7845         sysselect=''
7846         for s_timeval in '-DS_TIMEVAL' ''; do
7847         for i_systimek in '' '-DSYSTIMEKERNEL'; do
7848         for i_time in '' '-DI_TIME'; do
7849         for i_systime in '-DI_SYSTIME' ''; do
7850                 case "$flags" in
7851                 '') $echo $n ".$c"
7852                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
7853                         if eval $compile; then
7854                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
7855                                 shift
7856                                 flags="$*"
7857                                 echo " "
7858                                 $echo $n "Succeeded with $flags$c"
7859                         fi
7860                         ;;
7861                 esac
7862         done
7863         done
7864         done
7865         done
7866         done
7867         timeincl=''
7868         echo " "
7869         case "$flags" in
7870         *SYSTIMEKERNEL*) i_systimek="$define"
7871                 timeincl=`./findhdr sys/time.h`
7872                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
7873         *) i_systimek="$undef";;
7874         esac
7875         case "$flags" in
7876         *I_TIME*) i_time="$define"
7877                 timeincl=`./findhdr time.h`" $timeincl"
7878                 echo "We'll include <time.h>." >&4;;
7879         *) i_time="$undef";;
7880         esac
7881         case "$flags" in
7882         *I_SYSTIME*) i_systime="$define"
7883                 timeincl=`./findhdr sys/time.h`" $timeincl"
7884                 echo "We'll include <sys/time.h>." >&4;;
7885         *) i_systime="$undef";;
7886         esac
7887         $rm -f try.c try
7888 fi
7889
7890 : check for fd_set items
7891 $cat <<EOM
7892
7893 Checking to see how well your C compiler handles fd_set and friends ...
7894 EOM
7895 $cat >fd_set.c <<EOCP
7896 #$i_systime I_SYS_TIME
7897 #$i_sysselct I_SYS_SELECT
7898 #$d_socket HAS_SOCKET
7899 #include <sys/types.h>
7900 #ifdef HAS_SOCKET
7901 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
7902 #endif
7903 #ifdef I_SYS_TIME
7904 #include <sys/time.h>
7905 #endif
7906 #ifdef I_SYS_SELECT
7907 #include <sys/select.h>
7908 #endif
7909 int main() {
7910         fd_set fds;
7911
7912 #ifdef TRYBITS
7913         if(fds.fds_bits);
7914 #endif
7915
7916 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
7917         exit(0);
7918 #else
7919         exit(1);
7920 #endif
7921 }
7922 EOCP
7923 set fd_set -DTRYBITS
7924 if eval $compile; then
7925         d_fds_bits="$define"
7926         d_fd_set="$define"
7927         echo "Well, your system knows about the normal fd_set typedef..." >&4
7928         if ./fd_set; then
7929                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
7930                 d_fd_macros="$define"
7931         else
7932                 $cat >&4 <<'EOM'
7933 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
7934 EOM
7935                 d_fd_macros="$undef"
7936         fi
7937 else
7938         $cat <<'EOM'
7939 Hmm, your compiler has some difficulty with fd_set.  Checking further...
7940 EOM
7941         set fd_set
7942         if eval $compile; then
7943                 d_fds_bits="$undef"
7944                 d_fd_set="$define"
7945                 echo "Well, your system has some sort of fd_set available..." >&4
7946                 if ./fd_set; then
7947                         echo "and you have the normal fd_set macros." >&4
7948                         d_fd_macros="$define"
7949                 else
7950                         $cat <<'EOM'
7951 but not the normal fd_set macros!  Gross!  More work for me...
7952 EOM
7953                         d_fd_macros="$undef"
7954                 fi
7955         else
7956         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
7957                 d_fd_set="$undef"
7958                 d_fds_bits="$undef"
7959                 d_fd_macros="$undef"
7960         fi
7961 fi
7962 $rm -f fd_set*
7963
7964 : see if fgetpos exists
7965 set fgetpos d_fgetpos
7966 eval $inlibc
7967
7968
7969 if $test X"$use64bits" = X"$define"; then
7970         : see if fgetpos64 exists
7971         set fgetpos64 d_fgetpos64
7972         eval $inlibc
7973
7974         : see if fopen64 exists
7975         set freopen64 d_fopen64
7976         eval $inlibc
7977
7978         : see if freopen64 exists
7979         set freopen64 d_freopen64
7980         eval $inlibc
7981
7982         : see if fseek64 exists
7983         set fseek64 d_fseek64
7984         eval $inlibc
7985
7986         : see if fseeko64 exists
7987         set fseeko64 d_fseeko64
7988         eval $inlibc
7989
7990         : see if fsetpos64 exists
7991         set fsetpos64 d_fsetpos64
7992         eval $inlibc
7993
7994         : see if ftell64 exists
7995         set ftell64 d_ftell64
7996         eval $inlibc
7997
7998         : see if ftello64 exists
7999         set ftello64 d_ftello64
8000         eval $inlibc
8001
8002         : see if tmpfile64 exists
8003         set tmpfile64 d_tmpfile64
8004         eval $inlibc
8005 else
8006         val="$undef"
8007         for xxx in d_fgetpos64 d_fopen64 d_freopen64 d_fseek64 d_fseeko64 d_fsetpos64 d_ftell64 d_ftello64 d_tmpfile64
8008         do
8009                 set $xxx
8010                 eval $setvar
8011         done
8012 fi
8013
8014 : see if flock exists
8015 set flock d_flock
8016 eval $inlibc
8017
8018 : see if fork exists
8019 set fork d_fork
8020 eval $inlibc
8021
8022 : see if pathconf exists
8023 set pathconf d_pathconf
8024 eval $inlibc
8025
8026 : see if fpathconf exists
8027 set fpathconf d_fpathconf
8028 eval $inlibc
8029
8030 : see if fseeko exists
8031 set fseeko d_fseeko
8032 eval $inlibc
8033
8034 : see if fsetpos exists
8035 set fsetpos d_fsetpos
8036 eval $inlibc
8037
8038 : see if this is a sys/param system
8039 set sys/param.h i_sysparam
8040 eval $inhdr
8041
8042 : see if this is a sys/mount.h system
8043 set sys/mount.h i_sysmount
8044 eval $inhdr
8045
8046
8047 : see if statfs exists
8048 set statfs d_statfs
8049 eval $inlibc
8050
8051 : see if fstatfs exists
8052 set fstatfs d_fstatfs
8053 eval $inlibc
8054
8055 : see if statfs knows about mount flags
8056 set d_statfsflags statfs f_flags $i_sysparam sys/param.h $i_sysmount sys/mount.h
8057 eval $hasfield
8058
8059
8060 : see if statvfs exists
8061 set statvfs d_statvfs
8062 eval $inlibc
8063
8064 : see if fstatvfs exists
8065 set fstatvfs d_fstatvfs
8066 eval $inlibc
8067
8068
8069 : see if ftello exists
8070 set ftello d_ftello
8071 eval $inlibc
8072
8073 : see if getgrent exists
8074 set getgrent d_getgrent
8075 eval $inlibc
8076
8077 : see if gethostbyaddr exists
8078 set gethostbyaddr d_gethbyaddr
8079 eval $inlibc
8080
8081 : see if gethostbyname exists
8082 set gethostbyname d_gethbyname
8083 eval $inlibc
8084
8085 : see if gethostent exists
8086 set gethostent d_gethent
8087 eval $inlibc
8088
8089 : see how we will look up host name
8090 echo " "
8091 call=''
8092 if set gethostname val -f d_gethname; eval $csym; $val; then
8093         echo 'gethostname() found.' >&4
8094         d_gethname="$define"
8095         call=gethostname
8096 fi
8097 if set uname val -f d_uname; eval $csym; $val; then
8098         if ./xenix; then
8099                 $cat <<'EOM'
8100 uname() was found, but you're running xenix, and older versions of xenix
8101 have a broken uname(). If you don't really know whether your xenix is old
8102 enough to have a broken system call, use the default answer.
8103
8104 EOM
8105                 dflt=y
8106                 case "$d_uname" in
8107                 "$define") dflt=n;;
8108                 esac
8109                 rp='Is your uname() broken?'
8110                 . ./myread
8111                 case "$ans" in
8112                 n*) d_uname="$define"; call=uname;;
8113                 esac
8114         else
8115                 echo 'uname() found.' >&4
8116                 d_uname="$define"
8117                 case "$call" in
8118                 '') call=uname ;;
8119                 esac
8120         fi
8121 fi
8122 case "$d_gethname" in
8123 '') d_gethname="$undef";;
8124 esac
8125 case "$d_uname" in
8126 '') d_uname="$undef";;
8127 esac
8128 case "$d_uname$d_gethname" in
8129 *define*)
8130         dflt=n
8131         cat <<EOM
8132  
8133 Every now and then someone has a $call() that lies about the hostname
8134 but can't be fixed for political or economic reasons.  If you wish, I can
8135 pretend $call() isn't there and maybe compute hostname at run-time
8136 thanks to the '$phostname' command.
8137
8138 EOM
8139         rp="Shall I ignore $call() from now on?"
8140         . ./myread
8141         case "$ans" in
8142         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
8143         esac;;
8144 esac
8145 case "$phostname" in
8146 '') aphostname='';;
8147 *) case "$aphostname" in
8148         /*) ;;
8149         *) set X $phostname
8150                 shift
8151                 file=$1
8152                 shift
8153                 file=`./loc $file $file $pth`
8154                 aphostname=`echo $file $*`
8155                 ;;
8156         esac
8157         ;;
8158 esac
8159 case "$d_uname$d_gethname" in
8160 *define*) ;;
8161 *)
8162         case "$phostname" in
8163         '')
8164                 echo "There will be no way for $package to get your hostname." >&4;;
8165         *)
8166         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
8167                 ;;
8168         esac;;
8169 esac
8170 case "$d_phostname" in
8171 '') d_phostname="$undef";;
8172 esac
8173
8174 : see if this is a netdb.h system
8175 set netdb.h i_netdb
8176 eval $inhdr
8177
8178 : see if prototypes for various gethostxxx netdb.h functions are available
8179 echo " "
8180 set d_gethostprotos gethostent $i_netdb netdb.h
8181 eval $hasproto
8182
8183 : see if getlogin exists
8184 set getlogin d_getlogin
8185 eval $inlibc
8186
8187 : see if getmntent exists
8188 set getmntent d_getmntent
8189 eval $inlibc
8190
8191 : see if getnetbyaddr exists
8192 set getnetbyaddr d_getnbyaddr
8193 eval $inlibc
8194
8195 : see if getnetbyname exists
8196 set getnetbyname d_getnbyname
8197 eval $inlibc
8198
8199 : see if getnetent exists
8200 set getnetent d_getnent
8201 eval $inlibc
8202
8203 : see if prototypes for various getnetxxx netdb.h functions are available
8204 echo " "
8205 set d_getnetprotos getnetent $i_netdb netdb.h
8206 eval $hasproto
8207
8208
8209 : see if getprotobyname exists
8210 set getprotobyname d_getpbyname
8211 eval $inlibc
8212
8213 : see if getprotobynumber exists
8214 set getprotobynumber d_getpbynumber
8215 eval $inlibc
8216
8217 : see if getprotoent exists
8218 set getprotoent d_getpent
8219 eval $inlibc
8220
8221 : see if getpgid exists
8222 set getpgid d_getpgid
8223 eval $inlibc
8224
8225 : see if getpgrp2 exists
8226 set getpgrp2 d_getpgrp2
8227 eval $inlibc
8228
8229 : see if getppid exists
8230 set getppid d_getppid
8231 eval $inlibc
8232
8233 : see if getpriority exists
8234 set getpriority d_getprior
8235 eval $inlibc
8236
8237 : see if prototypes for various getprotoxxx netdb.h functions are available
8238 echo " "
8239 set d_getprotoprotos getprotoent $i_netdb netdb.h
8240 eval $hasproto
8241
8242 : see if getpwent exists
8243 set getpwent d_getpwent
8244 eval $inlibc
8245
8246
8247 : see if getservbyname exists
8248 set getservbyname d_getsbyname
8249 eval $inlibc
8250
8251 : see if getservbyport exists
8252 set getservbyport d_getsbyport
8253 eval $inlibc
8254
8255 : see if getservent exists
8256 set getservent d_getsent
8257 eval $inlibc
8258
8259 : see if prototypes for various getservxxx netdb.h functions are available
8260 echo " "
8261 set d_getservprotos getservent $i_netdb netdb.h
8262 eval $hasproto
8263
8264 : see if gettimeofday or ftime exists
8265 set gettimeofday d_gettimeod
8266 eval $inlibc
8267 case "$d_gettimeod" in
8268 "$undef")
8269         set ftime d_ftime 
8270         eval $inlibc
8271         ;;
8272 *)
8273         val="$undef"; set d_ftime; eval $setvar
8274         ;;
8275 esac
8276 case "$d_gettimeod$d_ftime" in
8277 "$undef$undef")
8278         echo " "
8279         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
8280         ;;
8281 esac
8282
8283 : see if this is an grp system
8284 set grp.h i_grp
8285 eval $inhdr
8286
8287 case "$i_grp" in
8288 $define)
8289         xxx=`./findhdr grp.h`
8290         $cppstdin $cppflags $cppminus < $xxx >$$.h
8291
8292         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
8293                 val="$define"
8294         else
8295                 val="$undef"
8296         fi
8297         set d_grpasswd
8298         eval $setvar
8299
8300         $rm -f $$.h
8301         ;;
8302 *)
8303         val="$undef";
8304         set d_grpasswd; eval $setvar
8305         ;;
8306 esac
8307
8308 : see if hasmntopt exists
8309 set hasmntopt d_hasmntopt
8310 eval $inlibc
8311
8312 : see if this is a netinet/in.h or sys/in.h system
8313 set netinet/in.h i_niin sys/in.h i_sysin
8314 eval $inhdr
8315
8316 : see if arpa/inet.h has to be included
8317 set arpa/inet.h i_arpainet
8318 eval $inhdr
8319
8320 : see if htonl --and friends-- exists
8321 val=''
8322 set htonl val
8323 eval $inlibc
8324
8325 : Maybe they are macros.
8326 case "$val" in
8327 $undef)
8328         $cat >htonl.c <<EOM
8329 #include <stdio.h>
8330 #include <sys/types.h>
8331 #$i_niin I_NETINET_IN
8332 #$i_sysin I_SYS_IN
8333 #$i_arpainet I_ARPA_INET
8334 #ifdef I_NETINET_IN
8335 #include <netinet/in.h>
8336 #endif
8337 #ifdef I_SYS_IN
8338 #include <sys/in.h>
8339 #endif
8340 #ifdef I_ARPA_INET
8341 #include <arpa/inet.h>
8342 #endif
8343 #ifdef htonl
8344 printf("Defined as a macro.");
8345 #endif
8346 EOM
8347         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
8348         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
8349                 val="$define"
8350                 echo "But it seems to be defined as a macro." >&4
8351         fi
8352         $rm -f htonl.?
8353         ;;
8354 esac
8355 set d_htonl
8356 eval $setvar
8357
8358 : see which of string.h or strings.h is needed
8359 echo " "
8360 strings=`./findhdr string.h`
8361 if $test "$strings" && $test -r "$strings"; then
8362         echo "Using <string.h> instead of <strings.h>." >&4
8363         val="$define"
8364 else
8365         val="$undef"
8366         strings=`./findhdr strings.h`
8367         if $test "$strings" && $test -r "$strings"; then
8368                 echo "Using <strings.h> instead of <string.h>." >&4
8369         else
8370                 echo "No string header found -- You'll surely have problems." >&4
8371         fi
8372 fi
8373 set i_string
8374 eval $setvar
8375 case "$i_string" in
8376 "$undef") strings=`./findhdr strings.h`;;
8377 *)        strings=`./findhdr string.h`;;
8378 esac
8379
8380 : index or strchr
8381 echo " "
8382 if set index val -f; eval $csym; $val; then
8383         if set strchr val -f d_strchr; eval $csym; $val; then
8384                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
8385                         val="$define"
8386                         vali="$undef"
8387                         echo "strchr() found." >&4
8388                 else
8389                         val="$undef"
8390                         vali="$define"
8391                         echo "index() found." >&4
8392                 fi
8393         else
8394                 val="$undef"
8395                 vali="$define"
8396                 echo "index() found." >&4
8397         fi
8398 else
8399         if set strchr val -f d_strchr; eval $csym; $val; then
8400                 val="$define"
8401                 vali="$undef"
8402                 echo "strchr() found." >&4
8403         else
8404                 echo "No index() or strchr() found!" >&4
8405                 val="$undef"
8406                 vali="$undef"
8407         fi
8408 fi
8409 set d_strchr; eval $setvar
8410 val="$vali"
8411 set d_index; eval $setvar
8412
8413 : check whether inet_aton exists
8414 set inet_aton d_inetaton
8415 eval $inlibc
8416
8417 : see if inttypes.h is available
8418 : we want a real compile instead of Inhdr because some systems
8419 : have an inttypes.h which includes non-existent headers
8420 echo " "
8421 $cat >try.c <<EOCP
8422 #include <inttypes.h>
8423 int main() {
8424         static int32_t foo32 = 0x12345678;
8425 }
8426 EOCP
8427 set try
8428 if eval $compile; then
8429         echo "<inttypes.h> found." >&4
8430         val="$define"
8431 else
8432         echo "<inttypes.h> NOT found." >&4
8433         val="$undef"
8434 fi
8435 $rm -f try.c try
8436 set i_inttypes
8437 eval $setvar
8438
8439 : check for int64_t
8440 case "$use64bits" in
8441 "$define" )
8442         echo " "
8443         echo $n "Checking to see if your system supports int64_t...$c" >&4
8444         $cat >try.c <<EOCP
8445 #include <sys/types.h>
8446 #$i_inttypes I_INTTYPES
8447 #ifdef I_INTTYPES
8448 #include <inttypes.h>
8449 #endif
8450 int64_t foo() { int64_t x; x = 7; return x; }
8451 EOCP
8452         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8453                 val="$define"
8454                 echo " Yup, it does." >&4
8455         else
8456                 val="$undef"
8457                 echo " Nope, it doesn't." >&4
8458         fi
8459         $rm -f try.*
8460         ;;
8461 *)      val="$undef"
8462         ;;
8463 esac
8464 set d_int64t
8465 eval $setvar
8466
8467
8468 : Look for isascii
8469 echo " "
8470 $cat >isascii.c <<'EOCP'
8471 #include <stdio.h>
8472 #include <ctype.h>
8473 int main() {
8474         int c = 'A';
8475         if (isascii(c))
8476                 exit(0);
8477         else
8478                 exit(1);
8479 }
8480 EOCP
8481 set isascii
8482 if eval $compile; then
8483         echo "isascii() found." >&4
8484         val="$define"
8485 else
8486         echo "isascii() NOT found." >&4
8487         val="$undef"
8488 fi
8489 set d_isascii
8490 eval $setvar
8491 $rm -f isascii*
8492
8493 : see if killpg exists
8494 set killpg d_killpg
8495 eval $inlibc
8496
8497 : see if lchown exists
8498 echo " "
8499 $cat > try.c <<'EOCP'
8500 /* System header to define __stub macros and hopefully few prototypes,
8501     which can conflict with char lchown(); below.  */
8502 #include <assert.h>
8503 /* Override any gcc2 internal prototype to avoid an error.  */
8504 /* We use char because int might match the return type of a gcc2
8505    builtin and then its argument prototype would still apply.  */
8506 char lchown();
8507 int main() {
8508     /*  The GNU C library defines this for functions which it implements
8509         to always fail with ENOSYS.  Some functions are actually named
8510         something starting with __ and the normal name is an alias.  */
8511 #if defined (__stub_lchown) || defined (__stub___lchown)
8512 choke me
8513 #else
8514 lchown();
8515 #endif
8516 ; return 0; }
8517 EOCP
8518 set try
8519 if eval $compile; then
8520     $echo "lchown() found." >&4
8521     val="$define"
8522 else
8523     $echo "lchown() NOT found." >&4
8524     val="$undef"
8525 fi
8526 set d_lchown
8527 eval $setvar
8528
8529 : see if link exists
8530 set link d_link
8531 eval $inlibc
8532
8533 : see if localeconv exists
8534 set localeconv d_locconv
8535 eval $inlibc
8536
8537 : see if lockf exists
8538 set lockf d_lockf
8539 eval $inlibc
8540
8541 : check for length of double
8542 echo " "
8543 case "$doublesize" in
8544 '')
8545         $echo $n "Checking to see how big your double precision numbers are...$c" >&4
8546         $cat >try.c <<'EOCP'
8547 #include <stdio.h>
8548 int main()
8549 {
8550         printf("%d\n", sizeof(double));
8551 }
8552 EOCP
8553         set try
8554         if eval $compile_ok; then
8555                 doublesize=`./try`
8556                 $echo " $doublesize bytes." >&4
8557         else
8558                 dflt='8'
8559                 echo "(I can't seem to compile the test program.  Guessing...)"
8560                 rp="What is the size of a double precision number (in bytes)?"
8561                 . ./myread
8562                 doublesize="$ans"
8563         fi
8564         ;;
8565 esac
8566 $rm -f try.c try
8567
8568 : check for long doubles
8569 echo " "
8570 echo $n "Checking to see if your system supports long doubles...$c" >&4
8571 echo 'long double foo() { long double x; x = 7.0; return x; }' > try.c
8572 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8573         val="$define"
8574         echo " Yup, it does." >&4
8575 else
8576         val="$undef"
8577         echo " Nope, it doesn't." >&4
8578 fi
8579 $rm try.*
8580 set d_longdbl
8581 eval $setvar
8582
8583 : check for length of long double
8584 case "${d_longdbl}${longdblsize}" in
8585 $define)
8586         echo " "
8587         $echo $n "Checking to see how big your long doubles are...$c" >&4
8588         $cat >try.c <<'EOCP'
8589 #include <stdio.h>
8590 int main()
8591 {
8592         printf("%d\n", sizeof(long double));
8593 }
8594 EOCP
8595         set try
8596         if eval $compile; then
8597                 longdblsize=`./try`
8598                 $echo " $longdblsize bytes." >&4
8599         else
8600                 dflt='8'
8601                 echo " "
8602                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
8603                 rp="What is the size of a long double (in bytes)?"
8604                 . ./myread
8605                 longdblsize="$ans"
8606         fi
8607         if $test "X$doublesize" = "X$longdblsize"; then
8608                 echo "(That isn't any different from an ordinary double.)"
8609         fi      
8610         ;;
8611 esac
8612 $rm -f try.c try
8613
8614 : check for long long
8615 echo " "
8616 echo $n "Checking to see if your system supports long long...$c" >&4
8617 echo 'long long foo() { long long x; x = 7; return x; }' > try.c
8618 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8619         val="$define"
8620         echo " Yup, it does." >&4
8621 else
8622         val="$undef"
8623         echo " Nope, it doesn't." >&4
8624 fi
8625 $rm try.*
8626 set d_longlong
8627 eval $setvar
8628
8629 : check for length of long long
8630 case "${d_longlong}${longlongsize}" in
8631 $define)
8632         echo " "
8633         $echo $n "Checking to see how big your long longs are...$c" >&4
8634         $cat >try.c <<'EOCP'
8635 #include <stdio.h>
8636 int main()
8637 {
8638         printf("%d\n", sizeof(long long));
8639 }
8640 EOCP
8641         set try
8642         if eval $compile_ok; then
8643                 longlongsize=`./try`
8644                 $echo " $longlongsize bytes." >&4
8645         else
8646                 dflt='8'
8647                 echo " "
8648                 echo "(I can't seem to compile the test program.  Guessing...)"
8649                 rp="What is the size of a long long (in bytes)?"
8650                 . ./myread
8651                 longlongsize="$ans"
8652         fi
8653         if $test "X$longsize" = "X$longlongsize"; then
8654                 echo "(That isn't any different from an ordinary long.)"
8655         fi      
8656         ;;
8657 esac
8658 $rm -f try.c try
8659
8660 : see if lstat exists
8661 set lstat d_lstat
8662 eval $inlibc
8663
8664 : see if madvise exists
8665 set madvise d_madvise
8666 eval $inlibc
8667
8668 : see if mblen exists
8669 set mblen d_mblen
8670 eval $inlibc
8671
8672 : see if mbstowcs exists
8673 set mbstowcs d_mbstowcs
8674 eval $inlibc
8675
8676 : see if mbtowc exists
8677 set mbtowc d_mbtowc
8678 eval $inlibc
8679
8680 : see if memcmp exists
8681 set memcmp d_memcmp
8682 eval $inlibc
8683
8684 : see if memcpy exists
8685 set memcpy d_memcpy
8686 eval $inlibc
8687
8688 : see if memmove exists
8689 set memmove d_memmove
8690 eval $inlibc
8691
8692 : see if memset exists
8693 set memset d_memset
8694 eval $inlibc
8695
8696 : see if mkdir exists
8697 set mkdir d_mkdir
8698 eval $inlibc
8699
8700 : see if mkfifo exists
8701 set mkfifo d_mkfifo
8702 eval $inlibc
8703
8704 : see if mktime exists
8705 set mktime d_mktime
8706 eval $inlibc
8707
8708 : see if this is a sys/mman.h system
8709 set sys/mman.h i_sysmman
8710 eval $inhdr
8711
8712 : see if mmap exists
8713 set mmap d_mmap
8714 eval $inlibc
8715 : see what shmat returns
8716 : default to something harmless
8717 mmaptype='void *'
8718 case "$i_sysmman$d_mmap" in
8719 "$define$define")
8720         $cat >mmap.c <<'END'
8721 #include <sys/mman.h>
8722 void *mmap();
8723 END
8724         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
8725                 mmaptype='void *'
8726         else
8727                 mmaptype='caddr_t'
8728         fi
8729         echo "and it returns ($mmaptype)." >&4
8730         ;;
8731 esac
8732
8733
8734
8735 : see if mprotect exists
8736 set mprotect d_mprotect
8737 eval $inlibc
8738
8739 : see if msgctl exists
8740 set msgctl d_msgctl
8741 eval $inlibc
8742
8743 : see if msgget exists
8744 set msgget d_msgget
8745 eval $inlibc
8746
8747 : see if msgsnd exists
8748 set msgsnd d_msgsnd
8749 eval $inlibc
8750
8751 : see if msgrcv exists
8752 set msgrcv d_msgrcv
8753 eval $inlibc
8754
8755 : see how much of the 'msg*(2)' library is present.
8756 h_msg=true
8757 echo " "
8758 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
8759 *"$undef"*) h_msg=false;;
8760 esac
8761 case "$osname" in
8762 freebsd)
8763     case "`ipcs 2>&1`" in
8764     "SVID messages"*"not configured"*)
8765         echo "Your $osname does not have the msg*(2) configured." >&4
8766         h_msg=false
8767         val="$undef"
8768         set msgctl d_msgctl
8769         eval $setvar
8770         set msgget d_msgget
8771         eval $setvar
8772         set msgsnd d_msgsnd
8773         eval $setvar
8774         set msgrcv d_msgrcv
8775         eval $setvar
8776         ;;
8777     esac
8778     ;;
8779 esac
8780 : we could also check for sys/ipc.h ...
8781 if $h_msg && $test `./findhdr sys/msg.h`; then
8782         echo "You have the full msg*(2) library." >&4
8783         val="$define"
8784 else
8785         echo "You don't have the full msg*(2) library." >&4
8786         val="$undef"
8787 fi
8788 set d_msg
8789 eval $setvar
8790
8791 : see if msync exists
8792 set msync d_msync
8793 eval $inlibc
8794
8795 : see if munmap exists
8796 set munmap d_munmap
8797 eval $inlibc
8798
8799 : see if nice exists
8800 set nice d_nice
8801 eval $inlibc
8802
8803 : see if POSIX threads are available
8804 if test "X$usethreads" = "X$define"; then
8805         set pthread.h i_pthread
8806         eval $inhdr
8807 else
8808         i_pthread="$undef"
8809 fi
8810
8811
8812
8813 : how to create joinable pthreads
8814 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
8815         echo " "
8816         echo "Checking what constant to use for creating joinable pthreads..." >&4 
8817         $cat >try.c <<'EOCP'
8818 #include <pthread.h>
8819 int main() {
8820     int detachstate = JOINABLE;
8821 }
8822 EOCP
8823         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
8824         if eval $compile; then
8825                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
8826                 val="$undef" # Yes, undef.
8827                 set d_old_pthread_create_joinable
8828                 eval $setvar
8829                 val=""
8830                 set old_pthread_create_joinable
8831                 eval $setvar
8832         else
8833                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
8834                 if eval $compile; then
8835                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
8836                         val="$define"
8837                         set d_old_pthread_create_joinable
8838                         eval $setvar
8839                         val=PTHREAD_CREATE_UNDETACHED
8840                         set old_pthread_create_joinable
8841                         eval $setvar
8842                 else            
8843                         set try -DJOINABLE=__UNDETACHED
8844                         if eval $compile; then
8845                                 echo "You seem to use __UNDETACHED." >&4
8846                                 val="$define"
8847                                 set d_old_pthread_create_joinable
8848                                 eval $setvar
8849                                 val=__UNDETACHED
8850                                 set old_pthread_create_joinable
8851                                 eval $setvar
8852                         else
8853                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
8854                                 val="$define"
8855                                 set d_old_pthread_create_joinable
8856                                 eval $setvar
8857                                 val=0
8858                                 set old_pthread_create_joinable
8859                                 eval $setvar
8860                         fi
8861                 fi
8862         fi
8863         $rm -f try try.*
8864 else
8865     d_old_pthread_create_joinable="$undef"
8866     old_pthread_create_joinable=""
8867 fi
8868
8869 : see if pause exists
8870 set pause d_pause
8871 eval $inlibc
8872
8873 : see if pipe exists
8874 set pipe d_pipe
8875 eval $inlibc
8876
8877 : see if poll exists
8878 set poll d_poll
8879 eval $inlibc
8880
8881
8882 : see whether the various POSIXish _yields exist
8883 $cat >try.c <<EOP
8884 #include <pthread.h>
8885 #include <stdio.h>
8886 int main() {
8887 #ifdef SCHED_YIELD
8888         sched_yield();
8889 #else
8890 #ifdef PTHREAD_YIELD
8891         pthread_yield();
8892 #else
8893 #ifdef PTHREAD_YIELD_NULL
8894         pthread_yield(NULL);
8895 #endif
8896 #endif
8897 #endif
8898 }
8899 EOP
8900 : see if sched_yield exists
8901 set try -DSCHED_YIELD
8902 if eval $compile; then
8903     val="$define"
8904     sched_yield='sched_yield()'
8905 else
8906     val="$undef"
8907 fi
8908 case "$usethreads" in
8909 $define)
8910         case "$val" in
8911         $define) echo 'sched_yield() found.' >&4        ;;
8912         *)       echo 'sched_yield() NOT found.' >&4    ;;
8913         esac
8914 esac
8915 set d_sched_yield
8916 eval $setvar
8917
8918 : see if pthread_yield exists
8919 set try -DPTHREAD_YIELD
8920 if eval $compile; then
8921     val="$define"
8922     case "$sched_yield" in
8923     '') sched_yield='pthread_yield()' ;;
8924     esac
8925 else
8926     set try -DPTHREAD_YIELD_NULL
8927     if eval $compile; then
8928         val="$define"
8929         case "$sched_yield" in
8930         '') sched_yield='pthread_yield(NULL)' ;;
8931         esac
8932     else
8933         val="$undef"
8934     fi
8935 fi
8936 case "$usethreads" in
8937 $define)
8938         case "$val" in
8939         $define) echo 'pthread_yield() found.' >&4      ;;
8940         *)       echo 'pthread_yield() NOT found.' >&4  ;;
8941         esac
8942         ;;
8943 esac
8944 set d_pthread_yield
8945 eval $setvar
8946
8947 case "$sched_yield" in
8948 '') sched_yield=undef ;;
8949 esac
8950
8951 $rm -f try try.*
8952
8953 : see if this is a pwd.h system
8954 set pwd.h i_pwd
8955 eval $inhdr
8956
8957 case "$i_pwd" in
8958 $define)
8959         xxx=`./findhdr pwd.h`
8960         $cppstdin $cppflags $cppminus < $xxx >$$.h
8961
8962         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
8963                 val="$define"
8964         else
8965                 val="$undef"
8966         fi
8967         set d_pwquota
8968         eval $setvar
8969
8970         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
8971                 val="$define"
8972         else
8973                 val="$undef"
8974         fi
8975         set d_pwage
8976         eval $setvar
8977
8978         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
8979                 val="$define"
8980         else
8981                 val="$undef"
8982         fi
8983         set d_pwchange
8984         eval $setvar
8985
8986         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
8987                 val="$define"
8988         else
8989                 val="$undef"
8990         fi
8991         set d_pwclass
8992         eval $setvar
8993
8994         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
8995                 val="$define"
8996         else
8997                 val="$undef"
8998         fi
8999         set d_pwexpire
9000         eval $setvar
9001
9002         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
9003                 val="$define"
9004         else
9005                 val="$undef"
9006         fi
9007         set d_pwcomment
9008         eval $setvar
9009
9010         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
9011                 val="$define"
9012         else
9013                 val="$undef"
9014         fi
9015         set d_pwgecos
9016         eval $setvar
9017
9018         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
9019                 val="$define"
9020         else
9021                 val="$undef"
9022         fi
9023         set d_pwpasswd
9024         eval $setvar
9025
9026         $rm -f $$.h
9027         ;;
9028 *)
9029         val="$undef"; 
9030         set d_pwquota; eval $setvar
9031         set d_pwage; eval $setvar
9032         set d_pwchange; eval $setvar
9033         set d_pwclass; eval $setvar
9034         set d_pwexpire; eval $setvar
9035         set d_pwcomment; eval $setvar
9036         set d_pwgecos; eval $setvar
9037         set d_pwpasswd; eval $setvar
9038         ;;
9039 esac
9040
9041 : see if readdir and friends exist
9042 set readdir d_readdir
9043 eval $inlibc
9044 set seekdir d_seekdir
9045 eval $inlibc
9046 set telldir d_telldir
9047 eval $inlibc
9048 set rewinddir d_rewinddir
9049 eval $inlibc
9050
9051 : see if readlink exists
9052 set readlink d_readlink
9053 eval $inlibc
9054
9055 : see if readv exists
9056 set readv d_readv
9057 eval $inlibc
9058
9059 : see if rename exists
9060 set rename d_rename
9061 eval $inlibc
9062
9063 : see if rmdir exists
9064 set rmdir d_rmdir
9065 eval $inlibc
9066
9067 : see if memory.h is available.
9068 val=''
9069 set memory.h val
9070 eval $inhdr
9071
9072 : See if it conflicts with string.h
9073 case "$val" in
9074 $define)
9075         case "$strings" in
9076         '') ;;
9077         *)
9078                 $cppstdin $cppflags $cppminus < $strings > mem.h
9079                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
9080                         echo " "
9081                         echo "We won't be including <memory.h>."
9082                         val="$undef"
9083                 fi
9084                 $rm -f mem.h
9085                 ;;
9086         esac
9087 esac
9088 set i_memory
9089 eval $setvar
9090
9091 : can bcopy handle overlapping blocks?
9092 val="$undef"
9093 case "$d_bcopy" in
9094 "$define")
9095         echo " "
9096         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
9097         $cat >try.c <<EOCP
9098 #$i_memory I_MEMORY
9099 #$i_stdlib I_STDLIB
9100 #$i_string I_STRING
9101 #$i_unistd I_UNISTD
9102 EOCP
9103         $cat >>try.c <<'EOCP'
9104 #include <stdio.h>
9105 #ifdef I_MEMORY
9106 #  include <memory.h>
9107 #endif
9108 #ifdef I_STDLIB
9109 #  include <stdlib.h>
9110 #endif
9111 #ifdef I_STRING
9112 #  include <string.h>
9113 #else
9114 #  include <strings.h>
9115 #endif
9116 #ifdef I_UNISTD
9117 #  include <unistd.h>  /* Needed for NetBSD */
9118 #endif
9119 int main()
9120 {
9121 char buf[128], abc[128];
9122 char *b;
9123 int len;
9124 int off;
9125 int align;
9126
9127 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
9128
9129 for (align = 7; align >= 0; align--) {
9130         for (len = 36; len; len--) {
9131                 b = buf+align;
9132                 bcopy(abc, b, len);
9133                 for (off = 1; off <= len; off++) {
9134                         bcopy(b, b+off, len);
9135                         bcopy(b+off, b, len);
9136                         if (bcmp(b, abc, len))
9137                                 exit(1);
9138                 }
9139         }
9140 }
9141 exit(0);
9142 }
9143 EOCP
9144         set try
9145         if eval $compile_ok; then
9146                 if ./try 2>/dev/null; then
9147                         echo "Yes, it can."
9148                         val="$define"
9149                 else
9150                         echo "It can't, sorry."
9151                         case "$d_memmove" in
9152                         "$define") echo "But that's Ok since you have memmove()." ;;
9153                         esac
9154                 fi
9155         else
9156                 echo "(I can't compile the test program, so we'll assume not...)"
9157                 case "$d_memmove" in
9158                 "$define") echo "But that's Ok since you have memmove()." ;;
9159                 esac
9160         fi
9161         ;;
9162 esac
9163 $rm -f try.* try core
9164 set d_safebcpy
9165 eval $setvar
9166
9167 : can memcpy handle overlapping blocks?
9168 val="$undef"
9169 case "$d_memcpy" in
9170 "$define")
9171         echo " "
9172         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
9173         $cat >try.c <<EOCP
9174 #$i_memory I_MEMORY
9175 #$i_stdlib I_STDLIB
9176 #$i_string I_STRING
9177 #$i_unistd I_UNISTD
9178 EOCP
9179         $cat >>try.c <<'EOCP'
9180 #include <stdio.h>
9181 #ifdef I_MEMORY
9182 #  include <memory.h>
9183 #endif
9184 #ifdef I_STDLIB
9185 #  include <stdlib.h>
9186 #endif
9187 #ifdef I_STRING
9188 #  include <string.h>
9189 #else
9190 #  include <strings.h>
9191 #endif
9192 #ifdef I_UNISTD
9193 #  include <unistd.h>  /* Needed for NetBSD */
9194 #endif
9195 int main()
9196 {
9197 char buf[128], abc[128];
9198 char *b;
9199 int len;
9200 int off;
9201 int align;
9202
9203 /* Copy "abcde..." string to char abc[] so that gcc doesn't
9204    try to store the string in read-only memory. */
9205 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
9206
9207 for (align = 7; align >= 0; align--) {
9208         for (len = 36; len; len--) {
9209                 b = buf+align;
9210                 memcpy(b, abc, len);
9211                 for (off = 1; off <= len; off++) {
9212                         memcpy(b+off, b, len);
9213                         memcpy(b, b+off, len);
9214                         if (memcmp(b, abc, len))
9215                                 exit(1);
9216                 }
9217         }
9218 }
9219 exit(0);
9220 }
9221 EOCP
9222         set try
9223         if eval $compile_ok; then
9224                 if ./try 2>/dev/null; then
9225                         echo "Yes, it can."
9226                         val="$define"
9227                 else
9228                         echo "It can't, sorry."
9229                         case "$d_memmove" in
9230                         "$define") echo "But that's Ok since you have memmove()." ;;
9231                         esac
9232                 fi
9233         else
9234                 echo "(I can't compile the test program, so we'll assume not...)"
9235                 case "$d_memmove" in
9236                 "$define") echo "But that's Ok since you have memmove()." ;;
9237                 esac
9238         fi
9239         ;;
9240 esac
9241 $rm -f try.* try core
9242 set d_safemcpy
9243 eval $setvar
9244
9245 : can memcmp be trusted to compare relative magnitude?
9246 val="$undef"
9247 case "$d_memcmp" in
9248 "$define")
9249         echo " "
9250         echo "Checking if your memcmp() can compare relative magnitude..." >&4
9251         $cat >try.c <<EOCP
9252 #$i_memory I_MEMORY
9253 #$i_stdlib I_STDLIB
9254 #$i_string I_STRING
9255 #$i_unistd I_UNISTD
9256 EOCP
9257         $cat >>try.c <<'EOCP'
9258 #include <stdio.h>
9259 #ifdef I_MEMORY
9260 #  include <memory.h>
9261 #endif
9262 #ifdef I_STDLIB
9263 #  include <stdlib.h>
9264 #endif
9265 #ifdef I_STRING
9266 #  include <string.h>
9267 #else
9268 #  include <strings.h>
9269 #endif
9270 #ifdef I_UNISTD
9271 #  include <unistd.h>  /* Needed for NetBSD */
9272 #endif
9273 int main()
9274 {
9275 char a = -1;
9276 char b = 0;
9277 if ((a < b) && memcmp(&a, &b, 1) < 0)
9278         exit(1);
9279 exit(0);
9280 }
9281 EOCP
9282         set try
9283         if eval $compile_ok; then
9284                 if ./try 2>/dev/null; then
9285                         echo "Yes, it can."
9286                         val="$define"
9287                 else
9288                         echo "No, it can't (it uses signed chars)."
9289                 fi
9290         else
9291                 echo "(I can't compile the test program, so we'll assume not...)"
9292         fi
9293         ;;
9294 esac
9295 $rm -f try.* try core
9296 set d_sanemcmp
9297 eval $setvar
9298
9299 : see if select exists
9300 set select d_select
9301 eval $inlibc
9302
9303 : see if semctl exists
9304 set semctl d_semctl
9305 eval $inlibc
9306
9307 : see if semget exists
9308 set semget d_semget
9309 eval $inlibc
9310
9311 : see if semop exists
9312 set semop d_semop
9313 eval $inlibc
9314
9315 : see how much of the 'sem*(2)' library is present.
9316 h_sem=true
9317 echo " "
9318 case "$d_semctl$d_semget$d_semop" in
9319 *"$undef"*) h_sem=false;;
9320 esac
9321 case "$osname" in
9322 freebsd)
9323     case "`ipcs 2>&1`" in
9324     "SVID messages"*"not configured"*)
9325         echo "Your $osname does not have the sem*(2) configured." >&4
9326         h_sem=false
9327         val="$undef"
9328         set semctl d_semctl
9329         eval $setvar
9330         set semget d_semget
9331         eval $setvar
9332         set semop d_semop
9333         eval $setvar
9334         ;;
9335     esac
9336     ;;
9337 esac
9338 : we could also check for sys/ipc.h ...
9339 if $h_sem && $test `./findhdr sys/sem.h`; then
9340         echo "You have the full sem*(2) library." >&4
9341         val="$define"
9342 else
9343         echo "You don't have the full sem*(2) library." >&4
9344         val="$undef"
9345 fi
9346 set d_sem
9347 eval $setvar
9348
9349 : see whether sys/sem.h defines union semun
9350 echo " "
9351 $cat > try.c <<'END'
9352 #include <sys/types.h>
9353 #include <sys/ipc.h>
9354 #include <sys/sem.h>
9355 int main () { union semun semun; semun.buf = 0; }
9356 END
9357 set try
9358 if eval $compile; then
9359     echo "You have union semun in <sys/sem.h>." >&4
9360     val="$define"
9361 else
9362     echo "You do not have union semun in <sys/sem.h>." >&4
9363     val="$undef"
9364 fi
9365 $rm -f try try.c try.h
9366 set d_union_semun
9367 eval $setvar
9368
9369 : see how to do semctl IPC_STAT
9370 case "$d_sem" in
9371 $define)
9372     : see whether semctl IPC_STAT can use union semun
9373     echo " "
9374     $cat > try.h <<END
9375 #ifndef S_IRUSR
9376 #   ifdef S_IREAD
9377 #       define S_IRUSR S_IREAD
9378 #       define S_IWUSR S_IWRITE
9379 #       define S_IXUSR S_IEXEC
9380 #   else
9381 #       define S_IRUSR 0400
9382 #       define S_IWUSR 0200
9383 #       define S_IXUSR 0100
9384 #   endif
9385 #   define S_IRGRP (S_IRUSR>>3)
9386 #   define S_IWGRP (S_IWUSR>>3)
9387 #   define S_IXGRP (S_IXUSR>>3)
9388 #   define S_IROTH (S_IRUSR>>6)
9389 #   define S_IWOTH (S_IWUSR>>6)
9390 #   define S_IXOTH (S_IXUSR>>6)
9391 #endif
9392 #ifndef S_IRWXU
9393 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
9394 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
9395 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
9396 #endif
9397 END
9398
9399     $cat > try.c <<END
9400 #include <sys/types.h>
9401 #include <sys/ipc.h>
9402 #include <sys/sem.h>
9403 #include <sys/stat.h>
9404 #include <stdio.h>
9405 #include <errno.h>
9406 #include "try.h"
9407 #ifndef errno
9408 extern int errno;
9409 #endif
9410 #$d_union_semun HAS_UNION_SEMUN
9411 int main() {
9412     union semun
9413 #ifndef HAS_UNION_SEMUN
9414     {
9415         int val;
9416         struct semid_ds *buf;
9417         unsigned short *array;
9418     }
9419 #endif
9420     arg;
9421     int sem, st;
9422
9423 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
9424     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9425     if (sem > -1) {
9426         struct semid_ds argbuf;
9427         arg.buf = &argbuf;
9428 #       ifdef IPC_STAT
9429         st = semctl(sem, 0, IPC_STAT, arg);
9430         if (st == 0)
9431             printf("semun\n");
9432         else
9433 #       endif /* IPC_STAT */
9434             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9435 #       ifdef IPC_RMID
9436         if (semctl(sem, 0, IPC_RMID, arg) != 0)
9437 #       endif /* IPC_RMID */
9438             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9439     } else
9440 #endif /* IPC_PRIVATE && ... */
9441         printf("semget failed: errno = %d\n", errno);
9442   return 0;
9443 }
9444 END
9445     val="$undef"
9446     set try
9447     if eval $compile; then
9448         xxx=`./try`
9449         case "$xxx" in
9450         semun) val="$define" ;;
9451         esac
9452     fi
9453     $rm -f try try.c
9454     set d_semctl_semun
9455     eval $setvar
9456     case "$d_semctl_semun" in
9457     $define)
9458         echo "You can use union semun for semctl IPC_STAT." >&4
9459         also='also'
9460         ;;
9461     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
9462         also=''
9463         ;;
9464     esac
9465
9466     : see whether semctl IPC_STAT can use struct semid_ds pointer
9467     $cat > try.c <<'END'
9468 #include <sys/types.h>
9469 #include <sys/ipc.h>
9470 #include <sys/sem.h>
9471 #include <sys/stat.h>
9472 #include "try.h"
9473 #include <stdio.h>
9474 #include <errno.h>
9475 #ifndef errno
9476 extern int errno;
9477 #endif
9478 int main() {
9479     struct semid_ds arg;
9480     int sem, st;
9481
9482 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
9483     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9484     if (sem > -1) {
9485 #       ifdef IPC_STAT
9486         st = semctl(sem, 0, IPC_STAT, &arg);
9487         if (st == 0)
9488             printf("semid_ds\n");
9489         else
9490 #       endif /* IPC_STAT */
9491             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9492 #       ifdef IPC_RMID
9493         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
9494 #       endif /* IPC_RMID */
9495             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9496     } else
9497 #endif /* IPC_PRIVATE && ... */
9498         printf("semget failed: errno = %d\n", errno);
9499
9500     return 0;
9501 }
9502 END
9503     val="$undef"
9504     set try
9505     if eval $compile; then
9506         xxx=`./try`
9507         case "$xxx" in
9508         semid_ds) val="$define" ;;
9509         esac
9510     fi
9511     $rm -f try try.c
9512     set d_semctl_semid_ds
9513     eval $setvar
9514     case "$d_semctl_semid_ds" in
9515     $define)
9516         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
9517         ;;
9518     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
9519         ;;
9520     esac
9521     $rm -f try.h
9522     ;;
9523 *)  val="$undef"
9524
9525     # We do not have the full sem*(2) library, so assume we can not
9526     # use either.
9527
9528     set d_semctl_semun
9529     eval $setvar
9530
9531     set d_semctl_semid_ds
9532     eval $setvar
9533     ;;
9534 esac
9535
9536 : see if setegid exists
9537 set setegid d_setegid
9538 eval $inlibc
9539
9540 : see if seteuid exists
9541 set seteuid d_seteuid
9542 eval $inlibc
9543
9544 : see if setgrent exists
9545 set setgrent d_setgrent
9546 eval $inlibc
9547
9548 : see if sethostent exists
9549 set sethostent d_sethent
9550 eval $inlibc
9551
9552 : see if setlinebuf exists
9553 set setlinebuf d_setlinebuf
9554 eval $inlibc
9555
9556 : see if setlocale exists
9557 set setlocale d_setlocale
9558 eval $inlibc
9559
9560 : see if setnetent exists
9561 set setnetent d_setnent
9562 eval $inlibc
9563
9564 : see if setprotoent exists
9565 set setprotoent d_setpent
9566 eval $inlibc
9567
9568 : see if setpgid exists
9569 set setpgid d_setpgid
9570 eval $inlibc
9571
9572 : see if setpgrp2 exists
9573 set setpgrp2 d_setpgrp2
9574 eval $inlibc
9575
9576 : see if setpriority exists
9577 set setpriority d_setprior
9578 eval $inlibc
9579
9580 : see if setpwent exists
9581 set setpwent d_setpwent
9582 eval $inlibc
9583
9584 : see if setregid exists
9585 set setregid d_setregid
9586 eval $inlibc
9587 set setresgid d_setresgid
9588 eval $inlibc
9589
9590 : see if setreuid exists
9591 set setreuid d_setreuid
9592 eval $inlibc
9593 set setresuid d_setresuid
9594 eval $inlibc
9595
9596 : see if setrgid exists
9597 set setrgid d_setrgid
9598 eval $inlibc
9599
9600 : see if setruid exists
9601 set setruid d_setruid
9602 eval $inlibc
9603
9604 : see if setservent exists
9605 set setservent d_setsent
9606 eval $inlibc
9607
9608 : see if setsid exists
9609 set setsid d_setsid
9610 eval $inlibc
9611
9612 : see if setvbuf exists
9613 set setvbuf d_setvbuf
9614 eval $inlibc
9615
9616 : see if sfio.h is available
9617 set sfio.h i_sfio
9618 eval $inhdr
9619
9620
9621 : see if sfio library is available
9622 case "$i_sfio" in
9623 $define)
9624         val=''
9625         set sfreserve val
9626         eval $inlibc
9627         ;;
9628 *)
9629         val="$undef"
9630         ;;
9631 esac
9632 : Ok, but do we want to use it.
9633 case "$val" in
9634 $define)
9635         case "$usesfio" in
9636         true|$define|[yY]*) dflt='y';;
9637         *) dflt='n';;
9638         esac
9639         echo "$package can use the sfio library, but it is experimental."
9640         rp="You seem to have sfio available, do you want to try using it?"
9641         . ./myread
9642         case "$ans" in
9643         y|Y) ;;
9644         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
9645                 val="$undef"
9646                 : Remove sfio from list of libraries to use
9647                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
9648                 shift
9649                 libs="$*"
9650                 echo "libs = $libs" >&4
9651                 ;;
9652         esac
9653         ;;
9654 *)      case "$usesfio" in
9655         true|$define|[yY]*)
9656                 echo "Sorry, cannot find sfio on this machine" >&4
9657                 echo "Ignoring your setting of usesfio=$usesfio" >&4
9658                 ;;
9659         esac
9660         ;;
9661 esac
9662 set d_sfio
9663 eval $setvar
9664 case "$d_sfio" in
9665 $define) usesfio='true';;
9666 *) usesfio='false';;
9667 esac
9668
9669 : see if shmctl exists
9670 set shmctl d_shmctl
9671 eval $inlibc
9672
9673 : see if shmget exists
9674 set shmget d_shmget
9675 eval $inlibc
9676
9677 : see if shmat exists
9678 set shmat d_shmat
9679 eval $inlibc
9680 : see what shmat returns
9681 case "$d_shmat" in
9682 "$define")
9683         $cat >shmat.c <<'END'
9684 #include <sys/shm.h>
9685 void *shmat();
9686 END
9687         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
9688                 shmattype='void *'
9689         else
9690                 shmattype='char *'
9691         fi
9692         echo "and it returns ($shmattype)." >&4
9693         : see if a prototype for shmat is available
9694         xxx=`./findhdr sys/shm.h`
9695         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
9696         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
9697                 val="$define"
9698         else
9699                 val="$undef"
9700         fi
9701         $rm -f shmat.[co]
9702         ;;
9703 *)
9704         val="$undef"
9705         ;;
9706 esac
9707 set d_shmatprototype
9708 eval $setvar
9709
9710 : see if shmdt exists
9711 set shmdt d_shmdt
9712 eval $inlibc
9713
9714 : see how much of the 'shm*(2)' library is present.
9715 h_shm=true
9716 echo " "
9717 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
9718 *"$undef"*) h_shm=false;;
9719 esac
9720 case "$osname" in
9721 freebsd)
9722     case "`ipcs 2>&1`" in
9723     "SVID shared memory"*"not configured"*)
9724         echo "Your $osname does not have the shm*(2) configured." >&4
9725         h_shm=false
9726         val="$undef"
9727         set shmctl d_shmctl
9728         evat $setvar
9729         set shmget d_shmget
9730         evat $setvar
9731         set shmat d_shmat
9732         evat $setvar
9733         set shmdt d_shmdt
9734         evat $setvar
9735         ;;
9736     esac
9737     ;;
9738 esac
9739 : we could also check for sys/ipc.h ...
9740 if $h_shm && $test `./findhdr sys/shm.h`; then
9741         echo "You have the full shm*(2) library." >&4
9742         val="$define"
9743 else
9744         echo "You don't have the full shm*(2) library." >&4
9745         val="$undef"
9746 fi
9747 set d_shm
9748 eval $setvar
9749
9750 echo " "
9751 : see if we have sigaction
9752 if set sigaction val -f d_sigaction; eval $csym; $val; then
9753         echo 'sigaction() found.' >&4
9754         $cat > try.c <<'EOP'
9755 #include <stdio.h>
9756 #include <sys/types.h>
9757 #include <signal.h>
9758 int main()
9759 {
9760     struct sigaction act, oact;
9761 }
9762 EOP
9763         set try
9764         if eval $compile_ok; then
9765                 val="$define"
9766         else
9767                 echo "But you don't seem to have a useable struct sigaction." >&4
9768                 val="$undef"
9769         fi
9770 else
9771         echo 'sigaction NOT found.' >&4
9772         val="$undef"
9773 fi
9774 set d_sigaction; eval $setvar
9775 $rm -f try try$_o try.c
9776
9777 : see if sigsetjmp exists
9778 echo " "
9779 case "$d_sigsetjmp" in
9780 '')
9781         $cat >try.c <<'EOP'
9782 #include <setjmp.h>
9783 sigjmp_buf env;
9784 int set = 1;
9785 int main()
9786 {
9787         if (sigsetjmp(env,1))
9788                 exit(set);
9789         set = 0;
9790         siglongjmp(env, 1);
9791         exit(1);
9792 }
9793 EOP
9794         set try
9795         if eval $compile; then
9796                 if ./try >/dev/null 2>&1; then
9797                         echo "POSIX sigsetjmp found." >&4
9798                         val="$define"
9799                 else
9800                         $cat >&4 <<EOM
9801 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
9802 I'll ignore them.
9803 EOM
9804                         val="$undef"
9805                 fi
9806         else
9807                 echo "sigsetjmp not found." >&4
9808                 val="$undef"
9809         fi
9810         ;;
9811 *) val="$d_sigsetjmp"
9812         case "$d_sigsetjmp" in
9813         $define) echo "POSIX sigsetjmp found." >&4;;
9814         $undef) echo "sigsetjmp not found." >&4;;
9815         esac
9816         ;;
9817 esac
9818 set d_sigsetjmp
9819 eval $setvar
9820 $rm -f try.c try
9821
9822 : see if stat knows about block sizes
9823 echo " "
9824 set d_statblks stat st_blocks $i_sysstat sys/stat.h
9825 eval $hasfield
9826
9827 : see if _ptr and _cnt from stdio act std
9828 echo " "
9829 if $contains '_IO_fpos_t' `./findhdr stdio.h` >/dev/null 2>&1 ; then
9830         echo "(Looks like you have stdio.h from Linux.)"
9831         case "$stdio_ptr" in
9832         '') stdio_ptr='((fp)->_IO_read_ptr)'
9833                 ptr_lval=$define
9834                 ;;
9835         *)      ptr_lval=$d_stdio_ptr_lval;;
9836         esac
9837         case "$stdio_cnt" in
9838         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
9839                 cnt_lval=$undef
9840                 ;;
9841         *)      cnt_lval=$d_stdio_cnt_lval;;
9842         esac
9843         case "$stdio_base" in
9844         '') stdio_base='((fp)->_IO_read_base)';;
9845         esac
9846         case "$stdio_bufsiz" in
9847         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
9848         esac
9849 else
9850         case "$stdio_ptr" in
9851         '') stdio_ptr='((fp)->_ptr)'
9852                 ptr_lval=$define
9853                 ;;
9854         *)      ptr_lval=$d_stdio_ptr_lval;;
9855         esac
9856         case "$stdio_cnt" in
9857         '') stdio_cnt='((fp)->_cnt)'
9858                 cnt_lval=$define
9859                 ;;
9860         *)      cnt_lval=$d_stdio_cnt_lval;;
9861         esac
9862         case "$stdio_base" in
9863         '') stdio_base='((fp)->_base)';;
9864         esac
9865         case "$stdio_bufsiz" in
9866         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
9867         esac
9868 fi
9869 : test whether _ptr and _cnt really work
9870 echo "Checking how std your stdio is..." >&4
9871 $cat >try.c <<EOP
9872 #include <stdio.h>
9873 #define FILE_ptr(fp)    $stdio_ptr
9874 #define FILE_cnt(fp)    $stdio_cnt
9875 int main() {
9876         FILE *fp = fopen("try.c", "r");
9877         char c = getc(fp);
9878         if (
9879                 18 <= FILE_cnt(fp) &&
9880                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
9881         )
9882                 exit(0);
9883         exit(1);
9884 }
9885 EOP
9886 val="$undef"
9887 set try
9888 if eval $compile; then
9889         if ./try; then
9890                 echo "Your stdio acts pretty std."
9891                 val="$define"
9892         else
9893                 echo "Your stdio isn't very std."
9894         fi
9895 else
9896         echo "Your stdio doesn't appear very std."
9897 fi
9898 $rm -f try.c try
9899 set d_stdstdio
9900 eval $setvar
9901
9902 : Can _ptr be used as an lvalue?
9903 case "$d_stdstdio$ptr_lval" in
9904 $define$define) val=$define ;;
9905 *) val=$undef ;;
9906 esac
9907 set d_stdio_ptr_lval
9908 eval $setvar
9909
9910 : Can _cnt be used as an lvalue?
9911 case "$d_stdstdio$cnt_lval" in
9912 $define$define) val=$define ;;
9913 *) val=$undef ;;
9914 esac
9915 set d_stdio_cnt_lval
9916 eval $setvar
9917
9918 : see if _base is also standard
9919 val="$undef"
9920 case "$d_stdstdio" in
9921 $define)
9922         $cat >try.c <<EOP
9923 #include <stdio.h>
9924 #define FILE_base(fp)   $stdio_base
9925 #define FILE_bufsiz(fp) $stdio_bufsiz
9926 int main() {
9927         FILE *fp = fopen("try.c", "r");
9928         char c = getc(fp);
9929         if (
9930                 19 <= FILE_bufsiz(fp) &&
9931                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
9932         )
9933                 exit(0);
9934         exit(1);
9935 }
9936 EOP
9937         set try
9938         if eval $compile; then
9939                 if ./try; then
9940                         echo "And its _base field acts std."
9941                         val="$define"
9942                 else
9943                         echo "But its _base field isn't std."
9944                 fi
9945         else
9946                 echo "However, it seems to be lacking the _base field."
9947         fi
9948         $rm -f try.c try
9949         ;;
9950 esac
9951 set d_stdiobase
9952 eval $setvar
9953
9954 : see if strcoll exists
9955 set strcoll d_strcoll
9956 eval $inlibc
9957
9958 : check for structure copying
9959 echo " "
9960 echo "Checking to see if your C compiler can copy structs..." >&4
9961 $cat >try.c <<'EOCP'
9962 int main()
9963 {
9964         struct blurfl {
9965                 int dyick;
9966         } foo, bar;
9967
9968         foo = bar;
9969 }
9970 EOCP
9971 if $cc -c try.c >/dev/null 2>&1 ; then
9972         val="$define"
9973         echo "Yup, it can."
9974 else
9975         val="$undef"
9976         echo "Nope, it can't."
9977 fi
9978 set d_strctcpy
9979 eval $setvar
9980 $rm -f try.*
9981
9982 : see if strerror and/or sys_errlist[] exist
9983 echo " "
9984 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
9985     if set strerror val -f d_strerror; eval $csym; $val; then
9986                 echo 'strerror() found.' >&4
9987                 d_strerror="$define"
9988                 d_strerrm='strerror(e)'
9989                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
9990                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
9991                         d_syserrlst="$define"
9992                 else
9993                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
9994                         d_syserrlst="$undef"
9995                 fi
9996     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
9997                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
9998                 echo 'strerror() found in string header.' >&4
9999                 d_strerror="$define"
10000                 d_strerrm='strerror(e)'
10001                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10002                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
10003                                 d_syserrlst="$define"
10004                 else
10005                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
10006                         d_syserrlst="$undef"
10007                 fi
10008     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
10009                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
10010                 d_strerror="$undef"
10011                 d_syserrlst="$define"
10012                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
10013     else
10014                 echo 'strerror() and sys_errlist[] NOT found.' >&4
10015                 d_strerror="$undef"
10016                 d_syserrlst="$undef"
10017                 d_strerrm='"unknown"'
10018     fi
10019 fi
10020
10021 : see if strtod exists
10022 set strtod d_strtod
10023 eval $inlibc
10024
10025 : see if strtol exists
10026 set strtol d_strtol
10027 eval $inlibc
10028
10029 : see if strtoul exists
10030 set strtoul d_strtoul
10031 eval $inlibc
10032
10033 : see if strxfrm exists
10034 set strxfrm d_strxfrm
10035 eval $inlibc
10036
10037 : see if symlink exists
10038 set symlink d_symlink
10039 eval $inlibc
10040
10041 : see if syscall exists
10042 set syscall d_syscall
10043 eval $inlibc
10044
10045 : see if sysconf exists
10046 set sysconf d_sysconf
10047 eval $inlibc
10048
10049 : see if system exists
10050 set system d_system
10051 eval $inlibc
10052
10053 : see if tcgetpgrp exists
10054 set tcgetpgrp d_tcgetpgrp
10055 eval $inlibc
10056
10057 : see if tcsetpgrp exists
10058 set tcsetpgrp d_tcsetpgrp
10059 eval $inlibc
10060
10061 : see if sys/types.h has to be included
10062 set sys/types.h i_systypes
10063 eval $inhdr
10064
10065 : see if prototype for telldir is available
10066 echo " "
10067 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
10068 eval $hasproto
10069
10070 : define an is-a-typedef? function
10071 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10072 case "$inclist" in
10073 "") inclist="sys/types.h";;
10074 esac;
10075 eval "varval=\$$var";
10076 case "$varval" in
10077 "")
10078         $rm -f temp.c;
10079         for inc in $inclist; do
10080                 echo "#include <$inc>" >>temp.c;
10081         done;
10082         echo "#ifdef $type" >> temp.c;
10083         echo "printf(\"We have $type\");" >> temp.c;
10084         echo "#endif" >> temp.c;
10085         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10086         if $contains $type temp.E >/dev/null 2>&1; then
10087                 eval "$var=\$type";
10088         else
10089                 eval "$var=\$def";
10090         fi;
10091         $rm -f temp.?;;
10092 *) eval "$var=\$varval";;
10093 esac'
10094
10095 : define an is-a-typedef? function that prompts if the type is not available.
10096 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10097 case "$inclist" in
10098 "") inclist="sys/types.h";;
10099 esac;
10100 eval "varval=\$$var";
10101 case "$varval" in
10102 "")
10103         $rm -f temp.c;
10104         for inc in $inclist; do
10105                 echo "#include <$inc>" >>temp.c;
10106         done;
10107         echo "#ifdef $type" >> temp.c;
10108         echo "printf(\"We have $type\");" >> temp.c;
10109         echo "#endif" >> temp.c;
10110         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10111         echo " " ;
10112         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
10113         if $contains $type temp.E >/dev/null 2>&1; then
10114                 echo "$type found." >&4;
10115                 eval "$var=\$type";
10116         else
10117                 echo "$type NOT found." >&4;
10118                 dflt="$def";
10119                 . ./myread ;
10120                 eval "$var=\$ans";
10121         fi;
10122         $rm -f temp.?;;
10123 *) eval "$var=\$varval";;
10124 esac'
10125
10126 : see if this is a sys/times.h system
10127 set sys/times.h i_systimes
10128 eval $inhdr
10129
10130 : see if times exists
10131 echo " "
10132 if set times val -f d_times; eval $csym; $val; then
10133         echo 'times() found.' >&4
10134         d_times="$define"
10135         inc=''
10136         case "$i_systimes" in
10137         "$define") inc='sys/times.h';;
10138         esac
10139         rp="What is the type returned by times() on this system?"
10140         set clock_t clocktype long stdio.h sys/types.h $inc
10141         eval $typedef_ask
10142 else
10143         echo 'times() NOT found, hope that will do.' >&4
10144         d_times="$undef"
10145         clocktype='int'
10146 fi
10147
10148 : see if truncate exists
10149 set truncate d_truncate
10150 eval $inlibc
10151
10152 : see if tzname[] exists
10153 echo " "
10154 if set tzname val -a d_tzname; eval $csym; $val; then
10155         val="$define"
10156         echo 'tzname[] found.' >&4
10157 else
10158         val="$undef"
10159         echo 'tzname[] NOT found.' >&4
10160 fi
10161 set d_tzname
10162 eval $setvar
10163
10164 : see if umask exists
10165 set umask d_umask
10166 eval $inlibc
10167
10168 : backward compatibility for d_hvfork
10169 if test X$d_hvfork != X; then
10170         d_vfork="$d_hvfork"
10171         d_hvfork=''
10172 fi
10173 : see if there is a vfork
10174 val=''
10175 set vfork val
10176 eval $inlibc
10177
10178 : Ok, but do we want to use it. vfork is reportedly unreliable in 
10179 : perl on Solaris 2.x, and probably elsewhere.
10180 case "$val" in
10181 $define)
10182         echo " "
10183         case "$usevfork" in
10184         false) dflt='n';;
10185         *) dflt='y';;
10186         esac
10187         cat <<'EOM'
10188  
10189 Perl can only use a vfork() that doesn't suffer from strict
10190 restrictions on calling functions or modifying global data in
10191 the child.  For example, glibc-2.1 contains such a vfork()
10192 that is unsuitable.  If your system provides a proper fork()
10193 call, chances are that you do NOT want perl to use vfork().
10194
10195 EOM
10196         rp="Do you still want to use vfork()?"
10197         . ./myread
10198         case "$ans" in
10199         y|Y) ;;
10200         *)
10201                 echo "Ok, we won't use vfork()."
10202                 val="$undef"
10203                 ;;
10204         esac
10205         ;;
10206 esac
10207 set d_vfork
10208 eval $setvar
10209 case "$d_vfork" in
10210 $define) usevfork='true';;
10211 *) usevfork='false';;
10212 esac
10213
10214 : see if this is an sysdir system
10215 set sys/dir.h i_sysdir
10216 eval $inhdr
10217
10218 : see if this is an sysndir system
10219 set sys/ndir.h i_sysndir
10220 eval $inhdr
10221
10222 : see if closedir exists
10223 set closedir d_closedir
10224 eval $inlibc
10225
10226 case "$d_closedir" in
10227 "$define")
10228         echo " "
10229         echo "Checking whether closedir() returns a status..." >&4
10230         cat > closedir.c <<EOM
10231 #$i_dirent I_DIRENT             /**/
10232 #$i_sysdir I_SYS_DIR            /**/
10233 #$i_sysndir I_SYS_NDIR          /**/
10234 #$i_systypes I_SYS_TYPES        /**/
10235
10236 #if defined(I_SYS_TYPES)
10237 #include <sys/types.h>
10238 #endif
10239 #if defined(I_DIRENT)
10240 #include <dirent.h>
10241 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
10242 #include <sys/dir.h>
10243 #endif
10244 #else
10245 #ifdef I_SYS_NDIR
10246 #include <sys/ndir.h>
10247 #else
10248 #ifdef I_SYS_DIR
10249 #ifdef hp9000s500
10250 #include <ndir.h>       /* may be wrong in the future */
10251 #else
10252 #include <sys/dir.h>
10253 #endif
10254 #endif
10255 #endif
10256 #endif 
10257 int main() { return closedir(opendir(".")); }
10258 EOM
10259         set closedir
10260         if eval $compile_ok; then
10261                 if ./closedir > /dev/null 2>&1 ; then
10262                         echo "Yes, it does."
10263                         val="$undef"
10264                 else
10265                         echo "No, it doesn't."
10266                         val="$define"
10267                 fi
10268         else
10269                 echo "(I can't seem to compile the test program--assuming it doesn't)"
10270                 val="$define"
10271         fi
10272         ;;
10273 *)
10274         val="$undef";
10275         ;;
10276 esac
10277 set d_void_closedir
10278 eval $setvar
10279 $rm -f closedir*
10280 : check for volatile keyword
10281 echo " "
10282 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10283 $cat >try.c <<'EOCP'
10284 int main()
10285 {
10286         typedef struct _goo_struct goo_struct;
10287         goo_struct * volatile goo = ((goo_struct *)0);
10288         struct _goo_struct {
10289                 long long_int;
10290                 int reg_int;
10291                 char char_var;
10292         };
10293         typedef unsigned short foo_t;
10294         char *volatile foo;
10295         volatile int bar;
10296         volatile foo_t blech;
10297         foo = foo;
10298 }
10299 EOCP
10300 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10301         val="$define"
10302         echo "Yup, it does."
10303 else
10304         val="$undef"
10305         echo "Nope, it doesn't."
10306 fi
10307 set d_volatile
10308 eval $setvar
10309 $rm -f try.*
10310
10311 : see if there is a wait4
10312 set wait4 d_wait4
10313 eval $inlibc
10314
10315 : see if waitpid exists
10316 set waitpid d_waitpid
10317 eval $inlibc
10318
10319 : see if wcstombs exists
10320 set wcstombs d_wcstombs
10321 eval $inlibc
10322
10323 : see if wctomb exists
10324 set wctomb d_wctomb
10325 eval $inlibc
10326
10327 : see if writev exists
10328 set writev d_writev
10329 eval $inlibc
10330
10331 : preserve RCS keywords in files with variable substitution, grrr
10332 Date='$Date'
10333 Id='$Id'
10334 Log='$Log'
10335 RCSfile='$RCSfile'
10336 Revision='$Revision'
10337
10338 case "$crosscompile" in
10339 ''|[nN]*) crosscompile="$undef" ;;
10340 esac
10341
10342 case "$osname" in
10343 next|rhapsody) multiarch="$define" ;;
10344 esac
10345 case "$multiarch" in
10346 ''|[nN]*) multiarch="$undef" ;;
10347 esac
10348
10349 : check for alignment requirements
10350 echo " "
10351 case "$crosscompile$multiarch" in
10352 *$define*)
10353         $cat <<EOM
10354 You seem to be either cross-compiling or doing a multiarchitecture build,
10355 skipping the memory alignment check.
10356
10357 EOM
10358         case "$alignbytes" in
10359         '') alignbytes=8 ;;
10360         esac
10361         ;;
10362 *)
10363         case "$alignbytes" in
10364         '') echo "Checking alignment constraints..." >&4
10365                 $cat >try.c <<'EOCP'
10366 struct foobar {
10367         char foo;
10368         double bar;
10369 } try_algn;
10370 int main()
10371 {
10372         printf("%d\n", (char *)&try_algn.bar - (char *)&try_algn.foo);
10373 }
10374 EOCP
10375                 set try
10376                 if eval $compile_ok; then
10377                         dflt=`./try`
10378                 else
10379                         dflt='8'
10380                         echo "(I can't seem to compile the test program...)"
10381                 fi
10382                 ;;
10383         *) dflt="$alignbytes"
10384                 ;;
10385         esac
10386         rp="Doubles must be aligned on a how-many-byte boundary?"
10387         . ./myread
10388         alignbytes="$ans"
10389         $rm -f try.c try
10390         ;;
10391 esac
10392
10393
10394 : check for ordering of bytes in a long
10395 echo " "
10396 case "$crosscompile$multiarch" in
10397 *$define*)
10398         $cat <<EOM
10399 You seem to be either cross-compiling or doing a multiarchitecture build,
10400 skipping the byteorder check.
10401
10402 EOM
10403         byteorder=''
10404         ;;
10405 *)
10406         case "$byteorder" in
10407         '')
10408                 $cat <<'EOM'
10409 In the following, larger digits indicate more significance.  A big-endian
10410 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
10411 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
10412 machines may have weird orders like 3412.  A Cray will report 87654321. If
10413 the test program works the default is probably right.
10414 I'm now running the test program...
10415 EOM
10416                 $cat >try.c <<'EOCP'
10417 #include <stdio.h>
10418 int main()
10419 {
10420         int i;
10421         union {
10422                 unsigned long l;
10423                 char c[sizeof(long)];
10424         } u;
10425
10426         if (sizeof(long) > 4)
10427                 u.l = (0x08070605L << 32) | 0x04030201L;
10428         else
10429                 u.l = 0x04030201L;
10430         for (i = 0; i < sizeof(long); i++)
10431                 printf("%c", u.c[i]+'0');
10432         printf("\n");
10433         exit(0);
10434 }
10435 EOCP
10436                 xxx_prompt=y
10437                 set try
10438                 if eval $compile && ./try > /dev/null; then
10439                         dflt=`./try`
10440                         case "$dflt" in
10441                         [1-4][1-4][1-4][1-4]|12345678|87654321)
10442                                 echo "(The test program ran ok.)"
10443                                 echo "byteorder=$dflt"
10444                                 xxx_prompt=n
10445                         ;;
10446                         ????|????????) echo "(The test program ran ok.)" ;;
10447                         *) echo "(The test program didn't run right for some reason.)" ;;
10448                         esac
10449                 else
10450                         dflt='4321'
10451                         cat <<'EOM'
10452 (I can't seem to compile the test program.  Guessing big-endian...)
10453 EOM
10454                 fi
10455                 case "$xxx_prompt" in
10456                 y)
10457                         rp="What is the order of bytes in a long?"
10458                         . ./myread
10459                         byteorder="$ans"
10460                         ;;
10461                 *)      byteorder=$dflt
10462                         ;;
10463                 esac
10464                 ;;
10465         esac
10466         $rm -f try.c try
10467         ;;
10468 esac
10469
10470
10471 : how do we catenate cpp tokens here?
10472 echo " "
10473 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
10474 $cat >cpp_stuff.c <<'EOCP'
10475 #define RCAT(a,b)a/**/b
10476 #define ACAT(a,b)a ## b
10477 RCAT(Rei,ser)
10478 ACAT(Cir,cus)
10479 EOCP
10480 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
10481 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
10482         echo "Oh!  Smells like ANSI's been here." >&4
10483         echo "We can catify or stringify, separately or together!"
10484         cpp_stuff=42
10485 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
10486         echo "Ah, yes!  The good old days!" >&4
10487         echo "However, in the good old days we don't know how to stringify and"
10488         echo "catify at the same time."
10489         cpp_stuff=1
10490 else
10491         $cat >&4 <<EOM
10492 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
10493 to have to edit the values of CAT[2-5] in config.h...
10494 EOM
10495         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
10496 fi
10497 $rm -f cpp_stuff.*
10498
10499 : see if this is a db.h system
10500 set db.h i_db
10501 eval $inhdr
10502
10503 case "$i_db" in
10504 $define)
10505         : Check db version.
10506         echo " "
10507         echo "Checking Berkeley DB version ..." >&4
10508         $cat >try.c <<EOCP
10509 #$d_const HASCONST
10510 #ifndef HASCONST
10511 #define const
10512 #endif
10513 #include <sys/types.h>
10514 #include <stdio.h>
10515 #include <db.h>
10516 int main()
10517 {
10518 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
10519     int Major, Minor, Patch ;
10520     unsigned long Version ;
10521     (void)db_version(&Major, &Minor, &Patch) ;
10522     printf("You have Berkeley DB Version 2 or greater\n");
10523
10524     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
10525                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
10526     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
10527                 Major, Minor, Patch) ;
10528
10529     /* check that db.h & libdb are compatible */
10530     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
10531         printf("db.h and libdb are incompatible\n") ;
10532         exit(3);        
10533     }
10534
10535     printf("db.h and libdb are compatible\n") ;
10536
10537     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
10538                 + DB_VERSION_PATCH ;
10539
10540     /* needs to be >= 2.3.4 */
10541     if (Version < 2003004) {
10542     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
10543         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
10544         exit(2);        
10545     }
10546
10547     exit(0);
10548 #else
10549 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
10550     printf("You have Berkeley DB Version 1\n");
10551     exit(0);    /* DB version < 2: the coast is clear. */
10552 #else
10553     exit(1);    /* <db.h> not Berkeley DB? */
10554 #endif
10555 #endif
10556 }
10557 EOCP
10558         set try
10559         if eval $compile && ./try; then
10560                 echo 'Looks OK.' >&4
10561         else
10562                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
10563                 i_db=$undef
10564                 case " $libs " in
10565                 *"-ldb "*)
10566                         : Remove db from list of libraries to use
10567                         echo "Removing unusable -ldb from library list" >&4
10568                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
10569                         shift
10570                         libs="$*"
10571                         echo "libs = $libs" >&4
10572                         ;;
10573                 esac
10574         fi
10575         $rm -f try.*
10576         ;;
10577 esac
10578
10579 case "$i_db" in
10580 define)
10581         : Check the return type needed for hash 
10582         echo " "
10583         echo "Checking return type needed for hash for Berkeley DB ..." >&4
10584         $cat >try.c <<EOCP
10585 #$d_const HASCONST
10586 #ifndef HASCONST
10587 #define const
10588 #endif
10589 #include <sys/types.h>
10590 #include <db.h>
10591
10592 #ifndef DB_VERSION_MAJOR
10593 u_int32_t hash_cb (ptr, size)
10594 const void *ptr;
10595 size_t size;
10596 {
10597 }
10598 HASHINFO info;
10599 int main()
10600 {
10601         info.hash = hash_cb;
10602 }
10603 #endif
10604 EOCP
10605         if $cc $ccflags -c try.c >try.out 2>&1 ; then
10606                 if $contains warning try.out >>/dev/null 2>&1 ; then
10607                         db_hashtype='int'
10608                 else
10609                         db_hashtype='u_int32_t'
10610                 fi
10611         else
10612                 : XXX Maybe we should just give up here.
10613                 db_hashtype=u_int32_t
10614                 $cat try.out >&4
10615                 echo "Help:  I can't seem to compile the db test program." >&4
10616                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
10617         fi
10618         $rm -f try.*
10619         echo "Your version of Berkeley DB uses $db_hashtype for hash."
10620         ;;
10621 *)      db_hashtype=u_int32_t
10622         ;;
10623 esac
10624 case "$i_db" in
10625 define)
10626         : Check the return type needed for prefix 
10627         echo " "
10628         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
10629         cat >try.c <<EOCP
10630 #$d_const HASCONST
10631 #ifndef HASCONST
10632 #define const
10633 #endif
10634 #include <sys/types.h>
10635 #include <db.h>
10636
10637 #ifndef DB_VERSION_MAJOR
10638 size_t prefix_cb (key1, key2)
10639 const DBT *key1;
10640 const DBT *key2;
10641 {
10642 }
10643 BTREEINFO info;
10644 int main()
10645 {
10646         info.prefix = prefix_cb;
10647 }
10648 #endif
10649 EOCP
10650         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
10651                 if $contains warning try.out >>/dev/null 2>&1 ; then
10652                         db_prefixtype='int'
10653                 else
10654                         db_prefixtype='size_t'
10655                 fi
10656         else
10657                 db_prefixtype='size_t'
10658                 : XXX Maybe we should just give up here.
10659                 $cat try.out >&4
10660                 echo "Help:  I can't seem to compile the db test program." >&4
10661                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
10662         fi
10663         $rm -f try.*
10664         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
10665         ;;
10666 *)      db_prefixtype='size_t'
10667         ;;
10668 esac
10669
10670 : check for void type
10671 echo " "
10672 echo "Checking to see how well your C compiler groks the void type..." >&4
10673 case "$voidflags" in
10674 '')
10675         $cat >try.c <<'EOCP'
10676 #if TRY & 1
10677 void sub() {
10678 #else
10679 sub() {
10680 #endif
10681         extern void moo();      /* function returning void */
10682         void (*goo)();          /* ptr to func returning void */
10683 #if TRY & 8
10684         void *hue;              /* generic ptr */
10685 #endif
10686 #if TRY & 2
10687         void (*foo[10])();
10688 #endif
10689
10690 #if TRY & 4
10691         if(goo == moo) {
10692                 exit(0);
10693         }
10694 #endif
10695         exit(0);
10696 }
10697 int main() { sub(); }
10698 EOCP
10699         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
10700                 voidflags=$defvoidused
10701         echo "Good.  It appears to support void to the level $package wants.">&4
10702                 if $contains warning .out >/dev/null 2>&1; then
10703                         echo "However, you might get some warnings that look like this:"
10704                         $cat .out
10705                 fi
10706         else
10707 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
10708                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
10709                         echo "It supports 1..."
10710                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
10711                                 echo "It also supports 2..."
10712                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
10713                                         voidflags=7
10714                                         echo "And it supports 4 but not 8 definitely."
10715                                 else
10716                                         echo "It doesn't support 4..."
10717                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
10718                                                 voidflags=11
10719                                                 echo "But it supports 8."
10720                                         else
10721                                                 voidflags=3
10722                                                 echo "Neither does it support 8."
10723                                         fi
10724                                 fi
10725                         else
10726                                 echo "It does not support 2..."
10727                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
10728                                         voidflags=13
10729                                         echo "But it supports 4 and 8."
10730                                 else
10731                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
10732                                                 voidflags=5
10733                                                 echo "And it supports 4 but has not heard about 8."
10734                                         else
10735                                                 echo "However it supports 8 but not 4."
10736                                         fi
10737                                 fi
10738                         fi
10739                 else
10740                         echo "There is no support at all for void."
10741                         voidflags=0
10742                 fi
10743         fi
10744 esac
10745 case "$voidflags" in
10746 "$defvoidused") ;;
10747 *)      $cat >&4 <<'EOM'
10748   Support flag bits are:
10749     1: basic void declarations.
10750     2: arrays of pointers to functions returning void.
10751     4: operations between pointers to and addresses of void functions.
10752     8: generic void pointers.
10753 EOM
10754         dflt="$voidflags";
10755         rp="Your void support flags add up to what?"
10756         . ./myread
10757         voidflags="$ans"
10758         ;;
10759 esac
10760 $rm -f try.* .out
10761
10762
10763 : How can we generate normalized random numbers ?
10764 echo " "
10765 echo "Looking for a random number function..." >&4
10766 case "$randfunc" in
10767 '')
10768         if set drand48 val -f; eval $csym; $val; then
10769                 dflt="drand48"
10770                 echo "Good, found drand48()." >&4
10771         elif set random val -f; eval $csym; $val; then
10772                 dflt="random"
10773                 echo "OK, found random()." >&4
10774         else
10775                 dflt="rand"
10776                 echo "Yick, looks like I have to use rand()." >&4
10777         fi
10778         echo " "
10779         ;;
10780 *)
10781         dflt="$randfunc"
10782         ;;
10783 esac
10784 cont=true
10785
10786 case "$ccflags" in
10787 *-Dmy_rand=*|*-Dmy_srand=*)
10788         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
10789         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
10790         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
10791         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
10792         ;;
10793 esac
10794
10795 while $test "$cont"; do
10796         rp="Use which function to generate random numbers?"
10797         . ./myread
10798         if $test "$ans" = "$dflt"; then
10799                 : null
10800         else
10801                 randbits=''
10802         fi
10803         randfunc="$ans"
10804         if set $ans val -f; eval $csym; $val; then
10805                 cont=''
10806         else
10807                 dflt=y
10808                 rp="I cannot find function $ans. Use that name anyway?"
10809                 . ./myread
10810                 dflt=rand
10811                 case "$ans" in
10812                         [yY]*) cont='';;
10813                 esac
10814         fi
10815         case "$cont" in
10816         '')
10817                 case "$randfunc" in
10818                 drand48)
10819                         drand01="drand48()"
10820                         seedfunc="srand48"
10821                         randbits=48
10822                         randseedtype=long
10823                         ;;
10824                 rand|random)
10825                         case "$randbits" in
10826                         '')
10827 echo "Checking to see how many bits your $randfunc() function produces..." >&4
10828                                 $cat >try.c <<EOCP
10829 #$i_unistd I_UNISTD
10830 #$i_stdlib I_STDLIB
10831 #include <stdio.h>
10832 #ifdef I_UNISTD
10833 #  include <unistd.h>
10834 #endif
10835 #ifdef I_STDLIB
10836 #  include <stdlib.h>
10837 #endif
10838 int main()
10839 {
10840         register int i;
10841         register unsigned long tmp;
10842         register unsigned long max = 0L;
10843
10844         for (i = 1000; i; i--) {
10845                 tmp = (unsigned long) $randfunc();
10846                 if (tmp > max) max = tmp;
10847         }
10848         for (i = 0; max; i++)
10849                 max /= 2;
10850         printf("%d\n",i);
10851 }
10852 EOCP
10853                                 set try
10854                                 if eval $compile_ok; then
10855                                         dflt=`try`
10856                                 else
10857                                         dflt='?'
10858                                         echo "(I can't seem to compile the test program...)"
10859                                 fi
10860                                 ;;
10861                         *)
10862                                 dflt="$randbits"
10863                                 ;;
10864                         esac
10865                         rp="How many bits does your $randfunc() function produce?"
10866                         . ./myread
10867                         randbits="$ans"
10868                         $rm -f try.c try
10869                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10870                         seedfunc="s$randfunc"
10871                         randseedtype=unsigned
10872                         ;;
10873                 *)
10874                         dflt="31"
10875                         rp="How many bits does your $randfunc() function produce?"
10876                         . ./myread
10877                         randbits="$ans"
10878                         seedfunc="s$randfunc"
10879                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10880                         if set $seedfunc val -f; eval $csym; $val; then
10881                                 echo "(Using $seedfunc() to seed random generator)"
10882                         else
10883                                 echo "(Warning: no $seedfunc() to seed random generator)"
10884                                 seedfunc=rand
10885                         fi
10886                         randseedtype=unsigned
10887                         ;;
10888                 esac
10889                 ;;
10890         esac
10891 done
10892
10893 echo " "
10894 echo "Determining whether or not we are on an EBCDIC system..." >&4
10895 $cat >tebcdic.c <<'EOM'
10896 int main()
10897 {
10898   if ('M'==0xd4) return 0;
10899   return 1;
10900 }
10901 EOM
10902
10903 val=$undef
10904 set tebcdic
10905 if eval $compile_ok; then
10906         if ./tebcdic; then
10907                 echo "You have EBCDIC." >&4
10908                 val="$define"
10909         else
10910                 echo "Nope, no EBCDIC.  Assuming ASCII or some ISO Latin." >&4
10911         fi
10912 else
10913         echo "I'm unable to compile the test program." >&4
10914         echo "I'll assume ASCII or some ISO Latin." >&4
10915 fi
10916 $rm -f tebcdic.c tebcdic
10917 set ebcdic
10918 eval $setvar
10919
10920 : see what type file positions are declared as in the library
10921 rp="What is the type for file position used by fsetpos()?"
10922 set fpos_t fpostype long stdio.h sys/types.h
10923 eval $typedef_ask
10924
10925 : Store the full pathname to the ar program for use in the C program
10926 : Respect a hint or command line value for full_ar.
10927 case "$full_ar" in
10928 '') full_ar=$ar ;;
10929 esac
10930
10931 : Store the full pathname to the sed program for use in the C program
10932 full_sed=$sed
10933
10934 : see what type gids are declared as in the kernel
10935 echo " "
10936 echo "Looking for the type for group ids returned by getgid()."
10937 set gid_t gidtype xxx stdio.h sys/types.h
10938 eval $typedef
10939 case "$gidtype" in
10940 xxx)
10941         xxx=`./findhdr sys/user.h`
10942         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
10943         case $1 in
10944         unsigned) dflt="$1 $2" ;;
10945         *) dflt="$1" ;;
10946         esac
10947         ;;
10948 *) dflt="$gidtype";;
10949 esac
10950 case "$gidtype" in
10951 gid_t) echo "gid_t found." ;;
10952 *)      rp="What is the type for group ids returned by getgid()?"
10953         . ./myread
10954         gidtype="$ans"
10955         ;;
10956 esac
10957
10958 : see if getgroups exists
10959 set getgroups d_getgrps
10960 eval $inlibc
10961
10962 : see if setgroups exists
10963 set setgroups d_setgrps
10964 eval $inlibc
10965
10966
10967 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
10968 echo " "
10969 case "$d_getgrps$d_setgrps" in
10970 *define*)
10971         case "$groupstype" in
10972         '') dflt="$gidtype" ;;
10973         *)  dflt="$groupstype" ;;
10974         esac
10975         $cat <<EOM
10976 What type of pointer is the second argument to getgroups() and setgroups()?
10977 Usually this is the same as group ids, $gidtype, but not always.
10978
10979 EOM
10980         rp='What type pointer is the second argument to getgroups() and setgroups()?'
10981         . ./myread
10982         groupstype="$ans"
10983         ;;
10984 *)  groupstype="$gidtype";;
10985 esac
10986
10987 : see what type lseek is declared as in the kernel
10988 rp="What is the type used for lseek's offset on this system?"
10989 set off_t lseektype long stdio.h sys/types.h
10990 eval $typedef_ask
10991
10992 echo " "
10993 $echo $n "Checking to see how big your file offsets are...$c" >&4
10994 $cat >try.c <<EOCP
10995 #include <sys/types.h>
10996 #include <stdio.h>
10997 int main()
10998 {
10999         printf("%d\n", sizeof($lseektype));
11000 }
11001 EOCP
11002 set try
11003 if eval $compile_ok; then
11004         lseeksize=`./try`
11005         $echo " $lseeksize bytes." >&4
11006 else
11007         dflt='4'
11008         echo " "
11009         echo "(I can't seem to compile the test program.  Guessing...)"
11010         rp="What is the size of your file offsets (in bytes)?"
11011         . ./myread
11012         lseeksize="$ans"
11013 fi
11014 $rm -f try.c try
11015
11016 echo " "
11017 echo "Checking if your $make program sets \$(MAKE)..." >&4
11018 case "$make_set_make" in
11019 '')
11020         $sed 's/^X //' > testmake.mak << 'EOF'
11021 Xall:
11022 X       @echo 'maketemp="$(MAKE)"'
11023 EOF
11024         case "`$make -f testmake.mak 2>/dev/null`" in
11025         *maketemp=*) make_set_make='#' ;;
11026         *)      make_set_make="MAKE=$make" ;;
11027         esac
11028         $rm -f testmake.mak
11029         ;;
11030 esac
11031 case "$make_set_make" in
11032 '#') echo "Yup, it does.";;
11033 *) echo "Nope, it doesn't.";;
11034 esac
11035
11036 : see what type is used for mode_t
11037 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
11038 set mode_t modetype int stdio.h sys/types.h
11039 eval $typedef_ask
11040
11041 : define a fucntion to check prototypes
11042 $cat > protochk <<EOSH
11043 $startsh
11044 cc="$cc"
11045 optimize="$optimize"
11046 ccflags="$ccflags"
11047 prototype="$prototype"
11048 define="$define"
11049 rm=$rm
11050 EOSH
11051
11052 $cat >> protochk <<'EOSH'
11053
11054 $rm -f try.c
11055 foo="$1"
11056 shift
11057 while test $# -ge 2; do
11058         case "$1" in
11059                 $define) echo "#include <$2>" >> try.c ;;
11060                 literal) echo "$2" >> try.c ;;
11061         esac
11062     shift 2
11063 done
11064 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
11065 cat >> try.c <<'EOCP'
11066 #ifdef CAN_PROTOTYPE
11067 #define _(args) args
11068 #else
11069 #define _(args) ()
11070 #endif
11071 EOCP
11072 echo "$foo" >> try.c
11073 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
11074 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
11075 status=$?
11076 $rm -f try.[co]
11077 exit $status
11078 EOSH
11079 chmod +x protochk
11080 $eunicefix protochk
11081
11082 : see what type is used for size_t
11083 rp="What is the type used for the length parameter for string functions?"
11084 set size_t sizetype 'unsigned int' stdio.h sys/types.h
11085 eval $typedef_ask
11086
11087 : check for type of arguments to gethostbyaddr. 
11088 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
11089         case "$d_gethbyaddr" in
11090         $define)
11091                 $cat <<EOM
11092
11093 Checking to see what type of arguments are accepted by gethostbyaddr().
11094 EOM
11095                 hdrs="$define sys/types.h
11096                         $d_socket sys/socket.h 
11097                         $i_niin netinet/in.h 
11098                         $i_netdb netdb.h
11099                         $i_unistd unistd.h"
11100                 : The first arg can 'char *' or 'void *'
11101                 : The second arg is some of integral type
11102                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
11103                         for yyy in size_t long int; do
11104                                 case "$netdb_host_type" in
11105                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
11106                                         if ./protochk "$try" $hdrs; then
11107                                                 echo "Your system accepts $xxx for the first arg."
11108                                                 echo "...and $yyy for the second arg."
11109                                                 netdb_host_type="$xxx"
11110                                                 netdb_hlen_type="$yyy"
11111                                         fi
11112                                         ;;
11113                                 esac
11114                         done
11115                 done
11116                 : In case none of those worked, prompt the user.
11117                 case "$netdb_host_type" in
11118                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
11119                         dflt='char *'
11120                         . ./myread
11121                         netdb_host_type=$ans
11122                         rp='What is the type for the 2nd argument to gethostbyaddr?'
11123                         dflt="$sizetype"
11124                         . ./myread
11125                         netdb_hlen_type=$ans
11126                         ;;
11127                 esac
11128                 ;;
11129         *)      : no gethostbyaddr, so pick harmless defaults
11130                 netdb_host_type='char *'
11131                 netdb_hlen_type="$sizetype"
11132                 ;;
11133         esac
11134         # Remove the "const" if needed. -- but then we'll have a 
11135         # prototype clash!
11136         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
11137 fi
11138
11139 : check for type of argument to gethostbyname. 
11140 if test "X$netdb_name_type" = X ; then
11141         case "$d_gethbyname" in
11142         $define)
11143                 $cat <<EOM
11144
11145 Checking to see what type of argument is accepted by gethostbyname().
11146 EOM
11147                 hdrs="$define sys/types.h
11148                         $d_socket sys/socket.h 
11149                         $i_niin netinet/in.h 
11150                         $i_netdb netdb.h
11151                         $i_unistd unistd.h"
11152                 for xxx in "const char *" "char *"; do
11153                         case "$netdb_name_type" in
11154                         '')     try="extern struct hostent *gethostbyname($xxx);"
11155                                 if ./protochk "$try" $hdrs; then
11156                                         echo "Your system accepts $xxx."
11157                                         netdb_name_type="$xxx"
11158                                 fi
11159                                 ;;
11160                         esac
11161                 done
11162                 : In case none of those worked, prompt the user.
11163                 case "$netdb_name_type" in
11164                 '')     rp='What is the type for the 1st argument to gethostbyname?'
11165                         dflt='char *'
11166                         . ./myread
11167                         netdb_name_type=$ans
11168                         ;;
11169                 esac
11170                 ;;
11171         *)      : no gethostbyname, so pick harmless default
11172                 netdb_name_type='char *'
11173                 ;;
11174         esac
11175 fi
11176
11177 : check for type of 1st argument to getnetbyaddr. 
11178 if test "X$netdb_net_type" = X ; then
11179         case "$d_getnbyaddr" in
11180         $define)
11181                 $cat <<EOM
11182
11183 Checking to see what type of 1st argument is accepted by getnetbyaddr().
11184 EOM
11185                 hdrs="$define sys/types.h
11186                         $d_socket sys/socket.h 
11187                         $i_niin netinet/in.h 
11188                         $i_netdb netdb.h
11189                         $i_unistd unistd.h"
11190                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
11191                         case "$netdb_net_type" in
11192                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
11193                                 if ./protochk "$try" $hdrs; then
11194                                         echo "Your system accepts $xxx."
11195                                         netdb_net_type="$xxx"
11196                                 fi
11197                                 ;;
11198                         esac
11199                 done
11200                 : In case none of those worked, prompt the user.
11201                 case "$netdb_net_type" in
11202                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
11203                         dflt='long'
11204                         . ./myread
11205                         netdb_net_type=$ans
11206                         ;;
11207                 esac
11208                 ;;
11209         *)      : no getnetbyaddr, so pick harmless default
11210                 netdb_net_type='long'
11211                 ;;
11212         esac
11213 fi
11214 : locate the preferred pager for this system
11215 case "$pager" in
11216 '')
11217         dflt=''
11218         case "$pg" in
11219         /*) dflt=$pg;;
11220         esac
11221         case "$more" in
11222         /*) dflt=$more;;
11223         esac
11224         case "$less" in
11225         /*) dflt=$less;;
11226         esac
11227         case "$dflt" in
11228         '') dflt=/usr/ucb/more;;
11229         esac
11230         ;;
11231 *) dflt="$pager";;
11232 esac
11233 echo " "
11234 fn=f/
11235 rp='What pager is used on your system?'
11236 . ./getfile
11237 pager="$ans"
11238
11239 : see what type pids are declared as in the kernel
11240 rp="What is the type of process ids on this system?"
11241 set pid_t pidtype int stdio.h sys/types.h
11242 eval $typedef_ask
11243
11244 : check for length of pointer
11245 echo " "
11246 case "$ptrsize" in
11247 '')
11248         $echo $n "Checking to see how big your pointers are...$c" >&4
11249         if test "$voidflags" -gt 7; then
11250                 echo '#define VOID_PTR char *' > try.c
11251         else
11252                 echo '#define VOID_PTR void *' > try.c
11253         fi
11254         $cat >>try.c <<'EOCP'
11255 #include <stdio.h>
11256 int main()
11257 {
11258         printf("%d\n", sizeof(VOID_PTR));
11259         exit(0);
11260 }
11261 EOCP
11262         set try
11263         if eval $compile_ok; then
11264                 ptrsize=`./try`
11265                 $echo " $ptrsize bytes." >&4
11266         else
11267                 dflt='4'
11268                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
11269                 rp="What is the size of a pointer (in bytes)?"
11270                 . ./myread
11271                 ptrsize="$ans"
11272         fi
11273         ;;
11274 esac
11275 $rm -f try.c try
11276
11277 : see if ar generates random libraries by itself
11278 echo " "
11279 echo "Checking how to generate random libraries on your machine..." >&4
11280 echo 'int bar1() { return bar2(); }' > bar1.c
11281 echo 'int bar2() { return 2; }' > bar2.c
11282 $cat > foo.c <<'EOP'
11283 int main() { printf("%d\n", bar1()); exit(0); }
11284 EOP
11285 $cc $ccflags -c bar1.c >/dev/null 2>&1
11286 $cc $ccflags -c bar2.c >/dev/null 2>&1
11287 $cc $ccflags -c foo.c >/dev/null 2>&1
11288 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
11289 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11290         ./foobar >/dev/null 2>&1; then
11291         echo "$ar appears to generate random libraries itself."
11292         orderlib=false
11293         ranlib=":"
11294 elif $ar ts bar$_a >/dev/null 2>&1 &&
11295         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11296         ./foobar >/dev/null 2>&1; then
11297                 echo "a table of contents needs to be added with '$ar ts'."
11298                 orderlib=false
11299                 ranlib="$ar ts"
11300 else
11301         case "$ranlib" in
11302         :) ranlib='';;
11303         '')
11304                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
11305                 $test -f $ranlib || ranlib=''
11306                 ;;
11307         esac
11308         if $test -n "$ranlib"; then
11309                 echo "your system has '$ranlib'; we'll use that."
11310                 orderlib=false
11311         else
11312                 echo "your system doesn't seem to support random libraries"
11313                 echo "so we'll use lorder and tsort to order the libraries."
11314                 orderlib=true
11315                 ranlib=":"
11316         fi
11317 fi
11318 $rm -f foo* bar* 
11319
11320 : check for type of arguments to select. 
11321 case "$selecttype" in
11322 '') case "$d_select" in
11323         $define)
11324                 $cat <<EOM
11325 Checking to see what type of arguments are accepted by select().
11326 EOM
11327                 hdrs="$define sys/types.h
11328                         $i_systime sys/time.h 
11329                         $i_sysselct sys/select.h
11330                         $d_socket sys/socket.h"
11331                 : The first arg can be int, unsigned, or size_t
11332                 : The last arg may or may not be 'const'
11333                 val=''
11334                 : void pointer has been seen but using that
11335                 : breaks the selectminbits test
11336                 for xxx in 'fd_set *' 'int *'; do
11337                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
11338                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
11339                                         case "$val" in
11340                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
11341                                                 if ./protochk "$try" $hdrs; then
11342                                                         echo "Your system accepts $xxx."
11343                                                         val="$xxx"
11344                                                 fi
11345                                                 ;;
11346                                         esac
11347                                 done
11348                         done
11349                 done
11350                 case "$val" in
11351                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
11352                         case "$d_fd_set" in
11353                                 $define) dflt="fd_set *" ;;
11354                                 *)              dflt="int *" ;;
11355                         esac
11356                         . ./myread
11357                         val=$ans
11358                         ;;
11359                 esac
11360                 selecttype="$val"
11361                 ;;
11362         *)      : no select, so pick a harmless default
11363                 selecttype='int *'
11364                 ;;
11365         esac
11366         ;;
11367 esac
11368
11369 : check for the select 'width'
11370 case "$selectminbits" in
11371 '') case "$d_select" in
11372         $define)
11373                 $cat <<EOM
11374
11375 Checking to see on how many bits at a time your select() operates...
11376 EOM
11377                 $cat >try.c <<EOCP
11378 #include <sys/types.h>
11379 #$i_time I_TIME
11380 #$i_systime I_SYS_TIME
11381 #$i_systimek I_SYS_TIME_KERNEL
11382 #ifdef I_TIME
11383 #   include <time.h>
11384 #endif
11385 #ifdef I_SYS_TIME
11386 #   ifdef I_SYS_TIME_KERNEL
11387 #       define KERNEL
11388 #   endif
11389 #   include <sys/time.h>
11390 #   ifdef I_SYS_TIME_KERNEL
11391 #       undef KERNEL
11392 #   endif
11393 #endif
11394 #$i_sysselct I_SYS_SELECT
11395 #ifdef I_SYS_SELECT
11396 #include <sys/select.h>
11397 #endif
11398 #include <stdio.h>
11399 $selecttype b;
11400 #define S sizeof(*(b))
11401 #define MINBITS 64
11402 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
11403 #define NBITS  (NBYTES * 8)
11404 int main() {
11405     char s[NBYTES];
11406     struct timeval t;
11407     int i;
11408     FILE* fp;
11409     int fd;
11410
11411     fclose(stdin);
11412     fp = fopen("try.c", "r");
11413     if (fp == 0)
11414       exit(1);
11415     fd = fileno(fp);
11416     if (fd < 0)
11417       exit(2);
11418     b = ($selecttype)s;
11419     for (i = 0; i < NBITS; i++)
11420         FD_SET(i, b);
11421     t.tv_sec  = 0;
11422     t.tv_usec = 0;
11423     select(fd + 1, b, 0, 0, &t);
11424     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
11425     printf("%d\n", i + 1);
11426     return 0;
11427 }
11428 EOCP
11429                 set try
11430                 if eval $compile_ok; then
11431                         selectminbits=`./try`
11432                         case "$selectminbits" in
11433                         '')     cat >&4 <<EOM
11434 Cannot figure out on how many bits at a time your select() operates.
11435 I'll play safe and guess it is 32 bits.
11436 EOM
11437                                 selectminbits=32
11438                                 bits="32 bits"
11439                                 ;;
11440                         1)      bits="1 bit" ;;
11441                         *)      bits="$selectminbits bits" ;;
11442                         esac
11443                         echo "Your select() operates on $bits at a time." >&4
11444                 else
11445                         rp='What is the minimum number of bits your select() operates on?'
11446                         case "$byteorder" in
11447                         1234|12345678)  dflt=32 ;;
11448                         *)              dflt=1  ;;
11449                         esac
11450                         . ./myread
11451                         val=$ans
11452                         selectminbits="$val"
11453                 fi
11454                 $rm -f try.* try
11455                 ;;
11456         *)      : no select, so pick a harmless default
11457                 selectminbits='32'
11458                 ;;
11459         esac
11460         ;;
11461 esac
11462
11463 : Trace out the files included by signal.h, then look for SIGxxx names.
11464 : Remove SIGARRAYSIZE used by HPUX.
11465 : Remove SIGSTKSIZE used by Linux.
11466 : Remove SIGSTKSZ used by Posix.
11467 : Remove SIGTYP void lines used by OS2.
11468 xxx=`echo '#include <signal.h>' |
11469         $cppstdin $cppminus $cppflags 2>/dev/null |
11470         $grep '^[       ]*#.*include' | 
11471         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
11472 : Check this list of files to be sure we have parsed the cpp output ok.
11473 : This will also avoid potentially non-existent files, such 
11474 : as ../foo/bar.h
11475 xxxfiles=''
11476 for xx in $xxx /dev/null ; do
11477         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
11478 done
11479 : If we have found no files, at least try signal.h
11480 case "$xxxfiles" in
11481 '')     xxxfiles=`./findhdr signal.h` ;;
11482 esac
11483 xxx=`awk '
11484 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
11485         print substr($2, 4, 20)
11486 }
11487 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
11488         print substr($3, 4, 20)
11489 }' $xxxfiles`
11490 : Append some common names just in case the awk scan failed.
11491 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
11492 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
11493 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
11494 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
11495 : generate a few handy files for later
11496 $cat > signal.c <<'EOCP'
11497 #include <sys/types.h>
11498 #include <signal.h>
11499 #include <stdio.h>
11500 int main() {
11501
11502 /* Strange style to avoid deeply-nested #if/#else/#endif */
11503 #ifndef NSIG
11504 #  ifdef _NSIG
11505 #    define NSIG (_NSIG)
11506 #  endif
11507 #endif
11508
11509 #ifndef NSIG
11510 #  ifdef SIGMAX
11511 #    define NSIG (SIGMAX+1)
11512 #  endif
11513 #endif
11514
11515 #ifndef NSIG
11516 #  ifdef SIG_MAX
11517 #    define NSIG (SIG_MAX+1)
11518 #  endif
11519 #endif
11520
11521 #ifndef NSIG
11522 #  ifdef MAXSIG
11523 #    define NSIG (MAXSIG+1)
11524 #  endif
11525 #endif
11526
11527 #ifndef NSIG
11528 #  ifdef MAX_SIG
11529 #    define NSIG (MAX_SIG+1)
11530 #  endif
11531 #endif
11532
11533 #ifndef NSIG
11534 #  ifdef SIGARRAYSIZE
11535 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
11536 #  endif
11537 #endif
11538
11539 #ifndef NSIG
11540 #  ifdef _sys_nsig
11541 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
11542 #  endif
11543 #endif
11544
11545 /* Default to some arbitrary number that's big enough to get most
11546    of the common signals.
11547 */
11548 #ifndef NSIG
11549 #    define NSIG 50
11550 #endif
11551
11552 printf("NSIG %d\n", NSIG);
11553
11554 #ifndef JUST_NSIG
11555
11556 EOCP
11557
11558 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
11559 {
11560         printf "#ifdef SIG"; printf $1; printf "\n"
11561         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
11562         printf $1; printf ");\n"
11563         printf "#endif\n"
11564 }
11565 END {
11566         printf "#endif /* JUST_NSIG */\n";
11567         printf "}\n";
11568 }
11569 ' >>signal.c
11570 $cat >signal.awk <<'EOP'
11571 BEGIN { ndups = 0 }
11572 $1 ~ /^NSIG$/ { nsig = $2 }
11573 ($1 !~ /^NSIG$/) && (NF == 2) {
11574     if ($2 > maxsig) { maxsig = $2 }
11575     if (sig_name[$2]) {
11576         dup_name[ndups] = $1
11577         dup_num[ndups] = $2
11578         ndups++ 
11579     }
11580     else {
11581         sig_name[$2] = $1
11582         sig_num[$2] = $2
11583     }
11584 }
11585 END { 
11586     if (nsig == 0) {
11587         nsig = maxsig + 1
11588     }
11589     printf("NSIG %d\n", nsig);
11590     for (n = 1; n < nsig; n++) {
11591         if (sig_name[n]) {
11592             printf("%s %d\n", sig_name[n], sig_num[n])
11593         }
11594         else {
11595             printf("NUM%d %d\n", n, n) 
11596         }
11597     }
11598     for (n = 0; n < ndups; n++) {
11599         printf("%s %d\n", dup_name[n], dup_num[n])
11600     }
11601 }
11602 EOP
11603 $cat >signal_cmd <<EOS
11604 $startsh
11605 if $test -s signal.lst; then
11606     echo "Using your existing signal.lst file"
11607         exit 0
11608 fi
11609 xxx="$xxx"
11610 EOS
11611 $cat >>signal_cmd <<'EOS'
11612
11613 set signal
11614 if eval $compile_ok; then
11615         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11616 else
11617         echo "(I can't seem be able to compile the whole test program)" >&4
11618         echo "(I'll try it in little pieces.)" >&4
11619         set signal -DJUST_NSIG
11620         if eval $compile_ok; then
11621                 ./signal$_exe > signal.nsg
11622                 $cat signal.nsg
11623         else
11624                 echo "I can't seem to figure out how many signals you have." >&4
11625                 echo "Guessing 50." >&4
11626                 echo 'NSIG 50' > signal.nsg
11627         fi
11628         : Now look at all the signal names, one at a time.
11629         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
11630                 $cat > signal.c <<EOCP
11631 #include <sys/types.h>
11632 #include <signal.h>
11633 #include <stdio.h>
11634 int main() {
11635 printf("$xx %d\n", SIG${xx});
11636 return 0;
11637 }
11638 EOCP
11639                 set signal
11640                 if eval $compile; then
11641                         echo "SIG${xx} found."
11642                         ./signal$_exe  >> signal.ls1
11643                 else
11644                         echo "SIG${xx} NOT found."
11645                 fi
11646         done
11647         if $test -s signal.ls1; then
11648                 $cat signal.nsg signal.ls1 |
11649                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11650         fi
11651
11652 fi
11653 if $test -s signal.lst; then
11654         :
11655 else
11656         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
11657         echo 'kill -l' >signal
11658         set X `csh -f <signal`
11659         $rm -f signal
11660         shift
11661         case $# in
11662         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
11663         esac
11664         echo $@ | $tr ' ' $trnl | \
11665             $awk '{ printf "%s %d\n", $1, ++s; }
11666                   END { printf "NSIG %d\n", ++s }' >signal.lst
11667 fi
11668 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
11669 EOS
11670 chmod a+x signal_cmd
11671 $eunicefix signal_cmd
11672
11673 : generate list of signal names
11674 echo " "
11675 case "$sig_name_init" in
11676 '') doinit=yes ;;
11677 *)  case "$sig_num_init" in
11678     ''|*,*) doinit=yes ;;
11679     esac ;;
11680 esac
11681 case "$doinit" in
11682 yes)
11683         echo "Generating a list of signal names and numbers..." >&4
11684         . ./signal_cmd
11685         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
11686         sig_name=`$awk 'BEGIN { printf "ZERO " }
11687                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
11688         sig_num=`$awk  'BEGIN { printf "0 " }
11689                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
11690         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
11691                              !/^NSIG/   { printf "\"%s\", ", $1 }
11692                              END        { printf "0\n" }' signal.lst`
11693         sig_num_init=`$awk  'BEGIN      { printf "0, " }
11694                              !/^NSIG/   { printf "%d, ", $2}
11695                              END        { printf "0\n"}' signal.lst`
11696         ;;
11697 esac
11698 echo "The following $sig_count signals are available:"
11699 echo " "
11700 echo $sig_name | $awk \
11701 'BEGIN { linelen = 0 }
11702 {
11703         for (i = 1; i <= NF; i++) {
11704                 name = "SIG" $i " "
11705                 linelen = linelen + length(name)
11706                 if (linelen > 70) {
11707                         printf "\n"
11708                         linelen = length(name)
11709                 }
11710                 printf "%s", name
11711         }
11712         printf "\n"
11713 }'
11714 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
11715
11716 : see what type is used for signed size_t
11717 set ssize_t ssizetype int stdio.h sys/types.h
11718 eval $typedef
11719 dflt="$ssizetype"
11720 $cat > ssize.c <<EOM
11721 #include <stdio.h>
11722 #include <sys/types.h>
11723 #define Size_t $sizetype
11724 #define SSize_t $dflt
11725 int main()
11726 {
11727         if (sizeof(Size_t) == sizeof(SSize_t))
11728                 printf("$dflt\n");
11729         else if (sizeof(Size_t) == sizeof(int))
11730                 printf("int\n");
11731         else 
11732                 printf("long\n");
11733         exit(0);
11734 }
11735 EOM
11736 echo " "
11737 set ssize
11738 if eval $compile_ok && ./ssize > /dev/null; then
11739         ssizetype=`./ssize`
11740         echo "I'll be using $ssizetype for functions returning a byte count." >&4
11741 else
11742         $cat >&4 <<EOM
11743 Help! I can't compile and run the ssize_t test program: please enlighten me!
11744 (This is probably a misconfiguration in your system or libraries, and
11745 you really ought to fix it.  Still, I'll try anyway.)
11746
11747 I need a type that is the same size as $sizetype, but is guaranteed to
11748 be signed.  Common values are ssize_t, int and long.
11749
11750 EOM
11751         rp="What signed type is the same size as $sizetype?"
11752         . ./myread
11753         ssizetype="$ans"
11754 fi
11755 $rm -f ssize ssize.*
11756
11757 : see what type of char stdio uses.
11758 echo " "
11759 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
11760         echo "Your stdio uses unsigned chars." >&4
11761         stdchar="unsigned char"
11762 else
11763         echo "Your stdio uses signed chars." >&4
11764         stdchar="char"
11765 fi
11766
11767 : see if time exists
11768 echo " "
11769 if test "X$d_time" = X -o X"$timetype" = X; then
11770     if set time val -f d_time; eval $csym; $val; then
11771                 echo 'time() found.' >&4
11772                 val="$define"
11773                 rp="What is the type returned by time() on this system?"
11774                 set time_t timetype long stdio.h sys/types.h
11775                 eval $typedef_ask
11776     else
11777                 echo 'time() not found, hope that will do.' >&4
11778                 val="$undef"
11779                 timetype='int';
11780     fi
11781     set d_time
11782     eval $setvar
11783 fi
11784
11785 : see what type uids are declared as in the kernel
11786 echo " "
11787 echo "Looking for the type for user ids returned by getuid()."
11788 set uid_t uidtype xxx stdio.h sys/types.h
11789 eval $typedef
11790 case "$uidtype" in
11791 xxx)
11792         xxx=`./findhdr sys/user.h`
11793         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
11794         case $1 in
11795         unsigned) dflt="$1 $2" ;;
11796         *) dflt="$1" ;;
11797         esac
11798         ;;
11799 *) dflt="$uidtype";;
11800 esac
11801 case "$uidtype" in
11802 uid_t)  echo "uid_t found." ;;
11803 *)      rp="What is the type for user ids returned by getuid()?"
11804         . ./myread
11805         uidtype="$ans"
11806         ;;
11807 esac
11808
11809 : see if dbm.h is available
11810 : see if dbmclose exists
11811 set dbmclose d_dbmclose
11812 eval $inlibc
11813
11814 case "$d_dbmclose" in
11815 $define)
11816         set dbm.h i_dbm
11817         eval $inhdr
11818         case "$i_dbm" in
11819         $define)
11820                 val="$undef"
11821                 set i_rpcsvcdbm
11822                 eval $setvar
11823                 ;;
11824         *)      set rpcsvc/dbm.h i_rpcsvcdbm
11825                 eval $inhdr
11826                 ;;
11827         esac
11828         ;;
11829 *)      echo "We won't be including <dbm.h>"
11830         val="$undef"
11831         set i_dbm
11832         eval $setvar
11833         val="$undef"
11834         set i_rpcsvcdbm
11835         eval $setvar
11836         ;;
11837 esac
11838
11839 : see if this is a sys/file.h system
11840 val=''
11841 set sys/file.h val
11842 eval $inhdr
11843
11844 : do we need to include sys/file.h ?
11845 case "$val" in
11846 "$define")
11847         echo " "
11848         if $h_sysfile; then
11849                 val="$define"
11850                 echo "We'll be including <sys/file.h>." >&4
11851         else
11852                 val="$undef"
11853                 echo "We won't be including <sys/file.h>." >&4
11854         fi
11855         ;;
11856 *)
11857         h_sysfile=false
11858         ;;
11859 esac
11860 set i_sysfile
11861 eval $setvar
11862
11863 : see if fcntl.h is there
11864 val=''
11865 set fcntl.h val
11866 eval $inhdr
11867
11868 : see if we can include fcntl.h
11869 case "$val" in
11870 "$define")
11871         echo " "
11872         if $h_fcntl; then
11873                 val="$define"
11874                 echo "We'll be including <fcntl.h>." >&4
11875         else
11876                 val="$undef"
11877                 if $h_sysfile; then
11878         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
11879                 else
11880                         echo "We won't be including <fcntl.h>." >&4
11881                 fi
11882         fi
11883         ;;
11884 *)
11885         h_fcntl=false
11886         val="$undef"
11887         ;;
11888 esac
11889 set i_fcntl
11890 eval $setvar
11891
11892 : see if locale.h is available
11893 set locale.h i_locale
11894 eval $inhdr
11895
11896 : see if mach cthreads are available
11897 if test "X$usethreads" = "X$define"; then
11898         set mach/cthreads.h i_machcthr
11899         eval $inhdr
11900 else
11901         i_machcthr="$undef"
11902 fi
11903
11904
11905
11906 : see if this is a math.h system
11907 set math.h i_math
11908 eval $inhdr
11909
11910 : see if this is a mntent.h system
11911 set mntent.h i_mntent
11912 eval $inhdr
11913
11914 : see if ndbm.h is available
11915 set ndbm.h t_ndbm
11916 eval $inhdr
11917 case "$t_ndbm" in
11918 $define)
11919         : see if dbm_open exists
11920         set dbm_open d_dbm_open
11921         eval $inlibc
11922         case "$d_dbm_open" in
11923         $undef)
11924                 t_ndbm="$undef"
11925                 echo "We won't be including <ndbm.h>"
11926                 ;;
11927         esac
11928         ;;
11929 esac
11930 val="$t_ndbm"
11931 set i_ndbm
11932 eval $setvar
11933
11934 : see if net/errno.h is available
11935 val=''
11936 set net/errno.h val
11937 eval $inhdr
11938
11939 : Unfortunately, it causes problems on some systems.  Arrgh.
11940 case "$val" in
11941 $define)
11942         cat > try.c <<'EOM'
11943 #include <stdio.h>
11944 #include <errno.h>
11945 #include <net/errno.h>
11946 int func()
11947 {
11948         return ENOTSOCK;
11949 }
11950 EOM
11951         if $cc $ccflags -c try.c >/dev/null 2>&1; then
11952                 echo "We'll be including <net/errno.h>." >&4
11953         else
11954                 echo "We won't be including <net/errno.h>." >&4
11955                 val="$undef"
11956         fi
11957         $rm -f try.* try
11958         ;;
11959 esac
11960 set i_neterrno
11961 eval $setvar
11962
11963 : see if netinet/tcp.h is available
11964 set netinet/tcp.h i_netinettcp
11965 eval $inhdr
11966
11967 : see if this is a poll.h system
11968 set poll.h i_poll
11969 eval $inhdr
11970
11971 : get C preprocessor symbols handy
11972 echo " "
11973 $echo $n "Hmm... $c"
11974 echo $al | $tr ' ' $trnl >Cppsym.know
11975 $cat <<EOSS >Cppsym
11976 $startsh
11977 case "\$1" in
11978 -l) list=true
11979         shift
11980         ;;
11981 esac
11982 unknown=''
11983 case "\$list\$#" in
11984 1|2)
11985         for sym do
11986                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
11987                         exit 0
11988                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
11989                         :
11990                 else
11991                         unknown="\$unknown \$sym"
11992                 fi
11993         done
11994         set X \$unknown
11995         shift
11996         ;;
11997 esac
11998 case \$# in
11999 0) exit 1;;
12000 esac
12001 echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
12002 #ifdef \1\\
12003 exit 0; _ _ _ _\1\\      \1\\
12004 #endif\\
12005 /' >Cppsym\$\$
12006 echo "exit 1; _ _ _" >>Cppsym\$\$
12007 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
12008 case "\$list" in
12009 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
12010 *)
12011         sh Cppsym2\$\$
12012         status=\$?
12013         ;;
12014 esac
12015 $rm -f Cppsym\$\$ Cppsym2\$\$
12016 exit \$status
12017 EOSS
12018 chmod +x Cppsym
12019 $eunicefix Cppsym
12020 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
12021
12022 : now check the C compiler for additional symbols
12023 postprocess_cc_v=''
12024 case "$osname" in
12025 aix) postprocess_cc_v="|$tr , ' '" ;;
12026 esac
12027 $cat >ccsym <<EOS
12028 $startsh
12029 $cat >tmp.c <<EOF
12030 extern int foo;
12031 EOF
12032 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
12033 do
12034         case "\$i" in
12035         -D*) echo "\$i" | $sed 's/^-D//';;
12036         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
12037         esac
12038 done
12039 $rm -f try.c
12040 EOS
12041 postprocess_cc_v=''
12042 chmod +x ccsym
12043 $eunicefix ccsym
12044 ./ccsym > ccsym1.raw
12045 if $test -s ccsym1.raw; then
12046        $sort ccsym1.raw | $uniq >ccsym.raw
12047 else
12048        mv ccsym1.raw ccsym.raw
12049 fi
12050
12051 $awk '/\=/ { print $0; next }
12052         { print $0"=1" }' ccsym.raw >ccsym.list
12053 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
12054 $comm -13 ccsym.true ccsym.list >ccsym.own
12055 $comm -12 ccsym.true ccsym.list >ccsym.com
12056 $comm -23 ccsym.true ccsym.list >ccsym.cpp
12057 also=''
12058 if $test -z ccsym.raw; then
12059         echo "Your C compiler doesn't seem to define any symbols!" >&4
12060         echo " "
12061         echo "However, your C preprocessor defines the following symbols:"
12062         $cat Cppsym.true
12063         ccsymbols=''
12064         cppsymbols=`$cat Cppsym.true`
12065         cppsymbols=`echo $cppsymbols`
12066         cppccsymbols="$cppsymbols"
12067 else
12068         if $test -s ccsym.com; then
12069                 echo "Your C compiler and pre-processor define these symbols:"
12070                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
12071                 also='also '
12072                 symbols='ones'
12073                 cppccsymbols=`$cat ccsym.com`
12074                 cppccsymbols=`echo $cppccsymbols`
12075                 $test "$silent" || sleep 1
12076         fi
12077         if $test -s ccsym.cpp; then
12078                 $test "$also" && echo " "
12079                 echo "Your C pre-processor ${also}defines the following symbols:"
12080                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
12081                 also='further '
12082                 cppsymbols=`$cat ccsym.cpp`
12083                 cppsymbols=`echo $cppsymbols`
12084                 $test "$silent" || sleep 1
12085         fi
12086         if $test -s ccsym.own; then
12087                 $test "$also" && echo " "
12088                 echo "Your C compiler ${also}defines the following cpp symbols:"
12089                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
12090                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
12091                 ccsymbols=`$cat ccsym.own`
12092                 ccsymbols=`echo $ccsymbols`
12093                 $test "$silent" || sleep 1
12094         fi
12095 fi
12096 $rm -f ccsym*
12097
12098 : see if this is a termio system
12099 val="$undef"
12100 val2="$undef"
12101 val3="$undef"
12102 if $test `./findhdr termios.h`; then
12103         set tcsetattr i_termios
12104         eval $inlibc
12105         val3="$i_termios"
12106 fi
12107 echo " "
12108 case "$val3" in
12109 "$define") echo "You have POSIX termios.h... good!" >&4;;
12110 *) if ./Cppsym pyr; then
12111                 case "`/bin/universe`" in
12112                 ucb) if $test `./findhdr sgtty.h`; then
12113                                 val2="$define"
12114                                 echo "<sgtty.h> found." >&4
12115                         else
12116                                 echo "System is pyramid with BSD universe."
12117                                 echo "<sgtty.h> not found--you could have problems." >&4
12118                         fi;;
12119                 *) if $test `./findhdr termio.h`; then
12120                                 val="$define"
12121                                 echo "<termio.h> found." >&4
12122                         else
12123                                 echo "System is pyramid with USG universe."
12124                                 echo "<termio.h> not found--you could have problems." >&4
12125                         fi;;
12126                 esac
12127         elif ./usg; then
12128                 if $test `./findhdr termio.h`; then
12129                         echo "<termio.h> found." >&4
12130                         val="$define"
12131                 elif $test `./findhdr sgtty.h`; then
12132                         echo "<sgtty.h> found." >&4
12133                         val2="$define"
12134                 else
12135 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
12136                 fi
12137         else
12138                 if $test `./findhdr sgtty.h`; then
12139                         echo "<sgtty.h> found." >&4
12140                         val2="$define"
12141                 elif $test `./findhdr termio.h`; then
12142                         echo "<termio.h> found." >&4
12143                         val="$define"
12144                 else
12145 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
12146                 fi
12147         fi;;
12148 esac
12149 set i_termio; eval $setvar
12150 val=$val2; set i_sgtty; eval $setvar
12151 val=$val3; set i_termios; eval $setvar
12152
12153 : see if stdarg is available
12154 echo " "
12155 if $test `./findhdr stdarg.h`; then
12156         echo "<stdarg.h> found." >&4
12157         valstd="$define"
12158 else
12159         echo "<stdarg.h> NOT found." >&4
12160         valstd="$undef"
12161 fi
12162
12163 : see if varags is available
12164 echo " "
12165 if $test `./findhdr varargs.h`; then
12166         echo "<varargs.h> found." >&4
12167 else
12168         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
12169 fi
12170
12171 : set up the varargs testing programs
12172 $cat > varargs.c <<EOP
12173 #ifdef I_STDARG
12174 #include <stdarg.h>
12175 #endif
12176 #ifdef I_VARARGS
12177 #include <varargs.h>
12178 #endif
12179
12180 #ifdef I_STDARG
12181 int f(char *p, ...)
12182 #else
12183 int f(va_alist)
12184 va_dcl
12185 #endif
12186 {
12187         va_list ap;
12188 #ifndef I_STDARG
12189         char *p;
12190 #endif
12191 #ifdef I_STDARG
12192         va_start(ap,p);
12193 #else
12194         va_start(ap);
12195         p = va_arg(ap, char *);
12196 #endif
12197         va_end(ap);
12198 }
12199 EOP
12200 $cat > varargs <<EOP
12201 $startsh
12202 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
12203         echo "true"
12204 else
12205         echo "false"
12206 fi
12207 $rm -f varargs$_o
12208 EOP
12209 chmod +x varargs
12210
12211 : now check which varargs header should be included
12212 echo " "
12213 i_varhdr=''
12214 case "$valstd" in
12215 "$define")
12216         if `./varargs I_STDARG`; then
12217                 val='stdarg.h'
12218         elif `./varargs I_VARARGS`; then
12219                 val='varargs.h'
12220         fi
12221         ;;
12222 *)
12223         if `./varargs I_VARARGS`; then
12224                 val='varargs.h'
12225         fi
12226         ;;
12227 esac
12228 case "$val" in
12229 '')
12230 echo "I could not find the definition for va_dcl... You have problems..." >&4
12231         val="$undef"; set i_stdarg; eval $setvar
12232         val="$undef"; set i_varargs; eval $setvar
12233         ;;
12234 *) 
12235         set i_varhdr
12236         eval $setvar
12237         case "$i_varhdr" in
12238         stdarg.h)
12239                 val="$define"; set i_stdarg; eval $setvar
12240                 val="$undef"; set i_varargs; eval $setvar
12241                 ;;
12242         varargs.h)
12243                 val="$undef"; set i_stdarg; eval $setvar
12244                 val="$define"; set i_varargs; eval $setvar
12245                 ;;
12246         esac
12247         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
12248 esac
12249 $rm -f varargs*
12250
12251 : see if stddef is available
12252 set stddef.h i_stddef
12253 eval $inhdr
12254
12255 : see if sys/access.h is available
12256 set sys/access.h i_sysaccess
12257 eval $inhdr
12258
12259 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
12260 set sys/filio.h i_sysfilio
12261 eval $inhdr
12262 echo " "
12263 if $test `./findhdr sys/ioctl.h`; then
12264         val="$define"
12265         echo '<sys/ioctl.h> found.' >&4
12266 else
12267         val="$undef"
12268         if $test $i_sysfilio = "$define"; then
12269             echo '<sys/ioctl.h> NOT found.' >&4
12270         else
12271                 $test $i_sgtty = "$define" && xxx="sgtty.h"
12272                 $test $i_termio = "$define" && xxx="termio.h"
12273                 $test $i_termios = "$define" && xxx="termios.h"
12274 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
12275         fi
12276 fi
12277 set i_sysioctl
12278 eval $setvar
12279
12280 : see if sys/resource.h has to be included
12281 set sys/resource.h i_sysresrc
12282 eval $inhdr
12283
12284 : see if sys/security.h is available
12285 set sys/security.h i_syssecrt
12286 eval $inhdr
12287
12288 : see if this is a sys/statvfs.h system
12289 set sys/statvfs.h i_sysstatvfs
12290 eval $inhdr
12291
12292 : see if this is a sys/un.h system
12293 set sys/un.h i_sysun
12294 eval $inhdr
12295
12296 : see if this is a syswait system
12297 set sys/wait.h i_syswait
12298 eval $inhdr
12299
12300 : see if this is an utime system
12301 set utime.h i_utime
12302 eval $inhdr
12303
12304 : see if this is a values.h system
12305 set values.h i_values
12306 eval $inhdr
12307
12308 : see if this is a vfork system
12309 case "$d_vfork" in
12310 "$define")
12311         set vfork.h i_vfork
12312         eval $inhdr
12313         ;;
12314 *)
12315         i_vfork="$undef"
12316         ;;
12317 esac
12318
12319 : see if gdbm.h is available
12320 set gdbm.h t_gdbm
12321 eval $inhdr
12322 case "$t_gdbm" in
12323 $define)
12324         : see if gdbm_open exists
12325         set gdbm_open d_gdbm_open
12326         eval $inlibc
12327         case "$d_gdbm_open" in
12328         $undef)
12329                 t_gdbm="$undef"
12330                 echo "We won't be including <gdbm.h>"
12331                 ;;
12332         esac
12333         ;;
12334 esac
12335 val="$t_gdbm"
12336 set i_gdbm
12337 eval $setvar
12338
12339 echo " "
12340 echo "Looking for extensions..." >&4
12341 tdir=`pwd`
12342 cd $rsrc/ext
12343 : If we are using the old config.sh, known_extensions may contain
12344 : old or inaccurate or duplicate values.
12345 known_extensions=''
12346 nonxs_extensions=''
12347 : We do not use find because it might not be available.
12348 : We do not just use MANIFEST because the user may have dropped
12349 : some additional extensions into the source tree and expect them
12350 : to be built.
12351 for xxx in * ; do
12352         case "$xxx" in
12353         DynaLoader|dynaload) ;;
12354         *)      if $test -f $xxx/$xxx.xs; then
12355                         known_extensions="$known_extensions $xxx"
12356                 elif $test -f $xxx/Makefile.PL; then
12357                         nonxs_extensions="$nonxs_extensions $xxx"
12358                 else
12359                         if $test -d $xxx; then
12360                                 # Look for nested extensions, eg. Devel/Dprof.
12361                                 cd $xxx
12362                                 for yyy in * ; do
12363                                 if $test -f $yyy/$yyy.xs; then
12364                                         known_extensions="$known_extensions $xxx/$yyy"
12365                                 elif $test -f $yyy/Makefile.PL; then
12366                                         nonxs_extensions="$nonxs_extensions $xxx/$yyy"
12367                                 fi
12368                                 done
12369                                 cd ..
12370                         fi
12371                 fi 
12372                 ;;
12373         esac
12374 done
12375 set X $nonxs_extensions
12376 shift
12377 nonxs_extensions="$*"
12378 set X $known_extensions
12379 shift
12380 known_extensions="$*"
12381 cd $tdir
12382
12383 : Now see which are supported on this system.
12384 avail_ext=''
12385 for xxx in $known_extensions ; do
12386         case "$xxx" in
12387         DB_File|db_file)
12388                 case "$i_db" in
12389                 $define) avail_ext="$avail_ext $xxx" ;;
12390                 esac
12391                 ;;
12392         GDBM_File|gdbm_fil)
12393                 case "$i_gdbm" in 
12394                 $define) avail_ext="$avail_ext $xxx" ;;
12395                 esac
12396                 ;;
12397         NDBM_File|ndbm_fil)
12398                 case "$i_ndbm" in
12399                 $define) avail_ext="$avail_ext $xxx" ;;
12400                 esac
12401                 ;;
12402         ODBM_File|odbm_fil) 
12403                 case "${i_dbm}${i_rpcsvcdbm}" in
12404                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12405                 esac
12406                 ;;
12407         POSIX|posix)
12408                 case "$useposix" in
12409                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12410                 esac
12411                 ;;
12412         Opcode|opcode)
12413                 case "$useopcode" in
12414                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12415                 esac
12416                 ;;
12417         Socket|socket)
12418                 case "$d_socket" in 
12419                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12420                 esac
12421                 ;;
12422         Thread|thread)
12423                 case "$usethreads" in 
12424                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12425                 esac
12426                 ;;
12427         IPC/SysV|ipc/sysv)
12428                 : XXX Do we need a useipcsysv variable here
12429                 case "${d_msg}${d_sem}${d_shm}" in 
12430                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12431                 esac
12432                 ;;
12433         *)      avail_ext="$avail_ext $xxx"
12434                 ;;
12435         esac
12436 done
12437
12438 set X $avail_ext
12439 shift
12440 avail_ext="$*"
12441
12442 : Now see which nonxs extensions are supported on this system.
12443 : For now assume all are.
12444 nonxs_ext=''
12445 for xxx in $nonxs_extensions ; do
12446         case "$xxx" in
12447         *)      nonxs_ext="$nonxs_ext $xxx"
12448                 ;;
12449         esac
12450 done
12451
12452 set X $nonxs_ext
12453 shift
12454 nonxs_ext="$*"
12455
12456 case $usedl in
12457 $define)
12458         $cat <<EOM
12459 A number of extensions are supplied with $package.  You may choose to
12460 compile these extensions for dynamic loading (the default), compile
12461 them into the $package executable (static loading), or not include
12462 them at all.  Answer "none" to include no extensions.
12463 Note that DynaLoader is always built and need not be mentioned here.
12464
12465 EOM
12466         case "$dynamic_ext" in
12467         '') dflt="$avail_ext" ;;
12468         *)      dflt="$dynamic_ext"
12469                 # Perhaps we are reusing an old out-of-date config.sh.
12470                 case "$hint" in
12471                 previous)
12472                         if test X"$dynamic_ext" != X"$avail_ext"; then
12473                                 $cat <<EOM
12474 NOTICE:  Your previous config.sh list may be incorrect. 
12475 The extensions now available to you are 
12476         ${avail_ext}
12477 but the default list from your previous config.sh is
12478         ${dynamic_ext} 
12479
12480 EOM
12481                         fi
12482                         ;;
12483                 esac
12484                 ;;
12485         esac
12486         case "$dflt" in
12487         '')     dflt=none;;
12488         esac
12489         rp="What extensions do you wish to load dynamically?"
12490         . ./myread
12491         case "$ans" in
12492         none) dynamic_ext=' ' ;;
12493         *) dynamic_ext="$ans" ;;
12494         esac
12495
12496         case "$static_ext" in
12497         '')
12498                 : Exclude those already listed in dynamic linking
12499                 dflt=''
12500                 for xxx in $avail_ext; do
12501                         case " $dynamic_ext " in
12502                         *" $xxx "*) ;;
12503                         *) dflt="$dflt $xxx" ;;
12504                         esac
12505                 done
12506                 set X $dflt
12507                 shift
12508                 dflt="$*"
12509                 ;;
12510         *)  dflt="$static_ext" 
12511                 ;;
12512         esac
12513
12514         case "$dflt" in
12515         '')     dflt=none;;
12516         esac
12517         rp="What extensions do you wish to load statically?"
12518         . ./myread
12519         case "$ans" in
12520         none) static_ext=' ' ;;
12521         *) static_ext="$ans" ;;
12522         esac
12523         ;;
12524 *)
12525         $cat <<EOM
12526 A number of extensions are supplied with $package.  Answer "none" 
12527 to include no extensions. 
12528 Note that DynaLoader is always built and need not be mentioned here.
12529
12530 EOM
12531         case "$static_ext" in
12532         '') dflt="$avail_ext" ;;
12533         *)      dflt="$static_ext"
12534                 # Perhaps we are reusing an old out-of-date config.sh.
12535                 case "$hint" in
12536                 previous)
12537                         if test X"$static_ext" != X"$avail_ext"; then
12538                                 $cat <<EOM
12539 NOTICE:  Your previous config.sh list may be incorrect. 
12540 The extensions now available to you are 
12541         ${avail_ext}
12542 but the default list from your previous config.sh is
12543         ${static_ext} 
12544
12545 EOM
12546                         fi
12547                         ;;
12548                 esac
12549                 ;;
12550         esac
12551         : Exclude those that are not xs extensions
12552         case "$dflt" in
12553         '')     dflt=none;;
12554         esac
12555         rp="What extensions do you wish to include?"
12556         . ./myread
12557         case "$ans" in
12558         none) static_ext=' ' ;;
12559         *) static_ext="$ans" ;;
12560         esac
12561         ;;
12562 esac
12563
12564 set X $dynamic_ext $static_ext $nonxs_ext
12565 shift
12566 extensions="$*"
12567
12568 : Remove build directory name from cppstdin so it can be used from
12569 : either the present location or the final installed location.
12570 echo " "
12571 : Get out of the UU directory to get correct path name.
12572 cd ..
12573 case "$cppstdin" in
12574 `pwd`/cppstdin)
12575         echo "Stripping down cppstdin path name"
12576         cppstdin=cppstdin
12577         ;;
12578 esac
12579 cd UU
12580
12581 : end of configuration questions
12582 echo " "
12583 echo "End of configuration questions."
12584 echo " "
12585
12586 : back to where it started
12587 if test -d ../UU; then
12588         cd ..
12589 fi
12590
12591 : configuration may be patched via a 'config.over' file
12592 if $test -f config.over; then
12593         echo " "
12594         dflt=y
12595         rp='I see a config.over file.  Do you wish to load it?'
12596         . UU/myread
12597         case "$ans" in
12598         n*) echo "OK, I'll ignore it.";;
12599         *)      . ./config.over
12600                 echo "Configuration override changes have been loaded."
12601                 ;;
12602         esac
12603 fi
12604
12605 : in case they want portability, strip down executable paths
12606 case "$d_portable" in
12607 "$define")
12608         echo " "
12609         echo "Stripping down executable paths..." >&4
12610         for file in $loclist $trylist; do
12611                 if test X$file != Xln -a X$file != Xar -o X$osname != Xos2; then
12612                         eval $file="\$file"
12613                 fi
12614         done
12615         ;;
12616 esac
12617
12618 : create config.sh file
12619 echo " "
12620 echo "Creating config.sh..." >&4
12621 $spitshell <<EOT >config.sh
12622 $startsh
12623 #
12624 # This file was produced by running the Configure script. It holds all the
12625 # definitions figured out by Configure. Should you modify one of these values,
12626 # do not forget to propagate your changes by running "Configure -der". You may
12627 # instead choose to run each of the .SH files by yourself, or "Configure -S".
12628 #
12629
12630 # Package name      : $package
12631 # Source directory  : $src
12632 # Configuration time: $cf_time
12633 # Configured by     : $cf_by
12634 # Target system     : $myuname
12635
12636 Author='$Author'
12637 Date='$Date'
12638 Header='$Header'
12639 Id='$Id'
12640 Locker='$Locker'
12641 Log='$Log'
12642 Mcc='$Mcc'
12643 RCSfile='$RCSfile'
12644 Revision='$Revision'
12645 Source='$Source'
12646 State='$State'
12647 _a='$_a'
12648 _exe='$_exe'
12649 _o='$_o'
12650 afs='$afs'
12651 alignbytes='$alignbytes'
12652 ansi2knr='$ansi2knr'
12653 aphostname='$aphostname'
12654 apiversion='$apiversion'
12655 ar='$ar'
12656 archlib='$archlib'
12657 archlibexp='$archlibexp'
12658 archname64='$archname64'
12659 archname='$archname'
12660 archobjs='$archobjs'
12661 awk='$awk'
12662 baserev='$baserev'
12663 bash='$bash'
12664 bin='$bin'
12665 binexp='$binexp'
12666 bison='$bison'
12667 byacc='$byacc'
12668 byteorder='$byteorder'
12669 c='$c'
12670 castflags='$castflags'
12671 cat='$cat'
12672 cc='$cc'
12673 cccdlflags='$cccdlflags'
12674 ccdlflags='$ccdlflags'
12675 ccflags='$ccflags'
12676 ccsymbols='$ccsymbols'
12677 cf_by='$cf_by'
12678 cf_email='$cf_email'
12679 cf_time='$cf_time'
12680 chgrp='$chgrp'
12681 chmod='$chmod'
12682 chown='$chown'
12683 clocktype='$clocktype'
12684 comm='$comm'
12685 compress='$compress'
12686 contains='$contains'
12687 cp='$cp'
12688 cpio='$cpio'
12689 cpp='$cpp'
12690 cpp_stuff='$cpp_stuff'
12691 cppccsymbols='$cppccsymbols'
12692 cppflags='$cppflags'
12693 cpplast='$cpplast'
12694 cppminus='$cppminus'
12695 cpprun='$cpprun'
12696 cppstdin='$cppstdin'
12697 cppsymbols='$cppsymbols'
12698 crosscompile='$crosscompile'
12699 cryptlib='$cryptlib'
12700 csh='$csh'
12701 d_Gconvert='$d_Gconvert'
12702 d_access='$d_access'
12703 d_accessx='$d_accessx'
12704 d_alarm='$d_alarm'
12705 d_archlib='$d_archlib'
12706 d_attribut='$d_attribut'
12707 d_bcmp='$d_bcmp'
12708 d_bcopy='$d_bcopy'
12709 d_bsd='$d_bsd'
12710 d_bsdgetpgrp='$d_bsdgetpgrp'
12711 d_bsdsetpgrp='$d_bsdsetpgrp'
12712 d_bzero='$d_bzero'
12713 d_casti32='$d_casti32'
12714 d_castneg='$d_castneg'
12715 d_charvspr='$d_charvspr'
12716 d_chown='$d_chown'
12717 d_chroot='$d_chroot'
12718 d_chsize='$d_chsize'
12719 d_closedir='$d_closedir'
12720 d_cmsghdr_s='$d_cmsghdr_s'
12721 d_const='$d_const'
12722 d_crypt='$d_crypt'
12723 d_csh='$d_csh'
12724 d_cuserid='$d_cuserid'
12725 d_dbl_dig='$d_dbl_dig'
12726 d_dbmclose64='$d_dbmclose64'
12727 d_dbminit64='$d_dbminit64'
12728 d_delete64='$d_delete64'
12729 d_difftime='$d_difftime'
12730 d_dirent64_s='$d_dirent64_s'
12731 d_dirnamlen='$d_dirnamlen'
12732 d_dlerror='$d_dlerror'
12733 d_dlopen='$d_dlopen'
12734 d_dlsymun='$d_dlsymun'
12735 d_dosuid='$d_dosuid'
12736 d_drand48proto='$d_drand48proto'
12737 d_dup2='$d_dup2'
12738 d_eaccess='$d_eaccess'
12739 d_endgrent='$d_endgrent'
12740 d_endhent='$d_endhent'
12741 d_endnent='$d_endnent'
12742 d_endpent='$d_endpent'
12743 d_endpwent='$d_endpwent'
12744 d_endsent='$d_endsent'
12745 d_eofnblk='$d_eofnblk'
12746 d_eunice='$d_eunice'
12747 d_fchmod='$d_fchmod'
12748 d_fchown='$d_fchown'
12749 d_fcntl='$d_fcntl'
12750 d_fd_macros='$d_fd_macros'
12751 d_fd_set='$d_fd_set'
12752 d_fds_bits='$d_fds_bits'
12753 d_fetch64='$d_fetch64'
12754 d_fgetpos64='$d_fgetpos64'
12755 d_fgetpos='$d_fgetpos'
12756 d_firstkey64='$d_firstkey64'
12757 d_flexfnam='$d_flexfnam'
12758 d_flock64_s='$d_flock64_s'
12759 d_flock='$d_flock'
12760 d_fopen64='$d_fopen64'
12761 d_fork='$d_fork'
12762 d_fpathconf='$d_fpathconf'
12763 d_freopen64='$d_freopen64'
12764 d_fseek64='$d_fseek64'
12765 d_fseeko64='$d_fseeko64'
12766 d_fseeko='$d_fseeko'
12767 d_fsetpos64='$d_fsetpos64'
12768 d_fsetpos='$d_fsetpos'
12769 d_fstat64='$d_fstat64'
12770 d_fstatfs='$d_fstatfs'
12771 d_fstatvfs='$d_fstatvfs'
12772 d_ftell64='$d_ftell64'
12773 d_ftello64='$d_ftello64'
12774 d_ftello='$d_ftello'
12775 d_ftime='$d_ftime'
12776 d_ftruncate64='$d_ftruncate64'
12777 d_getgrent='$d_getgrent'
12778 d_getgrps='$d_getgrps'
12779 d_gethbyaddr='$d_gethbyaddr'
12780 d_gethbyname='$d_gethbyname'
12781 d_gethent='$d_gethent'
12782 d_gethname='$d_gethname'
12783 d_gethostprotos='$d_gethostprotos'
12784 d_getlogin='$d_getlogin'
12785 d_getmntent='$d_getmntent'
12786 d_getnbyaddr='$d_getnbyaddr'
12787 d_getnbyname='$d_getnbyname'
12788 d_getnent='$d_getnent'
12789 d_getnetprotos='$d_getnetprotos'
12790 d_getpbyname='$d_getpbyname'
12791 d_getpbynumber='$d_getpbynumber'
12792 d_getpent='$d_getpent'
12793 d_getpgid='$d_getpgid'
12794 d_getpgrp2='$d_getpgrp2'
12795 d_getpgrp='$d_getpgrp'
12796 d_getppid='$d_getppid'
12797 d_getprior='$d_getprior'
12798 d_getprotoprotos='$d_getprotoprotos'
12799 d_getpwent='$d_getpwent'
12800 d_getsbyname='$d_getsbyname'
12801 d_getsbyport='$d_getsbyport'
12802 d_getsent='$d_getsent'
12803 d_getservprotos='$d_getservprotos'
12804 d_gettimeod='$d_gettimeod'
12805 d_gnulibc='$d_gnulibc'
12806 d_grpasswd='$d_grpasswd'
12807 d_hasmntopt='$d_hasmntopt'
12808 d_htonl='$d_htonl'
12809 d_index='$d_index'
12810 d_inetaton='$d_inetaton'
12811 d_ino64_t='$d_ino64_t'
12812 d_int64t='$d_int64t'
12813 d_iovec_s='$d_iovec_s'
12814 d_isascii='$d_isascii'
12815 d_killpg='$d_killpg'
12816 d_lchown='$d_lchown'
12817 d_link='$d_link'
12818 d_llseek='$d_llseek'
12819 d_locconv='$d_locconv'
12820 d_lockf64='$d_lockf64'
12821 d_lockf='$d_lockf'
12822 d_longdbl='$d_longdbl'
12823 d_longlong='$d_longlong'
12824 d_lseek64='$d_lseek64'
12825 d_lstat64='$d_lstat64'
12826 d_lstat='$d_lstat'
12827 d_madvise='$d_madvise'
12828 d_mblen='$d_mblen'
12829 d_mbstowcs='$d_mbstowcs'
12830 d_mbtowc='$d_mbtowc'
12831 d_memcmp='$d_memcmp'
12832 d_memcpy='$d_memcpy'
12833 d_memmove='$d_memmove'
12834 d_memset='$d_memset'
12835 d_mkdir='$d_mkdir'
12836 d_mkfifo='$d_mkfifo'
12837 d_mktime='$d_mktime'
12838 d_mmap='$d_mmap'
12839 d_mprotect='$d_mprotect'
12840 d_msg='$d_msg'
12841 d_msg_ctrunc='$d_msg_ctrunc'
12842 d_msg_dontroute='$d_msg_dontroute'
12843 d_msg_oob='$d_msg_oob'
12844 d_msg_peek='$d_msg_peek'
12845 d_msg_proxy='$d_msg_proxy'
12846 d_msgctl='$d_msgctl'
12847 d_msgget='$d_msgget'
12848 d_msghdr_s='$d_msghdr_s'
12849 d_msgrcv='$d_msgrcv'
12850 d_msgsnd='$d_msgsnd'
12851 d_msync='$d_msync'
12852 d_munmap='$d_munmap'
12853 d_mymalloc='$d_mymalloc'
12854 d_nextkey64='$d_nextkey64'
12855 d_nice='$d_nice'
12856 d_off64_t='$d_off64_t'
12857 d_offset_t='$d_offset_t'
12858 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
12859 d_oldpthreads='$d_oldpthreads'
12860 d_oldsock='$d_oldsock'
12861 d_open3='$d_open3'
12862 d_open64='$d_open64'
12863 d_opendir64='$d_opendir64'
12864 d_pathconf='$d_pathconf'
12865 d_pause='$d_pause'
12866 d_phostname='$d_phostname'
12867 d_pipe='$d_pipe'
12868 d_poll='$d_poll'
12869 d_portable='$d_portable'
12870 d_pthread_yield='$d_pthread_yield'
12871 d_pwage='$d_pwage'
12872 d_pwchange='$d_pwchange'
12873 d_pwclass='$d_pwclass'
12874 d_pwcomment='$d_pwcomment'
12875 d_pwexpire='$d_pwexpire'
12876 d_pwgecos='$d_pwgecos'
12877 d_pwpasswd='$d_pwpasswd'
12878 d_pwquota='$d_pwquota'
12879 d_readdir64='$d_readdir64'
12880 d_readdir='$d_readdir'
12881 d_readlink='$d_readlink'
12882 d_readv='$d_readv'
12883 d_recvmsg='$d_recvmsg'
12884 d_rename='$d_rename'
12885 d_rewinddir='$d_rewinddir'
12886 d_rmdir='$d_rmdir'
12887 d_safebcpy='$d_safebcpy'
12888 d_safemcpy='$d_safemcpy'
12889 d_sanemcmp='$d_sanemcmp'
12890 d_sched_yield='$d_sched_yield'
12891 d_scm_rights='$d_scm_rights'
12892 d_seekdir64='$d_seekdir64'
12893 d_seekdir='$d_seekdir'
12894 d_select='$d_select'
12895 d_sem='$d_sem'
12896 d_semctl='$d_semctl'
12897 d_semctl_semid_ds='$d_semctl_semid_ds'
12898 d_semctl_semun='$d_semctl_semun'
12899 d_semget='$d_semget'
12900 d_semop='$d_semop'
12901 d_sendmsg='$d_sendmsg'
12902 d_setegid='$d_setegid'
12903 d_seteuid='$d_seteuid'
12904 d_setgrent='$d_setgrent'
12905 d_setgrps='$d_setgrps'
12906 d_sethent='$d_sethent'
12907 d_setlinebuf='$d_setlinebuf'
12908 d_setlocale='$d_setlocale'
12909 d_setnent='$d_setnent'
12910 d_setpent='$d_setpent'
12911 d_setpgid='$d_setpgid'
12912 d_setpgrp2='$d_setpgrp2'
12913 d_setpgrp='$d_setpgrp'
12914 d_setprior='$d_setprior'
12915 d_setpwent='$d_setpwent'
12916 d_setregid='$d_setregid'
12917 d_setresgid='$d_setresgid'
12918 d_setresuid='$d_setresuid'
12919 d_setreuid='$d_setreuid'
12920 d_setrgid='$d_setrgid'
12921 d_setruid='$d_setruid'
12922 d_setsent='$d_setsent'
12923 d_setsid='$d_setsid'
12924 d_setvbuf='$d_setvbuf'
12925 d_sfio='$d_sfio'
12926 d_shm='$d_shm'
12927 d_shmat='$d_shmat'
12928 d_shmatprototype='$d_shmatprototype'
12929 d_shmctl='$d_shmctl'
12930 d_shmdt='$d_shmdt'
12931 d_shmget='$d_shmget'
12932 d_sigaction='$d_sigaction'
12933 d_sigsetjmp='$d_sigsetjmp'
12934 d_socket='$d_socket'
12935 d_sockpair='$d_sockpair'
12936 d_stat64='$d_stat64'
12937 d_statblks='$d_statblks'
12938 d_statfs='$d_statfs'
12939 d_statfsflags='$d_statfsflags'
12940 d_statvfs='$d_statvfs'
12941 d_stdio_cnt_lval='$d_stdio_cnt_lval'
12942 d_stdio_ptr_lval='$d_stdio_ptr_lval'
12943 d_stdiobase='$d_stdiobase'
12944 d_stdstdio='$d_stdstdio'
12945 d_store64='$d_store64'
12946 d_strchr='$d_strchr'
12947 d_strcoll='$d_strcoll'
12948 d_strctcpy='$d_strctcpy'
12949 d_strerrm='$d_strerrm'
12950 d_strerror='$d_strerror'
12951 d_strtod='$d_strtod'
12952 d_strtol='$d_strtol'
12953 d_strtoul='$d_strtoul'
12954 d_strxfrm='$d_strxfrm'
12955 d_suidsafe='$d_suidsafe'
12956 d_symlink='$d_symlink'
12957 d_syscall='$d_syscall'
12958 d_sysconf='$d_sysconf'
12959 d_sysernlst='$d_sysernlst'
12960 d_syserrlst='$d_syserrlst'
12961 d_system='$d_system'
12962 d_tcgetpgrp='$d_tcgetpgrp'
12963 d_tcsetpgrp='$d_tcsetpgrp'
12964 d_telldir64='$d_telldir64'
12965 d_telldir='$d_telldir'
12966 d_telldirproto='$d_telldirproto'
12967 d_time='$d_time'
12968 d_times='$d_times'
12969 d_tmpfile64='$d_tmpfile64'
12970 d_truncate64='$d_truncate64'
12971 d_truncate='$d_truncate'
12972 d_tzname='$d_tzname'
12973 d_umask='$d_umask'
12974 d_uname='$d_uname'
12975 d_union_semun='$d_union_semun'
12976 d_vfork='$d_vfork'
12977 d_void_closedir='$d_void_closedir'
12978 d_voidsig='$d_voidsig'
12979 d_voidtty='$d_voidtty'
12980 d_volatile='$d_volatile'
12981 d_vprintf='$d_vprintf'
12982 d_wait4='$d_wait4'
12983 d_waitpid='$d_waitpid'
12984 d_wcstombs='$d_wcstombs'
12985 d_wctomb='$d_wctomb'
12986 d_writev='$d_writev'
12987 d_xenix='$d_xenix'
12988 date='$date'
12989 db_hashtype='$db_hashtype'
12990 db_prefixtype='$db_prefixtype'
12991 defvoidused='$defvoidused'
12992 direntrytype='$direntrytype'
12993 dlext='$dlext'
12994 dlsrc='$dlsrc'
12995 doublesize='$doublesize'
12996 drand01='$drand01'
12997 dynamic_ext='$dynamic_ext'
12998 eagain='$eagain'
12999 ebcdic='$ebcdic'
13000 echo='$echo'
13001 egrep='$egrep'
13002 emacs='$emacs'
13003 eunicefix='$eunicefix'
13004 exe_ext='$exe_ext'
13005 expr='$expr'
13006 extensions='$extensions'
13007 find='$find'
13008 firstmakefile='$firstmakefile'
13009 flex='$flex'
13010 fpostype='$fpostype'
13011 freetype='$freetype'
13012 full_ar='$full_ar'
13013 full_csh='$full_csh'
13014 full_sed='$full_sed'
13015 gccversion='$gccversion'
13016 gidtype='$gidtype'
13017 glibpth='$glibpth'
13018 grep='$grep'
13019 groupcat='$groupcat'
13020 groupstype='$groupstype'
13021 gzip='$gzip'
13022 h_fcntl='$h_fcntl'
13023 h_sysfile='$h_sysfile'
13024 hint='$hint'
13025 hostcat='$hostcat'
13026 huge='$huge'
13027 i_arpainet='$i_arpainet'
13028 i_bsdioctl='$i_bsdioctl'
13029 i_db='$i_db'
13030 i_dbm='$i_dbm'
13031 i_dirent='$i_dirent'
13032 i_dld='$i_dld'
13033 i_dlfcn='$i_dlfcn'
13034 i_fcntl='$i_fcntl'
13035 i_float='$i_float'
13036 i_gdbm='$i_gdbm'
13037 i_grp='$i_grp'
13038 i_inttypes='$i_inttypes'
13039 i_limits='$i_limits'
13040 i_locale='$i_locale'
13041 i_machcthr='$i_machcthr'
13042 i_malloc='$i_malloc'
13043 i_math='$i_math'
13044 i_memory='$i_memory'
13045 i_mntent='$i_mntent'
13046 i_ndbm='$i_ndbm'
13047 i_netdb='$i_netdb'
13048 i_neterrno='$i_neterrno'
13049 i_netinettcp='$i_netinettcp'
13050 i_niin='$i_niin'
13051 i_poll='$i_poll'
13052 i_pthread='$i_pthread'
13053 i_pwd='$i_pwd'
13054 i_rpcsvcdbm='$i_rpcsvcdbm'
13055 i_sfio='$i_sfio'
13056 i_sgtty='$i_sgtty'
13057 i_stdarg='$i_stdarg'
13058 i_stddef='$i_stddef'
13059 i_stdlib='$i_stdlib'
13060 i_string='$i_string'
13061 i_sysaccess='$i_sysaccess'
13062 i_sysdir='$i_sysdir'
13063 i_sysfile='$i_sysfile'
13064 i_sysfilio='$i_sysfilio'
13065 i_sysin='$i_sysin'
13066 i_sysioctl='$i_sysioctl'
13067 i_sysmman='$i_sysmman'
13068 i_sysmount='$i_sysmount'
13069 i_sysndir='$i_sysndir'
13070 i_sysparam='$i_sysparam'
13071 i_sysresrc='$i_sysresrc'
13072 i_syssecrt='$i_syssecrt'
13073 i_sysselct='$i_sysselct'
13074 i_syssockio='$i_syssockio'
13075 i_sysstat='$i_sysstat'
13076 i_sysstatvfs='$i_sysstatvfs'
13077 i_systime='$i_systime'
13078 i_systimek='$i_systimek'
13079 i_systimes='$i_systimes'
13080 i_systypes='$i_systypes'
13081 i_sysuio='$i_sysuio'
13082 i_sysun='$i_sysun'
13083 i_syswait='$i_syswait'
13084 i_termio='$i_termio'
13085 i_termios='$i_termios'
13086 i_time='$i_time'
13087 i_unistd='$i_unistd'
13088 i_utime='$i_utime'
13089 i_values='$i_values'
13090 i_varargs='$i_varargs'
13091 i_varhdr='$i_varhdr'
13092 i_vfork='$i_vfork'
13093 ignore_versioned_solibs='$ignore_versioned_solibs'
13094 incpath='$incpath'
13095 inews='$inews'
13096 installarchlib='$installarchlib'
13097 installbin='$installbin'
13098 installman1dir='$installman1dir'
13099 installman3dir='$installman3dir'
13100 installprivlib='$installprivlib'
13101 installscript='$installscript'
13102 installsitearch='$installsitearch'
13103 installsitelib='$installsitelib'
13104 installusrbinperl='$installusrbinperl'
13105 intsize='$intsize'
13106 known_extensions='$known_extensions'
13107 ksh='$ksh'
13108 large='$large'
13109 ld='$ld'
13110 lddlflags='$lddlflags'
13111 ldflags='$ldflags'
13112 less='$less'
13113 lib_ext='$lib_ext'
13114 libc='$libc'
13115 libperl='$libperl'
13116 libpth='$libpth'
13117 libs='$libs'
13118 libswanted='$libswanted'
13119 line='$line'
13120 lint='$lint'
13121 lkflags='$lkflags'
13122 ln='$ln'
13123 lns='$lns'
13124 locincpth='$locincpth'
13125 loclibpth='$loclibpth'
13126 longdblsize='$longdblsize'
13127 longlongsize='$longlongsize'
13128 longsize='$longsize'
13129 lp='$lp'
13130 lpr='$lpr'
13131 ls='$ls'
13132 lseeksize='$lseeksize'
13133 lseektype='$lseektype'
13134 mail='$mail'
13135 mailx='$mailx'
13136 make='$make'
13137 make_set_make='$make_set_make'
13138 mallocobj='$mallocobj'
13139 mallocsrc='$mallocsrc'
13140 malloctype='$malloctype'
13141 man1dir='$man1dir'
13142 man1direxp='$man1direxp'
13143 man1ext='$man1ext'
13144 man3dir='$man3dir'
13145 man3direxp='$man3direxp'
13146 man3ext='$man3ext'
13147 medium='$medium'
13148 mips='$mips'
13149 mips_type='$mips_type'
13150 mkdir='$mkdir'
13151 mmaptype='$mmaptype'
13152 models='$models'
13153 modetype='$modetype'
13154 more='$more'
13155 multiarch='$multiarch'
13156 mv='$mv'
13157 myarchname='$myarchname'
13158 mydomain='$mydomain'
13159 myhostname='$myhostname'
13160 myuname='$myuname'
13161 n='$n'
13162 netdb_hlen_type='$netdb_hlen_type'
13163 netdb_host_type='$netdb_host_type'
13164 netdb_name_type='$netdb_name_type'
13165 netdb_net_type='$netdb_net_type'
13166 nm='$nm'
13167 nm_opt='$nm_opt'
13168 nm_so_opt='$nm_so_opt'
13169 nonxs_ext='$nonxs_ext'
13170 nroff='$nroff'
13171 o_nonblock='$o_nonblock'
13172 obj_ext='$obj_ext'
13173 old_pthread_create_joinable='$old_pthread_create_joinable'
13174 optimize='$optimize'
13175 orderlib='$orderlib'
13176 osname='$osname'
13177 osvers='$osvers'
13178 package='$package'
13179 pager='$pager'
13180 passcat='$passcat'
13181 patchlevel='$patchlevel'
13182 path_sep='$path_sep'
13183 perl='$perl'
13184 perladmin='$perladmin'
13185 perlpath='$perlpath'
13186 pg='$pg'
13187 phostname='$phostname'
13188 pidtype='$pidtype'
13189 plibpth='$plibpth'
13190 pmake='$pmake'
13191 pr='$pr'
13192 prefix='$prefix'
13193 prefixexp='$prefixexp'
13194 privlib='$privlib'
13195 privlibexp='$privlibexp'
13196 prototype='$prototype'
13197 ptrsize='$ptrsize'
13198 randbits='$randbits'
13199 randfunc='$randfunc'
13200 randseedtype='$randseedtype'
13201 ranlib='$ranlib'
13202 rd_nodata='$rd_nodata'
13203 rm='$rm'
13204 rmail='$rmail'
13205 runnm='$runnm'
13206 sched_yield='$sched_yield'
13207 scriptdir='$scriptdir'
13208 scriptdirexp='$scriptdirexp'
13209 sed='$sed'
13210 seedfunc='$seedfunc'
13211 selectminbits='$selectminbits'
13212 selecttype='$selecttype'
13213 sendmail='$sendmail'
13214 sh='$sh'
13215 shar='$shar'
13216 sharpbang='$sharpbang'
13217 shmattype='$shmattype'
13218 shortsize='$shortsize'
13219 shrpenv='$shrpenv'
13220 shsharp='$shsharp'
13221 sig_count='$sig_count'
13222 sig_name='$sig_name'
13223 sig_name_init='$sig_name_init'
13224 sig_num='$sig_num'
13225 sig_num_init='$sig_num_init'
13226 signal_t='$signal_t'
13227 sitearch='$sitearch'
13228 sitearchexp='$sitearchexp'
13229 sitelib='$sitelib'
13230 sitelibexp='$sitelibexp'
13231 sizetype='$sizetype'
13232 sleep='$sleep'
13233 smail='$smail'
13234 small='$small'
13235 so='$so'
13236 sockethdr='$sockethdr'
13237 socketlib='$socketlib'
13238 sort='$sort'
13239 spackage='$spackage'
13240 spitshell='$spitshell'
13241 split='$split'
13242 src='$src'
13243 ssizetype='$ssizetype'
13244 startperl='$startperl'
13245 startsh='$startsh'
13246 static_ext='$static_ext'
13247 stdchar='$stdchar'
13248 stdio_base='$stdio_base'
13249 stdio_bufsiz='$stdio_bufsiz'
13250 stdio_cnt='$stdio_cnt'
13251 stdio_filbuf='$stdio_filbuf'
13252 stdio_ptr='$stdio_ptr'
13253 strings='$strings'
13254 submit='$submit'
13255 subversion='$subversion'
13256 sysman='$sysman'
13257 tail='$tail'
13258 tar='$tar'
13259 tbl='$tbl'
13260 tee='$tee'
13261 test='$test'
13262 timeincl='$timeincl'
13263 timetype='$timetype'
13264 touch='$touch'
13265 tr='$tr'
13266 trnl='$trnl'
13267 troff='$troff'
13268 uidtype='$uidtype'
13269 uname='$uname'
13270 uniq='$uniq'
13271 use64bits='$use64bits'
13272 usedl='$usedl'
13273 usemultiplicity='$usemultiplicity'
13274 usemymalloc='$usemymalloc'
13275 usenm='$usenm'
13276 useopcode='$useopcode'
13277 useperlio='$useperlio'
13278 useposix='$useposix'
13279 usesfio='$usesfio'
13280 useshrplib='$useshrplib'
13281 usethreads='$usethreads'
13282 usevfork='$usevfork'
13283 usrinc='$usrinc'
13284 uuname='$uuname'
13285 version='$version'
13286 vi='$vi'
13287 voidflags='$voidflags'
13288 xlibpth='$xlibpth'
13289 zcat='$zcat'
13290 zip='$zip'
13291 EOT
13292
13293 : Add in command line options if available
13294 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
13295
13296 : add special variables
13297 $test -f $src/patchlevel.h && \
13298 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
13299 echo "CONFIGDOTSH=true" >>config.sh
13300
13301 : propagate old symbols
13302 if $test -f UU/config.sh; then
13303         <UU/config.sh sort | uniq >UU/oldconfig.sh
13304         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
13305         sort | uniq -u >UU/oldsyms
13306         set X `cat UU/oldsyms`
13307         shift
13308         case $# in
13309         0) ;;
13310         *)
13311                 cat <<EOM
13312 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
13313 EOM
13314                 echo "# Variables propagated from previous config.sh file." >>config.sh
13315                 for sym in `cat UU/oldsyms`; do
13316                         echo "    Propagating $hint variable "'$'"$sym..."
13317                         eval 'tmp="$'"${sym}"'"'
13318                         echo "$tmp" | \
13319                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
13320                 done
13321                 ;;
13322         esac
13323 fi
13324
13325 : Finish up by extracting the .SH files
13326 case "$alldone" in
13327 exit)
13328         $rm -rf UU
13329         echo "Done."
13330         exit 0
13331         ;;
13332 cont)
13333         ;;
13334 '')
13335         dflt=''
13336         nostick=true
13337         $cat <<EOM
13338
13339 If you'd like to make any changes to the config.sh file before I begin
13340 to configure things, do it as a shell escape now (e.g. !vi config.sh).
13341
13342 EOM
13343         rp="Press return or use a shell escape to edit config.sh:"
13344         . UU/myread
13345         nostick=''
13346         case "$ans" in
13347         '') ;;
13348         *) : in case they cannot read
13349                 sh 1>&4 -c "$ans";;
13350         esac
13351         ;;
13352 esac
13353
13354 : if this fails, just run all the .SH files by hand
13355 . ./config.sh
13356
13357 echo " "
13358 exec 1>&4
13359 . ./UU/extract
13360
13361 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
13362         dflt=y
13363         case "$silent" in
13364         true) ;;
13365         *)
13366                 $cat <<EOM
13367
13368 Now you need to generate make dependencies by running "$make depend".
13369 You might prefer to run it in background: "$make depend > makedepend.out &"
13370 It can take a while, so you might not want to run it right now.
13371
13372 EOM
13373                 ;;
13374         esac
13375         rp="Run $make depend now?"
13376         . UU/myread
13377         case "$ans" in
13378         y*)
13379                 $make depend && echo "Now you must run a $make."
13380                 ;;
13381         *)
13382                 echo "You must run '$make depend' then '$make'."
13383                 ;;
13384         esac
13385 elif test -f [Mm]akefile; then
13386         echo " "
13387         echo "Now you must run a $make."
13388 else
13389         echo "Done."
13390 fi
13391
13392 if $test -f Policy.sh; then
13393     $cat <<EOM
13394
13395 If you compile $package on a different machine or from a different object
13396 directory, copy the Policy.sh file from this object directory to the
13397 new one before you run Configure -- this will help you with most of
13398 the policy defaults.
13399
13400 EOM
13401 fi
13402 if $test -f config.msg; then
13403     echo "Hmm.  I also noted the following information while running:"
13404     echo " "
13405     $cat config.msg >&4
13406     $rm -f config.msg
13407 fi
13408 $rm -f kit*isdone ark*isdone
13409 $rm -rf UU
13410
13411 : End of Configure
13412