integrate cfgperl changes into mainline
[p5sagit/p5-mst-13.2.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Sun Mar  5 23:53:58 EET 2000 [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 d_atolf=''
282 d_atoll=''
283 baserev=''
284 bin=''
285 binexp=''
286 installbin=''
287 bincompat5005=''
288 d_bincompat5005=''
289 byteorder=''
290 cc=''
291 gccversion=''
292 ccflags=''
293 cppflags=''
294 ldflags=''
295 lkflags=''
296 locincpth=''
297 optimize=''
298 cf_email=''
299 cf_by=''
300 cf_time=''
301 charsize=''
302 contains=''
303 cpp_stuff=''
304 cpplast=''
305 cppminus=''
306 cpprun=''
307 cppstdin=''
308 crosscompile=''
309 d_access=''
310 d_accessx=''
311 d_alarm=''
312 d_attribut=''
313 d_bcmp=''
314 d_bcopy=''
315 d_bzero=''
316 d_casti32=''
317 castflags=''
318 d_castneg=''
319 d_chown=''
320 d_chroot=''
321 d_chsize=''
322 d_closedir=''
323 d_void_closedir=''
324 d_const=''
325 cryptlib=''
326 d_crypt=''
327 d_csh=''
328 full_csh=''
329 d_cuserid=''
330 d_dbl_dig=''
331 d_difftime=''
332 d_dlerror=''
333 d_dlopen=''
334 d_dlsymun=''
335 d_dosuid=''
336 d_suidsafe=''
337 d_drand48proto=''
338 d_dup2=''
339 d_eaccess=''
340 d_endgrent=''
341 d_endhent=''
342 d_endnent=''
343 d_endpent=''
344 d_endpwent=''
345 d_endsent=''
346 d_endspent=''
347 d_fchmod=''
348 d_fchown=''
349 d_fcntl=''
350 d_fd_macros=''
351 d_fd_set=''
352 d_fds_bits=''
353 d_fgetpos=''
354 d_flexfnam=''
355 d_flock=''
356 d_fork=''
357 d_fpos64_t=''
358 d_fs_data_s=''
359 d_fseeko=''
360 d_fsetpos=''
361 d_fstatfs=''
362 d_ftello=''
363 d_ftime=''
364 d_gettimeod=''
365 d_Gconvert=''
366 d_getcwd=''
367 d_getfsstat=''
368 d_getgrent=''
369 d_getgrps=''
370 d_gethbyaddr=''
371 d_gethbyname=''
372 d_gethent=''
373 aphostname=''
374 d_gethname=''
375 d_phostname=''
376 d_uname=''
377 d_gethostprotos=''
378 d_getlogin=''
379 d_getmnt=''
380 d_getmntent=''
381 d_getnbyaddr=''
382 d_getnbyname=''
383 d_getnent=''
384 d_getnetprotos=''
385 d_getpent=''
386 d_getpgid=''
387 d_getpgrp2=''
388 d_bsdgetpgrp=''
389 d_getpgrp=''
390 d_getppid=''
391 d_getprior=''
392 d_getpbyname=''
393 d_getpbynumber=''
394 d_getprotoprotos=''
395 d_getpwent=''
396 d_getsent=''
397 d_getservprotos=''
398 d_getspent=''
399 d_getspnam=''
400 d_getsbyname=''
401 d_getsbyport=''
402 d_gnulibc=''
403 d_hasmntopt=''
404 d_htonl=''
405 d_iconv=''
406 d_inetaton=''
407 d_int64_t=''
408 d_isascii=''
409 d_killpg=''
410 d_lchown=''
411 d_ldbl_dig=''
412 d_link=''
413 d_locconv=''
414 d_lockf=''
415 d_longdbl=''
416 longdblsize=''
417 d_longlong=''
418 longlongsize=''
419 d_lseekproto=''
420 d_lstat=''
421 d_madvise=''
422 d_mblen=''
423 d_mbstowcs=''
424 d_mbtowc=''
425 d_memchr=''
426 d_memcmp=''
427 d_memcpy=''
428 d_memmove=''
429 d_memset=''
430 d_mkdir=''
431 d_mkdtemp=''
432 d_mkfifo=''
433 d_mkstemp=''
434 d_mkstemps=''
435 d_mktime=''
436 d_mmap=''
437 mmaptype=''
438 d_mprotect=''
439 d_msg=''
440 d_msgctl=''
441 d_msgget=''
442 d_msgrcv=''
443 d_msgsnd=''
444 d_msync=''
445 d_munmap=''
446 d_nice=''
447 d_off64_t=''
448 d_open3=''
449 d_fpathconf=''
450 d_pathconf=''
451 d_pause=''
452 d_pipe=''
453 d_poll=''
454 d_portable=''
455 d_old_pthread_create_joinable=''
456 old_pthread_create_joinable=''
457 d_pthread_yield=''
458 d_sched_yield=''
459 sched_yield=''
460 d_qgcvt=''
461 d_readdir=''
462 d_rewinddir=''
463 d_seekdir=''
464 d_telldir=''
465 d_readlink=''
466 d_rename=''
467 d_rmdir=''
468 d_safebcpy=''
469 d_safemcpy=''
470 d_sanemcmp=''
471 d_select=''
472 d_sem=''
473 d_semctl=''
474 d_semget=''
475 d_semop=''
476 d_setegid=''
477 d_seteuid=''
478 d_setgrent=''
479 d_setgrps=''
480 d_sethent=''
481 d_setlinebuf=''
482 d_setlocale=''
483 d_setnent=''
484 d_setpent=''
485 d_setpgid=''
486 d_setpgrp2=''
487 d_bsdsetpgrp=''
488 d_setpgrp=''
489 d_setprior=''
490 d_setpwent=''
491 d_setregid=''
492 d_setresgid=''
493 d_setresuid=''
494 d_setreuid=''
495 d_setrgid=''
496 d_setruid=''
497 d_setsent=''
498 d_setsid=''
499 d_setspent=''
500 d_setvbuf=''
501 d_sfio=''
502 usesfio=''
503 d_shm=''
504 d_shmat=''
505 d_shmatprototype=''
506 shmattype=''
507 d_shmctl=''
508 d_shmdt=''
509 d_shmget=''
510 d_sigaction=''
511 d_sigsetjmp=''
512 d_msg_ctrunc=''
513 d_msg_dontroute=''
514 d_msg_oob=''
515 d_msg_peek=''
516 d_msg_proxy=''
517 d_oldsock=''
518 d_scm_rights=''
519 d_socket=''
520 d_sockpair=''
521 sockethdr=''
522 socketlib=''
523 d_socklen_t=''
524 d_sqrtl=''
525 d_statblks=''
526 d_statfs_f_flags=''
527 d_statfs_s=''
528 d_fstatvfs=''
529 d_statvfs=''
530 d_stdio_cnt_lval=''
531 d_stdio_ptr_lval=''
532 d_stdiobase=''
533 d_stdstdio=''
534 stdio_base=''
535 stdio_bufsiz=''
536 stdio_cnt=''
537 stdio_filbuf=''
538 stdio_ptr=''
539 d_index=''
540 d_strchr=''
541 d_strcoll=''
542 d_strctcpy=''
543 d_strerrm=''
544 d_strerror=''
545 d_sysernlst=''
546 d_syserrlst=''
547 d_strtod=''
548 d_strtol=''
549 d_strtold=''
550 d_strtoll=''
551 d_strtoul=''
552 d_strtoull=''
553 d_strtouq=''
554 d_strxfrm=''
555 d_symlink=''
556 d_syscall=''
557 d_sysconf=''
558 d_system=''
559 d_tcgetpgrp=''
560 d_tcsetpgrp=''
561 d_telldirproto=''
562 d_time=''
563 timetype=''
564 clocktype=''
565 d_times=''
566 d_truncate=''
567 d_tzname=''
568 d_umask=''
569 d_semctl_semid_ds=''
570 d_semctl_semun=''
571 d_union_semun=''
572 d_ustat=''
573 d_vfork=''
574 usevfork=''
575 d_voidsig=''
576 signal_t=''
577 d_volatile=''
578 d_charvspr=''
579 d_vprintf=''
580 d_wait4=''
581 d_waitpid=''
582 d_wcstombs=''
583 d_wctomb=''
584 dlext=''
585 cccdlflags=''
586 ccdlflags=''
587 dlsrc=''
588 ld=''
589 lddlflags=''
590 usedl=''
591 doublesize=''
592 ebcdic=''
593 fflushNULL=''
594 fflushall=''
595 fpossize=''
596 fpostype=''
597 gidformat=''
598 gidsign=''
599 gidsize=''
600 gidtype=''
601 groupstype=''
602 h_fcntl=''
603 h_sysfile=''
604 i_arpainet=''
605 db_hashtype=''
606 db_prefixtype=''
607 i_db=''
608 i_dbm=''
609 i_rpcsvcdbm=''
610 d_dirnamlen=''
611 direntrytype=''
612 i_dirent=''
613 i_dld=''
614 i_dlfcn=''
615 i_fcntl=''
616 i_float=''
617 i_gdbm=''
618 d_grpasswd=''
619 i_grp=''
620 i_iconv=''
621 i_ieeefp=''
622 i_inttypes=''
623 i_limits=''
624 i_locale=''
625 i_machcthr=''
626 i_malloc=''
627 i_math=''
628 i_memory=''
629 i_mntent=''
630 i_ndbm=''
631 i_netdb=''
632 i_neterrno=''
633 i_netinettcp=''
634 i_niin=''
635 i_sysin=''
636 i_poll=''
637 i_pthread=''
638 d_pwage=''
639 d_pwchange=''
640 d_pwclass=''
641 d_pwcomment=''
642 d_pwexpire=''
643 d_pwgecos=''
644 d_pwpasswd=''
645 d_pwquota=''
646 i_pwd=''
647 i_sfio=''
648 i_shadow=''
649 i_socks=''
650 i_stddef=''
651 i_stdlib=''
652 i_string=''
653 strings=''
654 i_sunmath=''
655 i_sysaccess=''
656 i_sysdir=''
657 i_sysfile=''
658 d_voidtty=''
659 i_bsdioctl=''
660 i_sysfilio=''
661 i_sysioctl=''
662 i_syssockio=''
663 i_syslog=''
664 i_sysmman=''
665 i_sysmode=''
666 i_sysmount=''
667 i_sysndir=''
668 i_sysparam=''
669 i_sysresrc=''
670 i_syssecrt=''
671 i_sysselct=''
672 i_sysstat=''
673 i_sysstatfs=''
674 i_sysstatvfs=''
675 i_systimes=''
676 i_systypes=''
677 i_sysuio=''
678 i_sysun=''
679 i_sysutsname=''
680 i_sysvfs=''
681 i_syswait=''
682 i_sgtty=''
683 i_termio=''
684 i_termios=''
685 i_systime=''
686 i_systimek=''
687 i_time=''
688 timeincl=''
689 i_unistd=''
690 i_ustat=''
691 i_utime=''
692 i_values=''
693 i_stdarg=''
694 i_varargs=''
695 i_varhdr=''
696 i_vfork=''
697 inc_version_list=''
698 inc_version_list_init=''
699 installprefix=''
700 installprefixexp=''
701 installstyle=''
702 installusrbinperl=''
703 intsize=''
704 longsize=''
705 shortsize=''
706 libc=''
707 ldlibpthname=''
708 libperl=''
709 shrpenv=''
710 useshrplib=''
711 glibpth=''
712 libpth=''
713 loclibpth=''
714 plibpth=''
715 xlibpth=''
716 ignore_versioned_solibs=''
717 libs=''
718 libsdirs=''
719 libsfiles=''
720 libsfound=''
721 libspath=''
722 lns=''
723 d_PRIEldbl=''
724 d_PRIFldbl=''
725 d_PRIGldbl=''
726 d_PRIeldbl=''
727 d_PRIfldbl=''
728 d_PRIgldbl=''
729 sPRIEldbl=''
730 sPRIFldbl=''
731 sPRIGldbl=''
732 sPRIeldbl=''
733 sPRIfldbl=''
734 sPRIgldbl=''
735 lseeksize=''
736 lseektype=''
737 make_set_make=''
738 d_mymalloc=''
739 freetype=''
740 mallocobj=''
741 mallocsrc=''
742 malloctype=''
743 usemymalloc=''
744 installman1dir=''
745 man1dir=''
746 man1direxp=''
747 man1ext=''
748 installman3dir=''
749 man3dir=''
750 man3direxp=''
751 man3ext=''
752 huge=''
753 large=''
754 medium=''
755 models=''
756 small=''
757 split=''
758 modetype=''
759 multiarch=''
760 mydomain=''
761 myhostname=''
762 phostname=''
763 c=''
764 n=''
765 d_eofnblk=''
766 eagain=''
767 o_nonblock=''
768 rd_nodata=''
769 netdb_hlen_type=''
770 netdb_host_type=''
771 netdb_name_type=''
772 netdb_net_type=''
773 groupcat=''
774 hostcat=''
775 passcat=''
776 orderlib=''
777 ranlib=''
778 package=''
779 spackage=''
780 pager=''
781 api_revision=''
782 api_subversion=''
783 api_version=''
784 api_versionstring=''
785 patchlevel=''
786 revision=''
787 subversion=''
788 version=''
789 perl5=''
790 perladmin=''
791 perlpath=''
792 d_nv_preserves_uv=''
793 i16size=''
794 i16type=''
795 i32size=''
796 i32type=''
797 i64size=''
798 i64type=''
799 i8size=''
800 i8type=''
801 ivsize=''
802 ivtype=''
803 nvsize=''
804 nvtype=''
805 u16size=''
806 u16type=''
807 u32size=''
808 u32type=''
809 u64size=''
810 u64type=''
811 u8size=''
812 u8type=''
813 uvsize=''
814 uvtype=''
815 ivdformat=''
816 uvoformat=''
817 uvuformat=''
818 uvxformat=''
819 pidtype=''
820 prefix=''
821 prefixexp=''
822 installprivlib=''
823 privlib=''
824 privlibexp=''
825 prototype=''
826 ptrsize=''
827 d_PRIX64=''
828 d_PRId64=''
829 d_PRIi64=''
830 d_PRIo64=''
831 d_PRIu64=''
832 d_PRIx64=''
833 sPRIX64=''
834 sPRId64=''
835 sPRIi64=''
836 sPRIo64=''
837 sPRIu64=''
838 sPRIx64=''
839 d_quad=''
840 quadkind=''
841 quadtype=''
842 uquadtype=''
843 drand01=''
844 randbits=''
845 randfunc=''
846 randseedtype=''
847 seedfunc=''
848 installscript=''
849 scriptdir=''
850 scriptdirexp=''
851 selectminbits=''
852 selecttype=''
853 sh=''
854 sig_count=''
855 sig_name=''
856 sig_name_init=''
857 sig_num=''
858 sig_num_init=''
859 installsitearch=''
860 sitearch=''
861 sitearchexp=''
862 installsitebin=''
863 sitebin=''
864 sitebinexp=''
865 installsitelib=''
866 sitelib=''
867 sitelib_stem=''
868 sitelibexp=''
869 siteprefix=''
870 siteprefixexp=''
871 sizetype=''
872 so=''
873 socksizetype=''
874 sharpbang=''
875 shsharp=''
876 spitshell=''
877 src=''
878 ssizetype=''
879 startperl=''
880 startsh=''
881 stdchar=''
882 d_stdio_stream_array=''
883 stdio_stream_array=''
884 sysman=''
885 trnl=''
886 uidformat=''
887 uidsign=''
888 uidsize=''
889 uidtype=''
890 archname64=''
891 use64bitall=''
892 use64bitint=''
893 uselargefiles=''
894 uselongdouble=''
895 usemorebits=''
896 usemultiplicity=''
897 nm_opt=''
898 nm_so_opt=''
899 runnm=''
900 usenm=''
901 useperlio=''
902 usesocks=''
903 d_oldpthreads=''
904 use5005threads=''
905 useithreads=''
906 usethreads=''
907 incpath=''
908 mips_type=''
909 usrinc=''
910 d_vendorarch=''
911 installvendorarch=''
912 vendorarch=''
913 vendorarchexp=''
914 d_vendorbin=''
915 installvendorbin=''
916 vendorbin=''
917 vendorbinexp=''
918 d_vendorlib=''
919 installvendorlib=''
920 vendorlib=''
921 vendorlib_stem=''
922 vendorlibexp=''
923 usevendorprefix=''
924 vendorprefix=''
925 vendorprefixexp=''
926 defvoidused=''
927 voidflags=''
928 pm_apiversion=''
929 xs_apiversion=''
930 CONFIG=''
931
932 define='define'
933 undef='undef'
934 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
935 rmlist=''
936
937 : We must find out about Eunice early
938 eunicefix=':'
939 if test -f /etc/unixtovms; then
940         eunicefix=/etc/unixtovms
941 fi
942 if test -f /etc/unixtovms.exe; then
943         eunicefix=/etc/unixtovms.exe
944 fi
945
946 i_whoami=''
947 : set useposix=false in your hint file to disable the POSIX extension.
948 useposix=true
949 : set useopcode=false in your hint file to disable the Opcode extension.
950 useopcode=true
951 : Trailing extension.  Override this in a hint file, if needed.
952 _exe=''
953 : Extra object files, if any, needed on this platform.
954 archobjs=''
955 : Possible local include directories to search.
956 : Set locincpth to "" in a hint file to defeat local include searches.
957 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
958 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
959 :
960 : no include file wanted by default
961 inclwanted=''
962
963 groupstype=''
964 : change the next line if compiling for Xenix/286 on Xenix/386
965 xlibpth='/usr/lib/386 /lib/386'
966 : Possible local library directories to search.
967 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
968 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
969
970 : general looking path for locating libraries
971 glibpth="/usr/lib/large /lib /usr/lib $xlibpth"
972 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
973 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
974 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
975 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
976
977 : Private path used by Configure to find libraries.  Its value
978 : is prepended to libpth. This variable takes care of special
979 : machines, like the mips.  Usually, it should be empty.
980 plibpth=''
981
982 : default library list
983 libswanted=''
984 : some systems want to use only the non-versioned libso:s
985 ignore_versioned_solibs=''
986 : set usemultiplicity on the Configure command line to enable multiplicity.
987 : set usesocks on the Configure command line to enable socks.
988 : set usethreads on the Configure command line to enable threads.
989 : full support for void wanted by default
990 defvoidused=15
991
992 : List of libraries we want.
993 : If anyone needs -lnet, put it in a hint file.
994 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
995 libswanted="$libswanted dld ld sun m c cposix posix"
996 libswanted="$libswanted ndir dir crypt sec"
997 libswanted="$libswanted ucb bsd BSD PW x iconv"
998 : We probably want to search /usr/shlib before most other libraries.
999 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1000 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1001 glibpth="/usr/shlib $glibpth"
1002 : Do not use vfork unless overridden by a hint file.
1003 usevfork=false
1004
1005 : Find the basic shell for Bourne shell scripts
1006 case "$sh" in
1007 '')
1008         case "$SYSTYPE" in
1009         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1010         *) xxx='/bin/sh';;
1011         esac
1012         if test -f "$xxx"; then
1013                 sh="$xxx"
1014         else
1015                 : Build up a list and do a single loop so we can 'break' out.
1016                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1017                 for xxx in sh bash ksh pdksh ash; do
1018                         for p in $pth; do
1019                                 try="$try ${p}/${xxx}"
1020                         done
1021                 done
1022                 for xxx in $try; do
1023                         if test -f "$xxx"; then
1024                                 sh="$xxx";
1025                                 break
1026                         elif test -f "$xxx.exe"; then
1027                                 sh="$xxx";
1028                                 break
1029                         fi
1030                 done
1031         fi
1032         ;;
1033 esac
1034
1035 case "$sh" in
1036 '')     cat <<EOM >&2
1037 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1038
1039 Usually it's in /bin/sh.  How did you even get this far?
1040 Please contact me (Perl Maintainers) at perlbug@perl.com and 
1041 we'll try to straighten this all out.
1042 EOM
1043         exit 1
1044         ;;
1045 esac
1046
1047 : see if sh knows # comments
1048 if `$sh -c '#' >/dev/null 2>&1`; then
1049         shsharp=true
1050         spitshell=cat
1051         xcat=/bin/cat
1052         test -f $xcat || xcat=/usr/bin/cat
1053         echo "#!$xcat" >try
1054         $eunicefix try
1055         chmod +x try
1056         ./try > today
1057         if test -s today; then
1058                 sharpbang='#!'
1059         else
1060                 echo "#! $xcat" > try
1061                 $eunicefix try
1062                 chmod +x try
1063                 ./try > today
1064                 if test -s today; then
1065                         sharpbang='#! '
1066                 else
1067                         sharpbang=': use '
1068                 fi
1069         fi
1070 else
1071         echo " "
1072         echo "Your $sh doesn't grok # comments--I will strip them later on."
1073         shsharp=false
1074         cd ..
1075         echo "exec grep -v '^[  ]*#'" >spitshell
1076         chmod +x spitshell
1077         $eunicefix spitshell
1078         spitshell=`pwd`/spitshell
1079         cd UU
1080         echo "I presume that if # doesn't work, #! won't work either!"
1081         sharpbang=': use '
1082 fi
1083 rm -f try today
1084
1085 : figure out how to guarantee sh startup
1086 case "$startsh" in
1087 '') startsh=${sharpbang}${sh} ;;
1088 *)
1089 esac
1090 cat >try <<EOSS
1091 $startsh
1092 set abc
1093 test "$?abc" != 1
1094 EOSS
1095
1096 chmod +x try
1097 $eunicefix try
1098 if ./try; then
1099         : echo "Yup, it does."
1100 else
1101         echo "Hmm... '$startsh' does not guarantee sh startup..."
1102         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1103 fi
1104 rm -f try
1105
1106
1107 : Save command line options in file UU/cmdline.opt for later use in
1108 : generating config.sh.
1109 cat > cmdline.opt <<EOSH
1110 # Configure command line arguments.
1111 config_arg0='$0'
1112 config_args='$*'
1113 config_argc=$#
1114 EOSH
1115 argn=1
1116 for arg in "$@"; do
1117         cat >>cmdline.opt <<EOSH
1118 config_arg$argn='$arg'
1119 EOSH
1120         argn=`expr $argn + 1`
1121 done
1122
1123 : produce awk script to parse command line options
1124 cat >options.awk <<'EOF'
1125 BEGIN {
1126         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1127
1128         len = length(optstr);
1129         for (i = 1; i <= len; i++) {
1130                 c = substr(optstr, i, 1);
1131                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1132                 if (a == ":") {
1133                         arg[c] = 1;
1134                         i++;
1135                 }
1136                 opt[c] = 1;
1137         }
1138 }
1139 {
1140         expect = 0;
1141         str = $0;
1142         if (substr(str, 1, 1) != "-") {
1143                 printf("'%s'\n", str);
1144                 next;
1145         }
1146         len = length($0);
1147         for (i = 2; i <= len; i++) {
1148                 c = substr(str, i, 1);
1149                 if (!opt[c]) {
1150                         printf("-%s\n", substr(str, i));
1151                         next;
1152                 }
1153                 printf("-%s\n", c);
1154                 if (arg[c]) {
1155                         if (i < len)
1156                                 printf("'%s'\n", substr(str, i + 1));
1157                         else
1158                                 expect = 1;
1159                         next;
1160                 }
1161         }
1162 }
1163 END {
1164         if (expect)
1165                 print "?";
1166 }
1167 EOF
1168
1169 : process the command line options
1170 set X `for arg in "$@"; do echo "X$arg"; done |
1171         sed -e s/X// | awk -f options.awk`
1172 eval "set $*"
1173 shift
1174 rm -f options.awk
1175
1176 : set up default values
1177 fastread=''
1178 reuseval=false
1179 config_sh=''
1180 alldone=''
1181 error=''
1182 silent=''
1183 extractsh=''
1184 override=''
1185 knowitall=''
1186 rm -f optdef.sh posthint.sh
1187 cat >optdef.sh <<EOS
1188 $startsh
1189 EOS
1190
1191
1192 : option parsing
1193 while test $# -gt 0; do
1194         case "$1" in
1195         -d) shift; fastread=yes;;
1196         -e) shift; alldone=cont;;
1197         -f)
1198                 shift
1199                 cd ..
1200                 if test -r "$1"; then
1201                         config_sh="$1"
1202                 else
1203                         echo "$me: cannot read config file $1." >&2
1204                         error=true
1205                 fi
1206                 cd UU
1207                 shift;;
1208         -h) shift; error=true;;
1209         -r) shift; reuseval=true;;
1210         -s) shift; silent=true; realsilent=true;;
1211         -E) shift; alldone=exit;;
1212         -K) shift; knowitall=true;;
1213         -O) shift; override=true;;
1214         -S) shift; silent=true; extractsh=true;;
1215         -D)
1216                 shift
1217                 case "$1" in
1218                 *=)
1219                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1220                         echo "$me: ignoring -D $1" >&2
1221                         ;;
1222                 *=*) echo "$1" | \
1223                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1224                 *) echo "$1='define'" >> optdef.sh;;
1225                 esac
1226                 shift
1227                 ;;
1228         -U)
1229                 shift
1230                 case "$1" in
1231                 *=) echo "$1" >> optdef.sh;;
1232                 *=*)
1233                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1234                         echo "$me: ignoring -U $1" >&2
1235                         ;;
1236                 *) echo "$1='undef'" >> optdef.sh;;
1237                 esac
1238                 shift
1239                 ;;
1240         -A)
1241             shift
1242             xxx=''
1243             yyy="$1"
1244             zzz=''
1245             uuu=undef
1246             case "$yyy" in
1247             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1248                  case "$zzz" in
1249                  *:*) zzz='' ;;
1250                  *)   xxx=append
1251                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1252                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1253                  esac
1254                  ;;
1255             esac
1256             case "$xxx" in
1257             '')  case "$yyy" in
1258                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1259                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1260                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1261                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1262                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1263                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1264                  esac
1265                  ;;       
1266             esac
1267             case "$xxx" in
1268             append)
1269                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1270             clear)
1271                 echo "$yyy=''"                  >> posthint.sh ;;
1272             define)
1273                 case "$zzz" in
1274                 '') zzz=define ;;
1275                 esac
1276                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1277             eval)
1278                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1279             prepend)
1280                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1281             undef)
1282                 case "$zzz" in
1283                 '') zzz="$uuu" ;;
1284                 esac
1285                 echo "$yyy=$zzz"                >> posthint.sh ;;
1286             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1287             esac
1288             shift
1289             ;;
1290         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1291             exit 0;;
1292         --) break;;
1293         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1294         *) break;;
1295         esac
1296 done
1297
1298 case "$error" in
1299 true)
1300         cat >&2 <<EOM
1301 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1302                  [-U symbol] [-U symbol=] [-A command:symbol...]
1303   -d : use defaults for all answers.
1304   -e : go on without questioning past the production of config.sh.
1305   -f : specify an alternate default configuration file.
1306   -h : print this help message and exit (with an error status).
1307   -r : reuse C symbols value if possible (skips costly nm extraction).
1308   -s : silent mode, only echoes questions and essential information.
1309   -D : define symbol to have some value:
1310          -D symbol         symbol gets the value 'define'
1311          -D symbol=value   symbol gets the value 'value'
1312   -E : stop at the end of questions, after having produced config.sh.
1313   -K : do not use unless you know what you are doing.
1314   -O : let -D and -U override definitions from loaded configuration file.
1315   -S : perform variable substitutions on all .SH files (can mix with -f)
1316   -U : undefine symbol:
1317          -U symbol    symbol gets the value 'undef'
1318          -U symbol=   symbol gets completely empty
1319   -A : manipulate symbol after the platform specific hints have been applied:
1320          -A symbol=value                append " "value to symbol
1321          -A append:symbol=value         append value to symbol
1322          -A define:symbol=value         define symbol to have value
1323          -A clear:symbol                define symbol to be ''
1324          -A define:symbol               define symbol to be 'define'
1325          -A eval:symbol=value           define symbol to be eval of value
1326          -A prepend:symbol=value        prepend value to symbol
1327          -A undef:symbol                define symbol to be 'undef'
1328          -A undef:symbol=               define symbol to be ''
1329   -V : print version number and exit (with a zero status).
1330 EOM
1331         exit 1
1332         ;;
1333 esac
1334
1335 : Sanity checks
1336 case "$fastread$alldone" in
1337 yescont|yesexit) ;;
1338 *)
1339         if test ! -t 0; then
1340                 echo "Say 'sh Configure', not 'sh <Configure'"
1341                 exit 1
1342         fi
1343         ;;
1344 esac
1345
1346 exec 4>&1
1347 case "$silent" in
1348 true) exec 1>/dev/null;;
1349 esac
1350
1351 : run the defines and the undefines, if any, but leave the file out there...
1352 touch optdef.sh
1353 . ./optdef.sh
1354 : create the posthint manipulation script and leave the file out there...
1355 touch posthint.sh
1356
1357 : set package name
1358 package=perl5
1359 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1360 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1361 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1362 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1363 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1364 esac
1365
1366 : Some greps do not return status, grrr.
1367 echo "grimblepritz" >grimble
1368 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1369         contains=contains
1370 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1371         contains=grep
1372 else
1373         contains=contains
1374 fi
1375 rm -f grimble
1376 : the following should work in any shell
1377 case "$contains" in
1378 contains*)
1379         echo " "
1380         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1381         cat >contains <<'EOSS'
1382 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1383 EOSS
1384 chmod +x contains
1385 esac
1386
1387 : Find the path to the source tree
1388 case "$src" in
1389 '') case "$0" in
1390     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1391          case "$src" in
1392          /*)    ;;
1393          *)     src=`cd ../$src && pwd` ;;
1394          esac
1395          ;;
1396     *)   src='.';;
1397     esac;;
1398 esac
1399 case "$src" in
1400 '')     src=/
1401         rsrc=/
1402         ;;
1403 /*) rsrc="$src";;
1404 *) rsrc="../$src";;
1405 esac
1406 if test -f $rsrc/Configure && \
1407         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1408 then
1409    : found it, so we are ok.
1410 else
1411         rsrc=''
1412         for src in . .. ../.. ../../.. ../../../..; do
1413                 if test -f ../$src/Configure && \
1414                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1415                 then
1416                         rsrc=../$src
1417                         break
1418                 fi
1419         done
1420 fi
1421 case "$rsrc" in
1422 '')
1423         cat <<EOM >&4
1424
1425 Sorry, I can't seem to locate the source dir for $package.  Please start
1426 Configure with an explicit path -- i.e. /some/path/Configure.
1427
1428 EOM
1429         exit 1
1430         ;;
1431 ../.)   rsrc='..';;
1432 *)
1433         echo " "
1434         echo "Sources for $package found in \"$src\"." >&4
1435         ;;
1436 esac
1437
1438 : script used to extract .SH files with variable substitutions
1439 cat >extract <<'EOS'
1440 CONFIGDOTSH=true
1441 echo "Doing variable substitutions on .SH files..."
1442 if test -f $src/MANIFEST; then
1443         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1444 else
1445         echo "(Looking for .SH files under the source directory.)"
1446         set x `(cd $src; find . -name "*.SH" -print)`
1447 fi
1448 shift
1449 case $# in
1450 0) set x `(cd $src; echo *.SH)`; shift;;
1451 esac
1452 if test ! -f $src/$1; then
1453         shift
1454 fi
1455 mkdir_p='
1456 name=$1;
1457 create="";
1458 while test $name; do
1459         if test ! -d "$name"; then
1460                 create="$name $create";
1461                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1462                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1463         else
1464                 name="";
1465         fi;
1466 done;
1467 for file in $create; do
1468         mkdir $file;
1469 done
1470 '
1471 for file in $*; do
1472         case "$src" in
1473         ".")
1474                 case "$file" in
1475                 */*)
1476                         dir=`expr X$file : 'X\(.*\)/'`
1477                         file=`expr X$file : 'X.*/\(.*\)'`
1478                         (cd $dir && . ./$file)
1479                         ;;
1480                 *)
1481                         . ./$file
1482                         ;;
1483                 esac
1484                 ;;
1485         *)
1486                 case "$file" in
1487                 */*)
1488                         dir=`expr X$file : 'X\(.*\)/'`
1489                         file=`expr X$file : 'X.*/\(.*\)'`
1490                         (set x $dir; shift; eval $mkdir_p)
1491                         sh <$src/$dir/$file
1492                         ;;
1493                 *)
1494                         sh <$src/$file
1495                         ;;
1496                 esac
1497                 ;;
1498         esac
1499 done
1500 if test -f $src/config_h.SH; then
1501         if test ! -f config.h; then
1502         : oops, they left it out of MANIFEST, probably, so do it anyway.
1503         . $src/config_h.SH
1504         fi
1505 fi
1506 EOS
1507
1508 : extract files and exit if asked to do so
1509 case "$extractsh" in
1510 true)
1511         case "$realsilent" in
1512         true) ;;
1513         *) exec 1>&4;;
1514         esac
1515         case "$config_sh" in
1516         '') config_sh='config.sh';;
1517         esac
1518         echo " "
1519         echo "Fetching answers from $config_sh..."
1520         cd ..
1521         . $config_sh
1522         test "$override" && . ./optdef.sh
1523         echo " "
1524         . UU/extract
1525         rm -rf UU
1526         echo "Done."
1527         exit 0
1528         ;;
1529 esac
1530
1531 : Eunice requires " " instead of "", can you believe it
1532 echo " "
1533 : Here we go...
1534 echo "Beginning of configuration questions for $package."
1535
1536 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1537
1538 : first determine how to suppress newline on echo command
1539 echo " "
1540 echo "Checking echo to see how to suppress newlines..."
1541 (echo "hi there\c" ; echo " ") >.echotmp
1542 if $contains c .echotmp >/dev/null 2>&1 ; then
1543         echo "...using -n."
1544         n='-n'
1545         c=''
1546 else
1547         cat <<'EOM'
1548 ...using \c
1549 EOM
1550         n=''
1551         c='\c'
1552 fi
1553 echo $n "The star should be here-->$c"
1554 echo '*'
1555 rm -f .echotmp
1556
1557 : Now test for existence of everything in MANIFEST
1558 echo " "
1559 if test -f $rsrc/MANIFEST; then
1560         echo "First let's make sure your kit is complete.  Checking..." >&4
1561         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1562         rm -f missing
1563         tmppwd=`pwd`
1564         for filelist in x??; do
1565                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1566         done
1567         if test -s missing; then
1568                 cat missing >&4
1569                 cat >&4 <<'EOM'
1570
1571 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1572
1573 You have the option of continuing the configuration process, despite the
1574 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1575 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1576 and contact the author (perlbug@perl.com).
1577
1578 EOM
1579                 echo $n "Continue? [n] $c" >&4
1580                 read ans
1581                 case "$ans" in
1582                 y*)
1583                         echo "Continuing..." >&4
1584                         rm -f missing
1585                         ;;
1586                 *)
1587                         echo "ABORTING..." >&4
1588                         kill $$
1589                         ;;
1590                 esac
1591         else
1592                 echo "Looks good..."
1593         fi
1594 else
1595         echo "There is no MANIFEST file.  I hope your kit is complete !"
1596 fi
1597 rm -f missing x??
1598
1599 echo " "
1600 : Find the appropriate value for a newline for tr
1601 if test -n "$DJGPP"; then
1602        trnl='\012'
1603 fi
1604 if test X"$trnl" = X; then
1605         case "`echo foo|tr '\n' x 2>/dev/null`" in
1606         foox) trnl='\n' ;;
1607         esac
1608 fi
1609 if test X"$trnl" = X; then
1610         case "`echo foo|tr '\012' x 2>/dev/null`" in
1611         foox) trnl='\012' ;;
1612         esac
1613 fi
1614 if test X"$trnl" = X; then
1615         cat <<EOM >&2
1616
1617 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1618
1619 EOM
1620         exit 1
1621 fi
1622
1623 : compute the number of columns on the terminal for proper question formatting
1624 case "$COLUMNS" in
1625 '') COLUMNS='80';;
1626 esac
1627
1628 : set up the echo used in my read
1629 myecho="case \"\$xxxm\" in
1630 '') echo $n \"\$rp $c\" >&4;;
1631 *) case \"\$rp\" in
1632         '') echo $n \"[\$xxxm] $c\";;
1633         *)
1634                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1635                         echo \"\$rp\" >&4
1636                         echo $n \"[\$xxxm] $c\" >&4
1637                 else
1638                         echo $n \"\$rp [\$xxxm] $c\" >&4
1639                 fi
1640                 ;;
1641         esac;;
1642 esac"
1643
1644 : now set up to do reads with possible shell escape and default assignment
1645 cat <<EOSC >myread
1646 $startsh
1647 xxxm=\$dflt
1648 $myecho
1649 ans='!'
1650 case "\$fastread" in
1651 yes) case "\$dflt" in
1652         '') ;;
1653         *) ans='';
1654                 case "\$silent-\$rp" in
1655                 true-) ;;
1656                 *) echo " " >&4;;
1657                 esac;;
1658         esac;;
1659 *) case "\$silent" in
1660         true) case "\$rp" in
1661                 '') ans='';;
1662                 esac;;
1663         esac;;
1664 esac
1665 while expr "X\$ans" : "X!" >/dev/null; do
1666         read answ
1667         set x \$xxxm
1668         shift
1669         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1670         case  "\$answ" in
1671         "!")
1672                 sh 1>&4
1673                 echo " "
1674                 $myecho
1675                 ;;
1676         !*)
1677                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1678                 shift
1679                 sh 1>&4 -c "\$*"
1680                 echo " "
1681                 $myecho
1682                 ;;
1683         "\$ans")
1684                 case "\$ans" in
1685                 \\&*)
1686                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1687                         shift
1688                         case "\$1" in
1689                         -d)
1690                                 fastread=yes
1691                                 echo "(OK, I'll run with -d after this question.)" >&4
1692                                 ;;
1693                         -*)
1694                                 echo "*** Sorry, \$1 not supported yet." >&4
1695                                 ;;
1696                         esac
1697                         $myecho
1698                         ans=!
1699                         ;;
1700                 esac;;
1701         *)
1702                 case "\$aok" in
1703                 y)
1704                         echo "*** Substitution done -- please confirm."
1705                         xxxm="\$ans"
1706                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1707                         xxxm="\$ans"
1708                         ans=!
1709                         ;;
1710                 *)
1711                         echo "*** Error -- try again."
1712                         ans=!
1713                         ;;
1714                 esac
1715                 $myecho
1716                 ;;
1717         esac
1718         case "\$ans\$xxxm\$nostick" in
1719         '')
1720                 ans=!
1721                 $myecho
1722                 ;;
1723         esac
1724 done
1725 case "\$ans" in
1726 '') ans="\$xxxm";;
1727 esac
1728 EOSC
1729
1730 : create .config dir to save info across Configure sessions
1731 test -d ../.config || mkdir ../.config
1732 cat >../.config/README <<EOF
1733 This directory created by Configure to save information that should
1734 persist across sessions for $package.
1735
1736 You may safely delete it if you wish.
1737 EOF
1738
1739 : general instructions
1740 needman=true
1741 firsttime=true
1742 user=`(logname) 2>/dev/null`
1743 case "$user" in
1744 '') user=`whoami 2>&1`;;
1745 esac
1746 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1747         firsttime=false
1748         echo " "
1749         rp='Would you like to see the instructions?'
1750         dflt=n
1751         . ./myread
1752         case "$ans" in
1753         [yY]*) ;;
1754         *) needman=false;;
1755         esac
1756 fi
1757 if $needman; then
1758         cat <<EOH
1759
1760 This installation shell script will examine your system and ask you questions
1761 to determine how the perl5 package should be installed. If you get
1762 stuck on a question, you may use a ! shell escape to start a subshell or
1763 execute a command.  Many of the questions will have default answers in square
1764 brackets; typing carriage return will give you the default.
1765
1766 On some of the questions which ask for file or directory names you are allowed
1767 to use the ~name construct to specify the login directory belonging to "name",
1768 even if you don't have a shell which knows about that.  Questions where this is
1769 allowed will be marked "(~name ok)".
1770
1771 EOH
1772         rp=''
1773         dflt='Type carriage return to continue'
1774         . ./myread
1775         cat <<'EOH'
1776
1777 The prompter used in this script allows you to use shell variables and
1778 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1779 in the default answer, as if the default line was a set of arguments given to a
1780 script shell.  This means you may also use $* to repeat the whole default line,
1781 so you do not have to re-type everything to add something to the default.
1782
1783 Everytime there is a substitution, you will have to confirm.  If there is an
1784 error (e.g. an unmatched backtick), the default answer will remain unchanged
1785 and you will be prompted again.
1786
1787 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1788 the questions and use the computed defaults (or the previous answers if there
1789 was already a config.sh file). Type 'Configure -h' for a list of options.
1790 You may also start interactively and then answer '& -d' at any prompt to turn
1791 on the non-interactive behaviour for the remainder of the execution.
1792
1793 EOH
1794         . ./myread
1795         cat <<EOH
1796
1797 Much effort has been expended to ensure that this shell script will run on any
1798 Unix system.  If despite that it blows up on yours, your best bet is to edit
1799 Configure and run it again.  If you can't run Configure for some reason,
1800 you'll have to generate a config.sh file by hand.  Whatever problems you
1801 have, let me (perlbug@perl.com) know how I blew it.
1802
1803 This installation script affects things in two ways:
1804
1805 1) it may do direct variable substitutions on some of the files included
1806    in this kit.
1807 2) it builds a config.h file for inclusion in C programs.  You may edit
1808    any of these files as the need arises after running this script.
1809
1810 If you make a mistake on a question, there is no easy way to back up to it
1811 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1812 files.  Configure will offer to let you do this before it runs the SH files.
1813
1814 EOH
1815         dflt='Type carriage return to continue'
1816         . ./myread
1817         case "$firsttime" in
1818         true) echo $user >>../.config/instruct;;
1819         esac
1820 fi
1821
1822 : find out where common programs are
1823 echo " "
1824 echo "Locating common programs..." >&4
1825 cat <<EOSC >loc
1826 $startsh
1827 case \$# in
1828 0) exit 1;;
1829 esac
1830 thing=\$1
1831 shift
1832 dflt=\$1
1833 shift
1834 for dir in \$*; do
1835         case "\$thing" in
1836         .)
1837         if test -d \$dir/\$thing; then
1838                 echo \$dir
1839                 exit 0
1840         fi
1841         ;;
1842         *)
1843         for thisthing in \$dir/\$thing; do
1844                 : just loop through to pick last item
1845         done
1846         if test -f \$thisthing; then
1847                 echo \$thisthing
1848                 exit 0
1849         elif test -f \$dir/\$thing.exe; then
1850                 if test -n "$DJGPP"; then
1851                         echo \$dir/\$thing.exe
1852                 else
1853                         : on Eunice apparently
1854                         echo \$dir/\$thing
1855                 fi
1856                 exit 0
1857         fi
1858         ;;
1859         esac
1860 done
1861 echo \$dflt
1862 exit 1
1863 EOSC
1864 chmod +x loc
1865 $eunicefix loc
1866 loclist="
1867 awk
1868 cat
1869 comm
1870 cp
1871 echo
1872 expr
1873 grep
1874 ls
1875 make
1876 mkdir
1877 rm
1878 sed
1879 sort
1880 touch
1881 tr
1882 uniq
1883 "
1884 trylist="
1885 Mcc
1886 ar
1887 byacc
1888 cpp
1889 csh
1890 date
1891 egrep
1892 gzip
1893 less
1894 ln
1895 more
1896 nm
1897 nroff
1898 pg
1899 test
1900 uname
1901 zip
1902 "
1903 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1904 pth="$pth /lib /usr/lib"
1905 for file in $loclist; do
1906         eval xxx=\$$file
1907         case "$xxx" in
1908         /*|?:[\\/]*)
1909                 if test -f "$xxx"; then
1910                         : ok
1911                 else
1912                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1913                         xxx=`./loc $file $file $pth`
1914                 fi
1915                 ;;
1916         '') xxx=`./loc $file $file $pth`;;
1917         *) xxx=`./loc $xxx $xxx $pth`;;
1918         esac
1919         eval $file=$xxx
1920         eval _$file=$xxx
1921         case "$xxx" in
1922         /*)
1923                 echo $file is in $xxx.
1924                 ;;
1925         ?:[\\/]*)
1926                 echo $file is in $xxx.
1927                 ;;
1928         *)
1929                 echo "I don't know where '$file' is, and my life depends on it." >&4
1930                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1931                 exit 1
1932                 ;;
1933         esac
1934 done
1935 echo " "
1936 echo "Don't worry if any of the following aren't found..."
1937 say=offhand
1938 for file in $trylist; do
1939         eval xxx=\$$file
1940         case "$xxx" in
1941         /*|?:[\\/]*)
1942                 if test -f "$xxx"; then
1943                         : ok
1944                 else
1945                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1946                         xxx=`./loc $file $file $pth`
1947                 fi
1948                 ;;
1949         '') xxx=`./loc $file $file $pth`;;
1950         *) xxx=`./loc $xxx $xxx $pth`;;
1951         esac
1952         eval $file=$xxx
1953         eval _$file=$xxx
1954         case "$xxx" in
1955         /*)
1956                 echo $file is in $xxx.
1957                 ;;
1958         ?:[\\/]*)
1959                 echo $file is in $xxx.
1960                 ;;
1961         *)
1962                 echo "I don't see $file out there, $say."
1963                 say=either
1964                 ;;
1965         esac
1966 done
1967 case "$egrep" in
1968 egrep)
1969         echo "Substituting grep for egrep."
1970         egrep=$grep
1971         ;;
1972 esac
1973 case "$ln" in
1974 ln)
1975         echo "Substituting cp for ln."
1976         ln=$cp
1977         ;;
1978 esac
1979 case "$test" in
1980 test)
1981         echo "Hopefully test is built into your sh."
1982         ;;
1983 *)
1984         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1985                 echo "Using the test built into your sh."
1986                 test=test
1987                 _test=test
1988         fi
1989         ;;
1990 esac
1991 case "$echo" in
1992 echo)
1993         echo "Hopefully echo is built into your sh."
1994         ;;
1995 '') ;;
1996 *)
1997         echo " "
1998 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1999         $echo $n "hi there$c" >foo1
2000         echo $n "hi there$c" >foo2
2001         if cmp foo1 foo2 >/dev/null 2>&1; then
2002                 echo "They are compatible.  In fact, they may be identical."
2003         else
2004                 case "$n" in
2005                 '-n') n='' c='\c';;
2006                 *) n='-n' c='';;
2007                 esac
2008                 cat <<FOO
2009 They are not compatible!  You are probably running ksh on a non-USG system.
2010 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2011 have echo built in and we may have to run some Bourne shell scripts.  That
2012 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2013
2014 FOO
2015                 $echo $n "The star should be here-->$c"
2016                 $echo "*"
2017         fi
2018         $rm -f foo1 foo2
2019         ;;
2020 esac
2021
2022 : determine whether symbolic links are supported
2023 echo " "
2024 $touch blurfl
2025 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2026         echo "Symbolic links are supported." >&4
2027         lns="$ln -s"
2028 else
2029         echo "Symbolic links are NOT supported." >&4
2030         lns="$ln"
2031 fi
2032 $rm -f blurfl sym
2033
2034 : see whether [:lower:] and [:upper:] are supported character classes
2035 echo " "
2036 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2037 ABYZ)
2038         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2039         up='[:upper:]'
2040         low='[:lower:]'
2041         ;;
2042 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2043         # (0xc9 and 0xd1), therefore that is a nice testing point.
2044         if test "X$up" = X -o "X$low" = X; then
2045             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2046             ij) up='[A-Z]'
2047                 low='[a-z]'
2048                 ;;
2049             esac
2050         fi
2051         if test "X$up" = X -o "X$low" = X; then
2052             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2053             ij) up='A-Z'
2054                 low='a-z'
2055                 ;;
2056             esac
2057         fi
2058         if test "X$up" = X -o "X$low" = X; then
2059             case "`echo IJ | od -x 2>/dev/null`" in
2060             *C9D1*|*c9d1*)
2061                 echo "Hey, this might be EBCDIC." >&4
2062                 if test "X$up" = X -o "X$low" = X; then
2063                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2064                     ij) up='[A-IJ-RS-Z]'
2065                         low='[a-ij-rs-z]'
2066                         ;;
2067                     esac
2068                 fi
2069                 if test "X$up" = X -o "X$low" = X; then
2070                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2071                     ij) up='A-IJ-RS-Z'
2072                         low='a-ij-rs-z'
2073                         ;;
2074                     esac
2075                 fi
2076                 ;;
2077             esac
2078         fi
2079 esac
2080 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2081 ij)
2082     echo "Using $up and $low to convert case." >&4
2083     ;;
2084 *)
2085     echo "I don't know how to translate letters from upper to lower case." >&4
2086     echo "Your tr is not acting any way I know of." >&4
2087     exit 1
2088     ;;
2089 esac
2090 : set up the translation script tr, must be called with ./tr of course
2091 cat >tr <<EOSC
2092 $startsh
2093 case "\$1\$2" in
2094 '[A-Z][a-z]') exec $tr '$up' '$low';;
2095 '[a-z][A-Z]') exec $tr '$low' '$up';;
2096 esac
2097 exec $tr "\$@"
2098 EOSC
2099 chmod +x tr
2100 $eunicefix tr
2101
2102 : Try to determine whether config.sh was made on this system
2103 case "$config_sh" in
2104 '')
2105 myuname=`$uname -a 2>/dev/null`
2106 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2107 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2108 # because the A-Z/a-z are not consecutive.
2109 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2110         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2111 newmyuname="$myuname"
2112 dflt=n
2113 case "$knowitall" in
2114 '')
2115         if test -f ../config.sh; then
2116                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2117                         eval "`grep myuname= ../config.sh`"
2118                 fi
2119                 if test "X$myuname" = "X$newmyuname"; then
2120                         dflt=y
2121                 fi
2122         fi
2123         ;;
2124 *) dflt=y;;
2125 esac
2126
2127 : Get old answers from old config file if Configure was run on the
2128 : same system, otherwise use the hints.
2129 hint=default
2130 cd ..
2131 if test -f config.sh; then
2132         echo " "
2133         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2134         . UU/myread
2135         case "$ans" in
2136         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2137         *)  echo "Fetching default answers from your old config.sh file..." >&4
2138                 tmp_n="$n"
2139                 tmp_c="$c"
2140                 tmp_sh="$sh"
2141                 . ./config.sh
2142                 cp config.sh UU
2143                 n="$tmp_n"
2144                 c="$tmp_c"
2145                 : Older versions did not always set $sh.  Catch re-use of such
2146                 : an old config.sh.
2147                 case "$sh" in
2148                 '') sh="$tmp_sh" ;;
2149                 esac
2150                 hint=previous
2151                 ;;
2152         esac
2153 fi
2154 if test ! -f config.sh; then
2155         $cat <<EOM
2156
2157 First time through, eh?  I have some defaults handy for some systems
2158 that need some extra help getting the Configure answers right:
2159
2160 EOM
2161         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2162         dflt=''
2163         : Half the following guesses are probably wrong... If you have better
2164         : tests or hints, please send them to perlbug@perl.com
2165         : The metaconfig authors would also appreciate a copy...
2166         $test -f /irix && osname=irix
2167         $test -f /xenix && osname=sco_xenix
2168         $test -f /dynix && osname=dynix
2169         $test -f /dnix && osname=dnix
2170         $test -f /lynx.os && osname=lynxos
2171         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2172         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2173         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2174         $test -f /bin/mips && /bin/mips && osname=mips
2175         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2176                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2177         $test -d /usr/apollo/bin && osname=apollo
2178         $test -f /etc/saf/_sactab && osname=svr4
2179         $test -d /usr/include/minix && osname=minix
2180         if $test -d /MachTen -o -d /MachTen_Folder; then
2181                 osname=machten
2182                 if $test -x /sbin/version; then
2183                         osvers=`/sbin/version | $awk '{print $2}' |
2184                         $sed -e 's/[A-Za-z]$//'`
2185                 elif $test -x /usr/etc/version; then
2186                         osvers=`/usr/etc/version | $awk '{print $2}' |
2187                         $sed -e 's/[A-Za-z]$//'`
2188                 else
2189                         osvers="$2.$3"
2190                 fi
2191         fi
2192
2193         $test -f /sys/posix.dll &&
2194                 $test -f /usr/bin/what &&
2195                 set X `/usr/bin/what /sys/posix.dll` &&
2196                 $test "$3" = UWIN &&
2197                 osname=uwin &&
2198                 osvers="$5"
2199
2200         if $test -f $uname; then
2201                 set X $myuname
2202                 shift
2203
2204                 case "$5" in
2205                 fps*) osname=fps ;;
2206                 mips*)
2207                         case "$4" in
2208                         umips) osname=umips ;;
2209                         *) osname=mips ;;
2210                         esac;;
2211                 [23]100) osname=mips ;;
2212                 next*) osname=next ;;
2213                 i386*)
2214                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2215                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2216                                 osname='sco'
2217                                 osvers=$tmp
2218                         elif $test -f /etc/kconfig; then
2219                                 osname=isc
2220                                 if test "$lns" = "$ln -s"; then
2221                                         osvers=4
2222                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2223                                         osvers=3
2224                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2225                                         osvers=2
2226                                 fi
2227                         fi
2228                         tmp=''
2229                         ;;
2230                 pc*)
2231                         if test -n "$DJGPP"; then
2232                                 osname=dos
2233                                 osvers=djgpp
2234                         fi
2235                         ;;
2236                 esac
2237
2238                 case "$1" in
2239                 aix) osname=aix
2240                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2241                         case "$tmp" in
2242                         'not found') osvers="$4"."$3" ;;
2243                         '<3240'|'<>3240') osvers=3.2.0 ;;
2244                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2245                         '=3250'|'>3250') osvers=3.2.5 ;;
2246                         *) osvers=$tmp;;
2247                         esac
2248                         ;;
2249                 bsd386) osname=bsd386
2250                         osvers=`$uname -r`
2251                         ;;
2252                 cygwin*) osname=cygwin
2253                         osvers="$3"
2254                         ;;
2255                 *dc.osx) osname=dcosx
2256                         osvers="$3"
2257                         ;;
2258                 dnix) osname=dnix
2259                         osvers="$3"
2260                         ;;
2261                 domainos) osname=apollo
2262                         osvers="$3"
2263                         ;;
2264                 dgux) osname=dgux 
2265                         osvers="$3"
2266                         ;;
2267                 dynixptx*) osname=dynixptx
2268                         osvers=`echo "$4"|sed 's/^v//'`
2269                         ;;
2270                 freebsd) osname=freebsd 
2271                         osvers="$3" ;;
2272                 genix) osname=genix ;;
2273                 hp*) osname=hpux 
2274                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2275                         ;;
2276                 irix*) osname=irix
2277                         case "$3" in
2278                         4*) osvers=4 ;;
2279                         5*) osvers=5 ;;
2280                         *)      osvers="$3" ;;
2281                         esac
2282                         ;;
2283                 linux) osname=linux
2284                         case "$3" in
2285                         *)      osvers="$3" ;;
2286                         esac
2287                         ;;
2288                 MiNT) osname=mint
2289                         ;;
2290                 netbsd*) osname=netbsd
2291                         osvers="$3"
2292                         ;;
2293                 news-os) osvers="$3"
2294                         case "$3" in
2295                         4*) osname=newsos4 ;;
2296                         *) osname=newsos ;;
2297                         esac
2298                         ;;
2299                 next*) osname=next ;;
2300                 POSIX-BC | posix-bc ) osname=posix-bc
2301                         osvers="$3"
2302                         ;;
2303                 powerux | power_ux | powermax_os | powermaxos | \
2304                 powerunix | power_unix) osname=powerux
2305                         osvers="$3"
2306                         ;;
2307                 qnx) osname=qnx
2308                         osvers="$4"
2309                         ;;
2310                 solaris) osname=solaris
2311                         case "$3" in
2312                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2313                         *)      osvers="$3" ;;
2314                         esac
2315                         ;;
2316                 sunos) osname=sunos
2317                         case "$3" in
2318                         5*) osname=solaris
2319                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2320                         *)      osvers="$3" ;;
2321                         esac
2322                         ;;
2323                 titanos) osname=titanos
2324                         case "$3" in
2325                         1*) osvers=1 ;;
2326                         2*) osvers=2 ;;
2327                         3*) osvers=3 ;;
2328                         4*) osvers=4 ;;
2329                         *)      osvers="$3" ;;
2330                         esac
2331                         ;;
2332                 ultrix) osname=ultrix
2333                         osvers="$3"
2334                         ;;
2335                 osf1|mls+)      case "$5" in
2336                                 alpha)
2337                                         osname=dec_osf
2338                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2339                                         ;;
2340                         hp*)    osname=hp_osf1  ;;
2341                         mips)   osname=mips_osf1 ;;
2342                         esac
2343                         ;;
2344                 unixware) osname=svr5
2345                         osvers="$4"
2346                         ;;
2347                 uts) osname=uts
2348                         osvers="$3"
2349                         ;;
2350                 $2) case "$osname" in
2351                         *isc*) ;;
2352                         *freebsd*) ;;
2353                         svr*)
2354                                 : svr4.x or possibly later
2355                                 case "svr$3" in 
2356                                 ${osname}*)
2357                                         osname=svr$3
2358                                         osvers=$4
2359                                         ;;
2360                                 esac
2361                                 case "$osname" in
2362                                 svr4.0)
2363                                         : Check for ESIX
2364                                         if test -f /stand/boot ; then
2365                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2366                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2367                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2368                                                         if test -n "$isesix"; then
2369                                                                 osname=esix4
2370                                                         fi
2371                                                 fi
2372                                         fi
2373                                         ;;
2374                                 esac
2375                                 ;;
2376                         *)      if test -f /etc/systemid; then
2377                                         osname=sco
2378                                         set `echo $3 | $sed 's/\./ /g'` $4
2379                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2380                                                 osvers=$1.$2.$3
2381                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2382                                                 osvers=$1.$2
2383                                         elif $test -f $src/hints/sco_$1.sh; then
2384                                                 osvers=$1
2385                                         fi
2386                                 else
2387                                         case "$osname" in
2388                                         '') : Still unknown.  Probably a generic Sys V.
2389                                                 osname="sysv"
2390                                                 osvers="$3"
2391                                                 ;;
2392                                         esac
2393                                 fi
2394                                 ;;
2395                         esac
2396                         ;;
2397                 *)      case "$osname" in
2398                         '') : Still unknown.  Probably a generic BSD.
2399                                 osname="$1"
2400                                 osvers="$3"
2401                                 ;;
2402                         esac
2403                         ;;
2404                 esac
2405         else
2406                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2407                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2408                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2409                                 osname=news_os
2410                         fi
2411                         $rm -f UU/kernel.what
2412                 elif test -d c:/.; then
2413                         set X $myuname
2414                         osname=os2
2415                         osvers="$5"
2416                 fi
2417         fi
2418         
2419         : Now look for a hint file osname_osvers, unless one has been
2420         : specified already.
2421         case "$hintfile" in
2422         ''|' ')
2423                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
2424                 : Also try without trailing minor version numbers.
2425                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
2426                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
2427                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
2428                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
2429                 case "$file" in
2430                 '') dflt=none ;;
2431                 *)  case "$osvers" in
2432                         '') dflt=$file
2433                                 ;;
2434                         *)  if $test -f $src/hints/$file.sh ; then
2435                                         dflt=$file
2436                                 elif $test -f $src/hints/$xfile.sh ; then
2437                                         dflt=$xfile
2438                                 elif $test -f $src/hints/$xxfile.sh ; then
2439                                         dflt=$xxfile
2440                                 elif $test -f $src/hints/$xxxfile.sh ; then
2441                                         dflt=$xxxfile
2442                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2443                                         dflt=$xxxxfile
2444                                 elif $test -f "$src/hints/${osname}.sh" ; then
2445                                         dflt="${osname}"
2446                                 else
2447                                         dflt=none
2448                                 fi
2449                                 ;;
2450                         esac
2451                         ;;
2452                 esac
2453                 if $test -f Policy.sh ; then
2454                         case "$dflt" in
2455                         *Policy*) ;;
2456                         none) dflt="Policy" ;;
2457                         *) dflt="Policy $dflt" ;;
2458                         esac
2459                 fi
2460                 ;;
2461         *)
2462                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2463                 ;;
2464         esac
2465
2466         if $test -f Policy.sh ; then
2467                 $cat <<EOM
2468
2469 There's also a Policy hint file available, which should make the
2470 site-specific (policy) questions easier to answer.
2471 EOM
2472
2473         fi
2474
2475         $cat <<EOM
2476
2477 You may give one or more space-separated answers, or "none" if appropriate.
2478 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2479 is a good thing.  DO NOT give a wrong version or a wrong OS.
2480
2481 EOM
2482
2483         rp="Which of these apply, if any?"
2484         . UU/myread
2485         tans=$ans
2486         for file in $tans; do
2487                 if $test X$file = XPolicy -a -f Policy.sh; then
2488                         . Policy.sh
2489                         $cat Policy.sh >> UU/config.sh
2490                 elif $test -f $src/hints/$file.sh; then
2491                         . $src/hints/$file.sh
2492                         $cat $src/hints/$file.sh >> UU/config.sh
2493                 elif $test X$tans = X -o X$tans = Xnone ; then
2494                         : nothing
2495                 else
2496                         : Give one chance to correct a possible typo.
2497                         echo "$file.sh does not exist"
2498                         dflt=$file
2499                         rp="hint to use instead?"
2500                         . UU/myread
2501                         for file in $ans; do
2502                                 if $test -f "$src/hints/$file.sh"; then
2503                                         . $src/hints/$file.sh
2504                                         $cat $src/hints/$file.sh >> UU/config.sh
2505                                 elif $test X$ans = X -o X$ans = Xnone ; then
2506                                         : nothing
2507                                 else
2508                                         echo "$file.sh does not exist -- ignored."
2509                                 fi
2510                         done
2511                 fi
2512         done
2513
2514         hint=recommended
2515         : Remember our hint file for later.
2516         if $test -f "$src/hints/$file.sh" ; then
2517                 hintfile="$file"
2518         else
2519                 hintfile=''
2520         fi
2521 fi
2522 cd UU
2523 ;;
2524 *)
2525         echo " "
2526         echo "Fetching default answers from $config_sh..." >&4
2527         tmp_n="$n"
2528         tmp_c="$c"
2529         cd ..
2530         cp $config_sh config.sh 2>/dev/null
2531         chmod +w config.sh
2532         . ./config.sh
2533         cd UU
2534         cp ../config.sh .
2535         n="$tmp_n"
2536         c="$tmp_c"
2537         hint=previous
2538         ;;
2539 esac
2540 test "$override" && . ./optdef.sh
2541 myuname="$newmyuname"
2542
2543 : Restore computed paths
2544 for file in $loclist $trylist; do
2545         eval $file="\$_$file"
2546 done
2547
2548 cat << EOM
2549
2550 Configure uses the operating system name and version to set some defaults.
2551 The default value is probably right if the name rings a bell. Otherwise,
2552 since spelling matters for me, either accept the default or answer "none"
2553 to leave it blank.
2554
2555 EOM
2556 case "$osname" in
2557         ''|' ')
2558                 case "$hintfile" in
2559                 ''|' '|none) dflt=none ;;
2560                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2561                 esac
2562                 ;;
2563         *) dflt="$osname" ;;
2564 esac
2565 rp="Operating system name?"
2566 . ./myread
2567 case "$ans" in
2568 none)  osname='' ;;
2569 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2570 esac
2571 echo " "
2572 case "$osvers" in
2573         ''|' ')
2574                 case "$hintfile" in
2575                 ''|' '|none) dflt=none ;;
2576                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2577                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2578                         case "$dflt" in
2579                         ''|' ') dflt=none ;;
2580                         esac
2581                         ;;
2582                 esac
2583                 ;;
2584         *) dflt="$osvers" ;;
2585 esac
2586 rp="Operating system version?"
2587 . ./myread
2588 case "$ans" in
2589 none)  osvers='' ;;
2590 *) osvers="$ans" ;;
2591 esac
2592
2593
2594 . ./posthint.sh
2595
2596 : who configured the system
2597 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2598 cf_by=`(logname) 2>/dev/null`
2599 case "$cf_by" in
2600 "")
2601         cf_by=`(whoami) 2>/dev/null`
2602         case "$cf_by" in
2603         "") cf_by=unknown ;;
2604         esac ;;
2605 esac
2606
2607 : set up the script used to warn in case of inconsistency
2608 cat <<EOS >whoa
2609 $startsh
2610 EOS
2611 cat <<'EOSC' >>whoa
2612 dflt=y
2613 echo " "
2614 echo "*** WHOA THERE!!! ***" >&4
2615 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2616 rp="    Keep the $hint value?"
2617 . ./myread
2618 case "$ans" in
2619 y) td=$was; tu=$was;;
2620 esac
2621 EOSC
2622
2623 : function used to set $1 to $val
2624 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2625 case "$val$was" in
2626 $define$undef) . ./whoa; eval "$var=\$td";;
2627 $undef$define) . ./whoa; eval "$var=\$tu";;
2628 *) eval "$var=$val";;
2629 esac'
2630
2631 case "$usethreads" in
2632 $define|true|[yY]*)     dflt='y';;
2633 *) dflt='n';;
2634 esac
2635 cat <<EOM
2636
2637 Perl can be built to take advantage of threads on some systems.
2638 To do so, Configure can be run with -Dusethreads.
2639
2640 Note that threading is a highly experimental feature, and
2641 some known race conditions still remain.  If you choose to try
2642 it, be very sure to not actually deploy it for production
2643 purposes.  README.threads has more details, and is required
2644 reading if you enable threads.
2645
2646 If this doesn't make any sense to you, just accept the default '$dflt'.
2647 EOM
2648 rp='Build a threading Perl?'
2649 . ./myread
2650 case "$ans" in
2651 y|Y)    val="$define" ;;
2652 *)      val="$undef" ;;
2653 esac
2654 set usethreads
2655 eval $setvar
2656
2657 case "$usethreads" in
2658 $define)
2659         $cat <<EOM
2660
2661 As of 5.5.640, Perl has two different internal threading implementations,
2662 the 5.005 version (5005threads) and an interpreter-based version
2663 (ithreads) that has one interpreter per thread.  Both are very 
2664 experimental.  This arrangement exists to help developers work out
2665 which one is better.
2666
2667 If you're a casual user, you probably don't want interpreter-threads
2668 at this time.  There doesn't yet exist a way to create threads from
2669 within Perl in this model, i.e., "use Thread;" will NOT work.
2670 EOM
2671         : Default to ithreads unless overridden on command line or with
2672         : old config.sh
2673         dflt='y'
2674         case "$use5005threads" in
2675                 $define|true|[yY]*) dflt='n';;
2676         esac
2677         case "$useithreads" in
2678                 $undef|false|[nN]*) dflt='n';;
2679         esac
2680         rp='Use interpreter-based ithreads?'
2681         . ./myread
2682         case "$ans" in
2683         y|Y)    val="$define" ;;
2684         *)      val="$undef" ;;
2685         esac
2686         set useithreads
2687         eval $setvar
2688         : Now set use5005threads to the opposite value.
2689         case "$useithreads" in
2690         $define) val="$undef" ;;
2691         *) val="$define" ;;
2692         esac
2693         set use5005threads
2694         eval $setvar
2695         ;;
2696 *)
2697         useithreads="$undef"
2698         use5005threads="$undef"
2699         ;;
2700 esac
2701
2702 case "$d_oldpthreads" in
2703 '')     : Configure tests would be welcome here.  For now, assume undef.
2704         val="$undef" ;;
2705 *)      val="$d_oldpthreads" ;;
2706 esac
2707 set d_oldpthreads
2708 eval $setvar
2709
2710
2711 case "$usethreads" in
2712 "$define"|true|[yY]*)
2713 : Look for a hint-file generated 'call-back-unit'.  If the
2714 : user has specified that a threading perl is to be built,
2715 : we may need to set or change some other defaults.
2716         if $test -f usethreads.cbu; then
2717                 echo "Your platform has some specific hints for threaded builds, using them..."
2718                 . ./usethreads.cbu
2719         else
2720                 $cat <<EOM
2721 (Your platform doesn't have any specific hints for threaded builds.
2722  Assuming POSIX threads, then.)
2723 EOM
2724         fi
2725         ;;
2726 esac
2727
2728 cat <<EOM
2729
2730 Perl can be built so that multiple Perl interpreters can coexist
2731 within the same Perl executable.
2732 EOM
2733
2734 case "$useithreads" in
2735 $define)
2736         cat <<EOM
2737 This multiple interpreter support is required for interpreter-based threads.
2738 EOM
2739         val="$define"
2740         ;;
2741 *)      case "$usemultiplicity" in
2742         $define|true|[yY]*)     dflt='y';;
2743         *) dflt='n';;
2744         esac
2745         echo " "
2746         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
2747         rp='Build Perl for multiplicity?'
2748         . ./myread
2749         case "$ans" in
2750         y|Y)    val="$define" ;;
2751         *)      val="$undef" ;;
2752         esac
2753         ;;
2754 esac
2755 set usemultiplicity
2756 eval $setvar
2757
2758 : determine where manual pages are on this system
2759 echo " "
2760 case "$sysman" in
2761 '') 
2762         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
2763         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
2764         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
2765         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
2766         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
2767         sysman=`./loc . /usr/man/man1 $syspath`
2768         ;;
2769 esac
2770 if $test -d "$sysman"; then
2771         echo "System manual is in $sysman." >&4
2772 else
2773         echo "Could not find manual pages in source form." >&4
2774 fi
2775
2776 : see what memory models we can support
2777 case "$models" in
2778 '')
2779         $cat >pdp11.c <<'EOP'
2780 int main() {
2781 #ifdef pdp11
2782         exit(0);
2783 #else
2784         exit(1);
2785 #endif
2786 }
2787 EOP
2788         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
2789         if $test -f pdp11 && ./pdp11 2>/dev/null; then
2790                 dflt='unsplit split'
2791         else
2792                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
2793                 case "$tans" in
2794                 X) dflt='none';;
2795                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
2796                                 dflt='small'
2797                         else
2798                                 dflt=''
2799                         fi
2800                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
2801                                 dflt="$dflt medium"
2802                         fi
2803                         if $test -d /lib/large || $test -d /usr/lib/large; then
2804                                 dflt="$dflt large"
2805                         fi
2806                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
2807                                 dflt="$dflt huge"
2808                         fi
2809                 esac
2810         fi;;
2811 *) dflt="$models";;
2812 esac
2813 $cat <<EOM
2814  
2815 Some systems have different model sizes.  On most systems they are called
2816 small, medium, large, and huge.  On the PDP11 they are called unsplit and
2817 split.  If your system doesn't support different memory models, say "none".
2818 If you wish to force everything to one memory model, say "none" here and
2819 put the appropriate flags later when it asks you for other cc and ld flags.
2820 Venix systems may wish to put "none" and let the compiler figure things out.
2821 (In the following question multiple model names should be space separated.)
2822
2823 The default for most systems is "none".
2824
2825 EOM
2826 rp="Which memory models are supported?"
2827 . ./myread
2828 models="$ans"
2829
2830 case "$models" in
2831 none)
2832         small=''
2833         medium=''
2834         large=''
2835         huge=''
2836         unsplit=''
2837         split=''
2838         ;;
2839 *split)
2840         case "$split" in
2841         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
2842                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
2843                         dflt='-i'
2844                 else
2845                         dflt='none'
2846                 fi;;
2847         *) dflt="$split";;
2848         esac
2849         rp="What flag indicates separate I and D space?"
2850         . ./myread
2851         tans="$ans"
2852         case "$tans" in
2853         none) tans='';;
2854         esac
2855         split="$tans"
2856         unsplit='';;
2857 *large*|*small*|*medium*|*huge*)
2858         case "$models" in
2859         *large*)
2860                 case "$large" in
2861                 '') dflt='-Ml';;
2862                 *) dflt="$large";;
2863                 esac
2864         rp="What flag indicates large model?"
2865         . ./myread
2866         tans="$ans"
2867         case "$tans" in
2868         none) tans='';
2869         esac
2870         large="$tans";;
2871         *) large='';;
2872         esac
2873         case "$models" in
2874         *huge*) case "$huge" in
2875                 '') dflt='-Mh';;
2876                 *) dflt="$huge";;
2877                 esac
2878                 rp="What flag indicates huge model?"
2879                 . ./myread
2880                 tans="$ans"
2881                 case "$tans" in
2882                 none) tans='';
2883                 esac
2884                 huge="$tans";;
2885         *) huge="$large";;
2886         esac
2887         case "$models" in
2888         *medium*) case "$medium" in
2889                 '') dflt='-Mm';;
2890                 *) dflt="$medium";;
2891                 esac
2892                 rp="What flag indicates medium model?"
2893                 . ./myread
2894                 tans="$ans"
2895                 case "$tans" in
2896                 none) tans='';
2897                 esac
2898                 medium="$tans";;
2899         *) medium="$large";;
2900         esac
2901         case "$models" in
2902         *small*) case "$small" in
2903                 '') dflt='none';;
2904                 *) dflt="$small";;
2905                 esac
2906                 rp="What flag indicates small model?"
2907                 . ./myread
2908                 tans="$ans"
2909                 case "$tans" in
2910                 none) tans='';
2911                 esac
2912                 small="$tans";;
2913         *) small='';;
2914         esac
2915         ;;
2916 *)
2917         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
2918         ;;
2919 esac
2920 $rm -f pdp11.* pdp11
2921
2922 : make some quick guesses about what we are up against
2923 echo " "
2924 $echo $n "Hmm...  $c"
2925 echo exit 1 >bsd
2926 echo exit 1 >usg
2927 echo exit 1 >v7
2928 echo exit 1 >osf1
2929 echo exit 1 >eunice
2930 echo exit 1 >xenix
2931 echo exit 1 >venix
2932 echo exit 1 >os2
2933 d_bsd="$undef"
2934 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
2935 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
2936 then
2937         echo "Looks kind of like an OSF/1 system, but we'll see..."
2938         echo exit 0 >osf1
2939 elif test `echo abc | tr a-z A-Z` = Abc ; then
2940         xxx=`./loc addbib blurfl $pth`
2941         if $test -f $xxx; then
2942         echo "Looks kind of like a USG system with BSD features, but we'll see..."
2943                 echo exit 0 >bsd
2944                 echo exit 0 >usg
2945         else
2946                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
2947                         echo "Looks kind of like an extended USG system, but we'll see..."
2948                 else
2949                         echo "Looks kind of like a USG system, but we'll see..."
2950                 fi
2951                 echo exit 0 >usg
2952         fi
2953 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
2954         echo "Looks kind of like a BSD system, but we'll see..."
2955         d_bsd="$define"
2956         echo exit 0 >bsd
2957 else
2958         echo "Looks kind of like a Version 7 system, but we'll see..."
2959         echo exit 0 >v7
2960 fi
2961 case "$eunicefix" in
2962 *unixtovms*)
2963         $cat <<'EOI'
2964 There is, however, a strange, musty smell in the air that reminds me of
2965 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
2966 EOI
2967         echo exit 0 >eunice
2968         d_eunice="$define"
2969 : it so happens the Eunice I know will not run shell scripts in Unix format
2970         ;;
2971 *)
2972         echo " "
2973         echo "Congratulations.  You aren't running Eunice."
2974         d_eunice="$undef"
2975         ;;
2976 esac
2977 : Detect OS2.  The p_ variable is set above in the Head.U unit.
2978 case "$p_" in
2979 :) ;;
2980 *)
2981         $cat <<'EOI'
2982 I have the feeling something is not exactly right, however...don't tell me...
2983 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
2984 EOI
2985         echo exit 0 >os2
2986         ;;
2987 esac
2988 if test -f /xenix; then
2989         echo "Actually, this looks more like a XENIX system..."
2990         echo exit 0 >xenix
2991         d_xenix="$define"
2992 else
2993         echo " "
2994         echo "It's not Xenix..."
2995         d_xenix="$undef"
2996 fi
2997 chmod +x xenix
2998 $eunicefix xenix
2999 if test -f /venix; then
3000         echo "Actually, this looks more like a VENIX system..."
3001         echo exit 0 >venix
3002 else
3003         echo " "
3004         if ./xenix; then
3005                 : null
3006         else
3007                 echo "Nor is it Venix..."
3008         fi
3009 fi
3010 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3011 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3012 $rm -f foo
3013
3014 : see if we need a special compiler
3015 echo " "
3016 if ./usg; then
3017         case "$cc" in
3018         '') case "$Mcc" in
3019                 /*) dflt='Mcc';;
3020                 *) case "$large" in
3021                         -M*) dflt='cc';;
3022                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3023                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3024                                                 dflt='cc'
3025                                         else
3026                                                 dflt='cc -M'
3027                                         fi
3028                                 else
3029                                         dflt='cc'
3030                                 fi;;
3031                         esac;;
3032                 esac;;
3033         *)  dflt="$cc";;
3034         esac
3035         case "$dflt" in
3036         *M*)    $cat <<'EOM'
3037 On some older systems the default C compiler will not resolve multiple global
3038 references that happen to have the same name.  On some such systems the "Mcc"
3039 command may be used to force these to be resolved.  On other systems a "cc -M"
3040 command is required.  (Note that the -M flag on other systems indicates a
3041 memory model to use!) If you have the Gnu C compiler, you might wish to use
3042 that instead.
3043
3044 EOM
3045         ;;
3046         esac
3047         rp="Use which C compiler?"
3048         . ./myread
3049         cc="$ans"
3050 else
3051         case "$cc" in
3052         '') dflt=cc;;
3053         *) dflt="$cc";;
3054         esac
3055         rp="Use which C compiler?"
3056         . ./myread
3057         cc="$ans"
3058 fi
3059 : Look for a hint-file generated 'call-back-unit'.  Now that the
3060 : user has specified the compiler, we may need to set or change some
3061 : other defaults.
3062 if $test -f cc.cbu; then
3063     . ./cc.cbu
3064 fi
3065 echo " "
3066 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3067 $cat >gccvers.c <<EOM
3068 #include <stdio.h>
3069 int main() {
3070 #ifdef __GNUC__
3071 #ifdef __VERSION__
3072         printf("%s\n", __VERSION__);
3073 #else
3074         printf("%s\n", "1");
3075 #endif
3076 #endif
3077         exit(0);
3078 }
3079 EOM
3080 if $cc $ldflags -o gccvers gccvers.c; then
3081         gccversion=`./gccvers`
3082         case "$gccversion" in
3083         '') echo "You are not using GNU cc." ;;
3084         *)  echo "You are using GNU cc $gccversion."
3085             ;;
3086         esac
3087 else
3088         echo " "
3089         echo "*** WHOA THERE!!! ***" >&4
3090         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3091         case "$knowitall" in
3092         '')
3093         echo "    You'd better start hunting for one and let me know about it." >&4
3094                 exit 1
3095                 ;;
3096         esac
3097 fi
3098 $rm -f gccvers*
3099 case "$gccversion" in
3100 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3101 esac
3102
3103 : decide how portable to be.  Allow command line overrides.
3104 case "$d_portable" in
3105 "$undef") ;;
3106 *)      d_portable="$define" ;;
3107 esac
3108
3109 : set up shell script to do ~ expansion
3110 cat >filexp <<EOSS
3111 $startsh
3112 : expand filename
3113 case "\$1" in
3114  ~/*|~)
3115         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3116         ;;
3117  ~*)
3118         if $test -f /bin/csh; then
3119                 /bin/csh -f -c "glob \$1"
3120                 failed=\$?
3121                 echo ""
3122                 exit \$failed
3123         else
3124                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3125                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3126                 if $test ! -d "\$dir"; then
3127                         me=\`basename \$0\`
3128                         echo "\$me: can't locate home directory for: \$name" >&2
3129                         exit 1
3130                 fi
3131                 case "\$1" in
3132                 */*)
3133                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3134                         ;;
3135                 *)
3136                         echo \$dir
3137                         ;;
3138                 esac
3139         fi
3140         ;;
3141 *)
3142         echo \$1
3143         ;;
3144 esac
3145 EOSS
3146 chmod +x filexp
3147 $eunicefix filexp
3148
3149 : now set up to get a file name
3150 cat <<EOS >getfile
3151 $startsh
3152 EOS
3153 cat <<'EOSC' >>getfile
3154 tilde=''
3155 fullpath=''
3156 already=''
3157 skip=''
3158 none_ok=''
3159 exp_file=''
3160 nopath_ok=''
3161 orig_rp="$rp"
3162 orig_dflt="$dflt"
3163 case "$gfpth" in
3164 '') gfpth='.' ;;
3165 esac
3166
3167 case "$fn" in
3168 *\(*)
3169         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
3170         fn=`echo $fn | sed 's/(.*)//'`
3171         ;;
3172 esac
3173
3174 case "$fn" in
3175 *:*)
3176         loc_file=`expr $fn : '.*:\(.*\)'`
3177         fn=`expr $fn : '\(.*\):.*'`
3178         ;;
3179 esac
3180
3181 case "$fn" in
3182 *~*) tilde=true;;
3183 esac
3184 case "$fn" in
3185 */*) fullpath=true;;
3186 esac
3187 case "$fn" in
3188 *+*) skip=true;;
3189 esac
3190 case "$fn" in
3191 *n*) none_ok=true;;
3192 esac
3193 case "$fn" in
3194 *e*) exp_file=true;;
3195 esac
3196 case "$fn" in
3197 *p*) nopath_ok=true;;
3198 esac
3199
3200 case "$fn" in
3201 *f*) type='File';;
3202 *d*) type='Directory';;
3203 *l*) type='Locate';;
3204 esac
3205
3206 what="$type"
3207 case "$what" in
3208 Locate) what='File';;
3209 esac
3210
3211 case "$exp_file" in
3212 '')
3213         case "$d_portable" in
3214         "$define") ;;
3215         *) exp_file=true;;
3216         esac
3217         ;;
3218 esac
3219
3220 cd ..
3221 while test "$type"; do
3222         redo=''
3223         rp="$orig_rp"
3224         dflt="$orig_dflt"
3225         case "$tilde" in
3226         true) rp="$rp (~name ok)";;
3227         esac
3228         . UU/myread
3229         if test -f UU/getfile.ok && \
3230                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3231         then
3232                 value="$ans"
3233                 ansexp="$ans"
3234                 break
3235         fi
3236         case "$ans" in
3237         none)
3238                 value=''
3239                 ansexp=''
3240                 case "$none_ok" in
3241                 true) type='';;
3242                 esac
3243                 ;;
3244         *)
3245                 case "$tilde" in
3246                 '') value="$ans"
3247                         ansexp="$ans";;
3248                 *)
3249                         value=`UU/filexp $ans`
3250                         case $? in
3251                         0)
3252                                 if test "$ans" != "$value"; then
3253                                         echo "(That expands to $value on this system.)"
3254                                 fi
3255                                 ;;
3256                         *) value="$ans";;
3257                         esac
3258                         ansexp="$value"
3259                         case "$exp_file" in
3260                         '') value="$ans";;
3261                         esac
3262                         ;;
3263                 esac
3264                 case "$fullpath" in
3265                 true)
3266                         case "$ansexp" in
3267                         /*) value="$ansexp" ;;
3268                         *)
3269                                 redo=true
3270                                 case "$already" in
3271                                 true)
3272                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3273                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3274                                         ;;
3275                                 *)
3276                                 echo "Please give a full path name, starting with slash." >&4
3277                                         case "$tilde" in
3278                                         true)
3279                                 echo "Note that using ~name is ok provided it expands well." >&4
3280                                                 already=true
3281                                                 ;;
3282                                         esac
3283                                 esac
3284                                 ;;
3285                         esac
3286                         ;;
3287                 esac
3288                 case "$redo" in
3289                 '')
3290                         case "$type" in
3291                         File)
3292                                 for fp in $gfpth; do
3293                                         if test "X$fp" = X.; then
3294                                             pf="$ansexp"
3295                                         else    
3296                                             pf="$fp/$ansexp"
3297                                         fi
3298                                         if test -f "$pf"; then
3299                                                 type=''
3300                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3301                                         then
3302                                                 echo "($value is not a plain file, but that's ok.)"
3303                                                 type=''
3304                                         fi
3305                                         if test X"$type" = X; then
3306                                             value="$pf"
3307                                             break
3308                                         fi
3309                                 done
3310                                 ;;
3311                         Directory)
3312                                 for fp in $gfpth; do
3313                                         if test "X$fp" = X.; then
3314                                             pf="$ansexp"
3315                                         else    
3316                                             pf="$fp/$ansexp"
3317                                         fi
3318                                         if test -d "$pf"; then
3319                                                 type=''
3320                                                 value="$pf"
3321                                                 break
3322                                         fi
3323                                 done
3324                                 ;;
3325                         Locate)
3326                                 if test -d "$ansexp"; then
3327                                         echo "(Looking for $loc_file in directory $value.)"
3328                                         value="$value/$loc_file"
3329                                         ansexp="$ansexp/$loc_file"
3330                                 fi
3331                                 if test -f "$ansexp"; then
3332                                         type=''
3333                                 fi
3334                                 case "$nopath_ok" in
3335                                 true)   case "$value" in
3336                                         */*) ;;
3337                                         *)      echo "Assuming $value will be in people's path."
3338                                                 type=''
3339                                                 ;;
3340                                         esac
3341                                         ;;
3342                                 esac
3343                                 ;;
3344                         esac
3345
3346                         case "$skip" in
3347                         true) type='';
3348                         esac
3349
3350                         case "$type" in
3351                         '') ;;
3352                         *)
3353                                 if test "$fastread" = yes; then
3354                                         dflt=y
3355                                 else
3356                                         dflt=n
3357                                 fi
3358                                 rp="$what $value doesn't exist.  Use that name anyway?"
3359                                 . UU/myread
3360                                 dflt=''
3361                                 case "$ans" in
3362                                 y*) type='';;
3363                                 *) echo " ";;
3364                                 esac
3365                                 ;;
3366                         esac
3367                         ;;
3368                 esac
3369                 ;;
3370         esac
3371 done
3372 cd UU
3373 ans="$value"
3374 rp="$orig_rp"
3375 dflt="$orig_dflt"
3376 rm -f getfile.ok
3377 test "X$gfpthkeep" != Xy && gfpth=""
3378 EOSC
3379
3380 : What should the include directory be ?
3381 echo " "
3382 $echo $n "Hmm...  $c"
3383 dflt='/usr/include'
3384 incpath=''
3385 mips_type=''
3386 if $test -f /bin/mips && /bin/mips; then
3387         echo "Looks like a MIPS system..."
3388         $cat >usr.c <<'EOCP'
3389 #ifdef SYSTYPE_BSD43
3390 /bsd43
3391 #endif
3392 EOCP
3393         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3394                 dflt='/bsd43/usr/include'
3395                 incpath='/bsd43'
3396                 mips_type='BSD 4.3'
3397         else
3398                 mips_type='System V'
3399         fi
3400         $rm -f usr.c usr.out
3401         echo "and you're compiling with the $mips_type compiler and libraries."
3402         xxx_prompt=y
3403         echo "exit 0" >mips
3404 else
3405         echo "Doesn't look like a MIPS system."
3406         xxx_prompt=n
3407         echo "exit 1" >mips
3408 fi
3409 chmod +x mips
3410 $eunicefix mips
3411 case "$usrinc" in
3412 '') ;;
3413 *) dflt="$usrinc";;
3414 esac
3415 case "$xxx_prompt" in
3416 y)      fn=d/
3417         echo " "
3418         rp='Where are the include files you want to use?'
3419         . ./getfile
3420         usrinc="$ans"
3421         ;;
3422 *)      usrinc="$dflt"
3423         ;;
3424 esac
3425
3426 : see how we invoke the C preprocessor
3427 echo " "
3428 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3429 cat <<'EOT' >testcpp.c
3430 #define ABC abc
3431 #define XYZ xyz
3432 ABC.XYZ
3433 EOT
3434 cd ..
3435 if test ! -f cppstdin; then
3436         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3437                 # AIX cc -E doesn't show the absolute headerfile
3438                 # locations but we'll cheat by using the -M flag.
3439                 echo 'cat >.$$.c; rm -f .$$.u; '"$cc"' ${1+"$@"} -M -c .$$.c 2>/dev/null; test -s .$$.u && awk '"'"'$2 ~ /\.h$/ { print "# 0 \""$2"\"" }'"'"' .$$.u; rm -f .$$.o .$$.u; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' > cppstdin
3440         else
3441                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3442         fi
3443 else
3444         echo "Keeping your $hint cppstdin wrapper."
3445 fi
3446 chmod 755 cppstdin
3447 wrapper=`pwd`/cppstdin
3448 ok='false'
3449 cd UU
3450
3451 if $test "X$cppstdin" != "X" && \
3452         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3453         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3454 then
3455         echo "You used to use $cppstdin $cppminus so we'll use that again."
3456         case "$cpprun" in
3457         '') echo "But let's see if we can live without a wrapper..." ;;
3458         *)
3459                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3460                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3461                 then
3462                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3463                         ok='true'
3464                 else
3465                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3466                 fi
3467                 ;;
3468         esac
3469 else
3470         case "$cppstdin" in
3471         '') ;;
3472         *)
3473                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3474                 ;;
3475         esac
3476 fi
3477
3478 if $ok; then
3479         : nothing
3480 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3481         $cc -E <testcpp.c >testcpp.out 2>&1; \
3482         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3483         echo "Yup, it does."
3484         x_cpp="$cc -E"
3485         x_minus='';
3486 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3487         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3488         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3489         echo "Yup, it does."
3490         x_cpp="$cc -E"
3491         x_minus='-';
3492 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3493         $cc -P <testcpp.c >testcpp.out 2>&1; \
3494         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3495         echo "Yipee, that works!"
3496         x_cpp="$cc -P"
3497         x_minus='';
3498 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3499         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3500         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3501         echo "At long last!"
3502         x_cpp="$cc -P"
3503         x_minus='-';
3504 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3505         $cpp <testcpp.c >testcpp.out 2>&1; \
3506         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3507         echo "It works!"
3508         x_cpp="$cpp"
3509         x_minus='';
3510 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3511         $cpp - <testcpp.c >testcpp.out 2>&1; \
3512         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3513         echo "Hooray, it works!  I was beginning to wonder."
3514         x_cpp="$cpp"
3515         x_minus='-';
3516 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3517         $wrapper <testcpp.c >testcpp.out 2>&1; \
3518         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3519         x_cpp="$wrapper"
3520         x_minus=''
3521         echo "Eureka!"
3522 else
3523         dflt=''
3524         rp="No dice.  I can't find a C preprocessor.  Name one:"
3525         . ./myread
3526         x_cpp="$ans"
3527         x_minus=''
3528         $x_cpp <testcpp.c >testcpp.out 2>&1
3529         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3530                 echo "OK, that will do." >&4
3531         else
3532 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3533                 exit 1
3534         fi
3535 fi
3536
3537 case "$ok" in
3538 false)
3539         cppstdin="$x_cpp"
3540         cppminus="$x_minus"
3541         cpprun="$x_cpp"
3542         cpplast="$x_minus"
3543         set X $x_cpp
3544         shift
3545         case "$1" in
3546         "$cpp")
3547                 echo "Perhaps can we force $cc -E using a wrapper..."
3548                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3549                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3550                 then
3551                         echo "Yup, we can."
3552                         cppstdin="$wrapper"
3553                         cppminus='';
3554                 else
3555                         echo "Nope, we'll have to live without it..."
3556                 fi
3557                 ;;
3558         esac
3559         case "$cpprun" in
3560         "$wrapper")
3561                 cpprun=''
3562                 cpplast=''
3563                 ;;
3564         esac
3565         ;;
3566 esac
3567
3568 case "$cppstdin" in
3569 "$wrapper"|'cppstdin') ;;
3570 *) $rm -f $wrapper;;
3571 esac
3572 $rm -f testcpp.c testcpp.out
3573
3574 : Set private lib path
3575 case "$plibpth" in
3576 '') if ./mips; then
3577                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3578         fi;;
3579 esac
3580 case "$libpth" in
3581 ' ') dlist='';;
3582 '') dlist="$loclibpth $plibpth $glibpth";;
3583 *) dlist="$libpth";;
3584 esac
3585
3586 : Now check and see which directories actually exist, avoiding duplicates
3587 libpth=''
3588 for xxx in $dlist
3589 do
3590     if $test -d $xxx; then
3591                 case " $libpth " in
3592                 *" $xxx "*) ;;
3593                 *) libpth="$libpth $xxx";;
3594                 esac
3595     fi
3596 done
3597 $cat <<'EOM'
3598
3599 Some systems have incompatible or broken versions of libraries.  Among
3600 the directories listed in the question below, please remove any you
3601 know not to be holding relevant libraries, and add any that are needed.
3602 Say "none" for none.
3603
3604 EOM
3605 case "$libpth" in
3606 '') dflt='none';;
3607 *)
3608         set X $libpth
3609         shift
3610         dflt=${1+"$@"}
3611         ;;
3612 esac
3613 rp="Directories to use for library searches?"
3614 . ./myread
3615 case "$ans" in
3616 none) libpth=' ';;
3617 *) libpth="$ans";;
3618 esac
3619
3620 : compute shared library extension
3621 case "$so" in
3622 '')
3623         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3624                 dflt='sl'
3625         else
3626                 dflt='so'
3627         fi
3628         ;;
3629 *) dflt="$so";;
3630 esac
3631 $cat <<EOM
3632
3633 On some systems, shared libraries may be available.  Answer 'none' if
3634 you want to suppress searching of shared libraries for the remainder
3635 of this configuration.
3636
3637 EOM
3638 rp='What is the file extension used for shared libraries?'
3639 . ./myread
3640 so="$ans"
3641
3642 : Define several unixisms.
3643 : Hints files or command line option can be used to override them.
3644 : The convoluted testing is in case hints files set either the old
3645 : or the new name.
3646 case "$_exe" in
3647 '')     case "$exe_ext" in
3648     '') ;;
3649         *)      _exe="$exe_ext" ;;
3650         esac
3651         ;;
3652 esac
3653 case "$_a" in
3654 '')     case "$lib_ext" in
3655     '') _a='.a';;
3656         *)      _a="$lib_ext" ;;
3657         esac
3658         ;;
3659 esac
3660 case "$_o" in
3661 '') case "$obj_ext" in
3662         '')     _o='.o';;
3663         *)      _o="$obj_ext";;
3664         esac
3665         ;;
3666 esac
3667 case "$p_" in
3668 '') case "$path_sep" in
3669         '')     p_=':';;
3670         *)      p_="$path_sep";;
3671         esac
3672         ;;
3673 esac
3674 exe_ext=$_exe
3675 lib_ext=$_a
3676 obj_ext=$_o
3677 path_sep=$p_
3678
3679 : Which makefile gets called first.  This is used by make depend.
3680 case "$firstmakefile" in
3681 '') firstmakefile='makefile';;
3682 esac
3683
3684 case "$usesocks" in
3685 $define|true|[yY]*)     dflt='y';;
3686 *) dflt='n';;
3687 esac
3688 cat <<EOM
3689
3690 Perl can be built to use the SOCKS proxy protocol library.  To do so,
3691 Configure must be run with -Dusesocks.
3692
3693 If this doesn't make any sense to you, just accept the default '$dflt'.
3694 EOM
3695 rp='Build Perl for SOCKS?'
3696 . ./myread
3697 case "$ans" in
3698 y|Y)    val="$define" ;;     
3699 *)      val="$undef" ;;
3700 esac
3701 set usesocks
3702 eval $setvar
3703
3704 : Looking for optional libraries
3705 echo " "
3706 echo "Checking for optional libraries..." >&4
3707 case "$libs" in
3708 ' '|'') dflt='';;
3709 *) dflt="$libs";;
3710 esac
3711 case "$libswanted" in
3712 '') libswanted='c_s';;
3713 esac
3714 case "$usesocks" in
3715 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
3716 esac
3717 libsfound=''
3718 libsfiles=''
3719 libsdirs=''
3720 libspath=''
3721 for thisdir in $libpth $xlibpth; do
3722   test -d $thisdir && libspath="$libspath $thisdir"
3723 done
3724 for thislib in $libswanted; do
3725         for thisdir in $libspath; do
3726             xxx=''
3727             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3728                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
3729                 $test -f "$xxx" && eval $libscheck
3730                 $test -f "$xxx" && libstyle=shared
3731             fi
3732             if test ! -f "$xxx"; then
3733                 xxx=$thisdir/lib$thislib.$so
3734                 $test -f "$xxx" && eval $libscheck
3735                 $test -f "$xxx" && libstyle=shared
3736             fi  
3737             if test ! -f "$xxx"; then
3738                 xxx=$thisdir/lib$thislib$_a
3739                 $test -f "$xxx" && eval $libscheck
3740                 $test -f "$xxx" && libstyle=static
3741             fi
3742             if test ! -f "$xxx"; then
3743                 xxx=$thisdir/$thislib$_a
3744                 $test -f "$xxx" && eval $libscheck
3745                 $test -f "$xxx" && libstyle=static
3746             fi
3747             if test ! -f "$xxx"; then
3748                 xxx=$thisdir/lib${thislib}_s$_a
3749                 $test -f "$xxx" && eval $libscheck
3750                 $test -f "$xxx" && libstyle=static
3751                 $test -f "$xxx" && thislib=${thislib}_s
3752             fi
3753             if test ! -f "$xxx"; then
3754                 xxx=$thisdir/Slib$thislib$_a
3755                 $test -f "$xxx" && eval $libscheck
3756                 $test -f "$xxx" && libstyle=static
3757             fi
3758             if $test -f "$xxx"; then
3759                 case "$libstyle" in
3760                 shared) echo "Found -l$thislib (shared)." ;;
3761                 static) echo "Found -l$thislib." ;;
3762                 *)      echo "Found -l$thislib ($libstyle)." ;;
3763                 esac
3764                 case " $dflt " in
3765                 *"-l$thislib "*);;
3766                 *) dflt="$dflt -l$thislib"
3767                    libsfound="$libsfound $xxx"
3768                    yyy=`basename $xxx`
3769                    libsfiles="$libsfiles $yyy"
3770                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
3771                    case " $libsdirs " in
3772                    *" $yyy "*) ;;
3773                    *) libsdirs="$libsdirs $yyy" ;;
3774                    esac
3775                    ;;
3776                 esac
3777                 break
3778             fi  
3779         done
3780         if $test ! -f "$xxx"; then
3781             echo "No -l$thislib."
3782         fi
3783 done
3784 set X $dflt
3785 shift
3786 dflt="$*"
3787 case "$libs" in
3788 '') dflt="$dflt";;
3789 *) dflt="$libs";;
3790 esac
3791 case "$dflt" in
3792 ' '|'') dflt='none';;
3793 esac
3794
3795 $cat <<EOM
3796
3797 In order to compile $package on your machine, a number of libraries
3798 are usually needed.  Include any other special libraries here as well.
3799 Say "none" for none.  The default list is almost always right.
3800 EOM
3801
3802 echo " "
3803 rp="What libraries to use?"
3804 . ./myread
3805 case "$ans" in
3806 none) libs=' ';;
3807 *) libs="$ans";;
3808 esac
3809
3810 : determine optimization, if desired, or use for debug flag also
3811 case "$optimize" in
3812 ' '|$undef) dflt='none';;
3813 '') dflt='-O';;
3814 *) dflt="$optimize";;
3815 esac
3816 $cat <<EOH
3817
3818 By default, $package compiles with the -O flag to use the optimizer.
3819 Alternately, you might want to use the symbolic debugger, which uses
3820 the -g flag (on traditional Unix systems).  Either flag can be
3821 specified here.  To use neither flag, specify the word "none".
3822
3823 EOH
3824 rp="What optimizer/debugger flag should be used?"
3825 . ./myread
3826 optimize="$ans"
3827 case "$optimize" in
3828 'none') optimize=" ";;
3829 esac
3830
3831 dflt=''
3832 : We will not override a previous value, but we might want to
3833 : augment a hint file
3834 case "$hint" in
3835 default|recommended)
3836         case "$gccversion" in
3837         1*) dflt='-fpcc-struct-return' ;;
3838         esac
3839         case "$optimize" in
3840         *-g*) dflt="$dflt -DDEBUGGING";;
3841         esac
3842         case "$gccversion" in
3843         2*) if test -d /etc/conf/kconfig.d &&
3844                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
3845                 then
3846                         dflt="$dflt -posix"
3847                 fi
3848                 ;;
3849         esac
3850         case "$gccversion" in
3851         1*) ;;
3852         2.[0-8]*) ;;
3853         ?*)     echo " "
3854                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
3855                 echo 'int main(void) { return 0; }' > gcctest.c
3856                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
3857                         echo "Yes, it does." 2>&1
3858                         case "$ccflags" in
3859                         *strict-aliasing*) 
3860                                 echo "Leaving current flags $ccflags alone." 2>&1
3861                                 ;;
3862                         *) dflt="$dflt -fno-strict-aliasing" ;;
3863                         esac
3864                 else
3865                         echo "Nope, it doesn't, but that's ok." 2>&1
3866                 fi
3867                 ;;
3868         esac
3869         ;;
3870 esac
3871
3872 case "$mips_type" in
3873 *BSD*|'') inclwanted="$locincpth $usrinc";;
3874 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
3875 esac
3876 for thisincl in $inclwanted; do
3877         if $test -d $thisincl; then
3878                 if $test x$thisincl != x$usrinc; then
3879                         case "$dflt" in
3880                         *$thisincl*);;
3881                         *) dflt="$dflt -I$thisincl";;
3882                         esac
3883                 fi
3884         fi
3885 done
3886
3887 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
3888         xxx=true;
3889 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
3890         xxx=true;
3891 else
3892         xxx=false;
3893 fi;
3894 if $xxx; then
3895         case "$dflt" in
3896         *$2*);;
3897         *) dflt="$dflt -D$2";;
3898         esac;
3899 fi'
3900
3901 set signal.h LANGUAGE_C; eval $inctest
3902
3903 case "$usesocks" in
3904 $define)
3905         ccflags="$ccflags -DSOCKS"
3906         ;;
3907 esac
3908
3909 case "$hint" in
3910 default|recommended) dflt="$ccflags $dflt" ;;
3911 *) dflt="$ccflags";;
3912 esac
3913
3914 case "$dflt" in
3915 ''|' ') dflt=none;;
3916 esac
3917 $cat <<EOH
3918
3919 Your C compiler may want other flags.  For this question you should include
3920 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
3921 but you should NOT include libraries or ld flags like -lwhatever.  If you
3922 want $package to honor its debug switch, you should include -DDEBUGGING here.
3923 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
3924
3925 To use no flags, specify the word "none".
3926
3927 EOH
3928 set X $dflt
3929 shift
3930 dflt=${1+"$@"}
3931 rp="Any additional cc flags?"
3932 . ./myread
3933 case "$ans" in
3934 none) ccflags='';;
3935 *) ccflags="$ans";;
3936 esac
3937
3938 : the following weeds options from ccflags that are of no interest to cpp
3939 cppflags="$ccflags"
3940 case "$gccversion" in
3941 1*) cppflags="$cppflags -D__GNUC__"
3942 esac
3943 case "$mips_type" in
3944 '');;
3945 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
3946 esac
3947 case "$cppflags" in
3948 '');;
3949 *)
3950         echo " "
3951         echo "Let me guess what the preprocessor flags are..." >&4
3952         set X $cppflags
3953         shift
3954         cppflags=''
3955         $cat >cpp.c <<'EOM'
3956 #define BLURFL foo
3957
3958 BLURFL xx LFRULB
3959 EOM
3960         previous=''
3961         for flag in $*
3962         do
3963                 case "$flag" in
3964                 -*) ftry="$flag";;
3965                 *) ftry="$previous $flag";;
3966                 esac
3967                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
3968                         >cpp1.out 2>/dev/null && \
3969                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
3970                         >cpp2.out 2>/dev/null && \
3971                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
3972                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
3973                 then
3974                         cppflags="$cppflags $ftry"
3975                         previous=''
3976                 else
3977                         previous="$flag"
3978                 fi
3979         done
3980         set X $cppflags
3981         shift
3982         cppflags=${1+"$@"}
3983         case "$cppflags" in
3984         *-*)  echo "They appear to be: $cppflags";;
3985         esac
3986         $rm -f cpp.c cpp?.out
3987         ;;
3988 esac
3989
3990 : flags used in final linking phase
3991 case "$ldflags" in
3992 '') if ./venix; then
3993                 dflt='-i -z'
3994         else
3995                 dflt=''
3996         fi
3997         case "$ccflags" in
3998         *-posix*) dflt="$dflt -posix" ;;
3999         esac
4000         ;;
4001 *) dflt="$ldflags";;
4002 esac
4003
4004 : Try to guess additional flags to pick up local libraries.
4005 for thislibdir in $libpth; do
4006         case " $loclibpth " in
4007         *" $thislibdir "*)
4008                 case "$dflt " in 
4009                 *"-L$thislibdir "*) ;;
4010                 *)  dflt="$dflt -L$thislibdir" ;;
4011                 esac
4012                 ;;
4013         esac
4014 done
4015
4016 case "$dflt" in
4017 '') dflt='none' ;;
4018 esac
4019
4020 $cat <<EOH
4021
4022 Your C linker may need flags.  For this question you should
4023 include -L/whatever and any other flags used by the C linker, but you
4024 should NOT include libraries like -lwhatever.
4025
4026 Make sure you include the appropriate -L/path flags if your C linker
4027 does not normally search all of the directories you specified above,
4028 namely
4029         $libpth
4030 To use no flags, specify the word "none".
4031
4032 EOH
4033
4034 rp="Any additional ld flags (NOT including libraries)?"
4035 . ./myread
4036 case "$ans" in
4037 none) ldflags='';;
4038 *) ldflags="$ans";;
4039 esac
4040 rmlist="$rmlist pdp11"
4041
4042 : coherency check
4043 echo " "
4044 echo "Checking your choice of C compiler and flags for coherency..." >&4
4045 $cat > try.c <<'EOF'
4046 #include <stdio.h>
4047 int main() { printf("Ok\n"); exit(0); }
4048 EOF
4049 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4050 shift
4051 $cat >try.msg <<'EOM'
4052 I've tried to compile and run the following simple program:
4053
4054 EOM
4055 $cat try.c >> try.msg
4056
4057 $cat >> try.msg <<EOM
4058
4059 I used the command:
4060
4061         $*
4062         ./try
4063
4064 and I got the following output:
4065
4066 EOM
4067 dflt=y
4068 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4069         if sh -c './try' >>try.msg 2>&1; then
4070                 xxx=`./try`
4071                 case "$xxx" in
4072                 "Ok") dflt=n ;;
4073                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4074                         case " $libs " in
4075                         *" -lsfio "*)
4076                                 cat >> try.msg <<'EOQS'
4077 If $libs contains -lsfio, and sfio is mis-configured, then it
4078 sometimes (apparently) runs and exits with a 0 status, but with no
4079 output!  It may have to do with sfio's use of _exit vs. exit.
4080
4081 EOQS
4082                                 rp="You have a big problem.  Shall I abort Configure"
4083                                 dflt=y
4084                                 ;;
4085                         esac
4086                         ;;
4087                 esac
4088         else
4089                 echo "The program compiled OK, but exited with status $?." >>try.msg
4090                 rp="You have a problem.  Shall I abort Configure"
4091                 dflt=y
4092         fi
4093 else
4094         echo "I can't compile the test program." >>try.msg
4095         rp="You have a BIG problem.  Shall I abort Configure"
4096         dflt=y
4097 fi
4098 case "$dflt" in
4099 y)
4100         $cat try.msg >&4
4101         case "$knowitall" in
4102         '')
4103                 echo "(The supplied flags or libraries might be incorrect.)"
4104                 ;;
4105         *) dflt=n;;
4106         esac
4107         echo " "
4108         . ./myread
4109         case "$ans" in
4110         n*|N*) ;;
4111         *)      echo "Ok.  Stopping Configure." >&4
4112                 exit 1
4113                 ;;
4114         esac
4115         ;;
4116 n) echo "OK, that should do.";;
4117 esac
4118 $rm -f try try.* core
4119
4120 : define an is-a-typedef? function
4121 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4122 case "$inclist" in
4123 "") inclist="sys/types.h";;
4124 esac;
4125 eval "varval=\$$var";
4126 case "$varval" in
4127 "")
4128         $rm -f temp.c;
4129         for inc in $inclist; do
4130                 echo "#include <$inc>" >>temp.c;
4131         done;
4132         echo "#ifdef $type" >> temp.c;
4133         echo "printf(\"We have $type\");" >> temp.c;
4134         echo "#endif" >> temp.c;
4135         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4136         if $contains $type temp.E >/dev/null 2>&1; then
4137                 eval "$var=\$type";
4138         else
4139                 eval "$var=\$def";
4140         fi;
4141         $rm -f temp.?;;
4142 *) eval "$var=\$varval";;
4143 esac'
4144
4145 : define an is-a-typedef? function that prompts if the type is not available.
4146 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4147 case "$inclist" in
4148 "") inclist="sys/types.h";;
4149 esac;
4150 eval "varval=\$$var";
4151 case "$varval" in
4152 "")
4153         $rm -f temp.c;
4154         for inc in $inclist; do
4155                 echo "#include <$inc>" >>temp.c;
4156         done;
4157         echo "#ifdef $type" >> temp.c;
4158         echo "printf(\"We have $type\");" >> temp.c;
4159         echo "#endif" >> temp.c;
4160         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4161         echo " " ;
4162         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
4163         if $contains $type temp.E >/dev/null 2>&1; then
4164                 echo "$type found." >&4;
4165                 eval "$var=\$type";
4166         else
4167                 echo "$type NOT found." >&4;
4168                 dflt="$def";
4169                 . ./myread ;
4170                 eval "$var=\$ans";
4171         fi;
4172         $rm -f temp.?;;
4173 *) eval "$var=\$varval";;
4174 esac'
4175
4176 : define a shorthand compile call
4177 compile='
4178 mc_file=$1;
4179 shift;
4180 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4181 : define a shorthand compile call for compilations that should be ok.
4182 compile_ok='
4183 mc_file=$1;
4184 shift;
4185 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4186
4187 : check for lengths of integral types
4188 echo " "
4189 case "$intsize" in
4190 '')
4191         echo "Checking to see how big your integers are..." >&4
4192         $cat >intsize.c <<'EOCP'
4193 #include <stdio.h>
4194 int main()
4195 {
4196         printf("intsize=%d;\n", (int)sizeof(int));
4197         printf("longsize=%d;\n", (int)sizeof(long));
4198         printf("shortsize=%d;\n", (int)sizeof(short));
4199         exit(0);
4200 }
4201 EOCP
4202         set intsize
4203         if eval $compile_ok && ./intsize > /dev/null; then
4204                 eval `./intsize`
4205                 echo "Your integers are $intsize bytes long."
4206                 echo "Your long integers are $longsize bytes long."
4207                 echo "Your short integers are $shortsize bytes long."
4208         else
4209                 $cat >&4 <<EOM
4210 !
4211 Help! I can't compile and run the intsize test program: please enlighten me!
4212 (This is probably a misconfiguration in your system or libraries, and
4213 you really ought to fix it.  Still, I'll try anyway.)
4214 !
4215 EOM
4216                 dflt=4
4217                 rp="What is the size of an integer (in bytes)?"
4218                 . ./myread
4219                 intsize="$ans"
4220                 dflt=$intsize
4221                 rp="What is the size of a long integer (in bytes)?"
4222                 . ./myread
4223                 longsize="$ans"
4224                 dflt=2
4225                 rp="What is the size of a short integer (in bytes)?"
4226                 . ./myread
4227                 shortsize="$ans"
4228         fi
4229         ;;
4230 esac
4231 $rm -f intsize intsize.*
4232
4233 : see what type lseek is declared as in the kernel
4234 rp="What is the type used for lseek's offset on this system?"
4235 set off_t lseektype long stdio.h sys/types.h
4236 eval $typedef_ask
4237
4238 echo " "
4239 echo "Checking to see how big your file offsets are..." >&4
4240 $cat >try.c <<EOCP
4241 #include <sys/types.h>
4242 #include <stdio.h>
4243 int main()
4244 {
4245     printf("%d\n", (int)sizeof($lseektype));
4246     return(0); 
4247 }
4248 EOCP
4249 set try
4250 if eval $compile_ok; then
4251         lseeksize=`./try`
4252         echo "Your file offsets are $lseeksize bytes long."
4253 else
4254         dflt=$longsize
4255         echo " "
4256         echo "(I can't seem to compile the test program.  Guessing...)"
4257         rp="What is the size of your file offsets (in bytes)?"
4258         . ./myread
4259         lseeksize="$ans"
4260 fi
4261 $rm -f try.c try
4262
4263 : see what type file positions are declared as in the library
4264 rp="What is the type for file position used by fsetpos()?"
4265 set fpos_t fpostype long stdio.h sys/types.h
4266 eval $typedef_ask
4267
4268 echo " "
4269 case "$fpostype" in
4270 *_t) zzz="$fpostype"    ;;
4271 *)   zzz="fpos_t"       ;;
4272 esac
4273 echo "Checking the size of $zzz..." >&4 
4274 cat > try.c <<EOCP
4275 #include <sys/types.h>
4276 #include <stdio.h>
4277 int main() {
4278     printf("%d\n", (int)sizeof($fpostype));
4279     exit(0);
4280 }
4281 EOCP
4282 set try
4283 if eval $compile_ok; then
4284         yyy=`./try`
4285         case "$yyy" in
4286         '')     fpossize=4
4287                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4288                 ;;
4289         *)      fpossize=$yyy
4290                 echo "Your $zzz is $fpossize bytes long."
4291                 ;;
4292         esac
4293 else
4294         dflt="$longsize"
4295         echo " " >&4
4296         echo "(I can't compile the test program.  Guessing...)" >&4
4297         rp="What is the size of your file positions (in bytes)?"
4298         . ./myread
4299         fpossize="$ans"
4300 fi
4301
4302
4303
4304 # Backward compatibility (uselfs is deprecated).
4305 case "$uselfs" in
4306 "$define"|true|[yY]*)
4307         cat <<EOM >&4
4308
4309 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
4310 EOM
4311         uselargefiles="$define"
4312         ;;
4313 esac                          
4314
4315 case "$lseeksize:$fpossize" in
4316 8:8) cat <<EOM
4317
4318 You can have files larger than 2 gigabytes.
4319 EOM
4320    val="$define" ;;
4321 *)    case "$uselargefiles" in
4322    "$undef"|false|[nN]*) dflt='n' ;;
4323    *)   dflt='y' ;;
4324    esac
4325    cat <<EOM
4326
4327 Perl can be built to understand large files (files larger than 2 gigabytes)
4328 on some systems.  To do so, Configure can be run with -Duselargefiles.
4329
4330 If this doesn't make any sense to you, just accept the default '$dflt'.
4331 EOM
4332    rp='Try to understand large files, if available?'
4333    . ./myread
4334    case "$ans" in
4335    y|Y)         val="$define" ;;
4336    *)           val="$undef"  ;;
4337    esac
4338    ;;
4339 esac
4340 set uselargefiles
4341 eval $setvar
4342 case "$uselargefiles" in
4343 "$define")
4344 : Look for a hint-file generated 'call-back-unit'.  If the
4345 : user has specified that a large files perl is to be built,
4346 : we may need to set or change some other defaults.
4347         if $test -f uselargefiles.cbu; then
4348                 echo "Your platform has some specific hints for large file builds, using them..."
4349                 . ./uselargefiles.cbu
4350                 echo " "
4351                 echo "Rechecking to see how big your file offsets are..." >&4
4352                 $cat >try.c <<EOCP
4353 #include <sys/types.h>
4354 #include <stdio.h>
4355 int main()
4356 {
4357     printf("%d\n", (int)sizeof($lseektype));
4358     return(0); 
4359 }
4360 EOCP
4361                 set try
4362                 if eval $compile_ok; then
4363                         lseeksize=`./try`
4364                         $echo "Your file offsets are now $lseeksize bytes long."
4365                 else
4366                         dflt="$lseeksize"
4367                         echo " "
4368                         echo "(I can't seem to compile the test program.  Guessing...)"
4369                         rp="What is the size of your file offsets (in bytes)?"
4370                         . ./myread
4371                         lseeksize="$ans"
4372                 fi
4373                 case "$fpostype" in
4374                 *_t) zzz="$fpostype"    ;;
4375                 *)   zzz="fpos_t"       ;;
4376                 esac
4377                 $echo $n "Rechecking the size of $zzz...$c" >&4 
4378                 $cat > try.c <<EOCP
4379 #include <sys/types.h>
4380 #include <stdio.h>
4381 int main() {
4382     printf("%d\n", (int)sizeof($fpostype));
4383     exit(0);
4384 }
4385 EOCP
4386                 set try
4387                 if eval $compile_ok; then
4388                         yyy=`./try`
4389                         dflt="$lseeksize"
4390                         case "$yyy" in
4391                         '')     echo " "
4392                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4393                                 ;;
4394                         *)      fpossize=$yyy
4395                                 echo " $fpossize bytes." >&4
4396                                 ;;
4397                         esac
4398                 else
4399                         dflt="$fpossize"
4400                         echo " "
4401                         echo "(I can't compile the test program.  Guessing...)" >&4
4402                         rp="What is the size of your file positions (in bytes)?"
4403                         . ./myread
4404                         fpossize="$ans"
4405                 fi
4406                 $rm -f try.c try
4407         fi
4408         ;;
4409 esac
4410
4411
4412 case "$usemorebits" in
4413 "$define"|true|[yY]*)
4414         use64bitint="$define"
4415         uselongdouble="$define"
4416         usemorebits="$define"
4417         ;;
4418 *)      usemorebits="$undef"
4419         ;;
4420 esac
4421
4422
4423 case "$uselonglong" in
4424 "$define"|true|[yY]*)
4425         cat <<EOM >&4
4426
4427 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
4428 EOM
4429         use64bitint="$define"
4430         ;;
4431 esac                          
4432 case "$use64bits" in
4433 "$define"|true|[yY]*)
4434         cat <<EOM >&4
4435
4436 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
4437 EOM
4438         use64bitint="$define"
4439         ;;
4440 esac                          
4441 case "$use64bitints" in
4442 "$define"|true|[yY]*)
4443         cat <<EOM >&4
4444
4445 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
4446 EOM
4447         use64bitint="$define"
4448         ;;
4449 esac                          
4450 case "$use64bitsint" in
4451 "$define"|true|[yY]*)
4452         cat <<EOM >&4
4453
4454 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
4455 EOM
4456         use64bitint="$define"
4457         ;;
4458 esac                          
4459 case "$uselonglongs" in
4460 "$define"|true|[yY]*)
4461         cat <<EOM >&4
4462
4463 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
4464 EOM
4465         use64bitint="$define"
4466         ;;
4467 esac                          
4468 case "$use64bitsall" in
4469 "$define"|true|[yY]*)
4470         cat <<EOM >&4
4471
4472 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
4473 EOM
4474         use64bitall="$define"
4475         ;;
4476 esac                          
4477
4478 case "$ccflags" in
4479 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
4480 esac
4481 case "$use64bitall" in
4482 "$define"|true|[yY]*) use64bitint="$define" ;;
4483 esac
4484
4485 case "$longsize" in
4486 8) cat <<EOM
4487
4488 You have natively 64-bit long integers.
4489 EOM
4490    val="$define"
4491    ;;
4492 *) case "$use64bitint" in
4493    "$define"|true|[yY]*) dflt='y';;
4494    *) dflt='n';;
4495    esac
4496    cat <<EOM
4497
4498 Perl can be built to take advantage of 64-bit integer types
4499 on some systems.  To do so, Configure can be run with -Duse64bitint.
4500 Choosing this option will most probably introduce binary incompatibilities.
4501
4502 If this doesn't make any sense to you, just accept the default '$dflt'.
4503 EOM
4504    rp='Try to use 64-bit integers, if available?'
4505    . ./myread
4506    case "$ans" in
4507    [yY]*) val="$define" ;;
4508    *)     val="$undef"  ;;
4509    esac
4510    ;;
4511 esac
4512 set use64bitint
4513 eval $setvar
4514
4515 cat <<EOM
4516
4517 You may also choose to try maximal 64-bitness.  It means using as much
4518 64-bitness as possible on the platform.  This in turn means even more
4519 binary incompatibilities.  On the other hand, your platform may not
4520 have any more 64-bitness available than what you already have chosen.
4521
4522 If this doesn't make any sense to you, just accept the default '$dflt'.
4523 EOM
4524 rp='Try to use maximal 64-bit support, if available?'
4525 case "$use64bitall" in
4526 "$define"|true|[yY]*) dflt='y' ;;
4527 *) case "$longsize" in
4528    8) dflt='y' ;;
4529    *) dflt='n' ;;
4530    esac
4531    ;;
4532 esac    
4533 . ./myread
4534 case "$ans" in
4535 [yY]*) val="$define" ;;
4536 *)     val="$undef"  ;;
4537 esac
4538 set use64bitall
4539 eval $setvar
4540 case "$use64bitall" in
4541 "$define")
4542         case "$use64bitint" in
4543         "$undef")
4544                 cat <<EOM
4545
4546 Since you have chosen a maximally 64-bit build, I'm also turning on
4547 the use of 64-bit integers.
4548 EOM
4549                 use64bitint="$define" ;;
4550         esac
4551         ;;
4552 esac
4553
4554 case "$use64bitint" in
4555 "$define"|true|[yY]*)
4556 : Look for a hint-file generated 'call-back-unit'.  If the
4557 : user has specified that a 64-bit perl is to be built,
4558 : we may need to set or change some other defaults.
4559         if $test -f use64bitint.cbu; then
4560                 echo "Your platform has some specific hints for 64-bit integers, using them..."
4561                 . ./use64bitint.cbu
4562         fi
4563         case "$longsize" in
4564         4) case "$archname64" in
4565            '') archname64=64int ;;
4566            esac
4567            ;;
4568         esac
4569         ;;
4570 esac
4571
4572 case "$use64bitall" in
4573 "$define"|true|[yY]*)
4574 : Look for a hint-file generated 'call-back-unit'.  If the
4575 : user has specified that a maximally 64-bit perl is to be built,
4576 : we may need to set or change some other defaults.
4577         if $test -f use64bitall.cbu; then
4578                 echo "Your platform has some specific hints for 64-bit builds, using them..."
4579                 . ./use64bitall.cbu
4580         fi
4581         case "$longsize" in
4582         4) case "$archname64" in
4583            ''|64int) archname64=64all ;;
4584            esac
4585            ;;
4586         esac
4587         ;;
4588 esac
4589
4590 : determine the architecture name
4591 echo " "
4592 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
4593         tarch=`arch`"-$osname"
4594 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
4595         if uname -m > tmparch 2>&1 ; then
4596                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
4597                         -e 's/$/'"-$osname/" tmparch`
4598         else
4599                 tarch="$osname"
4600         fi
4601         $rm -f tmparch
4602 else
4603         tarch="$osname"
4604 fi
4605 case "$myarchname" in
4606 ''|"$tarch") ;;
4607 *)
4608         echo "(Your architecture name used to be $myarchname.)"
4609         archname=''
4610         ;;
4611 esac
4612 myarchname="$tarch"
4613 case "$archname" in
4614 '') dflt="$tarch";;
4615 *) dflt="$archname";;
4616 esac
4617 rp='What is your architecture name'
4618 . ./myread
4619 archname="$ans"
4620 case "$usethreads" in
4621 $define)
4622         echo "Threads selected." >&4
4623         case "$archname" in
4624         *-thread*) echo "...and architecture name already has -thread." >&4
4625                 ;;
4626         *)      archname="$archname-thread"
4627                 echo "...setting architecture name to $archname." >&4
4628                 ;;
4629         esac
4630         ;;
4631 esac
4632 case "$usemultiplicity" in
4633 $define)
4634         echo "Multiplicity selected." >&4
4635         case "$archname" in
4636         *-multi*) echo "...and architecture name already has -multi." >&4
4637                 ;;
4638         *)      archname="$archname-multi"
4639                 echo "...setting architecture name to $archname." >&4
4640                 ;;
4641         esac
4642         ;;
4643 esac
4644 case "$use64bitint" in
4645 $define)
4646         case "$archname64" in
4647         '')
4648                 ;;
4649         *)
4650                 case "$archname" in
4651                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
4652                         ;;
4653                 *)      archname="$archname-$archname64"
4654                         echo "...setting architecture name to $archname." >&4
4655                         ;;
4656                 esac
4657                 ;;
4658         esac
4659 esac
4660
4661 : determine root of directory hierarchy where package will be installed.
4662 case "$prefix" in
4663 '')
4664         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
4665         ;;
4666 *)
4667         dflt="$prefix"
4668         ;;
4669 esac
4670 $cat <<EOM
4671
4672 By default, $package will be installed in $dflt/bin, manual pages
4673 under $dflt/man, etc..., i.e. with $dflt as prefix for all
4674 installation directories. Typically this is something like /usr/local.
4675 If you wish to have binaries under /usr/bin but other parts of the
4676 installation under /usr/local, that's ok: you will be prompted
4677 separately for each of the installation directories, the prefix being
4678 only used to set the defaults.
4679
4680 EOM
4681 fn=d~
4682 rp='Installation prefix to use?'
4683 . ./getfile
4684 oldprefix=''
4685 case "$prefix" in
4686 '') ;;
4687 *)
4688         case "$ans" in
4689         "$prefix") ;;
4690         *) oldprefix="$prefix";;
4691         esac
4692         ;;
4693 esac
4694 prefix="$ans"
4695 prefixexp="$ansexp"
4696
4697 : is AFS running?
4698 echo " "
4699 case "$afs" in
4700 $define|true)   afs=true ;;
4701 $undef|false)   afs=false ;;
4702 *)      if test -d /afs; then
4703                 afs=true
4704         else
4705                 afs=false
4706         fi
4707         ;;
4708 esac
4709 if $afs; then
4710         echo "AFS may be running... I'll be extra cautious then..." >&4
4711 else
4712         echo "AFS does not seem to be running..." >&4
4713 fi
4714
4715 : determine installation prefix for where package is to be installed.
4716 if $afs; then 
4717 $cat <<EOM
4718
4719 Since you are running AFS, I need to distinguish the directory in which
4720 files will reside from the directory in which they are installed (and from
4721 which they are presumably copied to the former directory by occult means).
4722
4723 EOM
4724         case "$installprefix" in
4725         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
4726         *) dflt="$installprefix";;
4727         esac
4728 else
4729 $cat <<EOM
4730
4731 In some special cases, particularly when building $package for distribution,
4732 it is convenient to distinguish between the directory in which files should 
4733 be installed from the directory ($prefix) in which they 
4734 will eventually reside.  For most users, these two directories are the same.
4735
4736 EOM
4737         case "$installprefix" in
4738         '') dflt=$prefix ;;
4739         *) dflt=$installprefix;;
4740         esac
4741 fi
4742 fn=d~
4743 rp='What installation prefix should I use for installing files?'
4744 . ./getfile
4745 installprefix="$ans"
4746 installprefixexp="$ansexp"
4747
4748 : set the prefixit variable, to compute a suitable default value
4749 prefixit='case "$3" in
4750 ""|none)
4751         case "$oldprefix" in
4752         "") eval "$1=\"\$$2\"";;
4753         *)
4754                 case "$3" in
4755                 "") eval "$1=";;
4756                 none)
4757                         eval "tp=\"\$$2\"";
4758                         case "$tp" in
4759                         ""|" ") eval "$1=\"\$$2\"";;
4760                         *) eval "$1=";;
4761                         esac;;
4762                 esac;;
4763         esac;;
4764 *)
4765         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
4766         case "$tp" in
4767         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
4768         /*-$oldprefix/*|\~*-$oldprefix/*)
4769                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
4770         *) eval "$1=\"\$$2\"";;
4771         esac;;
4772 esac'
4773
4774
4775 : get the patchlevel
4776 echo " "
4777 echo "Getting the current patchlevel..." >&4
4778 if $test -r $rsrc/patchlevel.h;then
4779         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
4780         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
4781         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4782         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
4783         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
4784         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4785 else
4786         revision=0
4787         patchlevel=0
4788         subversion=0
4789         api_revision=0
4790         api_version=0
4791         api_subversion=0
4792 fi
4793 $echo $n "(You have $package revision $revision" $c
4794 $echo $n " patchlevel $patchlevel" $c
4795 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
4796 echo ".)"
4797 case "$osname" in
4798 dos|vms)
4799         : XXX Should be a Configure test for double-dots in filenames.
4800         version=`echo $revision $patchlevel $subversion | \
4801                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
4802         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4803                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
4804         ;;
4805 *)
4806         version=`echo $revision $patchlevel $subversion | \
4807                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
4808         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4809                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
4810         ;;
4811 esac
4812 : Special case the 5.005_xx maintenance series, which used 5.005
4813 : without any subversion label as a subdirectory in $sitelib
4814 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
4815         api_versionstring='5.005'
4816 fi
4817
4818 : determine installation style
4819 : For now, try to deduce it from prefix unless it is already set.
4820 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
4821 case "$installstyle" in
4822 '')     case "$prefix" in
4823                 *perl*) dflt='lib';;
4824                 *) dflt='lib/perl5' ;;
4825         esac
4826         ;;
4827 *)      dflt="$installstyle" ;;
4828 esac
4829 : Probably not worth prompting for this since we prompt for all
4830 : the directories individually, and the prompt would be too long and
4831 : confusing anyway.
4832 installstyle=$dflt
4833
4834 : determine where private library files go
4835 : Usual default is /usr/local/lib/perl5/$version.
4836 : Also allow things like /opt/perl/lib/$version, since 
4837 : /opt/perl/lib/perl5... would be redundant.
4838 : The default "style" setting is made in installstyle.U
4839 case "$installstyle" in
4840 *lib/perl5*) set dflt privlib lib/$package/$version ;;
4841 *)       set dflt privlib lib/$version ;;
4842 esac
4843 eval $prefixit
4844 $cat <<EOM
4845
4846 There are some auxiliary files for $package that need to be put into a
4847 private library directory that is accessible by everyone.
4848
4849 EOM
4850 fn=d~+
4851 rp='Pathname where the private library files will reside?'
4852 . ./getfile
4853 privlib="$ans"
4854 privlibexp="$ansexp"
4855 : Change installation prefix, if necessary.
4856 if $test X"$prefix" != X"$installprefix"; then
4857         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
4858 else
4859         installprivlib="$privlibexp"
4860 fi
4861
4862 : set the prefixup variable, to restore leading tilda escape
4863 prefixup='case "$prefixexp" in
4864 "$prefix") ;;
4865 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
4866 esac'
4867
4868 : determine where public architecture dependent libraries go
4869 set archlib archlib
4870 eval $prefixit
4871 : privlib default is /usr/local/lib/$package/$version
4872 : archlib default is /usr/local/lib/$package/$version/$archname
4873 : privlib may have an optional trailing /share.
4874 tdflt=`echo $privlib | $sed 's,/share$,,'`
4875 tdflt=$tdflt/$archname
4876 case "$archlib" in
4877 '')     dflt=$tdflt
4878         ;;
4879 *)      dflt="$archlib"
4880     ;;
4881 esac
4882 $cat <<EOM
4883
4884 $spackage contains architecture-dependent library files.  If you are
4885 sharing libraries in a heterogeneous environment, you might store
4886 these files in a separate location.  Otherwise, you can just include
4887 them with the rest of the public library files.
4888
4889 EOM
4890 fn=d+~
4891 rp='Where do you want to put the public architecture-dependent libraries?'
4892 . ./getfile
4893 archlib="$ans"
4894 archlibexp="$ansexp"
4895 if $test X"$archlib" = X"$privlib"; then
4896         d_archlib="$undef"
4897 else
4898         d_archlib="$define"
4899 fi
4900 : Change installation prefix, if necessary.
4901 if $test X"$prefix" != X"$installprefix"; then
4902         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
4903 else
4904         installarchlib="$archlibexp"
4905 fi
4906
4907
4908 : Binary compatibility with 5.005 is not possible for builds
4909 : with advanced features
4910 case "$usethreads$usemultiplicity" in
4911 *define*)
4912         bincompat5005="$undef"
4913         d_bincompat5005="$undef"
4914         ;;
4915 *)      $cat <<EOM
4916
4917 Perl 5.006 can be compiled for binary compatibility with 5.005.
4918 If you decide to do so, you will be able to continue using most
4919 of the extensions that were compiled for Perl 5.005.
4920
4921 EOM
4922         case "$bincompat5005$d_bincompat5005" in
4923         *"$undef"*) dflt=n ;;
4924         *) dflt=y ;;
4925         esac
4926         rp='Binary compatibility with Perl 5.005?'
4927         . ./myread
4928         case "$ans" in
4929         y*) val="$define" ;;
4930         *)  val="$undef" ;;
4931         esac
4932         set d_bincompat5005
4933         eval $setvar
4934         case "$d_bincompat5005" in
4935         "$define")
4936                 bincompat5005="$define"
4937                 ;;
4938         *)      bincompat5005="$undef"
4939                 d_bincompat5005="$undef"
4940                 ;;
4941         esac
4942         ;;
4943 esac
4944
4945
4946 : see if setuid scripts can be secure
4947 $cat <<EOM
4948
4949 Some kernels have a bug that prevents setuid #! scripts from being
4950 secure.  Some sites have disabled setuid #! scripts because of this.
4951
4952 First let's decide if your kernel supports secure setuid #! scripts.
4953 (If setuid #! scripts would be secure but have been disabled anyway,
4954 don't say that they are secure if asked.)
4955
4956 EOM
4957
4958 val="$undef"
4959 if $test -d /dev/fd; then
4960         echo "#!$ls" >reflect
4961         chmod +x,u+s reflect
4962         ./reflect >flect 2>&1
4963         if $contains "/dev/fd" flect >/dev/null; then
4964                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
4965                 val="$define"
4966         else
4967                 $cat <<EOM
4968 If you are not sure if they are secure, I can check but I'll need a
4969 username and password different from the one you are using right now.
4970 If you don't have such a username or don't want me to test, simply
4971 enter 'none'.
4972
4973 EOM
4974                 rp='Other username to test security of setuid scripts with?'
4975                 dflt='none'
4976                 . ./myread
4977                 case "$ans" in
4978                 n|none)
4979                         case "$d_suidsafe" in
4980                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
4981                                 dflt=n;;
4982                         "$undef")
4983                                 echo "Well, the $hint value is *not* secure." >&4
4984                                 dflt=n;;
4985                         *)      echo "Well, the $hint value *is* secure." >&4
4986                                 dflt=y;;
4987                         esac
4988                         ;;
4989                 *)
4990                         $rm -f reflect flect
4991                         echo "#!$ls" >reflect
4992                         chmod +x,u+s reflect
4993                         echo >flect
4994                         chmod a+w flect
4995                         echo '"su" will (probably) prompt you for '"$ans's password."
4996                         su $ans -c './reflect >flect'
4997                         if $contains "/dev/fd" flect >/dev/null; then
4998                                 echo "Okay, it looks like setuid scripts are secure." >&4
4999                                 dflt=y
5000                         else
5001                                 echo "I don't think setuid scripts are secure." >&4
5002                                 dflt=n
5003                         fi
5004                         ;;
5005                 esac
5006                 rp='Does your kernel have *secure* setuid scripts?'
5007                 . ./myread
5008                 case "$ans" in
5009                 [yY]*)  val="$define";;
5010                 *)      val="$undef";;
5011                 esac
5012         fi
5013 else
5014         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
5015         echo "(That's for file descriptors, not floppy disks.)"
5016         val="$undef"
5017 fi
5018 set d_suidsafe
5019 eval $setvar
5020
5021 $rm -f reflect flect
5022
5023 : now see if they want to do setuid emulation
5024 echo " "
5025 val="$undef"
5026 case "$d_suidsafe" in
5027 "$define")
5028         val="$undef"
5029         echo "No need to emulate SUID scripts since they are secure here." >& 4
5030         ;;
5031 *)
5032         $cat <<EOM
5033 Some systems have disabled setuid scripts, especially systems where
5034 setuid scripts cannot be secure.  On systems where setuid scripts have
5035 been disabled, the setuid/setgid bits on scripts are currently
5036 useless.  It is possible for $package to detect those bits and emulate
5037 setuid/setgid in a secure fashion.  This emulation will only work if
5038 setuid scripts have been disabled in your kernel.
5039
5040 EOM
5041         case "$d_dosuid" in
5042         "$define") dflt=y ;;
5043         *) dflt=n ;;
5044         esac
5045         rp="Do you want to do setuid/setgid emulation?"
5046         . ./myread
5047         case "$ans" in
5048         [yY]*)  val="$define";;
5049         *)      val="$undef";;
5050         esac
5051         ;;
5052 esac
5053 set d_dosuid
5054 eval $setvar
5055
5056 : determine filename position in cpp output
5057 echo " "
5058 echo "Computing filename position in cpp output for #include directives..." >&4
5059 echo '#include <stdio.h>' > foo.c
5060 $cat >fieldn <<EOF
5061 $startsh
5062 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
5063 $grep '^[       ]*#.*stdio\.h' | \
5064 while read cline; do
5065         pos=1
5066         set \$cline
5067         while $test \$# -gt 0; do
5068                 if $test -r \`echo \$1 | $tr -d '"'\`; then
5069                         echo "\$pos"
5070                         exit 0
5071                 fi
5072                 shift
5073                 pos=\`expr \$pos + 1\`
5074         done
5075 done
5076 EOF
5077 chmod +x fieldn
5078 fieldn=`./fieldn`
5079 $rm -f foo.c fieldn
5080 case $fieldn in
5081 '') pos='???';;
5082 1) pos=first;;
5083 2) pos=second;;
5084 3) pos=third;;
5085 *) pos="${fieldn}th";;
5086 esac
5087 echo "Your cpp writes the filename in the $pos field of the line."
5088
5089 : locate header file
5090 $cat >findhdr <<EOF
5091 $startsh
5092 wanted=\$1
5093 name=''
5094 for usrincdir in $usrinc
5095 do
5096         if test -f \$usrincdir/\$wanted; then
5097                 echo "\$usrincdir/\$wanted"
5098                 exit 0
5099         fi
5100 done
5101 awkprg='{ print \$$fieldn }'
5102 echo "#include <\$wanted>" > foo\$\$.c
5103 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
5104 $grep "^[       ]*#.*\$wanted" | \
5105 while read cline; do
5106         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
5107         case "\$name" in
5108         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
5109         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
5110         *) exit 2;;
5111         esac;
5112 done;
5113 #
5114 # status = 0: grep returned 0 lines, case statement not executed
5115 # status = 1: headerfile found
5116 # status = 2: while loop executed, no headerfile found
5117 #
5118 status=\$?
5119 $rm -f foo\$\$.c;
5120 if test \$status -eq 1; then
5121         exit 0;
5122 fi
5123 exit 1
5124 EOF
5125 chmod +x findhdr
5126
5127 : define an alternate in-header-list? function
5128 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
5129 cont=true; xxf="echo \"<\$1> found.\" >&4";
5130 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
5131 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
5132 esac;
5133 case $# in 4) instead=instead;; *) instead="at last";; esac;
5134 while $test "$cont"; do
5135         xxx=`./findhdr $1`
5136         var=$2; eval "was=\$$2";
5137         if $test "$xxx" && $test -r "$xxx";
5138         then eval $xxf;
5139         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5140                 cont="";
5141         else eval $xxnf;
5142         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5143         set $yyy; shift; shift; yyy=$@;
5144         case $# in 0) cont="";;
5145         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5146                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5147         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5148                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5149         esac;
5150 done;
5151 while $test "$yyy";
5152 do set $yyy; var=$2; eval "was=\$$2";
5153         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5154         set $yyy; shift; shift; yyy=$@;
5155 done'
5156
5157 : see if this is a malloc.h system
5158 set malloc.h i_malloc
5159 eval $inhdr
5160
5161 : see if stdlib is available
5162 set stdlib.h i_stdlib
5163 eval $inhdr
5164
5165 : determine which malloc to compile in
5166 echo " "
5167 case "$usemymalloc" in
5168 ''|[yY]*|true|$define)  dflt='y' ;;
5169 *)      dflt='n' ;;
5170 esac
5171 rp="Do you wish to attempt to use the malloc that comes with $package?"
5172 . ./myread
5173 usemymalloc="$ans"
5174 case "$ans" in
5175 y*|true)
5176         usemymalloc='y'
5177         mallocsrc='malloc.c'
5178         mallocobj="malloc$_o"
5179         d_mymalloc="$define"
5180         case "$libs" in
5181         *-lmalloc*)
5182                 : Remove malloc from list of libraries to use
5183                 echo "Removing unneeded -lmalloc from library list" >&4
5184                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
5185                 shift
5186                 libs="$*"
5187                 echo "libs = $libs" >&4
5188                 ;;
5189         esac
5190         ;;
5191 *)
5192         usemymalloc='n'
5193         mallocsrc=''
5194         mallocobj=''
5195         d_mymalloc="$undef"
5196         ;;
5197 esac
5198
5199 : compute the return types of malloc and free
5200 echo " "
5201 $cat >malloc.c <<END
5202 #$i_malloc I_MALLOC
5203 #$i_stdlib I_STDLIB
5204 #include <stdio.h>
5205 #include <sys/types.h>
5206 #ifdef I_MALLOC
5207 #include <malloc.h>
5208 #endif
5209 #ifdef I_STDLIB
5210 #include <stdlib.h>
5211 #endif
5212 #ifdef TRY_MALLOC
5213 void *malloc();
5214 #endif
5215 #ifdef TRY_FREE
5216 void free();
5217 #endif
5218 END
5219 case "$malloctype" in
5220 '')
5221         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
5222                 malloctype='void *'
5223         else
5224                 malloctype='char *'
5225         fi
5226         ;;
5227 esac
5228 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
5229
5230 case "$freetype" in
5231 '')
5232         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
5233                 freetype='void'
5234         else
5235                 freetype='int'
5236         fi
5237         ;;
5238 esac
5239 echo "Your system uses $freetype free(), it would seem." >&4
5240 $rm -f malloc.[co]
5241 $cat <<EOM
5242
5243 The installation process will also create a directory for
5244 vendor-supplied add-ons.  Vendors who supply perl with their system
5245 may find it convenient to place all vendor-supplied files in this
5246 directory rather than in the main distribution directory.  This will
5247 ease upgrades between binary-compatible maintenance versions of perl.
5248
5249 Of course you may also use these directories in whatever way you see
5250 fit.  For example, you might use them to access modules shared over a
5251 company-wide network.
5252
5253 The default answer should be fine for most people.
5254 This causes further questions about vendor add-ons to be skipped
5255 and no vendor-specific directories will be configured for perl.
5256
5257 EOM
5258 rp='Do you want to configure vendor-specific add-on directories?'
5259 case "$usevendorprefix" in
5260 define|true|[yY]*) dflt=y ;;
5261 *)      : User may have set vendorprefix directly on Configure command line.
5262         case "$vendorprefix" in
5263         ''|' ') dflt=n ;;
5264         *)      dflt=y ;;
5265         esac
5266         ;;
5267 esac
5268 . ./myread
5269 case "$ans" in
5270 [yY]*)  fn=d~+
5271         rp='Installation prefix to use for vendor-supplied add-ons?'
5272         case "$vendorprefix" in
5273         '') dflt='' ;;
5274         *)  dflt=$vendorprefix ;;
5275         esac
5276         . ./getfile
5277         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
5278         oldvendorprefix=''
5279         case "$vendorprefix" in
5280         '') ;;
5281         *)      case "$ans" in
5282                 "$prefix") ;;
5283                 *) oldvendorprefix="$prefix";;
5284                 esac
5285                 ;;
5286         esac
5287         usevendorprefix="$define"
5288         vendorprefix="$ans"
5289         vendorprefixexp="$ansexp"
5290         ;;
5291 *)      usevendorprefix="$undef"
5292         vendorprefix=''
5293         vendorprefixexp=''
5294         ;;
5295 esac
5296
5297 case "$vendorprefix" in
5298 '')     d_vendorlib="$undef"
5299         vendorlib=''
5300         vendorlibexp=''
5301         ;;
5302 *)      d_vendorlib="$define"
5303         : determine where vendor-supplied modules go.
5304         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
5305         case "$vendorlib" in
5306         '')
5307                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5308                 case "$installstyle" in
5309                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
5310                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
5311                 esac
5312                 ;;
5313         *)      dflt="$vendorlib"
5314                 ;;
5315         esac
5316         fn=d~+
5317         rp='Pathname for the vendor-supplied library files?'
5318         . ./getfile
5319         vendorlib="$ans"
5320         vendorlibexp="$ansexp"
5321         ;;
5322 esac
5323 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
5324 : Change installation prefix, if necessary.
5325 if $test X"$prefix" != X"$installprefix"; then
5326         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
5327 else
5328         installvendorlib="$vendorlibexp"
5329 fi
5330
5331 case "$vendorprefix" in
5332 '')     d_vendorarch="$undef"
5333         vendorarch=''
5334         vendorarchexp=''
5335         ;;
5336 *)      d_vendorarch="$define"
5337         : determine where vendor-supplied architecture-dependent libraries go.
5338         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
5339         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
5340         : vendorlib may have an optional trailing /share.
5341         case "$vendorarch" in
5342         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
5343                 dflt="$dflt/$archname"
5344                 ;;
5345         *)      dflt="$vendorarch" ;;
5346         esac
5347         fn=d~+
5348         rp='Pathname for vendor-supplied architecture-dependent files?'
5349         . ./getfile
5350         vendorarch="$ans"
5351         vendorarchexp="$ansexp"
5352         ;;
5353 esac
5354 : Change installation prefix, if necessary.
5355 if $test X"$prefix" != X"$installprefix"; then
5356         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
5357 else
5358         installvendorarch="$vendorarchexp"
5359 fi
5360
5361 : Cruising for prototypes
5362 echo " "
5363 echo "Checking out function prototypes..." >&4
5364 $cat >prototype.c <<'EOCP'
5365 int main(int argc, char *argv[]) {
5366         exit(0);}
5367 EOCP
5368 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
5369         echo "Your C compiler appears to support function prototypes."
5370         val="$define"
5371 else
5372         echo "Your C compiler doesn't seem to understand function prototypes."
5373         val="$undef"
5374 fi
5375 set prototype
5376 eval $setvar
5377 $rm -f prototype*
5378
5379 case "$prototype" in
5380 "$define") ;;
5381 *)      ansi2knr='ansi2knr'
5382         echo " "
5383         cat <<EOM >&4
5384
5385 $me:  FATAL ERROR:
5386 This version of $package can only be compiled by a compiler that 
5387 understands function prototypes.  Unfortunately, your C compiler 
5388         $cc $ccflags
5389 doesn't seem to understand them.  Sorry about that.
5390
5391 If GNU cc is available for your system, perhaps you could try that instead.  
5392
5393 Eventually, we hope to support building Perl with pre-ANSI compilers.
5394 If you would like to help in that effort, please contact <perlbug@perl.org>.
5395
5396 Aborting Configure now.
5397 EOM
5398         exit 2
5399         ;;
5400 esac
5401
5402 : determine where public executables go
5403 echo " "
5404 set dflt bin bin
5405 eval $prefixit
5406 fn=d~
5407 rp='Pathname where the public executables will reside?'
5408 . ./getfile
5409 if $test "X$ansexp" != "X$binexp"; then
5410         installbin=''
5411 fi
5412 bin="$ans"
5413 binexp="$ansexp"
5414 : Change installation prefix, if necessary.
5415 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
5416 if $test X"$prefix" != X"$installprefix"; then
5417         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
5418 else
5419         installbin="$binexp"
5420 fi
5421
5422 : Find perl5.005 or later.
5423 echo "Looking for a previously installed perl5.005 or later... "
5424 case "$perl5" in
5425 '')     for tdir in `echo "$binexp:$PATH" | $sed "s/$path_sep/ /g"`; do
5426                 : Check if this perl is recent and can load a simple module
5427                 if $test -x $tdir/perl && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
5428                         perl5=$tdir/perl
5429                         break;
5430                 elif $test -x $tdir/perl5 && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
5431                         perl5=$tdir/perl
5432                         break;
5433                 fi
5434         done
5435         ;;
5436 *)      perl5="$perl5"
5437         ;;
5438 esac
5439 case "$perl5" in
5440 '')     echo "None found.  That's ok.";;
5441 *)      echo "Using $perl5." ;;
5442 esac
5443
5444 $cat <<EOM
5445
5446 After $package is installed, you may wish to install various
5447 add-on modules and utilities.  Typically, these add-ons will
5448 be installed under $prefix with the rest
5449 of this package.  However, you may wish to install such add-ons
5450 elsewhere under a different prefix.
5451
5452 If you do not wish to put everything under a single prefix, that's
5453 ok.  You will be prompted for the individual locations; this siteprefix
5454 is only used to suggest the defaults.
5455
5456 The default should be fine for most people.
5457
5458 EOM
5459 fn=d~+
5460 rp='Installation prefix to use for add-on modules and utilities?'
5461 : XXX Here might be another good place for an installstyle setting.
5462 case "$siteprefix" in
5463 '') dflt=$prefix ;;
5464 *)  dflt=$siteprefix ;;
5465 esac
5466 . ./getfile
5467 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
5468 oldsiteprefix=''
5469 case "$siteprefix" in
5470 '') ;;
5471 *)      case "$ans" in
5472         "$prefix") ;;
5473         *) oldsiteprefix="$prefix";;
5474         esac
5475         ;;
5476 esac
5477 siteprefix="$ans"
5478 siteprefixexp="$ansexp"
5479
5480 : determine where site specific libraries go.
5481 : Usual default is /usr/local/lib/perl5/site_perl/$version
5482 : The default "style" setting is made in installstyle.U
5483 : XXX No longer works with Prefixit stuff.
5484 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5485 case "$sitelib" in
5486 '') case "$installstyle" in
5487         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
5488         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
5489         esac
5490         ;;
5491 *)      dflt="$sitelib"
5492         ;;
5493 esac
5494 $cat <<EOM
5495
5496 The installation process will create a directory for
5497 site-specific extensions and modules.  Most users find it convenient
5498 to place all site-specific files in this directory rather than in the
5499 main distribution directory.
5500
5501 EOM
5502 fn=d~+
5503 rp='Pathname for the site-specific library files?'
5504 . ./getfile
5505 sitelib="$ans"
5506 sitelibexp="$ansexp"
5507 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
5508 : Change installation prefix, if necessary.
5509 if $test X"$prefix" != X"$installprefix"; then
5510         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
5511 else
5512         installsitelib="$sitelibexp"
5513 fi
5514
5515 : Determine list of previous versions to include in @INC
5516 $cat > getverlist <<EOPL
5517 #!$perl5 -w
5518 use File::Basename;
5519 \$api_versionstring = "$api_versionstring";
5520 \$version = "$version";
5521 \$sitelib = "$sitelib";
5522 \$archname = "$archname";
5523 EOPL
5524         $cat >> getverlist <<'EOPL'
5525 # Can't have leading @ because metaconfig interprets it as a command!
5526 ;@inc_version_list=();
5527 $stem=dirname($sitelib);
5528 # XXX Redo to do opendir/readdir? 
5529 if (-d $stem) {
5530     chdir($stem);
5531     ;@candidates = glob("5.*");
5532 }
5533 else {
5534     ;@candidates = ();
5535 }
5536
5537 # XXX ToDo:  These comparisons must be reworked when two-digit
5538 # subversions come along, so that 5.7.10 compares as greater than
5539 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
5540 # widespread that we can use the built-in version vectors rather
5541 # than reinventing them here.  For 5.6.0, however, we must
5542 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
5543 foreach $d (@candidates) {
5544     if ($d lt $version) {
5545         if ($d ge $api_versionstring) {
5546             unshift(@inc_version_list, "$d/$archname", $d);
5547         }
5548         elsif ($d ge "5.005") {
5549             unshift(@inc_version_list, $d);
5550         }
5551     }
5552     else {
5553         # Skip newer version.  I.e. don't look in
5554         # 5.7.0 if we're installing 5.6.1.
5555     }
5556 }
5557
5558 if (@inc_version_list) {
5559     print join(' ', @inc_version_list);
5560 }
5561 else {
5562     # Blank space to preserve value for next Configure run.
5563     print " ";
5564 }
5565 EOPL
5566 chmod +x getverlist
5567 case "$inc_version_list" in
5568 '')     if test -x "$perl5"; then
5569                 dflt=`$perl5 getverlist`
5570         else
5571                 dflt='none'
5572         fi
5573         ;;
5574 $undef) dflt='none' ;;
5575 *)  dflt="$inc_version_list" ;;
5576 esac
5577 case "$dflt" in
5578 ''|' ') dflt=none ;;
5579 esac
5580 $cat <<'EOM'
5581
5582 In order to ease the process of upgrading, this version of perl 
5583 can be configured to use modules built and installed with earlier 
5584 versions of perl that were installed under $prefix.  Specify here
5585 the list of earlier versions that this version of perl should check.
5586 If Configure detected no earlier versions of perl installed under
5587 $prefix, then the list will be empty.  Answer 'none' to tell perl
5588 to not search earlier versions.
5589
5590 The default should almost always be sensible, so if you're not sure,
5591 just accept the default.
5592 EOM
5593
5594 rp='List of earlier versions to include in @INC?'
5595 . ./myread
5596 case "$ans" in
5597 [Nn]one|''|' ') inc_version_list=' ' ;;
5598 *) inc_version_list="$ans" ;;
5599 esac
5600 case "$inc_version_list" in
5601 ''|' ') 
5602         inc_version_list_init='0';;
5603 *)      inc_version_list_init=`echo $inc_version_list |
5604                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
5605         ;;
5606 esac
5607 $rm -f getverlist
5608
5609 : determine whether to install perl also as /usr/bin/perl
5610
5611 echo " "
5612 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
5613         $cat <<EOM
5614 Many scripts expect perl to be installed as /usr/bin/perl.
5615 I can install the perl you are about to compile also as /usr/bin/perl
5616 (in addition to $installbin/perl).
5617 EOM
5618         case "$installusrbinperl" in
5619         "$undef"|[nN]*) dflt='n';;
5620         *)              dflt='y';;
5621         esac
5622         rp="Do you want to install perl as /usr/bin/perl?"
5623         . ./myread
5624         case "$ans" in
5625         [yY]*)  val="$define";;
5626         *)      val="$undef" ;;
5627         esac
5628 else
5629         val="$undef"
5630 fi
5631 set installusrbinperl
5632 eval $setvar
5633
5634 echo " "
5635 echo "Checking for GNU C Library..." >&4
5636 cat >gnulibc.c <<EOM
5637 #include <stdio.h>
5638 int main()
5639 {
5640 #ifdef __GLIBC__
5641     exit(0);
5642 #else
5643     exit(1);
5644 #endif
5645 }
5646 EOM
5647 set gnulibc
5648 if eval $compile_ok && ./gnulibc; then
5649         val="$define"
5650         echo "You are using the GNU C Library"
5651 else
5652         val="$undef"
5653         echo "You are not using the GNU C Library"
5654 fi
5655 $rm -f gnulibc*
5656 set d_gnulibc
5657 eval $setvar
5658
5659 : see if nm is to be used to determine whether a symbol is defined or not
5660 case "$usenm" in
5661 '')
5662         dflt=''
5663         case "$d_gnulibc" in
5664         "$define")
5665                 echo " "
5666                 echo "nm probably won't work on the GNU C Library." >&4
5667                 dflt=n
5668                 ;;
5669         esac
5670         case "$dflt" in
5671         '') 
5672                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5673                         echo " "
5674                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5675                         echo "'nm' won't be sufficient on this sytem." >&4
5676                         dflt=n
5677                 fi
5678                 ;;
5679         esac
5680         case "$dflt" in
5681         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5682                 if $test $dflt -gt 20; then
5683                         dflt=y
5684                 else
5685                         dflt=n
5686                 fi
5687                 ;;
5688         esac
5689         ;;
5690 *)
5691         case "$usenm" in
5692         true|$define) dflt=y;;
5693         *) dflt=n;;
5694         esac
5695         ;;
5696 esac
5697 $cat <<EOM
5698
5699 I can use $nm to extract the symbols from your C libraries. This
5700 is a time consuming task which may generate huge output on the disk (up
5701 to 3 megabytes) but that should make the symbols extraction faster. The
5702 alternative is to skip the 'nm' extraction part and to compile a small
5703 test program instead to determine whether each symbol is present. If
5704 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5705 this may be the best solution.
5706
5707 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5708
5709 EOM
5710 rp="Shall I use $nm to extract C symbols from the libraries?"
5711 . ./myread
5712 case "$ans" in
5713 [Nn]*) usenm=false;;
5714 *) usenm=true;;
5715 esac
5716
5717 runnm=$usenm
5718 case "$reuseval" in
5719 true) runnm=false;;
5720 esac
5721
5722 : nm options which may be necessary
5723 case "$nm_opt" in
5724 '') if $test -f /mach_boot; then
5725                 nm_opt=''       # Mach
5726         elif $test -d /usr/ccs/lib; then
5727                 nm_opt='-p'     # Solaris (and SunOS?)
5728         elif $test -f /dgux; then
5729                 nm_opt='-p'     # DG-UX
5730         elif $test -f /lib64/rld; then
5731                 nm_opt='-p'     # 64-bit Irix
5732         else
5733                 nm_opt=''
5734         fi;;
5735 esac
5736
5737 : nm options which may be necessary for shared libraries but illegal
5738 : for archive libraries.  Thank you, Linux.
5739 case "$nm_so_opt" in
5740 '')     case "$myuname" in
5741         *linux*)
5742                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5743                         nm_so_opt='--dynamic'
5744                 fi
5745                 ;;
5746         esac
5747         ;;
5748 esac
5749
5750 case "$runnm" in
5751 true)
5752 : get list of predefined functions in a handy place
5753 echo " "
5754 case "$libc" in
5755 '') libc=unknown
5756         case "$libs" in
5757         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5758         esac
5759         ;;
5760 esac
5761 libnames='';
5762 case "$libs" in
5763 '') ;;
5764 *)  for thislib in $libs; do
5765         case "$thislib" in
5766         -lc|-lc_s)
5767                 : Handle C library specially below.
5768                 ;;
5769         -l*)
5770                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5771                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5772                         :
5773                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5774                         :
5775                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5776                         :
5777                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5778                         :
5779                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5780                         :
5781                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5782                         :
5783                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5784                         :
5785                 else
5786                         try=''
5787                 fi
5788                 libnames="$libnames $try"
5789                 ;;
5790         *) libnames="$libnames $thislib" ;;
5791         esac
5792         done
5793         ;;
5794 esac
5795 xxx=normal
5796 case "$libc" in
5797 unknown)
5798         set /lib/libc.$so
5799         for xxx in $libpth; do
5800                 $test -r $1 || set $xxx/libc.$so
5801                 : The messy sed command sorts on library version numbers.
5802                 $test -r $1 || \
5803                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5804                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5805                                 h
5806                                 s/[0-9][0-9]*/0000&/g
5807                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5808                                 G
5809                                 s/\n/ /' | \
5810                          sort | $sed -e 's/^.* //'`
5811                 eval set \$$#
5812         done
5813         $test -r $1 || set /usr/ccs/lib/libc.$so
5814         $test -r $1 || set /lib/libsys_s$_a
5815         ;;
5816 *)
5817         set blurfl
5818         ;;
5819 esac
5820 if $test -r "$1"; then
5821         echo "Your (shared) C library seems to be in $1."
5822         libc="$1"
5823 elif $test -r /lib/libc && $test -r /lib/clib; then
5824         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5825         xxx=apollo
5826         libc='/lib/clib /lib/libc'
5827         if $test -r /lib/syslib; then
5828                 echo "(Your math library is in /lib/syslib.)"
5829                 libc="$libc /lib/syslib"
5830         fi
5831 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5832         echo "Your C library seems to be in $libc, as you said before."
5833 elif $test -r $incpath/usr/lib/libc$_a; then
5834         libc=$incpath/usr/lib/libc$_a;
5835         echo "Your C library seems to be in $libc.  That's fine."
5836 elif $test -r /lib/libc$_a; then
5837         libc=/lib/libc$_a;
5838         echo "Your C library seems to be in $libc.  You're normal."
5839 else
5840         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5841                 :
5842         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5843                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5844         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5845                 :
5846         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5847                 :
5848         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5849                 :
5850         else
5851                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5852         fi
5853         if $test -r "$tans"; then
5854                 echo "Your C library seems to be in $tans, of all places."
5855                 libc=$tans
5856         else
5857                 libc='blurfl'
5858         fi
5859 fi
5860 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5861         dflt="$libc"
5862         cat <<EOM
5863
5864 If the guess above is wrong (which it might be if you're using a strange
5865 compiler, or your machine supports multiple models), you can override it here.
5866
5867 EOM
5868 else
5869         dflt=''
5870         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
5871         cat >&4 <<EOM
5872 I can't seem to find your C library.  I've looked in the following places:
5873
5874 EOM
5875         $sed 's/^/      /' libpath
5876         cat <<EOM
5877
5878 None of these seems to contain your C library. I need to get its name...
5879
5880 EOM
5881 fi
5882 fn=f
5883 rp='Where is your C library?'
5884 . ./getfile
5885 libc="$ans"
5886
5887 echo " "
5888 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
5889 set X `cat libnames`
5890 shift
5891 xxx=files
5892 case $# in 1) xxx=file; esac
5893 echo "Extracting names from the following $xxx for later perusal:" >&4
5894 echo " "
5895 $sed 's/^/      /' libnames >&4
5896 echo " "
5897 $echo $n "This may take a while...$c" >&4
5898
5899 for file in $*; do
5900         case $file in
5901         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5902         *) $nm $nm_opt $file 2>/dev/null;;
5903         esac
5904 done >libc.tmp
5905
5906 $echo $n ".$c"
5907 $grep fprintf libc.tmp > libc.ptf
5908 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5909 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5910 xxx='[ADTSIW]'
5911 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5912         eval $xscan;\
5913         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5914                 eval $xrun
5915 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5916         eval $xscan;\
5917         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5918                 eval $xrun
5919 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5920         eval $xscan;\
5921         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5922                 eval $xrun
5923 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5924         eval $xscan;\
5925         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5926                 eval $xrun
5927 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5928         eval $xscan;\
5929         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5930                 eval $xrun
5931 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5932         eval $xscan;\
5933         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5934                 eval $xrun
5935 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5936                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5937         eval $xscan;\
5938         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5939                 eval $xrun
5940 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5941         eval $xscan;\
5942         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5943                 eval $xrun
5944 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5945         eval $xscan;\
5946         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5947                 eval $xrun
5948 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5949         eval $xscan;\
5950         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5951                 eval $xrun
5952 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5953         eval $xscan;\
5954         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5955                 eval $xrun
5956 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5957         eval $xscan;\
5958         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5959                 eval $xrun
5960 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5961         eval $xscan;\
5962         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5963                 eval $xrun
5964 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5965         eval $xscan;\
5966         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5967                 eval $xrun
5968 else
5969         $nm -p $* 2>/dev/null >libc.tmp
5970         $grep fprintf libc.tmp > libc.ptf
5971         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5972                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5973         then
5974                 nm_opt='-p'
5975                 eval $xrun
5976         else
5977                 echo " "
5978                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5979                 com=''
5980                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5981                         for thisname in $libnames $libc; do
5982                                 $ar t $thisname >>libc.tmp
5983                         done
5984                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5985                         echo "Ok." >&4
5986                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5987                         # Repeat libc to extract forwarders to DLL entries too
5988                         for thisname in $libnames $libc; do
5989                                 $ar tv $thisname >>libc.tmp
5990                                 # Revision 50 of EMX has bug in $ar.
5991                                 # it will not extract forwarders to DLL entries
5992                                 # Use emximp which will extract exactly them.
5993                                 emximp -o tmp.imp $thisname \
5994                                     2>/dev/null && \
5995                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5996                                     < tmp.imp >>libc.tmp
5997                                 $rm tmp.imp
5998                         done
5999                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
6000                         echo "Ok." >&4
6001                 else
6002                         echo "$ar didn't seem to work right." >&4
6003                         echo "Maybe this is a Cray...trying bld instead..." >&4
6004                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
6005                         then
6006                                 for thisname in $libnames; do
6007                                         bld t $libnames | \
6008                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
6009                                         $ar t $thisname >>libc.tmp
6010                                 done
6011                                 echo "Ok." >&4
6012                         else
6013                                 echo "That didn't work either.  Giving up." >&4
6014                                 exit 1
6015                         fi
6016                 fi
6017         fi
6018 fi
6019 nm_extract="$com"
6020 if $test -f /lib/syscalls.exp; then
6021         echo " "
6022         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
6023         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
6024 fi
6025 ;;
6026 esac
6027 $rm -f libnames libpath
6028
6029 : see if dld is available
6030 set dld.h i_dld
6031 eval $inhdr
6032
6033 : is a C symbol defined?
6034 csym='tlook=$1;
6035 case "$3" in
6036 -v) tf=libc.tmp; tc=""; tdc="";;
6037 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
6038 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
6039 esac;
6040 tx=yes;
6041 case "$reuseval-$4" in
6042 true-) ;;
6043 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
6044 esac;
6045 case "$tx" in
6046 yes)
6047         case "$runnm" in
6048         true)
6049                 if $contains $tlook $tf >/dev/null 2>&1;
6050                 then tval=true;
6051                 else tval=false;
6052                 fi;;
6053         *)
6054                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
6055                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
6056                 then tval=true;
6057                 else tval=false;
6058                 fi;
6059                 $rm -f t t.c;;
6060         esac;;
6061 *)
6062         case "$tval" in
6063         $define) tval=true;;
6064         *) tval=false;;
6065         esac;;
6066 esac;
6067 eval "$2=$tval"'
6068
6069 : define an is-in-libc? function
6070 inlibc='echo " "; td=$define; tu=$undef;
6071 sym=$1; var=$2; eval "was=\$$2";
6072 tx=yes;
6073 case "$reuseval$was" in
6074 true) ;;
6075 true*) tx=no;;
6076 esac;
6077 case "$tx" in
6078 yes)
6079         set $sym tres -f;
6080         eval $csym;
6081         case "$tres" in
6082         true)
6083                 echo "$sym() found." >&4;
6084                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
6085         *)
6086                 echo "$sym() NOT found." >&4;
6087                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
6088         esac;;
6089 *)
6090         case "$was" in
6091         $define) echo "$sym() found." >&4;;
6092         *) echo "$sym() NOT found." >&4;;
6093         esac;;
6094 esac'
6095
6096 : see if dlopen exists
6097 xxx_runnm="$runnm"
6098 runnm=false
6099 set dlopen d_dlopen
6100 eval $inlibc
6101 runnm="$xxx_runnm"
6102
6103 : determine which dynamic loading, if any, to compile in
6104 echo " "
6105 dldir="ext/DynaLoader"
6106 case "$usedl" in
6107 $define|y|true)
6108         dflt='y'
6109         usedl="$define"
6110         ;;
6111 $undef|n|false)
6112         dflt='n'
6113         usedl="$undef"
6114         ;;
6115 *) 
6116         dflt='n'
6117         case "$d_dlopen" in
6118             $define) dflt='y' ;;
6119         esac
6120         case "$i_dld" in
6121             $define) dflt='y' ;;
6122         esac
6123         : Does a dl_xxx.xs file exist for this operating system
6124         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
6125         ;;
6126 esac
6127 rp="Do you wish to use dynamic loading?"
6128 . ./myread
6129 usedl="$ans"
6130 case "$ans" in
6131 y*) usedl="$define"
6132         case "$dlsrc" in
6133         '')
6134                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
6135                         dflt="$dldir/dl_${osname}.xs"
6136                 elif $test "$d_dlopen" = "$define" ; then
6137                         dflt="$dldir/dl_dlopen.xs"
6138                 elif $test "$i_dld" = "$define" ; then
6139                         dflt="$dldir/dl_dld.xs"
6140                 else
6141                         dflt=''
6142                 fi
6143                 ;;
6144         *)      dflt="$dldir/$dlsrc"
6145                 ;;
6146         esac
6147     echo "The following dynamic loading files are available:"
6148         : Can not go over to $dldir because getfile has path hard-coded in.
6149         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
6150         rp="Source file to use for dynamic loading"
6151         fn="fne"
6152         gfpth="$src"
6153         . ./getfile
6154         usedl="$define"
6155         : emulate basename
6156         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
6157
6158         $cat << EOM
6159
6160 Some systems may require passing special flags to $cc -c to
6161 compile modules that will be used to create a shared library.
6162 To use no flags, say "none".
6163
6164 EOM
6165     case "$cccdlflags" in
6166     '') case "$gccversion" in
6167                 '') case "$osname" in
6168                         hpux)   dflt='+z' ;;
6169                         next)   dflt='none' ;;
6170                         irix*)  dflt='-KPIC' ;;
6171                         svr4*|esix*|solaris) dflt='-KPIC' ;;
6172                         sunos)  dflt='-pic' ;;
6173                         *)      dflt='none' ;;
6174                     esac
6175                         ;;
6176                 *)  case "$osname" in
6177                         svr4*|esix*|solaris) dflt='-fPIC' ;;
6178                         *)      dflt='-fpic' ;;
6179                     esac ;;
6180             esac ;;
6181         ' ') dflt='none' ;;
6182     *)  dflt="$cccdlflags" ;;
6183     esac
6184     rp="Any special flags to pass to $cc -c to compile shared library modules?"
6185     . ./myread
6186     case "$ans" in
6187     none) cccdlflags=' ' ;;
6188     *) cccdlflags="$ans" ;;
6189     esac
6190
6191     cat << EOM
6192
6193 Some systems use ld to create libraries that can be dynamically loaded,
6194 while other systems (such as those using ELF) use $cc.
6195
6196 EOM
6197         case "$ld" in
6198         '')     $cat >try.c <<'EOM'
6199 /* Test for whether ELF binaries are produced */
6200 #include <fcntl.h>
6201 #include <stdlib.h>
6202 int main() {
6203         char b[4];
6204         int i = open("a.out",O_RDONLY);
6205         if(i == -1) 
6206                 exit(1); /* fail */
6207         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
6208                 exit(0); /* succeed (yes, it's ELF) */
6209         else
6210                 exit(1); /* fail */
6211 }
6212 EOM
6213                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
6214                         cat <<EOM
6215 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
6216 EOM
6217                         dflt="$cc"
6218                 else
6219                         echo "I'll use ld to build dynamic libraries."
6220                         dflt='ld'
6221                 fi
6222                 rm -f try.c a.out
6223                 ;;
6224         *)      dflt="$ld"
6225                 ;;
6226         esac
6227
6228     rp="What command should be used to create dynamic libraries?"
6229     . ./myread
6230         ld="$ans"
6231
6232     cat << EOM
6233
6234 Some systems may require passing special flags to $ld to create a
6235 library that can be dynamically loaded.  If your ld flags include
6236 -L/other/path options to locate libraries outside your loader's normal
6237 search path, you may need to specify those -L options here as well.  To
6238 use no flags, say "none".
6239
6240 EOM
6241     case "$lddlflags" in
6242     '') case "$osname" in
6243                         beos) dflt='-nostart' ;;
6244                         hpux) dflt='-b';
6245                               case "$gccversion" in
6246                               '') dflt="$dflt +vnocompatwarnings" ;;
6247                               esac
6248                               ;;        
6249                         linux|irix*)    dflt='-shared' ;;
6250                         next)  dflt='none' ;;
6251                         solaris) dflt='-G' ;;
6252                         sunos) dflt='-assert nodefinitions' ;;
6253                         svr4*|esix*) dflt="-G $ldflags" ;;
6254                 *)     dflt='none' ;;
6255                         esac
6256                         ;;
6257     *) dflt="$lddlflags" ;;
6258     esac
6259
6260         : Try to guess additional flags to pick up local libraries.
6261         : Be careful not to append to a plain 'none'
6262         case "$dflt" in
6263         none) dflt='' ;;
6264         esac
6265         for thisflag in $ldflags; do
6266                 case "$thisflag" in
6267                 -L*)
6268                         case " $dflt " in
6269                         *" $thisflag "*) ;;
6270                         *) dflt="$dflt $thisflag" ;;
6271                         esac
6272                         ;;
6273                 esac
6274         done
6275
6276         case "$dflt" in
6277         ''|' ') dflt='none' ;;
6278         esac
6279
6280     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
6281     . ./myread
6282     case "$ans" in
6283     none) lddlflags=' ' ;;
6284     *) lddlflags="$ans" ;;
6285     esac
6286
6287         cat <<EOM
6288
6289 Some systems may require passing special flags to $cc to indicate that
6290 the resulting executable will use dynamic linking.  To use no flags,
6291 say "none".
6292
6293 EOM
6294     case "$ccdlflags" in
6295     '') case "$osname" in
6296                 hpux)   dflt='-Wl,-E' ;;
6297                 linux)  dflt='-rdynamic' ;;
6298                 next)   dflt='none' ;;
6299                 sunos)  dflt='none' ;;
6300                 *)      dflt='none' ;;
6301             esac ;;
6302     ' ')  dflt='none' ;;
6303     *)  dflt="$ccdlflags" ;;
6304     esac
6305     rp="Any special flags to pass to $cc to use dynamic linking?"
6306     . ./myread
6307     case "$ans" in
6308     none) ccdlflags=' ' ;;
6309     *) ccdlflags="$ans" ;;
6310     esac
6311     ;;
6312 *)  usedl="$undef"
6313         ld='ld'
6314     dlsrc='dl_none.xs'
6315     lddlflags=''
6316     ccdlflags=''
6317     ;;
6318 esac
6319
6320 also=''
6321 case "$usedl" in
6322 $undef)
6323         # No dynamic loading being used, so don't bother even to prompt.
6324         useshrplib='false'
6325         ;;
6326 *)      case "$useshrplib" in
6327         '')     case "$osname" in
6328                 svr4*|dgux|dynixptx|esix|powerux|beos|cygwin*)
6329                         dflt=y
6330                         also='Building a shared libperl is required for dynamic loading to work on your system.'
6331                         ;;
6332                 next*)
6333                         case "$osvers" in
6334                         4*)     dflt=y
6335                                 also='Building a shared libperl is needed for MAB support.'
6336                                 ;;
6337                         *)      dflt=n
6338                                 ;;
6339                         esac
6340                         ;;
6341                 *)      dflt=n
6342                         ;;
6343                 esac
6344                 ;;
6345         $define|true|[Yy]*)
6346                 dflt=y
6347                 ;;
6348         *)      dflt=n
6349                 ;;
6350         esac
6351         $cat << EOM
6352
6353 The perl executable is normally obtained by linking perlmain.c with
6354 libperl${_a}, any static extensions (usually just DynaLoader), and
6355 any other libraries needed on this system (such as -lm, etc.).  Since
6356 your system supports dynamic loading, it is probably possible to build
6357 a shared libperl.$so.  If you will have more than one executable linked
6358 to libperl.$so, this will significantly reduce the size of each
6359 executable, but it may have a noticeable affect on performance.  The
6360 default is probably sensible for your system.
6361 $also
6362
6363 EOM
6364         rp="Build a shared libperl.$so (y/n)"
6365         . ./myread
6366         case "$ans" in
6367         true|$define|[Yy]*)
6368                 useshrplib='true'  ;;
6369         *)      useshrplib='false' ;;
6370         esac
6371         ;;
6372 esac
6373
6374 case "$useshrplib" in
6375 true)
6376         case "$libperl" in
6377         '')
6378                 # Figure out a good name for libperl.so.  Since it gets stored in
6379                 # a version-specific architecture-dependent library, the version
6380                 # number isn't really that important, except for making cc/ld happy.
6381                 #
6382                 # A name such as libperl.so.3.1
6383                 majmin="libperl.$so.$patchlevel.$subversion"
6384                 # A name such as libperl.so.301
6385                 majonly=`echo $patchlevel $subversion |
6386                         $awk '{printf "%d%02d", $1, $2}'`
6387                 majonly=libperl.$so.$majonly
6388                 # I'd prefer to keep the os-specific stuff here to a minimum, and
6389                 # rely on figuring it out from the naming of libc.
6390                 case "${osname}${osvers}" in
6391                 next4*)
6392                         dflt=libperl.5.$so
6393                         # XXX How handle the --version stuff for MAB?
6394                         ;;
6395                 linux*)  # ld won't link with a bare -lperl otherwise.
6396                         dflt=libperl.$so
6397                         ;;
6398                 cygwin*) # include version
6399                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
6400                         ;;
6401                 *)      # Try to guess based on whether libc has major.minor.
6402                         case "$libc" in
6403                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
6404                         *libc.$so.[0-9]*) dflt=$majonly ;;
6405                         *)      dflt=libperl.$so ;;
6406                         esac
6407                         ;;
6408                 esac
6409                 ;;
6410         *)      dflt=$libperl
6411                 ;;
6412         esac
6413         cat << EOM
6414
6415 I need to select a good name for the shared libperl.  If your system uses
6416 library names with major and minor numbers, then you might want something
6417 like $majmin.  Alternatively, if your system uses a single version
6418 number for shared libraries, then you might want to use $majonly.
6419 Or, your system might be quite happy with a simple libperl.$so.
6420
6421 Since the shared libperl will get installed into a version-specific
6422 architecture-dependent directory, the version number of the shared perl
6423 library probably isn't important, so the default should be o.k.
6424
6425 EOM
6426         rp='What name do you want to give to the shared libperl?'
6427         . ./myread
6428         libperl=$ans
6429         echo "Ok, I'll use $libperl"
6430         ;;
6431 *)
6432         libperl="libperl${_a}"
6433         ;;
6434 esac
6435
6436 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
6437 case "$shrpdir" in
6438 '') ;;
6439 *)      $cat >&4 <<EOM
6440 WARNING:  Use of the shrpdir variable for the installation location of
6441 the shared $libperl is not supported.  It was never documented and
6442 will not work in this version.  Let me (perlbug@perl.com)
6443 know of any problems this may cause.
6444
6445 EOM
6446         case "$shrpdir" in
6447         "$archlibexp/CORE")
6448                 $cat >&4 <<EOM
6449 But your current setting of $shrpdir is
6450 the default anyway, so it's harmless.
6451 EOM
6452                 ;;
6453         *)
6454                 $cat >&4 <<EOM
6455 Further, your current attempted setting of $shrpdir
6456 conflicts with the value of $archlibexp/CORE
6457 that installperl will use.
6458 EOM
6459                 ;;
6460         esac
6461         ;;
6462 esac
6463
6464 # How will the perl executable find the installed shared $libperl?
6465 # Add $xxx to ccdlflags.
6466 # If we can't figure out a command-line option, use $shrpenv to
6467 # set env LD_RUN_PATH.  The main perl makefile uses this.
6468 shrpdir=$archlibexp/CORE
6469 xxx=''
6470 tmp_shrpenv=''
6471 if "$useshrplib"; then
6472     case "$osname" in 
6473         aix)
6474                 # We'll set it in Makefile.SH...
6475                 ;;
6476         solaris|netbsd)
6477                 xxx="-R $shrpdir"
6478                 ;;
6479         freebsd)
6480                 xxx="-Wl,-R$shrpdir"
6481                 ;;
6482         linux|irix*|dec_osf)
6483                 xxx="-Wl,-rpath,$shrpdir"
6484                 ;;
6485         next)
6486                 # next doesn't like the default...
6487                 ;;
6488         beos)
6489                 # beos doesn't like the default, either.
6490                 ;;
6491         hpux*)
6492                 # hpux doesn't like the default, either.
6493                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
6494                 ;;
6495         *)
6496                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
6497                 ;;
6498         esac
6499         case "$xxx" in
6500         '') ;;
6501         *)      
6502                 # Only add $xxx if it isn't already in ccdlflags.
6503                 case " $ccdlflags " in
6504                 *" $xxx "*)     ;;
6505                 *)      ccdlflags="$ccdlflags $xxx"
6506                         cat <<EOM >&4
6507
6508 Adding $xxx to the flags
6509 passed to $ld so that the perl executable will find the 
6510 installed shared $libperl.
6511
6512 EOM
6513                         ;;
6514                 esac
6515                 ;;
6516         esac
6517 fi
6518 # Fix ccdlflags in AIX for building external extensions.
6519 # (For building Perl itself bare -bE:perl.exp is needed,
6520 #  Makefile.SH takes care of this.)
6521 case "$osname" in
6522 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
6523 esac
6524 # Respect a hint or command-line value.
6525 case "$shrpenv" in
6526 '') shrpenv="$tmp_shrpenv" ;;
6527 esac
6528 case "$ldlibpthname" in
6529 '')     ldlibpthname=LD_LIBRARY_PATH ;;
6530 none)   ldlibpthname='' ;;
6531 esac
6532
6533 : determine where manual pages go
6534 set man1dir man1dir none
6535 eval $prefixit
6536 $cat <<EOM
6537
6538 $spackage has manual pages available in source form.
6539 EOM
6540 case "$nroff" in
6541 nroff)
6542         echo "However, you don't have nroff, so they're probably useless to you."
6543         case "$man1dir" in
6544         '') man1dir="none";;
6545         esac;;
6546 esac
6547 echo "If you don't want the manual sources installed, answer 'none'."
6548 case "$man1dir" in
6549 ' ') dflt=none
6550         ;;
6551 '')
6552         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
6553         lookpath="$lookpath $prefixexp/man/p_man/man1"
6554         lookpath="$lookpath $prefixexp/man/u_man/man1"
6555         lookpath="$lookpath $prefixexp/man/man.1"
6556         case "$sysman" in
6557         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
6558         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
6559         esac
6560         set dflt
6561         eval $prefixup
6562         ;;
6563 *)  dflt="$man1dir"
6564         ;;
6565 esac
6566 echo " "
6567 fn=dn+~
6568 rp="Where do the main $spackage manual pages (source) go?"
6569 . ./getfile
6570 if $test "X$man1direxp" != "X$ansexp"; then
6571         installman1dir=''
6572 fi
6573 man1dir="$ans"
6574 man1direxp="$ansexp"
6575 case "$man1dir" in
6576 '')     man1dir=' '
6577         installman1dir='';;
6578 esac
6579
6580 : Change installation prefix, if necessary.
6581 if $test X"$prefix" != X"$installprefix"; then
6582         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
6583 else
6584         installman1dir="$man1direxp"
6585 fi
6586
6587 : What suffix to use on installed man pages
6588
6589 case "$man1dir" in
6590 ' ')
6591         man1ext='0'
6592         ;;
6593 *)
6594         rp="What suffix should be used for the main $spackage man pages?"
6595         case "$man1ext" in
6596         '')     case "$man1dir" in
6597                 *1)  dflt=1 ;;
6598                 *1p) dflt=1p ;;
6599                 *1pm) dflt=1pm ;;
6600                 *l) dflt=l;;
6601                 *n) dflt=n;;
6602                 *o) dflt=o;;
6603                 *p) dflt=p;;
6604                 *C) dflt=C;;
6605                 *L) dflt=L;;
6606                 *L1) dflt=L1;;
6607                 *) dflt=1;;
6608                 esac
6609                 ;;
6610         *)      dflt="$man1ext";;
6611         esac
6612         . ./myread
6613         man1ext="$ans"
6614         ;;
6615 esac
6616
6617 : see if we can have long filenames
6618 echo " "
6619 rmlist="$rmlist /tmp/cf$$"
6620 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
6621 first=123456789abcdef
6622 second=/tmp/cf$$/$first
6623 $rm -f $first $second
6624 if (echo hi >$first) 2>/dev/null; then
6625         if $test -f 123456789abcde; then
6626                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
6627                 val="$undef"
6628         else
6629                 if (echo hi >$second) 2>/dev/null; then
6630                         if $test -f /tmp/cf$$/123456789abcde; then
6631                                 $cat <<'EOM'
6632 That's peculiar... You can have filenames longer than 14 characters, but only
6633 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
6634 I shall consider your system cannot support long filenames at all.
6635 EOM
6636                                 val="$undef"
6637                         else
6638                                 echo 'You can have filenames longer than 14 characters.' >&4
6639                                 val="$define"
6640                         fi
6641                 else
6642                         $cat <<'EOM'
6643 How confusing! Some of your filesystems are sane enough to allow filenames
6644 longer than 14 characters but some others like /tmp can't even think about them.
6645 So, for now on, I shall assume your kernel does not allow them at all.
6646 EOM
6647                         val="$undef"
6648                 fi
6649         fi
6650 else
6651         $cat <<'EOM'
6652 You can't have filenames longer than 14 chars.  You can't even think about them!
6653 EOM
6654         val="$undef"
6655 fi 
6656 set d_flexfnam
6657 eval $setvar
6658 $rm -rf /tmp/cf$$ 123456789abcde*
6659
6660 : determine where library module manual pages go
6661 set man3dir man3dir none
6662 eval $prefixit
6663 $cat <<EOM
6664
6665 $spackage has manual pages for many of the library modules.
6666 EOM
6667
6668 case "$nroff" in
6669 nroff)
6670         $cat <<'EOM'
6671 However, you don't have nroff, so they're probably useless to you.
6672 EOM
6673         case "$man3dir" in
6674         '') man3dir="none";;
6675         esac;;
6676 esac
6677
6678 case "$d_flexfnam" in
6679 undef)
6680         $cat <<'EOM'
6681 However, your system can't handle the long file names like File::Basename.3. 
6682 EOM
6683         case "$man3dir" in
6684         '') man3dir="none";;
6685         esac;;
6686 esac
6687
6688 echo "If you don't want the manual sources installed, answer 'none'."
6689 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6690 case "$man3dir" in
6691 '')     dflt=`echo $man1dir | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
6692         if $test -d "$privlib/man/man3"; then
6693                 cat <<EOM >&4
6694
6695 WARNING:  Previous versions of perl installed man3 pages into
6696 $privlib/man/man3.  This version will suggest a 
6697 new default of $dflt.  
6698 EOM
6699                 tdflt=$dflt
6700                 dflt='n'
6701                 rp='Do you wish to preserve the old behavior?(y/n)'
6702                 . ./myread
6703                 case "$ans" in
6704                 y*) dflt="$privlib/man/man3" ;;
6705                 *)  dflt=$tdflt ;;
6706                 esac
6707     fi
6708         ;;
6709 ' ') dflt=none;;
6710 *)      dflt="$man3dir" ;;
6711 esac
6712 echo " "
6713 fn=dn+~
6714 rp="Where do the $package library man pages (source) go?"
6715 . ./getfile
6716 man3dir="$ans"
6717 man3direxp="$ansexp"
6718 case "$man1dir" in
6719 '')     man3dir=' '
6720         installman3dir='';;
6721 esac
6722
6723 : Change installation prefix, if necessary.
6724 if $test X"$prefix" != X"$installprefix"; then
6725         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
6726 else
6727         installman3dir="$man3direxp"
6728 fi
6729
6730 : What suffix to use on installed man pages
6731 case "$man3dir" in
6732 ' ')
6733         man3ext='0'
6734         ;;
6735 *)
6736         rp="What suffix should be used for the $package library man pages?"
6737         case "$man3ext" in
6738         '')     case "$man3dir" in
6739                 *3)  dflt=3 ;;
6740                 *3p) dflt=3p ;;
6741                 *3pm) dflt=3pm ;;
6742                 *l) dflt=l;;
6743                 *n) dflt=n;;
6744                 *o) dflt=o;;
6745                 *p) dflt=p;;
6746                 *C) dflt=C;;
6747                 *L) dflt=L;;
6748                 *L3) dflt=L3;;
6749                 *) dflt=3;;
6750                 esac
6751                 ;;
6752         *)      dflt="$man3ext";;
6753         esac
6754         . ./myread
6755         man3ext="$ans"
6756         ;;
6757 esac
6758
6759 : see if we have to deal with yellow pages, now NIS.
6760 if $test -d /usr/etc/yp || $test -d /etc/yp; then
6761         if $test -f /usr/etc/nibindd; then
6762                 echo " "
6763                 echo "I'm fairly confident you're on a NeXT."
6764                 echo " "
6765                 rp='Do you get the hosts file via NetInfo?'
6766                 dflt=y
6767                 case "$hostcat" in
6768                 nidump*) ;;
6769                 '') ;;
6770                 *) dflt=n;;
6771                 esac
6772                 . ./myread
6773                 case "$ans" in
6774                 y*) hostcat='nidump hosts .';;
6775                 *)      case "$hostcat" in
6776                         nidump*) hostcat='';;
6777                         esac
6778                         ;;
6779                 esac
6780         fi
6781         case "$hostcat" in
6782         nidump*) ;;
6783         *)
6784                 case "$hostcat" in
6785                 *ypcat*) dflt=y;;
6786                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
6787                                 dflt=y
6788                         else
6789                                 dflt=n
6790                         fi;;
6791                 *) dflt=n;;
6792                 esac
6793                 echo " "
6794                 rp='Are you getting the hosts file via yellow pages?'
6795                 . ./myread
6796                 case "$ans" in
6797                 y*) hostcat='ypcat hosts';;
6798                 *) hostcat='cat /etc/hosts';;
6799                 esac
6800                 ;;
6801         esac
6802 fi
6803 case "$hostcat" in
6804 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
6805 esac
6806 case "$groupcat" in
6807 '') test -f /etc/group && groupcat='cat /etc/group';;
6808 esac
6809 case "$passcat" in
6810 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
6811 esac
6812
6813 : now get the host name
6814 echo " "
6815 echo "Figuring out host name..." >&4
6816 case "$myhostname" in
6817 '') cont=true
6818         echo 'Maybe "hostname" will work...'
6819         if tans=`sh -c hostname 2>&1` ; then
6820                 myhostname=$tans
6821                 phostname=hostname
6822                 cont=''
6823         fi
6824         ;;
6825 *) cont='';;
6826 esac
6827 if $test "$cont"; then
6828         if ./xenix; then
6829                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
6830                 if tans=`cat /etc/systemid 2>&1` ; then
6831                         myhostname=$tans
6832                         phostname='cat /etc/systemid'
6833                         echo "Whadyaknow.  Xenix always was a bit strange..."
6834                         cont=''
6835                 fi
6836         elif $test -r /etc/systemid; then
6837                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
6838         fi
6839 fi
6840 if $test "$cont"; then
6841         echo 'No, maybe "uuname -l" will work...'
6842         if tans=`sh -c 'uuname -l' 2>&1` ; then
6843                 myhostname=$tans
6844                 phostname='uuname -l'
6845         else
6846                 echo 'Strange.  Maybe "uname -n" will work...'
6847                 if tans=`sh -c 'uname -n' 2>&1` ; then
6848                         myhostname=$tans
6849                         phostname='uname -n'
6850                 else
6851                         echo 'Oh well, maybe I can mine it out of whoami.h...'
6852                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
6853                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
6854                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
6855                         else
6856                                 case "$myhostname" in
6857                                 '') echo "Does this machine have an identity crisis or something?"
6858                                         phostname='';;
6859                                 *)
6860                                         echo "Well, you said $myhostname before..."
6861                                         phostname='echo $myhostname';;
6862                                 esac
6863                         fi
6864                 fi
6865         fi
6866 fi
6867 : you do not want to know about this
6868 set $myhostname
6869 myhostname=$1
6870
6871 : verify guess
6872 if $test "$myhostname" ; then
6873         dflt=y
6874         rp='Your host name appears to be "'$myhostname'".'" Right?"
6875         . ./myread
6876         case "$ans" in
6877         y*) ;;
6878         *) myhostname='';;
6879         esac
6880 fi
6881
6882 : bad guess or no guess
6883 while $test "X$myhostname" = X ; do
6884         dflt=''
6885         rp="Please type the (one word) name of your host:"
6886         . ./myread
6887         myhostname="$ans"
6888 done
6889
6890 : translate upper to lower if necessary
6891 case "$myhostname" in
6892 *[A-Z]*)
6893         echo "(Normalizing case in your host name)"
6894         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
6895         ;;
6896 esac
6897
6898 case "$myhostname" in
6899 *.*)
6900         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
6901         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
6902         echo "(Trimming domain name from host name--host name is now $myhostname)"
6903         ;;
6904 *) case "$mydomain" in
6905         '')
6906                 {
6907                         test "X$hostcat" = "Xypcat hosts" &&
6908                         ypmatch "$myhostname" hosts 2>/dev/null |\
6909                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
6910                         $test -s hosts
6911                 } || {
6912                         test "X$hostcat" != "X" &&
6913                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
6914                                         /[       ]$myhostname[  . ]/p" > hosts
6915                 }
6916                 tmp_re="[       . ]"
6917                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
6918                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
6919                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
6920                         hosts | $sort | $uniq | \
6921                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
6922                 case `$echo X$dflt` in
6923                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
6924                         dflt=.
6925                         ;;
6926                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
6927                         ;;
6928                 esac
6929                 case "$dflt" in
6930                 .)
6931                         tans=`./loc resolv.conf X /etc /usr/etc`
6932                         if $test -f "$tans"; then
6933                                 echo "(Attempting domain name extraction from $tans)"
6934                                 dflt=.`$sed -n -e 's/   / /g' \
6935                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
6936                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6937                                 case "$dflt" in
6938                                 .) dflt=.`$sed -n -e 's/        / /g' \
6939                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
6940                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6941                                         ;;
6942                                 esac
6943                         fi
6944                         ;;
6945                 esac
6946                 case "$dflt" in
6947                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
6948                         dflt=.`sh -c domainname 2>/dev/null`
6949                         case "$dflt" in
6950                         '') dflt='.';;
6951                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
6952                         esac
6953                         ;;
6954                 esac
6955                 case "$dflt" in
6956                 .) echo "(Lost all hope -- silly guess then)"
6957                         dflt='.uucp'
6958                         ;;
6959                 esac
6960                 $rm -f hosts
6961                 ;;
6962         *) dflt="$mydomain";;
6963         esac;;
6964 esac
6965 echo " "
6966 rp="What is your domain name?"
6967 . ./myread
6968 tans="$ans"
6969 case "$ans" in
6970 '') ;;
6971 .*) ;;
6972 *) tans=".$tans";;
6973 esac
6974 mydomain="$tans"
6975
6976 : translate upper to lower if necessary
6977 case "$mydomain" in
6978 *[A-Z]*)
6979         echo "(Normalizing case in your domain name)"
6980         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
6981         ;;
6982 esac
6983
6984 : a little sanity check here
6985 case "$phostname" in
6986 '') ;;
6987 *)
6988         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
6989         $myhostname$mydomain|$myhostname) ;;
6990         *)
6991                 case "$phostname" in
6992                 sed*)
6993                         echo "(That doesn't agree with your whoami.h file, by the way.)"
6994                         ;;
6995                 *)
6996                         echo "(That doesn't agree with your $phostname command, by the way.)"
6997                         ;;
6998                 esac
6999         ;;
7000         esac
7001         ;;
7002 esac
7003
7004 $cat <<EOM
7005
7006 I need to get your e-mail address in Internet format if possible, i.e.
7007 something like user@host.domain. Please answer accurately since I have
7008 no easy means to double check it. The default value provided below
7009 is most probably close to reality but may not be valid from outside
7010 your organization...
7011
7012 EOM
7013 cont=x
7014 while test "$cont"; do
7015         case "$cf_email" in
7016         '') dflt="$cf_by@$myhostname$mydomain";;
7017         *) dflt="$cf_email";;
7018         esac
7019         rp='What is your e-mail address?'
7020         . ./myread
7021         cf_email="$ans"
7022         case "$cf_email" in
7023         *@*.*) cont='' ;;
7024         *)
7025                 rp='Address does not look like an Internet one.  Use it anyway?'
7026                 case "$fastread" in
7027                 yes) dflt=y ;;
7028                 *) dflt=n ;;
7029                 esac
7030                 . ./myread
7031                 case "$ans" in
7032                 y*) cont='' ;;
7033                 *) echo " " ;;
7034                 esac
7035                 ;;
7036         esac
7037 done
7038
7039 $cat <<EOM
7040
7041 If you or somebody else will be maintaining perl at your site, please
7042 fill in the correct e-mail address here so that they may be contacted
7043 if necessary. Currently, the "perlbug" program included with perl
7044 will send mail to this address in addition to perlbug@perl.com. You may
7045 enter "none" for no administrator.
7046
7047 EOM
7048 case "$perladmin" in
7049 '') dflt="$cf_email";;
7050 *) dflt="$perladmin";;
7051 esac
7052 rp='Perl administrator e-mail address'
7053 . ./myread
7054 perladmin="$ans"
7055
7056 : figure out how to guarantee perl startup
7057 case "$startperl" in
7058 '')
7059         case "$sharpbang" in
7060         *!)
7061                 $cat <<EOH
7062
7063 I can use the #! construct to start perl on your system. This will
7064 make startup of perl scripts faster, but may cause problems if you
7065 want to share those scripts and perl is not in a standard place
7066 ($binexp/perl) on all your platforms. The alternative is to force
7067 a shell by starting the script with a single ':' character.
7068
7069 EOH
7070                 dflt="$binexp/perl"
7071                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
7072                 . ./myread
7073                 case "$ans" in
7074                 none)   startperl=": # use perl";;
7075                 *)      startperl="#!$ans"
7076                         if $test 30 -lt `echo "$ans" | wc -c`; then
7077                                 $cat >&4 <<EOM
7078
7079 WARNING:  Some systems limit the #! command to 32 characters.
7080 If you experience difficulty running Perl scripts with #!, try
7081 installing Perl in a directory with a shorter pathname.
7082
7083 EOM
7084                         fi ;;
7085                 esac
7086                 ;;
7087         *) startperl=": # use perl"
7088                 ;;
7089         esac
7090         ;;
7091 esac
7092 echo "I'll use $startperl to start perl scripts."
7093
7094 : figure best path for perl in scripts
7095 case "$perlpath" in
7096 '')
7097         perlpath="$binexp/perl"
7098         case "$startperl" in
7099         *!*) ;;
7100         *)
7101                 $cat <<EOH
7102
7103 I will use the "eval 'exec'" idiom to start Perl on your system.
7104 I can use the full path of your Perl binary for this purpose, but
7105 doing so may cause problems if you want to share those scripts and
7106 Perl is not always in a standard place ($binexp/perl).
7107
7108 EOH
7109                 dflt="$binexp/perl"
7110                 rp="What path shall I use in \"eval 'exec'\"?"
7111                 . ./myread
7112                 perlpath="$ans"
7113                 ;;
7114         esac
7115         ;;
7116 esac
7117 case "$startperl" in
7118 *!*)    ;;
7119 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
7120 esac
7121
7122 : determine where public executable scripts go
7123 set scriptdir scriptdir
7124 eval $prefixit
7125 case "$scriptdir" in
7126 '')
7127         dflt="$bin"
7128         : guess some guesses
7129         $test -d /usr/share/scripts && dflt=/usr/share/scripts
7130         $test -d /usr/share/bin     && dflt=/usr/share/bin
7131         $test -d /usr/local/script  && dflt=/usr/local/script
7132         $test -d /usr/local/scripts && dflt=/usr/local/scripts
7133         $test -d $prefixexp/script  && dflt=$prefixexp/script
7134         set dflt
7135         eval $prefixup
7136         ;;
7137 *)  dflt="$scriptdir"
7138         ;;
7139 esac
7140 $cat <<EOM
7141  
7142 Some installations have a separate directory just for executable scripts so
7143 that they can mount it across multiple architectures but keep the scripts in
7144 one spot.  You might, for example, have a subdirectory of /usr/share for this.
7145 Or you might just lump your scripts in with all your other executables.
7146  
7147 EOM
7148 fn=d~
7149 rp='Where do you keep publicly executable scripts?'
7150 . ./getfile
7151 if $test "X$ansexp" != "X$scriptdirexp"; then
7152         installscript=''
7153 fi
7154 scriptdir="$ans"
7155 scriptdirexp="$ansexp"
7156 : Change installation prefix, if necessary.
7157 if $test X"$prefix" != X"$installprefix"; then
7158         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
7159 else
7160         installscript="$scriptdirexp"
7161 fi
7162
7163 : determine where site specific architecture-dependent libraries go.
7164 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
7165 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
7166 : sitelib may have an optional trailing /share.
7167 case "$sitearch" in
7168 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
7169         dflt="$dflt/$archname"
7170         ;;
7171 *)      dflt="$sitearch"
7172         ;;
7173 esac
7174 set sitearch sitearch none
7175 eval $prefixit
7176 $cat <<EOM
7177
7178 The installation process will also create a directory for
7179 architecture-dependent site-specific extensions and modules.
7180
7181 EOM
7182 fn=d~+
7183 rp='Pathname for the site-specific architecture-dependent library files?'
7184 . ./getfile
7185 sitearch="$ans"
7186 sitearchexp="$ansexp"
7187 : Change installation prefix, if necessary.
7188 if $test X"$prefix" != X"$installprefix"; then
7189         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
7190 else
7191         installsitearch="$sitearchexp"
7192 fi
7193
7194 : determine where add-on public executables go
7195 case "$sitebin" in
7196 '')     dflt=$siteprefix/bin ;;
7197 *)      dflt=$sitebin ;;
7198 esac
7199 fn=d~
7200 rp='Pathname where the add-on public executables should be installed?'
7201 . ./getfile
7202 sitebin="$ans"
7203 sitebinexp="$ansexp"
7204 : Change installation prefix, if necessary.
7205 if $test X"$prefix" != X"$installprefix"; then
7206         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
7207 else
7208         installsitebin="$sitebinexp"
7209 fi
7210
7211 : see if sqrtl exists
7212 set sqrtl d_sqrtl
7213 eval $inlibc
7214
7215 case "$ccflags" in
7216 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
7217 esac
7218
7219 case "$uselongdouble" in
7220 $define|true|[yY]*)     dflt='y';;
7221 *) dflt='n';;
7222 esac
7223 cat <<EOM
7224
7225 Perl can be built to take advantage of long doubles which
7226 (if available) may give more accuracy and range for floating point numbers.
7227
7228 If this doesn't make any sense to you, just accept the default '$dflt'.
7229 EOM
7230 rp='Try to use long doubles if available?'
7231 . ./myread
7232 case "$ans" in
7233 y|Y)    val="$define"   ;;
7234 *)      val="$undef"    ;;
7235 esac
7236 set uselongdouble
7237 eval $setvar
7238
7239 case "$uselongdouble" in
7240 true|[yY]*) uselongdouble="$define" ;;
7241 esac
7242
7243 case "$uselongdouble" in
7244 $define)
7245 : Look for a hint-file generated 'call-back-unit'.  If the
7246 : user has specified that long doubles should be used,
7247 : we may need to set or change some other defaults.
7248         if $test -f uselongdouble.cbu; then
7249                 echo "Your platform has some specific hints for long doubles, using them..."
7250                 . ./uselongdouble.cbu
7251         else
7252                 $cat <<EOM
7253 (Your platform doesn't have any specific hints for long doubles.)
7254 EOM
7255         fi
7256         ;;
7257 esac
7258
7259 case "$uselongdouble:$d_sqrtl" in
7260 $define:$undef)
7261                 $cat <<EOM >&4
7262
7263 *** You requested the use of long doubles but you do not seem to have
7264 *** the mathematic functions for long doubles.  I'm disabling the use
7265 *** of long doubles.
7266
7267 EOM
7268         uselongdouble=$undef
7269         ;;
7270 esac
7271
7272 case "$useperlio" in
7273 $define|true|[yY]*)     dflt='y';;
7274 *) dflt='n';;
7275 esac
7276 cat <<EOM
7277
7278 Previous version of $package used the standard IO mechanisms as defined
7279 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
7280 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
7281 the default.  This abstraction layer can use AT&T's sfio (if you already
7282 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
7283 problems with some extension modules.  Using PerlIO with stdio is safe,
7284 but it is slower than plain stdio and therefore is not the default.
7285
7286 If this doesn't make any sense to you, just accept the default '$dflt'.
7287 EOM
7288 rp='Use the experimental PerlIO abstraction layer?'
7289 . ./myread
7290 case "$ans" in
7291 y|Y) 
7292         val="$define"
7293         ;;     
7294 *)      
7295         echo "Ok, doing things the stdio way"
7296         val="$undef"
7297         ;;
7298 esac
7299 set useperlio
7300 eval $setvar 
7301
7302 case "$vendorprefix" in
7303 '')     d_vendorbin="$undef"
7304         vendorbin=''
7305         vendorbinexp=''
7306         ;;
7307 *)      d_vendorbin="$define"
7308         : determine where vendor-supplied executables go.
7309         case "$vendorbin" in
7310         '') dflt=$vendorprefix/bin ;;
7311         *)      dflt="$vendorbin" ;;
7312         esac
7313         fn=d~+
7314         rp='Pathname for the vendor-supplied executables directory?'
7315         . ./getfile
7316         vendorbin="$ans"
7317         vendorbinexp="$ansexp"
7318         ;;
7319 esac
7320 : Change installation prefix, if necessary.
7321 if $test X"$prefix" != X"$installprefix"; then
7322         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
7323 else
7324         installvendorbin="$vendorbinexp"
7325 fi
7326
7327 : see if qgcvt exists
7328 set qgcvt d_qgcvt
7329 eval $inlibc
7330
7331 : check for length of double
7332 echo " "
7333 case "$doublesize" in
7334 '')
7335         echo "Checking to see how big your double precision numbers are..." >&4
7336         $cat >try.c <<'EOCP'
7337 #include <stdio.h>
7338 int main()
7339 {
7340     printf("%d\n", (int)sizeof(double));
7341     exit(0);
7342 }
7343 EOCP
7344         set try
7345         if eval $compile_ok; then
7346                 doublesize=`./try`
7347                 echo "Your double is $doublesize bytes long."
7348         else
7349                 dflt='8'
7350                 echo "(I can't seem to compile the test program.  Guessing...)"
7351                 rp="What is the size of a double precision number (in bytes)?"
7352                 . ./myread
7353                 doublesize="$ans"
7354         fi
7355         ;;
7356 esac
7357 $rm -f try.c try
7358
7359 : check for long doubles
7360 echo " "
7361 echo "Checking to see if you have long double..." >&4
7362 echo 'int main() { long double x = 7.0; }' > try.c
7363 set try
7364 if eval $compile; then
7365         val="$define"
7366         echo "You have long double."
7367 else
7368         val="$undef"
7369         echo "You do not have long double."
7370 fi
7371 $rm try.*
7372 set d_longdbl
7373 eval $setvar
7374
7375 : check for length of long double
7376 case "${d_longdbl}${longdblsize}" in
7377 $define)
7378         echo " "
7379         echo "Checking to see how big your long doubles are..." >&4
7380         $cat >try.c <<'EOCP'
7381 #include <stdio.h>
7382 int main()
7383 {
7384         printf("%d\n", sizeof(long double));
7385 }
7386 EOCP
7387         set try
7388         set try
7389         if eval $compile; then
7390                 longdblsize=`./try$exe_ext`
7391                 echo "Your long doubles are $longdblsize bytes long."
7392         else
7393                 dflt='8'
7394                 echo " "
7395                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
7396                 rp="What is the size of a long double (in bytes)?"
7397                 . ./myread
7398                 longdblsize="$ans"
7399         fi
7400         if $test "X$doublesize" = "X$longdblsize"; then
7401                 echo "(That isn't any different from an ordinary double.)"
7402         fi      
7403         ;;
7404 esac
7405 $rm -f try.* try
7406
7407 echo " "
7408
7409 if $test X"$d_longdbl" = X"$define"; then
7410
7411 echo "Checking how to print long doubles..." >&4
7412
7413 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
7414         $cat >try.c <<'EOCP'
7415 #include <sys/types.h>
7416 #include <stdio.h>
7417 int main() {
7418   double d = 123.456;
7419   printf("%.3f\n", d);
7420 }
7421 EOCP
7422         set try
7423         if eval $compile; then
7424                 yyy=`./try$exe_ext`
7425                 case "$yyy" in
7426                 123.456)
7427                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
7428                         sPRIFldbl='"F"'; sPRIGldbl='"G"'; sPRIEldbl='"E"';
7429                         echo "We will use %f."
7430                         ;;
7431                 esac
7432         fi
7433 fi
7434
7435 if $test X"$sPRIfldbl" = X; then
7436         $cat >try.c <<'EOCP'
7437 #include <sys/types.h>
7438 #include <stdio.h>
7439 int main() {
7440   long double d = 123.456;
7441   printf("%.3llf\n", d);
7442 }
7443 EOCP
7444         set try
7445         if eval $compile; then
7446                 yyy=`./try$exe_ext`
7447                 case "$yyy" in
7448                 123.456)
7449                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
7450                         sPRIFldbl='"llF"'; sPRIGldbl='"llG"'; sPRIEldbl='"llE"';
7451                         echo "We will use %llf."
7452                         ;;
7453                 esac
7454         fi
7455 fi
7456
7457 if $test X"$sPRIfldbl" = X; then
7458         $cat >try.c <<'EOCP'
7459 #include <sys/types.h>
7460 #include <stdio.h>
7461 int main() {
7462   long double d = 123.456;
7463   printf("%.3Lf\n", d);
7464 }
7465 EOCP
7466         set try
7467         if eval $compile; then
7468                 yyy=`./try$exe_ext`
7469                 case "$yyy" in
7470                 123.456)
7471                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
7472                         sPRIFldbl='"LF"'; sPRIGldbl='"LG"'; sPRIEldbl='"LE"';
7473                         echo "We will use %Lf."
7474                         ;;
7475                 esac
7476         fi
7477 fi
7478
7479 if $test X"$sPRIfldbl" = X; then
7480         $cat >try.c <<'EOCP'
7481 #include <sys/types.h>
7482 #include <stdio.h>
7483 int main() {
7484   long double d = 123.456;
7485   printf("%.3lf\n", d);
7486 }
7487 EOCP
7488         set try
7489         if eval $compile; then
7490                 yyy=`./try$exe_ext`
7491                 case "$yyy" in
7492                 123.456)
7493                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
7494                         sPRIFldbl='"lF"'; sPRIGldbl='"lG"'; sPRIEldbl='"lE"';
7495                         echo "We will use %lf."
7496                         ;;
7497                 esac
7498         fi
7499 fi
7500
7501 if $test X"$sPRIfldbl" = X; then
7502         echo "Cannot figure out how to print long doubles." >&4
7503 fi
7504
7505 $rm -f try try.*
7506
7507 fi # d_longdbl
7508
7509 case "$sPRIfldbl" in
7510 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
7511         d_PRIFldbl="$undef"; d_PRIGldbl="$undef"; d_PRIEldbl="$undef"; 
7512         ;;
7513 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
7514         d_PRIFldbl="$define"; d_PRIGldbl="$define"; d_PRIEldbl="$define"; 
7515         ;;
7516 esac
7517
7518 : Check how to convert floats to strings.
7519 if test "X$d_Gconvert" = X; then
7520         echo " "
7521         echo "Checking for an efficient way to convert floats to strings."
7522         echo " " > try.c
7523         case "$uselongdouble" in
7524         "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
7525         esac
7526         case "$d_longdbl" in
7527         "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
7528         esac
7529         case "$d_PRIgldbl" in
7530         "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
7531         esac
7532         $cat >>try.c <<EOP
7533 #ifdef TRY_gconvert
7534 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
7535 char *myname = "gconvert";
7536 #endif
7537 #ifdef TRY_gcvt
7538 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
7539 char *myname = "gcvt";
7540 #endif
7541 #ifdef TRY_qgcvt
7542 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
7543 char *myname = "qgcvt";
7544 #define DOUBLETYPE long double
7545 #endif
7546 #ifdef TRY_sprintf
7547 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
7548 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
7549 #else
7550 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
7551 #endif
7552 char *myname = "sprintf";
7553 #endif
7554
7555 #ifndef DOUBLETYPE
7556 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
7557 #define DOUBLETYPE long double
7558 #else
7559 #define DOUBLETYPE double
7560 #endif
7561 #endif
7562
7563 #include <stdio.h>
7564
7565 #define I_STDLIB $i_stdlib
7566 #ifdef I_STDLIB
7567 #include <stdlib.h>
7568 #endif
7569
7570 int
7571 checkit(expect, got)
7572 char *expect;
7573 char *got;
7574 {
7575     if (strcmp(expect, got)) {
7576                 printf("%s oddity:  Expected %s, got %s\n",
7577                         myname, expect, got);
7578                 exit(1);
7579         }
7580 }
7581
7582 int main()
7583
7584         char buf[64]; 
7585         buf[63] = '\0';
7586
7587         /* This must be 1st test on (which?) platform */
7588         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
7589         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
7590         checkit("0.1", buf);
7591
7592         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
7593         checkit("1", buf);
7594
7595         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
7596         checkit("1.1", buf);
7597
7598         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
7599         checkit("1.01", buf);
7600
7601         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
7602         checkit("1.001", buf);
7603
7604         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
7605         checkit("1.0001", buf);
7606
7607         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
7608         checkit("1.00001", buf);
7609
7610         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
7611         checkit("1.000001", buf);
7612
7613         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
7614         checkit("0", buf);
7615
7616         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
7617         checkit("-1", buf);
7618
7619         /* Some Linux gcvt's give 1.e+5 here. */
7620         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
7621         checkit("100000", buf);
7622         
7623         /* Some Linux gcvt's give -1.e+5 here. */
7624         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
7625         checkit("-100000", buf);
7626
7627         exit(0);
7628 }
7629 EOP
7630         case "$d_Gconvert" in
7631         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
7632         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
7633         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
7634         *) xxx_list='gconvert gcvt sprintf' ;;
7635         esac
7636
7637         case "$d_longdbl$uselongdouble$d_qgcvt" in
7638         "$define$define$define") xxx_list="`echo $xxx_list|sed 's/gcvt/qgcvt gcvt/'`" ;;
7639         esac
7640
7641         for xxx_convert in $xxx_list; do
7642                 echo "Trying $xxx_convert..."
7643                 $rm -f try try$_o
7644                 set try -DTRY_$xxx_convert
7645                 if eval $compile; then
7646                         echo "$xxx_convert() found." >&4
7647                         if ./try; then
7648                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
7649                                 break;
7650                         else
7651                                 echo "...But $xxx_convert didn't work as I expected."
7652                         fi
7653                 else
7654                         echo "$xxx_convert NOT found." >&4
7655                 fi
7656         done
7657                 
7658         case "$xxx_convert" in
7659         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
7660         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
7661         qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
7662         *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
7663            "$define$define$define")
7664               d_Gconvert="sprintf((b),\"%.*$sPRIgldbl\",(n),(x))" ;;
7665            *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
7666            esac
7667            ;;  
7668         esac
7669 fi
7670
7671 : Initialize h_fcntl
7672 h_fcntl=false
7673
7674 : Initialize h_sysfile
7675 h_sysfile=false
7676
7677 : access call always available on UNIX
7678 set access d_access
7679 eval $inlibc
7680
7681 : locate the flags for 'access()'
7682 case "$d_access" in
7683 "$define")
7684         echo " "
7685         $cat >access.c <<'EOCP'
7686 #include <sys/types.h>
7687 #ifdef I_FCNTL
7688 #include <fcntl.h>
7689 #endif
7690 #ifdef I_SYS_FILE
7691 #include <sys/file.h>
7692 #endif
7693 #ifdef I_UNISTD
7694 #include <unistd.h>
7695 #endif
7696 int main() {
7697         exit(R_OK);
7698 }
7699 EOCP
7700         : check sys/file.h first, no particular reason here
7701         if $test `./findhdr sys/file.h` && \
7702                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
7703                 h_sysfile=true;
7704                 echo "<sys/file.h> defines the *_OK access constants." >&4
7705         elif $test `./findhdr fcntl.h` && \
7706                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
7707                 h_fcntl=true;
7708                 echo "<fcntl.h> defines the *_OK access constants." >&4
7709         elif $test `./findhdr unistd.h` && \
7710                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
7711                 echo "<unistd.h> defines the *_OK access constants." >&4
7712         else
7713                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
7714         fi
7715         ;;
7716 esac
7717 $rm -f access*
7718
7719 : see if accessx exists
7720 set accessx d_accessx
7721 eval $inlibc
7722
7723 : see if alarm exists
7724 set alarm d_alarm
7725 eval $inlibc
7726
7727 : see if atolf exists
7728 set atolf d_atolf
7729 eval $inlibc
7730
7731 : see if atoll exists
7732 set atoll d_atoll
7733 eval $inlibc
7734
7735 : Look for GNU-cc style attribute checking
7736 echo " "
7737 echo "Checking whether your compiler can handle __attribute__ ..." >&4
7738 $cat >attrib.c <<'EOCP'
7739 #include <stdio.h>
7740 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
7741 EOCP
7742 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
7743         if $contains 'warning' attrib.out >/dev/null 2>&1; then
7744                 echo "Your C compiler doesn't fully support __attribute__."
7745                 val="$undef"
7746         else
7747                 echo "Your C compiler supports __attribute__."
7748                 val="$define"
7749         fi
7750 else
7751         echo "Your C compiler doesn't seem to understand __attribute__ at all."
7752         val="$undef"
7753 fi
7754 set d_attribut
7755 eval $setvar
7756 $rm -f attrib*
7757
7758 : see if bcmp exists
7759 set bcmp d_bcmp
7760 eval $inlibc
7761
7762 : see if bcopy exists
7763 set bcopy d_bcopy
7764 eval $inlibc
7765
7766 : see if this is a unistd.h system
7767 set unistd.h i_unistd
7768 eval $inhdr
7769
7770 : see if getpgrp exists
7771 set getpgrp d_getpgrp
7772 eval $inlibc
7773
7774 case "$d_getpgrp" in
7775 "$define")
7776         echo " "
7777         echo "Checking to see which flavor of getpgrp is in use..."
7778         $cat >set.c <<EOP
7779 #$i_unistd I_UNISTD
7780 #include <sys/types.h>
7781 #ifdef I_UNISTD
7782 #  include <unistd.h>
7783 #endif
7784 int main()
7785 {
7786         if (getuid() == 0) {
7787                 printf("(I see you are running Configure as super-user...)\n");
7788                 setuid(1);
7789         }
7790 #ifdef TRY_BSD_PGRP
7791         if (getpgrp(1) == 0)
7792                 exit(0);
7793 #else
7794         if (getpgrp() > 0)
7795                 exit(0);
7796 #endif
7797         exit(1);
7798 }
7799 EOP
7800         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7801                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
7802                 val="$define"
7803         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7804                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
7805                 val="$undef"
7806         else
7807                 echo "I can't seem to compile and run the test program."
7808                 if ./usg; then
7809                         xxx="a USG one, i.e. you use getpgrp()."
7810                 else
7811                         # SVR4 systems can appear rather BSD-ish.
7812                         case "$i_unistd" in
7813                         $undef)
7814                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
7815                                 val="$define"
7816                                 ;;
7817                         $define)
7818                                 xxx="probably a USG one, i.e. you use getpgrp()."
7819                                 val="$undef"
7820                                 ;;
7821                         esac
7822                 fi
7823                 echo "Assuming your getpgrp is $xxx" >&4
7824         fi
7825         ;;
7826 *) val="$undef";;
7827 esac
7828 set d_bsdgetpgrp
7829 eval $setvar
7830 $rm -f set set.c
7831
7832 : see if setpgrp exists
7833 set setpgrp d_setpgrp
7834 eval $inlibc
7835
7836 case "$d_setpgrp" in
7837 "$define")
7838         echo " "
7839         echo "Checking to see which flavor of setpgrp is in use..."
7840         $cat >set.c <<EOP
7841 #$i_unistd I_UNISTD
7842 #include <sys/types.h>
7843 #ifdef I_UNISTD
7844 #  include <unistd.h>
7845 #endif
7846 int main()
7847 {
7848         if (getuid() == 0) {
7849                 printf("(I see you are running Configure as super-user...)\n");
7850                 setuid(1);
7851         }
7852 #ifdef TRY_BSD_PGRP
7853         if (-1 == setpgrp(1, 1))
7854                 exit(0);
7855 #else
7856         if (setpgrp() != -1)
7857                 exit(0);
7858 #endif
7859         exit(1);
7860 }
7861 EOP
7862         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7863                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
7864                 val="$define"
7865         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7866                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
7867                 val="$undef"
7868         else
7869                 echo "(I can't seem to compile and run the test program.)"
7870                 if ./usg; then
7871                         xxx="a USG one, i.e. you use setpgrp()."
7872                 else
7873                         # SVR4 systems can appear rather BSD-ish.
7874                         case "$i_unistd" in
7875                         $undef)
7876                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
7877                                 val="$define"
7878                                 ;;
7879                         $define)
7880                                 xxx="probably a USG one, i.e. you use setpgrp()."
7881                                 val="$undef"
7882                                 ;;
7883                         esac
7884                 fi
7885                 echo "Assuming your setpgrp is $xxx" >&4
7886         fi
7887         ;;
7888 *) val="$undef";;
7889 esac
7890 set d_bsdsetpgrp
7891 eval $setvar
7892 $rm -f set set.c
7893 : see if bzero exists
7894 set bzero d_bzero
7895 eval $inlibc
7896
7897 : see if signal is declared as pointer to function returning int or void
7898 echo " "
7899 xxx=`./findhdr signal.h`
7900 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
7901 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
7902         echo "You have int (*signal())() instead of void." >&4
7903         val="$undef"
7904 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
7905         echo "You have void (*signal())()." >&4
7906         val="$define"
7907 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
7908         echo "You have int (*signal())() instead of void." >&4
7909         val="$undef"
7910 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
7911         echo "You have void (*signal())()." >&4
7912         val="$define"
7913 else
7914         case "$d_voidsig" in
7915         '')
7916         echo "I can't determine whether signal handler returns void or int..." >&4
7917                 dflt=void
7918                 rp="What type does your signal handler return?"
7919                 . ./myread
7920                 case "$ans" in
7921                 v*) val="$define";;
7922                 *) val="$undef";;
7923                 esac;;
7924         "$define")
7925                 echo "As you already told me, signal handler returns void." >&4
7926                 val="$define"
7927                 ;;
7928         *)      echo "As you already told me, signal handler returns int." >&4
7929                 val="$undef"
7930                 ;;
7931         esac
7932 fi
7933 set d_voidsig
7934 eval $setvar
7935 case "$d_voidsig" in
7936 "$define") signal_t="void";;
7937 *) signal_t="int";;
7938 esac
7939 $rm -f $$.tmp
7940
7941 : check for ability to cast large floats to 32-bit ints.
7942 echo " "
7943 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
7944 if $test "$intsize" -ge 4; then
7945         xxx=int
7946 else
7947         xxx=long
7948 fi
7949 $cat >try.c <<EOCP
7950 #include <stdio.h>
7951 #include <sys/types.h>
7952 #include <signal.h>
7953 $signal_t blech(s) int s; { exit(3); }
7954 int main()
7955 {
7956         $xxx i32;
7957         double f, g;
7958         int result = 0;
7959         char str[16];
7960         signal(SIGFPE, blech);
7961
7962         /* Don't let compiler optimize the test away.  Store the number 
7963            in a writable string for gcc to pass to sscanf under HP/UX.
7964         */
7965         sprintf(str, "2147483647");
7966         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
7967         g = 10 * f;
7968         i32  = ($xxx) g;
7969
7970         /* x86 processors will probably give 0x8000 0000, which is a
7971        sign change.  We don't want that.  We want to mimic SPARC
7972            behavior here, which is to preserve the sign and give
7973            back 0x7fff ffff.
7974         */
7975         if (i32 != ($xxx) f)
7976                 result |= 1;
7977         exit(result);
7978 }
7979 EOCP
7980 set try
7981 if eval $compile_ok; then
7982         ./try
7983         yyy=$?
7984 else
7985         echo "(I can't seem to compile the test program--assuming it can't)"
7986         yyy=1
7987 fi
7988 case "$yyy" in
7989 0)      val="$define"
7990         echo "Yup, it can."
7991         ;;
7992 *)      val="$undef"
7993         echo "Nope, it can't."
7994         ;;
7995 esac
7996 set d_casti32
7997 eval $setvar
7998 $rm -f try try.*
7999
8000 : check for ability to cast negative floats to unsigned
8001 echo " "
8002 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
8003 $cat >try.c <<EOCP
8004 #include <stdio.h>
8005 #include <sys/types.h>
8006 #include <signal.h>
8007 $signal_t blech(s) int s; { exit(7); }
8008 $signal_t blech_in_list(s) int s; { exit(4); }
8009 unsigned long dummy_long(p) unsigned long p; { return p; }
8010 unsigned int dummy_int(p) unsigned int p; { return p; }
8011 unsigned short dummy_short(p) unsigned short p; { return p; }
8012 int main()
8013 {
8014         double f;
8015         unsigned long along;
8016         unsigned int aint;
8017         unsigned short ashort;
8018         int result = 0;
8019         char str[16];
8020         
8021         /* Frustrate gcc-2.7.2's optimizer which failed this test with
8022            a direct f = -123. assignment.  gcc-2.8.0 reportedly
8023            optimized the whole file away
8024         */
8025         /* Store the number in a writable string for gcc to pass to 
8026            sscanf under HP/UX.
8027         */
8028         sprintf(str, "-123");
8029         sscanf(str, "%lf", &f);  /* f = -123.; */
8030
8031         signal(SIGFPE, blech);
8032         along = (unsigned long)f;
8033         aint = (unsigned int)f;
8034         ashort = (unsigned short)f;
8035         if (along != (unsigned long)-123)
8036                 result |= 1;
8037         if (aint != (unsigned int)-123)
8038                 result |= 1;
8039         if (ashort != (unsigned short)-123)
8040                 result |= 1;
8041         sprintf(str, "1073741824.");
8042         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
8043         f = f + f;
8044         along = 0;
8045         along = (unsigned long)f;
8046         if (along != 0x80000000)
8047                 result |= 2;
8048         f -= 1.;
8049         along = 0;
8050         along = (unsigned long)f;
8051         if (along != 0x7fffffff)
8052                 result |= 1;
8053         f += 2.;
8054         along = 0;
8055         along = (unsigned long)f;
8056         if (along != 0x80000001)
8057                 result |= 2;
8058         if (result)
8059                 exit(result);
8060         signal(SIGFPE, blech_in_list);
8061         sprintf(str, "123.");
8062         sscanf(str, "%lf", &f);  /* f = 123.; */
8063         along = dummy_long((unsigned long)f);
8064         aint = dummy_int((unsigned int)f);
8065         ashort = dummy_short((unsigned short)f);
8066         if (along != (unsigned long)123)
8067                 result |= 4;
8068         if (aint != (unsigned int)123)
8069                 result |= 4;
8070         if (ashort != (unsigned short)123)
8071                 result |= 4;
8072         exit(result);
8073
8074 }
8075 EOCP
8076 set try
8077 if eval $compile_ok; then
8078         ./try
8079         castflags=$?
8080 else
8081         echo "(I can't seem to compile the test program--assuming it can't)"
8082         castflags=7
8083 fi
8084 case "$castflags" in
8085 0)      val="$define"
8086         echo "Yup, it can."
8087         ;;
8088 *)      val="$undef"
8089         echo "Nope, it can't."
8090         ;;
8091 esac
8092 set d_castneg
8093 eval $setvar
8094 $rm -f try.*
8095
8096 : see if vprintf exists
8097 echo " "
8098 if set vprintf val -f d_vprintf; eval $csym; $val; then
8099         echo 'vprintf() found.' >&4
8100         val="$define"
8101         $cat >vprintf.c <<'EOF'
8102 #include <varargs.h>
8103
8104 int main() { xxx("foo"); }
8105
8106 xxx(va_alist)
8107 va_dcl
8108 {
8109         va_list args;
8110         char buf[10];
8111
8112         va_start(args);
8113         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
8114 }
8115 EOF
8116         set vprintf
8117         if eval $compile && ./vprintf; then
8118                 echo "Your vsprintf() returns (int)." >&4
8119                 val2="$undef"
8120         else
8121                 echo "Your vsprintf() returns (char*)." >&4
8122                 val2="$define"
8123         fi
8124 else
8125         echo 'vprintf() NOT found.' >&4
8126                 val="$undef"
8127                 val2="$undef"
8128 fi
8129 set d_vprintf
8130 eval $setvar
8131 val=$val2
8132 set d_charvspr
8133 eval $setvar
8134
8135 : see if chown exists
8136 set chown d_chown
8137 eval $inlibc
8138
8139 : see if chroot exists
8140 set chroot d_chroot
8141 eval $inlibc
8142
8143 : see if chsize exists
8144 set chsize d_chsize
8145 eval $inlibc
8146
8147 : check for const keyword
8148 echo " "
8149 echo 'Checking to see if your C compiler knows about "const"...' >&4
8150 $cat >const.c <<'EOCP'
8151 typedef struct spug { int drokk; } spug;
8152 int main()
8153 {
8154         const char *foo;
8155         const spug y;
8156 }
8157 EOCP
8158 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
8159         val="$define"
8160         echo "Yup, it does."
8161 else
8162         val="$undef"
8163         echo "Nope, it doesn't."
8164 fi
8165 set d_const
8166 eval $setvar
8167
8168 : see if crypt exists
8169 echo " "
8170 if set crypt val -f d_crypt; eval $csym; $val; then
8171         echo 'crypt() found.' >&4
8172         val="$define"
8173         cryptlib=''
8174 else
8175         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
8176         if $test -z "$cryptlib"; then
8177                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
8178         else
8179                 cryptlib=-lcrypt
8180         fi
8181         if $test -z "$cryptlib"; then
8182                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
8183         else
8184                 cryptlib=-lcrypt
8185         fi
8186         if $test -z "$cryptlib"; then
8187                 cryptlib=`./loc libcrypt$_a "" $libpth`
8188         else
8189                 cryptlib=-lcrypt
8190         fi
8191         if $test -z "$cryptlib"; then
8192                 echo 'crypt() NOT found.' >&4
8193                 val="$undef"
8194         else
8195                 val="$define"
8196         fi
8197 fi
8198 set d_crypt
8199 eval $setvar
8200
8201 : get csh whereabouts
8202 case "$csh" in
8203 'csh') val="$undef" ;;
8204 *) val="$define" ;;
8205 esac
8206 set d_csh
8207 eval $setvar
8208 : Respect a hint or command line value for full_csh.
8209 case "$full_csh" in
8210 '') full_csh=$csh ;;
8211 esac
8212
8213 : see if cuserid exists
8214 set cuserid d_cuserid
8215 eval $inlibc
8216
8217 : see if this is a limits.h system
8218 set limits.h i_limits
8219 eval $inhdr
8220
8221 : see if this is a float.h system
8222 set float.h i_float
8223 eval $inhdr
8224
8225 : See if number of significant digits in a double precision number is known
8226 echo " "
8227 $cat >dbl_dig.c <<EOM
8228 #$i_limits I_LIMITS
8229 #$i_float I_FLOAT
8230 #ifdef I_LIMITS
8231 #include <limits.h>
8232 #endif
8233 #ifdef I_FLOAT
8234 #include <float.h>
8235 #endif
8236 #ifdef DBL_DIG
8237 printf("Contains DBL_DIG");
8238 #endif
8239 EOM
8240 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
8241 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
8242         echo "DBL_DIG found." >&4
8243         val="$define"
8244 else
8245         echo "DBL_DIG NOT found." >&4
8246         val="$undef"
8247 fi
8248 $rm -f dbl_dig.?
8249 set d_dbl_dig
8250 eval $setvar
8251
8252 : see if difftime exists
8253 set difftime d_difftime
8254 eval $inlibc
8255
8256 : see if this is a dirent system
8257 echo " "
8258 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
8259         val="$define"
8260         echo "<dirent.h> found." >&4
8261 else
8262         val="$undef"
8263         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
8264                 echo "<sys/dir.h> found." >&4
8265                 echo " "
8266         else
8267                 xinc=`./findhdr sys/ndir.h`
8268         fi
8269         echo "<dirent.h> NOT found." >&4
8270 fi
8271 set i_dirent
8272 eval $setvar
8273
8274 : Look for type of directory structure.
8275 echo " "
8276 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8277
8278 case "$direntrytype" in
8279 ''|' ')
8280         case "$i_dirent" in
8281         $define) guess1='struct dirent' ;;
8282         *) guess1='struct direct'  ;;
8283         esac
8284         ;;
8285 *)      guess1="$direntrytype"
8286         ;;
8287 esac
8288
8289 case "$guess1" in
8290 'struct dirent') guess2='struct direct' ;;
8291 *) guess2='struct dirent' ;;
8292 esac
8293                 
8294 if $contains "$guess1" try.c >/dev/null 2>&1; then
8295         direntrytype="$guess1"
8296         echo "Your directory entries are $direntrytype." >&4
8297 elif $contains "$guess2" try.c >/dev/null 2>&1; then
8298         direntrytype="$guess2"
8299         echo "Your directory entries seem to be $direntrytype." >&4
8300 else
8301         echo "I don't recognize your system's directory entries." >&4
8302         rp="What type is used for directory entries on this system?"
8303         dflt="$guess1"
8304         . ./myread
8305         direntrytype="$ans"
8306 fi
8307 $rm -f try.c
8308
8309
8310 : see if the directory entry stores field length
8311 echo " "
8312 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8313 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
8314         echo "Good, your directory entry keeps length information in d_namlen." >&4
8315         val="$define"
8316 else
8317         echo "Your directory entry does not know about the d_namlen field." >&4
8318         val="$undef"
8319 fi
8320 set d_dirnamlen
8321 eval $setvar
8322 $rm -f try.c
8323
8324 : see if dlerror exists
8325 xxx_runnm="$runnm"
8326 runnm=false
8327 set dlerror d_dlerror
8328 eval $inlibc
8329 runnm="$xxx_runnm"
8330
8331 : see if dlfcn is available
8332 set dlfcn.h i_dlfcn
8333 eval $inhdr
8334
8335 case "$usedl" in
8336 $define|y|true)
8337         $cat << EOM
8338
8339 On a few systems, the dynamically loaded modules that perl generates and uses
8340 will need a different extension than shared libs. The default will probably
8341 be appropriate.
8342
8343 EOM
8344         case "$dlext" in
8345         '')     dflt="$so" ;;
8346         *)      dflt="$dlext" ;;
8347         esac
8348         rp='What is the extension of dynamically loaded modules'
8349         . ./myread
8350         dlext="$ans"
8351         ;;
8352 *)
8353         dlext="none"
8354         ;;
8355 esac
8356
8357 : Check if dlsym need a leading underscore
8358 echo " "
8359 val="$undef"
8360
8361 case "$dlsrc" in
8362 dl_dlopen.xs)
8363         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
8364         $cat >dyna.c <<'EOM'
8365 fred () { }
8366 EOM
8367
8368 $cat >fred.c<<EOM
8369
8370 #include <stdio.h>
8371 #$i_dlfcn I_DLFCN
8372 #ifdef I_DLFCN
8373 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
8374 #else
8375 #include <sys/types.h>
8376 #include <nlist.h>
8377 #include <link.h>
8378 #endif
8379
8380 extern int fred() ;
8381
8382 int main()
8383 {
8384     void * handle ;
8385     void * symbol ;
8386 #ifndef RTLD_LAZY
8387     int mode = 1 ;
8388 #else
8389     int mode = RTLD_LAZY ;
8390 #endif
8391     handle = dlopen("./dyna.$dlext", mode) ;
8392     if (handle == NULL) {
8393         printf ("1\n") ;
8394         fflush (stdout) ;
8395         exit(0);
8396     }
8397     symbol = dlsym(handle, "fred") ;
8398     if (symbol == NULL) {
8399         /* try putting a leading underscore */
8400         symbol = dlsym(handle, "_fred") ;
8401         if (symbol == NULL) {
8402             printf ("2\n") ;
8403             fflush (stdout) ;
8404             exit(0);
8405         }
8406         printf ("3\n") ;
8407     }
8408     else
8409         printf ("4\n") ;
8410     fflush (stdout) ;
8411     exit(0);
8412 }
8413 EOM
8414         : Call the object file tmp-dyna.o in case dlext=o.
8415         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
8416                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
8417                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
8418                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
8419                 xxx=`./fred`
8420                 case $xxx in
8421                 1)      echo "Test program failed using dlopen." >&4
8422                         echo "Perhaps you should not use dynamic loading." >&4;;
8423                 2)      echo "Test program failed using dlsym." >&4
8424                         echo "Perhaps you should not use dynamic loading." >&4;;
8425                 3)      echo "dlsym needs a leading underscore" >&4
8426                         val="$define" ;;
8427                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
8428                 esac
8429         else
8430                 echo "I can't compile and run the test program." >&4
8431                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
8432         fi
8433         ;;
8434 esac
8435                 
8436 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
8437
8438 set d_dlsymun
8439 eval $setvar
8440
8441 hasproto='varname=$1; func=$2; shift; shift;
8442 while $test $# -ge 2; do
8443         case "$1" in
8444         $define) echo "#include <$2>";;
8445         esac ;
8446     shift 2;
8447 done > try.c;
8448 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
8449 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
8450         echo "$func() prototype found.";
8451         val="$define";
8452 else
8453         echo "$func() prototype NOT found.";
8454         val="$undef";
8455 fi;
8456 set $varname;
8457 eval $setvar;
8458 $rm -f try.c tryout.c'
8459
8460 : see if prototype for drand48 is available
8461 echo " "
8462 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
8463 eval $hasproto
8464
8465 : see if dup2 exists
8466 set dup2 d_dup2
8467 eval $inlibc
8468
8469 : see if eaccess exists
8470 set eaccess d_eaccess
8471 eval $inlibc
8472
8473 : see if endgrent exists
8474 set endgrent d_endgrent
8475 eval $inlibc
8476
8477 : see if endhostent exists
8478 set endhostent d_endhent
8479 eval $inlibc
8480
8481 : see if endnetent exists
8482 set endnetent d_endnent
8483 eval $inlibc
8484
8485 : see if endprotoent exists
8486 set endprotoent d_endpent
8487 eval $inlibc
8488
8489 : see if endpwent exists
8490 set endpwent d_endpwent
8491 eval $inlibc
8492
8493 : see if endservent exists
8494 set endservent d_endsent
8495 eval $inlibc
8496
8497 : see if endspent exists
8498 set endspent d_endspent
8499 eval $inlibc
8500
8501 : Locate the flags for 'open()'
8502 echo " "
8503 $cat >open3.c <<'EOCP'
8504 #include <sys/types.h>
8505 #ifdef I_FCNTL
8506 #include <fcntl.h>
8507 #endif
8508 #ifdef I_SYS_FILE
8509 #include <sys/file.h>
8510 #endif
8511 int main() {
8512         if(O_RDONLY);
8513 #ifdef O_TRUNC
8514         exit(0);
8515 #else
8516         exit(1);
8517 #endif
8518 }
8519 EOCP
8520 : check sys/file.h first to get FREAD on Sun
8521 if $test `./findhdr sys/file.h` && \
8522                 set open3 -DI_SYS_FILE && eval $compile; then
8523         h_sysfile=true;
8524         echo "<sys/file.h> defines the O_* constants..." >&4
8525         if ./open3; then
8526                 echo "and you have the 3 argument form of open()." >&4
8527                 val="$define"
8528         else
8529                 echo "but not the 3 argument form of open().  Oh, well." >&4
8530                 val="$undef"
8531         fi
8532 elif $test `./findhdr fcntl.h` && \
8533                 set open3 -DI_FCNTL && eval $compile; then
8534         h_fcntl=true;
8535         echo "<fcntl.h> defines the O_* constants..." >&4
8536         if ./open3; then
8537                 echo "and you have the 3 argument form of open()." >&4
8538                 val="$define"
8539         else
8540                 echo "but not the 3 argument form of open().  Oh, well." >&4
8541                 val="$undef"
8542         fi
8543 else
8544         val="$undef"
8545         echo "I can't find the O_* constant definitions!  You got problems." >&4
8546 fi
8547 set d_open3
8548 eval $setvar
8549 $rm -f open3*
8550
8551 : see which of string.h or strings.h is needed
8552 echo " "
8553 strings=`./findhdr string.h`
8554 if $test "$strings" && $test -r "$strings"; then
8555         echo "Using <string.h> instead of <strings.h>." >&4
8556         val="$define"
8557 else
8558         val="$undef"
8559         strings=`./findhdr strings.h`
8560         if $test "$strings" && $test -r "$strings"; then
8561                 echo "Using <strings.h> instead of <string.h>." >&4
8562         else
8563                 echo "No string header found -- You'll surely have problems." >&4
8564         fi
8565 fi
8566 set i_string
8567 eval $setvar
8568 case "$i_string" in
8569 "$undef") strings=`./findhdr strings.h`;;
8570 *)        strings=`./findhdr string.h`;;
8571 esac
8572
8573 : check for non-blocking I/O stuff
8574 case "$h_sysfile" in
8575 true) echo "#include <sys/file.h>" > head.c;;
8576 *)
8577         case "$h_fcntl" in
8578         true) echo "#include <fcntl.h>" > head.c;;
8579         *) echo "#include <sys/fcntl.h>" > head.c;;
8580         esac
8581         ;;
8582 esac
8583 echo " "
8584 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
8585 case "$o_nonblock" in
8586 '')
8587         $cat head.c > try.c
8588         $cat >>try.c <<'EOCP'
8589 #include <stdio.h>
8590 int main() {
8591 #ifdef O_NONBLOCK
8592         printf("O_NONBLOCK\n");
8593         exit(0);
8594 #endif
8595 #ifdef O_NDELAY
8596         printf("O_NDELAY\n");
8597         exit(0);
8598 #endif
8599 #ifdef FNDELAY
8600         printf("FNDELAY\n");
8601         exit(0);
8602 #endif
8603         exit(0);
8604 }
8605 EOCP
8606         set try
8607         if eval $compile_ok; then
8608                 o_nonblock=`./try`
8609                 case "$o_nonblock" in
8610                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
8611                 *) echo "Seems like we can use $o_nonblock.";;
8612                 esac
8613         else
8614                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
8615         fi
8616         ;;
8617 *) echo "Using $hint value $o_nonblock.";;
8618 esac
8619 $rm -f try try.* .out core
8620
8621 echo " "
8622 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
8623 case "$eagain" in
8624 '')
8625         $cat head.c > try.c
8626         $cat >>try.c <<EOCP
8627 #include <errno.h>
8628 #include <sys/types.h>
8629 #include <signal.h>
8630 #include <stdio.h> 
8631 #define MY_O_NONBLOCK $o_nonblock
8632 #ifndef errno  /* XXX need better Configure test */
8633 extern int errno;
8634 #endif
8635 #$i_unistd I_UNISTD
8636 #ifdef I_UNISTD
8637 #include <unistd.h>
8638 #endif
8639 #ifdef $i_string
8640 #include <string.h>
8641 #else
8642 #include <strings.h>
8643 #endif
8644 $signal_t blech(x) int x; { exit(3); }
8645 EOCP
8646         $cat >> try.c <<'EOCP'
8647 int main()
8648 {
8649         int pd[2];
8650         int pu[2];
8651         char buf[1];
8652         char string[100];
8653
8654         pipe(pd);       /* Down: child -> parent */
8655         pipe(pu);       /* Up: parent -> child */
8656         if (0 != fork()) {
8657                 int ret;
8658                 close(pd[1]);   /* Parent reads from pd[0] */
8659                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
8660                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
8661                         exit(1);
8662                 signal(SIGALRM, blech);
8663                 alarm(5);
8664                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
8665                         exit(2);
8666                 sprintf(string, "%d\n", ret);
8667                 write(2, string, strlen(string));
8668                 alarm(0);
8669 #ifdef EAGAIN
8670                 if (errno == EAGAIN) {
8671                         printf("EAGAIN\n");
8672                         goto ok;
8673                 }
8674 #endif
8675 #ifdef EWOULDBLOCK
8676                 if (errno == EWOULDBLOCK)
8677                         printf("EWOULDBLOCK\n");
8678 #endif
8679         ok:
8680                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
8681                 sleep(2);                               /* Give it time to close our pipe */
8682                 alarm(5);
8683                 ret = read(pd[0], buf, 1);      /* Should read EOF */
8684                 alarm(0);
8685                 sprintf(string, "%d\n", ret);
8686                 write(3, string, strlen(string));
8687                 exit(0);
8688         }
8689
8690         close(pd[0]);                   /* We write to pd[1] */
8691         close(pu[1]);                   /* We read from pu[0] */
8692         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
8693         close(pd[1]);                   /* Pipe pd is now fully closed! */
8694         exit(0);                                /* Bye bye, thank you for playing! */
8695 }
8696 EOCP
8697         set try
8698         if eval $compile_ok; then
8699                 echo "$startsh" >mtry
8700                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
8701                 chmod +x mtry
8702                 ./mtry >/dev/null 2>&1
8703                 case $? in
8704                 0) eagain=`$cat try.out`;;
8705                 1) echo "Could not perform non-blocking setting!";;
8706                 2) echo "I did a successful read() for something that was not there!";;
8707                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
8708                 *) echo "Something terribly wrong happened during testing.";;
8709                 esac
8710                 rd_nodata=`$cat try.ret`
8711                 echo "A read() system call with no data present returns $rd_nodata."
8712                 case "$rd_nodata" in
8713                 0|-1) ;;
8714                 *)
8715                         echo "(That's peculiar, fixing that to be -1.)"
8716                         rd_nodata=-1
8717                         ;;
8718                 esac
8719                 case "$eagain" in
8720                 '')
8721                         echo "Forcing errno EAGAIN on read() with no data available."
8722                         eagain=EAGAIN
8723                         ;;
8724                 *)
8725                         echo "Your read() sets errno to $eagain when no data is available."
8726                         ;;
8727                 esac
8728                 status=`$cat try.err`
8729                 case "$status" in
8730                 0) echo "And it correctly returns 0 to signal EOF.";;
8731                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
8732                 *) echo "However, your read() returns '$status' on EOF??";;
8733                 esac
8734                 val="$define"
8735                 if test "$status" = "$rd_nodata"; then
8736                         echo "WARNING: you can't distinguish between EOF and no data!"
8737                         val="$undef"
8738                 fi
8739         else
8740                 echo "I can't compile the test program--assuming errno EAGAIN will do."
8741                 eagain=EAGAIN
8742         fi
8743         set d_eofnblk
8744         eval $setvar
8745         ;;
8746 *)
8747         echo "Using $hint value $eagain."
8748         echo "Your read() returns $rd_nodata when no data is present."
8749         case "$d_eofnblk" in
8750         "$define") echo "And you can see EOF because read() returns 0.";;
8751         "$undef") echo "But you can't see EOF status from read() returned value.";;
8752         *)
8753                 echo "(Assuming you can't see EOF status from read anyway.)"
8754                 d_eofnblk=$undef
8755                 ;;
8756         esac
8757         ;;
8758 esac
8759 $rm -f try try.* .out core head.c mtry
8760
8761 : see if fchmod exists
8762 set fchmod d_fchmod
8763 eval $inlibc
8764
8765 : see if fchown exists
8766 set fchown d_fchown
8767 eval $inlibc
8768
8769 : see if this is an fcntl system
8770 set fcntl d_fcntl
8771 eval $inlibc
8772
8773 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
8774 while $test $# -ge 2; do
8775         case "$1" in
8776         $define) echo "#include <$2>";;
8777         esac ;
8778     shift 2;
8779 done > try.c;
8780 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
8781 set try;
8782 if eval $compile; then
8783         val="$define";
8784 else
8785         val="$undef";
8786 fi;
8787 set $varname;
8788 eval $setvar;
8789 $rm -f try.c try.o'
8790
8791 socketlib=''
8792 sockethdr=''
8793 : see whether socket exists
8794 echo " "
8795 $echo $n "Hmm... $c" >&4
8796 if set socket val -f d_socket; eval $csym; $val; then
8797         echo "Looks like you have Berkeley networking support." >&4
8798         d_socket="$define"
8799         if set setsockopt val -f; eval $csym; $val; then
8800                 d_oldsock="$undef"
8801         else
8802                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
8803                 d_oldsock="$define"
8804         fi
8805 else
8806         if $contains socklib libc.list >/dev/null 2>&1; then
8807                 echo "Looks like you have Berkeley networking support." >&4
8808                 d_socket="$define"
8809                 : we will have to assume that it supports the 4.2 BSD interface
8810                 d_oldsock="$undef"
8811         else
8812                 echo "You don't have Berkeley networking in libc$_a..." >&4
8813                 if test "X$d_socket" = "X$define"; then
8814                    echo "...but you seem to believe that you have sockets." >&4
8815                 else
8816                         for net in net socket
8817                         do
8818                                 if test -f /usr/lib/lib$net$_a; then
8819                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
8820                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
8821                                         if $contains socket libc.list >/dev/null 2>&1; then
8822                                                 d_socket="$define"
8823                                                 socketlib="-l$net"
8824                                                 case "$net" in
8825                                                 net)
8826                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
8827                                                         sockethdr="-I/usr/netinclude"
8828                                                         ;;
8829                                                 esac
8830                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
8831                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
8832                                                         d_oldsock="$undef"
8833                                                 else
8834                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
8835                                                         d_oldsock="$define"
8836                                                 fi
8837                                                 break
8838                                         fi
8839                                 fi
8840                         done
8841                         if test "X$d_socket" != "X$define"; then
8842                            echo "or anywhere else I see." >&4
8843                            d_socket="$undef"
8844                            d_oldsock="$undef"
8845                         fi
8846                 fi
8847         fi
8848 fi
8849
8850 : see if socketpair exists
8851 set socketpair d_sockpair
8852 eval $inlibc
8853
8854
8855 echo " "
8856 echo "Checking the availability of certain socket constants..." >& 4
8857 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
8858         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
8859         $cat >try.c <<EOF
8860 #include <sys/types.h>
8861 #include <sys/socket.h>
8862 int main() {
8863     int i = $ENUM;
8864 }
8865 EOF
8866         val="$undef"
8867         set try; if eval $compile; then
8868                 val="$define"
8869         fi
8870         set d_${enum}; eval $setvar
8871         $rm -f try.c try
8872 done
8873
8874 : see if sys/select.h has to be included
8875 set sys/select.h i_sysselct
8876 eval $inhdr
8877
8878 : see if we should include time.h, sys/time.h, or both
8879 echo " "
8880 if test "X$timeincl" = X; then
8881         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
8882         $echo $n "I'm now running the test program...$c"
8883         $cat >try.c <<'EOCP'
8884 #include <sys/types.h>
8885 #ifdef I_TIME
8886 #include <time.h>
8887 #endif
8888 #ifdef I_SYSTIME
8889 #ifdef SYSTIMEKERNEL
8890 #define KERNEL
8891 #endif
8892 #include <sys/time.h>
8893 #endif
8894 #ifdef I_SYSSELECT
8895 #include <sys/select.h>
8896 #endif
8897 int main()
8898 {
8899         struct tm foo;
8900 #ifdef S_TIMEVAL
8901         struct timeval bar;
8902 #endif
8903 #ifdef S_TIMEZONE
8904         struct timezone tzp;
8905 #endif
8906         if (foo.tm_sec == foo.tm_sec)
8907                 exit(0);
8908 #ifdef S_TIMEVAL
8909         if (bar.tv_sec == bar.tv_sec)
8910                 exit(0);
8911 #endif
8912         exit(1);
8913 }
8914 EOCP
8915         flags=''
8916         for s_timezone in '-DS_TIMEZONE' ''; do
8917         sysselect=''
8918         for s_timeval in '-DS_TIMEVAL' ''; do
8919         for i_systimek in '' '-DSYSTIMEKERNEL'; do
8920         for i_time in '' '-DI_TIME'; do
8921         for i_systime in '-DI_SYSTIME' ''; do
8922                 case "$flags" in
8923                 '') $echo $n ".$c"
8924                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
8925                         if eval $compile; then
8926                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
8927                                 shift
8928                                 flags="$*"
8929                                 echo " "
8930                                 $echo $n "Succeeded with $flags$c"
8931                         fi
8932                         ;;
8933                 esac
8934         done
8935         done
8936         done
8937         done
8938         done
8939         timeincl=''
8940         echo " "
8941         case "$flags" in
8942         *SYSTIMEKERNEL*) i_systimek="$define"
8943                 timeincl=`./findhdr sys/time.h`
8944                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
8945         *) i_systimek="$undef";;
8946         esac
8947         case "$flags" in
8948         *I_TIME*) i_time="$define"
8949                 timeincl=`./findhdr time.h`" $timeincl"
8950                 echo "We'll include <time.h>." >&4;;
8951         *) i_time="$undef";;
8952         esac
8953         case "$flags" in
8954         *I_SYSTIME*) i_systime="$define"
8955                 timeincl=`./findhdr sys/time.h`" $timeincl"
8956                 echo "We'll include <sys/time.h>." >&4;;
8957         *) i_systime="$undef";;
8958         esac
8959         $rm -f try.c try
8960 fi
8961
8962 : check for fd_set items
8963 $cat <<EOM
8964
8965 Checking to see how well your C compiler handles fd_set and friends ...
8966 EOM
8967 $cat >fd_set.c <<EOCP
8968 #$i_systime I_SYS_TIME
8969 #$i_sysselct I_SYS_SELECT
8970 #$d_socket HAS_SOCKET
8971 #include <sys/types.h>
8972 #ifdef HAS_SOCKET
8973 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
8974 #endif
8975 #ifdef I_SYS_TIME
8976 #include <sys/time.h>
8977 #endif
8978 #ifdef I_SYS_SELECT
8979 #include <sys/select.h>
8980 #endif
8981 int main() {
8982         fd_set fds;
8983
8984 #ifdef TRYBITS
8985         if(fds.fds_bits);
8986 #endif
8987
8988 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
8989         exit(0);
8990 #else
8991         exit(1);
8992 #endif
8993 }
8994 EOCP
8995 set fd_set -DTRYBITS
8996 if eval $compile; then
8997         d_fds_bits="$define"
8998         d_fd_set="$define"
8999         echo "Well, your system knows about the normal fd_set typedef..." >&4
9000         if ./fd_set; then
9001                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
9002                 d_fd_macros="$define"
9003         else
9004                 $cat >&4 <<'EOM'
9005 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
9006 EOM
9007                 d_fd_macros="$undef"
9008         fi
9009 else
9010         $cat <<'EOM'
9011 Hmm, your compiler has some difficulty with fd_set.  Checking further...
9012 EOM
9013         set fd_set
9014         if eval $compile; then
9015                 d_fds_bits="$undef"
9016                 d_fd_set="$define"
9017                 echo "Well, your system has some sort of fd_set available..." >&4
9018                 if ./fd_set; then
9019                         echo "and you have the normal fd_set macros." >&4
9020                         d_fd_macros="$define"
9021                 else
9022                         $cat <<'EOM'
9023 but not the normal fd_set macros!  Gross!  More work for me...
9024 EOM
9025                         d_fd_macros="$undef"
9026                 fi
9027         else
9028         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
9029                 d_fd_set="$undef"
9030                 d_fds_bits="$undef"
9031                 d_fd_macros="$undef"
9032         fi
9033 fi
9034 $rm -f fd_set*
9035
9036 : see if fgetpos exists
9037 set fgetpos d_fgetpos
9038 eval $inlibc
9039
9040 : see if flock exists
9041 set flock d_flock
9042 eval $inlibc
9043
9044 : see if fork exists
9045 set fork d_fork
9046 eval $inlibc
9047
9048 : see if pathconf exists
9049 set pathconf d_pathconf
9050 eval $inlibc
9051
9052 : see if fpathconf exists
9053 set fpathconf d_fpathconf
9054 eval $inlibc
9055
9056
9057 : check for fpos64_t
9058 echo " "
9059 echo "Checking to see if you have fpos64_t..." >&4
9060 $cat >try.c <<EOCP
9061 #include <stdio.h>
9062 int main() { fpos64_t x = 7; }
9063 EOCP
9064 set try
9065 if eval $compile; then
9066         val="$define"
9067         echo "You have fpos64_t."
9068 else
9069         val="$undef"
9070         echo "You do not have fpos64_t."
9071         case "$fpossize" in
9072         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
9073         esac
9074 fi
9075 $rm -f try.* try
9076 set d_fpos64_t
9077 eval $setvar
9078
9079 hasstruct='varname=$1; struct=$2; shift; shift;
9080 while $test $# -ge 2; do
9081         case "$1" in
9082         $define) echo "#include <$2>";;
9083         esac ;
9084     shift 2;
9085 done > try.c;
9086 echo "int main () { struct $struct foo; }" >> try.c;
9087 set try;
9088 if eval $compile; then
9089         val="$define";
9090 else
9091         val="$undef";
9092 fi;
9093 set $varname;
9094 eval $setvar;
9095 $rm -f try.c try.o'
9096
9097 : see if this is a sys/param system
9098 set sys/param.h i_sysparam
9099 eval $inhdr
9100
9101 : see if this is a sys/mount.h system
9102 set sys/mount.h i_sysmount
9103 eval $inhdr
9104
9105 : see if sys/types.h has to be included
9106 set sys/types.h i_systypes
9107 eval $inhdr
9108
9109
9110 echo " "
9111 echo "Checking to see if your system supports struct fs_data..." >&4
9112 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
9113 eval $hasstruct
9114 case "$d_fs_data_s" in
9115 "$define")      echo "Yes, it does."   ;;
9116 *)              echo "No, it doesn't." ;;
9117 esac
9118
9119 : see if fseeko exists
9120 set fseeko d_fseeko
9121 eval $inlibc
9122 case "$longsize" in
9123 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
9124 esac
9125
9126 : see if fsetpos exists
9127 set fsetpos d_fsetpos
9128 eval $inlibc
9129
9130
9131 : see if fstatfs exists
9132 set fstatfs d_fstatfs
9133 eval $inlibc
9134
9135
9136 : see if statvfs exists
9137 set statvfs d_statvfs
9138 eval $inlibc
9139
9140 : see if fstatvfs exists
9141 set fstatvfs d_fstatvfs
9142 eval $inlibc
9143
9144
9145 : see if ftello exists
9146 set ftello d_ftello
9147 eval $inlibc
9148 case "$longsize" in
9149 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
9150 esac
9151
9152 : see if getcwd exists
9153 set getcwd d_getcwd
9154 eval $inlibc
9155
9156
9157 : see if getfsstat exists
9158 set getfsstat d_getfsstat
9159 eval $inlibc
9160
9161 : see if getgrent exists
9162 set getgrent d_getgrent
9163 eval $inlibc
9164
9165 : see if gethostbyaddr exists
9166 set gethostbyaddr d_gethbyaddr
9167 eval $inlibc
9168
9169 : see if gethostbyname exists
9170 set gethostbyname d_gethbyname
9171 eval $inlibc
9172
9173 : see if gethostent exists
9174 set gethostent d_gethent
9175 eval $inlibc
9176
9177 : see how we will look up host name
9178 echo " "
9179 call=''
9180 if set gethostname val -f d_gethname; eval $csym; $val; then
9181         echo 'gethostname() found.' >&4
9182         d_gethname="$define"
9183         call=gethostname
9184 fi
9185 if set uname val -f d_uname; eval $csym; $val; then
9186         if ./xenix; then
9187                 $cat <<'EOM'
9188 uname() was found, but you're running xenix, and older versions of xenix
9189 have a broken uname(). If you don't really know whether your xenix is old
9190 enough to have a broken system call, use the default answer.
9191
9192 EOM
9193                 dflt=y
9194                 case "$d_uname" in
9195                 "$define") dflt=n;;
9196                 esac
9197                 rp='Is your uname() broken?'
9198                 . ./myread
9199                 case "$ans" in
9200                 n*) d_uname="$define"; call=uname;;
9201                 esac
9202         else
9203                 echo 'uname() found.' >&4
9204                 d_uname="$define"
9205                 case "$call" in
9206                 '') call=uname ;;
9207                 esac
9208         fi
9209 fi
9210 case "$d_gethname" in
9211 '') d_gethname="$undef";;
9212 esac
9213 case "$d_uname" in
9214 '') d_uname="$undef";;
9215 esac
9216 case "$d_uname$d_gethname" in
9217 *define*)
9218         dflt=n
9219         cat <<EOM
9220  
9221 Every now and then someone has a $call() that lies about the hostname
9222 but can't be fixed for political or economic reasons.  If you wish, I can
9223 pretend $call() isn't there and maybe compute hostname at run-time
9224 thanks to the '$phostname' command.
9225
9226 EOM
9227         rp="Shall I ignore $call() from now on?"
9228         . ./myread
9229         case "$ans" in
9230         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
9231         esac;;
9232 esac
9233 case "$phostname" in
9234 '') aphostname='';;
9235 *) case "$aphostname" in
9236         /*) ;;
9237         *) set X $phostname
9238                 shift
9239                 file=$1
9240                 shift
9241                 file=`./loc $file $file $pth`
9242                 aphostname=`echo $file $*`
9243                 ;;
9244         esac
9245         ;;
9246 esac
9247 case "$d_uname$d_gethname" in
9248 *define*) ;;
9249 *)
9250         case "$phostname" in
9251         '')
9252                 echo "There will be no way for $package to get your hostname." >&4;;
9253         *)
9254         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
9255                 ;;
9256         esac;;
9257 esac
9258 case "$d_phostname" in
9259 '') d_phostname="$undef";;
9260 esac
9261
9262 : see if this is a netdb.h system
9263 set netdb.h i_netdb
9264 eval $inhdr
9265
9266 : see if prototypes for various gethostxxx netdb.h functions are available
9267 echo " "
9268 set d_gethostprotos gethostent $i_netdb netdb.h
9269 eval $hasproto
9270
9271 : see if getlogin exists
9272 set getlogin d_getlogin
9273 eval $inlibc
9274
9275 : see if getmnt exists
9276 set getmnt d_getmnt
9277 eval $inlibc
9278
9279 : see if getmntent exists
9280 set getmntent d_getmntent
9281 eval $inlibc
9282
9283 : see if getnetbyaddr exists
9284 set getnetbyaddr d_getnbyaddr
9285 eval $inlibc
9286
9287 : see if getnetbyname exists
9288 set getnetbyname d_getnbyname
9289 eval $inlibc
9290
9291 : see if getnetent exists
9292 set getnetent d_getnent
9293 eval $inlibc
9294
9295 : see if prototypes for various getnetxxx netdb.h functions are available
9296 echo " "
9297 set d_getnetprotos getnetent $i_netdb netdb.h
9298 eval $hasproto
9299
9300
9301 : see if getprotobyname exists
9302 set getprotobyname d_getpbyname
9303 eval $inlibc
9304
9305 : see if getprotobynumber exists
9306 set getprotobynumber d_getpbynumber
9307 eval $inlibc
9308
9309 : see if getprotoent exists
9310 set getprotoent d_getpent
9311 eval $inlibc
9312
9313 : see if getpgid exists
9314 set getpgid d_getpgid
9315 eval $inlibc
9316
9317 : see if getpgrp2 exists
9318 set getpgrp2 d_getpgrp2
9319 eval $inlibc
9320
9321 : see if getppid exists
9322 set getppid d_getppid
9323 eval $inlibc
9324
9325 : see if getpriority exists
9326 set getpriority d_getprior
9327 eval $inlibc
9328
9329 : see if prototypes for various getprotoxxx netdb.h functions are available
9330 echo " "
9331 set d_getprotoprotos getprotoent $i_netdb netdb.h
9332 eval $hasproto
9333
9334 : see if getpwent exists
9335 set getpwent d_getpwent
9336 eval $inlibc
9337
9338
9339 : see if getservbyname exists
9340 set getservbyname d_getsbyname
9341 eval $inlibc
9342
9343 : see if getservbyport exists
9344 set getservbyport d_getsbyport
9345 eval $inlibc
9346
9347 : see if getservent exists
9348 set getservent d_getsent
9349 eval $inlibc
9350
9351 : see if prototypes for various getservxxx netdb.h functions are available
9352 echo " "
9353 set d_getservprotos getservent $i_netdb netdb.h
9354 eval $hasproto
9355
9356 : see if getspent exists
9357 set getspent d_getspent
9358 eval $inlibc
9359
9360 : see if getspnam exists
9361 set getspnam d_getspnam
9362 eval $inlibc
9363
9364 : see if gettimeofday or ftime exists
9365 set gettimeofday d_gettimeod
9366 eval $inlibc
9367 case "$d_gettimeod" in
9368 "$undef")
9369         set ftime d_ftime 
9370         eval $inlibc
9371         ;;
9372 *)
9373         val="$undef"; set d_ftime; eval $setvar
9374         ;;
9375 esac
9376 case "$d_gettimeod$d_ftime" in
9377 "$undef$undef")
9378         echo " "
9379         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
9380         ;;
9381 esac
9382
9383 : see if this is an grp system
9384 set grp.h i_grp
9385 eval $inhdr
9386
9387 case "$i_grp" in
9388 $define)
9389         xxx=`./findhdr grp.h`
9390         $cppstdin $cppflags $cppminus < $xxx >$$.h
9391
9392         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
9393                 val="$define"
9394         else
9395                 val="$undef"
9396         fi
9397         set d_grpasswd
9398         eval $setvar
9399
9400         $rm -f $$.h
9401         ;;
9402 *)
9403         val="$undef";
9404         set d_grpasswd; eval $setvar
9405         ;;
9406 esac
9407
9408 : see if hasmntopt exists
9409 set hasmntopt d_hasmntopt
9410 eval $inlibc
9411
9412 : see if this is a netinet/in.h or sys/in.h system
9413 set netinet/in.h i_niin sys/in.h i_sysin
9414 eval $inhdr
9415
9416 : see if arpa/inet.h has to be included
9417 set arpa/inet.h i_arpainet
9418 eval $inhdr
9419
9420 : see if htonl --and friends-- exists
9421 val=''
9422 set htonl val
9423 eval $inlibc
9424
9425 : Maybe they are macros.
9426 case "$val" in
9427 $undef)
9428         $cat >htonl.c <<EOM
9429 #include <stdio.h>
9430 #include <sys/types.h>
9431 #$i_niin I_NETINET_IN
9432 #$i_sysin I_SYS_IN
9433 #$i_arpainet I_ARPA_INET
9434 #ifdef I_NETINET_IN
9435 #include <netinet/in.h>
9436 #endif
9437 #ifdef I_SYS_IN
9438 #include <sys/in.h>
9439 #endif
9440 #ifdef I_ARPA_INET
9441 #include <arpa/inet.h>
9442 #endif
9443 #ifdef htonl
9444 printf("Defined as a macro.");
9445 #endif
9446 EOM
9447         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
9448         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
9449                 val="$define"
9450                 echo "But it seems to be defined as a macro." >&4
9451         fi
9452         $rm -f htonl.?
9453         ;;
9454 esac
9455 set d_htonl
9456 eval $setvar
9457
9458 : see if iconv exists
9459 set iconv d_iconv
9460 eval $inlibc
9461
9462 : index or strchr
9463 echo " "
9464 if set index val -f; eval $csym; $val; then
9465         if set strchr val -f d_strchr; eval $csym; $val; then
9466                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
9467                         val="$define"
9468                         vali="$undef"
9469                         echo "strchr() found." >&4
9470                 else
9471                         val="$undef"
9472                         vali="$define"
9473                         echo "index() found." >&4
9474                 fi
9475         else
9476                 val="$undef"
9477                 vali="$define"
9478                 echo "index() found." >&4
9479         fi
9480 else
9481         if set strchr val -f d_strchr; eval $csym; $val; then
9482                 val="$define"
9483                 vali="$undef"
9484                 echo "strchr() found." >&4
9485         else
9486                 echo "No index() or strchr() found!" >&4
9487                 val="$undef"
9488                 vali="$undef"
9489         fi
9490 fi
9491 set d_strchr; eval $setvar
9492 val="$vali"
9493 set d_index; eval $setvar
9494
9495 : check whether inet_aton exists
9496 set inet_aton d_inetaton
9497 eval $inlibc
9498
9499 : see if inttypes.h is available
9500 : we want a real compile instead of Inhdr because some systems
9501 : have an inttypes.h which includes non-existent headers
9502 echo " "
9503 $cat >try.c <<EOCP
9504 #include <inttypes.h>
9505 int main() {
9506         static int32_t foo32 = 0x12345678;
9507 }
9508 EOCP
9509 set try
9510 if eval $compile; then
9511         echo "<inttypes.h> found." >&4
9512         val="$define"
9513 else
9514         echo "<inttypes.h> NOT found." >&4
9515         val="$undef"
9516 fi
9517 $rm -f try.c try
9518 set i_inttypes
9519 eval $setvar
9520
9521 : check for int64_t
9522 echo " "
9523 echo "Checking to see if you have int64_t..." >&4
9524 $cat >try.c <<EOCP
9525 #include <sys/types.h>
9526 #$i_inttypes I_INTTYPES
9527 #ifdef I_INTTYPES
9528 #include <inttypes.h>
9529 #endif
9530 int main() { int64_t x = 7; }
9531 EOCP
9532 set try
9533 if eval $compile; then
9534         val="$define"
9535         echo "You have int64_t."
9536 else
9537         val="$undef"
9538         echo "You do not have int64_t."
9539 fi
9540 $rm -f try try.*
9541 set d_int64_t
9542 eval $setvar
9543
9544 : Look for isascii
9545 echo " "
9546 $cat >isascii.c <<'EOCP'
9547 #include <stdio.h>
9548 #include <ctype.h>
9549 int main() {
9550         int c = 'A';
9551         if (isascii(c))
9552                 exit(0);
9553         else
9554                 exit(1);
9555 }
9556 EOCP
9557 set isascii
9558 if eval $compile; then
9559         echo "isascii() found." >&4
9560         val="$define"
9561 else
9562         echo "isascii() NOT found." >&4
9563         val="$undef"
9564 fi
9565 set d_isascii
9566 eval $setvar
9567 $rm -f isascii*
9568
9569 : see if killpg exists
9570 set killpg d_killpg
9571 eval $inlibc
9572
9573 : see if lchown exists
9574 echo " "
9575 $cat > try.c <<'EOCP'
9576 /* System header to define __stub macros and hopefully few prototypes,
9577     which can conflict with char lchown(); below.  */
9578 #include <assert.h>
9579 /* Override any gcc2 internal prototype to avoid an error.  */
9580 /* We use char because int might match the return type of a gcc2
9581    builtin and then its argument prototype would still apply.  */
9582 char lchown();
9583 int main() {
9584     /*  The GNU C library defines this for functions which it implements
9585         to always fail with ENOSYS.  Some functions are actually named
9586         something starting with __ and the normal name is an alias.  */
9587 #if defined (__stub_lchown) || defined (__stub___lchown)
9588 choke me
9589 #else
9590 lchown();
9591 #endif
9592 ; return 0; }
9593 EOCP
9594 set try
9595 if eval $compile; then
9596     $echo "lchown() found." >&4
9597     val="$define"
9598 else
9599     $echo "lchown() NOT found." >&4
9600     val="$undef"
9601 fi
9602 set d_lchown
9603 eval $setvar
9604
9605 : See if number of significant digits in a double precision number is known
9606 echo " "
9607 $cat >ldbl_dig.c <<EOM
9608 #$i_limits I_LIMITS
9609 #$i_float I_FLOAT
9610 #ifdef I_LIMITS
9611 #include <limits.h>
9612 #endif
9613 #ifdef I_FLOAT
9614 #include <float.h>
9615 #endif
9616 #ifdef LDBL_DIG
9617 printf("Contains LDBL_DIG");
9618 #endif
9619 EOM
9620 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
9621 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
9622         echo "LDBL_DIG found." >&4
9623         val="$define"
9624 else
9625         echo "LDBL_DIG NOT found." >&4
9626         val="$undef"
9627 fi
9628 $rm -f ldbl_dig.?
9629 set d_ldbl_dig
9630 eval $setvar
9631
9632 : see if link exists
9633 set link d_link
9634 eval $inlibc
9635
9636 : see if localeconv exists
9637 set localeconv d_locconv
9638 eval $inlibc
9639
9640 : see if lockf exists
9641 set lockf d_lockf
9642 eval $inlibc
9643
9644 : check for long long
9645 echo " "
9646 echo "Checking to see if you have long long..." >&4
9647 echo 'int main() { long long x = 7; return 0; }' > try.c
9648 set try
9649 if eval $compile; then
9650         val="$define"
9651         echo "You have have long long."
9652 else
9653         val="$undef"
9654         echo "You do not have long long."
9655 fi
9656 $rm try.*
9657 set d_longlong
9658 eval $setvar
9659
9660 : check for length of long long
9661 case "${d_longlong}${longlongsize}" in
9662 $define)
9663         echo " "
9664         echo "Checking to see how big your long longs are..." >&4
9665         $cat >try.c <<'EOCP'
9666 #include <stdio.h>
9667 int main()
9668 {
9669     printf("%d\n", (int)sizeof(long long));
9670     return(0);
9671 }
9672 EOCP
9673         set try
9674         if eval $compile_ok; then
9675                 longlongsize=`./try$exe_ext`
9676                 echo "Your long longs are $longlongsize bytes long."
9677         else
9678                 dflt='8'
9679                 echo " "
9680                 echo "(I can't seem to compile the test program.  Guessing...)"
9681                 rp="What is the size of a long long (in bytes)?"
9682                 . ./myread
9683                 longlongsize="$ans"
9684         fi
9685         if $test "X$longsize" = "X$longlongsize"; then
9686                 echo "(That isn't any different from an ordinary long.)"
9687         fi      
9688         ;;
9689 esac
9690 $rm -f try.* try
9691
9692 : see if prototype for lseek is available
9693 echo " "
9694 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
9695 eval $hasproto
9696
9697 : see if lstat exists
9698 set lstat d_lstat
9699 eval $inlibc
9700
9701 : see if madvise exists
9702 set madvise d_madvise
9703 eval $inlibc
9704
9705 : see if mblen exists
9706 set mblen d_mblen
9707 eval $inlibc
9708
9709 : see if mbstowcs exists
9710 set mbstowcs d_mbstowcs
9711 eval $inlibc
9712
9713 : see if mbtowc exists
9714 set mbtowc d_mbtowc
9715 eval $inlibc
9716
9717 : see if memchr exists
9718 set memchr d_memchr
9719 eval $inlibc
9720
9721 : see if memcmp exists
9722 set memcmp d_memcmp
9723 eval $inlibc
9724
9725 : see if memcpy exists
9726 set memcpy d_memcpy
9727 eval $inlibc
9728
9729 : see if memmove exists
9730 set memmove d_memmove
9731 eval $inlibc
9732
9733 : see if memset exists
9734 set memset d_memset
9735 eval $inlibc
9736
9737 : see if mkdir exists
9738 set mkdir d_mkdir
9739 eval $inlibc
9740
9741 : see if mkdtemp exists
9742 set mkdtemp d_mkdtemp
9743 eval $inlibc
9744
9745 : see if mkfifo exists
9746 set mkfifo d_mkfifo
9747 eval $inlibc
9748
9749 : see if mkstemp exists
9750 set mkstemp d_mkstemp
9751 eval $inlibc
9752
9753 : see if mkstemps exists
9754 set mkstemps d_mkstemps
9755 eval $inlibc
9756
9757 : see if mktime exists
9758 set mktime d_mktime
9759 eval $inlibc
9760
9761 : see if this is a sys/mman.h system
9762 set sys/mman.h i_sysmman
9763 eval $inhdr
9764
9765 : see if mmap exists
9766 set mmap d_mmap
9767 eval $inlibc
9768 : see what shmat returns
9769 : default to something harmless
9770 mmaptype='void *'
9771 case "$i_sysmman$d_mmap" in
9772 "$define$define")
9773         $cat >mmap.c <<'END'
9774 #include <sys/mman.h>
9775 void *mmap();
9776 END
9777         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
9778                 mmaptype='void *'
9779         else
9780                 mmaptype='caddr_t'
9781         fi
9782         echo "and it returns ($mmaptype)." >&4
9783         ;;
9784 esac
9785
9786
9787
9788 : see if mprotect exists
9789 set mprotect d_mprotect
9790 eval $inlibc
9791
9792 : see if msgctl exists
9793 set msgctl d_msgctl
9794 eval $inlibc
9795
9796 : see if msgget exists
9797 set msgget d_msgget
9798 eval $inlibc
9799
9800 : see if msgsnd exists
9801 set msgsnd d_msgsnd
9802 eval $inlibc
9803
9804 : see if msgrcv exists
9805 set msgrcv d_msgrcv
9806 eval $inlibc
9807
9808 : see how much of the 'msg*(2)' library is present.
9809 h_msg=true
9810 echo " "
9811 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
9812 *"$undef"*) h_msg=false;;
9813 esac
9814 case "$osname" in
9815 freebsd)
9816     case "`ipcs 2>&1`" in
9817     "SVID messages"*"not configured"*)
9818         echo "Your $osname does not have the msg*(2) configured." >&4
9819         h_msg=false
9820         val="$undef"
9821         set msgctl d_msgctl
9822         eval $setvar
9823         set msgget d_msgget
9824         eval $setvar
9825         set msgsnd d_msgsnd
9826         eval $setvar
9827         set msgrcv d_msgrcv
9828         eval $setvar
9829         ;;
9830     esac
9831     ;;
9832 esac
9833 : we could also check for sys/ipc.h ...
9834 if $h_msg && $test `./findhdr sys/msg.h`; then
9835         echo "You have the full msg*(2) library." >&4
9836         val="$define"
9837 else
9838         echo "You don't have the full msg*(2) library." >&4
9839         val="$undef"
9840 fi
9841 set d_msg
9842 eval $setvar
9843
9844 : see if msync exists
9845 set msync d_msync
9846 eval $inlibc
9847
9848 : see if munmap exists
9849 set munmap d_munmap
9850 eval $inlibc
9851
9852 : see if nice exists
9853 set nice d_nice
9854 eval $inlibc
9855
9856
9857 echo " "
9858 echo "Checking which 64-bit integer type we could use..." >&4
9859
9860 case "$intsize" in
9861 8) val=int
9862    set quadtype
9863    eval $setvar
9864    val='"unsigned int"'
9865    set uquadtype
9866    eval $setvar
9867    quadkind=1
9868    ;;
9869 *) case "$longsize" in
9870    8) val=long
9871       set quadtype
9872       eval $setvar
9873       val='"unsigned long"'
9874       set uquadtype
9875       eval $setvar
9876       quadkind=2
9877       ;;
9878    *) case "$d_longlong:$longlongsize" in
9879       define:8)
9880         val='"long long"'
9881         set quadtype
9882         eval $setvar
9883         val='"unsigned long long"'
9884         set uquadtype
9885         eval $setvar
9886         quadkind=3
9887         ;;
9888       *) case "$d_int64_t" in
9889          define)
9890            val=int64_t
9891            set quadtype
9892            eval $setvar
9893            val=uint64_t
9894            set uquadtype
9895            eval $setvar
9896            quadkind=4
9897            ;;
9898          esac
9899          ;;
9900       esac
9901       ;;
9902    esac
9903    ;;
9904 esac
9905
9906 case "$quadtype" in
9907 '')     echo "Alas, no 64-bit integer types in sight." >&4
9908         d_quad="$undef"
9909         ;;
9910 *)      if test X"$use64bitint" = Xdefine -o X"$longsize" = X8; then
9911             verb="will"
9912         else
9913             verb="could"
9914         fi
9915         echo "We $verb use '$quadtype' for 64-bit integers." >&4
9916         d_quad="$define"
9917         ;;
9918 esac
9919
9920 : check for length of character
9921 echo " "
9922 case "$charsize" in
9923 '')
9924         echo "Checking to see how big your characters are (hey, you never know)..." >&4
9925         $cat >try.c <<'EOCP'
9926 #include <stdio.h>
9927 int main()
9928 {
9929     printf("%d\n", (int)sizeof(char));
9930     exit(0);
9931 }
9932 EOCP
9933         set try
9934         if eval $compile_ok; then
9935                 dflt=`./try`
9936         else
9937                 dflt='1'
9938                 echo "(I can't seem to compile the test program.  Guessing...)"
9939         fi
9940         ;;
9941 *)
9942         dflt="$charsize"
9943         ;;
9944 esac
9945 rp="What is the size of a character (in bytes)?"
9946 . ./myread
9947 charsize="$ans"
9948 $rm -f try.c try
9949
9950
9951 echo " "
9952 $echo "Choosing the C types to be used for Perl's internal types..." >&4
9953
9954 case "$use64bitint:$d_quad:$quadtype" in
9955 define:define:?*)
9956         ivtype="$quadtype"
9957         uvtype="$uquadtype"
9958         ivsize=8
9959         uvsize=8
9960         ;;
9961 *)      ivtype="long"
9962         uvtype="unsigned long"
9963         ivsize=$longsize
9964         uvsize=$longsize
9965         ;;
9966 esac
9967
9968 case "$uselongdouble:$d_longdbl" in
9969 define:define)
9970         nvtype="long double"
9971         nvsize=$longdblsize
9972         ;;
9973 *)      nvtype=double
9974         nvsize=$doublesize
9975         ;;
9976 esac
9977
9978 $echo "(IV will be "$ivtype", $ivsize bytes)"
9979 $echo "(UV will be "$uvtype", $uvsize bytes)"
9980 $echo "(NV will be "$nvtype", $nvsize bytes)"
9981
9982 $cat >try.c <<EOCP
9983 #$i_inttypes I_INTTYPES
9984 #ifdef I_INTTYPES
9985 #include <inttypes.h>
9986 #endif
9987 #include <stdio.h>
9988 int main() {
9989 #ifdef INT8
9990    int8_t i =  INT8_MAX;
9991   uint8_t u = UINT8_MAX;
9992   printf("int8_t\n");
9993 #endif
9994 #ifdef INT16
9995    int16_t i =  INT16_MAX;
9996   uint16_t i = UINT16_MAX;
9997   printf("int16_t\n");
9998 #endif
9999 #ifdef INT32
10000    int32_t i =  INT32_MAX;
10001   uint32_t u = UINT32_MAX;
10002   printf("int32_t\n");
10003 #endif
10004 }
10005 EOCP
10006
10007 case "$i8type" in
10008 '')     case "$charsize" in
10009         1)      i8type=char
10010                 u8type="unsigned char"
10011                 i8size=$charsize
10012                 u8size=$charsize
10013                 ;;
10014         esac
10015         ;;
10016 esac
10017 case "$i8type" in
10018 '')     set try -DINT8
10019         if eval $compile; then
10020                 case "`./try$exe_ext`" in
10021                 int8_t) i8type=int8_t
10022                         u8type=uint8_t
10023                         i8size=1
10024                         u8size=1
10025                         ;;
10026                 esac
10027         fi
10028         ;;
10029 esac
10030 case "$i8type" in
10031 '')     if $test $charsize -ge 1; then
10032                 i8type=char
10033                 u8type="unsigned char"
10034                 i8size=$charsize
10035                 u8size=$charsize
10036         fi
10037         ;;
10038 esac
10039
10040 case "$i16type" in
10041 '')     case "$shortsize" in
10042         2)      i16type=short
10043                 u16type="unsigned short"
10044                 i16size=$shortsize
10045                 u16size=$shortsize
10046                 ;;
10047         esac
10048         ;;
10049 esac
10050 case "$i16type" in
10051 '')     set try -DINT16
10052         if eval $compile; then
10053                 case "`./try$exe_ext`" in
10054                 int16_t)
10055                         i16type=int16_t
10056                         u16type=uint16_t
10057                         i16size=2
10058                         u16size=2
10059                         ;;
10060                 esac
10061         fi
10062         ;;
10063 esac
10064 case "$i16type" in
10065 '')     if $test $shortsize -ge 2; then
10066                 i16type=short
10067                 u16type="unsigned short"
10068                 i16size=$shortsize
10069                 u16size=$shortsize
10070         fi
10071         ;;
10072 esac
10073
10074 case "$i32type" in
10075 '')     case "$longsize" in
10076         4)      i32type=long
10077                 u32type="unsigned long"
10078                 i32size=$longsize
10079                 u32size=$longsize
10080                 ;;
10081         *)      case "$intsize" in
10082                 4)      i32type=int
10083                         u32type="unsigned int"
10084                         i32size=$intsize
10085                         u32size=$intsize
10086                         ;;
10087                 esac
10088                 ;;
10089         esac
10090         ;;
10091 esac
10092 case "$i32type" in
10093 '')     set try -DINT32
10094         if eval $compile; then
10095                 case "`./try$exe_ext`" in
10096                 int32_t)
10097                         i32type=int32_t
10098                         u32type=uint32_t
10099                         i32size=4
10100                         u32size=4
10101                         ;;
10102                 esac
10103         fi
10104         ;;
10105 esac
10106 case "$i32type" in
10107 '')     if $test $intsize -ge 4; then
10108                 i32type=int
10109                 u32type="unsigned int"
10110                 i32size=$intsize
10111                 u32size=$intsize
10112         fi
10113         ;;
10114 esac
10115
10116 case "$i64type" in
10117 '')     case "$d_quad:$quadtype" in
10118         define:?*)
10119                 i64type="$quadtype"
10120                 u64type="$uquadtype"
10121                 i64size=8
10122                 u64size=8
10123                 ;;
10124         esac
10125         ;;
10126 esac
10127
10128 $echo "Checking whether your NVs can preserve your UVs..." >&4
10129 $cat <<EOP >try.c
10130 #include <stdio.h>
10131 int main() {
10132     $uvtype k = ($uvtype)~0, l;
10133     $nvtype d;
10134     l = k;
10135     d = ($nvtype)l;
10136     l = ($uvtype)d;
10137     if (l == k)
10138        printf("preserve\n");
10139     exit(0);
10140 }
10141 EOP
10142 set try
10143 if eval $compile; then
10144         case "`./try$exe_ext`" in
10145         preserve) d_nv_preserves_uv="$define" ;;
10146         esac
10147 fi      
10148 case "$d_nv_preserves_uv" in
10149 $define) $echo "Yes, they can."  2>&1 ;;
10150 *)       $echo "No, they can't." 2>&1
10151          d_nv_preserves_uv="$undef"
10152          ;;
10153 esac
10154
10155 $rm -f try.* try
10156
10157
10158 : check for off64_t
10159 echo " "
10160 echo "Checking to see if you have off64_t..." >&4
10161 $cat >try.c <<EOCP
10162 #include <sys/types.h>
10163 #include <unistd.h>
10164 int main() { off64_t x = 7; }
10165 EOCP
10166 set try
10167 if eval $compile; then
10168         val="$define"
10169         echo "You have off64_t."
10170 else
10171         val="$undef"
10172         echo "You do not have off64_t."
10173         case "$lseeksize" in
10174         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
10175         esac
10176 fi
10177 $rm -f try.* try
10178 set d_off64_t
10179 eval $setvar
10180
10181 : see if POSIX threads are available
10182 set pthread.h i_pthread
10183 eval $inhdr
10184
10185
10186
10187
10188 : how to create joinable pthreads
10189 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
10190         echo " "
10191         echo "Checking what constant to use for creating joinable pthreads..." >&4 
10192         $cat >try.c <<'EOCP'
10193 #include <pthread.h>
10194 int main() {
10195     int detachstate = JOINABLE;
10196 }
10197 EOCP
10198         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
10199         if eval $compile; then
10200                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
10201                 val="$undef" # Yes, undef.
10202                 set d_old_pthread_create_joinable
10203                 eval $setvar
10204                 val=""
10205                 set old_pthread_create_joinable
10206                 eval $setvar
10207         else
10208                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
10209                 if eval $compile; then
10210                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
10211                         val="$define"
10212                         set d_old_pthread_create_joinable
10213                         eval $setvar
10214                         val=PTHREAD_CREATE_UNDETACHED
10215                         set old_pthread_create_joinable
10216                         eval $setvar
10217                 else            
10218                         set try -DJOINABLE=__UNDETACHED
10219                         if eval $compile; then
10220                                 echo "You seem to use __UNDETACHED." >&4
10221                                 val="$define"
10222                                 set d_old_pthread_create_joinable
10223                                 eval $setvar
10224                                 val=__UNDETACHED
10225                                 set old_pthread_create_joinable
10226                                 eval $setvar
10227                         else
10228                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
10229                                 val="$define"
10230                                 set d_old_pthread_create_joinable
10231                                 eval $setvar
10232                                 val=0
10233                                 set old_pthread_create_joinable
10234                                 eval $setvar
10235                         fi
10236                 fi
10237         fi
10238         $rm -f try try.*
10239 else
10240     d_old_pthread_create_joinable="$undef"
10241     old_pthread_create_joinable=""
10242 fi
10243
10244 : see if pause exists
10245 set pause d_pause
10246 eval $inlibc
10247
10248 : see if pipe exists
10249 set pipe d_pipe
10250 eval $inlibc
10251
10252 : see if poll exists
10253 set poll d_poll
10254 eval $inlibc
10255
10256
10257 : see whether the various POSIXish _yields exist
10258 $cat >try.c <<EOP
10259 #include <pthread.h>
10260 #include <stdio.h>
10261 int main() {
10262 #ifdef SCHED_YIELD
10263         sched_yield();
10264 #else
10265 #ifdef PTHREAD_YIELD
10266         pthread_yield();
10267 #else
10268 #ifdef PTHREAD_YIELD_NULL
10269         pthread_yield(NULL);
10270 #endif
10271 #endif
10272 #endif
10273 }
10274 EOP
10275 : see if sched_yield exists
10276 set try -DSCHED_YIELD
10277 if eval $compile; then
10278     val="$define"
10279     sched_yield='sched_yield()'
10280 else
10281     val="$undef"
10282 fi
10283 case "$usethreads" in
10284 $define)
10285         case "$val" in
10286         $define) echo 'sched_yield() found.' >&4        ;;
10287         *)       echo 'sched_yield() NOT found.' >&4    ;;
10288         esac
10289 esac
10290 set d_sched_yield
10291 eval $setvar
10292
10293 : see if pthread_yield exists
10294 set try -DPTHREAD_YIELD
10295 if eval $compile; then
10296     val="$define"
10297     case "$sched_yield" in
10298     '') sched_yield='pthread_yield()' ;;
10299     esac
10300 else
10301     set try -DPTHREAD_YIELD_NULL
10302     if eval $compile; then
10303         val="$define"
10304         case "$sched_yield" in
10305         '') sched_yield='pthread_yield(NULL)' ;;
10306         esac
10307     else
10308         val="$undef"
10309     fi
10310 fi
10311 case "$usethreads" in
10312 $define)
10313         case "$val" in
10314         $define) echo 'pthread_yield() found.' >&4      ;;
10315         *)       echo 'pthread_yield() NOT found.' >&4  ;;
10316         esac
10317         ;;
10318 esac
10319 set d_pthread_yield
10320 eval $setvar
10321
10322 case "$sched_yield" in
10323 '') sched_yield=undef ;;
10324 esac
10325
10326 $rm -f try try.*
10327
10328 : see if this is a pwd.h system
10329 set pwd.h i_pwd
10330 eval $inhdr
10331
10332 case "$i_pwd" in
10333 $define)
10334         xxx=`./findhdr pwd.h`
10335         $cppstdin $cppflags $cppminus < $xxx >$$.h
10336
10337         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
10338                 val="$define"
10339         else
10340                 val="$undef"
10341         fi
10342         set d_pwquota
10343         eval $setvar
10344
10345         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
10346                 val="$define"
10347         else
10348                 val="$undef"
10349         fi
10350         set d_pwage
10351         eval $setvar
10352
10353         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
10354                 val="$define"
10355         else
10356                 val="$undef"
10357         fi
10358         set d_pwchange
10359         eval $setvar
10360
10361         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
10362                 val="$define"
10363         else
10364                 val="$undef"
10365         fi
10366         set d_pwclass
10367         eval $setvar
10368
10369         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
10370                 val="$define"
10371         else
10372                 val="$undef"
10373         fi
10374         set d_pwexpire
10375         eval $setvar
10376
10377         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
10378                 val="$define"
10379         else
10380                 val="$undef"
10381         fi
10382         set d_pwcomment
10383         eval $setvar
10384
10385         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
10386                 val="$define"
10387         else
10388                 val="$undef"
10389         fi
10390         set d_pwgecos
10391         eval $setvar
10392
10393         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
10394                 val="$define"
10395         else
10396                 val="$undef"
10397         fi
10398         set d_pwpasswd
10399         eval $setvar
10400
10401         $rm -f $$.h
10402         ;;
10403 *)
10404         val="$undef"; 
10405         set d_pwquota; eval $setvar
10406         set d_pwage; eval $setvar
10407         set d_pwchange; eval $setvar
10408         set d_pwclass; eval $setvar
10409         set d_pwexpire; eval $setvar
10410         set d_pwcomment; eval $setvar
10411         set d_pwgecos; eval $setvar
10412         set d_pwpasswd; eval $setvar
10413         ;;
10414 esac
10415
10416 : see if readdir and friends exist
10417 set readdir d_readdir
10418 eval $inlibc
10419 set seekdir d_seekdir
10420 eval $inlibc
10421 set telldir d_telldir
10422 eval $inlibc
10423 set rewinddir d_rewinddir
10424 eval $inlibc
10425
10426 : see if readlink exists
10427 set readlink d_readlink
10428 eval $inlibc
10429
10430 : see if rename exists
10431 set rename d_rename
10432 eval $inlibc
10433
10434 : see if rmdir exists
10435 set rmdir d_rmdir
10436 eval $inlibc
10437
10438 : see if memory.h is available.
10439 val=''
10440 set memory.h val
10441 eval $inhdr
10442
10443 : See if it conflicts with string.h
10444 case "$val" in
10445 $define)
10446         case "$strings" in
10447         '') ;;
10448         *)
10449                 $cppstdin $cppflags $cppminus < $strings > mem.h
10450                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
10451                         echo " "
10452                         echo "We won't be including <memory.h>."
10453                         val="$undef"
10454                 fi
10455                 $rm -f mem.h
10456                 ;;
10457         esac
10458 esac
10459 set i_memory
10460 eval $setvar
10461
10462 : can bcopy handle overlapping blocks?
10463 val="$undef"
10464 case "$d_bcopy" in
10465 "$define")
10466         echo " "
10467         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
10468         $cat >try.c <<EOCP
10469 #$i_memory I_MEMORY
10470 #$i_stdlib I_STDLIB
10471 #$i_string I_STRING
10472 #$i_unistd I_UNISTD
10473 EOCP
10474         $cat >>try.c <<'EOCP'
10475 #include <stdio.h>
10476 #ifdef I_MEMORY
10477 #  include <memory.h>
10478 #endif
10479 #ifdef I_STDLIB
10480 #  include <stdlib.h>
10481 #endif
10482 #ifdef I_STRING
10483 #  include <string.h>
10484 #else
10485 #  include <strings.h>
10486 #endif
10487 #ifdef I_UNISTD
10488 #  include <unistd.h>  /* Needed for NetBSD */
10489 #endif
10490 int main()
10491 {
10492 char buf[128], abc[128];
10493 char *b;
10494 int len;
10495 int off;
10496 int align;
10497
10498 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
10499
10500 for (align = 7; align >= 0; align--) {
10501         for (len = 36; len; len--) {
10502                 b = buf+align;
10503                 bcopy(abc, b, len);
10504                 for (off = 1; off <= len; off++) {
10505                         bcopy(b, b+off, len);
10506                         bcopy(b+off, b, len);
10507                         if (bcmp(b, abc, len))
10508                                 exit(1);
10509                 }
10510         }
10511 }
10512 exit(0);
10513 }
10514 EOCP
10515         set try
10516         if eval $compile_ok; then
10517                 if ./try 2>/dev/null; then
10518                         echo "Yes, it can."
10519                         val="$define"
10520                 else
10521                         echo "It can't, sorry."
10522                         case "$d_memmove" in
10523                         "$define") echo "But that's Ok since you have memmove()." ;;
10524                         esac
10525                 fi
10526         else
10527                 echo "(I can't compile the test program, so we'll assume not...)"
10528                 case "$d_memmove" in
10529                 "$define") echo "But that's Ok since you have memmove()." ;;
10530                 esac
10531         fi
10532         ;;
10533 esac
10534 $rm -f try.* try core
10535 set d_safebcpy
10536 eval $setvar
10537
10538 : can memcpy handle overlapping blocks?
10539 val="$undef"
10540 case "$d_memcpy" in
10541 "$define")
10542         echo " "
10543         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
10544         $cat >try.c <<EOCP
10545 #$i_memory I_MEMORY
10546 #$i_stdlib I_STDLIB
10547 #$i_string I_STRING
10548 #$i_unistd I_UNISTD
10549 EOCP
10550         $cat >>try.c <<'EOCP'
10551 #include <stdio.h>
10552 #ifdef I_MEMORY
10553 #  include <memory.h>
10554 #endif
10555 #ifdef I_STDLIB
10556 #  include <stdlib.h>
10557 #endif
10558 #ifdef I_STRING
10559 #  include <string.h>
10560 #else
10561 #  include <strings.h>
10562 #endif
10563 #ifdef I_UNISTD
10564 #  include <unistd.h>  /* Needed for NetBSD */
10565 #endif
10566 int main()
10567 {
10568 char buf[128], abc[128];
10569 char *b;
10570 int len;
10571 int off;
10572 int align;
10573
10574 /* Copy "abcde..." string to char abc[] so that gcc doesn't
10575    try to store the string in read-only memory. */
10576 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
10577
10578 for (align = 7; align >= 0; align--) {
10579         for (len = 36; len; len--) {
10580                 b = buf+align;
10581                 memcpy(b, abc, len);
10582                 for (off = 1; off <= len; off++) {
10583                         memcpy(b+off, b, len);
10584                         memcpy(b, b+off, len);
10585                         if (memcmp(b, abc, len))
10586                                 exit(1);
10587                 }
10588         }
10589 }
10590 exit(0);
10591 }
10592 EOCP
10593         set try
10594         if eval $compile_ok; then
10595                 if ./try 2>/dev/null; then
10596                         echo "Yes, it can."
10597                         val="$define"
10598                 else
10599                         echo "It can't, sorry."
10600                         case "$d_memmove" in
10601                         "$define") echo "But that's Ok since you have memmove()." ;;
10602                         esac
10603                 fi
10604         else
10605                 echo "(I can't compile the test program, so we'll assume not...)"
10606                 case "$d_memmove" in
10607                 "$define") echo "But that's Ok since you have memmove()." ;;
10608                 esac
10609         fi
10610         ;;
10611 esac
10612 $rm -f try.* try core
10613 set d_safemcpy
10614 eval $setvar
10615
10616 : can memcmp be trusted to compare relative magnitude?
10617 val="$undef"
10618 case "$d_memcmp" in
10619 "$define")
10620         echo " "
10621         echo "Checking if your memcmp() can compare relative magnitude..." >&4
10622         $cat >try.c <<EOCP
10623 #$i_memory I_MEMORY
10624 #$i_stdlib I_STDLIB
10625 #$i_string I_STRING
10626 #$i_unistd I_UNISTD
10627 EOCP
10628         $cat >>try.c <<'EOCP'
10629 #include <stdio.h>
10630 #ifdef I_MEMORY
10631 #  include <memory.h>
10632 #endif
10633 #ifdef I_STDLIB
10634 #  include <stdlib.h>
10635 #endif
10636 #ifdef I_STRING
10637 #  include <string.h>
10638 #else
10639 #  include <strings.h>
10640 #endif
10641 #ifdef I_UNISTD
10642 #  include <unistd.h>  /* Needed for NetBSD */
10643 #endif
10644 int main()
10645 {
10646 char a = -1;
10647 char b = 0;
10648 if ((a < b) && memcmp(&a, &b, 1) < 0)
10649         exit(1);
10650 exit(0);
10651 }
10652 EOCP
10653         set try
10654         if eval $compile_ok; then
10655                 if ./try 2>/dev/null; then
10656                         echo "Yes, it can."
10657                         val="$define"
10658                 else
10659                         echo "No, it can't (it uses signed chars)."
10660                 fi
10661         else
10662                 echo "(I can't compile the test program, so we'll assume not...)"
10663         fi
10664         ;;
10665 esac
10666 $rm -f try.* try core
10667 set d_sanemcmp
10668 eval $setvar
10669
10670 : see if select exists
10671 set select d_select
10672 eval $inlibc
10673
10674 : see if semctl exists
10675 set semctl d_semctl
10676 eval $inlibc
10677
10678 : see if semget exists
10679 set semget d_semget
10680 eval $inlibc
10681
10682 : see if semop exists
10683 set semop d_semop
10684 eval $inlibc
10685
10686 : see how much of the 'sem*(2)' library is present.
10687 h_sem=true
10688 echo " "
10689 case "$d_semctl$d_semget$d_semop" in
10690 *"$undef"*) h_sem=false;;
10691 esac
10692 case "$osname" in
10693 freebsd)
10694     case "`ipcs 2>&1`" in
10695     "SVID messages"*"not configured"*)
10696         echo "Your $osname does not have the sem*(2) configured." >&4
10697         h_sem=false
10698         val="$undef"
10699         set semctl d_semctl
10700         eval $setvar
10701         set semget d_semget
10702         eval $setvar
10703         set semop d_semop
10704         eval $setvar
10705         ;;
10706     esac
10707     ;;
10708 esac
10709 : we could also check for sys/ipc.h ...
10710 if $h_sem && $test `./findhdr sys/sem.h`; then
10711         echo "You have the full sem*(2) library." >&4
10712         val="$define"
10713 else
10714         echo "You don't have the full sem*(2) library." >&4
10715         val="$undef"
10716 fi
10717 set d_sem
10718 eval $setvar
10719
10720 : see whether sys/sem.h defines union semun
10721 echo " "
10722 $cat > try.c <<'END'
10723 #include <sys/types.h>
10724 #include <sys/ipc.h>
10725 #include <sys/sem.h>
10726 int main () { union semun semun; semun.buf = 0; }
10727 END
10728 set try
10729 if eval $compile; then
10730     echo "You have union semun in <sys/sem.h>." >&4
10731     val="$define"
10732 else
10733     echo "You do not have union semun in <sys/sem.h>." >&4
10734     val="$undef"
10735 fi
10736 $rm -f try try.c try.h
10737 set d_union_semun
10738 eval $setvar
10739
10740 : see how to do semctl IPC_STAT
10741 case "$d_sem" in
10742 $define)
10743     : see whether semctl IPC_STAT can use union semun
10744     echo " "
10745     $cat > try.h <<END
10746 #ifndef S_IRUSR
10747 #   ifdef S_IREAD
10748 #       define S_IRUSR S_IREAD
10749 #       define S_IWUSR S_IWRITE
10750 #       define S_IXUSR S_IEXEC
10751 #   else
10752 #       define S_IRUSR 0400
10753 #       define S_IWUSR 0200
10754 #       define S_IXUSR 0100
10755 #   endif
10756 #   define S_IRGRP (S_IRUSR>>3)
10757 #   define S_IWGRP (S_IWUSR>>3)
10758 #   define S_IXGRP (S_IXUSR>>3)
10759 #   define S_IROTH (S_IRUSR>>6)
10760 #   define S_IWOTH (S_IWUSR>>6)
10761 #   define S_IXOTH (S_IXUSR>>6)
10762 #endif
10763 #ifndef S_IRWXU
10764 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
10765 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
10766 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
10767 #endif
10768 END
10769
10770     $cat > try.c <<END
10771 #include <sys/types.h>
10772 #include <sys/ipc.h>
10773 #include <sys/sem.h>
10774 #include <sys/stat.h>
10775 #include <stdio.h>
10776 #include <errno.h>
10777 #include "try.h"
10778 #ifndef errno
10779 extern int errno;
10780 #endif
10781 #$d_union_semun HAS_UNION_SEMUN
10782 int main() {
10783     union semun
10784 #ifndef HAS_UNION_SEMUN
10785     {
10786         int val;
10787         struct semid_ds *buf;
10788         unsigned short *array;
10789     }
10790 #endif
10791     arg;
10792     int sem, st;
10793
10794 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
10795     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
10796     if (sem > -1) {
10797         struct semid_ds argbuf;
10798         arg.buf = &argbuf;
10799 #       ifdef IPC_STAT
10800         st = semctl(sem, 0, IPC_STAT, arg);
10801         if (st == 0)
10802             printf("semun\n");
10803         else
10804 #       endif /* IPC_STAT */
10805             printf("semctl IPC_STAT failed: errno = %d\n", errno);
10806 #       ifdef IPC_RMID
10807         if (semctl(sem, 0, IPC_RMID, arg) != 0)
10808 #       endif /* IPC_RMID */
10809             printf("semctl IPC_RMID failed: errno = %d\n", errno);
10810     } else
10811 #endif /* IPC_PRIVATE && ... */
10812         printf("semget failed: errno = %d\n", errno);
10813   return 0;
10814 }
10815 END
10816     val="$undef"
10817     set try
10818     if eval $compile; then
10819         xxx=`./try`
10820         case "$xxx" in
10821         semun) val="$define" ;;
10822         esac
10823     fi
10824     $rm -f try try.c
10825     set d_semctl_semun
10826     eval $setvar
10827     case "$d_semctl_semun" in
10828     $define)
10829         echo "You can use union semun for semctl IPC_STAT." >&4
10830         also='also'
10831         ;;
10832     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
10833         also=''
10834         ;;
10835     esac
10836
10837     : see whether semctl IPC_STAT can use struct semid_ds pointer
10838     $cat > try.c <<'END'
10839 #include <sys/types.h>
10840 #include <sys/ipc.h>
10841 #include <sys/sem.h>
10842 #include <sys/stat.h>
10843 #include "try.h"
10844 #include <stdio.h>
10845 #include <errno.h>
10846 #ifndef errno
10847 extern int errno;
10848 #endif
10849 int main() {
10850     struct semid_ds arg;
10851     int sem, st;
10852
10853 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
10854     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
10855     if (sem > -1) {
10856 #       ifdef IPC_STAT
10857         st = semctl(sem, 0, IPC_STAT, &arg);
10858         if (st == 0)
10859             printf("semid_ds\n");
10860         else
10861 #       endif /* IPC_STAT */
10862             printf("semctl IPC_STAT failed: errno = %d\n", errno);
10863 #       ifdef IPC_RMID
10864         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
10865 #       endif /* IPC_RMID */
10866             printf("semctl IPC_RMID failed: errno = %d\n", errno);
10867     } else
10868 #endif /* IPC_PRIVATE && ... */
10869         printf("semget failed: errno = %d\n", errno);
10870
10871     return 0;
10872 }
10873 END
10874     val="$undef"
10875     set try
10876     if eval $compile; then
10877         xxx=`./try`
10878         case "$xxx" in
10879         semid_ds) val="$define" ;;
10880         esac
10881     fi
10882     $rm -f try try.c
10883     set d_semctl_semid_ds
10884     eval $setvar
10885     case "$d_semctl_semid_ds" in
10886     $define)
10887         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
10888         ;;
10889     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
10890         ;;
10891     esac
10892     $rm -f try.h
10893     ;;
10894 *)  val="$undef"
10895
10896     # We do not have the full sem*(2) library, so assume we can not
10897     # use either.
10898
10899     set d_semctl_semun
10900     eval $setvar
10901
10902     set d_semctl_semid_ds
10903     eval $setvar
10904     ;;
10905 esac
10906
10907 : see if setegid exists
10908 set setegid d_setegid
10909 eval $inlibc
10910
10911 : see if seteuid exists
10912 set seteuid d_seteuid
10913 eval $inlibc
10914
10915 : see if setgrent exists
10916 set setgrent d_setgrent
10917 eval $inlibc
10918
10919 : see if sethostent exists
10920 set sethostent d_sethent
10921 eval $inlibc
10922
10923 : see if setlinebuf exists
10924 set setlinebuf d_setlinebuf
10925 eval $inlibc
10926
10927 : see if setlocale exists
10928 set setlocale d_setlocale
10929 eval $inlibc
10930
10931 : see if setnetent exists
10932 set setnetent d_setnent
10933 eval $inlibc
10934
10935 : see if setprotoent exists
10936 set setprotoent d_setpent
10937 eval $inlibc
10938
10939 : see if setpgid exists
10940 set setpgid d_setpgid
10941 eval $inlibc
10942
10943 : see if setpgrp2 exists
10944 set setpgrp2 d_setpgrp2
10945 eval $inlibc
10946
10947 : see if setpriority exists
10948 set setpriority d_setprior
10949 eval $inlibc
10950
10951 : see if setpwent exists
10952 set setpwent d_setpwent
10953 eval $inlibc
10954
10955 : see if setregid exists
10956 set setregid d_setregid
10957 eval $inlibc
10958 set setresgid d_setresgid
10959 eval $inlibc
10960
10961 : see if setreuid exists
10962 set setreuid d_setreuid
10963 eval $inlibc
10964 set setresuid d_setresuid
10965 eval $inlibc
10966
10967 : see if setrgid exists
10968 set setrgid d_setrgid
10969 eval $inlibc
10970
10971 : see if setruid exists
10972 set setruid d_setruid
10973 eval $inlibc
10974
10975 : see if setservent exists
10976 set setservent d_setsent
10977 eval $inlibc
10978
10979 : see if setsid exists
10980 set setsid d_setsid
10981 eval $inlibc
10982
10983 : see if setspent exists
10984 set setspent d_setspent
10985 eval $inlibc
10986
10987 : see if setvbuf exists
10988 set setvbuf d_setvbuf
10989 eval $inlibc
10990
10991 : see if sfio.h is available
10992 set sfio.h i_sfio
10993 eval $inhdr
10994
10995
10996 : see if sfio library is available
10997 case "$i_sfio" in
10998 $define)
10999         val=''
11000         set sfreserve val
11001         eval $inlibc
11002         ;;
11003 *)
11004         val="$undef"
11005         ;;
11006 esac
11007 : Ok, but do we want to use it.
11008 case "$val" in
11009 $define)
11010         case "$usesfio" in
11011         true|$define|[yY]*) dflt='y';;
11012         *) dflt='n';;
11013         esac
11014         echo "$package can use the sfio library, but it is experimental."
11015         rp="You seem to have sfio available, do you want to try using it?"
11016         . ./myread
11017         case "$ans" in
11018         y|Y) ;;
11019         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
11020                 val="$undef"
11021                 : Remove sfio from list of libraries to use
11022                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
11023                 shift
11024                 libs="$*"
11025                 echo "libs = $libs" >&4
11026                 ;;
11027         esac
11028         ;;
11029 *)      case "$usesfio" in
11030         true|$define|[yY]*)
11031                 echo "Sorry, cannot find sfio on this machine" >&4
11032                 echo "Ignoring your setting of usesfio=$usesfio" >&4
11033                 ;;
11034         esac
11035         ;;
11036 esac
11037 set d_sfio
11038 eval $setvar
11039 case "$d_sfio" in
11040 $define) usesfio='true';;
11041 *) usesfio='false';;
11042 esac
11043
11044 : see if shmctl exists
11045 set shmctl d_shmctl
11046 eval $inlibc
11047
11048 : see if shmget exists
11049 set shmget d_shmget
11050 eval $inlibc
11051
11052 : see if shmat exists
11053 set shmat d_shmat
11054 eval $inlibc
11055 : see what shmat returns
11056 case "$d_shmat" in
11057 "$define")
11058         $cat >shmat.c <<'END'
11059 #include <sys/shm.h>
11060 void *shmat();
11061 END
11062         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
11063                 shmattype='void *'
11064         else
11065                 shmattype='char *'
11066         fi
11067         echo "and it returns ($shmattype)." >&4
11068         : see if a prototype for shmat is available
11069         xxx=`./findhdr sys/shm.h`
11070         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
11071         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
11072                 val="$define"
11073         else
11074                 val="$undef"
11075         fi
11076         $rm -f shmat.[co]
11077         ;;
11078 *)
11079         val="$undef"
11080         ;;
11081 esac
11082 set d_shmatprototype
11083 eval $setvar
11084
11085 : see if shmdt exists
11086 set shmdt d_shmdt
11087 eval $inlibc
11088
11089 : see how much of the 'shm*(2)' library is present.
11090 h_shm=true
11091 echo " "
11092 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
11093 *"$undef"*) h_shm=false;;
11094 esac
11095 case "$osname" in
11096 freebsd)
11097     case "`ipcs 2>&1`" in
11098     "SVID shared memory"*"not configured"*)
11099         echo "Your $osname does not have the shm*(2) configured." >&4
11100         h_shm=false
11101         val="$undef"
11102         set shmctl d_shmctl
11103         evat $setvar
11104         set shmget d_shmget
11105         evat $setvar
11106         set shmat d_shmat
11107         evat $setvar
11108         set shmdt d_shmdt
11109         evat $setvar
11110         ;;
11111     esac
11112     ;;
11113 esac
11114 : we could also check for sys/ipc.h ...
11115 if $h_shm && $test `./findhdr sys/shm.h`; then
11116         echo "You have the full shm*(2) library." >&4
11117         val="$define"
11118 else
11119         echo "You don't have the full shm*(2) library." >&4
11120         val="$undef"
11121 fi
11122 set d_shm
11123 eval $setvar
11124
11125 echo " "
11126 : see if we have sigaction
11127 if set sigaction val -f d_sigaction; eval $csym; $val; then
11128         echo 'sigaction() found.' >&4
11129         $cat > try.c <<'EOP'
11130 #include <stdio.h>
11131 #include <sys/types.h>
11132 #include <signal.h>
11133 int main()
11134 {
11135     struct sigaction act, oact;
11136     act.sa_flags = 0;
11137     oact.sa_handler = 0;
11138     /* so that act and oact are used */
11139     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
11140 }
11141 EOP
11142         set try
11143         if eval $compile_ok; then
11144                 val="$define"
11145         else
11146                 echo "But you don't seem to have a useable struct sigaction." >&4
11147                 val="$undef"
11148         fi
11149 else
11150         echo 'sigaction NOT found.' >&4
11151         val="$undef"
11152 fi
11153 set d_sigaction; eval $setvar
11154 $rm -f try try$_o try.c
11155
11156 : see if sigsetjmp exists
11157 echo " "
11158 case "$d_sigsetjmp" in
11159 '')
11160         $cat >try.c <<'EOP'
11161 #include <setjmp.h>
11162 sigjmp_buf env;
11163 int set = 1;
11164 int main()
11165 {
11166         if (sigsetjmp(env,1))
11167                 exit(set);
11168         set = 0;
11169         siglongjmp(env, 1);
11170         exit(1);
11171 }
11172 EOP
11173         set try
11174         if eval $compile; then
11175                 if ./try >/dev/null 2>&1; then
11176                         echo "POSIX sigsetjmp found." >&4
11177                         val="$define"
11178                 else
11179                         $cat >&4 <<EOM
11180 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
11181 I'll ignore them.
11182 EOM
11183                         val="$undef"
11184                 fi
11185         else
11186                 echo "sigsetjmp not found." >&4
11187                 val="$undef"
11188         fi
11189         ;;
11190 *) val="$d_sigsetjmp"
11191         case "$d_sigsetjmp" in
11192         $define) echo "POSIX sigsetjmp found." >&4;;
11193         $undef) echo "sigsetjmp not found." >&4;;
11194         esac
11195         ;;
11196 esac
11197 set d_sigsetjmp
11198 eval $setvar
11199 $rm -f try.c try
11200
11201 : see if sys/stat.h is available
11202 set sys/stat.h i_sysstat
11203 eval $inhdr
11204
11205
11206 : see if stat knows about block sizes
11207 echo " "
11208 echo "Checking to see if your struct stat has st_blocks field..." >&4
11209 set d_statblks stat st_blocks $i_sysstat sys/stat.h
11210 eval $hasfield
11211
11212
11213 : see if this is a sys/vfs.h system
11214 set sys/vfs.h i_sysvfs
11215 eval $inhdr
11216
11217
11218 : see if this is a sys/statfs.h system
11219 set sys/statfs.h i_sysstatfs
11220 eval $inhdr
11221
11222
11223 echo " "
11224 echo "Checking to see if your system supports struct statfs..." >&4
11225 set d_statfs_s statfs $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h $i_sysvfs sys/vfs.h $i_sysstatfs sys/statfs.h
11226 eval $hasstruct
11227 case "$d_statfs_s" in
11228 "$define")      echo "Yes, it does."   ;;
11229 *)              echo "No, it doesn't." ;;
11230 esac
11231
11232
11233
11234 : see if struct statfs knows about f_flags
11235 case "$d_statfs_s" in
11236 define) 
11237         echo " "
11238         echo "Checking to see if your struct statfs has f_flags field..." >&4
11239         set d_statfs_f_flags statfs f_flags $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h $i_sysvfs sys/vfs.h $i_sysstatfs sys/statfs.h
11240         eval $hasfield
11241         ;;
11242 *)      val="$undef"
11243         set d_statfs_f_flags
11244         eval $setvar
11245         ;;
11246 esac
11247 case "$d_statfs_f_flags" in
11248 "$define")      echo "Yes, it does."   ;;
11249 *)              echo "No, it doesn't." ;;
11250 esac
11251
11252 : see if _ptr and _cnt from stdio act std
11253 echo " "
11254 if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
11255         echo "(Looks like you have stdio.h from Linux.)"
11256         case "$stdio_ptr" in
11257         '') stdio_ptr='((fp)->_IO_read_ptr)'
11258                 ptr_lval=$define
11259                 ;;
11260         *)      ptr_lval=$d_stdio_ptr_lval;;
11261         esac
11262         case "$stdio_cnt" in
11263         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
11264                 cnt_lval=$undef
11265                 ;;
11266         *)      cnt_lval=$d_stdio_cnt_lval;;
11267         esac
11268         case "$stdio_base" in
11269         '') stdio_base='((fp)->_IO_read_base)';;
11270         esac
11271         case "$stdio_bufsiz" in
11272         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
11273         esac
11274 else
11275         case "$stdio_ptr" in
11276         '') stdio_ptr='((fp)->_ptr)'
11277                 ptr_lval=$define
11278                 ;;
11279         *)      ptr_lval=$d_stdio_ptr_lval;;
11280         esac
11281         case "$stdio_cnt" in
11282         '') stdio_cnt='((fp)->_cnt)'
11283                 cnt_lval=$define
11284                 ;;
11285         *)      cnt_lval=$d_stdio_cnt_lval;;
11286         esac
11287         case "$stdio_base" in
11288         '') stdio_base='((fp)->_base)';;
11289         esac
11290         case "$stdio_bufsiz" in
11291         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
11292         esac
11293 fi
11294 : test whether _ptr and _cnt really work
11295 echo "Checking how std your stdio is..." >&4
11296 $cat >try.c <<EOP
11297 #include <stdio.h>
11298 #define FILE_ptr(fp)    $stdio_ptr
11299 #define FILE_cnt(fp)    $stdio_cnt
11300 int main() {
11301         FILE *fp = fopen("try.c", "r");
11302         char c = getc(fp);
11303         if (
11304                 18 <= FILE_cnt(fp) &&
11305                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
11306         )
11307                 exit(0);
11308         exit(1);
11309 }
11310 EOP
11311 val="$undef"
11312 set try
11313 if eval $compile; then
11314         if ./try; then
11315                 echo "Your stdio acts pretty std."
11316                 val="$define"
11317         else
11318                 echo "Your stdio isn't very std."
11319         fi
11320 else
11321         echo "Your stdio doesn't appear very std."
11322 fi
11323 $rm -f try.c try
11324 set d_stdstdio
11325 eval $setvar
11326
11327 : Can _ptr be used as an lvalue?
11328 case "$d_stdstdio$ptr_lval" in
11329 $define$define) val=$define ;;
11330 *) val=$undef ;;
11331 esac
11332 set d_stdio_ptr_lval
11333 eval $setvar
11334
11335 : Can _cnt be used as an lvalue?
11336 case "$d_stdstdio$cnt_lval" in
11337 $define$define) val=$define ;;
11338 *) val=$undef ;;
11339 esac
11340 set d_stdio_cnt_lval
11341 eval $setvar
11342
11343 : see if _base is also standard
11344 val="$undef"
11345 case "$d_stdstdio" in
11346 $define)
11347         $cat >try.c <<EOP
11348 #include <stdio.h>
11349 #define FILE_base(fp)   $stdio_base
11350 #define FILE_bufsiz(fp) $stdio_bufsiz
11351 int main() {
11352         FILE *fp = fopen("try.c", "r");
11353         char c = getc(fp);
11354         if (
11355                 19 <= FILE_bufsiz(fp) &&
11356                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
11357         )
11358                 exit(0);
11359         exit(1);
11360 }
11361 EOP
11362         set try
11363         if eval $compile; then
11364                 if ./try; then
11365                         echo "And its _base field acts std."
11366                         val="$define"
11367                 else
11368                         echo "But its _base field isn't std."
11369                 fi
11370         else
11371                 echo "However, it seems to be lacking the _base field."
11372         fi
11373         $rm -f try.c try
11374         ;;
11375 esac
11376 set d_stdiobase
11377 eval $setvar
11378
11379 $cat >&4 <<EOM
11380 Checking how to access stdio streams by file descriptor number...
11381 EOM
11382 case "$stdio_stream_array" in
11383 '')     $cat >try.c <<EOCP
11384 #include <stdio.h>
11385 int main() {
11386   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
11387     printf("yes\n");
11388 }
11389 EOCP
11390         for s in _iob __iob __sF
11391         do
11392                 set try -DSTDIO_STREAM_ARRAY=$s
11393                 if eval $compile; then
11394                         case "`./try$exe_ext`" in
11395                         yes)    stdio_stream_array=$s; break ;;
11396                         esac
11397                 fi
11398         done
11399         $rm -f try.* try$exe_ext
11400 esac
11401 case "$stdio_stream_array" in
11402 '')     $cat >&4 <<EOM
11403 I can't figure out how to access stdio streams by file descriptor number.
11404 EOM
11405         d_stdio_stream_array="$undef"
11406         ;;
11407 *)      $cat >&4 <<EOM
11408 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
11409 EOM
11410         d_stdio_stream_array="$define"
11411         ;;
11412 esac
11413
11414 : see if strcoll exists
11415 set strcoll d_strcoll
11416 eval $inlibc
11417
11418 : check for structure copying
11419 echo " "
11420 echo "Checking to see if your C compiler can copy structs..." >&4
11421 $cat >try.c <<'EOCP'
11422 int main()
11423 {
11424         struct blurfl {
11425                 int dyick;
11426         } foo, bar;
11427
11428         foo = bar;
11429 }
11430 EOCP
11431 if $cc -c try.c >/dev/null 2>&1 ; then
11432         val="$define"
11433         echo "Yup, it can."
11434 else
11435         val="$undef"
11436         echo "Nope, it can't."
11437 fi
11438 set d_strctcpy
11439 eval $setvar
11440 $rm -f try.*
11441
11442 : see if strerror and/or sys_errlist[] exist
11443 echo " "
11444 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
11445     if set strerror val -f d_strerror; eval $csym; $val; then
11446                 echo 'strerror() found.' >&4
11447                 d_strerror="$define"
11448                 d_strerrm='strerror(e)'
11449                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11450                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
11451                         d_syserrlst="$define"
11452                 else
11453                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
11454                         d_syserrlst="$undef"
11455                 fi
11456     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
11457                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
11458                 echo 'strerror() found in string header.' >&4
11459                 d_strerror="$define"
11460                 d_strerrm='strerror(e)'
11461                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11462                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
11463                                 d_syserrlst="$define"
11464                 else
11465                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
11466                         d_syserrlst="$undef"
11467                 fi
11468     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
11469                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
11470                 d_strerror="$undef"
11471                 d_syserrlst="$define"
11472                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
11473     else
11474                 echo 'strerror() and sys_errlist[] NOT found.' >&4
11475                 d_strerror="$undef"
11476                 d_syserrlst="$undef"
11477                 d_strerrm='"unknown"'
11478     fi
11479 fi
11480
11481 : see if strtod exists
11482 set strtod d_strtod
11483 eval $inlibc
11484
11485 : see if strtol exists
11486 set strtol d_strtol
11487 eval $inlibc
11488
11489 : see if strtold exists
11490 set strtold d_strtold
11491 eval $inlibc
11492
11493 : see if strtoll exists
11494 set strtoll d_strtoll
11495 eval $inlibc
11496
11497 case "$d_longlong-$d_strtoll" in
11498 "$define-$define")
11499         $cat <<EOM
11500 Checking whether your strtoll() works okay...
11501 EOM
11502         $cat >try.c <<'EOCP'
11503 #include <errno.h>
11504 #ifdef __hpux
11505 #define strtoll __strtoll
11506 #endif
11507 #include <stdio.h>
11508 extern long long int strtoll(char *s, char **, int); 
11509 static int bad = 0;
11510 int check(char *s, long long ell, int een) {
11511         long long gll;
11512         errno = 0;
11513         gll = strtoll(s, 0, 10);
11514         if (!((gll == ell) && (errno == een)))
11515                 bad++;
11516 }
11517 int main() {
11518         check(" 1",                                      1LL, 0);
11519         check(" 0",                                      0LL, 0);
11520         check("-1",                                     -1LL, 0);
11521         check("-9223372036854775808", -9223372036854775808LL, 0);
11522         check("-9223372036854775808", -9223372036854775808LL, 0);
11523         check(" 9223372036854775807",  9223372036854775807LL, 0);
11524         check("-9223372036854775808", -9223372036854775808LL, 0);
11525         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
11526         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
11527         if (!bad)
11528                 printf("ok\n");
11529 }
11530 EOCP
11531         set try
11532         if eval $compile; then
11533                 case "`./try`" in
11534                 ok) echo "Your strtoll() seems to be working okay." ;;
11535                 *) cat <<EOM >&4
11536 Your strtoll() doesn't seem to be working okay.
11537 EOM
11538                    d_strtoll="$undef"
11539                    ;;
11540                 esac
11541         fi
11542         ;;
11543 esac
11544
11545 : see if strtoul exists
11546 set strtoul d_strtoul
11547 eval $inlibc
11548
11549 : see if strtoull exists
11550 set strtoull d_strtoull
11551 eval $inlibc
11552
11553 case "$d_longlong-$d_strtoull" in
11554 "$define-$define")
11555         $cat <<EOM
11556 Checking whether your strtoull() works okay...
11557 EOM
11558         $cat >try.c <<'EOCP'
11559 #include <errno.h>
11560 #ifdef __hpux
11561 #define strtoull __strtoull
11562 #endif
11563 #include <stdio.h>
11564 extern unsigned long long int strtoull(char *s, char **, int); 
11565 static int bad = 0;
11566 int check(char *s, long long eull, int een) {
11567         long long gull;
11568         errno = 0;
11569         gull = strtoull(s, 0, 10);
11570         if (!((gull == eull) && (errno == een)))
11571                 bad++;
11572 }
11573 int main() {
11574         check(" 1",                                       1LL, 0);
11575         check(" 0",                                       0LL, 0);
11576         check("18446744073709551615", 18446744073709551615ULL, 0);
11577         check("18446744073709551616", 18446744073709551615ULL, ERANGE);
11578         if (!bad)
11579                 printf("ok\n");
11580 }
11581 EOCP
11582         set try
11583         if eval $compile; then
11584                 case "`./try`" in
11585                 ok) echo "Your strtoull() seems to be working okay." ;;
11586                 *) cat <<EOM >&4
11587 Your strtoull() doesn't seem to be working okay.
11588 EOM
11589                    d_strtoull="$undef"
11590                    ;;
11591                 esac
11592         fi
11593         ;;
11594 esac
11595
11596 : see if strtouq exists
11597 set strtouq d_strtouq
11598 eval $inlibc
11599
11600 : see if strxfrm exists
11601 set strxfrm d_strxfrm
11602 eval $inlibc
11603
11604 : see if symlink exists
11605 set symlink d_symlink
11606 eval $inlibc
11607
11608 : see if syscall exists
11609 set syscall d_syscall
11610 eval $inlibc
11611
11612 : see if sysconf exists
11613 set sysconf d_sysconf
11614 eval $inlibc
11615
11616 : see if system exists
11617 set system d_system
11618 eval $inlibc
11619
11620 : see if tcgetpgrp exists
11621 set tcgetpgrp d_tcgetpgrp
11622 eval $inlibc
11623
11624 : see if tcsetpgrp exists
11625 set tcsetpgrp d_tcsetpgrp
11626 eval $inlibc
11627
11628 : see if prototype for telldir is available
11629 echo " "
11630 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
11631 eval $hasproto
11632
11633 : see if this is a sys/times.h system
11634 set sys/times.h i_systimes
11635 eval $inhdr
11636
11637 : see if times exists
11638 echo " "
11639 if set times val -f d_times; eval $csym; $val; then
11640         echo 'times() found.' >&4
11641         d_times="$define"
11642         inc=''
11643         case "$i_systimes" in
11644         "$define") inc='sys/times.h';;
11645         esac
11646         rp="What is the type returned by times() on this system?"
11647         set clock_t clocktype long stdio.h sys/types.h $inc
11648         eval $typedef_ask
11649 else
11650         echo 'times() NOT found, hope that will do.' >&4
11651         d_times="$undef"
11652         clocktype='int'
11653 fi
11654
11655 : see if truncate exists
11656 set truncate d_truncate
11657 eval $inlibc
11658
11659 : see if tzname[] exists
11660 echo " "
11661 if set tzname val -a d_tzname; eval $csym; $val; then
11662         val="$define"
11663         echo 'tzname[] found.' >&4
11664 else
11665         val="$undef"
11666         echo 'tzname[] NOT found.' >&4
11667 fi
11668 set d_tzname
11669 eval $setvar
11670
11671 : see if umask exists
11672 set umask d_umask
11673 eval $inlibc
11674
11675 : see if ustat exists
11676 set ustat d_ustat
11677 eval $inlibc
11678
11679 : backward compatibility for d_hvfork
11680 if test X$d_hvfork != X; then
11681         d_vfork="$d_hvfork"
11682         d_hvfork=''
11683 fi
11684 : see if there is a vfork
11685 val=''
11686 set vfork val
11687 eval $inlibc
11688
11689 : Ok, but do we want to use it. vfork is reportedly unreliable in 
11690 : perl on Solaris 2.x, and probably elsewhere.
11691 case "$val" in
11692 $define)
11693         echo " "
11694         case "$usevfork" in
11695         false) dflt='n';;
11696         *) dflt='y';;
11697         esac
11698         cat <<'EOM'
11699  
11700 Perl can only use a vfork() that doesn't suffer from strict
11701 restrictions on calling functions or modifying global data in
11702 the child.  For example, glibc-2.1 contains such a vfork()
11703 that is unsuitable.  If your system provides a proper fork()
11704 call, chances are that you do NOT want perl to use vfork().
11705
11706 EOM
11707         rp="Do you still want to use vfork()?"
11708         . ./myread
11709         case "$ans" in
11710         y|Y) ;;
11711         *)
11712                 echo "Ok, we won't use vfork()."
11713                 val="$undef"
11714                 ;;
11715         esac
11716         ;;
11717 esac
11718 set d_vfork
11719 eval $setvar
11720 case "$d_vfork" in
11721 $define) usevfork='true';;
11722 *) usevfork='false';;
11723 esac
11724
11725 : see if this is an sysdir system
11726 set sys/dir.h i_sysdir
11727 eval $inhdr
11728
11729 : see if this is an sysndir system
11730 set sys/ndir.h i_sysndir
11731 eval $inhdr
11732
11733 : see if closedir exists
11734 set closedir d_closedir
11735 eval $inlibc
11736
11737 case "$d_closedir" in
11738 "$define")
11739         echo " "
11740         echo "Checking whether closedir() returns a status..." >&4
11741         cat > closedir.c <<EOM
11742 #$i_dirent I_DIRENT             /**/
11743 #$i_sysdir I_SYS_DIR            /**/
11744 #$i_sysndir I_SYS_NDIR          /**/
11745 #$i_systypes I_SYS_TYPES        /**/
11746
11747 #if defined(I_SYS_TYPES)
11748 #include <sys/types.h>
11749 #endif
11750 #if defined(I_DIRENT)
11751 #include <dirent.h>
11752 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
11753 #include <sys/dir.h>
11754 #endif
11755 #else
11756 #ifdef I_SYS_NDIR
11757 #include <sys/ndir.h>
11758 #else
11759 #ifdef I_SYS_DIR
11760 #ifdef hp9000s500
11761 #include <ndir.h>       /* may be wrong in the future */
11762 #else
11763 #include <sys/dir.h>
11764 #endif
11765 #endif
11766 #endif
11767 #endif 
11768 int main() { return closedir(opendir(".")); }
11769 EOM
11770         set closedir
11771         if eval $compile_ok; then
11772                 if ./closedir > /dev/null 2>&1 ; then
11773                         echo "Yes, it does."
11774                         val="$undef"
11775                 else
11776                         echo "No, it doesn't."
11777                         val="$define"
11778                 fi
11779         else
11780                 echo "(I can't seem to compile the test program--assuming it doesn't)"
11781                 val="$define"
11782         fi
11783         ;;
11784 *)
11785         val="$undef";
11786         ;;
11787 esac
11788 set d_void_closedir
11789 eval $setvar
11790 $rm -f closedir*
11791 : check for volatile keyword
11792 echo " "
11793 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11794 $cat >try.c <<'EOCP'
11795 int main()
11796 {
11797         typedef struct _goo_struct goo_struct;
11798         goo_struct * volatile goo = ((goo_struct *)0);
11799         struct _goo_struct {
11800                 long long_int;
11801                 int reg_int;
11802                 char char_var;
11803         };
11804         typedef unsigned short foo_t;
11805         char *volatile foo;
11806         volatile int bar;
11807         volatile foo_t blech;
11808         foo = foo;
11809 }
11810 EOCP
11811 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11812         val="$define"
11813         echo "Yup, it does."
11814 else
11815         val="$undef"
11816         echo "Nope, it doesn't."
11817 fi
11818 set d_volatile
11819 eval $setvar
11820 $rm -f try.*
11821
11822 : see if there is a wait4
11823 set wait4 d_wait4
11824 eval $inlibc
11825
11826 : see if waitpid exists
11827 set waitpid d_waitpid
11828 eval $inlibc
11829
11830 : see if wcstombs exists
11831 set wcstombs d_wcstombs
11832 eval $inlibc
11833
11834 : see if wctomb exists
11835 set wctomb d_wctomb
11836 eval $inlibc
11837
11838 : preserve RCS keywords in files with variable substitution, grrr
11839 Date='$Date'
11840 Id='$Id'
11841 Log='$Log'
11842 RCSfile='$RCSfile'
11843 Revision='$Revision'
11844
11845 case "$crosscompile" in
11846 ''|[nN]*) crosscompile="$undef" ;;
11847 esac
11848
11849 case "$osname" in
11850 next|rhapsody|darwin) multiarch="$define" ;;
11851 esac
11852 case "$multiarch" in
11853 ''|[nN]*) multiarch="$undef" ;;
11854 esac
11855
11856 : check for alignment requirements
11857 echo " "
11858 case "$crosscompile$multiarch" in
11859 *$define*)
11860         $cat <<EOM
11861 You seem to be either cross-compiling or doing a multiarchitecture build,
11862 skipping the memory alignment check.
11863
11864 EOM
11865         case "$alignbytes" in
11866         '') alignbytes=8 ;;
11867         esac
11868         ;;
11869 *)
11870         case "$alignbytes" in
11871         '') echo "Checking alignment constraints..." >&4
11872                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
11873                         $cat >try.c <<'EOCP'
11874 typedef long double NV;
11875 EOCP
11876                 else
11877                         $cat >try.c <<'EOCP'
11878 typedef double NV;
11879 EOCP
11880                 fi
11881                 $cat >>try.c <<'EOCP'
11882 #include <stdio.h>
11883 struct foobar {
11884         char foo;
11885         NV bar;
11886 } try_algn;
11887 int main()
11888 {
11889     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
11890     return(0);
11891 }
11892 EOCP
11893                 set try
11894                 if eval $compile_ok; then
11895                         dflt=`./try`
11896                 else
11897                         dflt='8'
11898                         echo "(I can't seem to compile the test program...)"
11899                 fi
11900                 ;;
11901         *) dflt="$alignbytes"
11902                 ;;
11903         esac
11904         rp="Doubles must be aligned on a how-many-byte boundary?"
11905         . ./myread
11906         alignbytes="$ans"
11907         $rm -f try.c try
11908         ;;
11909 esac
11910
11911
11912 : set the base revision
11913 baserev=5.0
11914
11915 : check for ordering of bytes in a long
11916 echo " "
11917 case "$crosscompile$multiarch" in
11918 *$define*)
11919         $cat <<EOM
11920 You seem to be either cross-compiling or doing a multiarchitecture build,
11921 skipping the byteorder check.
11922
11923 EOM
11924         byteorder='0xffff'
11925         ;;
11926 *)
11927         case "$byteorder" in
11928         '')
11929                 $cat <<'EOM'
11930 In the following, larger digits indicate more significance.  A big-endian
11931 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
11932 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
11933 machines may have weird orders like 3412.  A Cray will report 87654321,
11934 an Alpha will report 12345678. If the test program works the default is
11935 probably right.
11936 I'm now running the test program...
11937 EOM
11938                 $cat >try.c <<'EOCP'
11939 #include <stdio.h>
11940 int main()
11941 {
11942         int i;
11943         union {
11944                 unsigned long l;
11945                 char c[sizeof(long)];
11946         } u;
11947
11948         if (sizeof(long) > 4)
11949                 u.l = (0x08070605L << 32) | 0x04030201L;
11950         else
11951                 u.l = 0x04030201L;
11952         for (i = 0; i < sizeof(long); i++)
11953                 printf("%c", u.c[i]+'0');
11954         printf("\n");
11955         exit(0);
11956 }
11957 EOCP
11958                 xxx_prompt=y
11959                 set try
11960                 if eval $compile && ./try > /dev/null; then
11961                         dflt=`./try`
11962                         case "$dflt" in
11963                         [1-4][1-4][1-4][1-4]|12345678|87654321)
11964                                 echo "(The test program ran ok.)"
11965                                 echo "byteorder=$dflt"
11966                                 xxx_prompt=n
11967                         ;;
11968                         ????|????????) echo "(The test program ran ok.)" ;;
11969                         *) echo "(The test program didn't run right for some reason.)" ;;
11970                         esac
11971                 else
11972                         dflt='4321'
11973                         cat <<'EOM'
11974 (I can't seem to compile the test program.  Guessing big-endian...)
11975 EOM
11976                 fi
11977                 case "$xxx_prompt" in
11978                 y)
11979                         rp="What is the order of bytes in a long?"
11980                         . ./myread
11981                         byteorder="$ans"
11982                         ;;
11983                 *)      byteorder=$dflt
11984                         ;;
11985                 esac
11986                 ;;
11987         esac
11988         $rm -f try.c try
11989         ;;
11990 esac
11991
11992
11993 : how do we catenate cpp tokens here?
11994 echo " "
11995 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
11996 $cat >cpp_stuff.c <<'EOCP'
11997 #define RCAT(a,b)a/**/b
11998 #define ACAT(a,b)a ## b
11999 RCAT(Rei,ser)
12000 ACAT(Cir,cus)
12001 EOCP
12002 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
12003 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
12004         echo "Oh!  Smells like ANSI's been here." >&4
12005         echo "We can catify or stringify, separately or together!"
12006         cpp_stuff=42
12007 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
12008         echo "Ah, yes!  The good old days!" >&4
12009         echo "However, in the good old days we don't know how to stringify and"
12010         echo "catify at the same time."
12011         cpp_stuff=1
12012 else
12013         $cat >&4 <<EOM
12014 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
12015 to have to edit the values of CAT[2-5] in config.h...
12016 EOM
12017         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
12018 fi
12019 $rm -f cpp_stuff.*
12020
12021 : see if this is a db.h system
12022 set db.h i_db
12023 eval $inhdr
12024
12025 case "$i_db" in
12026 $define)
12027         : Check db version.
12028         echo " "
12029         echo "Checking Berkeley DB version ..." >&4
12030         $cat >try.c <<EOCP
12031 #$d_const HASCONST
12032 #ifndef HASCONST
12033 #define const
12034 #endif
12035 #include <sys/types.h>
12036 #include <stdio.h>
12037 #include <db.h>
12038 int main()
12039 {
12040 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
12041     int Major, Minor, Patch ;
12042     unsigned long Version ;
12043     (void)db_version(&Major, &Minor, &Patch) ;
12044     printf("You have Berkeley DB Version 2 or greater\n");
12045
12046     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
12047                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
12048     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
12049                 Major, Minor, Patch) ;
12050
12051     /* check that db.h & libdb are compatible */
12052     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
12053         printf("db.h and libdb are incompatible\n") ;
12054         exit(3);        
12055     }
12056
12057     printf("db.h and libdb are compatible\n") ;
12058
12059     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
12060                 + DB_VERSION_PATCH ;
12061
12062     /* needs to be >= 2.3.4 */
12063     if (Version < 2003004) {
12064     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
12065         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
12066         exit(2);        
12067     }
12068
12069     exit(0);
12070 #else
12071 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
12072     printf("You have Berkeley DB Version 1\n");
12073     exit(0);    /* DB version < 2: the coast is clear. */
12074 #else
12075     exit(1);    /* <db.h> not Berkeley DB? */
12076 #endif
12077 #endif
12078 }
12079 EOCP
12080         set try
12081         if eval $compile_ok && ./try; then
12082                 echo 'Looks OK.' >&4
12083         else
12084                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
12085                 i_db=$undef
12086                 case " $libs " in
12087                 *"-ldb "*)
12088                         : Remove db from list of libraries to use
12089                         echo "Removing unusable -ldb from library list" >&4
12090                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
12091                         shift
12092                         libs="$*"
12093                         echo "libs = $libs" >&4
12094                         ;;
12095                 esac
12096         fi
12097         $rm -f try.*
12098         ;;
12099 esac
12100
12101 case "$i_db" in
12102 define)
12103         : Check the return type needed for hash 
12104         echo " "
12105         echo "Checking return type needed for hash for Berkeley DB ..." >&4
12106         $cat >try.c <<EOCP
12107 #$d_const HASCONST
12108 #ifndef HASCONST
12109 #define const
12110 #endif
12111 #include <sys/types.h>
12112 #include <db.h>
12113
12114 #ifndef DB_VERSION_MAJOR
12115 u_int32_t hash_cb (ptr, size)
12116 const void *ptr;
12117 size_t size;
12118 {
12119 }
12120 HASHINFO info;
12121 int main()
12122 {
12123         info.hash = hash_cb;
12124 }
12125 #endif
12126 EOCP
12127         if $cc $ccflags -c try.c >try.out 2>&1 ; then
12128                 if $contains warning try.out >>/dev/null 2>&1 ; then
12129                         db_hashtype='int'
12130                 else
12131                         db_hashtype='u_int32_t'
12132                 fi
12133         else
12134                 : XXX Maybe we should just give up here.
12135                 db_hashtype=u_int32_t
12136                 $cat try.out >&4
12137                 echo "Help:  I can't seem to compile the db test program." >&4
12138                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
12139         fi
12140         $rm -f try.*
12141         echo "Your version of Berkeley DB uses $db_hashtype for hash."
12142         ;;
12143 *)      db_hashtype=u_int32_t
12144         ;;
12145 esac
12146 case "$i_db" in
12147 define)
12148         : Check the return type needed for prefix 
12149         echo " "
12150         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
12151         cat >try.c <<EOCP
12152 #$d_const HASCONST
12153 #ifndef HASCONST
12154 #define const
12155 #endif
12156 #include <sys/types.h>
12157 #include <db.h>
12158
12159 #ifndef DB_VERSION_MAJOR
12160 size_t prefix_cb (key1, key2)
12161 const DBT *key1;
12162 const DBT *key2;
12163 {
12164 }
12165 BTREEINFO info;
12166 int main()
12167 {
12168         info.prefix = prefix_cb;
12169 }
12170 #endif
12171 EOCP
12172         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
12173                 if $contains warning try.out >>/dev/null 2>&1 ; then
12174                         db_prefixtype='int'
12175                 else
12176                         db_prefixtype='size_t'
12177                 fi
12178         else
12179                 db_prefixtype='size_t'
12180                 : XXX Maybe we should just give up here.
12181                 $cat try.out >&4
12182                 echo "Help:  I can't seem to compile the db test program." >&4
12183                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
12184         fi
12185         $rm -f try.*
12186         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
12187         ;;
12188 *)      db_prefixtype='size_t'
12189         ;;
12190 esac
12191
12192 : check for void type
12193 echo " "
12194 echo "Checking to see how well your C compiler groks the void type..." >&4
12195 case "$voidflags" in
12196 '')
12197         $cat >try.c <<'EOCP'
12198 #if TRY & 1
12199 void sub() {
12200 #else
12201 sub() {
12202 #endif
12203         extern void moo();      /* function returning void */
12204         void (*goo)();          /* ptr to func returning void */
12205 #if TRY & 8
12206         void *hue;              /* generic ptr */
12207 #endif
12208 #if TRY & 2
12209         void (*foo[10])();
12210 #endif
12211
12212 #if TRY & 4
12213         if(goo == moo) {
12214                 exit(0);
12215         }
12216 #endif
12217         exit(0);
12218 }
12219 int main() { sub(); }
12220 EOCP
12221         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
12222                 voidflags=$defvoidused
12223         echo "Good.  It appears to support void to the level $package wants.">&4
12224                 if $contains warning .out >/dev/null 2>&1; then
12225                         echo "However, you might get some warnings that look like this:"
12226                         $cat .out
12227                 fi
12228         else
12229 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
12230                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
12231                         echo "It supports 1..."
12232                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
12233                                 echo "It also supports 2..."
12234                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
12235                                         voidflags=7
12236                                         echo "And it supports 4 but not 8 definitely."
12237                                 else
12238                                         echo "It doesn't support 4..."
12239                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
12240                                                 voidflags=11
12241                                                 echo "But it supports 8."
12242                                         else
12243                                                 voidflags=3
12244                                                 echo "Neither does it support 8."
12245                                         fi
12246                                 fi
12247                         else
12248                                 echo "It does not support 2..."
12249                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
12250                                         voidflags=13
12251                                         echo "But it supports 4 and 8."
12252                                 else
12253                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
12254                                                 voidflags=5
12255                                                 echo "And it supports 4 but has not heard about 8."
12256                                         else
12257                                                 echo "However it supports 8 but not 4."
12258                                         fi
12259                                 fi
12260                         fi
12261                 else
12262                         echo "There is no support at all for void."
12263                         voidflags=0
12264                 fi
12265         fi
12266 esac
12267 case "$voidflags" in
12268 "$defvoidused") ;;
12269 *)      $cat >&4 <<'EOM'
12270   Support flag bits are:
12271     1: basic void declarations.
12272     2: arrays of pointers to functions returning void.
12273     4: operations between pointers to and addresses of void functions.
12274     8: generic void pointers.
12275 EOM
12276         dflt="$voidflags";
12277         rp="Your void support flags add up to what?"
12278         . ./myread
12279         voidflags="$ans"
12280         ;;
12281 esac
12282 $rm -f try.* .out
12283
12284
12285 : How can we generate normalized random numbers ?
12286 echo " "
12287 echo "Looking for a random number function..." >&4
12288 case "$randfunc" in
12289 '')
12290         if set drand48 val -f; eval $csym; $val; then
12291                 dflt="drand48"
12292                 echo "Good, found drand48()." >&4
12293         elif set random val -f; eval $csym; $val; then
12294                 dflt="random"
12295                 echo "OK, found random()." >&4
12296         else
12297                 dflt="rand"
12298                 echo "Yick, looks like I have to use rand()." >&4
12299         fi
12300         echo " "
12301         ;;
12302 *)
12303         dflt="$randfunc"
12304         ;;
12305 esac
12306 cont=true
12307
12308 case "$ccflags" in
12309 *-Dmy_rand=*|*-Dmy_srand=*)
12310         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
12311         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
12312         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
12313         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
12314         ;;
12315 esac
12316
12317 while $test "$cont"; do
12318         rp="Use which function to generate random numbers?"
12319         . ./myread
12320         if $test "$ans" = "$dflt"; then
12321                 : null
12322         else
12323                 randbits=''
12324         fi
12325         randfunc="$ans"
12326         if set $ans val -f; eval $csym; $val; then
12327                 cont=''
12328         else
12329                 dflt=y
12330                 rp="I cannot find function $ans. Use that name anyway?"
12331                 . ./myread
12332                 dflt=rand
12333                 case "$ans" in
12334                         [yY]*) cont='';;
12335                 esac
12336         fi
12337         case "$cont" in
12338         '')
12339                 case "$randfunc" in
12340                 drand48)
12341                         drand01="drand48()"
12342                         seedfunc="srand48"
12343                         randbits=48
12344                         randseedtype=long
12345                         ;;
12346                 rand|random)
12347                         case "$randbits" in
12348                         '')
12349 echo "Checking to see how many bits your $randfunc() function produces..." >&4
12350                                 $cat >try.c <<EOCP
12351 #$i_unistd I_UNISTD
12352 #$i_stdlib I_STDLIB
12353 #include <stdio.h>
12354 #ifdef I_UNISTD
12355 #  include <unistd.h>
12356 #endif
12357 #ifdef I_STDLIB
12358 #  include <stdlib.h>
12359 #endif
12360 int main()
12361 {
12362         register int i;
12363         register unsigned long tmp;
12364         register unsigned long max = 0L;
12365
12366         for (i = 1000; i; i--) {
12367                 tmp = (unsigned long) $randfunc();
12368                 if (tmp > max) max = tmp;
12369         }
12370         for (i = 0; max; i++)
12371                 max /= 2;
12372         printf("%d\n",i);
12373 }
12374 EOCP
12375                                 set try
12376                                 if eval $compile_ok; then
12377                                         dflt=`try`
12378                                 else
12379                                         dflt='?'
12380                                         echo "(I can't seem to compile the test program...)"
12381                                 fi
12382                                 ;;
12383                         *)
12384                                 dflt="$randbits"
12385                                 ;;
12386                         esac
12387                         rp="How many bits does your $randfunc() function produce?"
12388                         . ./myread
12389                         randbits="$ans"
12390                         $rm -f try.c try
12391                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12392                         seedfunc="s$randfunc"
12393                         randseedtype=unsigned
12394                         ;;
12395                 *)
12396                         dflt="31"
12397                         rp="How many bits does your $randfunc() function produce?"
12398                         . ./myread
12399                         randbits="$ans"
12400                         seedfunc="s$randfunc"
12401                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12402                         if set $seedfunc val -f; eval $csym; $val; then
12403                                 echo "(Using $seedfunc() to seed random generator)"
12404                         else
12405                                 echo "(Warning: no $seedfunc() to seed random generator)"
12406                                 seedfunc=rand
12407                         fi
12408                         randseedtype=unsigned
12409                         ;;
12410                 esac
12411                 ;;
12412         esac
12413 done
12414
12415 echo " "
12416 echo "Determining whether or not we are on an EBCDIC system..." >&4
12417 $cat >tebcdic.c <<'EOM'
12418 int main()
12419 {
12420   if ('M'==0xd4) return 0;
12421   return 1;
12422 }
12423 EOM
12424
12425 val=$undef
12426 set tebcdic
12427 if eval $compile_ok; then
12428         if ./tebcdic; then
12429                 echo "You have EBCDIC." >&4
12430                 val="$define"
12431         else
12432                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin." >&4
12433         fi
12434 else
12435         echo "I'm unable to compile the test program." >&4
12436         echo "I'll assume ASCII or some ISO Latin." >&4
12437 fi
12438 $rm -f tebcdic.c tebcdic
12439 set ebcdic
12440 eval $setvar
12441
12442 echo " "
12443 $cat >&4 <<EOM
12444 Checking how to flush all pending stdio output...
12445 EOM
12446 # I only know how to find the first 32 possibly open files on SunOS.
12447 # See also hints/sunos_4_1.sh and util.c  --AD
12448 case "$osname" in
12449 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
12450 esac
12451 $cat >>try.c <<EOCP
12452 #include <stdio.h>
12453 #$i_unistd I_UNISTD
12454 #ifdef I_UNISTD
12455 # include <unistd.h>
12456 #endif
12457 #$d_sysconf HAS_SYSCONF
12458 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
12459 #ifdef HAS_STDIO_STREAM_ARRAY
12460 # define STDIO_STREAM_ARRAY $stdio_stream_array
12461 #endif
12462 int main() {
12463   FILE* p = fopen("try.out", "w");
12464 #ifdef TRY_FPUTC
12465   fputc('x', p);
12466 #else
12467 # ifdef TRY_FPRINTF
12468   fprintf(p, "x");
12469 # endif
12470 #endif
12471 #ifdef TRY_FFLUSH_NULL
12472   fflush(NULL);
12473 #endif
12474 #ifdef TRY_FFLUSH_ALL
12475   {
12476     long open_max = -1;
12477 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
12478     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
12479 # else
12480 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
12481     open_max = sysconf(_SC_OPEN_MAX);
12482 #  else
12483 #   ifdef FOPEN_MAX
12484     open_max = FOPEN_MAX;
12485 #   else
12486 #    ifdef OPEN_MAX
12487     open_max = OPEN_MAX;
12488 #    else
12489 #     ifdef _NFILE
12490     open_max = _NFILE;
12491 #     endif
12492 #    endif
12493 #   endif
12494 #  endif
12495 # endif 
12496 # ifdef HAS_STDIO_STREAM_ARRAY
12497     if (open_max > 0) {
12498       long i;
12499       for (i = 0; i < open_max; i++)
12500             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
12501                 STDIO_STREAM_ARRAY[i]._file < open_max &&
12502                 STDIO_STREAM_ARRAY[i]._flag)
12503                 fflush(&STDIO_STREAM_ARRAY[i]);
12504     }   
12505   }
12506 # endif
12507 #endif
12508   _exit(42);
12509 }
12510 EOCP
12511 : first we have to find out how _not_ to flush
12512 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
12513     output=''
12514     set try -DTRY_FPUTC
12515     if eval $compile; then
12516             $rm -f try.out
12517             ./try$exe_ext 2>/dev/null
12518             if $test ! -s try.out -a "X$?" = X42; then
12519                 output=-DTRY_FPUTC
12520             fi
12521     fi
12522     case "$output" in
12523     '')
12524             set try -DTRY_FPRINTF
12525             $rm -f try.out
12526             if eval $compile; then
12527                     $rm -f try.out
12528                     ./try$exe_ext 2>/dev/null
12529                     if $test ! -s try.out -a "X$?" = X42; then
12530                         output=-DTRY_FPRINTF
12531                     fi
12532             fi
12533         ;;
12534     esac
12535 fi
12536 : check for fflush NULL behaviour
12537 case "$fflushNULL" in
12538 '')     set try -DTRY_FFLUSH_NULL $output
12539         if eval $compile; then
12540                 $rm -f try.out
12541                 ./try$exe_ext 2>/dev/null
12542                 code="$?"
12543                 if $test -s try.out -a "X$code" = X42; then
12544                         fflushNULL="`$cat try.out`"
12545                 else
12546                         if $test "X$code" != X42; then
12547                                 $cat >&4 <<EOM
12548 (If this test failed, don't worry, we'll try another method shortly.)
12549 EOM
12550                         fi
12551                 fi
12552         fi
12553         $rm -f core try.core core.try.*
12554         case "$fflushNULL" in
12555         x)      $cat >&4 <<EOM
12556 Your fflush(NULL) works okay.
12557 EOM
12558                 fflushNULL="$define"
12559                 ;;
12560         '')     $cat >&4 <<EOM
12561 Your fflush(NULL) isn't working (contrary to ANSI C).
12562 EOM
12563                 fflushNULL="$undef"
12564                 ;;
12565         *)      $cat >&4 <<EOM
12566 Cannot figure out whether your fflush(NULL) works or not.
12567 I'm assuming it doesn't (contrary to ANSI C).
12568 EOM
12569                 fflushNULL="$undef"
12570                 ;;
12571         esac
12572         ;;
12573 $define|true|[yY]*)
12574         fflushNULL="$define"
12575         ;;
12576 *)
12577         fflushNULL="$undef"
12578         ;;
12579 esac
12580 : check explicit looping only if NULL did not work
12581 case "$fflushNULL" in
12582 "$undef")
12583         : check for fflush all behaviour
12584         case "$fflushall" in
12585         '')     set try -DTRY_FFLUSH_ALL $output
12586                 if eval $compile; then
12587                         $cat >&4 <<EOM
12588 (Now testing the other method--but note that also this may fail.)
12589 EOM
12590                         $rm -f try.out
12591                         ./try$exe_ext 2>/dev/null
12592                         if $test -s try.out -a "X$?" = X42; then
12593                                 fflushall="`$cat try.out`"
12594                         fi
12595                 fi
12596                 $rm -f core try.core core.try.*
12597                 case "$fflushall" in
12598                 x)      $cat >&4 <<EOM
12599 Whew. Flushing explicitly all the stdio streams works.
12600 EOM
12601                         fflushall="$define"
12602                         ;;
12603                 '')     $cat >&4 <<EOM
12604 Sigh. Flushing explicitly all the stdio streams doesn't work.
12605 EOM
12606                         fflushall="$undef"
12607                         ;;
12608                 *)      $cat >&4 <<EOM
12609 Cannot figure out whether flushing stdio streams explicitly works or not.
12610 I'm assuming it doesn't.
12611 EOM
12612                         fflushall="$undef"
12613                         ;;
12614                 esac
12615                 ;;
12616         "$define"|true|[yY]*)
12617                 fflushall="$define"
12618                 ;;
12619         *)
12620                 fflushall="$undef"
12621                 ;;
12622         esac
12623         ;;
12624 *)      fflushall="$undef"      
12625         ;;
12626 esac
12627 case "$fflushNULL$fflushall" in
12628 undefundef)
12629         $cat <<EOM
12630 I cannot figure out how to flush pending stdio output.
12631 EOM
12632         ;;
12633 esac
12634 $rm -f try.* try$exe_ext
12635
12636 : Store the full pathname to the ar program for use in the C program
12637 : Respect a hint or command line value for full_ar.
12638 case "$full_ar" in
12639 '') full_ar=$ar ;;
12640 esac
12641
12642 : Store the full pathname to the sed program for use in the C program
12643 full_sed=$sed
12644
12645 : see what type gids are declared as in the kernel
12646 echo " "
12647 echo "Looking for the type for group ids returned by getgid()."
12648 set gid_t gidtype xxx stdio.h sys/types.h
12649 eval $typedef
12650 case "$gidtype" in
12651 xxx)
12652         xxx=`./findhdr sys/user.h`
12653         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
12654         case $1 in
12655         unsigned) dflt="$1 $2" ;;
12656         *) dflt="$1" ;;
12657         esac
12658         ;;
12659 *) dflt="$gidtype";;
12660 esac
12661 case "$gidtype" in
12662 gid_t) echo "gid_t found." ;;
12663 *)      rp="What is the type for group ids returned by getgid()?"
12664         . ./myread
12665         gidtype="$ans"
12666         ;;
12667 esac
12668
12669 echo " "
12670 case "$gidtype" in
12671 *_t) zzz="$gidtype"     ;;
12672 *)   zzz="gid"          ;;
12673 esac
12674 echo "Checking the size of $zzz..." >&4 
12675 cat > try.c <<EOCP
12676 #include <sys/types.h>
12677 #include <stdio.h>
12678 int main() {
12679     printf("%d\n", (int)sizeof($gidtype));
12680     exit(0);
12681 }
12682 EOCP
12683 set try
12684 if eval $compile_ok; then
12685         yyy=`./try`
12686         case "$yyy" in
12687         '')     gidsize=4
12688                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
12689                 ;;
12690         *)      gidsize=$yyy
12691                 echo "Your $zzz is $gidsize bytes long."
12692                 ;;
12693         esac
12694 else
12695         gidsize=4
12696         echo "(I can't compile the test program--guessing $gidsize.)" >&4
12697 fi
12698
12699
12700 echo " "
12701 case "$gidtype" in
12702 *_t) zzz="$gidtype"     ;;
12703 *)   zzz="gid"          ;;
12704 esac
12705 echo "Checking the sign of $zzz..." >&4 
12706 cat > try.c <<EOCP
12707 #include <sys/types.h>
12708 #include <stdio.h>
12709 int main() {
12710         $gidtype foo = -1;
12711         if (foo < 0)
12712                 printf("-1\n");
12713         else
12714                 printf("1\n");
12715 }
12716 EOCP
12717 set try
12718 if eval $compile; then
12719         yyy=`./try`
12720         case "$yyy" in
12721         '')     gidsign=1
12722                 echo "(I can't execute the test program--guessing unsigned.)" >&4
12723                 ;;
12724         *)      gidsign=$yyy
12725                 case "$gidsign" in
12726                  1) echo "Your $zzz is unsigned." ;;
12727                 -1) echo "Your $zzz is signed."   ;;
12728                 esac
12729                 ;;
12730         esac
12731 else
12732         gidsign=1
12733         echo "(I can't compile the test program--guessing unsigned.)" >&4
12734 fi
12735
12736
12737 echo " "
12738
12739 if $test X"$quadtype" != X; then
12740
12741 echo "Checking how to print 64-bit integers..." >&4
12742
12743 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
12744         $cat >try.c <<'EOCP'
12745 #include <sys/types.h>
12746 #include <stdio.h>
12747 int main() {
12748   int q = 12345678901;
12749   printf("%ld\n", q);
12750 }
12751 EOCP
12752         set try
12753         if eval $compile; then
12754                 yyy=`./try$exe_ext`
12755                 case "$yyy" in
12756                 12345678901)
12757                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
12758                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIX64='"X"';
12759                         echo "We will use %d."
12760                         ;;
12761                 esac
12762         fi
12763 fi
12764
12765 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
12766         $cat >try.c <<'EOCP'
12767 #include <sys/types.h>
12768 #include <stdio.h>
12769 int main() {
12770   long q = 12345678901;
12771   printf("%ld\n", q);
12772 }
12773 EOCP
12774         set try
12775         if eval $compile; then
12776                 yyy=`./try$exe_ext`
12777                 case "$yyy" in
12778                 12345678901)
12779                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
12780                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIX64='"lX"';
12781                         echo "We will use %ld."
12782                         ;;
12783                 esac
12784         fi
12785 fi
12786
12787 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
12788         $cat >try.c <<'EOCP'
12789 #include <sys/types.h>
12790 #include <inttypes.h>
12791 #include <stdio.h>
12792 int main() {
12793   int64_t q = 12345678901;
12794   printf("%" PRId64 "\n", q);
12795 }
12796 EOCP
12797         set try
12798         if eval $compile; then
12799                 yyy=`./try$exe_ext`
12800                 case "$yyy" in
12801                 12345678901)
12802                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
12803                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIX64=PRIX64;
12804                         echo "We will use the C9X style."
12805                         ;;
12806                 esac
12807         fi
12808 fi
12809
12810 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
12811         $cat >try.c <<'EOCP'
12812 #include <sys/types.h>
12813 #include <stdio.h>
12814 int main() {
12815   long long q = 12345678901LL; /* AIX cc requires the LL prefix. */
12816   printf("%lld\n", q);
12817 }
12818 EOCP
12819         set try
12820         if eval $compile; then
12821                 yyy=`./try$exe_ext`
12822                 case "$yyy" in
12823                 12345678901)
12824                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
12825                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIX64='"llX"';
12826                         echo "We will use the %lld style."
12827                         ;;
12828                 esac
12829         fi
12830 fi
12831
12832 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
12833         $cat >try.c <<EOCP
12834 #include <sys/types.h>
12835 #include <stdio.h>
12836 int main() {
12837   $quadtype q = 12345678901;
12838   printf("%Ld\n", q);
12839 }
12840 EOCP
12841         set try
12842         if eval $compile; then
12843                 yyy=`./try$exe_ext`
12844                 case "$yyy" in
12845                 12345678901)
12846                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
12847                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIX64='"LX"';
12848                         echo "We will use %Ld."
12849                         ;;
12850                 esac
12851         fi
12852 fi
12853
12854 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
12855         $cat >try.c <<EOCP
12856 #include <sys/types.h>
12857 #include <stdio.h>
12858 int main() {
12859   $quadtype q = 12345678901;
12860   printf("%qd\n", q);
12861 }
12862 EOCP
12863         set try
12864         if eval $compile; then
12865                 yyy=`./try$exe_ext`
12866                 case "$yyy" in
12867                 12345678901)
12868                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
12869                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIX64='"qX"';
12870                         echo "We will use %qd."
12871                         ;;
12872                 esac
12873         fi
12874 fi
12875
12876 if $test X"$sPRId64" = X; then
12877         echo "Cannot figure out how to print 64-bit integers." >&4
12878 fi
12879
12880 $rm -f try try.*
12881
12882 fi
12883
12884 case "$sPRId64" in
12885 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
12886         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIX64="$undef"; 
12887         ;;
12888 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
12889         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIX64="$define"; 
12890         ;;
12891 esac
12892
12893
12894 echo " "
12895 $echo "Checking the format strings to be used for Perl's internal types..." >&4
12896
12897 if $test X"$ivsize" = X8; then
12898         ivdformat="$sPRId64"
12899         uvuformat="$sPRIu64"
12900         uvoformat="$sPRIo64"
12901         uvxformat="$sPRIx64"
12902 else
12903         if $test X"$ivsize" = X"$longsize"; then
12904                 ivdformat='"ld"'
12905                 uvuformat='"lu"'
12906                 uvoformat='"lo"'
12907                 uvxformat='"lx"'
12908         else
12909                 if $test X"$ivsize" = X"$intsize"; then
12910                         ivdformat='"d"'
12911                         uvuformat='"u"'
12912                         uvoformat='"o"'
12913                         uvxformat='"x"'
12914                 else
12915                         : far out
12916                         if $test X"$ivsize" = X"$shortsize"; then
12917                                 ivdformat='"hd"'
12918                                 uvuformat='"hu"'
12919                                 uvoformat='"ho"'
12920                                 uvxformat='"hx"'
12921                         fi
12922                 fi
12923         fi
12924 fi
12925
12926 case "$ivdformat" in
12927 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
12928     exit 1
12929     ;;
12930 esac
12931
12932
12933 echo " "
12934 $echo "Checking the format string to be used for gids..." >&4
12935
12936 case "$gidsign" in
12937 -1)     if $test X"$gidsize" = X"$ivsize"; then
12938                 gidformat="$ivdformat"
12939         else
12940                 if $test X"$gidsize" = X"$longsize"; then
12941                         gidformat='"ld"'
12942                 else
12943                         if $test X"$gidsize" = X"$intsize"; then
12944                                 gidformat='"d"'
12945                         else
12946                                 if $test X"$gidsize" = X"$shortsize"; then
12947                                         gidformat='"hd"'
12948                                 fi
12949                         fi
12950                 fi
12951         fi
12952         ;;
12953 *)      if $test X"$gidsize" = X"$uvsize"; then
12954                 gidformat="$uvuformat"
12955         else
12956                 if $test X"$gidsize" = X"$longsize"; then
12957                         gidformat='"lu"'
12958                 else
12959                         if $test X"$gidsize" = X"$intsize"; then
12960                                 gidformat='"u"'
12961                         else
12962                                 if $test X"$gidsize" = X"$shortsize"; then
12963                                         gidformat='"hu"'
12964                                 fi
12965                         fi
12966                 fi
12967         fi
12968         ;;
12969 esac
12970
12971 : see if getgroups exists
12972 set getgroups d_getgrps
12973 eval $inlibc
12974
12975 : see if setgroups exists
12976 set setgroups d_setgrps
12977 eval $inlibc
12978
12979
12980 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
12981 echo " "
12982 case "$d_getgrps$d_setgrps" in
12983 *define*)
12984         case "$groupstype" in
12985         '') dflt="$gidtype" ;;
12986         *)  dflt="$groupstype" ;;
12987         esac
12988         $cat <<EOM
12989 What type of pointer is the second argument to getgroups() and setgroups()?
12990 Usually this is the same as group ids, $gidtype, but not always.
12991
12992 EOM
12993         rp='What type pointer is the second argument to getgroups() and setgroups()?'
12994         . ./myread
12995         groupstype="$ans"
12996         ;;
12997 *)  groupstype="$gidtype";;
12998 esac
12999
13000 echo " "
13001 echo "Checking if your $make program sets \$(MAKE)..." >&4
13002 case "$make_set_make" in
13003 '')
13004         $sed 's/^X //' > testmake.mak << 'EOF'
13005 Xall:
13006 X       @echo 'maketemp="$(MAKE)"'
13007 EOF
13008         case "`$make -f testmake.mak 2>/dev/null`" in
13009         *maketemp=*) make_set_make='#' ;;
13010         *)      make_set_make="MAKE=$make" ;;
13011         esac
13012         $rm -f testmake.mak
13013         ;;
13014 esac
13015 case "$make_set_make" in
13016 '#') echo "Yup, it does.";;
13017 *) echo "Nope, it doesn't.";;
13018 esac
13019
13020 : see what type is used for mode_t
13021 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
13022 set mode_t modetype int stdio.h sys/types.h
13023 eval $typedef_ask
13024
13025 : define a fucntion to check prototypes
13026 $cat > protochk <<EOSH
13027 $startsh
13028 cc="$cc"
13029 optimize="$optimize"
13030 ccflags="$ccflags"
13031 prototype="$prototype"
13032 define="$define"
13033 rm=$rm
13034 EOSH
13035
13036 $cat >> protochk <<'EOSH'
13037
13038 $rm -f try.c
13039 foo="$1"
13040 shift
13041 while test $# -ge 2; do
13042         case "$1" in
13043                 $define) echo "#include <$2>" >> try.c ;;
13044                 literal) echo "$2" >> try.c ;;
13045         esac
13046     shift 2
13047 done
13048 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
13049 cat >> try.c <<'EOCP'
13050 #ifdef CAN_PROTOTYPE
13051 #define _(args) args
13052 #else
13053 #define _(args) ()
13054 #endif
13055 EOCP
13056 echo "$foo" >> try.c
13057 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
13058 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
13059 status=$?
13060 $rm -f try.[co]
13061 exit $status
13062 EOSH
13063 chmod +x protochk
13064 $eunicefix protochk
13065
13066 : see what type is used for size_t
13067 rp="What is the type used for the length parameter for string functions?"
13068 set size_t sizetype 'unsigned int' stdio.h sys/types.h
13069 eval $typedef_ask
13070
13071 : check for type of arguments to gethostbyaddr. 
13072 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
13073         case "$d_gethbyaddr" in
13074         $define)
13075                 $cat <<EOM
13076
13077 Checking to see what type of arguments are accepted by gethostbyaddr().
13078 EOM
13079                 hdrs="$define sys/types.h
13080                         $d_socket sys/socket.h 
13081                         $i_niin netinet/in.h 
13082                         $i_netdb netdb.h
13083                         $i_unistd unistd.h"
13084                 : The first arg can 'char *' or 'void *'
13085                 : The second arg is some of integral type
13086                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
13087                         for yyy in size_t long int; do
13088                                 case "$netdb_host_type" in
13089                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
13090                                         if ./protochk "$try" $hdrs; then
13091                                                 echo "Your system accepts $xxx for the first arg."
13092                                                 echo "...and $yyy for the second arg."
13093                                                 netdb_host_type="$xxx"
13094                                                 netdb_hlen_type="$yyy"
13095                                         fi
13096                                         ;;
13097                                 esac
13098                         done
13099                 done
13100                 : In case none of those worked, prompt the user.
13101                 case "$netdb_host_type" in
13102                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
13103                         dflt='char *'
13104                         . ./myread
13105                         netdb_host_type=$ans
13106                         rp='What is the type for the 2nd argument to gethostbyaddr?'
13107                         dflt="$sizetype"
13108                         . ./myread
13109                         netdb_hlen_type=$ans
13110                         ;;
13111                 esac
13112                 ;;
13113         *)      : no gethostbyaddr, so pick harmless defaults
13114                 netdb_host_type='char *'
13115                 netdb_hlen_type="$sizetype"
13116                 ;;
13117         esac
13118         # Remove the "const" if needed. -- but then we'll have a 
13119         # prototype clash!
13120         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
13121 fi
13122
13123 : check for type of argument to gethostbyname. 
13124 if test "X$netdb_name_type" = X ; then
13125         case "$d_gethbyname" in
13126         $define)
13127                 $cat <<EOM
13128
13129 Checking to see what type of argument is accepted by gethostbyname().
13130 EOM
13131                 hdrs="$define sys/types.h
13132                         $d_socket sys/socket.h 
13133                         $i_niin netinet/in.h 
13134                         $i_netdb netdb.h
13135                         $i_unistd unistd.h"
13136                 for xxx in "const char *" "char *"; do
13137                         case "$netdb_name_type" in
13138                         '')     try="extern struct hostent *gethostbyname($xxx);"
13139                                 if ./protochk "$try" $hdrs; then
13140                                         echo "Your system accepts $xxx."
13141                                         netdb_name_type="$xxx"
13142                                 fi
13143                                 ;;
13144                         esac
13145                 done
13146                 : In case none of those worked, prompt the user.
13147                 case "$netdb_name_type" in
13148                 '')     rp='What is the type for the 1st argument to gethostbyname?'
13149                         dflt='char *'
13150                         . ./myread
13151                         netdb_name_type=$ans
13152                         ;;
13153                 esac
13154                 ;;
13155         *)      : no gethostbyname, so pick harmless default
13156                 netdb_name_type='char *'
13157                 ;;
13158         esac
13159 fi
13160
13161 : check for type of 1st argument to getnetbyaddr. 
13162 if test "X$netdb_net_type" = X ; then
13163         case "$d_getnbyaddr" in
13164         $define)
13165                 $cat <<EOM
13166
13167 Checking to see what type of 1st argument is accepted by getnetbyaddr().
13168 EOM
13169                 hdrs="$define sys/types.h
13170                         $d_socket sys/socket.h 
13171                         $i_niin netinet/in.h 
13172                         $i_netdb netdb.h
13173                         $i_unistd unistd.h"
13174                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
13175                         case "$netdb_net_type" in
13176                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
13177                                 if ./protochk "$try" $hdrs; then
13178                                         echo "Your system accepts $xxx."
13179                                         netdb_net_type="$xxx"
13180                                 fi
13181                                 ;;
13182                         esac
13183                 done
13184                 : In case none of those worked, prompt the user.
13185                 case "$netdb_net_type" in
13186                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
13187                         dflt='long'
13188                         . ./myread
13189                         netdb_net_type=$ans
13190                         ;;
13191                 esac
13192                 ;;
13193         *)      : no getnetbyaddr, so pick harmless default
13194                 netdb_net_type='long'
13195                 ;;
13196         esac
13197 fi
13198 : locate the preferred pager for this system
13199 case "$pager" in
13200 '')
13201         dflt=''
13202         case "$pg" in
13203         /*) dflt=$pg;;
13204         esac
13205         case "$more" in
13206         /*) dflt=$more;;
13207         esac
13208         case "$less" in
13209         /*) dflt=$less;;
13210         esac
13211         case "$dflt" in
13212         '') dflt=/usr/ucb/more;;
13213         esac
13214         ;;
13215 *) dflt="$pager";;
13216 esac
13217 echo " "
13218 fn=f/
13219 rp='What pager is used on your system?'
13220 . ./getfile
13221 pager="$ans"
13222
13223 : see what type pids are declared as in the kernel
13224 rp="What is the type of process ids on this system?"
13225 set pid_t pidtype int stdio.h sys/types.h
13226 eval $typedef_ask
13227
13228 : Find earliest binary compatible site_perl subdirectory perl can use.
13229 case "$bincompat5005" in
13230 "$define") xs_apiversion='5.005' ;;
13231 *) xs_apiversion=$version ;;   # The current site_perl version.
13232 esac
13233 : Find earliest pure perl site_perl subdirectory perl can use.
13234 : The versioned directories started at 5.005.
13235 pm_apiversion='5.005'
13236
13237 : check for length of pointer
13238 echo " "
13239 case "$ptrsize" in
13240 '')
13241         echo "Checking to see how big your pointers are..." >&4
13242         if test "$voidflags" -gt 7; then
13243                 echo '#define VOID_PTR char *' > try.c
13244         else
13245                 echo '#define VOID_PTR void *' > try.c
13246         fi
13247         $cat >>try.c <<'EOCP'
13248 #include <stdio.h>
13249 int main()
13250 {
13251     printf("%d\n", (int)sizeof(VOID_PTR));
13252     exit(0);
13253 }
13254 EOCP
13255         set try
13256         if eval $compile_ok; then
13257                 ptrsize=`./try`
13258                 echo "Your pointers are $ptrsize bytes long."
13259         else
13260                 dflt='4'
13261                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
13262                 rp="What is the size of a pointer (in bytes)?"
13263                 . ./myread
13264                 ptrsize="$ans"
13265         fi
13266         ;;
13267 esac
13268 $rm -f try.c try
13269
13270 : see if ar generates random libraries by itself
13271 echo " "
13272 echo "Checking how to generate random libraries on your machine..." >&4
13273 echo 'int bar1() { return bar2(); }' > bar1.c
13274 echo 'int bar2() { return 2; }' > bar2.c
13275 $cat > foo.c <<'EOP'
13276 int main() { printf("%d\n", bar1()); exit(0); }
13277 EOP
13278 $cc $ccflags -c bar1.c >/dev/null 2>&1
13279 $cc $ccflags -c bar2.c >/dev/null 2>&1
13280 $cc $ccflags -c foo.c >/dev/null 2>&1
13281 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
13282 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
13283         ./foobar >/dev/null 2>&1; then
13284         echo "$ar appears to generate random libraries itself."
13285         orderlib=false
13286         ranlib=":"
13287 elif $ar ts bar$_a >/dev/null 2>&1 &&
13288         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
13289         ./foobar >/dev/null 2>&1; then
13290                 echo "a table of contents needs to be added with '$ar ts'."
13291                 orderlib=false
13292                 ranlib="$ar ts"
13293 else
13294         case "$ranlib" in
13295         :) ranlib='';;
13296         '')
13297                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
13298                 $test -f $ranlib || ranlib=''
13299                 ;;
13300         esac
13301         if $test -n "$ranlib"; then
13302                 echo "your system has '$ranlib'; we'll use that."
13303                 orderlib=false
13304         else
13305                 echo "your system doesn't seem to support random libraries"
13306                 echo "so we'll use lorder and tsort to order the libraries."
13307                 orderlib=true
13308                 ranlib=":"
13309         fi
13310 fi
13311 $rm -f foo* bar* 
13312
13313 : check for type of arguments to select. 
13314 case "$selecttype" in
13315 '') case "$d_select" in
13316         $define)
13317                 echo " "
13318                 $cat <<EOM
13319 Checking to see what type of arguments are accepted by select().
13320 EOM
13321                 hdrs="$define sys/types.h
13322                         $i_systime sys/time.h 
13323                         $i_sysselct sys/select.h
13324                         $d_socket sys/socket.h"
13325                 : The first arg can be int, unsigned, or size_t
13326                 : The last arg may or may not be 'const'
13327                 val=''
13328                 : void pointer has been seen but using that
13329                 : breaks the selectminbits test
13330                 for xxx in 'fd_set *' 'int *'; do
13331                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
13332                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
13333                                         case "$val" in
13334                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
13335                                                 if ./protochk "$try" $hdrs; then
13336                                                         echo "Your system accepts $xxx."
13337                                                         val="$xxx"
13338                                                 fi
13339                                                 ;;
13340                                         esac
13341                                 done
13342                         done
13343                 done
13344                 case "$val" in
13345                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
13346                         case "$d_fd_set" in
13347                                 $define) dflt="fd_set *" ;;
13348                                 *)              dflt="int *" ;;
13349                         esac
13350                         . ./myread
13351                         val=$ans
13352                         ;;
13353                 esac
13354                 selecttype="$val"
13355                 ;;
13356         *)      : no select, so pick a harmless default
13357                 selecttype='int *'
13358                 ;;
13359         esac
13360         ;;
13361 esac
13362
13363 : check for the select 'width'
13364 case "$selectminbits" in
13365 '') case "$d_select" in
13366         $define)
13367                 $cat <<EOM
13368
13369 Checking to see on how many bits at a time your select() operates...
13370 EOM
13371                 $cat >try.c <<EOCP
13372 #include <sys/types.h>
13373 #$i_time I_TIME
13374 #$i_systime I_SYS_TIME
13375 #$i_systimek I_SYS_TIME_KERNEL
13376 #ifdef I_TIME
13377 #   include <time.h>
13378 #endif
13379 #ifdef I_SYS_TIME
13380 #   ifdef I_SYS_TIME_KERNEL
13381 #       define KERNEL
13382 #   endif
13383 #   include <sys/time.h>
13384 #   ifdef I_SYS_TIME_KERNEL
13385 #       undef KERNEL
13386 #   endif
13387 #endif
13388 #$i_sysselct I_SYS_SELECT
13389 #ifdef I_SYS_SELECT
13390 #include <sys/select.h>
13391 #endif
13392 #$d_socket HAS_SOCKET
13393 #ifdef HAS_SOCKET
13394 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
13395 #endif
13396 #include <stdio.h>
13397 $selecttype b;
13398 #define S sizeof(*(b))
13399 #define MINBITS 64
13400 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
13401 #define NBITS  (NBYTES * 8)
13402 int main() {
13403     char s[NBYTES];
13404     struct timeval t;
13405     int i;
13406     FILE* fp;
13407     int fd;
13408
13409     fclose(stdin);
13410     fp = fopen("try.c", "r");
13411     if (fp == 0)
13412       exit(1);
13413     fd = fileno(fp);
13414     if (fd < 0)
13415       exit(2);
13416     b = ($selecttype)s;
13417     for (i = 0; i < NBITS; i++)
13418         FD_SET(i, b);
13419     t.tv_sec  = 0;
13420     t.tv_usec = 0;
13421     select(fd + 1, b, 0, 0, &t);
13422     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
13423     printf("%d\n", i + 1);
13424     return 0;
13425 }
13426 EOCP
13427                 set try
13428                 if eval $compile_ok; then
13429                         selectminbits=`./try`
13430                         case "$selectminbits" in
13431                         '')     cat >&4 <<EOM
13432 Cannot figure out on how many bits at a time your select() operates.
13433 I'll play safe and guess it is 32 bits.
13434 EOM
13435                                 selectminbits=32
13436                                 bits="32 bits"
13437                                 ;;
13438                         1)      bits="1 bit" ;;
13439                         *)      bits="$selectminbits bits" ;;
13440                         esac
13441                         echo "Your select() operates on $bits at a time." >&4
13442                 else
13443                         rp='What is the minimum number of bits your select() operates on?'
13444                         case "$byteorder" in
13445                         1234|12345678)  dflt=32 ;;
13446                         *)              dflt=1  ;;
13447                         esac
13448                         . ./myread
13449                         val=$ans
13450                         selectminbits="$val"
13451                 fi
13452                 $rm -f try.* try
13453                 ;;
13454         *)      : no select, so pick a harmless default
13455                 selectminbits='32'
13456                 ;;
13457         esac
13458         ;;
13459 esac
13460
13461 : Trace out the files included by signal.h, then look for SIGxxx names.
13462 : Remove SIGARRAYSIZE used by HPUX.
13463 : Remove SIGSTKSIZE used by Linux.
13464 : Remove SIGSTKSZ used by Posix.
13465 : Remove SIGTYP void lines used by OS2.
13466 : Some cpps, like os390, dont give the file name anywhere
13467 if [ "X$fieldn" = X ]; then
13468         : Just make some guesses.  We check them later.
13469         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
13470 else
13471         xxx=`echo '#include <signal.h>' |
13472         $cppstdin $cppminus $cppflags 2>/dev/null |
13473         $grep '^[       ]*#.*include' | 
13474         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
13475 fi
13476 : Check this list of files to be sure we have parsed the cpp output ok.
13477 : This will also avoid potentially non-existent files, such 
13478 : as ../foo/bar.h
13479 xxxfiles=''
13480 for xx in $xxx /dev/null ; do
13481         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
13482 done
13483 : If we have found no files, at least try signal.h
13484 case "$xxxfiles" in
13485 '')     xxxfiles=`./findhdr signal.h` ;;
13486 esac
13487 xxx=`awk '
13488 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
13489         print substr($2, 4, 20)
13490 }
13491 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
13492         print substr($3, 4, 20)
13493 }' $xxxfiles`
13494 : Append some common names just in case the awk scan failed.
13495 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
13496 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
13497 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
13498 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
13499 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
13500
13501 : generate a few handy files for later
13502 $cat > signal.c <<'EOCP'
13503 #include <sys/types.h>
13504 #include <signal.h>
13505 #include <stdio.h>
13506 int main() {
13507
13508 /* Strange style to avoid deeply-nested #if/#else/#endif */
13509 #ifndef NSIG
13510 #  ifdef _NSIG
13511 #    define NSIG (_NSIG)
13512 #  endif
13513 #endif
13514
13515 #ifndef NSIG
13516 #  ifdef SIGMAX
13517 #    define NSIG (SIGMAX+1)
13518 #  endif
13519 #endif
13520
13521 #ifndef NSIG
13522 #  ifdef SIG_MAX
13523 #    define NSIG (SIG_MAX+1)
13524 #  endif
13525 #endif
13526
13527 #ifndef NSIG
13528 #  ifdef MAXSIG
13529 #    define NSIG (MAXSIG+1)
13530 #  endif
13531 #endif
13532
13533 #ifndef NSIG
13534 #  ifdef MAX_SIG
13535 #    define NSIG (MAX_SIG+1)
13536 #  endif
13537 #endif
13538
13539 #ifndef NSIG
13540 #  ifdef SIGARRAYSIZE
13541 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
13542 #  endif
13543 #endif
13544
13545 #ifndef NSIG
13546 #  ifdef _sys_nsig
13547 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
13548 #  endif
13549 #endif
13550
13551 /* Default to some arbitrary number that's big enough to get most
13552    of the common signals.
13553 */
13554 #ifndef NSIG
13555 #    define NSIG 50
13556 #endif
13557
13558 printf("NSIG %d\n", NSIG);
13559
13560 #ifndef JUST_NSIG
13561
13562 EOCP
13563
13564 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
13565 {
13566         printf "#ifdef SIG"; printf $1; printf "\n"
13567         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
13568         printf $1; printf ");\n"
13569         printf "#endif\n"
13570 }
13571 END {
13572         printf "#endif /* JUST_NSIG */\n";
13573         printf "exit(0);\n}\n";
13574 }
13575 ' >>signal.c
13576 $cat >signal.awk <<'EOP'
13577 BEGIN { ndups = 0 }
13578 $1 ~ /^NSIG$/ { nsig = $2 }
13579 ($1 !~ /^NSIG$/) && (NF == 2) {
13580     if ($2 > maxsig) { maxsig = $2 }
13581     if (sig_name[$2]) {
13582         dup_name[ndups] = $1
13583         dup_num[ndups] = $2
13584         ndups++ 
13585     }
13586     else {
13587         sig_name[$2] = $1
13588         sig_num[$2] = $2
13589     }
13590 }
13591 END { 
13592     if (nsig == 0) {
13593         nsig = maxsig + 1
13594     }
13595     printf("NSIG %d\n", nsig);
13596     for (n = 1; n < nsig; n++) {
13597         if (sig_name[n]) {
13598             printf("%s %d\n", sig_name[n], sig_num[n])
13599         }
13600         else {
13601             printf("NUM%d %d\n", n, n) 
13602         }
13603     }
13604     for (n = 0; n < ndups; n++) {
13605         printf("%s %d\n", dup_name[n], dup_num[n])
13606     }
13607 }
13608 EOP
13609 $cat >signal_cmd <<EOS
13610 $startsh
13611 if $test -s signal.lst; then
13612     echo "Using your existing signal.lst file"
13613         exit 0
13614 fi
13615 xxx="$xxx"
13616 EOS
13617 $cat >>signal_cmd <<'EOS'
13618
13619 set signal
13620 if eval $compile_ok; then
13621         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
13622 else
13623         echo "(I can't seem be able to compile the whole test program)" >&4
13624         echo "(I'll try it in little pieces.)" >&4
13625         set signal -DJUST_NSIG
13626         if eval $compile_ok; then
13627                 ./signal$_exe > signal.nsg
13628                 $cat signal.nsg
13629         else
13630                 echo "I can't seem to figure out how many signals you have." >&4
13631                 echo "Guessing 50." >&4
13632                 echo 'NSIG 50' > signal.nsg
13633         fi
13634         : Now look at all the signal names, one at a time.
13635         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
13636                 $cat > signal.c <<EOCP
13637 #include <sys/types.h>
13638 #include <signal.h>
13639 #include <stdio.h>
13640 int main() {
13641 printf("$xx %d\n", SIG${xx});
13642 return 0;
13643 }
13644 EOCP
13645                 set signal
13646                 if eval $compile; then
13647                         echo "SIG${xx} found."
13648                         ./signal$_exe  >> signal.ls1
13649                 else
13650                         echo "SIG${xx} NOT found."
13651                 fi
13652         done
13653         if $test -s signal.ls1; then
13654                 $cat signal.nsg signal.ls1 |
13655                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
13656         fi
13657
13658 fi
13659 if $test -s signal.lst; then
13660         :
13661 else
13662         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
13663         echo 'kill -l' >signal
13664         set X `csh -f <signal`
13665         $rm -f signal
13666         shift
13667         case $# in
13668         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
13669         esac
13670         echo $@ | $tr ' ' $trnl | \
13671             $awk '{ printf "%s %d\n", $1, ++s; }
13672                   END { printf "NSIG %d\n", ++s }' >signal.lst
13673 fi
13674 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
13675 EOS
13676 chmod a+x signal_cmd
13677 $eunicefix signal_cmd
13678
13679 : generate list of signal names
13680 echo " "
13681 case "$sig_name_init" in
13682 '') doinit=yes ;;
13683 *)  case "$sig_num_init" in
13684     ''|*,*) doinit=yes ;;
13685     esac ;;
13686 esac
13687 case "$doinit" in
13688 yes)
13689         echo "Generating a list of signal names and numbers..." >&4
13690         . ./signal_cmd
13691         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
13692         sig_name=`$awk 'BEGIN { printf "ZERO " }
13693                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
13694         sig_num=`$awk  'BEGIN { printf "0 " }
13695                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
13696         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
13697                              !/^NSIG/   { printf "\"%s\", ", $1 }
13698                              END        { printf "0\n" }' signal.lst`
13699         sig_num_init=`$awk  'BEGIN      { printf "0, " }
13700                              !/^NSIG/   { printf "%d, ", $2}
13701                              END        { printf "0\n"}' signal.lst`
13702         ;;
13703 esac
13704 echo "The following $sig_count signals are available:"
13705 echo " "
13706 echo $sig_name | $awk \
13707 'BEGIN { linelen = 0 }
13708 {
13709         for (i = 1; i <= NF; i++) {
13710                 name = "SIG" $i " "
13711                 linelen = linelen + length(name)
13712                 if (linelen > 70) {
13713                         printf "\n"
13714                         linelen = length(name)
13715                 }
13716                 printf "%s", name
13717         }
13718         printf "\n"
13719 }'
13720 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
13721
13722 : check for socklen_t
13723 echo " "
13724 echo "Checking to see if you have socklen_t..." >&4
13725 $cat >try.c <<EOCP
13726 #include <sys/types.h>
13727 #$d_socket HAS_SOCKET
13728 #ifdef HAS_SOCKET
13729 #include <sys/socket.h>
13730 #endif
13731 int main() { socklen_t x = 16; }
13732 EOCP
13733 set try
13734 if eval $compile; then
13735         val="$define"
13736         echo "You have socklen_t."
13737 else
13738         val="$undef"
13739         echo "You do not have socklen_t."
13740         case "$sizetype" in
13741         size_t) echo "(You do have size_t, that might work.)" ;;
13742         esac
13743 fi
13744 $rm -f try try.*
13745 set d_socklen_t
13746 eval $setvar
13747
13748 : check for type of the size argument to socket calls
13749 case "$d_socket" in
13750 "$define")
13751         $cat <<EOM
13752
13753 Checking to see what type is the last argument of accept().
13754 EOM
13755         hdrs="$define sys/types.h $d_socket sys/socket.h" 
13756         yyy=''
13757         case "$d_socklen_t" in
13758         "$define") yyy="$yyy socklen_t"
13759         esac
13760         yyy="$yyy $sizetype int long"
13761         for xxx in $yyy; do
13762                 case "$socksizetype" in
13763                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
13764                         if ./protochk "$try" $hdrs; then
13765                                 echo "Your system accepts '$xxx *' for the last argument of accept()."
13766                                 socksizetype="$xxx"
13767                         fi
13768                         ;;
13769                 esac
13770         done
13771 : In case none of those worked, prompt the user.
13772         case "$socksizetype" in
13773         '')     rp='What is the type for socket address structure sizes?'
13774                 dflt='int'
13775                 . ./myread
13776                 socksizetype=$ans
13777                 ;;
13778         esac
13779         ;;
13780 *)      : no sockets, so pick relatively harmless defaults
13781         socksizetype='char *'
13782         ;;
13783 esac
13784
13785 : see what type is used for signed size_t
13786 set ssize_t ssizetype int stdio.h sys/types.h
13787 eval $typedef
13788 dflt="$ssizetype"
13789 $cat > ssize.c <<EOM
13790 #include <stdio.h>
13791 #include <sys/types.h>
13792 #define Size_t $sizetype
13793 #define SSize_t $dflt
13794 int main()
13795 {
13796         if (sizeof(Size_t) == sizeof(SSize_t))
13797                 printf("$dflt\n");
13798         else if (sizeof(Size_t) == sizeof(int))
13799                 printf("int\n");
13800         else 
13801                 printf("long\n");
13802         exit(0);
13803 }
13804 EOM
13805 echo " "
13806 set ssize
13807 if eval $compile_ok && ./ssize > /dev/null; then
13808         ssizetype=`./ssize`
13809         echo "I'll be using $ssizetype for functions returning a byte count." >&4
13810 else
13811         $cat >&4 <<EOM
13812 Help! I can't compile and run the ssize_t test program: please enlighten me!
13813 (This is probably a misconfiguration in your system or libraries, and
13814 you really ought to fix it.  Still, I'll try anyway.)
13815
13816 I need a type that is the same size as $sizetype, but is guaranteed to
13817 be signed.  Common values are ssize_t, int and long.
13818
13819 EOM
13820         rp="What signed type is the same size as $sizetype?"
13821         . ./myread
13822         ssizetype="$ans"
13823 fi
13824 $rm -f ssize ssize.*
13825
13826 : see what type of char stdio uses.
13827 echo " "
13828 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
13829         echo "Your stdio uses unsigned chars." >&4
13830         stdchar="unsigned char"
13831 else
13832         echo "Your stdio uses signed chars." >&4
13833         stdchar="char"
13834 fi
13835
13836 : see if time exists
13837 echo " "
13838 if test "X$d_time" = X -o X"$timetype" = X; then
13839     if set time val -f d_time; eval $csym; $val; then
13840                 echo 'time() found.' >&4
13841                 val="$define"
13842                 rp="What is the type returned by time() on this system?"
13843                 set time_t timetype long stdio.h sys/types.h
13844                 eval $typedef_ask
13845     else
13846                 echo 'time() not found, hope that will do.' >&4
13847                 val="$undef"
13848                 timetype='int';
13849     fi
13850     set d_time
13851     eval $setvar
13852 fi
13853
13854 : see what type uids are declared as in the kernel
13855 echo " "
13856 echo "Looking for the type for user ids returned by getuid()."
13857 set uid_t uidtype xxx stdio.h sys/types.h
13858 eval $typedef
13859 case "$uidtype" in
13860 xxx)
13861         xxx=`./findhdr sys/user.h`
13862         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
13863         case $1 in
13864         unsigned) dflt="$1 $2" ;;
13865         *) dflt="$1" ;;
13866         esac
13867         ;;
13868 *) dflt="$uidtype";;
13869 esac
13870 case "$uidtype" in
13871 uid_t)  echo "uid_t found." ;;
13872 *)      rp="What is the type for user ids returned by getuid()?"
13873         . ./myread
13874         uidtype="$ans"
13875         ;;
13876 esac
13877
13878 echo " "
13879 case "$uidtype" in
13880 *_t) zzz="$uidtype"     ;;
13881 *)   zzz="uid"          ;;
13882 esac
13883 echo "Checking the size of $zzz..." >&4 
13884 cat > try.c <<EOCP
13885 #include <sys/types.h>
13886 #include <stdio.h>
13887 int main() {
13888     printf("%d\n", (int)sizeof($uidtype));
13889     exit(0);
13890 }
13891 EOCP
13892 set try
13893 if eval $compile_ok; then
13894         yyy=`./try`
13895         case "$yyy" in
13896         '')     uidsize=4
13897                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
13898                 ;;
13899         *)      uidsize=$yyy
13900                 echo "Your $zzz is $uidsize bytes long."
13901                 ;;
13902         esac
13903 else
13904         uidsize=4
13905         echo "(I can't compile the test program--guessing $uidsize.)" >&4
13906 fi
13907
13908 echo " "
13909 case "$uidtype" in
13910 *_t) zzz="$uidtype"     ;;
13911 *)   zzz="uid"          ;;
13912 esac
13913 echo "Checking the sign of $zzz..." >&4
13914 cat > try.c <<EOCP
13915 #include <sys/types.h>
13916 #include <stdio.h>
13917 int main() {
13918         $uidtype foo = -1;
13919         if (foo < 0)
13920                 printf("-1\n");
13921         else
13922                 printf("1\n");
13923 }
13924 EOCP
13925 set try
13926 if eval $compile; then
13927         yyy=`./try`
13928         case "$yyy" in
13929         '')     uidsign=1
13930                 echo "(I can't execute the test program--guessing unsigned.)" >&4
13931                 ;;
13932         *)      uidsign=$yyy
13933                 case "$uidsign" in
13934                  1) echo "Your $zzz is unsigned." ;;
13935                 -1) echo "Your $zzz is signed."   ;;
13936                 esac
13937                 ;;
13938         esac
13939 else
13940         uidsign=1
13941         echo "(I can't compile the test program--guessing unsigned.)" >&4
13942 fi
13943
13944
13945
13946 echo " "
13947 $echo "Checking the format string to be used for uids..." >&4
13948
13949 case "$uidsign" in
13950 -1)     if $test X"$uidsize" = X"$ivsize"; then
13951                 uidformat="$ivdformat"
13952         else
13953                 if $test X"$uidsize" = X"$longsize"; then
13954                         uidformat='"ld"'
13955                 else
13956                         if $test X"$uidsize" = X"$intsize"; then
13957                                 uidformat='"d"'
13958                         else
13959                                 if $test X"$uidsize" = X"$shortsize"; then
13960                                         uidformat='"hd"'
13961                                 fi
13962                         fi
13963                 fi
13964         fi
13965         ;;
13966 *)      if $test X"$uidsize" = X"$uvsize"; then
13967                 uidformat="$uvuformat"
13968         else
13969                 if $test X"$uidsize" = X"$longsize"; then
13970                         uidformat='"lu"'
13971                 else
13972                         if $test X"$uidsize" = X"$intsize"; then
13973                                 uidformat='"u"'
13974                         else
13975                                 if $test X"$uidsize" = X"$shortsize"; then
13976                                         uidformat='"hu"'
13977                                 fi
13978                         fi
13979                 fi
13980         fi
13981         ;;
13982 esac
13983
13984 : see if dbm.h is available
13985 : see if dbmclose exists
13986 set dbmclose d_dbmclose
13987 eval $inlibc
13988
13989 case "$d_dbmclose" in
13990 $define)
13991         set dbm.h i_dbm
13992         eval $inhdr
13993         case "$i_dbm" in
13994         $define)
13995                 val="$undef"
13996                 set i_rpcsvcdbm
13997                 eval $setvar
13998                 ;;
13999         *)      set rpcsvc/dbm.h i_rpcsvcdbm
14000                 eval $inhdr
14001                 ;;
14002         esac
14003         ;;
14004 *)      echo "We won't be including <dbm.h>"
14005         val="$undef"
14006         set i_dbm
14007         eval $setvar
14008         val="$undef"
14009         set i_rpcsvcdbm
14010         eval $setvar
14011         ;;
14012 esac
14013
14014 : see if this is a sys/file.h system
14015 val=''
14016 set sys/file.h val
14017 eval $inhdr
14018
14019 : do we need to include sys/file.h ?
14020 case "$val" in
14021 "$define")
14022         echo " "
14023         if $h_sysfile; then
14024                 val="$define"
14025                 echo "We'll be including <sys/file.h>." >&4
14026         else
14027                 val="$undef"
14028                 echo "We won't be including <sys/file.h>." >&4
14029         fi
14030         ;;
14031 *)
14032         h_sysfile=false
14033         ;;
14034 esac
14035 set i_sysfile
14036 eval $setvar
14037
14038 : see if fcntl.h is there
14039 val=''
14040 set fcntl.h val
14041 eval $inhdr
14042
14043 : see if we can include fcntl.h
14044 case "$val" in
14045 "$define")
14046         echo " "
14047         if $h_fcntl; then
14048                 val="$define"
14049                 echo "We'll be including <fcntl.h>." >&4
14050         else
14051                 val="$undef"
14052                 if $h_sysfile; then
14053         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
14054                 else
14055                         echo "We won't be including <fcntl.h>." >&4
14056                 fi
14057         fi
14058         ;;
14059 *)
14060         h_fcntl=false
14061         val="$undef"
14062         ;;
14063 esac
14064 set i_fcntl
14065 eval $setvar
14066
14067 : see if this is a iconv.h system
14068 set iconv.h i_iconv
14069 eval $inhdr
14070
14071 : see if this is a ieeefp.h system
14072 set ieeefp.h i_ieeefp
14073 eval $inhdr
14074
14075 : see if locale.h is available
14076 set locale.h i_locale
14077 eval $inhdr
14078
14079 : see if mach cthreads are available
14080 if test "X$usethreads" = "X$define"; then
14081         set mach/cthreads.h i_machcthr
14082         eval $inhdr
14083 else
14084         i_machcthr="$undef"
14085 fi
14086
14087
14088
14089 : see if this is a math.h system
14090 set math.h i_math
14091 eval $inhdr
14092
14093 : see if this is a mntent.h system
14094 set mntent.h i_mntent
14095 eval $inhdr
14096
14097 : see if ndbm.h is available
14098 set ndbm.h t_ndbm
14099 eval $inhdr
14100 case "$t_ndbm" in
14101 $define)
14102         : see if dbm_open exists
14103         set dbm_open d_dbm_open
14104         eval $inlibc
14105         case "$d_dbm_open" in
14106         $undef)
14107                 t_ndbm="$undef"
14108                 echo "We won't be including <ndbm.h>"
14109                 ;;
14110         esac
14111         ;;
14112 esac
14113 val="$t_ndbm"
14114 set i_ndbm
14115 eval $setvar
14116
14117 : see if net/errno.h is available
14118 val=''
14119 set net/errno.h val
14120 eval $inhdr
14121
14122 : Unfortunately, it causes problems on some systems.  Arrgh.
14123 case "$val" in
14124 $define)
14125         cat > try.c <<'EOM'
14126 #include <stdio.h>
14127 #include <errno.h>
14128 #include <net/errno.h>
14129 int func()
14130 {
14131         return ENOTSOCK;
14132 }
14133 EOM
14134         if $cc $ccflags -c try.c >/dev/null 2>&1; then
14135                 echo "We'll be including <net/errno.h>." >&4
14136         else
14137                 echo "We won't be including <net/errno.h>." >&4
14138                 val="$undef"
14139         fi
14140         $rm -f try.* try
14141         ;;
14142 esac
14143 set i_neterrno
14144 eval $setvar
14145
14146 : see if netinet/tcp.h is available
14147 set netinet/tcp.h i_netinettcp
14148 eval $inhdr
14149
14150 : see if this is a poll.h system
14151 set poll.h i_poll
14152 eval $inhdr
14153
14154 echo " "
14155 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
14156 $cat <<'EOSH' > Cppsym.know
14157 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
14158 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
14159 alliant alpha am29000 AM29000 amiga AMIGAOS AMIX
14160 ansi ANSI_C_SOURCE apollo ardent atarist att386 att3b BeOS
14161 BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
14162 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
14163 bull c cadmus clipper CMU COFF COMPILER_VERSION
14164 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
14165 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
14166 Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
14167 FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
14168 GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
14169 H3050R H3050RX hbullx20 hcx host_mips
14170 hp200 hp300 hp700 HP700 hp800 hp9000
14171 hp9000s200 hp9000s300 hp9000s400 hp9000s500
14172 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
14173 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
14174 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
14175 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
14176 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
14177 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
14178 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
14179 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
14180 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
14181 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
14182 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
14183 MATH_HAS_NO_SIDE_EFFECTS
14184 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
14185 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
14186 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
14187 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
14188 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
14189 NetBSD news1500 news1700 news1800 news1900 news3700
14190 news700 news800 news900 NeXT NLS ns16000 ns32000
14191 ns32016 ns32332 ns32k nsc32000
14192 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
14193 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
14194 pc532 pdp11 PGC PIC plexus PORTAR posix
14195 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
14196 POSIX_C_SOURCE POSIX_SOURCE POWER
14197 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
14198 riscix riscos RT scs SCO sequent sgi SGI_SOURCE sinix
14199 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
14200 sony sony_news sonyrisc sparc sparclite spectrum
14201 stardent stdc STDC_EXT stratos sun sun3 sun386
14202 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
14203 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
14204 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
14205 sysV68 sysV88 Tek4132 Tek4300 titan
14206 tower tower32 tower32_200 tower32_600 tower32_700
14207 tower32_800 tower32_850 tss
14208 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
14209 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
14210 unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
14211 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
14212 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
14213 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
14214 z8000
14215 EOSH
14216 # Maybe put other stuff here too.
14217 cat <<EOSH >>Cppsym.know
14218 $osname
14219 EOSH
14220 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
14221 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
14222 $cat Cppsym.a Cppsym.b | $tr ' ' $trnl | sort | uniq > Cppsym.know
14223 $rm -f Cppsym.a Cppsym.b
14224 cat <<EOSH > Cppsym
14225 $startsh
14226 if $test \$# -gt 0; then
14227     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
14228     if $test -s Cppsym.got; then
14229         $rm -f Cppsym.got
14230         exit 0
14231     fi
14232     $rm -f Cppsym.got
14233     exit 1
14234 else
14235     $tr " " "$trnl" | ./Cppsym.try
14236     exit 0
14237 fi
14238 EOSH
14239 chmod +x Cppsym
14240 $eunicefix Cppsym
14241 cat <<EOSH > Cppsym.try
14242 $startsh
14243 cat <<'EOCP' > try.c
14244 #include <stdio.h>
14245 int main() {
14246 EOCP
14247 $awk \\
14248 EOSH
14249 cat <<'EOSH' >> Cppsym.try
14250 'length($1) > 0 {
14251     printf "#ifdef %s\n#if %s+0\nprintf(\"%s=%%ld\\n\", %s);\n#else\nprintf(\"%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
14252     printf "#ifdef _%s\n#if _%s+0\nprintf(\"_%s=%%ld\\n\", _%s);\n#else\nprintf(\"_%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
14253     printf "#ifdef __%s\n#if __%s+0\nprintf(\"__%s=%%ld\\n\", __%s);\n#else\nprintf(\"__%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
14254     printf "#ifdef __%s__\n#if __%s__+0\nprintf(\"__%s__=%%ld\\n\", __%s__);\n#else\nprintf(\"__%s__\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
14255 }'       >> try.c
14256 echo '}' >> try.c
14257 EOSH
14258 cat <<EOSH >> Cppsym.try
14259 ccflags="$ccflags"
14260 case "$osname-$gccversion" in
14261 irix-) ccflags="\$ccflags -woff 1178" ;;
14262 esac
14263 $cc $optimize \$ccflags $ldflags -o try try.c $libs && ./try$exe_ext
14264 EOSH
14265 chmod +x Cppsym.try
14266 $eunicefix Cppsym.try
14267 ./Cppsym < Cppsym.know > Cppsym.true
14268 : now check the C compiler for additional symbols
14269 postprocess_cc_v=''
14270 case "$osname" in
14271 aix) postprocess_cc_v="|$tr , ' '" ;;
14272 esac
14273 $cat >ccsym <<EOS
14274 $startsh
14275 $cat >tmp.c <<EOF
14276 extern int foo;
14277 EOF
14278 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
14279 do
14280         case "\$i" in
14281         -D*) echo "\$i" | $sed 's/^-D//';;
14282         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
14283         esac
14284 done
14285 $rm -f try.c
14286 EOS
14287 postprocess_cc_v=''
14288 chmod +x ccsym
14289 $eunicefix ccsym
14290 ./ccsym > ccsym1.raw
14291 if $test -s ccsym1.raw; then
14292        $sort ccsym1.raw | $uniq >ccsym.raw
14293 else
14294        mv ccsym1.raw ccsym.raw
14295 fi
14296
14297 $awk '/\=/ { print $0; next }
14298         { print $0"=1" }' ccsym.raw >ccsym.list
14299 $awk '/\=/ { print $0; next }
14300         { print $0"=1" }' Cppsym.true >ccsym.true
14301 $comm -13 ccsym.true ccsym.list >ccsym.own
14302 $comm -12 ccsym.true ccsym.list >ccsym.com
14303 $comm -23 ccsym.true ccsym.list >ccsym.cpp
14304 also=''
14305 if $test -z ccsym.raw; then
14306         echo "Your C compiler doesn't seem to define any symbols!" >&4
14307         echo " "
14308         echo "However, your C preprocessor defines the following symbols:"
14309         $cat Cppsym.true
14310         ccsymbols=''
14311         cppsymbols=`$cat Cppsym.true`
14312         cppsymbols=`echo $cppsymbols`
14313         cppccsymbols="$cppsymbols"
14314 else
14315         if $test -s ccsym.com; then
14316                 echo "Your C compiler and pre-processor define these symbols:"
14317                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
14318                 also='also '
14319                 symbols='ones'
14320                 cppccsymbols=`$cat ccsym.com`
14321                 cppccsymbols=`echo $cppccsymbols`
14322                 $test "$silent" || sleep 1
14323         fi
14324         if $test -s ccsym.cpp; then
14325                 $test "$also" && echo " "
14326                 echo "Your C pre-processor ${also}defines the following symbols:"
14327                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
14328                 also='further '
14329                 cppsymbols=`$cat ccsym.cpp`
14330                 cppsymbols=`echo $cppsymbols`
14331                 $test "$silent" || sleep 1
14332         fi
14333         if $test -s ccsym.own; then
14334                 $test "$also" && echo " "
14335                 echo "Your C compiler ${also}defines the following cpp symbols:"
14336                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
14337                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
14338                 ccsymbols=`$cat ccsym.own`
14339                 ccsymbols=`echo $ccsymbols`
14340                 $test "$silent" || sleep 1
14341         fi
14342 fi
14343 $rm -f ccsym*
14344
14345 : see if this is a termio system
14346 val="$undef"
14347 val2="$undef"
14348 val3="$undef"
14349 if $test `./findhdr termios.h`; then
14350         set tcsetattr i_termios
14351         eval $inlibc
14352         val3="$i_termios"
14353 fi
14354 echo " "
14355 case "$val3" in
14356 "$define") echo "You have POSIX termios.h... good!" >&4;;
14357 *) if ./Cppsym pyr; then
14358                 case "`/bin/universe`" in
14359                 ucb) if $test `./findhdr sgtty.h`; then
14360                                 val2="$define"
14361                                 echo "<sgtty.h> found." >&4
14362                         else
14363                                 echo "System is pyramid with BSD universe."
14364                                 echo "<sgtty.h> not found--you could have problems." >&4
14365                         fi;;
14366                 *) if $test `./findhdr termio.h`; then
14367                                 val="$define"
14368                                 echo "<termio.h> found." >&4
14369                         else
14370                                 echo "System is pyramid with USG universe."
14371                                 echo "<termio.h> not found--you could have problems." >&4
14372                         fi;;
14373                 esac
14374         elif ./usg; then
14375                 if $test `./findhdr termio.h`; then
14376                         echo "<termio.h> found." >&4
14377                         val="$define"
14378                 elif $test `./findhdr sgtty.h`; then
14379                         echo "<sgtty.h> found." >&4
14380                         val2="$define"
14381                 else
14382 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
14383                 fi
14384         else
14385                 if $test `./findhdr sgtty.h`; then
14386                         echo "<sgtty.h> found." >&4
14387                         val2="$define"
14388                 elif $test `./findhdr termio.h`; then
14389                         echo "<termio.h> found." >&4
14390                         val="$define"
14391                 else
14392 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
14393                 fi
14394         fi;;
14395 esac
14396 set i_termio; eval $setvar
14397 val=$val2; set i_sgtty; eval $setvar
14398 val=$val3; set i_termios; eval $setvar
14399
14400 : see if this is a shadow.h system
14401 set shadow.h i_shadow
14402 eval $inhdr
14403
14404 : see if this is a socks.h system
14405 set socks.h i_socks
14406 eval $inhdr
14407
14408 : see if stdarg is available
14409 echo " "
14410 if $test `./findhdr stdarg.h`; then
14411         echo "<stdarg.h> found." >&4
14412         valstd="$define"
14413 else
14414         echo "<stdarg.h> NOT found." >&4
14415         valstd="$undef"
14416 fi
14417
14418 : see if varags is available
14419 echo " "
14420 if $test `./findhdr varargs.h`; then
14421         echo "<varargs.h> found." >&4
14422 else
14423         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14424 fi
14425
14426 : set up the varargs testing programs
14427 $cat > varargs.c <<EOP
14428 #ifdef I_STDARG
14429 #include <stdarg.h>
14430 #endif
14431 #ifdef I_VARARGS
14432 #include <varargs.h>
14433 #endif
14434
14435 #ifdef I_STDARG
14436 int f(char *p, ...)
14437 #else
14438 int f(va_alist)
14439 va_dcl
14440 #endif
14441 {
14442         va_list ap;
14443 #ifndef I_STDARG
14444         char *p;
14445 #endif
14446 #ifdef I_STDARG
14447         va_start(ap,p);
14448 #else
14449         va_start(ap);
14450         p = va_arg(ap, char *);
14451 #endif
14452         va_end(ap);
14453 }
14454 EOP
14455 $cat > varargs <<EOP
14456 $startsh
14457 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14458         echo "true"
14459 else
14460         echo "false"
14461 fi
14462 $rm -f varargs$_o
14463 EOP
14464 chmod +x varargs
14465
14466 : now check which varargs header should be included
14467 echo " "
14468 i_varhdr=''
14469 case "$valstd" in
14470 "$define")
14471         if `./varargs I_STDARG`; then
14472                 val='stdarg.h'
14473         elif `./varargs I_VARARGS`; then
14474                 val='varargs.h'
14475         fi
14476         ;;
14477 *)
14478         if `./varargs I_VARARGS`; then
14479                 val='varargs.h'
14480         fi
14481         ;;
14482 esac
14483 case "$val" in
14484 '')
14485 echo "I could not find the definition for va_dcl... You have problems..." >&4
14486         val="$undef"; set i_stdarg; eval $setvar
14487         val="$undef"; set i_varargs; eval $setvar
14488         ;;
14489 *) 
14490         set i_varhdr
14491         eval $setvar
14492         case "$i_varhdr" in
14493         stdarg.h)
14494                 val="$define"; set i_stdarg; eval $setvar
14495                 val="$undef"; set i_varargs; eval $setvar
14496                 ;;
14497         varargs.h)
14498                 val="$undef"; set i_stdarg; eval $setvar
14499                 val="$define"; set i_varargs; eval $setvar
14500                 ;;
14501         esac
14502         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14503 esac
14504 $rm -f varargs*
14505
14506 : see if stddef is available
14507 set stddef.h i_stddef
14508 eval $inhdr
14509
14510 : see if this is a sunmath.h system
14511 set sunmath.h i_sunmath
14512 eval $inhdr
14513
14514 : see if sys/access.h is available
14515 set sys/access.h i_sysaccess
14516 eval $inhdr
14517
14518 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
14519 set sys/filio.h i_sysfilio
14520 eval $inhdr
14521 echo " "
14522 if $test `./findhdr sys/ioctl.h`; then
14523         val="$define"
14524         echo '<sys/ioctl.h> found.' >&4
14525 else
14526         val="$undef"
14527         if $test $i_sysfilio = "$define"; then
14528             echo '<sys/ioctl.h> NOT found.' >&4
14529         else
14530                 $test $i_sgtty = "$define" && xxx="sgtty.h"
14531                 $test $i_termio = "$define" && xxx="termio.h"
14532                 $test $i_termios = "$define" && xxx="termios.h"
14533 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
14534         fi
14535 fi
14536 set i_sysioctl
14537 eval $setvar
14538
14539
14540 : see if this is a syslog.h system
14541 set syslog.h i_syslog
14542 eval $inhdr
14543
14544
14545 : see if this is a sys/mode.h system
14546 set sys/mode.h i_sysmode
14547 eval $inhdr
14548
14549 : see if sys/resource.h has to be included
14550 set sys/resource.h i_sysresrc
14551 eval $inhdr
14552
14553 : see if sys/security.h is available
14554 set sys/security.h i_syssecrt
14555 eval $inhdr
14556
14557 : see if this is a sys/statvfs.h system
14558 set sys/statvfs.h i_sysstatvfs
14559 eval $inhdr
14560
14561 : see if this is a sys/uio.h system
14562 set sys/uio.h i_sysuio
14563 eval $inhdr
14564
14565 : see if this is a sys/un.h system
14566 set sys/un.h i_sysun
14567 eval $inhdr
14568
14569
14570 : see if this is a sys/utsname.h system
14571 set sys/utsname.h i_sysutsname
14572 eval $inhdr
14573
14574 : see if this is a syswait system
14575 set sys/wait.h i_syswait
14576 eval $inhdr
14577
14578 : see if this is a ustat.h system
14579 set ustat.h i_ustat
14580 eval $inhdr
14581
14582 : see if this is an utime system
14583 set utime.h i_utime
14584 eval $inhdr
14585
14586 : see if this is a values.h system
14587 set values.h i_values
14588 eval $inhdr
14589
14590 : see if this is a vfork system
14591 case "$d_vfork" in
14592 "$define")
14593         set vfork.h i_vfork
14594         eval $inhdr
14595         ;;
14596 *)
14597         i_vfork="$undef"
14598         ;;
14599 esac
14600
14601 : see if gdbm.h is available
14602 set gdbm.h t_gdbm
14603 eval $inhdr
14604 case "$t_gdbm" in
14605 $define)
14606         : see if gdbm_open exists
14607         set gdbm_open d_gdbm_open
14608         eval $inlibc
14609         case "$d_gdbm_open" in
14610         $undef)
14611                 t_gdbm="$undef"
14612                 echo "We won't be including <gdbm.h>"
14613                 ;;
14614         esac
14615         ;;
14616 esac
14617 val="$t_gdbm"
14618 set i_gdbm
14619 eval $setvar
14620
14621 echo " "
14622 echo "Looking for extensions..." >&4
14623 : If we are using the old config.sh, known_extensions may contain
14624 : old or inaccurate or duplicate values.
14625 known_extensions=''
14626 nonxs_extensions=''
14627 : We do not use find because it might not be available.
14628 : We do not just use MANIFEST because the user may have dropped
14629 : some additional extensions into the source tree and expect them
14630 : to be built.
14631
14632 : Function to recursively find available extensions, ignoring DynaLoader
14633 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
14634 find_extensions='
14635     for xxx in *; do
14636        case "$xxx" in
14637            DynaLoader|dynaload) ;;
14638            *)
14639            if $test -f $xxx/$xxx.xs; then
14640                known_extensions="$known_extensions $1$xxx";
14641            elif $test -f $xxx/Makefile.PL; then
14642                nonxs_extensions="$nonxs_extensions $1$xxx";
14643            else
14644                if $test -d $xxx -a $# -lt 10; then
14645                    set $1$xxx/ $*;
14646                    cd $xxx;
14647                    eval $find_extensions;
14648                    cd ..;
14649                    shift;
14650                fi;
14651            fi
14652            ;;
14653        esac;
14654     done'
14655 tdir=`pwd`
14656 cd $rsrc/ext
14657 set X
14658 shift
14659 eval $find_extensions
14660 set X $nonxs_extensions
14661 shift
14662 nonxs_extensions="$*"
14663 set X $known_extensions
14664 shift
14665 known_extensions="$*"
14666 cd $tdir
14667
14668 : Now see which are supported on this system.
14669 avail_ext=''
14670 for xxx in $known_extensions ; do
14671         case "$xxx" in
14672         DB_File|db_file)
14673                 case "$i_db" in
14674                 $define) avail_ext="$avail_ext $xxx" ;;
14675                 esac
14676                 ;;
14677         GDBM_File|gdbm_fil)
14678                 case "$i_gdbm" in 
14679                 $define) avail_ext="$avail_ext $xxx" ;;
14680                 esac
14681                 ;;
14682         NDBM_File|ndbm_fil)
14683                 case "$i_ndbm" in
14684                 $define)
14685                     case "$osname-$use64bitint" in
14686                     hpux-define)
14687                         case "$libs" in
14688                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
14689                         esac
14690                         ;;
14691                     *) avail_ext="$avail_ext $xxx" ;;
14692                     esac
14693                     ;;
14694                 esac
14695                 ;;
14696         ODBM_File|odbm_fil) 
14697                 case "${i_dbm}${i_rpcsvcdbm}" in
14698                 *"${define}"*)
14699                     case "$osname-$use64bitint" in
14700                     hpux-define)
14701                         case "$libs" in
14702                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
14703                         esac
14704                         ;;
14705                     *) avail_ext="$avail_ext $xxx" ;;
14706                     esac
14707                     ;;
14708                 esac
14709                 ;;
14710         POSIX|posix)
14711                 case "$useposix" in
14712                 true|define|y) avail_ext="$avail_ext $xxx" ;;
14713                 esac
14714                 ;;
14715         Opcode|opcode)
14716                 case "$useopcode" in
14717                 true|define|y) avail_ext="$avail_ext $xxx" ;;
14718                 esac
14719                 ;;
14720         Socket|socket)
14721                 case "$d_socket" in 
14722                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
14723                 esac
14724                 ;;
14725         Thread|thread)
14726                 case "$usethreads" in 
14727                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
14728                 esac
14729                 ;;
14730         IPC/SysV|ipc/sysv)
14731                 : XXX Do we need a useipcsysv variable here
14732                 case "${d_msg}${d_sem}${d_shm}" in 
14733                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
14734                 esac
14735                 ;;
14736         *)      avail_ext="$avail_ext $xxx"
14737                 ;;
14738         esac
14739 done
14740
14741 set X $avail_ext
14742 shift
14743 avail_ext="$*"
14744
14745 : Now see which nonxs extensions are supported on this system.
14746 : For now assume all are.
14747 nonxs_ext=''
14748 for xxx in $nonxs_extensions ; do
14749         case "$xxx" in
14750         *)      nonxs_ext="$nonxs_ext $xxx"
14751                 ;;
14752         esac
14753 done
14754
14755 set X $nonxs_ext
14756 shift
14757 nonxs_ext="$*"
14758
14759 case $usedl in
14760 $define)
14761         $cat <<EOM
14762 A number of extensions are supplied with $package.  You may choose to
14763 compile these extensions for dynamic loading (the default), compile
14764 them into the $package executable (static loading), or not include
14765 them at all.  Answer "none" to include no extensions.
14766 Note that DynaLoader is always built and need not be mentioned here.
14767
14768 EOM
14769         case "$dynamic_ext" in
14770         '') dflt="$avail_ext" ;;
14771         *)      dflt="$dynamic_ext"
14772                 # Perhaps we are reusing an old out-of-date config.sh.
14773                 case "$hint" in
14774                 previous)
14775                         if test X"$dynamic_ext" != X"$avail_ext"; then
14776                                 $cat <<EOM
14777 NOTICE:  Your previous config.sh list may be incorrect. 
14778 The extensions now available to you are 
14779         ${avail_ext}
14780 but the default list from your previous config.sh is
14781         ${dynamic_ext} 
14782
14783 EOM
14784                         fi
14785                         ;;
14786                 esac
14787                 ;;
14788         esac
14789         case "$dflt" in
14790         '')     dflt=none;;
14791         esac
14792         rp="What extensions do you wish to load dynamically?"
14793         . ./myread
14794         case "$ans" in
14795         none) dynamic_ext=' ' ;;
14796         *) dynamic_ext="$ans" ;;
14797         esac
14798
14799         case "$static_ext" in
14800         '')
14801                 : Exclude those already listed in dynamic linking
14802                 dflt=''
14803                 for xxx in $avail_ext; do
14804                         case " $dynamic_ext " in
14805                         *" $xxx "*) ;;
14806                         *) dflt="$dflt $xxx" ;;
14807                         esac
14808                 done
14809                 set X $dflt
14810                 shift
14811                 dflt="$*"
14812                 ;;
14813         *)  dflt="$static_ext" 
14814                 ;;
14815         esac
14816
14817         case "$dflt" in
14818         '')     dflt=none;;
14819         esac
14820         rp="What extensions do you wish to load statically?"
14821         . ./myread
14822         case "$ans" in
14823         none) static_ext=' ' ;;
14824         *) static_ext="$ans" ;;
14825         esac
14826         ;;
14827 *)
14828         $cat <<EOM
14829 A number of extensions are supplied with $package.  Answer "none" 
14830 to include no extensions. 
14831 Note that DynaLoader is always built and need not be mentioned here.
14832
14833 EOM
14834         case "$static_ext" in
14835         '') dflt="$avail_ext" ;;
14836         *)      dflt="$static_ext"
14837                 # Perhaps we are reusing an old out-of-date config.sh.
14838                 case "$hint" in
14839                 previous)
14840                         if test X"$static_ext" != X"$avail_ext"; then
14841                                 $cat <<EOM
14842 NOTICE:  Your previous config.sh list may be incorrect. 
14843 The extensions now available to you are 
14844         ${avail_ext}
14845 but the default list from your previous config.sh is
14846         ${static_ext} 
14847
14848 EOM
14849                         fi
14850                         ;;
14851                 esac
14852                 ;;
14853         esac
14854         : Exclude those that are not xs extensions
14855         case "$dflt" in
14856         '')     dflt=none;;
14857         esac
14858         rp="What extensions do you wish to include?"
14859         . ./myread
14860         case "$ans" in
14861         none) static_ext=' ' ;;
14862         *) static_ext="$ans" ;;
14863         esac
14864         ;;
14865 esac
14866
14867 set X $dynamic_ext $static_ext $nonxs_ext
14868 shift
14869 extensions="$*"
14870
14871 : Remove build directory name from cppstdin so it can be used from
14872 : either the present location or the final installed location.
14873 echo " "
14874 : Get out of the UU directory to get correct path name.
14875 cd ..
14876 case "$cppstdin" in
14877 `pwd`/cppstdin)
14878         echo "Stripping down cppstdin path name"
14879         cppstdin=cppstdin
14880         ;;
14881 esac
14882 cd UU
14883
14884 : end of configuration questions
14885 echo " "
14886 echo "End of configuration questions."
14887 echo " "
14888
14889 : back to where it started
14890 if test -d ../UU; then
14891         cd ..
14892 fi
14893
14894 : configuration may be patched via a 'config.over' file
14895 if $test -f config.over; then
14896         echo " "
14897         dflt=y
14898         rp='I see a config.over file.  Do you wish to load it?'
14899         . UU/myread
14900         case "$ans" in
14901         n*) echo "OK, I'll ignore it.";;
14902         *)      . ./config.over
14903                 echo "Configuration override changes have been loaded."
14904                 ;;
14905         esac
14906 fi
14907
14908 : in case they want portability, strip down executable paths
14909 case "$d_portable" in
14910 "$define")
14911         echo " "
14912         echo "Stripping down executable paths..." >&4
14913         for file in $loclist $trylist; do
14914                 eval temp=\$$file
14915                 eval $file=`basename $temp`
14916         done
14917         ;;
14918 esac
14919
14920 : create config.sh file
14921 echo " "
14922 echo "Creating config.sh..." >&4
14923 $spitshell <<EOT >config.sh
14924 $startsh
14925 #
14926 # This file was produced by running the Configure script. It holds all the
14927 # definitions figured out by Configure. Should you modify one of these values,
14928 # do not forget to propagate your changes by running "Configure -der". You may
14929 # instead choose to run each of the .SH files by yourself, or "Configure -S".
14930 #
14931
14932 # Package name      : $package
14933 # Source directory  : $src
14934 # Configuration time: $cf_time
14935 # Configured by     : $cf_by
14936 # Target system     : $myuname
14937
14938 Author='$Author'
14939 Date='$Date'
14940 Header='$Header'
14941 Id='$Id'
14942 Locker='$Locker'
14943 Log='$Log'
14944 Mcc='$Mcc'
14945 RCSfile='$RCSfile'
14946 Revision='$Revision'
14947 Source='$Source'
14948 State='$State'
14949 _a='$_a'
14950 _exe='$_exe'
14951 _o='$_o'
14952 afs='$afs'
14953 alignbytes='$alignbytes'
14954 ansi2knr='$ansi2knr'
14955 aphostname='$aphostname'
14956 api_revision='$api_revision'
14957 api_subversion='$api_subversion'
14958 api_version='$api_version'
14959 api_versionstring='$api_versionstring'
14960 ar='$ar'
14961 archlib='$archlib'
14962 archlibexp='$archlibexp'
14963 archname64='$archname64'
14964 archname='$archname'
14965 archobjs='$archobjs'
14966 awk='$awk'
14967 baserev='$baserev'
14968 bash='$bash'
14969 bin='$bin'
14970 bincompat5005='$bincompat5005'
14971 binexp='$binexp'
14972 bison='$bison'
14973 byacc='$byacc'
14974 byteorder='$byteorder'
14975 c='$c'
14976 castflags='$castflags'
14977 cat='$cat'
14978 cc='$cc'
14979 cccdlflags='$cccdlflags'
14980 ccdlflags='$ccdlflags'
14981 ccflags='$ccflags'
14982 ccsymbols='$ccsymbols'
14983 cf_by='$cf_by'
14984 cf_email='$cf_email'
14985 cf_time='$cf_time'
14986 charsize='$charsize'
14987 chgrp='$chgrp'
14988 chmod='$chmod'
14989 chown='$chown'
14990 clocktype='$clocktype'
14991 comm='$comm'
14992 compress='$compress'
14993 contains='$contains'
14994 cp='$cp'
14995 cpio='$cpio'
14996 cpp='$cpp'
14997 cpp_stuff='$cpp_stuff'
14998 cppccsymbols='$cppccsymbols'
14999 cppflags='$cppflags'
15000 cpplast='$cpplast'
15001 cppminus='$cppminus'
15002 cpprun='$cpprun'
15003 cppstdin='$cppstdin'
15004 cppsymbols='$cppsymbols'
15005 crosscompile='$crosscompile'
15006 cryptlib='$cryptlib'
15007 csh='$csh'
15008 d_Gconvert='$d_Gconvert'
15009 d_PRIEldbl='$d_PRIEldbl'
15010 d_PRIFldbl='$d_PRIFldbl'
15011 d_PRIGldbl='$d_PRIGldbl'
15012 d_PRIX64='$d_PRIX64'
15013 d_PRId64='$d_PRId64'
15014 d_PRIeldbl='$d_PRIeldbl'
15015 d_PRIfldbl='$d_PRIfldbl'
15016 d_PRIgldbl='$d_PRIgldbl'
15017 d_PRIi64='$d_PRIi64'
15018 d_PRIo64='$d_PRIo64'
15019 d_PRIu64='$d_PRIu64'
15020 d_PRIx64='$d_PRIx64'
15021 d_access='$d_access'
15022 d_accessx='$d_accessx'
15023 d_alarm='$d_alarm'
15024 d_archlib='$d_archlib'
15025 d_atolf='$d_atolf'
15026 d_atoll='$d_atoll'
15027 d_attribut='$d_attribut'
15028 d_bcmp='$d_bcmp'
15029 d_bcopy='$d_bcopy'
15030 d_bincompat5005='$d_bincompat5005'
15031 d_bsd='$d_bsd'
15032 d_bsdgetpgrp='$d_bsdgetpgrp'
15033 d_bsdsetpgrp='$d_bsdsetpgrp'
15034 d_bzero='$d_bzero'
15035 d_casti32='$d_casti32'
15036 d_castneg='$d_castneg'
15037 d_charvspr='$d_charvspr'
15038 d_chown='$d_chown'
15039 d_chroot='$d_chroot'
15040 d_chsize='$d_chsize'
15041 d_closedir='$d_closedir'
15042 d_const='$d_const'
15043 d_crypt='$d_crypt'
15044 d_csh='$d_csh'
15045 d_cuserid='$d_cuserid'
15046 d_dbl_dig='$d_dbl_dig'
15047 d_difftime='$d_difftime'
15048 d_dirnamlen='$d_dirnamlen'
15049 d_dlerror='$d_dlerror'
15050 d_dlopen='$d_dlopen'
15051 d_dlsymun='$d_dlsymun'
15052 d_dosuid='$d_dosuid'
15053 d_drand48proto='$d_drand48proto'
15054 d_dup2='$d_dup2'
15055 d_eaccess='$d_eaccess'
15056 d_endgrent='$d_endgrent'
15057 d_endhent='$d_endhent'
15058 d_endnent='$d_endnent'
15059 d_endpent='$d_endpent'
15060 d_endpwent='$d_endpwent'
15061 d_endsent='$d_endsent'
15062 d_endspent='$d_endspent'
15063 d_eofnblk='$d_eofnblk'
15064 d_eunice='$d_eunice'
15065 d_fchmod='$d_fchmod'
15066 d_fchown='$d_fchown'
15067 d_fcntl='$d_fcntl'
15068 d_fd_macros='$d_fd_macros'
15069 d_fd_set='$d_fd_set'
15070 d_fds_bits='$d_fds_bits'
15071 d_fgetpos='$d_fgetpos'
15072 d_flexfnam='$d_flexfnam'
15073 d_flock='$d_flock'
15074 d_fork='$d_fork'
15075 d_fpathconf='$d_fpathconf'
15076 d_fpos64_t='$d_fpos64_t'
15077 d_fs_data_s='$d_fs_data_s'
15078 d_fseeko='$d_fseeko'
15079 d_fsetpos='$d_fsetpos'
15080 d_fstatfs='$d_fstatfs'
15081 d_fstatvfs='$d_fstatvfs'
15082 d_ftello='$d_ftello'
15083 d_ftime='$d_ftime'
15084 d_getcwd='$d_getcwd'
15085 d_getfsstat='$d_getfsstat'
15086 d_getgrent='$d_getgrent'
15087 d_getgrps='$d_getgrps'
15088 d_gethbyaddr='$d_gethbyaddr'
15089 d_gethbyname='$d_gethbyname'
15090 d_gethent='$d_gethent'
15091 d_gethname='$d_gethname'
15092 d_gethostprotos='$d_gethostprotos'
15093 d_getlogin='$d_getlogin'
15094 d_getmnt='$d_getmnt'
15095 d_getmntent='$d_getmntent'
15096 d_getnbyaddr='$d_getnbyaddr'
15097 d_getnbyname='$d_getnbyname'
15098 d_getnent='$d_getnent'
15099 d_getnetprotos='$d_getnetprotos'
15100 d_getpbyname='$d_getpbyname'
15101 d_getpbynumber='$d_getpbynumber'
15102 d_getpent='$d_getpent'
15103 d_getpgid='$d_getpgid'
15104 d_getpgrp2='$d_getpgrp2'
15105 d_getpgrp='$d_getpgrp'
15106 d_getppid='$d_getppid'
15107 d_getprior='$d_getprior'
15108 d_getprotoprotos='$d_getprotoprotos'
15109 d_getpwent='$d_getpwent'
15110 d_getsbyname='$d_getsbyname'
15111 d_getsbyport='$d_getsbyport'
15112 d_getsent='$d_getsent'
15113 d_getservprotos='$d_getservprotos'
15114 d_getspent='$d_getspent'
15115 d_getspnam='$d_getspnam'
15116 d_gettimeod='$d_gettimeod'
15117 d_gnulibc='$d_gnulibc'
15118 d_grpasswd='$d_grpasswd'
15119 d_hasmntopt='$d_hasmntopt'
15120 d_htonl='$d_htonl'
15121 d_iconv='$d_iconv'
15122 d_index='$d_index'
15123 d_inetaton='$d_inetaton'
15124 d_int64_t='$d_int64_t'
15125 d_isascii='$d_isascii'
15126 d_killpg='$d_killpg'
15127 d_lchown='$d_lchown'
15128 d_ldbl_dig='$d_ldbl_dig'
15129 d_link='$d_link'
15130 d_locconv='$d_locconv'
15131 d_lockf='$d_lockf'
15132 d_longdbl='$d_longdbl'
15133 d_longlong='$d_longlong'
15134 d_lseekproto='$d_lseekproto'
15135 d_lstat='$d_lstat'
15136 d_madvise='$d_madvise'
15137 d_mblen='$d_mblen'
15138 d_mbstowcs='$d_mbstowcs'
15139 d_mbtowc='$d_mbtowc'
15140 d_memchr='$d_memchr'
15141 d_memcmp='$d_memcmp'
15142 d_memcpy='$d_memcpy'
15143 d_memmove='$d_memmove'
15144 d_memset='$d_memset'
15145 d_mkdir='$d_mkdir'
15146 d_mkdtemp='$d_mkdtemp'
15147 d_mkfifo='$d_mkfifo'
15148 d_mkstemp='$d_mkstemp'
15149 d_mkstemps='$d_mkstemps'
15150 d_mktime='$d_mktime'
15151 d_mmap='$d_mmap'
15152 d_mprotect='$d_mprotect'
15153 d_msg='$d_msg'
15154 d_msg_ctrunc='$d_msg_ctrunc'
15155 d_msg_dontroute='$d_msg_dontroute'
15156 d_msg_oob='$d_msg_oob'
15157 d_msg_peek='$d_msg_peek'
15158 d_msg_proxy='$d_msg_proxy'
15159 d_msgctl='$d_msgctl'
15160 d_msgget='$d_msgget'
15161 d_msgrcv='$d_msgrcv'
15162 d_msgsnd='$d_msgsnd'
15163 d_msync='$d_msync'
15164 d_munmap='$d_munmap'
15165 d_mymalloc='$d_mymalloc'
15166 d_nice='$d_nice'
15167 d_nv_preserves_uv='$d_nv_preserves_uv'
15168 d_off64_t='$d_off64_t'
15169 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
15170 d_oldpthreads='$d_oldpthreads'
15171 d_oldsock='$d_oldsock'
15172 d_open3='$d_open3'
15173 d_pathconf='$d_pathconf'
15174 d_pause='$d_pause'
15175 d_phostname='$d_phostname'
15176 d_pipe='$d_pipe'
15177 d_poll='$d_poll'
15178 d_portable='$d_portable'
15179 d_pthread_yield='$d_pthread_yield'
15180 d_pwage='$d_pwage'
15181 d_pwchange='$d_pwchange'
15182 d_pwclass='$d_pwclass'
15183 d_pwcomment='$d_pwcomment'
15184 d_pwexpire='$d_pwexpire'
15185 d_pwgecos='$d_pwgecos'
15186 d_pwpasswd='$d_pwpasswd'
15187 d_pwquota='$d_pwquota'
15188 d_qgcvt='$d_qgcvt'
15189 d_quad='$d_quad'
15190 d_readdir='$d_readdir'
15191 d_readlink='$d_readlink'
15192 d_rename='$d_rename'
15193 d_rewinddir='$d_rewinddir'
15194 d_rmdir='$d_rmdir'
15195 d_safebcpy='$d_safebcpy'
15196 d_safemcpy='$d_safemcpy'
15197 d_sanemcmp='$d_sanemcmp'
15198 d_sched_yield='$d_sched_yield'
15199 d_scm_rights='$d_scm_rights'
15200 d_seekdir='$d_seekdir'
15201 d_select='$d_select'
15202 d_sem='$d_sem'
15203 d_semctl='$d_semctl'
15204 d_semctl_semid_ds='$d_semctl_semid_ds'
15205 d_semctl_semun='$d_semctl_semun'
15206 d_semget='$d_semget'
15207 d_semop='$d_semop'
15208 d_setegid='$d_setegid'
15209 d_seteuid='$d_seteuid'
15210 d_setgrent='$d_setgrent'
15211 d_setgrps='$d_setgrps'
15212 d_sethent='$d_sethent'
15213 d_setlinebuf='$d_setlinebuf'
15214 d_setlocale='$d_setlocale'
15215 d_setnent='$d_setnent'
15216 d_setpent='$d_setpent'
15217 d_setpgid='$d_setpgid'
15218 d_setpgrp2='$d_setpgrp2'
15219 d_setpgrp='$d_setpgrp'
15220 d_setprior='$d_setprior'
15221 d_setpwent='$d_setpwent'
15222 d_setregid='$d_setregid'
15223 d_setresgid='$d_setresgid'
15224 d_setresuid='$d_setresuid'
15225 d_setreuid='$d_setreuid'
15226 d_setrgid='$d_setrgid'
15227 d_setruid='$d_setruid'
15228 d_setsent='$d_setsent'
15229 d_setsid='$d_setsid'
15230 d_setspent='$d_setspent'
15231 d_setvbuf='$d_setvbuf'
15232 d_sfio='$d_sfio'
15233 d_shm='$d_shm'
15234 d_shmat='$d_shmat'
15235 d_shmatprototype='$d_shmatprototype'
15236 d_shmctl='$d_shmctl'
15237 d_shmdt='$d_shmdt'
15238 d_shmget='$d_shmget'
15239 d_sigaction='$d_sigaction'
15240 d_sigsetjmp='$d_sigsetjmp'
15241 d_socket='$d_socket'
15242 d_socklen_t='$d_socklen_t'
15243 d_sockpair='$d_sockpair'
15244 d_sqrtl='$d_sqrtl'
15245 d_statblks='$d_statblks'
15246 d_statfs_f_flags='$d_statfs_f_flags'
15247 d_statfs_s='$d_statfs_s'
15248 d_statvfs='$d_statvfs'
15249 d_stdio_cnt_lval='$d_stdio_cnt_lval'
15250 d_stdio_ptr_lval='$d_stdio_ptr_lval'
15251 d_stdio_stream_array='$d_stdio_stream_array'
15252 d_stdiobase='$d_stdiobase'
15253 d_stdstdio='$d_stdstdio'
15254 d_strchr='$d_strchr'
15255 d_strcoll='$d_strcoll'
15256 d_strctcpy='$d_strctcpy'
15257 d_strerrm='$d_strerrm'
15258 d_strerror='$d_strerror'
15259 d_strtod='$d_strtod'
15260 d_strtol='$d_strtol'
15261 d_strtold='$d_strtold'
15262 d_strtoll='$d_strtoll'
15263 d_strtoul='$d_strtoul'
15264 d_strtoull='$d_strtoull'
15265 d_strtouq='$d_strtouq'
15266 d_strxfrm='$d_strxfrm'
15267 d_suidsafe='$d_suidsafe'
15268 d_symlink='$d_symlink'
15269 d_syscall='$d_syscall'
15270 d_sysconf='$d_sysconf'
15271 d_sysernlst='$d_sysernlst'
15272 d_syserrlst='$d_syserrlst'
15273 d_system='$d_system'
15274 d_tcgetpgrp='$d_tcgetpgrp'
15275 d_tcsetpgrp='$d_tcsetpgrp'
15276 d_telldir='$d_telldir'
15277 d_telldirproto='$d_telldirproto'
15278 d_time='$d_time'
15279 d_times='$d_times'
15280 d_truncate='$d_truncate'
15281 d_tzname='$d_tzname'
15282 d_umask='$d_umask'
15283 d_uname='$d_uname'
15284 d_union_semun='$d_union_semun'
15285 d_ustat='$d_ustat'
15286 d_vendorarch='$d_vendorarch'
15287 d_vendorbin='$d_vendorbin'
15288 d_vendorlib='$d_vendorlib'
15289 d_vfork='$d_vfork'
15290 d_void_closedir='$d_void_closedir'
15291 d_voidsig='$d_voidsig'
15292 d_voidtty='$d_voidtty'
15293 d_volatile='$d_volatile'
15294 d_vprintf='$d_vprintf'
15295 d_wait4='$d_wait4'
15296 d_waitpid='$d_waitpid'
15297 d_wcstombs='$d_wcstombs'
15298 d_wctomb='$d_wctomb'
15299 d_xenix='$d_xenix'
15300 date='$date'
15301 db_hashtype='$db_hashtype'
15302 db_prefixtype='$db_prefixtype'
15303 defvoidused='$defvoidused'
15304 direntrytype='$direntrytype'
15305 dlext='$dlext'
15306 dlsrc='$dlsrc'
15307 doublesize='$doublesize'
15308 drand01='$drand01'
15309 dynamic_ext='$dynamic_ext'
15310 eagain='$eagain'
15311 ebcdic='$ebcdic'
15312 echo='$echo'
15313 egrep='$egrep'
15314 emacs='$emacs'
15315 eunicefix='$eunicefix'
15316 exe_ext='$exe_ext'
15317 expr='$expr'
15318 extensions='$extensions'
15319 fflushNULL='$fflushNULL'
15320 fflushall='$fflushall'
15321 find='$find'
15322 firstmakefile='$firstmakefile'
15323 flex='$flex'
15324 fpossize='$fpossize'
15325 fpostype='$fpostype'
15326 freetype='$freetype'
15327 full_ar='$full_ar'
15328 full_csh='$full_csh'
15329 full_sed='$full_sed'
15330 gccversion='$gccversion'
15331 gidformat='$gidformat'
15332 gidsign='$gidsign'
15333 gidsize='$gidsize'
15334 gidtype='$gidtype'
15335 glibpth='$glibpth'
15336 grep='$grep'
15337 groupcat='$groupcat'
15338 groupstype='$groupstype'
15339 gzip='$gzip'
15340 h_fcntl='$h_fcntl'
15341 h_sysfile='$h_sysfile'
15342 hint='$hint'
15343 hostcat='$hostcat'
15344 huge='$huge'
15345 i16size='$i16size'
15346 i16type='$i16type'
15347 i32size='$i32size'
15348 i32type='$i32type'
15349 i64size='$i64size'
15350 i64type='$i64type'
15351 i8size='$i8size'
15352 i8type='$i8type'
15353 i_arpainet='$i_arpainet'
15354 i_bsdioctl='$i_bsdioctl'
15355 i_db='$i_db'
15356 i_dbm='$i_dbm'
15357 i_dirent='$i_dirent'
15358 i_dld='$i_dld'
15359 i_dlfcn='$i_dlfcn'
15360 i_fcntl='$i_fcntl'
15361 i_float='$i_float'
15362 i_gdbm='$i_gdbm'
15363 i_grp='$i_grp'
15364 i_iconv='$i_iconv'
15365 i_ieeefp='$i_ieeefp'
15366 i_inttypes='$i_inttypes'
15367 i_limits='$i_limits'
15368 i_locale='$i_locale'
15369 i_machcthr='$i_machcthr'
15370 i_malloc='$i_malloc'
15371 i_math='$i_math'
15372 i_memory='$i_memory'
15373 i_mntent='$i_mntent'
15374 i_ndbm='$i_ndbm'
15375 i_netdb='$i_netdb'
15376 i_neterrno='$i_neterrno'
15377 i_netinettcp='$i_netinettcp'
15378 i_niin='$i_niin'
15379 i_poll='$i_poll'
15380 i_pthread='$i_pthread'
15381 i_pwd='$i_pwd'
15382 i_rpcsvcdbm='$i_rpcsvcdbm'
15383 i_sfio='$i_sfio'
15384 i_sgtty='$i_sgtty'
15385 i_shadow='$i_shadow'
15386 i_socks='$i_socks'
15387 i_stdarg='$i_stdarg'
15388 i_stddef='$i_stddef'
15389 i_stdlib='$i_stdlib'
15390 i_string='$i_string'
15391 i_sunmath='$i_sunmath'
15392 i_sysaccess='$i_sysaccess'
15393 i_sysdir='$i_sysdir'
15394 i_sysfile='$i_sysfile'
15395 i_sysfilio='$i_sysfilio'
15396 i_sysin='$i_sysin'
15397 i_sysioctl='$i_sysioctl'
15398 i_syslog='$i_syslog'
15399 i_sysmman='$i_sysmman'
15400 i_sysmode='$i_sysmode'
15401 i_sysmount='$i_sysmount'
15402 i_sysndir='$i_sysndir'
15403 i_sysparam='$i_sysparam'
15404 i_sysresrc='$i_sysresrc'
15405 i_syssecrt='$i_syssecrt'
15406 i_sysselct='$i_sysselct'
15407 i_syssockio='$i_syssockio'
15408 i_sysstat='$i_sysstat'
15409 i_sysstatfs='$i_sysstatfs'
15410 i_sysstatvfs='$i_sysstatvfs'
15411 i_systime='$i_systime'
15412 i_systimek='$i_systimek'
15413 i_systimes='$i_systimes'
15414 i_systypes='$i_systypes'
15415 i_sysuio='$i_sysuio'
15416 i_sysun='$i_sysun'
15417 i_sysutsname='$i_sysutsname'
15418 i_sysvfs='$i_sysvfs'
15419 i_syswait='$i_syswait'
15420 i_termio='$i_termio'
15421 i_termios='$i_termios'
15422 i_time='$i_time'
15423 i_unistd='$i_unistd'
15424 i_ustat='$i_ustat'
15425 i_utime='$i_utime'
15426 i_values='$i_values'
15427 i_varargs='$i_varargs'
15428 i_varhdr='$i_varhdr'
15429 i_vfork='$i_vfork'
15430 ignore_versioned_solibs='$ignore_versioned_solibs'
15431 inc_version_list='$inc_version_list'
15432 inc_version_list_init='$inc_version_list_init'
15433 incpath='$incpath'
15434 inews='$inews'
15435 installarchlib='$installarchlib'
15436 installbin='$installbin'
15437 installman1dir='$installman1dir'
15438 installman3dir='$installman3dir'
15439 installprefix='$installprefix'
15440 installprefixexp='$installprefixexp'
15441 installprivlib='$installprivlib'
15442 installscript='$installscript'
15443 installsitearch='$installsitearch'
15444 installsitebin='$installsitebin'
15445 installsitelib='$installsitelib'
15446 installstyle='$installstyle'
15447 installusrbinperl='$installusrbinperl'
15448 installvendorarch='$installvendorarch'
15449 installvendorbin='$installvendorbin'
15450 installvendorlib='$installvendorlib'
15451 intsize='$intsize'
15452 ivdformat='$ivdformat'
15453 ivsize='$ivsize'
15454 ivtype='$ivtype'
15455 known_extensions='$known_extensions'
15456 ksh='$ksh'
15457 large='$large'
15458 ld='$ld'
15459 lddlflags='$lddlflags'
15460 ldflags='$ldflags'
15461 ldlibpthname='$ldlibpthname'
15462 less='$less'
15463 lib_ext='$lib_ext'
15464 libc='$libc'
15465 libperl='$libperl'
15466 libpth='$libpth'
15467 libs='$libs'
15468 libsdirs='$libsdirs'
15469 libsfiles='$libsfiles'
15470 libsfound='$libsfound'
15471 libspath='$libspath'
15472 libswanted='$libswanted'
15473 line='$line'
15474 lint='$lint'
15475 lkflags='$lkflags'
15476 ln='$ln'
15477 lns='$lns'
15478 locincpth='$locincpth'
15479 loclibpth='$loclibpth'
15480 longdblsize='$longdblsize'
15481 longlongsize='$longlongsize'
15482 longsize='$longsize'
15483 lp='$lp'
15484 lpr='$lpr'
15485 ls='$ls'
15486 lseeksize='$lseeksize'
15487 lseektype='$lseektype'
15488 mail='$mail'
15489 mailx='$mailx'
15490 make='$make'
15491 make_set_make='$make_set_make'
15492 mallocobj='$mallocobj'
15493 mallocsrc='$mallocsrc'
15494 malloctype='$malloctype'
15495 man1dir='$man1dir'
15496 man1direxp='$man1direxp'
15497 man1ext='$man1ext'
15498 man3dir='$man3dir'
15499 man3direxp='$man3direxp'
15500 man3ext='$man3ext'
15501 medium='$medium'
15502 mips_type='$mips_type'
15503 mkdir='$mkdir'
15504 mmaptype='$mmaptype'
15505 models='$models'
15506 modetype='$modetype'
15507 more='$more'
15508 multiarch='$multiarch'
15509 mv='$mv'
15510 myarchname='$myarchname'
15511 mydomain='$mydomain'
15512 myhostname='$myhostname'
15513 myuname='$myuname'
15514 n='$n'
15515 netdb_hlen_type='$netdb_hlen_type'
15516 netdb_host_type='$netdb_host_type'
15517 netdb_name_type='$netdb_name_type'
15518 netdb_net_type='$netdb_net_type'
15519 nm='$nm'
15520 nm_opt='$nm_opt'
15521 nm_so_opt='$nm_so_opt'
15522 nonxs_ext='$nonxs_ext'
15523 nroff='$nroff'
15524 nvsize='$nvsize'
15525 nvtype='$nvtype'
15526 o_nonblock='$o_nonblock'
15527 obj_ext='$obj_ext'
15528 old_pthread_create_joinable='$old_pthread_create_joinable'
15529 optimize='$optimize'
15530 orderlib='$orderlib'
15531 osname='$osname'
15532 osvers='$osvers'
15533 package='$package'
15534 pager='$pager'
15535 passcat='$passcat'
15536 patchlevel='$patchlevel'
15537 path_sep='$path_sep'
15538 perl5='$perl5'
15539 perl='$perl'
15540 perladmin='$perladmin'
15541 perlpath='$perlpath'
15542 pg='$pg'
15543 phostname='$phostname'
15544 pidtype='$pidtype'
15545 plibpth='$plibpth'
15546 pm_apiversion='$pm_apiversion'
15547 pmake='$pmake'
15548 pr='$pr'
15549 prefix='$prefix'
15550 prefixexp='$prefixexp'
15551 privlib='$privlib'
15552 privlibexp='$privlibexp'
15553 prototype='$prototype'
15554 ptrsize='$ptrsize'
15555 quadkind='$quadkind'
15556 quadtype='$quadtype'
15557 randbits='$randbits'
15558 randfunc='$randfunc'
15559 randseedtype='$randseedtype'
15560 ranlib='$ranlib'
15561 rd_nodata='$rd_nodata'
15562 revision='$revision'
15563 rm='$rm'
15564 rmail='$rmail'
15565 runnm='$runnm'
15566 sPRIEldbl='$sPRIEldbl'
15567 sPRIFldbl='$sPRIFldbl'
15568 sPRIGldbl='$sPRIGldbl'
15569 sPRIX64='$sPRIX64'
15570 sPRId64='$sPRId64'
15571 sPRIeldbl='$sPRIeldbl'
15572 sPRIfldbl='$sPRIfldbl'
15573 sPRIgldbl='$sPRIgldbl'
15574 sPRIi64='$sPRIi64'
15575 sPRIo64='$sPRIo64'
15576 sPRIu64='$sPRIu64'
15577 sPRIx64='$sPRIx64'
15578 sched_yield='$sched_yield'
15579 scriptdir='$scriptdir'
15580 scriptdirexp='$scriptdirexp'
15581 sed='$sed'
15582 seedfunc='$seedfunc'
15583 selectminbits='$selectminbits'
15584 selecttype='$selecttype'
15585 sendmail='$sendmail'
15586 sh='$sh'
15587 shar='$shar'
15588 sharpbang='$sharpbang'
15589 shmattype='$shmattype'
15590 shortsize='$shortsize'
15591 shrpenv='$shrpenv'
15592 shsharp='$shsharp'
15593 sig_count='$sig_count'
15594 sig_name='$sig_name'
15595 sig_name_init='$sig_name_init'
15596 sig_num='$sig_num'
15597 sig_num_init='$sig_num_init'
15598 signal_t='$signal_t'
15599 sitearch='$sitearch'
15600 sitearchexp='$sitearchexp'
15601 sitebin='$sitebin'
15602 sitebinexp='$sitebinexp'
15603 sitelib='$sitelib'
15604 sitelib_stem='$sitelib_stem'
15605 sitelibexp='$sitelibexp'
15606 siteprefix='$siteprefix'
15607 siteprefixexp='$siteprefixexp'
15608 sizetype='$sizetype'
15609 sleep='$sleep'
15610 smail='$smail'
15611 small='$small'
15612 so='$so'
15613 sockethdr='$sockethdr'
15614 socketlib='$socketlib'
15615 socksizetype='$socksizetype'
15616 sort='$sort'
15617 spackage='$spackage'
15618 spitshell='$spitshell'
15619 split='$split'
15620 src='$src'
15621 ssizetype='$ssizetype'
15622 startperl='$startperl'
15623 startsh='$startsh'
15624 static_ext='$static_ext'
15625 stdchar='$stdchar'
15626 stdio_base='$stdio_base'
15627 stdio_bufsiz='$stdio_bufsiz'
15628 stdio_cnt='$stdio_cnt'
15629 stdio_filbuf='$stdio_filbuf'
15630 stdio_ptr='$stdio_ptr'
15631 stdio_stream_array='$stdio_stream_array'
15632 strings='$strings'
15633 submit='$submit'
15634 subversion='$subversion'
15635 sysman='$sysman'
15636 tail='$tail'
15637 tar='$tar'
15638 tbl='$tbl'
15639 tee='$tee'
15640 test='$test'
15641 timeincl='$timeincl'
15642 timetype='$timetype'
15643 touch='$touch'
15644 tr='$tr'
15645 trnl='$trnl'
15646 troff='$troff'
15647 u16size='$u16size'
15648 u16type='$u16type'
15649 u32size='$u32size'
15650 u32type='$u32type'
15651 u64size='$u64size'
15652 u64type='$u64type'
15653 u8size='$u8size'
15654 u8type='$u8type'
15655 uidformat='$uidformat'
15656 uidsign='$uidsign'
15657 uidsize='$uidsize'
15658 uidtype='$uidtype'
15659 uname='$uname'
15660 uniq='$uniq'
15661 uquadtype='$uquadtype'
15662 use5005threads='$use5005threads'
15663 use64bitall='$use64bitall'
15664 use64bitint='$use64bitint'
15665 usedl='$usedl'
15666 useithreads='$useithreads'
15667 uselargefiles='$uselargefiles'
15668 uselongdouble='$uselongdouble'
15669 usemorebits='$usemorebits'
15670 usemultiplicity='$usemultiplicity'
15671 usemymalloc='$usemymalloc'
15672 usenm='$usenm'
15673 useopcode='$useopcode'
15674 useperlio='$useperlio'
15675 useposix='$useposix'
15676 usesfio='$usesfio'
15677 useshrplib='$useshrplib'
15678 usesocks='$usesocks'
15679 usethreads='$usethreads'
15680 usevendorprefix='$usevendorprefix'
15681 usevfork='$usevfork'
15682 usrinc='$usrinc'
15683 uuname='$uuname'
15684 uvoformat='$uvoformat'
15685 uvsize='$uvsize'
15686 uvtype='$uvtype'
15687 uvuformat='$uvuformat'
15688 uvxformat='$uvxformat'
15689 vendorarch='$vendorarch'
15690 vendorarchexp='$vendorarchexp'
15691 vendorbin='$vendorbin'
15692 vendorbinexp='$vendorbinexp'
15693 vendorlib='$vendorlib'
15694 vendorlib_stem='$vendorlib_stem'
15695 vendorlibexp='$vendorlibexp'
15696 vendorprefix='$vendorprefix'
15697 vendorprefixexp='$vendorprefixexp'
15698 version='$version'
15699 vi='$vi'
15700 voidflags='$voidflags'
15701 xlibpth='$xlibpth'
15702 xs_apiversion='$xs_apiversion'
15703 zcat='$zcat'
15704 zip='$zip'
15705 EOT
15706
15707 : Add in command line options if available
15708 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
15709
15710 : add special variables
15711 $test -f $src/patchlevel.h && \
15712 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
15713 echo "CONFIGDOTSH=true" >>config.sh
15714
15715 : propagate old symbols
15716 if $test -f UU/config.sh; then
15717         <UU/config.sh sort | uniq >UU/oldconfig.sh
15718         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
15719         sort | uniq -u >UU/oldsyms
15720         set X `cat UU/oldsyms`
15721         shift
15722         case $# in
15723         0) ;;
15724         *)
15725                 cat <<EOM
15726 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
15727 EOM
15728                 echo "# Variables propagated from previous config.sh file." >>config.sh
15729                 for sym in `cat UU/oldsyms`; do
15730                         echo "    Propagating $hint variable "'$'"$sym..."
15731                         eval 'tmp="$'"${sym}"'"'
15732                         echo "$tmp" | \
15733                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
15734                 done
15735                 ;;
15736         esac
15737 fi
15738
15739 : Finish up by extracting the .SH files
15740 case "$alldone" in
15741 exit)
15742         $rm -rf UU
15743         echo "Done."
15744         exit 0
15745         ;;
15746 cont)
15747         ;;
15748 '')
15749         dflt=''
15750         nostick=true
15751         $cat <<EOM
15752
15753 If you'd like to make any changes to the config.sh file before I begin
15754 to configure things, do it as a shell escape now (e.g. !vi config.sh).
15755
15756 EOM
15757         rp="Press return or use a shell escape to edit config.sh:"
15758         . UU/myread
15759         nostick=''
15760         case "$ans" in
15761         '') ;;
15762         *) : in case they cannot read
15763                 sh 1>&4 -c "$ans";;
15764         esac
15765         ;;
15766 esac
15767
15768 : if this fails, just run all the .SH files by hand
15769 . ./config.sh
15770
15771 echo " "
15772 exec 1>&4
15773 . ./UU/extract
15774
15775 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
15776         dflt=y
15777         case "$silent" in
15778         true) ;;
15779         *)
15780                 $cat <<EOM
15781
15782 Now you need to generate make dependencies by running "$make depend".
15783 You might prefer to run it in background: "$make depend > makedepend.out &"
15784 It can take a while, so you might not want to run it right now.
15785
15786 EOM
15787                 ;;
15788         esac
15789         rp="Run $make depend now?"
15790         . UU/myread
15791         case "$ans" in
15792         y*)
15793                 $make depend && echo "Now you must run a $make."
15794                 ;;
15795         *)
15796                 echo "You must run '$make depend' then '$make'."
15797                 ;;
15798         esac
15799 elif test -f [Mm]akefile; then
15800         echo " "
15801         echo "Now you must run a $make."
15802 else
15803         echo "Done."
15804 fi
15805
15806 if $test -f Policy.sh; then
15807     $cat <<EOM
15808
15809 If you compile $package on a different machine or from a different object
15810 directory, copy the Policy.sh file from this object directory to the
15811 new one before you run Configure -- this will help you with most of
15812 the policy defaults.
15813
15814 EOM
15815 fi
15816 if $test -f config.msg; then
15817     echo "Hmm.  I also noted the following information while running:"
15818     echo " "
15819     $cat config.msg >&4
15820     $rm -f config.msg
15821 fi
15822 $rm -f kit*isdone ark*isdone
15823 $rm -rf UU
15824
15825 : End of Configure
15826