db14b23be035888d1a594623c6d275003aa839af
[p5sagit/p5-mst-13.2.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Thu Jun 21 18:44:48 EET DST 2001 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.org)
25
26 cat >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 >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 c1$$ c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f c1$$ 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 ccname=''
164 ccversion=''
165 ccsymbols=''
166 cppccsymbols=''
167 cppsymbols=''
168 from=''
169 run=''
170 targetarch=''
171 to=''
172 usecrosscompile=''
173 perllibs=''
174 dynamic_ext=''
175 extensions=''
176 known_extensions=''
177 nonxs_ext=''
178 static_ext=''
179 useopcode=''
180 useposix=''
181 d_bsd=''
182 d_eunice=''
183 d_xenix=''
184 eunicefix=''
185 Mcc=''
186 ar=''
187 awk=''
188 bash=''
189 bison=''
190 byacc=''
191 cat=''
192 chgrp=''
193 chmod=''
194 chown=''
195 comm=''
196 compress=''
197 cp=''
198 cpio=''
199 cpp=''
200 csh=''
201 date=''
202 echo=''
203 egrep=''
204 emacs=''
205 expr=''
206 find=''
207 flex=''
208 grep=''
209 gzip=''
210 inews=''
211 ksh=''
212 less=''
213 line=''
214 lint=''
215 ln=''
216 lp=''
217 lpr=''
218 ls=''
219 mail=''
220 mailx=''
221 make=''
222 mkdir=''
223 more=''
224 mv=''
225 nm=''
226 nroff=''
227 perl=''
228 pg=''
229 pmake=''
230 pr=''
231 rm=''
232 rmail=''
233 sed=''
234 sendmail=''
235 shar=''
236 sleep=''
237 smail=''
238 sort=''
239 submit=''
240 tail=''
241 tar=''
242 tbl=''
243 tee=''
244 test=''
245 touch=''
246 tr=''
247 troff=''
248 uname=''
249 uniq=''
250 uuname=''
251 vi=''
252 zcat=''
253 zip=''
254 full_ar=''
255 full_sed=''
256 libswanted=''
257 hint=''
258 myuname=''
259 osname=''
260 osvers=''
261 Author=''
262 Date=''
263 Header=''
264 Id=''
265 Locker=''
266 Log=''
267 RCSfile=''
268 Revision=''
269 Source=''
270 State=''
271 _a=''
272 _exe=''
273 _o=''
274 archobjs=''
275 exe_ext=''
276 firstmakefile=''
277 lib_ext=''
278 obj_ext=''
279 path_sep=''
280 afs=''
281 afsroot=''
282 alignbytes=''
283 ansi2knr=''
284 archlib=''
285 archlibexp=''
286 d_archlib=''
287 installarchlib=''
288 archname=''
289 myarchname=''
290 d_atolf=''
291 d_atoll=''
292 baserev=''
293 bin=''
294 binexp=''
295 installbin=''
296 bincompat5005=''
297 d_bincompat5005=''
298 byteorder=''
299 cc=''
300 ccflags=''
301 cppflags=''
302 ldflags=''
303 lkflags=''
304 locincpth=''
305 optimize=''
306 cf_email=''
307 cf_by=''
308 cf_time=''
309 charsize=''
310 contains=''
311 cpp_stuff=''
312 cpplast=''
313 cppminus=''
314 cpprun=''
315 cppstdin=''
316 d__fwalk=''
317 d_access=''
318 d_accessx=''
319 d_alarm=''
320 d_attribut=''
321 d_bcmp=''
322 d_bcopy=''
323 d_bzero=''
324 d_casti32=''
325 castflags=''
326 d_castneg=''
327 d_chown=''
328 d_chroot=''
329 d_chsize=''
330 d_closedir=''
331 d_void_closedir=''
332 d_cmsghdr_s=''
333 d_const=''
334 cryptlib=''
335 d_crypt=''
336 d_csh=''
337 full_csh=''
338 d_cuserid=''
339 d_dbl_dig=''
340 d_dbminitproto=''
341 d_difftime=''
342 d_dlerror=''
343 d_dlopen=''
344 d_dlsymun=''
345 d_dosuid=''
346 d_suidsafe=''
347 d_drand48proto=''
348 d_dup2=''
349 d_eaccess=''
350 d_endgrent=''
351 d_endhent=''
352 d_endnent=''
353 d_endpent=''
354 d_endpwent=''
355 d_endsent=''
356 d_fchmod=''
357 d_fchown=''
358 d_fcntl=''
359 d_fcntl_can_lock=''
360 d_fd_macros=''
361 d_fd_set=''
362 d_fds_bits=''
363 d_fgetpos=''
364 d_flexfnam=''
365 d_flock=''
366 d_flockproto=''
367 d_fork=''
368 d_fpos64_t=''
369 d_frexpl=''
370 d_fs_data_s=''
371 d_fseeko=''
372 d_fsetpos=''
373 d_fstatfs=''
374 d_fsync=''
375 d_ftello=''
376 d_ftime=''
377 d_gettimeod=''
378 d_Gconvert=''
379 d_getcwd=''
380 d_getespwnam=''
381 d_getfsstat=''
382 d_getgrent=''
383 d_getgrps=''
384 d_gethbyaddr=''
385 d_gethbyname=''
386 d_gethent=''
387 aphostname=''
388 d_gethname=''
389 d_phostname=''
390 d_uname=''
391 d_gethostprotos=''
392 d_getitimer=''
393 d_getlogin=''
394 d_getmnt=''
395 d_getmntent=''
396 d_getnbyaddr=''
397 d_getnbyname=''
398 d_getnent=''
399 d_getnetprotos=''
400 d_getpagsz=''
401 d_getpent=''
402 d_getpgid=''
403 d_getpgrp2=''
404 d_bsdgetpgrp=''
405 d_getpgrp=''
406 d_getppid=''
407 d_getprior=''
408 d_getpbyname=''
409 d_getpbynumber=''
410 d_getprotoprotos=''
411 d_getprpwnam=''
412 d_getpwent=''
413 d_getsent=''
414 d_getservprotos=''
415 d_getspnam=''
416 d_getsbyname=''
417 d_getsbyport=''
418 d_gnulibc=''
419 d_hasmntopt=''
420 d_htonl=''
421 d_iconv=''
422 d_inetaton=''
423 d_int64_t=''
424 d_isascii=''
425 d_isnan=''
426 d_isnanl=''
427 d_killpg=''
428 d_lchown=''
429 d_ldbl_dig=''
430 d_link=''
431 d_locconv=''
432 d_lockf=''
433 d_longdbl=''
434 longdblsize=''
435 d_longlong=''
436 longlongsize=''
437 d_lseekproto=''
438 d_lstat=''
439 d_madvise=''
440 d_mblen=''
441 d_mbstowcs=''
442 d_mbtowc=''
443 d_memchr=''
444 d_memcmp=''
445 d_memcpy=''
446 d_memmove=''
447 d_memset=''
448 d_mkdir=''
449 d_mkdtemp=''
450 d_mkfifo=''
451 d_mkstemp=''
452 d_mkstemps=''
453 d_mktime=''
454 d_mmap=''
455 mmaptype=''
456 d_modfl=''
457 d_modfl_pow32_bug=''
458 d_mprotect=''
459 d_msg=''
460 d_msgctl=''
461 d_msgget=''
462 d_msghdr_s=''
463 d_msgrcv=''
464 d_msgsnd=''
465 d_msync=''
466 d_munmap=''
467 d_nice=''
468 d_off64_t=''
469 d_open3=''
470 d_fpathconf=''
471 d_pathconf=''
472 d_pause=''
473 d_pipe=''
474 d_poll=''
475 d_portable=''
476 d_old_pthread_create_joinable=''
477 old_pthread_create_joinable=''
478 d_pthread_yield=''
479 d_sched_yield=''
480 sched_yield=''
481 d_qgcvt=''
482 d_readdir=''
483 d_rewinddir=''
484 d_seekdir=''
485 d_telldir=''
486 d_readlink=''
487 d_readv=''
488 d_recvmsg=''
489 d_rename=''
490 d_rmdir=''
491 d_safebcpy=''
492 d_safemcpy=''
493 d_sanemcmp=''
494 d_sbrkproto=''
495 d_select=''
496 d_sem=''
497 d_semctl=''
498 d_semget=''
499 d_semop=''
500 d_sendmsg=''
501 d_setegid=''
502 d_seteuid=''
503 d_setgrent=''
504 d_setgrps=''
505 d_sethent=''
506 d_setitimer=''
507 d_setlinebuf=''
508 d_setlocale=''
509 d_setnent=''
510 d_setpent=''
511 d_setpgid=''
512 d_setpgrp2=''
513 d_bsdsetpgrp=''
514 d_setpgrp=''
515 d_setprior=''
516 d_setproctitle=''
517 d_setpwent=''
518 d_setregid=''
519 d_setresgid=''
520 d_setresuid=''
521 d_setreuid=''
522 d_setrgid=''
523 d_setruid=''
524 d_setsent=''
525 d_setsid=''
526 d_setvbuf=''
527 d_sfio=''
528 usesfio=''
529 d_shm=''
530 d_shmat=''
531 d_shmatprototype=''
532 shmattype=''
533 d_shmctl=''
534 d_shmdt=''
535 d_shmget=''
536 d_sigaction=''
537 d_sigprocmask=''
538 d_sigsetjmp=''
539 d_sockatmark=''
540 d_sockatmarkproto=''
541 d_msg_ctrunc=''
542 d_msg_dontroute=''
543 d_msg_oob=''
544 d_msg_peek=''
545 d_msg_proxy=''
546 d_oldsock=''
547 d_scm_rights=''
548 d_socket=''
549 d_sockpair=''
550 sockethdr=''
551 socketlib=''
552 d_socklen_t=''
553 d_socks5_init=''
554 d_sqrtl=''
555 d_sresgproto=''
556 d_sresuproto=''
557 d_statblks=''
558 d_statfs_f_flags=''
559 d_statfs_s=''
560 d_fstatvfs=''
561 d_statvfs=''
562 d_stdio_cnt_lval=''
563 d_stdio_ptr_lval=''
564 d_stdio_ptr_lval_nochange_cnt=''
565 d_stdio_ptr_lval_sets_cnt=''
566 d_stdiobase=''
567 d_stdstdio=''
568 stdio_base=''
569 stdio_bufsiz=''
570 stdio_cnt=''
571 stdio_filbuf=''
572 stdio_ptr=''
573 d_index=''
574 d_strchr=''
575 d_strcoll=''
576 d_strctcpy=''
577 d_strerrm=''
578 d_strerror=''
579 d_sysernlst=''
580 d_syserrlst=''
581 d_strftime=''
582 d_strtod=''
583 d_strtol=''
584 d_strtold=''
585 d_strtoll=''
586 d_strtoq=''
587 d_strtoul=''
588 d_strtoull=''
589 d_strtouq=''
590 d_strxfrm=''
591 d_symlink=''
592 d_syscall=''
593 d_syscallproto=''
594 d_sysconf=''
595 d_system=''
596 d_tcgetpgrp=''
597 d_tcsetpgrp=''
598 d_telldirproto=''
599 d_time=''
600 timetype=''
601 clocktype=''
602 d_times=''
603 d_truncate=''
604 d_tzname=''
605 d_u32align=''
606 d_ualarm=''
607 d_umask=''
608 d_semctl_semid_ds=''
609 d_semctl_semun=''
610 d_union_semun=''
611 d_usleep=''
612 d_usleepproto=''
613 d_ustat=''
614 d_vfork=''
615 usevfork=''
616 d_voidsig=''
617 signal_t=''
618 d_volatile=''
619 d_charvspr=''
620 d_vprintf=''
621 d_wait4=''
622 d_waitpid=''
623 d_wcstombs=''
624 d_wctomb=''
625 d_writev=''
626 dlext=''
627 cccdlflags=''
628 ccdlflags=''
629 dlsrc=''
630 ld=''
631 lddlflags=''
632 usedl=''
633 doublesize=''
634 ebcdic=''
635 fflushNULL=''
636 fflushall=''
637 fpossize=''
638 fpostype=''
639 gccosandvers=''
640 gccversion=''
641 gidformat=''
642 gidsign=''
643 gidsize=''
644 gidtype=''
645 groupstype=''
646 h_fcntl=''
647 h_sysfile=''
648 i_arpainet=''
649 db_hashtype=''
650 db_prefixtype=''
651 db_version_major=''
652 db_version_minor=''
653 db_version_patch=''
654 i_db=''
655 i_dbm=''
656 i_rpcsvcdbm=''
657 d_dirnamlen=''
658 direntrytype=''
659 i_dirent=''
660 i_dld=''
661 i_dlfcn=''
662 i_fcntl=''
663 i_float=''
664 i_gdbm=''
665 d_grpasswd=''
666 i_grp=''
667 i_iconv=''
668 i_ieeefp=''
669 i_inttypes=''
670 i_libutil=''
671 i_limits=''
672 i_locale=''
673 i_machcthr=''
674 i_malloc=''
675 i_math=''
676 i_memory=''
677 i_mntent=''
678 i_ndbm=''
679 i_netdb=''
680 i_neterrno=''
681 i_netinettcp=''
682 i_niin=''
683 i_sysin=''
684 i_poll=''
685 i_prot=''
686 i_pthread=''
687 d_pwage=''
688 d_pwchange=''
689 d_pwclass=''
690 d_pwcomment=''
691 d_pwexpire=''
692 d_pwgecos=''
693 d_pwpasswd=''
694 d_pwquota=''
695 i_pwd=''
696 i_sfio=''
697 i_shadow=''
698 i_socks=''
699 i_stddef=''
700 i_stdlib=''
701 i_string=''
702 strings=''
703 i_sunmath=''
704 i_sysaccess=''
705 i_sysdir=''
706 i_sysfile=''
707 d_voidtty=''
708 i_bsdioctl=''
709 i_sysfilio=''
710 i_sysioctl=''
711 i_syssockio=''
712 i_syslog=''
713 i_sysmman=''
714 i_sysmode=''
715 i_sysmount=''
716 i_sysndir=''
717 i_sysparam=''
718 i_sysresrc=''
719 i_syssecrt=''
720 i_sysselct=''
721 i_sysstat=''
722 i_sysstatfs=''
723 i_sysstatvfs=''
724 i_systimes=''
725 i_systypes=''
726 i_sysuio=''
727 i_sysun=''
728 i_sysutsname=''
729 i_sysvfs=''
730 i_syswait=''
731 i_sgtty=''
732 i_termio=''
733 i_termios=''
734 i_systime=''
735 i_systimek=''
736 i_time=''
737 timeincl=''
738 i_unistd=''
739 i_ustat=''
740 i_utime=''
741 i_values=''
742 i_stdarg=''
743 i_varargs=''
744 i_varhdr=''
745 i_vfork=''
746 inc_version_list=''
747 inc_version_list_init=''
748 installprefix=''
749 installprefixexp=''
750 installstyle=''
751 installusrbinperl=''
752 intsize=''
753 longsize=''
754 shortsize=''
755 issymlink=''
756 libc=''
757 ldlibpthname=''
758 libperl=''
759 shrpenv=''
760 useshrplib=''
761 glibpth=''
762 libpth=''
763 loclibpth=''
764 plibpth=''
765 xlibpth=''
766 ignore_versioned_solibs=''
767 libs=''
768 libsdirs=''
769 libsfiles=''
770 libsfound=''
771 libspath=''
772 lns=''
773 d_PRIEUldbl=''
774 d_PRIFUldbl=''
775 d_PRIGUldbl=''
776 d_PRIeldbl=''
777 d_PRIfldbl=''
778 d_PRIgldbl=''
779 d_SCNfldbl=''
780 sPRIEUldbl=''
781 sPRIFUldbl=''
782 sPRIGUldbl=''
783 sPRIeldbl=''
784 sPRIfldbl=''
785 sPRIgldbl=''
786 sSCNfldbl=''
787 lseeksize=''
788 lseektype=''
789 make_set_make=''
790 d_mymalloc=''
791 freetype=''
792 mallocobj=''
793 mallocsrc=''
794 malloctype=''
795 usemymalloc=''
796 installman1dir=''
797 man1dir=''
798 man1direxp=''
799 man1ext=''
800 installman3dir=''
801 man3dir=''
802 man3direxp=''
803 man3ext=''
804 modetype=''
805 multiarch=''
806 mydomain=''
807 myhostname=''
808 phostname=''
809 c=''
810 n=''
811 d_eofnblk=''
812 eagain=''
813 o_nonblock=''
814 rd_nodata=''
815 need_va_copy=''
816 netdb_hlen_type=''
817 netdb_host_type=''
818 netdb_name_type=''
819 netdb_net_type=''
820 groupcat=''
821 hostcat=''
822 passcat=''
823 orderlib=''
824 ranlib=''
825 d_perl_otherlibdirs=''
826 otherlibdirs=''
827 package=''
828 spackage=''
829 pager=''
830 api_revision=''
831 api_subversion=''
832 api_version=''
833 api_versionstring=''
834 patchlevel=''
835 perl_patchlevel=''
836 revision=''
837 subversion=''
838 version=''
839 perl5=''
840 perladmin=''
841 perlpath=''
842 d_nv_preserves_uv=''
843 d_nv_preserves_uv_bits=''
844 i16size=''
845 i16type=''
846 i32size=''
847 i32type=''
848 i64size=''
849 i64type=''
850 i8size=''
851 i8type=''
852 ivsize=''
853 ivtype=''
854 nvsize=''
855 nvtype=''
856 u16size=''
857 u16type=''
858 u32size=''
859 u32type=''
860 u64size=''
861 u64type=''
862 u8size=''
863 u8type=''
864 uvsize=''
865 uvtype=''
866 ivdformat=''
867 nvEUformat=''
868 nvFUformat=''
869 nvGUformat=''
870 nveformat=''
871 nvfformat=''
872 nvgformat=''
873 uvXUformat=''
874 uvoformat=''
875 uvuformat=''
876 uvxformat=''
877 pidtype=''
878 prefix=''
879 prefixexp=''
880 installprivlib=''
881 privlib=''
882 privlibexp=''
883 prototype=''
884 ptrsize=''
885 d_PRIXU64=''
886 d_PRId64=''
887 d_PRIi64=''
888 d_PRIo64=''
889 d_PRIu64=''
890 d_PRIx64=''
891 sPRIXU64=''
892 sPRId64=''
893 sPRIi64=''
894 sPRIo64=''
895 sPRIu64=''
896 sPRIx64=''
897 d_quad=''
898 quadkind=''
899 quadtype=''
900 uquadtype=''
901 drand01=''
902 randbits=''
903 randfunc=''
904 randseedtype=''
905 seedfunc=''
906 installscript=''
907 scriptdir=''
908 scriptdirexp=''
909 selectminbits=''
910 selecttype=''
911 sh=''
912 sig_count=''
913 sig_name=''
914 sig_name_init=''
915 sig_num=''
916 sig_num_init=''
917 sig_size=''
918 installsitearch=''
919 sitearch=''
920 sitearchexp=''
921 installsitebin=''
922 sitebin=''
923 sitebinexp=''
924 installsitelib=''
925 sitelib=''
926 sitelib_stem=''
927 sitelibexp=''
928 siteprefix=''
929 siteprefixexp=''
930 sizesize=''
931 sizetype=''
932 so=''
933 socksizetype=''
934 sharpbang=''
935 shsharp=''
936 spitshell=''
937 src=''
938 ssizetype=''
939 startperl=''
940 startsh=''
941 stdchar=''
942 d_stdio_stream_array=''
943 stdio_stream_array=''
944 sysman=''
945 trnl=''
946 uidformat=''
947 uidsign=''
948 uidsize=''
949 uidtype=''
950 archname64=''
951 use64bitall=''
952 use64bitint=''
953 ccflags_uselargefiles=''
954 ldflags_uselargefiles=''
955 libswanted_uselargefiles=''
956 uselargefiles=''
957 uselongdouble=''
958 usemorebits=''
959 usemultiplicity=''
960 nm_opt=''
961 nm_so_opt=''
962 runnm=''
963 usenm=''
964 useperlio=''
965 usesocks=''
966 d_oldpthreads=''
967 use5005threads=''
968 useithreads=''
969 usereentrant=''
970 usethreads=''
971 incpath=''
972 mips_type=''
973 usrinc=''
974 d_vendorarch=''
975 installvendorarch=''
976 vendorarch=''
977 vendorarchexp=''
978 d_vendorbin=''
979 installvendorbin=''
980 vendorbin=''
981 vendorbinexp=''
982 d_vendorlib=''
983 installvendorlib=''
984 vendorlib=''
985 vendorlib_stem=''
986 vendorlibexp=''
987 usevendorprefix=''
988 vendorprefix=''
989 vendorprefixexp=''
990 versiononly=''
991 defvoidused=''
992 voidflags=''
993 pm_apiversion=''
994 xs_apiversion=''
995 yacc=''
996 yaccflags=''
997 CONFIG=''
998
999 define='define'
1000 undef='undef'
1001 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
1002 rmlist=''
1003
1004 : We must find out about Eunice early
1005 eunicefix=':'
1006 if test -f /etc/unixtovms; then
1007         eunicefix=/etc/unixtovms
1008 fi
1009 if test -f /etc/unixtovms.exe; then
1010         eunicefix=/etc/unixtovms.exe
1011 fi
1012
1013 i_whoami=''
1014 ccname=''
1015 ccversion=''
1016 perllibs=''
1017 : set useposix=false in your hint file to disable the POSIX extension.
1018 useposix=true
1019 : set useopcode=false in your hint file to disable the Opcode extension.
1020 useopcode=true
1021 : Trailing extension.  Override this in a hint file, if needed.
1022 _exe=''
1023 : Extra object files, if any, needed on this platform.
1024 archobjs=''
1025 archname=''
1026 : Possible local include directories to search.
1027 : Set locincpth to "" in a hint file to defeat local include searches.
1028 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
1029 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
1030 :
1031 : no include file wanted by default
1032 inclwanted=''
1033
1034 groupstype=''
1035 libnames=''
1036 : change the next line if compiling for Xenix/286 on Xenix/386
1037 xlibpth='/usr/lib/386 /lib/386'
1038 : Possible local library directories to search.
1039 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1040 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1041
1042 : general looking path for locating libraries
1043 glibpth="/lib /usr/lib $xlibpth"
1044 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1045 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1046 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1047
1048 : Private path used by Configure to find libraries.  Its value
1049 : is prepended to libpth. This variable takes care of special
1050 : machines, like the mips.  Usually, it should be empty.
1051 plibpth=''
1052
1053 : default library list
1054 libswanted=''
1055 : some systems want to use only the non-versioned libso:s
1056 ignore_versioned_solibs=''
1057 archname64=''
1058 ccflags_uselargefiles=''
1059 ldflags_uselargefiles=''
1060 libswanted_uselargefiles=''
1061 : set usemultiplicity on the Configure command line to enable multiplicity.
1062 : set usesocks on the Configure command line to enable socks.
1063 : set usethreads on the Configure command line to enable threads.
1064 usereentrant='undef'
1065 : full support for void wanted by default
1066 defvoidused=15
1067
1068 : List of libraries we want.
1069 : If anyone needs -lnet, put it in a hint file.
1070 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1071 libswanted="$libswanted dld ld sun m c cposix posix"
1072 libswanted="$libswanted ndir dir crypt sec"
1073 libswanted="$libswanted ucb bsd BSD PW x iconv util"
1074 : We probably want to search /usr/shlib before most other libraries.
1075 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1076 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1077 glibpth="/usr/shlib $glibpth"
1078 : Do not use vfork unless overridden by a hint file.
1079 usevfork=false
1080
1081 : Find the basic shell for Bourne shell scripts
1082 case "$sh" in
1083 '')
1084         case "$SYSTYPE" in
1085         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1086         *) xxx='/bin/sh';;
1087         esac
1088         if test -f "$xxx"; then
1089                 sh="$xxx"
1090         else
1091                 : Build up a list and do a single loop so we can 'break' out.
1092                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1093                 for xxx in sh bash ksh pdksh ash; do
1094                         for p in $pth; do
1095                                 try="$try ${p}/${xxx}"
1096                         done
1097                 done
1098                 for xxx in $try; do
1099                         if test -f "$xxx"; then
1100                                 sh="$xxx";
1101                                 break
1102                         elif test -f "$xxx.exe"; then
1103                                 sh="$xxx";
1104                                 break
1105                         fi
1106                 done
1107         fi
1108         ;;
1109 esac
1110
1111 case "$sh" in
1112 '')     cat <<EOM >&2
1113 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1114
1115 Usually it's in /bin/sh.  How did you even get this far?
1116 Please contact me (Perl Maintainers) at perlbug@perl.org and 
1117 we'll try to straighten this all out.
1118 EOM
1119         exit 1
1120         ;;
1121 esac
1122
1123 : see if sh knows # comments
1124 if `$sh -c '#' >/dev/null 2>&1`; then
1125         shsharp=true
1126         spitshell=cat
1127         xcat=/bin/cat
1128         test -f $xcat || xcat=/usr/bin/cat
1129         echo "#!$xcat" >sharp
1130         $eunicefix sharp
1131         chmod +x sharp
1132         ./sharp > today
1133         if test -s today; then
1134                 sharpbang='#!'
1135         else
1136                 echo "#! $xcat" > sharp
1137                 $eunicefix sharp
1138                 chmod +x sharp
1139                 ./sharp > today
1140                 if test -s today; then
1141                         sharpbang='#! '
1142                 else
1143                         sharpbang=': use '
1144                 fi
1145         fi
1146 else
1147         echo " "
1148         echo "Your $sh doesn't grok # comments--I will strip them later on."
1149         shsharp=false
1150         cd ..
1151         echo "exec grep -v '^[  ]*#'" >spitshell
1152         chmod +x spitshell
1153         $eunicefix spitshell
1154         spitshell=`pwd`/spitshell
1155         cd UU
1156         echo "I presume that if # doesn't work, #! won't work either!"
1157         sharpbang=': use '
1158 fi
1159 rm -f sharp today
1160
1161 : figure out how to guarantee sh startup
1162 case "$startsh" in
1163 '') startsh=${sharpbang}${sh} ;;
1164 *)
1165 esac
1166 cat >sharp <<EOSS
1167 $startsh
1168 set abc
1169 test "$?abc" != 1
1170 EOSS
1171
1172 chmod +x sharp
1173 $eunicefix sharp
1174 if ./sharp; then
1175         : echo "Yup, it does."
1176 else
1177         echo "Hmm... '$startsh' does not guarantee sh startup..."
1178         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1179 fi
1180 rm -f sharp
1181
1182
1183 : Save command line options in file UU/cmdline.opt for later use in
1184 : generating config.sh.
1185 cat > cmdline.opt <<EOSH
1186 # Configure command line arguments.
1187 config_arg0='$0'
1188 config_args='$*'
1189 config_argc=$#
1190 EOSH
1191 argn=1
1192 for arg in "$@"; do
1193         cat >>cmdline.opt <<EOSH
1194 config_arg$argn='$arg'
1195 EOSH
1196         argn=`expr $argn + 1`
1197 done
1198
1199 : produce awk script to parse command line options
1200 cat >options.awk <<'EOF'
1201 BEGIN {
1202         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1203
1204         len = length(optstr);
1205         for (i = 1; i <= len; i++) {
1206                 c = substr(optstr, i, 1);
1207                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1208                 if (a == ":") {
1209                         arg[c] = 1;
1210                         i++;
1211                 }
1212                 opt[c] = 1;
1213         }
1214 }
1215 {
1216         expect = 0;
1217         str = $0;
1218         if (substr(str, 1, 1) != "-") {
1219                 printf("'%s'\n", str);
1220                 next;
1221         }
1222         len = length($0);
1223         for (i = 2; i <= len; i++) {
1224                 c = substr(str, i, 1);
1225                 if (!opt[c]) {
1226                         printf("-%s\n", substr(str, i));
1227                         next;
1228                 }
1229                 printf("-%s\n", c);
1230                 if (arg[c]) {
1231                         if (i < len)
1232                                 printf("'%s'\n", substr(str, i + 1));
1233                         else
1234                                 expect = 1;
1235                         next;
1236                 }
1237         }
1238 }
1239 END {
1240         if (expect)
1241                 print "?";
1242 }
1243 EOF
1244
1245 : process the command line options
1246 set X `for arg in "$@"; do echo "X$arg"; done |
1247         sed -e s/X// | awk -f options.awk`
1248 eval "set $*"
1249 shift
1250 rm -f options.awk
1251
1252 : set up default values
1253 fastread=''
1254 reuseval=false
1255 config_sh=''
1256 alldone=''
1257 error=''
1258 silent=''
1259 extractsh=''
1260 override=''
1261 knowitall=''
1262 rm -f optdef.sh posthint.sh
1263 cat >optdef.sh <<EOS
1264 $startsh
1265 EOS
1266
1267
1268 : option parsing
1269 while test $# -gt 0; do
1270         case "$1" in
1271         -d) shift; fastread=yes;;
1272         -e) shift; alldone=cont;;
1273         -f)
1274                 shift
1275                 cd ..
1276                 if test -r "$1"; then
1277                         config_sh="$1"
1278                 else
1279                         echo "$me: cannot read config file $1." >&2
1280                         error=true
1281                 fi
1282                 cd UU
1283                 shift;;
1284         -h) shift; error=true;;
1285         -r) shift; reuseval=true;;
1286         -s) shift; silent=true; realsilent=true;;
1287         -E) shift; alldone=exit;;
1288         -K) shift; knowitall=true;;
1289         -O) shift; override=true;;
1290         -S) shift; silent=true; extractsh=true;;
1291         -D)
1292                 shift
1293                 case "$1" in
1294                 *=)
1295                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1296                         echo "$me: ignoring -D $1" >&2
1297                         ;;
1298                 *=*) echo "$1" | \
1299                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1300                 *) echo "$1='define'" >> optdef.sh;;
1301                 esac
1302                 shift
1303                 ;;
1304         -U)
1305                 shift
1306                 case "$1" in
1307                 *=) echo "$1" >> optdef.sh;;
1308                 *=*)
1309                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1310                         echo "$me: ignoring -U $1" >&2
1311                         ;;
1312                 *) echo "$1='undef'" >> optdef.sh;;
1313                 esac
1314                 shift
1315                 ;;
1316         -A)
1317             shift
1318             xxx=''
1319             yyy="$1"
1320             zzz=''
1321             uuu=undef
1322             case "$yyy" in
1323             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1324                  case "$zzz" in
1325                  *:*) zzz='' ;;
1326                  *)   xxx=append
1327                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1328                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1329                  esac
1330                  ;;
1331             esac
1332             case "$xxx" in
1333             '')  case "$yyy" in
1334                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1335                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1336                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1337                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1338                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1339                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1340                  esac
1341                  ;;       
1342             esac
1343             case "$xxx" in
1344             append)
1345                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1346             clear)
1347                 echo "$yyy=''"                  >> posthint.sh ;;
1348             define)
1349                 case "$zzz" in
1350                 '') zzz=define ;;
1351                 esac
1352                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1353             eval)
1354                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1355             prepend)
1356                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1357             undef)
1358                 case "$zzz" in
1359                 '') zzz="$uuu" ;;
1360                 esac
1361                 echo "$yyy=$zzz"                >> posthint.sh ;;
1362             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1363             esac
1364             shift
1365             ;;
1366         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1367             exit 0;;
1368         --) break;;
1369         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1370         *) break;;
1371         esac
1372 done
1373
1374 case "$error" in
1375 true)
1376         cat >&2 <<EOM
1377 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1378                  [-U symbol] [-U symbol=] [-A command:symbol...]
1379   -d : use defaults for all answers.
1380   -e : go on without questioning past the production of config.sh.
1381   -f : specify an alternate default configuration file.
1382   -h : print this help message and exit (with an error status).
1383   -r : reuse C symbols value if possible (skips costly nm extraction).
1384   -s : silent mode, only echoes questions and essential information.
1385   -D : define symbol to have some value:
1386          -D symbol         symbol gets the value 'define'
1387          -D symbol=value   symbol gets the value 'value'
1388   -E : stop at the end of questions, after having produced config.sh.
1389   -K : do not use unless you know what you are doing.
1390   -O : let -D and -U override definitions from loaded configuration file.
1391   -S : perform variable substitutions on all .SH files (can mix with -f)
1392   -U : undefine symbol:
1393          -U symbol    symbol gets the value 'undef'
1394          -U symbol=   symbol gets completely empty
1395   -A : manipulate symbol after the platform specific hints have been applied:
1396          -A symbol=value                append " "value to symbol
1397          -A append:symbol=value         append value to symbol
1398          -A define:symbol=value         define symbol to have value
1399          -A clear:symbol                define symbol to be ''
1400          -A define:symbol               define symbol to be 'define'
1401          -A eval:symbol=value           define symbol to be eval of value
1402          -A prepend:symbol=value        prepend value to symbol
1403          -A undef:symbol                define symbol to be 'undef'
1404          -A undef:symbol=               define symbol to be ''
1405   -V : print version number and exit (with a zero status).
1406 EOM
1407         exit 1
1408         ;;
1409 esac
1410
1411 : Sanity checks
1412 case "$fastread$alldone" in
1413 yescont|yesexit) ;;
1414 *)
1415         case "$extractsh" in
1416         true) ;;
1417         *)
1418                 if test ! -t 0; then
1419                         echo "Say 'sh Configure', not 'sh <Configure'"
1420                         exit 1
1421                 fi
1422                 ;;
1423         esac
1424         ;;
1425 esac
1426
1427 exec 4>&1
1428 case "$silent" in
1429 true) exec 1>/dev/null;;
1430 esac
1431
1432 : run the defines and the undefines, if any, but leave the file out there...
1433 touch optdef.sh
1434 . ./optdef.sh
1435 : create the posthint manipulation script and leave the file out there...
1436 touch posthint.sh
1437
1438 : set package name
1439 package=perl5
1440 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1441 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1442 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1443 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1444 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1445 esac
1446
1447 : Some greps do not return status, grrr.
1448 echo "grimblepritz" >grimble
1449 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1450         contains=contains
1451 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1452         contains=grep
1453 else
1454         contains=contains
1455 fi
1456 rm -f grimble
1457 : the following should work in any shell
1458 case "$contains" in
1459 contains*)
1460         echo " "
1461         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1462         cat >contains <<'EOSS'
1463 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1464 EOSS
1465 chmod +x contains
1466 esac
1467
1468 : Find the path to the source tree
1469 case "$src" in
1470 '') case "$0" in
1471     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1472          case "$src" in
1473          /*)    ;;
1474          .)     ;;
1475          *)     src=`cd ../$src && pwd` ;;
1476          esac
1477          ;;
1478     *)   src='.';;
1479     esac;;
1480 esac
1481 case "$src" in
1482 '')     src=/
1483         rsrc=/
1484         ;;
1485 /*) rsrc="$src";;
1486 *) rsrc="../$src";;
1487 esac
1488 if test -f $rsrc/Configure && \
1489         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1490 then
1491    : found it, so we are ok.
1492 else
1493         rsrc=''
1494         for src in . .. ../.. ../../.. ../../../..; do
1495                 if test -f ../$src/Configure && \
1496                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1497                 then
1498                         rsrc=../$src
1499                         break
1500                 fi
1501         done
1502 fi
1503 case "$rsrc" in
1504 '')
1505         cat <<EOM >&4
1506
1507 Sorry, I can't seem to locate the source dir for $package.  Please start
1508 Configure with an explicit path -- i.e. /some/path/Configure.
1509
1510 EOM
1511         exit 1
1512         ;;
1513 ../.)   rsrc='..';;
1514 *)
1515         echo " "
1516         echo "Sources for $package found in \"$src\"." >&4
1517         ;;
1518 esac
1519
1520 : script used to extract .SH files with variable substitutions
1521 cat >extract <<'EOS'
1522 PERL_CONFIG_SH=true
1523 echo "Doing variable substitutions on .SH files..."
1524 if test -f MANIFEST; then
1525         set x `awk '{print $1}' < MANIFEST | grep '\.SH$'`
1526 else
1527         echo "(Looking for .SH files under the source directory.)"
1528         set x `(cd $src; find . -name "*.SH" -print)`
1529 fi
1530 shift
1531 case $# in
1532 0) set x `(cd $src; echo *.SH)`; shift;;
1533 esac
1534 if test ! -f $src/$1; then
1535         shift
1536 fi
1537 mkdir_p='
1538 name=$1;
1539 create="";
1540 while test $name; do
1541         if test ! -d "$name"; then
1542                 create="$name $create";
1543                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1544                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1545         else
1546                 name="";
1547         fi;
1548 done;
1549 for file in $create; do
1550         mkdir $file;
1551 done
1552 '
1553 for file in $*; do
1554         case "$src" in
1555         ".")
1556                 case "$file" in
1557                 */*)
1558                         dir=`expr X$file : 'X\(.*\)/'`
1559                         file=`expr X$file : 'X.*/\(.*\)'`
1560                         (cd $dir && . ./$file)
1561                         ;;
1562                 *)
1563                         . ./$file
1564                         ;;
1565                 esac
1566                 ;;
1567         *)
1568                 case "$file" in
1569                 */*)
1570                         dir=`expr X$file : 'X\(.*\)/'`
1571                         file=`expr X$file : 'X.*/\(.*\)'`
1572                         (set x $dir; shift; eval $mkdir_p)
1573                         sh <$src/$dir/$file
1574                         ;;
1575                 *)
1576                         sh <$src/$file
1577                         ;;
1578                 esac
1579                 ;;
1580         esac
1581 done
1582 if test -f $src/config_h.SH; then
1583         if test ! -f config.h; then
1584         : oops, they left it out of MANIFEST, probably, so do it anyway.
1585         . $src/config_h.SH
1586         fi
1587 fi
1588 EOS
1589
1590 : extract files and exit if asked to do so
1591 case "$extractsh" in
1592 true)
1593         case "$realsilent" in
1594         true) ;;
1595         *) exec 1>&4;;
1596         esac
1597         case "$config_sh" in
1598         '') config_sh='config.sh';;
1599         esac
1600         echo " "
1601         echo "Fetching answers from $config_sh..."
1602         cd ..
1603         . $config_sh
1604         test "$override" && . ./optdef.sh
1605         echo " "
1606         . UU/extract
1607         rm -rf UU
1608         echo "Extraction done."
1609         exit 0
1610         ;;
1611 esac
1612
1613 : Eunice requires " " instead of "", can you believe it
1614 echo " "
1615 : Here we go...
1616 echo "Beginning of configuration questions for $package."
1617
1618 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1619
1620 : first determine how to suppress newline on echo command
1621 echo " "
1622 echo "Checking echo to see how to suppress newlines..."
1623 (echo "hi there\c" ; echo " ") >.echotmp
1624 if $contains c .echotmp >/dev/null 2>&1 ; then
1625         echo "...using -n."
1626         n='-n'
1627         c=''
1628 else
1629         cat <<'EOM'
1630 ...using \c
1631 EOM
1632         n=''
1633         c='\c'
1634 fi
1635 echo $n "The star should be here-->$c"
1636 echo '*'
1637 rm -f .echotmp
1638
1639 : Now test for existence of everything in MANIFEST
1640 echo " "
1641 if test -f $rsrc/MANIFEST; then
1642         echo "First let's make sure your kit is complete.  Checking..." >&4
1643         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1644         rm -f missing
1645         tmppwd=`pwd`
1646         for filelist in x??; do
1647                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1648         done
1649         if test -s missing; then
1650                 cat missing >&4
1651                 cat >&4 <<'EOM'
1652
1653 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1654
1655 You have the option of continuing the configuration process, despite the
1656 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1657 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1658 and contact the author (perlbug@perl.org).
1659
1660 EOM
1661                 echo $n "Continue? [n] $c" >&4
1662                 read ans
1663                 case "$ans" in
1664                 y*)
1665                         echo "Continuing..." >&4
1666                         rm -f missing
1667                         ;;
1668                 *)
1669                         echo "ABORTING..." >&4
1670                         kill $$
1671                         ;;
1672                 esac
1673         else
1674                 echo "Looks good..."
1675         fi
1676 else
1677         echo "There is no MANIFEST file.  I hope your kit is complete !"
1678 fi
1679 rm -f missing x??
1680
1681 echo " "
1682 : Find the appropriate value for a newline for tr
1683 if test -n "$DJGPP"; then
1684        trnl='\012'
1685 fi
1686 if test X"$trnl" = X; then
1687         case "`echo foo|tr '\n' x 2>/dev/null`" in
1688         foox) trnl='\n' ;;
1689         esac
1690 fi
1691 if test X"$trnl" = X; then
1692         case "`echo foo|tr '\012' x 2>/dev/null`" in
1693         foox) trnl='\012' ;;
1694         esac
1695 fi
1696 if test X"$trnl" = X; then
1697         cat <<EOM >&2
1698
1699 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1700
1701 EOM
1702         exit 1
1703 fi
1704
1705 : compute the number of columns on the terminal for proper question formatting
1706 case "$COLUMNS" in
1707 '') COLUMNS='80';;
1708 esac
1709
1710 : set up the echo used in my read
1711 myecho="case \"\$xxxm\" in
1712 '') echo $n \"\$rp $c\" >&4;;
1713 *) case \"\$rp\" in
1714         '') echo $n \"[\$xxxm] $c\";;
1715         *)
1716                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1717                         echo \"\$rp\" >&4
1718                         echo $n \"[\$xxxm] $c\" >&4
1719                 else
1720                         echo $n \"\$rp [\$xxxm] $c\" >&4
1721                 fi
1722                 ;;
1723         esac;;
1724 esac"
1725
1726 : now set up to do reads with possible shell escape and default assignment
1727 cat <<EOSC >myread
1728 $startsh
1729 xxxm=\$dflt
1730 $myecho
1731 ans='!'
1732 case "\$fastread" in
1733 yes) case "\$dflt" in
1734         '') ;;
1735         *) ans='';
1736                 case "\$silent-\$rp" in
1737                 true-) ;;
1738                 *) echo " " >&4;;
1739                 esac;;
1740         esac;;
1741 *) case "\$silent" in
1742         true) case "\$rp" in
1743                 '') ans='';;
1744                 esac;;
1745         esac;;
1746 esac
1747 while expr "X\$ans" : "X!" >/dev/null; do
1748         read answ
1749         set x \$xxxm
1750         shift
1751         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1752         case  "\$answ" in
1753         "!")
1754                 sh 1>&4
1755                 echo " "
1756                 $myecho
1757                 ;;
1758         !*)
1759                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1760                 shift
1761                 sh 1>&4 -c "\$*"
1762                 echo " "
1763                 $myecho
1764                 ;;
1765         "\$ans")
1766                 case "\$ans" in
1767                 \\&*)
1768                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1769                         shift
1770                         case "\$1" in
1771                         -d)
1772                                 fastread=yes
1773                                 echo "(OK, I'll run with -d after this question.)" >&4
1774                                 ;;
1775                         -*)
1776                                 echo "*** Sorry, \$1 not supported yet." >&4
1777                                 ;;
1778                         esac
1779                         $myecho
1780                         ans=!
1781                         ;;
1782                 esac;;
1783         *)
1784                 case "\$aok" in
1785                 y)
1786                         echo "*** Substitution done -- please confirm."
1787                         xxxm="\$ans"
1788                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1789                         xxxm="\$ans"
1790                         ans=!
1791                         ;;
1792                 *)
1793                         echo "*** Error -- try again."
1794                         ans=!
1795                         ;;
1796                 esac
1797                 $myecho
1798                 ;;
1799         esac
1800         case "\$ans\$xxxm\$nostick" in
1801         '')
1802                 ans=!
1803                 $myecho
1804                 ;;
1805         esac
1806 done
1807 case "\$ans" in
1808 '') ans="\$xxxm";;
1809 esac
1810 EOSC
1811
1812 : create .config dir to save info across Configure sessions
1813 test -d ../.config || mkdir ../.config
1814 cat >../.config/README <<EOF
1815 This directory created by Configure to save information that should
1816 persist across sessions for $package.
1817
1818 You may safely delete it if you wish.
1819 EOF
1820
1821 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
1822 case "$usedevel" in
1823 $define|true|[yY]*) ;;
1824 *) case "$xversion" in
1825    *[13579])
1826         cat >&4 <<EOH
1827 *** WHOA THERE!!! ***
1828
1829     This is an UNSTABLE DEVELOPMENT release.
1830     The version of this $package distribution is $xversion, that is, odd,
1831     (as opposed to even) and that signifies a development release.
1832     If you want a maintenance release, you want an even-numbered version.
1833
1834     Do ***NOT*** install this into production use.
1835     Data corruption and crashes are possible.
1836
1837     It is most seriously suggested that you do not continue any further
1838     unless you want to help in developing and debugging Perl.
1839
1840     If you *still* want to build perl, you can answer 'y' now,
1841     or pass -Dusedevel to Configure.
1842
1843 EOH
1844         rp='Do you really want to continue?'
1845         dflt='n'
1846         . ./myread
1847         case "$ans" in
1848         [yY]) echo >&4 "Okay, continuing."
1849               usedevel="$define" ;;
1850         *) echo >&4 "Okay, bye."
1851            exit 1
1852            ;;
1853         esac
1854         ;;
1855     esac
1856     ;;
1857 esac
1858 case "$usedevel" in
1859 $define|true|[yY]*)
1860         case "$versiononly" in
1861         '') versiononly="$define" ;;
1862         esac
1863         case "$installusrbinperl" in
1864         '') installusrbinperl="$undef" ;;
1865         esac
1866         ;;
1867 esac
1868
1869 : general instructions
1870 needman=true
1871 firsttime=true
1872 user=`(logname) 2>/dev/null`
1873 case "$user" in
1874 '') user=`whoami 2>&1`;;
1875 esac
1876 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1877         firsttime=false
1878         echo " "
1879         rp='Would you like to see the instructions?'
1880         dflt=n
1881         . ./myread
1882         case "$ans" in
1883         [yY]*) ;;
1884         *) needman=false;;
1885         esac
1886 fi
1887 if $needman; then
1888         cat <<EOH
1889
1890 This installation shell script will examine your system and ask you questions
1891 to determine how the perl5 package should be installed. If you get
1892 stuck on a question, you may use a ! shell escape to start a subshell or
1893 execute a command.  Many of the questions will have default answers in square
1894 brackets; typing carriage return will give you the default.
1895
1896 On some of the questions which ask for file or directory names you are allowed
1897 to use the ~name construct to specify the login directory belonging to "name",
1898 even if you don't have a shell which knows about that.  Questions where this is
1899 allowed will be marked "(~name ok)".
1900
1901 EOH
1902         rp=''
1903         dflt='Type carriage return to continue'
1904         . ./myread
1905         cat <<'EOH'
1906
1907 The prompter used in this script allows you to use shell variables and
1908 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1909 in the default answer, as if the default line was a set of arguments given to a
1910 script shell.  This means you may also use $* to repeat the whole default line,
1911 so you do not have to re-type everything to add something to the default.
1912
1913 Everytime there is a substitution, you will have to confirm.  If there is an
1914 error (e.g. an unmatched backtick), the default answer will remain unchanged
1915 and you will be prompted again.
1916
1917 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1918 the questions and use the computed defaults (or the previous answers if there
1919 was already a config.sh file). Type 'Configure -h' for a list of options.
1920 You may also start interactively and then answer '& -d' at any prompt to turn
1921 on the non-interactive behaviour for the remainder of the execution.
1922
1923 EOH
1924         . ./myread
1925         cat <<EOH
1926
1927 Much effort has been expended to ensure that this shell script will run on any
1928 Unix system.  If despite that it blows up on yours, your best bet is to edit
1929 Configure and run it again.  If you can't run Configure for some reason,
1930 you'll have to generate a config.sh file by hand.  Whatever problems you
1931 have, let me (perlbug@perl.org) know how I blew it.
1932
1933 This installation script affects things in two ways:
1934
1935 1) it may do direct variable substitutions on some of the files included
1936    in this kit.
1937 2) it builds a config.h file for inclusion in C programs.  You may edit
1938    any of these files as the need arises after running this script.
1939
1940 If you make a mistake on a question, there is no easy way to back up to it
1941 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1942 files.  Configure will offer to let you do this before it runs the SH files.
1943
1944 EOH
1945         dflt='Type carriage return to continue'
1946         . ./myread
1947         case "$firsttime" in
1948         true) echo $user >>../.config/instruct;;
1949         esac
1950 fi
1951
1952 : find out where common programs are
1953 echo " "
1954 echo "Locating common programs..." >&4
1955 cat <<EOSC >loc
1956 $startsh
1957 case \$# in
1958 0) exit 1;;
1959 esac
1960 thing=\$1
1961 shift
1962 dflt=\$1
1963 shift
1964 for dir in \$*; do
1965         case "\$thing" in
1966         .)
1967         if test -d \$dir/\$thing; then
1968                 echo \$dir
1969                 exit 0
1970         fi
1971         ;;
1972         *)
1973         for thisthing in \$dir/\$thing; do
1974                 : just loop through to pick last item
1975         done
1976         if test -f \$thisthing; then
1977                 echo \$thisthing
1978                 exit 0
1979         elif test -f \$dir/\$thing.exe; then
1980                 if test -n "$DJGPP"; then
1981                         echo \$dir/\$thing.exe
1982                 else
1983                         : on Eunice apparently
1984                         echo \$dir/\$thing
1985                 fi
1986                 exit 0
1987         fi
1988         ;;
1989         esac
1990 done
1991 echo \$dflt
1992 exit 1
1993 EOSC
1994 chmod +x loc
1995 $eunicefix loc
1996 loclist="
1997 awk
1998 cat
1999 comm
2000 cp
2001 echo
2002 expr
2003 grep
2004 ls
2005 make
2006 mkdir
2007 rm
2008 sed
2009 sort
2010 touch
2011 tr
2012 uniq
2013 "
2014 trylist="
2015 Mcc
2016 ar
2017 bison
2018 byacc
2019 cpp
2020 csh
2021 date
2022 egrep
2023 gzip
2024 less
2025 ln
2026 more
2027 nm
2028 nroff
2029 pg
2030 test
2031 uname
2032 zip
2033 "
2034 pth=`echo $PATH | sed -e "s/$p_/ /g"`
2035 pth="$pth /lib /usr/lib"
2036 for file in $loclist; do
2037         eval xxx=\$$file
2038         case "$xxx" in
2039         /*|?:[\\/]*)
2040                 if test -f "$xxx"; then
2041                         : ok
2042                 else
2043                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2044                         xxx=`./loc $file $file $pth`
2045                 fi
2046                 ;;
2047         '') xxx=`./loc $file $file $pth`;;
2048         *) xxx=`./loc $xxx $xxx $pth`;;
2049         esac
2050         eval $file=$xxx
2051         eval _$file=$xxx
2052         case "$xxx" in
2053         /*)
2054                 echo $file is in $xxx.
2055                 ;;
2056         ?:[\\/]*)
2057                 echo $file is in $xxx.
2058                 ;;
2059         *)
2060                 echo "I don't know where '$file' is, and my life depends on it." >&4
2061                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2062                 exit 1
2063                 ;;
2064         esac
2065 done
2066 echo " "
2067 echo "Don't worry if any of the following aren't found..."
2068 say=offhand
2069 for file in $trylist; do
2070         eval xxx=\$$file
2071         case "$xxx" in
2072         /*|?:[\\/]*)
2073                 if test -f "$xxx"; then
2074                         : ok
2075                 else
2076                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2077                         xxx=`./loc $file $file $pth`
2078                 fi
2079                 ;;
2080         '') xxx=`./loc $file $file $pth`;;
2081         *) xxx=`./loc $xxx $xxx $pth`;;
2082         esac
2083         eval $file=$xxx
2084         eval _$file=$xxx
2085         case "$xxx" in
2086         /*)
2087                 echo $file is in $xxx.
2088                 ;;
2089         ?:[\\/]*)
2090                 echo $file is in $xxx.
2091                 ;;
2092         *)
2093                 echo "I don't see $file out there, $say."
2094                 say=either
2095                 ;;
2096         esac
2097 done
2098 case "$egrep" in
2099 egrep)
2100         echo "Substituting grep for egrep."
2101         egrep=$grep
2102         ;;
2103 esac
2104 case "$ln" in
2105 ln)
2106         echo "Substituting cp for ln."
2107         ln=$cp
2108         ;;
2109 esac
2110 case "$test" in
2111 test)
2112         echo "Hopefully test is built into your sh."
2113         ;;
2114 *)
2115         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2116                 echo "Using the test built into your sh."
2117                 test=test
2118                 _test=test
2119         fi
2120         ;;
2121 esac
2122 case "$echo" in
2123 echo)
2124         echo "Hopefully echo is built into your sh."
2125         ;;
2126 '') ;;
2127 *)
2128         echo " "
2129 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2130         $echo $n "hi there$c" >foo1
2131         echo $n "hi there$c" >foo2
2132         if cmp foo1 foo2 >/dev/null 2>&1; then
2133                 echo "They are compatible.  In fact, they may be identical."
2134         else
2135                 case "$n" in
2136                 '-n') n='' c='\c';;
2137                 *) n='-n' c='';;
2138                 esac
2139                 cat <<FOO
2140 They are not compatible!  You are probably running ksh on a non-USG system.
2141 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2142 have echo built in and we may have to run some Bourne shell scripts.  That
2143 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2144
2145 FOO
2146                 $echo $n "The star should be here-->$c"
2147                 $echo "*"
2148         fi
2149         $rm -f foo1 foo2
2150         ;;
2151 esac
2152
2153 cat <<EOS >checkcc
2154 $startsh
2155 EOS
2156 cat <<'EOSC' >>checkcc
2157 case "$cc" in
2158 '') ;;
2159 *)  $rm -f try try.*
2160     $cat >try.c <<EOM
2161 int main(int argc, char *argv[]) {
2162   return 0;
2163 }
2164 EOM
2165     if $cc -o try $ccflags $ldflags try.c; then
2166        :
2167     else
2168         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2169         despair=yes
2170         trygcc=yes
2171         case "$cc" in
2172         *gcc*) trygcc=no ;;
2173         esac
2174         case "`$cc -v -c try.c 2>&1`" in
2175         *gcc*) trygcc=no ;;
2176         esac
2177         if $test X"$trygcc" = Xyes; then
2178             if gcc -o try -c try.c; then
2179                 echo " "
2180                 echo "You seem to have a working gcc, though." >&4
2181                 rp="Would you like to use it?"
2182                 dflt=y
2183                 if $test -f myread; then
2184                     . ./myread
2185                 else
2186                     if $test -f UU/myread; then
2187                         . ./UU/myread
2188                     else
2189                         echo "Cannot find myread, sorry.  Aborting." >&2
2190                         exit 1
2191                     fi
2192                 fi  
2193                 case "$ans" in
2194                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2195                 esac
2196             fi
2197         fi
2198         if $test X"$despair" = Xyes; then
2199             $cat >&4 <<EOM
2200 You need to find a working C compiler.
2201 Either (purchase and) install the C compiler supplied by your OS vendor,
2202 or for a free C compiler try http://gcc.gnu.org/
2203 I cannot continue any further, aborting.
2204 EOM
2205             exit 1
2206         fi
2207     fi
2208     $rm -f try try.*
2209     ;;
2210 esac
2211 EOSC
2212
2213 : determine whether symbolic links are supported
2214 echo " "
2215 $touch blurfl
2216 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2217         echo "Symbolic links are supported." >&4
2218         lns="$ln -s"
2219 else
2220         echo "Symbolic links are NOT supported." >&4
2221         lns="$ln"
2222 fi
2223 $rm -f blurfl sym
2224
2225 : determine whether symbolic links are supported
2226 echo " "
2227 case "$lns" in
2228 *"ln -s")
2229         echo "Checking how to test for symbolic links..." >&4
2230         $lns blurfl sym
2231         if $test "X$issymlink" = X; then
2232                 sh -c "PATH= test -h sym" >/dev/null 2>&1
2233                 if test $? = 0; then
2234                         issymlink="test -h"
2235                 fi              
2236         fi
2237         if $test "X$issymlink" = X; then
2238                 if  $test -h >/dev/null 2>&1; then
2239                         issymlink="$test -h"
2240                         echo "Your builtin 'test -h' may be broken, I'm using external '$test -h'." >&4
2241                 fi              
2242         fi
2243         if $test "X$issymlink" = X; then
2244                 if $test -L sym 2>/dev/null; then
2245                         issymlink="$test -L"
2246                 fi
2247         fi
2248         if $test "X$issymlink" != X; then
2249                 echo "You can test for symbolic links with '$issymlink'." >&4
2250         else
2251                 echo "I do not know how you can test for symbolic links." >&4
2252         fi
2253         $rm -f blurfl sym
2254         ;;
2255 *)      echo "No symbolic links, so not testing for their testing..." >&4
2256         ;;
2257 esac
2258 echo " "
2259
2260
2261 case "$mksymlinks" in
2262 $define|true|[yY]*)
2263         case "$src" in
2264         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2265                 exit 1
2266                 ;;
2267         *)      case "$lns:$issymlink" in
2268                 *"ln -s:"*"test -"?)
2269                         echo "Creating the symbolic links..." >&4
2270                         echo "(First creating the subdirectories...)" >&4
2271                         cd ..
2272                         awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | sort -u | while true; do
2273                                 read directory
2274                                 test -z "$directory" && break
2275                                 mkdir -p $directory
2276                         done
2277                         # Sanity check 1.
2278                         if test ! -d t/base; then
2279                                 echo "Failed to create the subdirectories.  Aborting." >&4
2280                                 exit 1
2281                         fi
2282                         echo "(Then creating the symlinks...)" >&4
2283                         awk '{print $1}' $src/MANIFEST | while true; do
2284                                 read filename
2285                                 test -z "$filename" && break
2286                                 if test -f $filename; then
2287                                         if $issymlink $filename; then
2288                                                 rm -f $filename
2289                                         fi
2290                                 fi
2291                                 if test -f $filename; then
2292                                         echo "$filename already exists, not symlinking."
2293                                 else
2294                                         ln -s $src/$filename $filename
2295                                 fi
2296                         done
2297                         # Sanity check 2.
2298                         if test ! -f t/base/commonsense.t; then
2299                                 echo "Failed to create the symlinks.  Aborting." >&4
2300                                 exit 1
2301                         fi
2302                         cd UU
2303                         ;;
2304                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2305                         ;;
2306                 esac
2307                 ;;
2308         esac
2309         ;;
2310 esac
2311
2312
2313 case "$usecrosscompile" in
2314 $define|true|[yY]*)
2315         $echo "Cross-compiling..."
2316         croak=''
2317         case "$cc" in
2318         *-*-gcc) # A cross-compiling gcc, probably.
2319             targetarch=`$echo $cc|$sed 's/-gcc$//'`
2320             ar=$targetarch-ar
2321             # leave out ld, choosing it is more complex
2322             nm=$targetarch-nm
2323             ranlib=$targetarch-ranlib
2324             $echo 'extern int foo;' > try.c
2325             set X `$cc -v -E perl.c 2>&1 | $awk '/^#include </,/^End of search /'|$grep '/include'`
2326             shift
2327             if $test $# -gt 0; then
2328                 incpth="$incpth $*"
2329                 incpth="$echo $incpth|$sed 's/^ //'"
2330                 echo "Guessing incpth $incpth" >&4
2331                 for i in $*; do
2332                     j=`$echo $i|$sed 's,/include$,/lib,'`
2333                     if $test -d $j; then
2334                         libpth="$libpth $j"
2335                     fi
2336                 done   
2337                 libpth="$echo $libpth|$sed 's/^ //'"
2338                 echo "Guessing libpth $libpth." >&4
2339             fi
2340             $rm -f try.c
2341             ;;
2342         esac
2343         case "$targetarch" in
2344         '') echo "Targetarch not defined." >&4; croak=y ;;
2345         *)  echo "Using targetarch $targetarch." >&4 ;;
2346         esac
2347         case "$incpth" in
2348         '') echo "Incpth not defined." >&4; croak=y ;;
2349         *)  echo "Using incpth $incpth." >&4 ;;
2350         esac
2351         case "$libpth" in
2352         '') echo "Libpth not defined." >&4; croak=y ;;
2353         *)  echo "Using libpth $libpth." >&4 ;;
2354         esac
2355         case "$usrinc" in
2356         '') for i in $incpth; do
2357                 if $test -f $i/errno.h -a -f $i/stdio.h -a -f $i/time.h; then
2358                     usrinc=$i
2359                     echo "Guessing usrinc $usrinc." >&4
2360                     break
2361                 fi
2362             done
2363             case "$usrinc" in
2364             '') echo "Usrinc not defined." >&4; croak=y ;;
2365             esac
2366             ;;
2367         *)  echo "Using usrinc $usrinc." >&4 ;;
2368         esac
2369         case "$targethost" in
2370         '') echo "Targethost not defined." >&4; croak=y ;;
2371         *)  echo "Using targethost $targethost." >&4
2372         esac
2373         locincpth=' '
2374         loclibpth=' '
2375         case "$croak" in
2376         y) echo "Cannot continue, aborting." >&4; exit 1 ;;
2377         esac
2378         case "$src" in
2379         /*) run=$src/Cross/run
2380             targetmkdir=$src/Cross/mkdir
2381             to=$src/Cross/to
2382             from=$src/Cross/from
2383             ;;
2384         *)  pwd=`$test -f ../Configure & cd ..; pwd`
2385             run=$pwd/Cross/run
2386             targetmkdir=$pwd/Cross/mkdirkrun
2387             to=$pwd/Cross/to
2388             from=$pwd/Cross/from
2389             ;;
2390         esac
2391         case "$targetrun" in
2392         '') targetrun=ssh ;;
2393         esac
2394         case "$targetto" in
2395         '') targetto=scp ;;
2396         esac
2397         case "$targetfrom" in
2398         '') targetfrom=scp ;;
2399         esac
2400         run=$run-$targetrun
2401         to=$to-$targetto
2402         from=$from-$targetfrom
2403         case "$targetdir" in
2404         '')  targetdir=/tmp
2405              echo "Guessing targetdir $targetdir." >&4
2406              ;;
2407         esac
2408         case "$targetuser" in
2409         '')  targetuser=root
2410              echo "Guessing targetuser $targetuser." >&4
2411              ;;
2412         esac
2413         case "$targetfrom" in
2414         scp)    q=-q ;;
2415         *)      q='' ;;
2416         esac
2417         case "$targetrun" in
2418         ssh|rsh)
2419             cat >$run <<EOF
2420 #!/bin/sh
2421 case "\$1" in
2422 -cwd)
2423   shift
2424   cwd=\$1
2425   shift
2426   ;;
2427 esac
2428 case "\$cwd" in
2429 '') cwd=$targetdir ;;
2430 esac
2431 exe=\$1
2432 shift
2433 if $test ! -f \$exe.xok; then
2434   $to \$exe
2435   $touch \$exe.xok
2436 fi
2437 $targetrun -l $targetuser $targethost "cd \$cwd && ./\$exe \$@"
2438 EOF
2439             ;;
2440         *)  echo "Unknown targetrun '$targetrun'" >&4
2441             exit 1
2442             ;;
2443         esac
2444         case "$targetmkdir" in
2445         */Cross/mkdir)
2446             cat >$targetmkdir <<EOF
2447 #!/bin/sh
2448 $targetrun -l $targetuser $targethost "mkdir -p \$@"
2449 EOF
2450             ;;
2451         *)  echo "Unknown targetmkdir '$targetmkdir'" >&4
2452             exit 1
2453             ;;
2454         esac
2455         case "$targetto" in
2456         scp|rcp)
2457             cat >$to <<EOF
2458 #!/bin/sh
2459 for f in \$@
2460 do
2461   case "\$f" in
2462   /*)
2463     $targetmkdir \`dirname \$f\`
2464     $targetto $q \$f $targetuser@$targethost:\$f            || exit 1
2465     ;;
2466   *)
2467     $targetmkdir $targetdir/\`dirname \$f\`
2468     $targetto $q \$f $targetuser@$targethost:$targetdir/\$f || exit 1
2469     ;;
2470   esac
2471 done
2472 exit 0
2473 EOF
2474             ;;
2475         cp) cat >$to <<EOF
2476 #!/bin/sh
2477 for f in \$@
2478 do
2479   case "\$f" in
2480   /*)
2481     $mkdir -p $targetdir/\`dirname \$f\`
2482     $cp \$f $targetdir/\$f || exit 1
2483     ;;
2484   *)
2485     $targetmkdir $targetdir/\`dirname \$f\`
2486     $cp \$f $targetdir/\$f || exit 1
2487     ;;
2488   esac
2489 done
2490 exit 0
2491 EOF
2492             ;;
2493         *)  echo "Unknown targetto '$targetto'" >&4
2494             exit 1
2495             ;;
2496         esac
2497         case "$targetfrom" in
2498         scp|rcp)
2499           cat >$from <<EOF
2500 #!/bin/sh
2501 for f in \$@
2502 do
2503   $rm -f \$f
2504   $targetfrom $q $targetuser@$targethost:$targetdir/\$f . || exit 1
2505 done
2506 exit 0
2507 EOF
2508             ;;
2509         cp) cat >$from <<EOF
2510 #!/bin/sh
2511 for f in \$@
2512 do
2513   $rm -f \$f
2514   cp $targetdir/\$f . || exit 1
2515 done
2516 exit 0
2517 EOF
2518             ;;
2519         *)  echo "Unknown targetfrom '$targetfrom'" >&4
2520             exit 1
2521             ;;
2522         esac
2523         if $test ! -f $run; then
2524             echo "Target 'run' script '$run' not found." >&4
2525         else
2526             chmod a+rx $run
2527         fi
2528         if $test ! -f $to; then
2529             echo "Target 'to' script '$to' not found." >&4
2530         else
2531             chmod a+rx $to
2532         fi
2533         if $test ! -f $from; then
2534             echo "Target 'from' script '$from' not found." >&4
2535         else
2536             chmod a+rx $from
2537         fi
2538         if $test ! -f $run -o ! -f $to -o ! -f $from; then
2539             exit 1
2540         fi
2541         cat >&4 <<EOF
2542 Using '$run' for remote execution, and '$from' and '$to'
2543 for remote file transfer.
2544 EOF
2545         ;;
2546 *)      run=''
2547         to=:
2548         from=:
2549         usecrosscompile='undef'
2550         targetarch=''
2551         ;;
2552 esac
2553
2554 : see whether [:lower:] and [:upper:] are supported character classes
2555 echo " "
2556 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2557 ABYZ)
2558         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2559         up='[:upper:]'
2560         low='[:lower:]'
2561         ;;
2562 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2563         # (0xc9 and 0xd1), therefore that is a nice testing point.
2564         if test "X$up" = X -o "X$low" = X; then
2565             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2566             ij) up='[A-Z]'
2567                 low='[a-z]'
2568                 ;;
2569             esac
2570         fi
2571         if test "X$up" = X -o "X$low" = X; then
2572             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2573             ij) up='A-Z'
2574                 low='a-z'
2575                 ;;
2576             esac
2577         fi
2578         if test "X$up" = X -o "X$low" = X; then
2579             case "`echo IJ | od -x 2>/dev/null`" in
2580             *C9D1*|*c9d1*)
2581                 echo "Hey, this might be EBCDIC." >&4
2582                 if test "X$up" = X -o "X$low" = X; then
2583                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2584                     ij) up='[A-IJ-RS-Z]'
2585                         low='[a-ij-rs-z]'
2586                         ;;
2587                     esac
2588                 fi
2589                 if test "X$up" = X -o "X$low" = X; then
2590                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2591                     ij) up='A-IJ-RS-Z'
2592                         low='a-ij-rs-z'
2593                         ;;
2594                     esac
2595                 fi
2596                 ;;
2597             esac
2598         fi
2599 esac
2600 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2601 ij)
2602     echo "Using $up and $low to convert case." >&4
2603     ;;
2604 *)
2605     echo "I don't know how to translate letters from upper to lower case." >&4
2606     echo "Your tr is not acting any way I know of." >&4
2607     exit 1
2608     ;;
2609 esac
2610 : set up the translation script tr, must be called with ./tr of course
2611 cat >tr <<EOSC
2612 $startsh
2613 case "\$1\$2" in
2614 '[A-Z][a-z]') exec $tr '$up' '$low';;
2615 '[a-z][A-Z]') exec $tr '$low' '$up';;
2616 esac
2617 exec $tr "\$@"
2618 EOSC
2619 chmod +x tr
2620 $eunicefix tr
2621
2622 : Try to determine whether config.sh was made on this system
2623 case "$config_sh" in
2624 '')
2625 myuname=`$uname -a 2>/dev/null`
2626 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2627 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2628 # because the A-Z/a-z are not consecutive.
2629 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2630         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2631 newmyuname="$myuname"
2632 dflt=n
2633 case "$knowitall" in
2634 '')
2635         if test -f ../config.sh; then
2636                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2637                         eval "`grep myuname= ../config.sh`"
2638                 fi
2639                 if test "X$myuname" = "X$newmyuname"; then
2640                         dflt=y
2641                 fi
2642         fi
2643         ;;
2644 *) dflt=y;;
2645 esac
2646
2647 : Get old answers from old config file if Configure was run on the
2648 : same system, otherwise use the hints.
2649 hint=default
2650 cd ..
2651 if test -f config.sh; then
2652         echo " "
2653         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2654         . UU/myread
2655         case "$ans" in
2656         n*|N*) echo "OK, I'll ignore it."
2657                 mv config.sh config.sh.old
2658                 myuname="$newmyuname"
2659                 ;;
2660         *)  echo "Fetching default answers from your old config.sh file..." >&4
2661                 tmp_n="$n"
2662                 tmp_c="$c"
2663                 tmp_sh="$sh"
2664                 . ./config.sh
2665                 cp config.sh UU
2666                 n="$tmp_n"
2667                 c="$tmp_c"
2668                 : Older versions did not always set $sh.  Catch re-use of such
2669                 : an old config.sh.
2670                 case "$sh" in
2671                 '') sh="$tmp_sh" ;;
2672                 esac
2673                 hint=previous
2674                 ;;
2675         esac
2676 fi
2677 . ./UU/checkcc
2678 if test ! -f config.sh; then
2679         $cat <<EOM
2680
2681 First time through, eh?  I have some defaults handy for some systems
2682 that need some extra help getting the Configure answers right:
2683
2684 EOM
2685         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2686         dflt=''
2687         : Half the following guesses are probably wrong... If you have better
2688         : tests or hints, please send them to perlbug@perl.org
2689         : The metaconfig authors would also appreciate a copy...
2690         $test -f /irix && osname=irix
2691         $test -f /xenix && osname=sco_xenix
2692         $test -f /dynix && osname=dynix
2693         $test -f /dnix && osname=dnix
2694         $test -f /lynx.os && osname=lynxos
2695         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2696         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2697         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2698         $test -f /bin/mips && /bin/mips && osname=mips
2699         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2700                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2701         $test -d /usr/apollo/bin && osname=apollo
2702         $test -f /etc/saf/_sactab && osname=svr4
2703         $test -d /usr/include/minix && osname=minix
2704         if $test -d /MachTen -o -d /MachTen_Folder; then
2705                 osname=machten
2706                 if $test -x /sbin/version; then
2707                         osvers=`/sbin/version | $awk '{print $2}' |
2708                         $sed -e 's/[A-Za-z]$//'`
2709                 elif $test -x /usr/etc/version; then
2710                         osvers=`/usr/etc/version | $awk '{print $2}' |
2711                         $sed -e 's/[A-Za-z]$//'`
2712                 else
2713                         osvers="$2.$3"
2714                 fi
2715         fi
2716
2717         $test -f /sys/posix.dll &&
2718                 $test -f /usr/bin/what &&
2719                 set X `/usr/bin/what /sys/posix.dll` &&
2720                 $test "$3" = UWIN &&
2721                 osname=uwin &&
2722                 osvers="$5"
2723
2724         if $test -f $uname; then
2725                 set X $myuname
2726                 shift
2727
2728                 case "$5" in
2729                 fps*) osname=fps ;;
2730                 mips*)
2731                         case "$4" in
2732                         umips) osname=umips ;;
2733                         *) osname=mips ;;
2734                         esac;;
2735                 [23]100) osname=mips ;;
2736                 next*) osname=next ;;
2737                 i386*)
2738                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2739                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2740                                 osname='sco'
2741                                 osvers=$tmp
2742                         elif $test -f /etc/kconfig; then
2743                                 osname=isc
2744                                 if test "$lns" = "$ln -s"; then
2745                                         osvers=4
2746                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2747                                         osvers=3
2748                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2749                                         osvers=2
2750                                 fi
2751                         fi
2752                         tmp=''
2753                         ;;
2754                 pc*)
2755                         if test -n "$DJGPP"; then
2756                                 osname=dos
2757                                 osvers=djgpp
2758                         fi
2759                         ;;
2760                 esac
2761
2762                 case "$1" in
2763                 aix) osname=aix
2764                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2765                         case "$tmp" in
2766                         'not found') osvers="$4"."$3" ;;
2767                         '<3240'|'<>3240') osvers=3.2.0 ;;
2768                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2769                         '=3250'|'>3250') osvers=3.2.5 ;;
2770                         *) osvers=$tmp;;
2771                         esac
2772                         ;;
2773                 bsd386) osname=bsd386
2774                         osvers=`$uname -r`
2775                         ;;
2776                 cygwin*) osname=cygwin
2777                         osvers="$3"
2778                         ;;
2779                 *dc.osx) osname=dcosx
2780                         osvers="$3"
2781                         ;;
2782                 dnix) osname=dnix
2783                         osvers="$3"
2784                         ;;
2785                 domainos) osname=apollo
2786                         osvers="$3"
2787                         ;;
2788                 dgux) osname=dgux 
2789                         osvers="$3"
2790                         ;;
2791                 dynixptx*) osname=dynixptx
2792                         osvers=`echo "$4"|sed 's/^v//'`
2793                         ;;
2794                 freebsd) osname=freebsd 
2795                         osvers="$3" ;;
2796                 genix) osname=genix ;;
2797                 hp*) osname=hpux 
2798                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2799                         ;;
2800                 irix*) osname=irix
2801                         case "$3" in
2802                         4*) osvers=4 ;;
2803                         5*) osvers=5 ;;
2804                         *)      osvers="$3" ;;
2805                         esac
2806                         ;;
2807                 linux) osname=linux
2808                         case "$3" in
2809                         *)      osvers="$3" ;;
2810                         esac
2811                         ;;
2812                 MiNT) osname=mint
2813                         ;;
2814                 netbsd*) osname=netbsd
2815                         osvers="$3"
2816                         ;;
2817                 news-os) osvers="$3"
2818                         case "$3" in
2819                         4*) osname=newsos4 ;;
2820                         *) osname=newsos ;;
2821                         esac
2822                         ;;
2823                 next*) osname=next ;;
2824                 nonstop-ux) osname=nonstopux ;;
2825                 POSIX-BC | posix-bc ) osname=posix-bc
2826                         osvers="$3"
2827                         ;;
2828                 powerux | power_ux | powermax_os | powermaxos | \
2829                 powerunix | power_unix) osname=powerux
2830                         osvers="$3"
2831                         ;;
2832                 qnx) osname=qnx
2833                         osvers="$4"
2834                         ;;
2835                 solaris) osname=solaris
2836                         case "$3" in
2837                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2838                         *)      osvers="$3" ;;
2839                         esac
2840                         ;;
2841                 sunos) osname=sunos
2842                         case "$3" in
2843                         5*) osname=solaris
2844                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2845                         *)      osvers="$3" ;;
2846                         esac
2847                         ;;
2848                 titanos) osname=titanos
2849                         case "$3" in
2850                         1*) osvers=1 ;;
2851                         2*) osvers=2 ;;
2852                         3*) osvers=3 ;;
2853                         4*) osvers=4 ;;
2854                         *)      osvers="$3" ;;
2855                         esac
2856                         ;;
2857                 ultrix) osname=ultrix
2858                         osvers="$3"
2859                         ;;
2860                 osf1|mls+)      case "$5" in
2861                                 alpha)
2862                                         osname=dec_osf
2863                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
2864                                         case "$osvers" in
2865                                         [1-9].[0-9]*) ;;
2866                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
2867                                         esac
2868                                         ;;
2869                         hp*)    osname=hp_osf1  ;;
2870                         mips)   osname=mips_osf1 ;;
2871                         esac
2872                         ;;
2873                 unixware) osname=svr5
2874                         osvers="$4"
2875                         ;;
2876                 uts) osname=uts
2877                         osvers="$3"
2878                         ;;
2879                 $2) case "$osname" in
2880                         *isc*) ;;
2881                         *freebsd*) ;;
2882                         svr*)
2883                                 : svr4.x or possibly later
2884                                 case "svr$3" in 
2885                                 ${osname}*)
2886                                         osname=svr$3
2887                                         osvers=$4
2888                                         ;;
2889                                 esac
2890                                 case "$osname" in
2891                                 svr4.0)
2892                                         : Check for ESIX
2893                                         if test -f /stand/boot ; then
2894                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2895                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2896                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2897                                                         if test -n "$isesix"; then
2898                                                                 osname=esix4
2899                                                         fi
2900                                                 fi
2901                                         fi
2902                                         ;;
2903                                 esac
2904                                 ;;
2905                         *)      if test -f /etc/systemid; then
2906                                         osname=sco
2907                                         set `echo $3 | $sed 's/\./ /g'` $4
2908                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2909                                                 osvers=$1.$2.$3
2910                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2911                                                 osvers=$1.$2
2912                                         elif $test -f $src/hints/sco_$1.sh; then
2913                                                 osvers=$1
2914                                         fi
2915                                 else
2916                                         case "$osname" in
2917                                         '') : Still unknown.  Probably a generic Sys V.
2918                                                 osname="sysv"
2919                                                 osvers="$3"
2920                                                 ;;
2921                                         esac
2922                                 fi
2923                                 ;;
2924                         esac
2925                         ;;
2926                 *)      case "$osname" in
2927                         '') : Still unknown.  Probably a generic BSD.
2928                                 osname="$1"
2929                                 osvers="$3"
2930                                 ;;
2931                         esac
2932                         ;;
2933                 esac
2934         else
2935                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2936                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2937                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2938                                 osname=news_os
2939                         fi
2940                         $rm -f UU/kernel.what
2941                 elif test -d c:/.; then
2942                         set X $myuname
2943                         osname=os2
2944                         osvers="$5"
2945                 fi
2946         fi
2947         
2948         case "$targetarch" in
2949         '') ;;
2950         *)  hostarch=$osname
2951             osname=`echo $targetarch|sed 's,^[^-]*-,,'`
2952             osvers=''
2953             ;;
2954         esac
2955
2956         : Now look for a hint file osname_osvers, unless one has been
2957         : specified already.
2958         case "$hintfile" in
2959         ''|' ')
2960                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
2961                 : Also try without trailing minor version numbers.
2962                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
2963                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
2964                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
2965                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
2966                 case "$file" in
2967                 '') dflt=none ;;
2968                 *)  case "$osvers" in
2969                         '') dflt=$file
2970                                 ;;
2971                         *)  if $test -f $src/hints/$file.sh ; then
2972                                         dflt=$file
2973                                 elif $test -f $src/hints/$xfile.sh ; then
2974                                         dflt=$xfile
2975                                 elif $test -f $src/hints/$xxfile.sh ; then
2976                                         dflt=$xxfile
2977                                 elif $test -f $src/hints/$xxxfile.sh ; then
2978                                         dflt=$xxxfile
2979                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2980                                         dflt=$xxxxfile
2981                                 elif $test -f "$src/hints/${osname}.sh" ; then
2982                                         dflt="${osname}"
2983                                 else
2984                                         dflt=none
2985                                 fi
2986                                 ;;
2987                         esac
2988                         ;;
2989                 esac
2990                 if $test -f Policy.sh ; then
2991                         case "$dflt" in
2992                         *Policy*) ;;
2993                         none) dflt="Policy" ;;
2994                         *) dflt="Policy $dflt" ;;
2995                         esac
2996                 fi
2997                 ;;
2998         *)
2999                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
3000                 ;;
3001         esac
3002
3003         if $test -f Policy.sh ; then
3004                 $cat <<EOM
3005
3006 There's also a Policy hint file available, which should make the
3007 site-specific (policy) questions easier to answer.
3008 EOM
3009
3010         fi
3011
3012         $cat <<EOM
3013
3014 You may give one or more space-separated answers, or "none" if appropriate.
3015 A well-behaved OS will have no hints, so answering "none" or just "Policy"
3016 is a good thing.  DO NOT give a wrong version or a wrong OS.
3017
3018 EOM
3019
3020         rp="Which of these apply, if any?"
3021         . UU/myread
3022         tans=$ans
3023         for file in $tans; do
3024                 if $test X$file = XPolicy -a -f Policy.sh; then
3025                         . Policy.sh
3026                         $cat Policy.sh >> UU/config.sh
3027                 elif $test -f $src/hints/$file.sh; then
3028                         . $src/hints/$file.sh
3029                         $cat $src/hints/$file.sh >> UU/config.sh
3030                 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
3031                         : nothing
3032                 else
3033                         : Give one chance to correct a possible typo.
3034                         echo "$file.sh does not exist"
3035                         dflt=$file
3036                         rp="hint to use instead?"
3037                         . UU/myread
3038                         for file in $ans; do
3039                                 if $test -f "$src/hints/$file.sh"; then
3040                                         . $src/hints/$file.sh
3041                                         $cat $src/hints/$file.sh >> UU/config.sh
3042                                 elif $test X$ans = X -o X$ans = Xnone ; then
3043                                         : nothing
3044                                 else
3045                                         echo "$file.sh does not exist -- ignored."
3046                                 fi
3047                         done
3048                 fi
3049         done
3050
3051         hint=recommended
3052         : Remember our hint file for later.
3053         if $test -f "$src/hints/$file.sh" ; then
3054                 hintfile="$file"
3055         else
3056                 hintfile=''
3057         fi
3058 fi
3059 cd UU
3060 ;;
3061 *)
3062         echo " "
3063         echo "Fetching default answers from $config_sh..." >&4
3064         tmp_n="$n"
3065         tmp_c="$c"
3066         cd ..
3067         cp $config_sh config.sh 2>/dev/null
3068         chmod +w config.sh
3069         . ./config.sh
3070         cd UU
3071         cp ../config.sh .
3072         n="$tmp_n"
3073         c="$tmp_c"
3074         hint=previous
3075         ;;
3076 esac
3077 test "$override" && . ./optdef.sh
3078
3079 : Restore computed paths
3080 for file in $loclist $trylist; do
3081         eval $file="\$_$file"
3082 done
3083
3084 cat << EOM
3085
3086 Configure uses the operating system name and version to set some defaults.
3087 The default value is probably right if the name rings a bell. Otherwise,
3088 since spelling matters for me, either accept the default or answer "none"
3089 to leave it blank.
3090
3091 EOM
3092 case "$osname" in
3093         ''|' ')
3094                 case "$hintfile" in
3095                 ''|' '|none) dflt=none ;;
3096                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
3097                 esac
3098                 ;;
3099         *) dflt="$osname" ;;
3100 esac
3101 rp="Operating system name?"
3102 . ./myread
3103 case "$ans" in
3104 none)  osname='' ;;
3105 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
3106 esac
3107 echo " "
3108 case "$osvers" in
3109         ''|' ')
3110                 case "$hintfile" in
3111                 ''|' '|none) dflt=none ;;
3112                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
3113                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
3114                         case "$dflt" in
3115                         ''|' ') dflt=none ;;
3116                         esac
3117                         ;;
3118                 esac
3119                 ;;
3120         *) dflt="$osvers" ;;
3121 esac
3122 rp="Operating system version?"
3123 . ./myread
3124 case "$ans" in
3125 none)  osvers='' ;;
3126 *) osvers="$ans" ;;
3127 esac
3128
3129
3130 . ./posthint.sh
3131
3132 : who configured the system
3133 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
3134 cf_by=`(logname) 2>/dev/null`
3135 case "$cf_by" in
3136 "")
3137         cf_by=`(whoami) 2>/dev/null`
3138         case "$cf_by" in
3139         "") cf_by=unknown ;;
3140         esac ;;
3141 esac
3142
3143 : set up the script used to warn in case of inconsistency
3144 cat <<EOS >whoa
3145 $startsh
3146 EOS
3147 cat <<'EOSC' >>whoa
3148 dflt=y
3149 echo " "
3150 echo "*** WHOA THERE!!! ***" >&4
3151 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
3152 rp="    Keep the $hint value?"
3153 . ./myread
3154 case "$ans" in
3155 y) td=$was; tu=$was;;
3156 esac
3157 EOSC
3158
3159 : function used to set $1 to $val
3160 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
3161 case "$val$was" in
3162 $define$undef) . ./whoa; eval "$var=\$td";;
3163 $undef$define) . ./whoa; eval "$var=\$tu";;
3164 *) eval "$var=$val";;
3165 esac'
3166
3167 case "$usethreads" in
3168 $define|true|[yY]*)     dflt='y';;
3169 *) dflt='n';;
3170 esac
3171 cat <<EOM
3172
3173 Perl can be built to take advantage of threads on some systems.
3174 To do so, Configure can be run with -Dusethreads.
3175
3176 Note that threading is a highly experimental feature, and
3177 some known race conditions still remain.  If you choose to try
3178 it, be very sure to not actually deploy it for production
3179 purposes.  README.threads has more details, and is required
3180 reading if you enable threads.
3181
3182 If this doesn't make any sense to you, just accept the default '$dflt'.
3183 EOM
3184 rp='Build a threading Perl?'
3185 . ./myread
3186 case "$ans" in
3187 y|Y)    val="$define" ;;
3188 *)      val="$undef" ;;
3189 esac
3190 set usethreads
3191 eval $setvar
3192
3193 case "$usethreads" in
3194 $define)
3195         $cat <<EOM
3196
3197 As of 5.5.640, Perl has two different internal threading implementations,
3198 the 5.005 version (5005threads) and an interpreter-based version
3199 (ithreads) that has one interpreter per thread.  Both are very 
3200 experimental.  This arrangement exists to help developers work out
3201 which one is better.
3202
3203 If you're a casual user, you probably don't want interpreter-threads
3204 at this time.  There doesn't yet exist a way to create threads from
3205 within Perl in this model, i.e., "use Thread;" will NOT work.
3206 EOM
3207         : Default to ithreads unless overridden on command line or with
3208         : old config.sh
3209         dflt='y'
3210         case "$use5005threads" in
3211                 $define|true|[yY]*) dflt='n';;
3212         esac
3213         case "$useithreads" in
3214                 $undef|false|[nN]*) dflt='n';;
3215         esac
3216         rp='Use interpreter-based ithreads?'
3217         . ./myread
3218         case "$ans" in
3219         y|Y)    val="$define" ;;
3220         *)      val="$undef" ;;
3221         esac
3222         set useithreads
3223         eval $setvar
3224         : Now set use5005threads to the opposite value.
3225         case "$useithreads" in
3226         $define) val="$undef" ;;
3227         *) val="$define" ;;
3228         esac
3229         set use5005threads
3230         eval $setvar
3231         ;;
3232 *)
3233         useithreads="$undef"
3234         use5005threads="$undef"
3235         ;;
3236 esac
3237
3238 case "$useithreads$use5005threads" in
3239 "$define$define")
3240         $cat >&4 <<EOM
3241
3242 You cannot have both the ithreads and the 5.005 threads enabled
3243 at the same time.  Disabling the 5.005 threads since they are
3244 much less stable than the ithreads.
3245
3246 EOM
3247         use5005threads="$undef"
3248         ;;
3249 esac
3250
3251 case "$d_oldpthreads" in
3252 '')     : Configure tests would be welcome here.  For now, assume undef.
3253         val="$undef" ;;
3254 *)      val="$d_oldpthreads" ;;
3255 esac
3256 set d_oldpthreads
3257 eval $setvar
3258
3259
3260 case "$usethreads" in
3261 "$define"|true|[yY]*)
3262 : Look for a hint-file generated 'call-back-unit'.  If the
3263 : user has specified that a threading perl is to be built,
3264 : we may need to set or change some other defaults.
3265         if $test -f usethreads.cbu; then
3266                 echo "Your platform has some specific hints for threaded builds, using them..."
3267                 . ./usethreads.cbu
3268         else
3269                 $cat <<EOM
3270 (Your platform doesn't have any specific hints for threaded builds.
3271  Assuming POSIX threads, then.)
3272 EOM
3273         fi
3274         ;;
3275 esac
3276
3277 cat <<EOM
3278
3279 Perl can be built so that multiple Perl interpreters can coexist
3280 within the same Perl executable.
3281 EOM
3282
3283 case "$useithreads" in
3284 $define)
3285         cat <<EOM
3286 This multiple interpreter support is required for interpreter-based threads.
3287 EOM
3288         val="$define"
3289         ;;
3290 *)      case "$usemultiplicity" in
3291         $define|true|[yY]*)     dflt='y';;
3292         *) dflt='n';;
3293         esac
3294         echo " "
3295         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
3296         rp='Build Perl for multiplicity?'
3297         . ./myread
3298         case "$ans" in
3299         y|Y)    val="$define" ;;
3300         *)      val="$undef" ;;
3301         esac
3302         ;;
3303 esac
3304 set usemultiplicity
3305 eval $setvar
3306
3307 : make some quick guesses about what we are up against
3308 echo " "
3309 $echo $n "Hmm...  $c"
3310 echo exit 1 >bsd
3311 echo exit 1 >usg
3312 echo exit 1 >v7
3313 echo exit 1 >osf1
3314 echo exit 1 >eunice
3315 echo exit 1 >xenix
3316 echo exit 1 >venix
3317 echo exit 1 >os2
3318 d_bsd="$undef"
3319 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3320 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3321 then
3322         echo "Looks kind of like an OSF/1 system, but we'll see..."
3323         echo exit 0 >osf1
3324 elif test `echo abc | $tr a-z A-Z` = Abc ; then
3325         xxx=`./loc addbib blurfl $pth`
3326         if $test -f $xxx; then
3327         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3328                 echo exit 0 >bsd
3329                 echo exit 0 >usg
3330         else
3331                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3332                         echo "Looks kind of like an extended USG system, but we'll see..."
3333                 else
3334                         echo "Looks kind of like a USG system, but we'll see..."
3335                 fi
3336                 echo exit 0 >usg
3337         fi
3338 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3339         echo "Looks kind of like a BSD system, but we'll see..."
3340         d_bsd="$define"
3341         echo exit 0 >bsd
3342 else
3343         echo "Looks kind of like a Version 7 system, but we'll see..."
3344         echo exit 0 >v7
3345 fi
3346 case "$eunicefix" in
3347 *unixtovms*)
3348         $cat <<'EOI'
3349 There is, however, a strange, musty smell in the air that reminds me of
3350 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3351 EOI
3352         echo exit 0 >eunice
3353         d_eunice="$define"
3354 : it so happens the Eunice I know will not run shell scripts in Unix format
3355         ;;
3356 *)
3357         echo " "
3358         echo "Congratulations.  You aren't running Eunice."
3359         d_eunice="$undef"
3360         ;;
3361 esac
3362 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3363 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
3364 : semicolon as a patch separator
3365 case "$p_" in
3366 :) ;;
3367 *)
3368         $cat <<'EOI'
3369 I have the feeling something is not exactly right, however...don't tell me...
3370 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3371 (Or you may be running DOS with DJGPP.)
3372 EOI
3373         echo exit 0 >os2
3374         ;;
3375 esac
3376 if test -f /xenix; then
3377         echo "Actually, this looks more like a XENIX system..."
3378         echo exit 0 >xenix
3379         d_xenix="$define"
3380 else
3381         echo " "
3382         echo "It's not Xenix..."
3383         d_xenix="$undef"
3384 fi
3385 chmod +x xenix
3386 $eunicefix xenix
3387 if test -f /venix; then
3388         echo "Actually, this looks more like a VENIX system..."
3389         echo exit 0 >venix
3390 else
3391         echo " "
3392         if ./xenix; then
3393                 : null
3394         else
3395                 echo "Nor is it Venix..."
3396         fi
3397 fi
3398 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3399 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3400 $rm -f foo
3401
3402 case "$cc" in
3403 '') dflt=cc;;
3404 *) dflt="$cc";;
3405 esac
3406 rp="Use which C compiler?"
3407 . ./myread
3408 cc="$ans"
3409 : Look for a hint-file generated 'call-back-unit'.  Now that the
3410 : user has specified the compiler, we may need to set or change some
3411 : other defaults.
3412 if $test -f cc.cbu; then
3413     . ./cc.cbu
3414 fi
3415 . ./checkcc
3416
3417 echo " "
3418 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3419 $cat >try.c <<EOM
3420 #include <stdio.h>
3421 int main() {
3422 #ifdef __GNUC__
3423 #ifdef __VERSION__
3424         printf("%s\n", __VERSION__);
3425 #else
3426         printf("%s\n", "1");
3427 #endif
3428 #endif
3429         exit(0);
3430 }
3431 EOM
3432 if $cc -o try $ccflags $ldflags try.c; then
3433         gccversion=`$run ./try`
3434         case "$gccversion" in
3435         '') echo "You are not using GNU cc." ;;
3436         *)  echo "You are using GNU cc $gccversion."
3437             ccname=gcc  
3438             ;;
3439         esac
3440 else
3441         echo " "
3442         echo "*** WHOA THERE!!! ***" >&4
3443         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3444         case "$knowitall" in
3445         '')
3446         echo "    You'd better start hunting for one and let me know about it." >&4
3447                 exit 1
3448                 ;;
3449         esac
3450 fi
3451 $rm -f try try.*
3452 case "$gccversion" in
3453 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3454 esac
3455 case "$gccversion" in
3456 '') gccosandvers='' ;;
3457 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3458    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3459    gccshortvers=''
3460    case "$gccosandvers" in
3461    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3462    $osname$osvers) ;; # looking good
3463    $osname*) cat <<EOM >&4
3464
3465 *** WHOA THERE!!! ***
3466
3467     Your gcc has not been compiled for the exact release of
3468     your operating system ($gccosandvers versus $osname$osvers).
3469
3470     In general it is a good idea to keep gcc synchronized with
3471     the operating system because otherwise serious problems
3472     may ensue when trying to compile software, like Perl.
3473
3474     I'm trying to be optimistic here, though, and will continue.
3475     If later during the configuration and build icky compilation
3476     problems appear (headerfile conflicts being the most common
3477     manifestation), I suggest reinstalling the gcc to match
3478     your operating system release.
3479
3480 EOM
3481       ;;
3482    *) gccosandvers='' ;; # failed to parse, better be silent
3483    esac
3484    ;;
3485 esac
3486 case "$ccname" in
3487 '') ccname="$cc" ;;
3488 esac
3489
3490 case "$gccversion" in
3491 '') ;;
3492 *)  case "$ccflags" in
3493     *-Wall*) ;;
3494     *) ccflags="$ccflags -Wall" ;;
3495     esac
3496     ;;
3497 esac
3498
3499 : see how we invoke the C preprocessor
3500 echo " "
3501 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3502 cat <<'EOT' >testcpp.c
3503 #define ABC abc
3504 #define XYZ xyz
3505 ABC.XYZ
3506 EOT
3507 cd ..
3508 if test ! -f cppstdin; then
3509         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3510                 # AIX cc -E doesn't show the absolute headerfile
3511                 # locations but we'll cheat by using the -M flag.
3512                 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
3513         else
3514                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3515         fi
3516 else
3517         echo "Keeping your $hint cppstdin wrapper."
3518 fi
3519 chmod 755 cppstdin
3520 wrapper=`pwd`/cppstdin
3521 ok='false'
3522 cd UU
3523
3524 if $test "X$cppstdin" != "X" && \
3525         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3526         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3527 then
3528         echo "You used to use $cppstdin $cppminus so we'll use that again."
3529         case "$cpprun" in
3530         '') echo "But let's see if we can live without a wrapper..." ;;
3531         *)
3532                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3533                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3534                 then
3535                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3536                         ok='true'
3537                 else
3538                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3539                 fi
3540                 ;;
3541         esac
3542 else
3543         case "$cppstdin" in
3544         '') ;;
3545         *)
3546                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3547                 ;;
3548         esac
3549 fi
3550
3551 if $ok; then
3552         : nothing
3553 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3554         $cc -E <testcpp.c >testcpp.out 2>&1; \
3555         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3556         echo "Yup, it does."
3557         x_cpp="$cc -E"
3558         x_minus='';
3559 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3560         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3561         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3562         echo "Yup, it does."
3563         x_cpp="$cc -E"
3564         x_minus='-';
3565 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3566         $cc -P <testcpp.c >testcpp.out 2>&1; \
3567         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3568         echo "Yipee, that works!"
3569         x_cpp="$cc -P"
3570         x_minus='';
3571 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3572         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3573         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3574         echo "At long last!"
3575         x_cpp="$cc -P"
3576         x_minus='-';
3577 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3578         $cpp <testcpp.c >testcpp.out 2>&1; \
3579         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3580         echo "It works!"
3581         x_cpp="$cpp"
3582         x_minus='';
3583 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3584         $cpp - <testcpp.c >testcpp.out 2>&1; \
3585         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3586         echo "Hooray, it works!  I was beginning to wonder."
3587         x_cpp="$cpp"
3588         x_minus='-';
3589 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3590         $wrapper <testcpp.c >testcpp.out 2>&1; \
3591         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3592         x_cpp="$wrapper"
3593         x_minus=''
3594         echo "Eureka!"
3595 else
3596         dflt=''
3597         rp="No dice.  I can't find a C preprocessor.  Name one:"
3598         . ./myread
3599         x_cpp="$ans"
3600         x_minus=''
3601         $x_cpp <testcpp.c >testcpp.out 2>&1
3602         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3603                 echo "OK, that will do." >&4
3604         else
3605 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3606                 exit 1
3607         fi
3608 fi
3609
3610 case "$ok" in
3611 false)
3612         cppstdin="$x_cpp"
3613         cppminus="$x_minus"
3614         cpprun="$x_cpp"
3615         cpplast="$x_minus"
3616         set X $x_cpp
3617         shift
3618         case "$1" in
3619         "$cpp")
3620                 echo "Perhaps can we force $cc -E using a wrapper..."
3621                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3622                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3623                 then
3624                         echo "Yup, we can."
3625                         cppstdin="$wrapper"
3626                         cppminus='';
3627                 else
3628                         echo "Nope, we'll have to live without it..."
3629                 fi
3630                 ;;
3631         esac
3632         case "$cpprun" in
3633         "$wrapper")
3634                 cpprun=''
3635                 cpplast=''
3636                 ;;
3637         esac
3638         ;;
3639 esac
3640
3641 case "$cppstdin" in
3642 "$wrapper"|'cppstdin') ;;
3643 *) $rm -f $wrapper;;
3644 esac
3645 $rm -f testcpp.c testcpp.out
3646
3647 : decide how portable to be.  Allow command line overrides.
3648 case "$d_portable" in
3649 "$undef") ;;
3650 *)      d_portable="$define" ;;
3651 esac
3652
3653 : set up shell script to do ~ expansion
3654 cat >filexp <<EOSS
3655 $startsh
3656 : expand filename
3657 case "\$1" in
3658  ~/*|~)
3659         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3660         ;;
3661  ~*)
3662         if $test -f /bin/csh; then
3663                 /bin/csh -f -c "glob \$1"
3664                 failed=\$?
3665                 echo ""
3666                 exit \$failed
3667         else
3668                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3669                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3670                 if $test ! -d "\$dir"; then
3671                         me=\`basename \$0\`
3672                         echo "\$me: can't locate home directory for: \$name" >&2
3673                         exit 1
3674                 fi
3675                 case "\$1" in
3676                 */*)
3677                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3678                         ;;
3679                 *)
3680                         echo \$dir
3681                         ;;
3682                 esac
3683         fi
3684         ;;
3685 *)
3686         echo \$1
3687         ;;
3688 esac
3689 EOSS
3690 chmod +x filexp
3691 $eunicefix filexp
3692
3693 : now set up to get a file name
3694 cat <<EOS >getfile
3695 $startsh
3696 EOS
3697 cat <<'EOSC' >>getfile
3698 tilde=''
3699 fullpath=''
3700 already=''
3701 skip=''
3702 none_ok=''
3703 exp_file=''
3704 nopath_ok=''
3705 orig_rp="$rp"
3706 orig_dflt="$dflt"
3707 case "$gfpth" in
3708 '') gfpth='.' ;;
3709 esac
3710
3711 case "$fn" in
3712 *\(*)
3713         expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3714         fn=`echo $fn | sed 's/(.*)//'`
3715         ;;
3716 esac
3717
3718 case "$fn" in
3719 *:*)
3720         loc_file=`expr $fn : '.*:\(.*\)'`
3721         fn=`expr $fn : '\(.*\):.*'`
3722         ;;
3723 esac
3724
3725 case "$fn" in
3726 *~*) tilde=true;;
3727 esac
3728 case "$fn" in
3729 */*) fullpath=true;;
3730 esac
3731 case "$fn" in
3732 *+*) skip=true;;
3733 esac
3734 case "$fn" in
3735 *n*) none_ok=true;;
3736 esac
3737 case "$fn" in
3738 *e*) exp_file=true;;
3739 esac
3740 case "$fn" in
3741 *p*) nopath_ok=true;;
3742 esac
3743
3744 case "$fn" in
3745 *f*) type='File';;
3746 *d*) type='Directory';;
3747 *l*) type='Locate';;
3748 esac
3749
3750 what="$type"
3751 case "$what" in
3752 Locate) what='File';;
3753 esac
3754
3755 case "$exp_file" in
3756 '')
3757         case "$d_portable" in
3758         "$define") ;;
3759         *) exp_file=true;;
3760         esac
3761         ;;
3762 esac
3763
3764 cd ..
3765 while test "$type"; do
3766         redo=''
3767         rp="$orig_rp"
3768         dflt="$orig_dflt"
3769         case "$tilde" in
3770         true) rp="$rp (~name ok)";;
3771         esac
3772         . UU/myread
3773         if test -f UU/getfile.ok && \
3774                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3775         then
3776                 value="$ans"
3777                 ansexp="$ans"
3778                 break
3779         fi
3780         case "$ans" in
3781         none)
3782                 value=''
3783                 ansexp=''
3784                 case "$none_ok" in
3785                 true) type='';;
3786                 esac
3787                 ;;
3788         *)
3789                 case "$tilde" in
3790                 '') value="$ans"
3791                         ansexp="$ans";;
3792                 *)
3793                         value=`UU/filexp $ans`
3794                         case $? in
3795                         0)
3796                                 if test "$ans" != "$value"; then
3797                                         echo "(That expands to $value on this system.)"
3798                                 fi
3799                                 ;;
3800                         *) value="$ans";;
3801                         esac
3802                         ansexp="$value"
3803                         case "$exp_file" in
3804                         '') value="$ans";;
3805                         esac
3806                         ;;
3807                 esac
3808                 case "$fullpath" in
3809                 true)
3810                         case "$ansexp" in
3811                         /*) value="$ansexp" ;;
3812                         [a-zA-Z]:/*) value="$ansexp" ;;
3813                         *)
3814                                 redo=true
3815                                 case "$already" in
3816                                 true)
3817                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3818                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3819                                         ;;
3820                                 *)
3821                                 echo "Please give a full path name, starting with slash." >&4
3822                                         case "$tilde" in
3823                                         true)
3824                                 echo "Note that using ~name is ok provided it expands well." >&4
3825                                                 already=true
3826                                                 ;;
3827                                         esac
3828                                 esac
3829                                 ;;
3830                         esac
3831                         ;;
3832                 esac
3833                 case "$redo" in
3834                 '')
3835                         case "$type" in
3836                         File)
3837                                 for fp in $gfpth; do
3838                                         if test "X$fp" = X.; then
3839                                             pf="$ansexp"
3840                                         else    
3841                                             pf="$fp/$ansexp"
3842                                         fi
3843                                         if test -f "$pf"; then
3844                                                 type=''
3845                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3846                                         then
3847                                                 echo "($value is not a plain file, but that's ok.)"
3848                                                 type=''
3849                                         fi
3850                                         if test X"$type" = X; then
3851                                             value="$pf"
3852                                             break
3853                                         fi
3854                                 done
3855                                 ;;
3856                         Directory)
3857                                 for fp in $gfpth; do
3858                                         if test "X$fp" = X.; then
3859                                             dir="$ans"
3860                                             direxp="$ansexp"
3861                                         else    
3862                                             dir="$fp/$ansexp"
3863                                             direxp="$fp/$ansexp"
3864                                         fi
3865                                         if test -d "$direxp"; then
3866                                                 type=''
3867                                                 value="$dir"
3868                                                 break
3869                                         fi
3870                                 done
3871                                 ;;
3872                         Locate)
3873                                 if test -d "$ansexp"; then
3874                                         echo "(Looking for $loc_file in directory $value.)"
3875                                         value="$value/$loc_file"
3876                                         ansexp="$ansexp/$loc_file"
3877                                 fi
3878                                 if test -f "$ansexp"; then
3879                                         type=''
3880                                 fi
3881                                 case "$nopath_ok" in
3882                                 true)   case "$value" in
3883                                         */*) ;;
3884                                         *)      echo "Assuming $value will be in people's path."
3885                                                 type=''
3886                                                 ;;
3887                                         esac
3888                                         ;;
3889                                 esac
3890                                 ;;
3891                         esac
3892
3893                         case "$skip" in
3894                         true) type='';
3895                         esac
3896
3897                         case "$type" in
3898                         '') ;;
3899                         *)
3900                                 if test "$fastread" = yes; then
3901                                         dflt=y
3902                                 else
3903                                         dflt=n
3904                                 fi
3905                                 rp="$what $value doesn't exist.  Use that name anyway?"
3906                                 . UU/myread
3907                                 dflt=''
3908                                 case "$ans" in
3909                                 y*) type='';;
3910                                 *) echo " ";;
3911                                 esac
3912                                 ;;
3913                         esac
3914                         ;;
3915                 esac
3916                 ;;
3917         esac
3918 done
3919 cd UU
3920 ans="$value"
3921 rp="$orig_rp"
3922 dflt="$orig_dflt"
3923 rm -f getfile.ok
3924 test "X$gfpthkeep" != Xy && gfpth=""
3925 EOSC
3926
3927 : What should the include directory be ?
3928 echo " "
3929 $echo $n "Hmm...  $c"
3930 dflt='/usr/include'
3931 incpath=''
3932 mips_type=''
3933 if $test -f /bin/mips && /bin/mips; then
3934         echo "Looks like a MIPS system..."
3935         $cat >usr.c <<'EOCP'
3936 #ifdef SYSTYPE_BSD43
3937 /bsd43
3938 #endif
3939 EOCP
3940         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3941                 dflt='/bsd43/usr/include'
3942                 incpath='/bsd43'
3943                 mips_type='BSD 4.3'
3944         else
3945                 mips_type='System V'
3946         fi
3947         $rm -f usr.c usr.out
3948         echo "and you're compiling with the $mips_type compiler and libraries."
3949         xxx_prompt=y
3950         echo "exit 0" >mips
3951 else
3952         echo "Doesn't look like a MIPS system."
3953         xxx_prompt=n
3954         echo "exit 1" >mips
3955 fi
3956 chmod +x mips
3957 $eunicefix mips
3958 case "$usrinc" in
3959 '') ;;
3960 *) dflt="$usrinc";;
3961 esac
3962 case "$xxx_prompt" in
3963 y)      fn=d/
3964         echo " "
3965         rp='Where are the include files you want to use?'
3966         . ./getfile
3967         usrinc="$ans"
3968         ;;
3969 *)      usrinc="$dflt"
3970         ;;
3971 esac
3972
3973 : Set private lib path
3974 case "$plibpth" in
3975 '') if ./mips; then
3976                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3977         fi;;
3978 esac
3979 case "$libpth" in
3980 ' ') dlist='';;
3981 '') dlist="$loclibpth $plibpth $glibpth";;
3982 *) dlist="$libpth";;
3983 esac
3984
3985 : Now check and see which directories actually exist, avoiding duplicates
3986 libpth=''
3987 for xxx in $dlist
3988 do
3989     if $test -d $xxx; then
3990                 case " $libpth " in
3991                 *" $xxx "*) ;;
3992                 *) libpth="$libpth $xxx";;
3993                 esac
3994     fi
3995 done
3996 $cat <<'EOM'
3997
3998 Some systems have incompatible or broken versions of libraries.  Among
3999 the directories listed in the question below, please remove any you
4000 know not to be holding relevant libraries, and add any that are needed.
4001 Say "none" for none.
4002
4003 EOM
4004 case "$libpth" in
4005 '') dflt='none';;
4006 *)
4007         set X $libpth
4008         shift
4009         dflt=${1+"$@"}
4010         ;;
4011 esac
4012 rp="Directories to use for library searches?"
4013 . ./myread
4014 case "$ans" in
4015 none) libpth=' ';;
4016 *) libpth="$ans";;
4017 esac
4018
4019 : compute shared library extension
4020 case "$so" in
4021 '')
4022         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4023                 dflt='sl'
4024         else
4025                 dflt='so'
4026         fi
4027         ;;
4028 *) dflt="$so";;
4029 esac
4030 $cat <<EOM
4031
4032 On some systems, shared libraries may be available.  Answer 'none' if
4033 you want to suppress searching of shared libraries for the remainder
4034 of this configuration.
4035
4036 EOM
4037 rp='What is the file extension used for shared libraries?'
4038 . ./myread
4039 so="$ans"
4040
4041 : Define several unixisms.
4042 : Hints files or command line option can be used to override them.
4043 : The convoluted testing is in case hints files set either the old
4044 : or the new name.
4045 case "$_exe" in
4046 '')     case "$exe_ext" in
4047     '') ;;
4048         *)      _exe="$exe_ext" ;;
4049         esac
4050         ;;
4051 esac
4052 case "$_a" in
4053 '')     case "$lib_ext" in
4054     '') _a='.a';;
4055         *)      _a="$lib_ext" ;;
4056         esac
4057         ;;
4058 esac
4059 case "$_o" in
4060 '') case "$obj_ext" in
4061         '')     _o='.o';;
4062         *)      _o="$obj_ext";;
4063         esac
4064         ;;
4065 esac
4066 case "$p_" in
4067 '') case "$path_sep" in
4068         '')     p_=':';;
4069         *)      p_="$path_sep";;
4070         esac
4071         ;;
4072 esac
4073 exe_ext=$_exe
4074 lib_ext=$_a
4075 obj_ext=$_o
4076 path_sep=$p_
4077
4078 : Which makefile gets called first.  This is used by make depend.
4079 case "$firstmakefile" in
4080 '') firstmakefile='makefile';;
4081 esac
4082
4083 case "$usesocks" in
4084 $define|true|[yY]*)     dflt='y';;
4085 *) dflt='n';;
4086 esac
4087 cat <<EOM
4088
4089 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4090 Configure must be run with -Dusesocks.  If you use SOCKS you also need
4091 to use the PerlIO abstraction layer, this will be implicitly selected.
4092
4093 If this doesn't make any sense to you, just accept the default '$dflt'.
4094 EOM
4095 rp='Build Perl for SOCKS?'
4096 . ./myread
4097 case "$ans" in
4098 y|Y)    val="$define" ;;     
4099 *)      val="$undef" ;;
4100 esac
4101 set usesocks
4102 eval $setvar
4103
4104 case "$usesocks" in
4105 $define|true|[yY]*) useperlio="$define";;
4106 esac
4107
4108 : Looking for optional libraries
4109 echo " "
4110 echo "Checking for optional libraries..." >&4
4111 case "$libs" in
4112 ' '|'') dflt='';;
4113 *) dflt="$libs";;
4114 esac
4115 case "$libswanted" in
4116 '') libswanted='c_s';;
4117 esac
4118 case "$usesocks" in
4119 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
4120 esac
4121 libsfound=''
4122 libsfiles=''
4123 libsdirs=''
4124 libspath=''
4125 for thisdir in $libpth $xlibpth; do
4126   test -d $thisdir && libspath="$libspath $thisdir"
4127 done
4128 for thislib in $libswanted; do
4129         for thisdir in $libspath; do
4130             xxx=''
4131             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4132                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
4133                 $test -f "$xxx" && eval $libscheck
4134                 $test -f "$xxx" && libstyle=shared
4135             fi
4136             if test ! -f "$xxx"; then
4137                 xxx=$thisdir/lib$thislib.$so
4138                 $test -f "$xxx" && eval $libscheck
4139                 $test -f "$xxx" && libstyle=shared
4140             fi  
4141             if test ! -f "$xxx"; then
4142                 xxx=$thisdir/lib$thislib$_a
4143                 $test -f "$xxx" && eval $libscheck
4144                 $test -f "$xxx" && libstyle=static
4145             fi
4146             if test ! -f "$xxx"; then
4147                 xxx=$thisdir/$thislib$_a
4148                 $test -f "$xxx" && eval $libscheck
4149                 $test -f "$xxx" && libstyle=static
4150             fi
4151             if test ! -f "$xxx"; then
4152                 xxx=$thisdir/lib${thislib}_s$_a
4153                 $test -f "$xxx" && eval $libscheck
4154                 $test -f "$xxx" && libstyle=static
4155                 $test -f "$xxx" && thislib=${thislib}_s
4156             fi
4157             if test ! -f "$xxx"; then
4158                 xxx=$thisdir/Slib$thislib$_a
4159                 $test -f "$xxx" && eval $libscheck
4160                 $test -f "$xxx" && libstyle=static
4161             fi
4162             if $test -f "$xxx"; then
4163                 case "$libstyle" in
4164                 shared) echo "Found -l$thislib (shared)." ;;
4165                 static) echo "Found -l$thislib." ;;
4166                 *)      echo "Found -l$thislib ($libstyle)." ;;
4167                 esac
4168                 case " $dflt " in
4169                 *"-l$thislib "*);;
4170                 *) dflt="$dflt -l$thislib"
4171                    libsfound="$libsfound $xxx"
4172                    yyy=`basename $xxx`
4173                    libsfiles="$libsfiles $yyy"
4174                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
4175                    case " $libsdirs " in
4176                    *" $yyy "*) ;;
4177                    *) libsdirs="$libsdirs $yyy" ;;
4178                    esac
4179                    ;;
4180                 esac
4181                 break
4182             fi  
4183         done
4184         if $test ! -f "$xxx"; then
4185             echo "No -l$thislib."
4186         fi
4187 done
4188 set X $dflt
4189 shift
4190 dflt="$*"
4191 case "$libs" in
4192 '') dflt="$dflt";;
4193 *) dflt="$libs";;
4194 esac
4195 case "$dflt" in
4196 ' '|'') dflt='none';;
4197 esac
4198
4199 $cat <<EOM
4200
4201 In order to compile $package on your machine, a number of libraries
4202 are usually needed.  Include any other special libraries here as well.
4203 Say "none" for none.  The default list is almost always right.
4204 EOM
4205
4206 echo " "
4207 rp="What libraries to use?"
4208 . ./myread
4209 case "$ans" in
4210 none) libs=' ';;
4211 *) libs="$ans";;
4212 esac
4213
4214 : determine optimization, if desired, or use for debug flag also
4215 case "$optimize" in
4216 ' '|$undef) dflt='none';;
4217 '') dflt='-O';;
4218 *) dflt="$optimize";;
4219 esac
4220 $cat <<EOH
4221
4222 By default, $package compiles with the -O flag to use the optimizer.
4223 Alternately, you might want to use the symbolic debugger, which uses
4224 the -g flag (on traditional Unix systems).  Either flag can be
4225 specified here.  To use neither flag, specify the word "none".
4226
4227 EOH
4228 rp="What optimizer/debugger flag should be used?"
4229 . ./myread
4230 optimize="$ans"
4231 case "$optimize" in
4232 'none') optimize=" ";;
4233 esac
4234
4235 dflt=''
4236 : We will not override a previous value, but we might want to
4237 : augment a hint file
4238 case "$hint" in
4239 default|recommended)
4240         case "$gccversion" in
4241         1*) dflt='-fpcc-struct-return' ;;
4242         esac
4243         case "$optimize" in
4244         *-g*) dflt="$dflt -DDEBUGGING";;
4245         esac
4246         case "$gccversion" in
4247         2*) if test -d /etc/conf/kconfig.d &&
4248                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4249                 then
4250                         dflt="$dflt -posix"
4251                 fi
4252                 ;;
4253         esac
4254         case "$gccversion" in
4255         1*) ;;
4256         2.[0-8]*) ;;
4257         ?*)     echo " "
4258                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4259                 echo 'int main(void) { return 0; }' > gcctest.c
4260                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4261                         echo "Yes, it does." 2>&1
4262                         case "$ccflags" in
4263                         *strict-aliasing*) 
4264                                 echo "Leaving current flags $ccflags alone." 2>&1
4265                                 ;;
4266                         *) dflt="$dflt -fno-strict-aliasing" ;;
4267                         esac
4268                 else
4269                         echo "Nope, it doesn't, but that's ok." 2>&1
4270                 fi
4271                 ;;
4272         esac
4273         ;;
4274 esac
4275
4276 case "$mips_type" in
4277 *BSD*|'') inclwanted="$locincpth $usrinc";;
4278 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4279 esac
4280 for thisincl in $inclwanted; do
4281         if $test -d $thisincl; then
4282                 if $test x$thisincl != x$usrinc; then
4283                         case "$dflt" in
4284                         *" -I$thisincl "*);;
4285                         *) dflt="$dflt -I$thisincl ";;
4286                         esac
4287                 fi
4288         fi
4289 done
4290
4291 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4292         xxx=true;
4293 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4294         xxx=true;
4295 else
4296         xxx=false;
4297 fi;
4298 if $xxx; then
4299         case "$dflt" in
4300         *$2*);;
4301         *) dflt="$dflt -D$2";;
4302         esac;
4303 fi'
4304
4305 set signal.h LANGUAGE_C; eval $inctest
4306
4307 case "$usesocks" in
4308 $define)
4309         ccflags="$ccflags -DSOCKS"
4310         ;;
4311 esac
4312
4313 case "$hint" in
4314 default|recommended) dflt="$ccflags $dflt" ;;
4315 *) dflt="$ccflags";;
4316 esac
4317
4318 case "$dflt" in
4319 ''|' ') dflt=none;;
4320 esac
4321
4322 $cat <<EOH
4323
4324 Your C compiler may want other flags.  For this question you should include
4325 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4326 but you should NOT include libraries or ld flags like -lwhatever.  If you
4327 want $package to honor its debug switch, you should include -DDEBUGGING here.
4328 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4329
4330 To use no flags, specify the word "none".
4331
4332 EOH
4333 set X $dflt
4334 shift
4335 dflt=${1+"$@"}
4336 rp="Any additional cc flags?"
4337 . ./myread
4338 case "$ans" in
4339 none) ccflags='';;
4340 *) ccflags="$ans";;
4341 esac
4342
4343 : the following weeds options from ccflags that are of no interest to cpp
4344 case "$cppflags" in
4345 '') cppflags="$ccflags" ;;
4346 *)  cppflags="$cppflags $ccflags" ;;
4347 esac
4348 case "$gccversion" in
4349 1*) cppflags="$cppflags -D__GNUC__"
4350 esac
4351 case "$mips_type" in
4352 '');;
4353 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4354 esac
4355 case "$cppflags" in
4356 '');;
4357 *)
4358         echo " "
4359         echo "Let me guess what the preprocessor flags are..." >&4
4360         set X $cppflags
4361         shift
4362         cppflags=''
4363         $cat >cpp.c <<'EOM'
4364 #define BLURFL foo
4365
4366 BLURFL xx LFRULB
4367 EOM
4368         previous=''
4369         for flag in $*
4370         do
4371                 case "$flag" in
4372                 -*) ftry="$flag";;
4373                 *) ftry="$previous $flag";;
4374                 esac
4375                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4376                         >cpp1.out 2>/dev/null && \
4377                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4378                         >cpp2.out 2>/dev/null && \
4379                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4380                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4381                 then
4382                         cppflags="$cppflags $ftry"
4383                         previous=''
4384                 else
4385                         previous="$flag"
4386                 fi
4387         done
4388         set X $cppflags
4389         shift
4390         cppflags=${1+"$@"}
4391         case "$cppflags" in
4392         *-*)  echo "They appear to be: $cppflags";;
4393         esac
4394         $rm -f cpp.c cpp?.out
4395         ;;
4396 esac
4397
4398 : flags used in final linking phase
4399 case "$ldflags" in
4400 '') if ./venix; then
4401                 dflt='-i -z'
4402         else
4403                 dflt=''
4404         fi
4405         case "$ccflags" in
4406         *-posix*) dflt="$dflt -posix" ;;
4407         esac
4408         ;;
4409 *) dflt="$ldflags";;
4410 esac
4411
4412 : Try to guess additional flags to pick up local libraries.
4413 for thislibdir in $libpth; do
4414         case " $loclibpth " in
4415         *" $thislibdir "*)
4416                 case "$dflt " in 
4417                 *"-L$thislibdir "*) ;;
4418                 *)  dflt="$dflt -L$thislibdir" ;;
4419                 esac
4420                 ;;
4421         esac
4422 done
4423
4424 case "$dflt" in
4425 '') dflt='none' ;;
4426 esac
4427
4428 $cat <<EOH
4429
4430 Your C linker may need flags.  For this question you should
4431 include -L/whatever and any other flags used by the C linker, but you
4432 should NOT include libraries like -lwhatever.
4433
4434 Make sure you include the appropriate -L/path flags if your C linker
4435 does not normally search all of the directories you specified above,
4436 namely
4437         $libpth
4438 To use no flags, specify the word "none".
4439
4440 EOH
4441
4442 rp="Any additional ld flags (NOT including libraries)?"
4443 . ./myread
4444 case "$ans" in
4445 none) ldflags='';;
4446 *) ldflags="$ans";;
4447 esac
4448 rmlist="$rmlist pdp11"
4449
4450 : coherency check
4451 echo " "
4452 echo "Checking your choice of C compiler and flags for coherency..." >&4
4453 $cat > try.c <<'EOF'
4454 #include <stdio.h>
4455 int main() { printf("Ok\n"); exit(0); }
4456 EOF
4457 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
4458 shift
4459 $cat >try.msg <<'EOM'
4460 I've tried to compile and run the following simple program:
4461
4462 EOM
4463 $cat try.c >> try.msg
4464
4465 $cat >> try.msg <<EOM
4466
4467 I used the command:
4468
4469         $*
4470         $run ./try
4471
4472 and I got the following output:
4473
4474 EOM
4475 dflt=y
4476 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
4477         if $sh -c "$run ./try" >>try.msg 2>&1; then
4478                 xxx=`$run ./try`
4479                 case "$xxx" in
4480                 "Ok") dflt=n ;;
4481                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4482                         case " $libs " in
4483                         *" -lsfio "*)
4484                                 cat >> try.msg <<'EOQS'
4485 If $libs contains -lsfio, and sfio is mis-configured, then it
4486 sometimes (apparently) runs and exits with a 0 status, but with no
4487 output!  It may have to do with sfio's use of _exit vs. exit.
4488
4489 EOQS
4490                                 rp="You have a big problem.  Shall I abort Configure"
4491                                 dflt=y
4492                                 ;;
4493                         esac
4494                         ;;
4495                 esac
4496         else
4497                 echo "The program compiled OK, but exited with status $?." >>try.msg
4498                 rp="You have a problem.  Shall I abort Configure"
4499                 dflt=y
4500         fi
4501 else
4502         echo "I can't compile the test program." >>try.msg
4503         rp="You have a BIG problem.  Shall I abort Configure"
4504         dflt=y
4505 fi
4506 case "$dflt" in
4507 y)
4508         $cat try.msg >&4
4509         case "$knowitall" in
4510         '')
4511                 echo "(The supplied flags or libraries might be incorrect.)"
4512                 ;;
4513         *) dflt=n;;
4514         esac
4515         echo " "
4516         . ./myread
4517         case "$ans" in
4518         n*|N*) ;;
4519         *)      echo "Ok.  Stopping Configure." >&4
4520                 exit 1
4521                 ;;
4522         esac
4523         ;;
4524 n) echo "OK, that should do.";;
4525 esac
4526 $rm -f try try.* core
4527
4528 : define an is-a-typedef? function
4529 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4530 case "$inclist" in
4531 "") inclist="sys/types.h";;
4532 esac;
4533 eval "varval=\$$var";
4534 case "$varval" in
4535 "")
4536         $rm -f temp.c;
4537         for inc in $inclist; do
4538                 echo "#include <$inc>" >>temp.c;
4539         done;
4540         echo "#ifdef $type" >> temp.c;
4541         echo "printf(\"We have $type\");" >> temp.c;
4542         echo "#endif" >> temp.c;
4543         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4544         if $contains $type temp.E >/dev/null 2>&1; then
4545                 eval "$var=\$type";
4546         else
4547                 eval "$var=\$def";
4548         fi;
4549         $rm -f temp.?;;
4550 *) eval "$var=\$varval";;
4551 esac'
4552
4553 : define an is-a-typedef? function that prompts if the type is not available.
4554 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4555 case "$inclist" in
4556 "") inclist="sys/types.h";;
4557 esac;
4558 eval "varval=\$$var";
4559 case "$varval" in
4560 "")
4561         $rm -f temp.c;
4562         for inc in $inclist; do
4563                 echo "#include <$inc>" >>temp.c;
4564         done;
4565         echo "#ifdef $type" >> temp.c;
4566         echo "printf(\"We have $type\");" >> temp.c;
4567         echo "#endif" >> temp.c;
4568         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4569         echo " " ;
4570         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
4571         if $contains $type temp.E >/dev/null 2>&1; then
4572                 echo "$type found." >&4;
4573                 eval "$var=\$type";
4574         else
4575                 echo "$type NOT found." >&4;
4576                 dflt="$def";
4577                 . ./myread ;
4578                 eval "$var=\$ans";
4579         fi;
4580         $rm -f temp.?;;
4581 *) eval "$var=\$varval";;
4582 esac'
4583
4584 : define a shorthand compile call
4585 compile='
4586 mc_file=$1;
4587 shift;
4588 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
4589 : define a shorthand compile call for compilations that should be ok.
4590 compile_ok='
4591 mc_file=$1;
4592 shift;
4593 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
4594
4595 : check for lengths of integral types
4596 echo " "
4597 case "$intsize" in
4598 '')
4599         echo "Checking to see how big your integers are..." >&4
4600         $cat >try.c <<'EOCP'
4601 #include <stdio.h>
4602 int main()
4603 {
4604         printf("intsize=%d;\n", (int)sizeof(int));
4605         printf("longsize=%d;\n", (int)sizeof(long));
4606         printf("shortsize=%d;\n", (int)sizeof(short));
4607         exit(0);
4608 }
4609 EOCP
4610         set try
4611         if eval $compile_ok && $run ./try > /dev/null; then
4612                 eval `$run ./try`
4613                 echo "Your integers are $intsize bytes long."
4614                 echo "Your long integers are $longsize bytes long."
4615                 echo "Your short integers are $shortsize bytes long."
4616         else
4617                 $cat >&4 <<EOM
4618 !
4619 Help! I can't compile and run the intsize test program: please enlighten me!
4620 (This is probably a misconfiguration in your system or libraries, and
4621 you really ought to fix it.  Still, I'll try anyway.)
4622 !
4623 EOM
4624                 dflt=4
4625                 rp="What is the size of an integer (in bytes)?"
4626                 . ./myread
4627                 intsize="$ans"
4628                 dflt=$intsize
4629                 rp="What is the size of a long integer (in bytes)?"
4630                 . ./myread
4631                 longsize="$ans"
4632                 dflt=2
4633                 rp="What is the size of a short integer (in bytes)?"
4634                 . ./myread
4635                 shortsize="$ans"
4636         fi
4637         ;;
4638 esac
4639 $rm -f try try.*
4640
4641 : see what type lseek is declared as in the kernel
4642 rp="What is the type used for lseek's offset on this system?"
4643 set off_t lseektype long stdio.h sys/types.h
4644 eval $typedef_ask
4645
4646 echo " "
4647 echo "Checking to see how big your file offsets are..." >&4
4648 $cat >try.c <<EOCP
4649 #include <sys/types.h>
4650 #include <stdio.h>
4651 int main()
4652 {
4653     printf("%d\n", (int)sizeof($lseektype));
4654     return(0); 
4655 }
4656 EOCP
4657 set try
4658 if eval $compile_ok; then
4659         lseeksize=`$run ./try`
4660         echo "Your file offsets are $lseeksize bytes long."
4661 else
4662         dflt=$longsize
4663         echo " "
4664         echo "(I can't seem to compile the test program.  Guessing...)"
4665         rp="What is the size of your file offsets (in bytes)?"
4666         . ./myread
4667         lseeksize="$ans"
4668 fi
4669 $rm -f try.c try
4670
4671 : see what type file positions are declared as in the library
4672 rp="What is the type for file position used by fsetpos()?"
4673 set fpos_t fpostype long stdio.h sys/types.h
4674 eval $typedef_ask
4675
4676 echo " "
4677 case "$fpostype" in
4678 *_t) zzz="$fpostype"    ;;
4679 *)   zzz="fpos_t"       ;;
4680 esac
4681 echo "Checking the size of $zzz..." >&4 
4682 cat > try.c <<EOCP
4683 #include <sys/types.h>
4684 #include <stdio.h>
4685 int main() {
4686     printf("%d\n", (int)sizeof($fpostype));
4687     exit(0);
4688 }
4689 EOCP
4690 set try
4691 if eval $compile_ok; then
4692         yyy=`$run ./try`
4693         case "$yyy" in
4694         '')     fpossize=4
4695                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4696                 ;;
4697         *)      fpossize=$yyy
4698                 echo "Your $zzz is $fpossize bytes long."
4699                 ;;
4700         esac
4701 else
4702         dflt="$longsize"
4703         echo " " >&4
4704         echo "(I can't compile the test program.  Guessing...)" >&4
4705         rp="What is the size of your file positions (in bytes)?"
4706         . ./myread
4707         fpossize="$ans"
4708 fi
4709
4710
4711
4712 # Backward compatibility (uselfs is deprecated).
4713 case "$uselfs" in
4714 "$define"|true|[yY]*)
4715         cat <<EOM >&4
4716
4717 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
4718 EOM
4719         uselargefiles="$define"
4720         ;;
4721 esac                          
4722
4723 case "$lseeksize:$fpossize" in
4724 8:8) cat <<EOM
4725
4726 You can have files larger than 2 gigabytes.
4727 EOM
4728    val="$define" ;;
4729 *)    case "$uselargefiles" in
4730    "$undef"|false|[nN]*) dflt='n' ;;
4731    *)   dflt='y' ;;
4732    esac
4733    cat <<EOM
4734
4735 Perl can be built to understand large files (files larger than 2 gigabytes)
4736 on some systems.  To do so, Configure can be run with -Duselargefiles.
4737
4738 If this doesn't make any sense to you, just accept the default '$dflt'.
4739 EOM
4740    rp='Try to understand large files, if available?'
4741    . ./myread
4742    case "$ans" in
4743    y|Y)         val="$define" ;;
4744    *)           val="$undef"  ;;
4745    esac
4746    ;;
4747 esac
4748 set uselargefiles
4749 eval $setvar
4750 case "$uselargefiles" in
4751 "$define")
4752 : Look for a hint-file generated 'call-back-unit'.  If the
4753 : user has specified that a large files perl is to be built,
4754 : we may need to set or change some other defaults.
4755         if $test -f uselargefiles.cbu; then
4756                 echo "Your platform has some specific hints for large file builds, using them..."
4757                 . ./uselargefiles.cbu
4758                 echo " "
4759                 echo "Rechecking to see how big your file offsets are..." >&4
4760                 $cat >try.c <<EOCP
4761 #include <sys/types.h>
4762 #include <stdio.h>
4763 int main()
4764 {
4765     printf("%d\n", (int)sizeof($lseektype));
4766     return(0); 
4767 }
4768 EOCP
4769                 set try
4770                 if eval $compile_ok; then
4771                         lseeksize=`$run ./try`
4772                         $echo "Your file offsets are now $lseeksize bytes long."
4773                 else
4774                         dflt="$lseeksize"
4775                         echo " "
4776                         echo "(I can't seem to compile the test program.  Guessing...)"
4777                         rp="What is the size of your file offsets (in bytes)?"
4778                         . ./myread
4779                         lseeksize="$ans"
4780                 fi
4781                 case "$fpostype" in
4782                 *_t) zzz="$fpostype"    ;;
4783                 *)   zzz="fpos_t"       ;;
4784                 esac
4785                 $echo $n "Rechecking the size of $zzz...$c" >&4 
4786                 $cat > try.c <<EOCP
4787 #include <sys/types.h>
4788 #include <stdio.h>
4789 int main() {
4790     printf("%d\n", (int)sizeof($fpostype));
4791     exit(0);
4792 }
4793 EOCP
4794                 set try
4795                 if eval $compile_ok; then
4796                         yyy=`$run ./try`
4797                         dflt="$lseeksize"
4798                         case "$yyy" in
4799                         '')     echo " "
4800                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4801                                 ;;
4802                         *)      fpossize=$yyy
4803                                 echo " $fpossize bytes." >&4
4804                                 ;;
4805                         esac
4806                 else
4807                         dflt="$fpossize"
4808                         echo " "
4809                         echo "(I can't compile the test program.  Guessing...)" >&4
4810                         rp="What is the size of your file positions (in bytes)?"
4811                         . ./myread
4812                         fpossize="$ans"
4813                 fi
4814                 $rm -f try.c try
4815         fi
4816         ;;
4817 esac
4818
4819
4820 case "$usemorebits" in
4821 "$define"|true|[yY]*)
4822         use64bitint="$define"
4823         uselongdouble="$define"
4824         usemorebits="$define"
4825         ;;
4826 *)      usemorebits="$undef"
4827         ;;
4828 esac
4829
4830 : check for void type
4831 echo " "
4832 echo "Checking to see how well your C compiler groks the void type..." >&4
4833 case "$voidflags" in
4834 '')
4835         $cat >try.c <<'EOCP'
4836 #if TRY & 1
4837 void sub() {
4838 #else
4839 sub() {
4840 #endif
4841         extern void moo();      /* function returning void */
4842         void (*goo)();          /* ptr to func returning void */
4843 #if TRY & 8
4844         void *hue;              /* generic ptr */
4845 #endif
4846 #if TRY & 2
4847         void (*foo[10])();
4848 #endif
4849
4850 #if TRY & 4
4851         if(goo == moo) {
4852                 exit(0);
4853         }
4854 #endif
4855         exit(0);
4856 }
4857 int main() { sub(); }
4858 EOCP
4859         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
4860                 voidflags=$defvoidused
4861         echo "Good.  It appears to support void to the level $package wants.">&4
4862                 if $contains warning .out >/dev/null 2>&1; then
4863                         echo "However, you might get some warnings that look like this:"
4864                         $cat .out
4865                 fi
4866         else
4867 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
4868                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
4869                         echo "It supports 1..."
4870                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
4871                                 echo "It also supports 2..."
4872                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
4873                                         voidflags=7
4874                                         echo "And it supports 4 but not 8 definitely."
4875                                 else
4876                                         echo "It doesn't support 4..."
4877                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
4878                                                 voidflags=11
4879                                                 echo "But it supports 8."
4880                                         else
4881                                                 voidflags=3
4882                                                 echo "Neither does it support 8."
4883                                         fi
4884                                 fi
4885                         else
4886                                 echo "It does not support 2..."
4887                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
4888                                         voidflags=13
4889                                         echo "But it supports 4 and 8."
4890                                 else
4891                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
4892                                                 voidflags=5
4893                                                 echo "And it supports 4 but has not heard about 8."
4894                                         else
4895                                                 echo "However it supports 8 but not 4."
4896                                         fi
4897                                 fi
4898                         fi
4899                 else
4900                         echo "There is no support at all for void."
4901                         voidflags=0
4902                 fi
4903         fi
4904 esac
4905 case "$voidflags" in
4906 "$defvoidused") ;;
4907 *)      $cat >&4 <<'EOM'
4908   Support flag bits are:
4909     1: basic void declarations.
4910     2: arrays of pointers to functions returning void.
4911     4: operations between pointers to and addresses of void functions.
4912     8: generic void pointers.
4913 EOM
4914         dflt="$voidflags";
4915         rp="Your void support flags add up to what?"
4916         . ./myread
4917         voidflags="$ans"
4918         ;;
4919 esac
4920 $rm -f try.* .out
4921
4922 : check for length of pointer
4923 echo " "
4924 case "$ptrsize" in
4925 '')
4926         echo "Checking to see how big your pointers are..." >&4
4927         if test "$voidflags" -gt 7; then
4928                 echo '#define VOID_PTR char *' > try.c
4929         else
4930                 echo '#define VOID_PTR void *' > try.c
4931         fi
4932         $cat >>try.c <<'EOCP'
4933 #include <stdio.h>
4934 int main()
4935 {
4936     printf("%d\n", (int)sizeof(VOID_PTR));
4937     exit(0);
4938 }
4939 EOCP
4940         set try
4941         if eval $compile_ok; then
4942                 ptrsize=`$run ./try`
4943                 echo "Your pointers are $ptrsize bytes long."
4944         else
4945                 dflt='4'
4946                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
4947                 rp="What is the size of a pointer (in bytes)?"
4948                 . ./myread
4949                 ptrsize="$ans"
4950         fi
4951         ;;
4952 esac
4953 $rm -f try.c try
4954
4955 : check for long long
4956 echo " "
4957 echo "Checking to see if you have long long..." >&4
4958 echo 'int main() { long long x = 7; return 0; }' > try.c
4959 set try
4960 if eval $compile; then
4961         val="$define"
4962         echo "You have long long."
4963 else
4964         val="$undef"
4965         echo "You do not have long long."
4966 fi
4967 $rm try.*
4968 set d_longlong
4969 eval $setvar
4970
4971 : check for length of long long
4972 case "${d_longlong}${longlongsize}" in
4973 $define)
4974         echo " "
4975         echo "Checking to see how big your long longs are..." >&4
4976         $cat >try.c <<'EOCP'
4977 #include <stdio.h>
4978 int main()
4979 {
4980     printf("%d\n", (int)sizeof(long long));
4981     return(0);
4982 }
4983 EOCP
4984         set try
4985         if eval $compile_ok; then
4986                 longlongsize=`$run ./try`
4987                 echo "Your long longs are $longlongsize bytes long."
4988         else
4989                 dflt='8'
4990                 echo " "
4991                 echo "(I can't seem to compile the test program.  Guessing...)"
4992                 rp="What is the size of a long long (in bytes)?"
4993                 . ./myread
4994                 longlongsize="$ans"
4995         fi
4996         if $test "X$longsize" = "X$longlongsize"; then
4997                 echo "(That isn't any different from an ordinary long.)"
4998         fi      
4999         ;;
5000 esac
5001 $rm -f try.* try
5002
5003 : determine filename position in cpp output
5004 echo " "
5005 echo "Computing filename position in cpp output for #include directives..." >&4
5006 echo '#include <stdio.h>' > foo.c
5007 $cat >fieldn <<EOF
5008 $startsh
5009 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
5010 $grep '^[       ]*#.*stdio\.h' | \
5011 while read cline; do
5012         pos=1
5013         set \$cline
5014         while $test \$# -gt 0; do
5015                 if $test -r \`echo \$1 | $tr -d '"'\`; then
5016                         echo "\$pos"
5017                         exit 0
5018                 fi
5019                 shift
5020                 pos=\`expr \$pos + 1\`
5021         done
5022 done
5023 EOF
5024 chmod +x fieldn
5025 fieldn=`./fieldn`
5026 $rm -f foo.c fieldn
5027 case $fieldn in
5028 '') pos='???';;
5029 1) pos=first;;
5030 2) pos=second;;
5031 3) pos=third;;
5032 *) pos="${fieldn}th";;
5033 esac
5034 echo "Your cpp writes the filename in the $pos field of the line."
5035
5036 : locate header file
5037 $cat >findhdr <<EOF
5038 $startsh
5039 wanted=\$1
5040 name=''
5041 for usrincdir in $usrinc
5042 do
5043         if test -f \$usrincdir/\$wanted; then
5044                 echo "\$usrincdir/\$wanted"
5045                 exit 0
5046         fi
5047 done
5048 awkprg='{ print \$$fieldn }'
5049 echo "#include <\$wanted>" > foo\$\$.c
5050 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
5051 $grep "^[       ]*#.*\$wanted" | \
5052 while read cline; do
5053         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
5054         case "\$name" in
5055         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
5056         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
5057         *) exit 2;;
5058         esac;
5059 done;
5060 #
5061 # status = 0: grep returned 0 lines, case statement not executed
5062 # status = 1: headerfile found
5063 # status = 2: while loop executed, no headerfile found
5064 #
5065 status=\$?
5066 $rm -f foo\$\$.c;
5067 if test \$status -eq 1; then
5068         exit 0;
5069 fi
5070 exit 1
5071 EOF
5072 chmod +x findhdr
5073
5074 : define an alternate in-header-list? function
5075 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
5076 cont=true; xxf="echo \"<\$1> found.\" >&4";
5077 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
5078 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
5079 esac;
5080 case $# in 4) instead=instead;; *) instead="at last";; esac;
5081 while $test "$cont"; do
5082         xxx=`./findhdr $1`
5083         var=$2; eval "was=\$$2";
5084         if $test "$xxx" && $test -r "$xxx";
5085         then eval $xxf;
5086         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5087                 cont="";
5088         else eval $xxnf;
5089         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5090         set $yyy; shift; shift; yyy=$@;
5091         case $# in 0) cont="";;
5092         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5093                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5094         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5095                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5096         esac;
5097 done;
5098 while $test "$yyy";
5099 do set $yyy; var=$2; eval "was=\$$2";
5100         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5101         set $yyy; shift; shift; yyy=$@;
5102 done'
5103
5104 : see if inttypes.h is available
5105 : we want a real compile instead of Inhdr because some systems
5106 : have an inttypes.h which includes non-existent headers
5107 echo " "
5108 $cat >try.c <<EOCP
5109 #include <inttypes.h>
5110 int main() {
5111         static int32_t foo32 = 0x12345678;
5112 }
5113 EOCP
5114 set try
5115 if eval $compile; then
5116         echo "<inttypes.h> found." >&4
5117         val="$define"
5118 else
5119         echo "<inttypes.h> NOT found." >&4
5120         val="$undef"
5121 fi
5122 $rm -f try.c try
5123 set i_inttypes
5124 eval $setvar
5125
5126 : check for int64_t
5127 echo " "
5128 echo "Checking to see if you have int64_t..." >&4
5129 $cat >try.c <<EOCP
5130 #include <sys/types.h>
5131 #$i_inttypes I_INTTYPES
5132 #ifdef I_INTTYPES
5133 #include <inttypes.h>
5134 #endif
5135 int main() { int64_t x = 7; }
5136 EOCP
5137 set try
5138 if eval $compile; then
5139         val="$define"
5140         echo "You have int64_t."
5141 else
5142         val="$undef"
5143         echo "You do not have int64_t."
5144 fi
5145 $rm -f try try.*
5146 set d_int64_t
5147 eval $setvar
5148
5149
5150 echo " "
5151 echo "Checking which 64-bit integer type we could use..." >&4
5152
5153 case "$intsize" in
5154 8) val=int
5155    set quadtype
5156    eval $setvar
5157    val='"unsigned int"'
5158    set uquadtype
5159    eval $setvar
5160    quadkind=1
5161    ;;
5162 *) case "$longsize" in
5163    8) val=long
5164       set quadtype
5165       eval $setvar
5166       val='"unsigned long"'
5167       set uquadtype
5168       eval $setvar
5169       quadkind=2
5170       ;;
5171    *) case "$d_longlong:$longlongsize" in
5172       define:8)
5173         val='"long long"'
5174         set quadtype
5175         eval $setvar
5176         val='"unsigned long long"'
5177         set uquadtype
5178         eval $setvar
5179         quadkind=3
5180         ;;
5181       *) case "$d_int64_t" in
5182          define)
5183            val=int64_t
5184            set quadtype
5185            eval $setvar
5186            val=uint64_t
5187            set uquadtype
5188            eval $setvar
5189            quadkind=4
5190            ;;
5191          esac
5192          ;;
5193       esac
5194       ;;
5195    esac
5196    ;;
5197 esac
5198
5199 case "$quadtype" in
5200 '')     echo "Alas, no 64-bit integer types in sight." >&4
5201         d_quad="$undef"
5202         ;;
5203 *)      echo "We could use '$quadtype' for 64-bit integers." >&4
5204         d_quad="$define"
5205         ;;
5206 esac
5207
5208
5209 case "$uselonglong" in
5210 "$define"|true|[yY]*)
5211         cat <<EOM >&4
5212
5213 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
5214 EOM
5215         use64bitint="$define"
5216         ;;
5217 esac                          
5218 case "$use64bits" in
5219 "$define"|true|[yY]*)
5220         cat <<EOM >&4
5221
5222 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
5223 EOM
5224         use64bitint="$define"
5225         ;;
5226 esac                          
5227 case "$use64bitints" in
5228 "$define"|true|[yY]*)
5229         cat <<EOM >&4
5230
5231 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
5232 EOM
5233         use64bitint="$define"
5234         ;;
5235 esac                          
5236 case "$use64bitsint" in
5237 "$define"|true|[yY]*)
5238         cat <<EOM >&4
5239
5240 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
5241 EOM
5242         use64bitint="$define"
5243         ;;
5244 esac                          
5245 case "$uselonglongs" in
5246 "$define"|true|[yY]*)
5247         cat <<EOM >&4
5248
5249 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
5250 EOM
5251         use64bitint="$define"
5252         ;;
5253 esac                          
5254 case "$use64bitsall" in
5255 "$define"|true|[yY]*)
5256         cat <<EOM >&4
5257
5258 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
5259 EOM
5260         use64bitall="$define"
5261         ;;
5262 esac                          
5263
5264 case "$ccflags" in
5265 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
5266 esac
5267 case "$use64bitall" in
5268 "$define"|true|[yY]*) use64bitint="$define" ;;
5269 esac
5270
5271 case "$longsize" in
5272 8) cat <<EOM
5273
5274 You have natively 64-bit long integers.
5275 EOM
5276    val="$define"
5277    ;;
5278 *) case "$use64bitint" in
5279    "$define"|true|[yY]*) dflt='y';;
5280    *) dflt='n';;
5281    esac
5282    case "$d_quad" in
5283    "$define") ;;
5284    *) dflt='n' ;;
5285    esac
5286    cat <<EOM
5287
5288 Perl can be built to take advantage of 64-bit integer types
5289 on some systems.  To do so, Configure can be run with -Duse64bitint.
5290 Choosing this option will most probably introduce binary incompatibilities.
5291
5292 If this doesn't make any sense to you, just accept the default '$dflt'.
5293 (The default has been chosen based on your configuration.)
5294 EOM
5295    rp='Try to use 64-bit integers, if available?'
5296    . ./myread
5297    case "$ans" in
5298    [yY]*) val="$define" ;;
5299    *)     val="$undef"  ;;
5300    esac
5301    ;;
5302 esac
5303 set use64bitint
5304 eval $setvar
5305
5306 case "$use64bitall" in
5307 "$define"|true|[yY]*) dflt='y' ;;
5308 *) case "$longsize" in
5309    8) dflt='y' ;;
5310    *) dflt='n' ;;
5311    esac
5312    ;;
5313 esac    
5314 cat <<EOM
5315
5316 You may also choose to try maximal 64-bitness.  It means using as much
5317 64-bitness as possible on the platform.  This in turn means even more
5318 binary incompatibilities.  On the other hand, your platform may not
5319 have any more 64-bitness available than what you already have chosen.
5320
5321 If this doesn't make any sense to you, just accept the default '$dflt'.
5322 (The default has been chosen based on your configuration.)
5323 EOM
5324 rp='Try to use maximal 64-bit support, if available?'
5325 . ./myread
5326 case "$ans" in
5327 [yY]*) val="$define" ;;
5328 *)     val="$undef"  ;;
5329 esac
5330 set use64bitall
5331 eval $setvar
5332 case "$use64bitall" in
5333 "$define")
5334         case "$use64bitint" in
5335         "$undef")
5336                 cat <<EOM
5337
5338 Since you have chosen a maximally 64-bit build, I'm also turning on
5339 the use of 64-bit integers.
5340 EOM
5341                 use64bitint="$define" ;;
5342         esac
5343         ;;
5344 esac
5345
5346 case "$use64bitall" in
5347 "$define"|true|[yY]*)
5348         case "$ptrsize" in
5349         4)      cat <<EOM >&4
5350
5351 *** You have chosen a maximally 64-bit build, but your pointers
5352 *** are only 4 bytes wide, disabling maximal 64-bitness.
5353
5354 EOM
5355                 use64bitall="$undef"
5356                 case "$use64bitint" in
5357                 "$define"|true|[yY]*) ;;
5358                 *)      cat <<EOM >&4
5359
5360 *** Downgrading from maximal 64-bitness to using 64-bit integers.
5361
5362 EOM
5363                         use64bitint="$define"
5364                         ;;
5365                 esac
5366                 ;;
5367         esac
5368         ;;
5369 esac
5370
5371 case "$use64bitint" in
5372 "$define"|true|[yY]*)
5373 : Look for a hint-file generated 'call-back-unit'.  If the
5374 : user has specified that a 64-bit perl is to be built,
5375 : we may need to set or change some other defaults.
5376         if $test -f use64bitint.cbu; then
5377                 echo "Your platform has some specific hints for 64-bit integers, using them..."
5378                 . ./use64bitint.cbu
5379         fi
5380         case "$longsize" in
5381         4) case "$archname64" in
5382            '') archname64=64int ;;
5383            esac
5384            ;;
5385         esac
5386         ;;
5387 esac
5388
5389 case "$use64bitall" in
5390 "$define"|true|[yY]*)
5391 : Look for a hint-file generated 'call-back-unit'.  If the
5392 : user has specified that a maximally 64-bit perl is to be built,
5393 : we may need to set or change some other defaults.
5394         if $test -f use64bitall.cbu; then
5395                 echo "Your platform has some specific hints for 64-bit builds, using them..."
5396                 . ./use64bitall.cbu
5397         fi
5398         case "$longsize" in
5399         4) case "$archname64" in
5400            ''|64int) archname64=64all ;;
5401            esac
5402            ;;
5403         esac
5404         ;;
5405 esac
5406
5407 echo " "
5408 echo "Checking for GNU C Library..." >&4
5409 cat >try.c <<EOM
5410 #include <stdio.h>
5411 int main()
5412 {
5413 #ifdef __GLIBC__
5414     exit(0);
5415 #else
5416     exit(1);
5417 #endif
5418 }
5419 EOM
5420 set try
5421 if eval $compile_ok && $run ./try; then
5422         val="$define"
5423         echo "You are using the GNU C Library"
5424 else
5425         val="$undef"
5426         echo "You are not using the GNU C Library"
5427 fi
5428 $rm -f try try.*
5429 set d_gnulibc
5430 eval $setvar
5431
5432 : see if nm is to be used to determine whether a symbol is defined or not
5433 case "$usenm" in
5434 '')
5435         dflt=''
5436         case "$d_gnulibc" in
5437         "$define")
5438                 echo " "
5439                 echo "nm probably won't work on the GNU C Library." >&4
5440                 dflt=n
5441                 ;;
5442         esac
5443         case "$dflt" in
5444         '') 
5445                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5446                         echo " "
5447                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5448                         echo "'nm' won't be sufficient on this sytem." >&4
5449                         dflt=n
5450                 fi
5451                 ;;
5452         esac
5453         case "$dflt" in
5454         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5455                 if $test $dflt -gt 20; then
5456                         dflt=y
5457                 else
5458                         dflt=n
5459                 fi
5460                 ;;
5461         esac
5462         ;;
5463 *)
5464         case "$usenm" in
5465         true|$define) dflt=y;;
5466         *) dflt=n;;
5467         esac
5468         ;;
5469 esac
5470 $cat <<EOM
5471
5472 I can use $nm to extract the symbols from your C libraries. This
5473 is a time consuming task which may generate huge output on the disk (up
5474 to 3 megabytes) but that should make the symbols extraction faster. The
5475 alternative is to skip the 'nm' extraction part and to compile a small
5476 test program instead to determine whether each symbol is present. If
5477 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5478 this may be the best solution.
5479
5480 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5481
5482 EOM
5483 rp="Shall I use $nm to extract C symbols from the libraries?"
5484 . ./myread
5485 case "$ans" in
5486 [Nn]*) usenm=false;;
5487 *) usenm=true;;
5488 esac
5489
5490 runnm=$usenm
5491 case "$reuseval" in
5492 true) runnm=false;;
5493 esac
5494
5495 : nm options which may be necessary
5496 case "$nm_opt" in
5497 '') if $test -f /mach_boot; then
5498                 nm_opt=''       # Mach
5499         elif $test -d /usr/ccs/lib; then
5500                 nm_opt='-p'     # Solaris (and SunOS?)
5501         elif $test -f /dgux; then
5502                 nm_opt='-p'     # DG-UX
5503         elif $test -f /lib64/rld; then
5504                 nm_opt='-p'     # 64-bit Irix
5505         else
5506                 nm_opt=''
5507         fi;;
5508 esac
5509
5510 : nm options which may be necessary for shared libraries but illegal
5511 : for archive libraries.  Thank you, Linux.
5512 case "$nm_so_opt" in
5513 '')     case "$myuname" in
5514         *linux*)
5515                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5516                         nm_so_opt='--dynamic'
5517                 fi
5518                 ;;
5519         esac
5520         ;;
5521 esac
5522
5523 case "$runnm" in
5524 true)
5525 : get list of predefined functions in a handy place
5526 echo " "
5527 case "$libc" in
5528 '') libc=unknown
5529         case "$libs" in
5530         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5531         esac
5532         ;;
5533 esac
5534 case "$libs" in
5535 '') ;;
5536 *)  for thislib in $libs; do
5537         case "$thislib" in
5538         -lc|-lc_s)
5539                 : Handle C library specially below.
5540                 ;;
5541         -l*)
5542                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5543                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5544                         :
5545                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5546                         :
5547                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5548                         :
5549                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5550                         :
5551                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5552                         :
5553                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5554                         :
5555                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5556                         :
5557                 else
5558                         try=''
5559                 fi
5560                 libnames="$libnames $try"
5561                 ;;
5562         *) libnames="$libnames $thislib" ;;
5563         esac
5564         done
5565         ;;
5566 esac
5567 xxx=normal
5568 case "$libc" in
5569 unknown)
5570         set /lib/libc.$so
5571         for xxx in $libpth; do
5572                 $test -r $1 || set $xxx/libc.$so
5573                 : The messy sed command sorts on library version numbers.
5574                 $test -r $1 || \
5575                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5576                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5577                                 h
5578                                 s/[0-9][0-9]*/0000&/g
5579                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5580                                 G
5581                                 s/\n/ /' | \
5582                          $sort | $sed -e 's/^.* //'`
5583                 eval set \$$#
5584         done
5585         $test -r $1 || set /usr/ccs/lib/libc.$so
5586         $test -r $1 || set /lib/libsys_s$_a
5587         ;;
5588 *)
5589         set blurfl
5590         ;;
5591 esac
5592 if $test -r "$1"; then
5593         echo "Your (shared) C library seems to be in $1."
5594         libc="$1"
5595 elif $test -r /lib/libc && $test -r /lib/clib; then
5596         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5597         xxx=apollo
5598         libc='/lib/clib /lib/libc'
5599         if $test -r /lib/syslib; then
5600                 echo "(Your math library is in /lib/syslib.)"
5601                 libc="$libc /lib/syslib"
5602         fi
5603 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5604         echo "Your C library seems to be in $libc, as you said before."
5605 elif $test -r $incpath/usr/lib/libc$_a; then
5606         libc=$incpath/usr/lib/libc$_a;
5607         echo "Your C library seems to be in $libc.  That's fine."
5608 elif $test -r /lib/libc$_a; then
5609         libc=/lib/libc$_a;
5610         echo "Your C library seems to be in $libc.  You're normal."
5611 else
5612         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5613                 :
5614         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5615                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5616         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5617                 :
5618         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5619                 :
5620         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5621                 :
5622         else
5623                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5624         fi
5625         if $test -r "$tans"; then
5626                 echo "Your C library seems to be in $tans, of all places."
5627                 libc=$tans
5628         else
5629                 libc='blurfl'
5630         fi
5631 fi
5632 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5633         dflt="$libc"
5634         cat <<EOM
5635
5636 If the guess above is wrong (which it might be if you're using a strange
5637 compiler, or your machine supports multiple models), you can override it here.
5638
5639 EOM
5640 else
5641         dflt=''
5642         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
5643         cat >&4 <<EOM
5644 I can't seem to find your C library.  I've looked in the following places:
5645
5646 EOM
5647         $sed 's/^/      /' libpath
5648         cat <<EOM
5649
5650 None of these seems to contain your C library. I need to get its name...
5651
5652 EOM
5653 fi
5654 fn=f
5655 rp='Where is your C library?'
5656 . ./getfile
5657 libc="$ans"
5658
5659 echo " "
5660 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
5661 set X `cat libnames`
5662 shift
5663 xxx=files
5664 case $# in 1) xxx=file; esac
5665 echo "Extracting names from the following $xxx for later perusal:" >&4
5666 echo " "
5667 $sed 's/^/      /' libnames >&4
5668 echo " "
5669 $echo $n "This may take a while...$c" >&4
5670
5671 for file in $*; do
5672         case $file in
5673         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5674         *) $nm $nm_opt $file 2>/dev/null;;
5675         esac
5676 done >libc.tmp
5677
5678 $echo $n ".$c"
5679 $grep fprintf libc.tmp > libc.ptf
5680 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5681 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5682 xxx='[ADTSIW]'
5683 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5684         eval $xscan;\
5685         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5686                 eval $xrun
5687 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5688         eval $xscan;\
5689         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5690                 eval $xrun
5691 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5692         eval $xscan;\
5693         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5694                 eval $xrun
5695 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5696         eval $xscan;\
5697         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5698                 eval $xrun
5699 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5700         eval $xscan;\
5701         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5702                 eval $xrun
5703 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5704         eval $xscan;\
5705         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5706                 eval $xrun
5707 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5708                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5709         eval $xscan;\
5710         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5711                 eval $xrun
5712 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5713         eval $xscan;\
5714         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5715                 eval $xrun
5716 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5717         eval $xscan;\
5718         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5719                 eval $xrun
5720 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5721         eval $xscan;\
5722         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5723                 eval $xrun
5724 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5725         eval $xscan;\
5726         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5727                 eval $xrun
5728 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5729         eval $xscan;\
5730         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5731                 eval $xrun
5732 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5733         eval $xscan;\
5734         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5735                 eval $xrun
5736 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5737         eval $xscan;\
5738         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5739                 eval $xrun
5740 else
5741         $nm -p $* 2>/dev/null >libc.tmp
5742         $grep fprintf libc.tmp > libc.ptf
5743         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5744                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5745         then
5746                 nm_opt='-p'
5747                 eval $xrun
5748         else
5749                 echo " "
5750                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5751                 com=''
5752                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5753                         for thisname in $libnames $libc; do
5754                                 $ar t $thisname >>libc.tmp
5755                         done
5756                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5757                         echo "Ok." >&4
5758                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5759                         # Repeat libc to extract forwarders to DLL entries too
5760                         for thisname in $libnames $libc; do
5761                                 $ar tv $thisname >>libc.tmp
5762                                 # Revision 50 of EMX has bug in $ar.
5763                                 # it will not extract forwarders to DLL entries
5764                                 # Use emximp which will extract exactly them.
5765                                 emximp -o tmp.imp $thisname \
5766                                     2>/dev/null && \
5767                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5768                                     < tmp.imp >>libc.tmp
5769                                 $rm tmp.imp
5770                         done
5771                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5772                         echo "Ok." >&4
5773                 else
5774                         echo "$ar didn't seem to work right." >&4
5775                         echo "Maybe this is a Cray...trying bld instead..." >&4
5776                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5777                         then
5778                                 for thisname in $libnames; do
5779                                         bld t $libnames | \
5780                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5781                                         $ar t $thisname >>libc.tmp
5782                                 done
5783                                 echo "Ok." >&4
5784                         else
5785                                 echo "That didn't work either.  Giving up." >&4
5786                                 exit 1
5787                         fi
5788                 fi
5789         fi
5790 fi
5791 nm_extract="$com"
5792 if $test -f /lib/syscalls.exp; then
5793         echo " "
5794         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5795         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
5796 fi
5797 ;;
5798 esac
5799 $rm -f libnames libpath
5800
5801 : is a C symbol defined?
5802 csym='tlook=$1;
5803 case "$3" in
5804 -v) tf=libc.tmp; tc=""; tdc="";;
5805 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5806 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5807 esac;
5808 tx=yes;
5809 case "$reuseval-$4" in
5810 true-) ;;
5811 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5812 esac;
5813 case "$tx" in
5814 yes)
5815         case "$runnm" in
5816         true)
5817                 if $contains $tlook $tf >/dev/null 2>&1;
5818                 then tval=true;
5819                 else tval=false;
5820                 fi;;
5821         *)
5822                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5823                 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
5824                 then tval=true;
5825                 else tval=false;
5826                 fi;
5827                 $rm -f t t.c;;
5828         esac;;
5829 *)
5830         case "$tval" in
5831         $define) tval=true;;
5832         *) tval=false;;
5833         esac;;
5834 esac;
5835 eval "$2=$tval"'
5836
5837 : define an is-in-libc? function
5838 inlibc='echo " "; td=$define; tu=$undef;
5839 sym=$1; var=$2; eval "was=\$$2";
5840 tx=yes;
5841 case "$reuseval$was" in
5842 true) ;;
5843 true*) tx=no;;
5844 esac;
5845 case "$tx" in
5846 yes)
5847         set $sym tres -f;
5848         eval $csym;
5849         case "$tres" in
5850         true)
5851                 echo "$sym() found." >&4;
5852                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5853         *)
5854                 echo "$sym() NOT found." >&4;
5855                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5856         esac;;
5857 *)
5858         case "$was" in
5859         $define) echo "$sym() found." >&4;;
5860         *) echo "$sym() NOT found." >&4;;
5861         esac;;
5862 esac'
5863
5864 : see if sqrtl exists
5865 set sqrtl d_sqrtl
5866 eval $inlibc
5867
5868 case "$ccflags" in
5869 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
5870 esac
5871
5872 case "$uselongdouble" in
5873 $define|true|[yY]*)     dflt='y';;
5874 *) dflt='n';;
5875 esac
5876 cat <<EOM
5877
5878 Perl can be built to take advantage of long doubles which
5879 (if available) may give more accuracy and range for floating point numbers.
5880
5881 If this doesn't make any sense to you, just accept the default '$dflt'.
5882 EOM
5883 rp='Try to use long doubles if available?'
5884 . ./myread
5885 case "$ans" in
5886 y|Y)    val="$define"   ;;
5887 *)      val="$undef"    ;;
5888 esac
5889 set uselongdouble
5890 eval $setvar
5891
5892 case "$uselongdouble" in
5893 true|[yY]*) uselongdouble="$define" ;;
5894 esac
5895
5896 case "$uselongdouble" in
5897 $define)
5898 : Look for a hint-file generated 'call-back-unit'.  If the
5899 : user has specified that long doubles should be used,
5900 : we may need to set or change some other defaults.
5901         if $test -f uselongdouble.cbu; then
5902                 echo "Your platform has some specific hints for long doubles, using them..."
5903                 . ./uselongdouble.cbu
5904         else
5905                 $cat <<EOM
5906 (Your platform doesn't have any specific hints for long doubles.)
5907 EOM
5908         fi
5909         ;;
5910 esac
5911
5912 case "$uselongdouble:$d_sqrtl" in
5913 $define:$undef)
5914                 $cat <<EOM >&4
5915
5916 *** You requested the use of long doubles but you do not seem to have
5917 *** the mathematic functions for long doubles.  I'm disabling the use
5918 *** of long doubles.
5919
5920 EOM
5921         uselongdouble=$undef
5922         ;;
5923 esac
5924
5925 : check for length of double
5926 echo " "
5927 case "$doublesize" in
5928 '')
5929         echo "Checking to see how big your double precision numbers are..." >&4
5930         $cat >try.c <<'EOCP'
5931 #include <stdio.h>
5932 int main()
5933 {
5934     printf("%d\n", (int)sizeof(double));
5935     exit(0);
5936 }
5937 EOCP
5938         set try
5939         if eval $compile_ok; then
5940                 doublesize=`$run ./try`
5941                 echo "Your double is $doublesize bytes long."
5942         else
5943                 dflt='8'
5944                 echo "(I can't seem to compile the test program.  Guessing...)"
5945                 rp="What is the size of a double precision number (in bytes)?"
5946                 . ./myread
5947                 doublesize="$ans"
5948         fi
5949         ;;
5950 esac
5951 $rm -f try.c try
5952
5953 : check for long doubles
5954 echo " "
5955 echo "Checking to see if you have long double..." >&4
5956 echo 'int main() { long double x = 7.0; }' > try.c
5957 set try
5958 if eval $compile; then
5959         val="$define"
5960         echo "You have long double."
5961 else
5962         val="$undef"
5963         echo "You do not have long double."
5964 fi
5965 $rm try.*
5966 set d_longdbl
5967 eval $setvar
5968
5969 : check for length of long double
5970 case "${d_longdbl}${longdblsize}" in
5971 $define)
5972         echo " "
5973         echo "Checking to see how big your long doubles are..." >&4
5974         $cat >try.c <<'EOCP'
5975 #include <stdio.h>
5976 int main()
5977 {
5978         printf("%d\n", sizeof(long double));
5979 }
5980 EOCP
5981         set try
5982         set try
5983         if eval $compile; then
5984                 longdblsize=`$run ./try`
5985                 echo "Your long doubles are $longdblsize bytes long."
5986         else
5987                 dflt='8'
5988                 echo " "
5989                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
5990                 rp="What is the size of a long double (in bytes)?"
5991                 . ./myread
5992                 longdblsize="$ans"
5993         fi
5994         if $test "X$doublesize" = "X$longdblsize"; then
5995                 echo "(That isn't any different from an ordinary double.)"
5996         fi      
5997         ;;
5998 esac
5999 $rm -f try.* try
6000
6001 case "$useperlio" in
6002 $define|true|[yY]*|'')  dflt='y';;
6003 *) dflt='n';;
6004 esac
6005 cat <<EOM
6006
6007 Previous version of $package used the standard IO mechanisms as
6008 defined in <stdio.h>.  Versions 5.003_02 and later of $package allow
6009 alternate IO mechanisms via the PerlIO abstraction layer, but the
6010 stdio mechanism is still available if needed.  The abstraction layer
6011 can use AT&T's sfio (if you already have sfio installed) or regular stdio.
6012 Using PerlIO with sfio may cause problems with some extension modules.
6013
6014 If this doesn't make any sense to you, just accept the default '$dflt'.
6015 EOM
6016 rp='Use the PerlIO abstraction layer?'
6017 . ./myread
6018 case "$ans" in
6019 y|Y) 
6020         val="$define"
6021         ;;
6022 *)      
6023         echo "Ok, doing things the stdio way."
6024         val="$undef"
6025         ;;
6026 esac
6027 set useperlio
6028 eval $setvar 
6029
6030 case "$usesocks" in
6031 $define|true|[yY]*)
6032         case "$useperlio" in
6033         $define|true|[yY]*) ;;
6034         *)      cat >&4 <<EOM
6035
6036 You are using the SOCKS proxy protocol library which means that you
6037 should also use the PerlIO layer.  You may be headed for trouble.
6038
6039 EOM
6040                 ;;
6041         esac
6042         ;;
6043 esac
6044
6045         
6046 : determine the architecture name
6047 echo " "
6048 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
6049         tarch=`arch`"-$osname"
6050 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
6051         if uname -m > tmparch 2>&1 ; then
6052                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
6053                         -e 's/$/'"-$osname/" tmparch`
6054         else
6055                 tarch="$osname"
6056         fi
6057         $rm -f tmparch
6058 else
6059         tarch="$osname"
6060 fi
6061 case "$myarchname" in
6062 ''|"$tarch") ;;
6063 *)
6064         echo "(Your architecture name used to be $myarchname.)"
6065         archname=''
6066         ;;
6067 esac
6068 case "$targetarch" in
6069 '') ;;
6070 *)  archname=`echo $targetarch|sed 's,^[^-]*-,,'` ;;
6071 esac
6072 myarchname="$tarch"
6073 case "$archname" in
6074 '') dflt="$tarch";;
6075 *) dflt="$archname";;
6076 esac
6077 rp='What is your architecture name'
6078 . ./myread
6079 archname="$ans"
6080 case "$usethreads" in
6081 $define)
6082         echo "Threads selected." >&4
6083         case "$archname" in
6084         *-thread*) echo "...and architecture name already has -thread." >&4
6085                 ;;
6086         *)      archname="$archname-thread"
6087                 echo "...setting architecture name to $archname." >&4
6088                 ;;
6089         esac
6090         ;;
6091 esac
6092 case "$usemultiplicity" in
6093 $define)
6094         echo "Multiplicity selected." >&4
6095         case "$archname" in
6096         *-multi*) echo "...and architecture name already has -multi." >&4
6097                 ;;
6098         *)      archname="$archname-multi"
6099                 echo "...setting architecture name to $archname." >&4
6100                 ;;
6101         esac
6102         ;;
6103 esac
6104 case "$use64bitint$use64bitall" in
6105 *"$define"*)
6106         case "$archname64" in
6107         '')
6108                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
6109                 ;;
6110         *)
6111                 case "$use64bitint" in
6112                 "$define") echo "64 bit integers selected." >&4 ;;
6113                 esac
6114                 case "$use64bitall" in
6115                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
6116                 esac
6117                 case "$archname" in
6118                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
6119                         ;;
6120                 *)      archname="$archname-$archname64"
6121                         echo "...setting architecture name to $archname." >&4
6122                         ;;
6123                 esac
6124                 ;;
6125         esac
6126 esac
6127 case "$uselongdouble" in
6128 $define)
6129         echo "Long doubles selected." >&4
6130         case "$longdblsize" in
6131         $doublesize)
6132                 "...but long doubles are equal to doubles, not changing architecture name." >&4
6133                 ;;
6134         *)
6135                 case "$archname" in
6136                 *-ld*) echo "...and architecture name already has -ld." >&4
6137                         ;;
6138                 *)      archname="$archname-ld"
6139                         echo "...setting architecture name to $archname." >&4
6140                         ;;
6141                 esac
6142                 ;;
6143         esac
6144         ;;
6145 esac
6146 case "$useperlio" in
6147 $define)
6148         echo "Perlio selected." >&4
6149         ;;
6150 *)
6151         echo "Perlio not selected, using stdio." >&4
6152         case "$archname" in
6153         *-stdio*) echo "...and architecture name already has -stdio." >&4
6154                 ;;
6155         *)      archname="$archname-stdio"
6156                 echo "...setting architecture name to $archname." >&4
6157                 ;;
6158         esac
6159         ;;
6160 esac
6161
6162 : determine root of directory hierarchy where package will be installed.
6163 case "$prefix" in
6164 '')
6165         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
6166         ;;
6167 *)
6168         dflt="$prefix"
6169         ;;
6170 esac
6171 $cat <<EOM
6172
6173 By default, $package will be installed in $dflt/bin, manual pages
6174 under $dflt/man, etc..., i.e. with $dflt as prefix for all
6175 installation directories. Typically this is something like /usr/local.
6176 If you wish to have binaries under /usr/bin but other parts of the
6177 installation under /usr/local, that's ok: you will be prompted
6178 separately for each of the installation directories, the prefix being
6179 only used to set the defaults.
6180
6181 EOM
6182 fn=d~
6183 rp='Installation prefix to use?'
6184 . ./getfile
6185 oldprefix=''
6186 case "$prefix" in
6187 '') ;;
6188 *)
6189         case "$ans" in
6190         "$prefix") ;;
6191         *) oldprefix="$prefix";;
6192         esac
6193         ;;
6194 esac
6195 prefix="$ans"
6196 prefixexp="$ansexp"
6197
6198 case "$afsroot" in
6199 '')     afsroot=/afs ;;
6200 *)      afsroot=$afsroot ;;
6201 esac
6202
6203 : is AFS running?
6204 echo " "
6205 case "$afs" in
6206 $define|true)   afs=true ;;
6207 $undef|false)   afs=false ;;
6208 *)      if test -d $afsroot; then
6209                 afs=true
6210         else
6211                 afs=false
6212         fi
6213         ;;
6214 esac
6215 if $afs; then
6216         echo "AFS may be running... I'll be extra cautious then..." >&4
6217 else
6218         echo "AFS does not seem to be running..." >&4
6219 fi
6220
6221 : determine installation prefix for where package is to be installed.
6222 if $afs; then 
6223 $cat <<EOM
6224
6225 Since you are running AFS, I need to distinguish the directory in which
6226 files will reside from the directory in which they are installed (and from
6227 which they are presumably copied to the former directory by occult means).
6228
6229 EOM
6230         case "$installprefix" in
6231         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
6232         *) dflt="$installprefix";;
6233         esac
6234 else
6235 $cat <<EOM
6236
6237 In some special cases, particularly when building $package for distribution,
6238 it is convenient to distinguish between the directory in which files should 
6239 be installed from the directory ($prefix) in which they 
6240 will eventually reside.  For most users, these two directories are the same.
6241
6242 EOM
6243         case "$installprefix" in
6244         '') dflt=$prefix ;;
6245         *) dflt=$installprefix;;
6246         esac
6247 fi
6248 fn=d~
6249 rp='What installation prefix should I use for installing files?'
6250 . ./getfile
6251 installprefix="$ans"
6252 installprefixexp="$ansexp"
6253
6254 : set the prefixit variable, to compute a suitable default value
6255 prefixit='case "$3" in
6256 ""|none)
6257         case "$oldprefix" in
6258         "") eval "$1=\"\$$2\"";;
6259         *)
6260                 case "$3" in
6261                 "") eval "$1=";;
6262                 none)
6263                         eval "tp=\"\$$2\"";
6264                         case "$tp" in
6265                         ""|" ") eval "$1=\"\$$2\"";;
6266                         *) eval "$1=";;
6267                         esac;;
6268                 esac;;
6269         esac;;
6270 *)
6271         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
6272         case "$tp" in
6273         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
6274         /*-$oldprefix/*|\~*-$oldprefix/*)
6275                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
6276         *) eval "$1=\"\$$2\"";;
6277         esac;;
6278 esac'
6279
6280
6281 : get the patchlevel
6282 echo " "
6283 echo "Getting the current patchlevel..." >&4
6284 if $test -r $rsrc/patchlevel.h;then
6285         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
6286         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
6287         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6288         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
6289         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
6290         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6291        perl_patchlevel=`grep ',"DEVEL[0-9][0-9]*"' $rsrc/patchlevel.h|sed 's/[^0-9]//g'`
6292 else
6293         revision=0
6294         patchlevel=0
6295         subversion=0
6296         api_revision=0
6297         api_version=0
6298         api_subversion=0
6299         perl_patchlevel=0
6300         $echo "(You do not have patchlevel.h.  Eek.)"
6301 fi
6302 if $test -r $rsrc/.patch ; then  
6303         if $test "`cat $rsrc/.patch`" -gt "$perl_patchlevel" ; then
6304                 perl_patchlevel=`cat $rsrc/.patch`
6305         fi
6306 fi
6307 case "$perl_patchlevel" in
6308 0)  ;;
6309 '') $echo "(You have $package version $patchlevel subversion $subversion.)" ;;
6310 *)  $echo "(You have $package version $patchlevel subversion $subversion patchlevel $perl_patchlevel.)" ;;
6311 esac
6312 case "$osname" in
6313 dos|vms)
6314         : XXX Should be a Configure test for double-dots in filenames.
6315         version=`echo $revision $patchlevel $subversion | \
6316                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6317         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6318                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6319         ;;
6320 *)
6321         version=`echo $revision $patchlevel $subversion | \
6322                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6323         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6324                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6325         ;;
6326 esac
6327 : Special case the 5.005_xx maintenance series, which used 5.005
6328 : without any subversion label as a subdirectory in $sitelib
6329 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
6330         api_versionstring='5.005'
6331 fi
6332
6333 : determine installation style
6334 : For now, try to deduce it from prefix unless it is already set.
6335 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
6336 case "$installstyle" in
6337 '')     case "$prefix" in
6338                 *perl*) dflt='lib';;
6339                 *) dflt='lib/perl5' ;;
6340         esac
6341         ;;
6342 *)      dflt="$installstyle" ;;
6343 esac
6344 : Probably not worth prompting for this since we prompt for all
6345 : the directories individually, and the prompt would be too long and
6346 : confusing anyway.
6347 installstyle=$dflt
6348
6349 : determine where private library files go
6350 : Usual default is /usr/local/lib/perl5/$version.
6351 : Also allow things like /opt/perl/lib/$version, since 
6352 : /opt/perl/lib/perl5... would be redundant.
6353 : The default "style" setting is made in installstyle.U
6354 case "$installstyle" in
6355 *lib/perl5*) set dflt privlib lib/$package/$version ;;
6356 *)       set dflt privlib lib/$version ;;
6357 esac
6358 eval $prefixit
6359 $cat <<EOM
6360
6361 There are some auxiliary files for $package that need to be put into a
6362 private library directory that is accessible by everyone.
6363
6364 EOM
6365 fn=d~+
6366 rp='Pathname where the private library files will reside?'
6367 . ./getfile
6368 privlib="$ans"
6369 privlibexp="$ansexp"
6370 : Change installation prefix, if necessary.
6371 if $test X"$prefix" != X"$installprefix"; then
6372         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
6373 else
6374         installprivlib="$privlibexp"
6375 fi
6376
6377 : set the prefixup variable, to restore leading tilda escape
6378 prefixup='case "$prefixexp" in
6379 "$prefix") ;;
6380 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
6381 esac'
6382
6383 : determine where public architecture dependent libraries go
6384 set archlib archlib
6385 eval $prefixit
6386 : privlib default is /usr/local/lib/$package/$version
6387 : archlib default is /usr/local/lib/$package/$version/$archname
6388 : privlib may have an optional trailing /share.
6389 tdflt=`echo $privlib | $sed 's,/share$,,'`
6390 tdflt=$tdflt/$archname
6391 case "$archlib" in
6392 '')     dflt=$tdflt
6393         ;;
6394 *)      dflt="$archlib"
6395     ;;
6396 esac
6397 $cat <<EOM
6398
6399 $spackage contains architecture-dependent library files.  If you are
6400 sharing libraries in a heterogeneous environment, you might store
6401 these files in a separate location.  Otherwise, you can just include
6402 them with the rest of the public library files.
6403
6404 EOM
6405 fn=d+~
6406 rp='Where do you want to put the public architecture-dependent libraries?'
6407 . ./getfile
6408 archlib="$ans"
6409 archlibexp="$ansexp"
6410 if $test X"$archlib" = X"$privlib"; then
6411         d_archlib="$undef"
6412 else
6413         d_archlib="$define"
6414 fi
6415 : Change installation prefix, if necessary.
6416 if $test X"$prefix" != X"$installprefix"; then
6417         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
6418 else
6419         installarchlib="$archlibexp"
6420 fi
6421
6422
6423 : Binary compatibility with 5.005 is not possible for builds
6424 : with advanced features
6425 case "$usethreads$usemultiplicity" in
6426 *define*)
6427         bincompat5005="$undef"
6428         d_bincompat5005="$undef"
6429         ;;
6430 *)      $cat <<EOM
6431
6432 This version of Perl can be compiled for binary compatibility with 5.005.
6433 If you decide to do so, you will be able to continue using most of the
6434 extensions that were compiled for Perl 5.005.
6435
6436 EOM
6437         case "$bincompat5005$d_bincompat5005" in
6438         *"$undef"*) dflt=n ;;
6439         *) dflt=y ;;
6440         esac
6441         rp='Binary compatibility with Perl 5.005?'
6442         . ./myread
6443         case "$ans" in
6444         y*) val="$define" ;;
6445         *)  val="$undef" ;;
6446         esac
6447         set d_bincompat5005
6448         eval $setvar
6449         case "$d_bincompat5005" in
6450         "$define")
6451                 bincompat5005="$define"
6452                 ;;
6453         *)      bincompat5005="$undef"
6454                 d_bincompat5005="$undef"
6455                 ;;
6456         esac
6457         ;;
6458 esac
6459
6460
6461 : see if setuid scripts can be secure
6462 $cat <<EOM
6463
6464 Some kernels have a bug that prevents setuid #! scripts from being
6465 secure.  Some sites have disabled setuid #! scripts because of this.
6466
6467 First let's decide if your kernel supports secure setuid #! scripts.
6468 (If setuid #! scripts would be secure but have been disabled anyway,
6469 don't say that they are secure if asked.)
6470
6471 EOM
6472
6473 val="$undef"
6474 if $test -d /dev/fd; then
6475         echo "#!$ls" >reflect
6476         chmod +x,u+s reflect
6477         ./reflect >flect 2>&1
6478         if $contains "/dev/fd" flect >/dev/null; then
6479                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
6480                 val="$define"
6481         else
6482                 $cat <<EOM
6483 If you are not sure if they are secure, I can check but I'll need a
6484 username and password different from the one you are using right now.
6485 If you don't have such a username or don't want me to test, simply
6486 enter 'none'.
6487
6488 EOM
6489                 rp='Other username to test security of setuid scripts with?'
6490                 dflt='none'
6491                 . ./myread
6492                 case "$ans" in
6493                 n|none)
6494                         case "$d_suidsafe" in
6495                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
6496                                 dflt=n;;
6497                         "$undef")
6498                                 echo "Well, the $hint value is *not* secure." >&4
6499                                 dflt=n;;
6500                         *)      echo "Well, the $hint value *is* secure." >&4
6501                                 dflt=y;;
6502                         esac
6503                         ;;
6504                 *)
6505                         $rm -f reflect flect
6506                         echo "#!$ls" >reflect
6507                         chmod +x,u+s reflect
6508                         echo >flect
6509                         chmod a+w flect
6510                         echo '"su" will (probably) prompt you for '"$ans's password."
6511                         su $ans -c './reflect >flect'
6512                         if $contains "/dev/fd" flect >/dev/null; then
6513                                 echo "Okay, it looks like setuid scripts are secure." >&4
6514                                 dflt=y
6515                         else
6516                                 echo "I don't think setuid scripts are secure." >&4
6517                                 dflt=n
6518                         fi
6519                         ;;
6520                 esac
6521                 rp='Does your kernel have *secure* setuid scripts?'
6522                 . ./myread
6523                 case "$ans" in
6524                 [yY]*)  val="$define";;
6525                 *)      val="$undef";;
6526                 esac
6527         fi
6528 else
6529         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
6530         echo "(That's for file descriptors, not floppy disks.)"
6531         val="$undef"
6532 fi
6533 set d_suidsafe
6534 eval $setvar
6535
6536 $rm -f reflect flect
6537
6538 : now see if they want to do setuid emulation
6539 echo " "
6540 val="$undef"
6541 case "$d_suidsafe" in
6542 "$define")
6543         val="$undef"
6544         echo "No need to emulate SUID scripts since they are secure here." >& 4
6545         ;;
6546 *)
6547         $cat <<EOM
6548 Some systems have disabled setuid scripts, especially systems where
6549 setuid scripts cannot be secure.  On systems where setuid scripts have
6550 been disabled, the setuid/setgid bits on scripts are currently
6551 useless.  It is possible for $package to detect those bits and emulate
6552 setuid/setgid in a secure fashion.  This emulation will only work if
6553 setuid scripts have been disabled in your kernel.
6554
6555 EOM
6556         case "$d_dosuid" in
6557         "$define") dflt=y ;;
6558         *) dflt=n ;;
6559         esac
6560         rp="Do you want to do setuid/setgid emulation?"
6561         . ./myread
6562         case "$ans" in
6563         [yY]*)  val="$define";;
6564         *)      val="$undef";;
6565         esac
6566         ;;
6567 esac
6568 set d_dosuid
6569 eval $setvar
6570
6571 : see if this is a malloc.h system
6572 set malloc.h i_malloc
6573 eval $inhdr
6574
6575 : see if stdlib is available
6576 set stdlib.h i_stdlib
6577 eval $inhdr
6578
6579 : determine which malloc to compile in
6580 echo " "
6581 case "$usemymalloc" in
6582 [yY]*|true|$define)     dflt='y' ;;
6583 [nN]*|false|$undef)     dflt='n' ;;
6584 *)      case "$ptrsize" in
6585         4) dflt='y' ;;
6586         *) dflt='n' ;;
6587         esac
6588         ;;
6589 esac
6590 rp="Do you wish to attempt to use the malloc that comes with $package?"
6591 . ./myread
6592 usemymalloc="$ans"
6593 case "$ans" in
6594 y*|true)
6595         usemymalloc='y'
6596         mallocsrc='malloc.c'
6597         mallocobj="malloc$_o"
6598         d_mymalloc="$define"
6599         case "$libs" in
6600         *-lmalloc*)
6601                 : Remove malloc from list of libraries to use
6602                 echo "Removing unneeded -lmalloc from library list" >&4
6603                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
6604                 shift
6605                 libs="$*"
6606                 echo "libs = $libs" >&4
6607                 ;;
6608         esac
6609         ;;
6610 *)
6611         usemymalloc='n'
6612         mallocsrc=''
6613         mallocobj=''
6614         d_mymalloc="$undef"
6615         ;;
6616 esac
6617
6618 : compute the return types of malloc and free
6619 echo " "
6620 $cat >malloc.c <<END
6621 #$i_malloc I_MALLOC
6622 #$i_stdlib I_STDLIB
6623 #include <stdio.h>
6624 #include <sys/types.h>
6625 #ifdef I_MALLOC
6626 #include <malloc.h>
6627 #endif
6628 #ifdef I_STDLIB
6629 #include <stdlib.h>
6630 #endif
6631 #ifdef TRY_MALLOC
6632 void *malloc();
6633 #endif
6634 #ifdef TRY_FREE
6635 void free();
6636 #endif
6637 END
6638 case "$malloctype" in
6639 '')
6640         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
6641                 malloctype='void *'
6642         else
6643                 malloctype='char *'
6644         fi
6645         ;;
6646 esac
6647 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6648
6649 case "$freetype" in
6650 '')
6651         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6652                 freetype='void'
6653         else
6654                 freetype='int'
6655         fi
6656         ;;
6657 esac
6658 echo "Your system uses $freetype free(), it would seem." >&4
6659 $rm -f malloc.[co]
6660 $cat <<EOM
6661
6662 After $package is installed, you may wish to install various
6663 add-on modules and utilities.  Typically, these add-ons will
6664 be installed under $prefix with the rest
6665 of this package.  However, you may wish to install such add-ons
6666 elsewhere under a different prefix.
6667
6668 If you do not wish to put everything under a single prefix, that's
6669 ok.  You will be prompted for the individual locations; this siteprefix
6670 is only used to suggest the defaults.
6671
6672 The default should be fine for most people.
6673
6674 EOM
6675 fn=d~+
6676 rp='Installation prefix to use for add-on modules and utilities?'
6677 : XXX Here might be another good place for an installstyle setting.
6678 case "$siteprefix" in
6679 '') dflt=$prefix ;;
6680 *)  dflt=$siteprefix ;;
6681 esac
6682 . ./getfile
6683 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6684 oldsiteprefix=''
6685 case "$siteprefix" in
6686 '') ;;
6687 *)      case "$ans" in
6688         "$prefix") ;;
6689         *) oldsiteprefix="$prefix";;
6690         esac
6691         ;;
6692 esac
6693 siteprefix="$ans"
6694 siteprefixexp="$ansexp"
6695
6696 : determine where site specific libraries go.
6697 : Usual default is /usr/local/lib/perl5/site_perl/$version
6698 : The default "style" setting is made in installstyle.U
6699 : XXX No longer works with Prefixit stuff.
6700 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6701 case "$sitelib" in
6702 '') case "$installstyle" in
6703         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
6704         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
6705         esac
6706         ;;
6707 *)      dflt="$sitelib"
6708         ;;
6709 esac
6710 $cat <<EOM
6711
6712 The installation process will create a directory for
6713 site-specific extensions and modules.  Most users find it convenient
6714 to place all site-specific files in this directory rather than in the
6715 main distribution directory.
6716
6717 EOM
6718 fn=d~+
6719 rp='Pathname for the site-specific library files?'
6720 . ./getfile
6721 sitelib="$ans"
6722 sitelibexp="$ansexp"
6723 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
6724 : Change installation prefix, if necessary.
6725 if $test X"$prefix" != X"$installprefix"; then
6726         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
6727 else
6728         installsitelib="$sitelibexp"
6729 fi
6730
6731 : determine where site specific architecture-dependent libraries go.
6732 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
6733 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6734 : sitelib may have an optional trailing /share.
6735 case "$sitearch" in
6736 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
6737         dflt="$dflt/$archname"
6738         ;;
6739 *)      dflt="$sitearch"
6740         ;;
6741 esac
6742 set sitearch sitearch none
6743 eval $prefixit
6744 $cat <<EOM
6745
6746 The installation process will also create a directory for
6747 architecture-dependent site-specific extensions and modules.
6748
6749 EOM
6750 fn=d~+
6751 rp='Pathname for the site-specific architecture-dependent library files?'
6752 . ./getfile
6753 sitearch="$ans"
6754 sitearchexp="$ansexp"
6755 : Change installation prefix, if necessary.
6756 if $test X"$prefix" != X"$installprefix"; then
6757         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6758 else
6759         installsitearch="$sitearchexp"
6760 fi
6761
6762 $cat <<EOM
6763
6764 The installation process will also create a directory for
6765 vendor-supplied add-ons.  Vendors who supply perl with their system
6766 may find it convenient to place all vendor-supplied files in this
6767 directory rather than in the main distribution directory.  This will
6768 ease upgrades between binary-compatible maintenance versions of perl.
6769
6770 Of course you may also use these directories in whatever way you see
6771 fit.  For example, you might use them to access modules shared over a
6772 company-wide network.
6773
6774 The default answer should be fine for most people.
6775 This causes further questions about vendor add-ons to be skipped
6776 and no vendor-specific directories will be configured for perl.
6777
6778 EOM
6779 rp='Do you want to configure vendor-specific add-on directories?'
6780 case "$usevendorprefix" in
6781 define|true|[yY]*) dflt=y ;;
6782 *)      : User may have set vendorprefix directly on Configure command line.
6783         case "$vendorprefix" in
6784         ''|' ') dflt=n ;;
6785         *)      dflt=y ;;
6786         esac
6787         ;;
6788 esac
6789 . ./myread
6790 case "$ans" in
6791 [yY]*)  fn=d~+
6792         rp='Installation prefix to use for vendor-supplied add-ons?'
6793         case "$vendorprefix" in
6794         '') dflt='' ;;
6795         *)  dflt=$vendorprefix ;;
6796         esac
6797         . ./getfile
6798         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6799         oldvendorprefix=''
6800         case "$vendorprefix" in
6801         '') ;;
6802         *)      case "$ans" in
6803                 "$prefix") ;;
6804                 *) oldvendorprefix="$prefix";;
6805                 esac
6806                 ;;
6807         esac
6808         usevendorprefix="$define"
6809         vendorprefix="$ans"
6810         vendorprefixexp="$ansexp"
6811         ;;
6812 *)      usevendorprefix="$undef"
6813         vendorprefix=''
6814         vendorprefixexp=''
6815         ;;
6816 esac
6817
6818 case "$vendorprefix" in
6819 '')     d_vendorlib="$undef"
6820         vendorlib=''
6821         vendorlibexp=''
6822         ;;
6823 *)      d_vendorlib="$define"
6824         : determine where vendor-supplied modules go.
6825         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6826         case "$vendorlib" in
6827         '')
6828                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6829                 case "$installstyle" in
6830                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6831                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6832                 esac
6833                 ;;
6834         *)      dflt="$vendorlib"
6835                 ;;
6836         esac
6837         fn=d~+
6838         rp='Pathname for the vendor-supplied library files?'
6839         . ./getfile
6840         vendorlib="$ans"
6841         vendorlibexp="$ansexp"
6842         ;;
6843 esac
6844 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6845 : Change installation prefix, if necessary.
6846 if $test X"$prefix" != X"$installprefix"; then
6847         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6848 else
6849         installvendorlib="$vendorlibexp"
6850 fi
6851
6852 case "$vendorprefix" in
6853 '')     d_vendorarch="$undef"
6854         vendorarch=''
6855         vendorarchexp=''
6856         ;;
6857 *)      d_vendorarch="$define"
6858         : determine where vendor-supplied architecture-dependent libraries go.
6859         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
6860         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6861         : vendorlib may have an optional trailing /share.
6862         case "$vendorarch" in
6863         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
6864                 dflt="$dflt/$archname"
6865                 ;;
6866         *)      dflt="$vendorarch" ;;
6867         esac
6868         fn=d~+
6869         rp='Pathname for vendor-supplied architecture-dependent files?'
6870         . ./getfile
6871         vendorarch="$ans"
6872         vendorarchexp="$ansexp"
6873         ;;
6874 esac
6875 : Change installation prefix, if necessary.
6876 if $test X"$prefix" != X"$installprefix"; then
6877         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6878 else
6879         installvendorarch="$vendorarchexp"
6880 fi
6881
6882 : Final catch-all directories to search
6883 $cat <<EOM
6884
6885 Lastly, you can have perl look in other directories for extensions and
6886 modules in addition to those already specified.
6887 These directories will be searched after 
6888         $sitearch 
6889         $sitelib 
6890 EOM
6891 test X"$vendorlib" != "X" && echo '     ' $vendorlib
6892 test X"$vendorarch" != "X" && echo '    ' $vendorarch
6893 echo ' '
6894 case "$otherlibdirs" in
6895 ''|' ') dflt='none' ;;
6896 *)      dflt="$otherlibdirs" ;;
6897 esac
6898 $cat <<EOM
6899 Enter a colon-separated set of extra paths to include in perl's @INC
6900 search path, or enter 'none' for no extra paths.
6901
6902 EOM
6903
6904 rp='Colon-separated list of additional directories for perl to search?'
6905 . ./myread
6906 case "$ans" in
6907 ' '|''|none)    otherlibdirs=' ' ;;     
6908 *)      otherlibdirs="$ans" ;;
6909 esac
6910 case "$otherlibdirs" in
6911 ' ') val=$undef ;;
6912 *)      val=$define ;;
6913 esac
6914 set d_perl_otherlibdirs
6915 eval $setvar
6916
6917 : Cruising for prototypes
6918 echo " "
6919 echo "Checking out function prototypes..." >&4
6920 $cat >prototype.c <<'EOCP'
6921 int main(int argc, char *argv[]) {
6922         exit(0);}
6923 EOCP
6924 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
6925         echo "Your C compiler appears to support function prototypes."
6926         val="$define"
6927 else
6928         echo "Your C compiler doesn't seem to understand function prototypes."
6929         val="$undef"
6930 fi
6931 set prototype
6932 eval $setvar
6933 $rm -f prototype*
6934
6935 case "$prototype" in
6936 "$define") ;;
6937 *)      ansi2knr='ansi2knr'
6938         echo " "
6939         cat <<EOM >&4
6940
6941 $me:  FATAL ERROR:
6942 This version of $package can only be compiled by a compiler that 
6943 understands function prototypes.  Unfortunately, your C compiler 
6944         $cc $ccflags
6945 doesn't seem to understand them.  Sorry about that.
6946
6947 If GNU cc is available for your system, perhaps you could try that instead.  
6948
6949 Eventually, we hope to support building Perl with pre-ANSI compilers.
6950 If you would like to help in that effort, please contact <perlbug@perl.org>.
6951
6952 Aborting Configure now.
6953 EOM
6954         exit 2
6955         ;;
6956 esac
6957
6958 : determine where public executables go
6959 echo " "
6960 set dflt bin bin
6961 eval $prefixit
6962 fn=d~
6963 rp='Pathname where the public executables will reside?'
6964 . ./getfile
6965 if $test "X$ansexp" != "X$binexp"; then
6966         installbin=''
6967 fi
6968 bin="$ans"
6969 binexp="$ansexp"
6970 : Change installation prefix, if necessary.
6971 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
6972 if $test X"$prefix" != X"$installprefix"; then
6973         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
6974 else
6975         installbin="$binexp"
6976 fi
6977
6978 : Find perl5.005 or later.
6979 echo "Looking for a previously installed perl5.005 or later... "
6980 case "$perl5" in
6981 '')     for tdir in `echo "$binexp$path_sep$PATH" | $sed "s/$path_sep/ /g"`; do
6982                 : Check if this perl is recent and can load a simple module
6983                 if $test -x $tdir/perl$exe_ext && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6984                         perl5=$tdir/perl
6985                         break;
6986                 elif $test -x $tdir/perl5$exe_ext && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6987                         perl5=$tdir/perl5
6988                         break;
6989                 fi
6990         done
6991         ;;
6992 *)      perl5="$perl5"
6993         ;;
6994 esac
6995 case "$perl5" in
6996 '')     echo "None found.  That's ok.";;
6997 *)      echo "Using $perl5." ;;
6998 esac
6999
7000 : Determine list of previous versions to include in @INC
7001 $cat > getverlist <<EOPL
7002 #!$perl5 -w
7003 use File::Basename;
7004 \$api_versionstring = "$api_versionstring";
7005 \$version = "$version";
7006 \$stem = "$sitelib_stem";
7007 \$archname = "$archname";
7008 EOPL
7009         $cat >> getverlist <<'EOPL'
7010 # Can't have leading @ because metaconfig interprets it as a command!
7011 ;@inc_version_list=();
7012 # XXX Redo to do opendir/readdir? 
7013 if (-d $stem) {
7014     chdir($stem);
7015     ;@candidates = glob("5.*");
7016 }
7017 else {
7018     ;@candidates = ();
7019 }
7020
7021 # XXX ToDo:  These comparisons must be reworked when two-digit
7022 # subversions come along, so that 5.7.10 compares as greater than
7023 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
7024 # widespread that we can use the built-in version vectors rather
7025 # than reinventing them here.  For 5.6.0, however, we must
7026 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
7027 foreach $d (@candidates) {
7028     if ($d lt $version) {
7029         if ($d ge $api_versionstring) {
7030             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
7031         }
7032         elsif ($d ge "5.005") {
7033             unshift(@inc_version_list, grep { -d } $d);
7034         }
7035     }
7036     else {
7037         # Skip newer version.  I.e. don't look in
7038         # 5.7.0 if we're installing 5.6.1.
7039     }
7040 }
7041
7042 if (@inc_version_list) {
7043     print join(' ', @inc_version_list);
7044 }
7045 else {
7046     # Blank space to preserve value for next Configure run.
7047     print " ";
7048 }
7049 EOPL
7050 chmod +x getverlist
7051 case "$inc_version_list" in
7052 '')     if test -x "$perl5$exe_ext"; then
7053                 dflt=`$perl5 getverlist`
7054         else
7055                 dflt='none'
7056         fi
7057         ;;
7058 $undef) dflt='none' ;;
7059 *)  eval dflt=\"$inc_version_list\" ;;
7060 esac
7061 case "$dflt" in
7062 ''|' ') dflt=none ;;
7063 esac
7064 case "$dflt" in
7065 5.005) case "$bincompat5005" in
7066        $define|true|[yY]*) ;;
7067        *) dflt=none ;;
7068        esac
7069        ;;
7070 esac
7071 $cat <<'EOM'
7072
7073 In order to ease the process of upgrading, this version of perl 
7074 can be configured to use modules built and installed with earlier 
7075 versions of perl that were installed under $prefix.  Specify here
7076 the list of earlier versions that this version of perl should check.
7077 If Configure detected no earlier versions of perl installed under
7078 $prefix, then the list will be empty.  Answer 'none' to tell perl
7079 to not search earlier versions.
7080
7081 The default should almost always be sensible, so if you're not sure,
7082 just accept the default.
7083 EOM
7084
7085 rp='List of earlier versions to include in @INC?'
7086 . ./myread
7087 case "$ans" in
7088 [Nn]one|''|' ') inc_version_list=' ' ;;
7089 *) inc_version_list="$ans" ;;
7090 esac
7091 case "$inc_version_list" in
7092 ''|' ') 
7093         inc_version_list_init='0';;
7094 *)      inc_version_list_init=`echo $inc_version_list |
7095                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
7096         ;;
7097 esac
7098 $rm -f getverlist
7099
7100 : determine whether to install perl also as /usr/bin/perl
7101
7102 echo " "
7103 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
7104         $cat <<EOM
7105 Many scripts expect perl to be installed as /usr/bin/perl.
7106 I can install the perl you are about to compile also as /usr/bin/perl
7107 (in addition to $installbin/perl).
7108 EOM
7109         case "$installusrbinperl" in
7110         "$undef"|[nN]*) dflt='n';;
7111         *)              dflt='y';;
7112         esac
7113         rp="Do you want to install perl as /usr/bin/perl?"
7114         . ./myread
7115         case "$ans" in
7116         [yY]*)  val="$define";;
7117         *)      val="$undef" ;;
7118         esac
7119 else
7120         val="$undef"
7121 fi
7122 set installusrbinperl
7123 eval $setvar
7124
7125 : see if dld is available
7126 set dld.h i_dld
7127 eval $inhdr
7128
7129 : see if dlopen exists
7130 xxx_runnm="$runnm"
7131 runnm=false
7132 set dlopen d_dlopen
7133 eval $inlibc
7134 runnm="$xxx_runnm"
7135
7136 : determine which dynamic loading, if any, to compile in
7137 echo " "
7138 dldir="ext/DynaLoader"
7139 case "$usedl" in
7140 $define|y|true)
7141         dflt='y'
7142         usedl="$define"
7143         ;;
7144 $undef|n|false)
7145         dflt='n'
7146         usedl="$undef"
7147         ;;
7148 *) 
7149         dflt='n'
7150         case "$d_dlopen" in
7151             $define) dflt='y' ;;
7152         esac
7153         case "$i_dld" in
7154             $define) dflt='y' ;;
7155         esac
7156         : Does a dl_xxx.xs file exist for this operating system
7157         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
7158         ;;
7159 esac
7160 rp="Do you wish to use dynamic loading?"
7161 . ./myread
7162 usedl="$ans"
7163 case "$ans" in
7164 y*) usedl="$define"
7165         case "$dlsrc" in
7166         '')
7167                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
7168                         dflt="$dldir/dl_${osname}.xs"
7169                 elif $test "$d_dlopen" = "$define" ; then
7170                         dflt="$dldir/dl_dlopen.xs"
7171                 elif $test "$i_dld" = "$define" ; then
7172                         dflt="$dldir/dl_dld.xs"
7173                 else
7174                         dflt=''
7175                 fi
7176                 ;;
7177         *)      dflt="$dldir/$dlsrc"
7178                 ;;
7179         esac
7180     echo "The following dynamic loading files are available:"
7181         : Can not go over to $dldir because getfile has path hard-coded in.
7182         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
7183         rp="Source file to use for dynamic loading"
7184         fn="fne"
7185         gfpth="$src"
7186         . ./getfile
7187         usedl="$define"
7188         : emulate basename
7189         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
7190
7191         $cat << EOM
7192
7193 Some systems may require passing special flags to $cc -c to
7194 compile modules that will be used to create a shared library.
7195 To use no flags, say "none".
7196
7197 EOM
7198     case "$cccdlflags" in
7199     '') case "$gccversion" in
7200                 '') case "$osname" in
7201                         hpux)   dflt='+z' ;;
7202                         next)   dflt='none' ;;
7203                         irix*)  dflt='-KPIC' ;;
7204                         svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
7205                         sunos)  dflt='-pic' ;;
7206                         *)      dflt='none' ;;
7207                     esac
7208                         ;;
7209                 *)  case "$osname" in
7210                         svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
7211                         *)      dflt='-fpic' ;;
7212                     esac ;;
7213             esac ;;
7214         ' ') dflt='none' ;;
7215     *)  dflt="$cccdlflags" ;;
7216     esac
7217     rp="Any special flags to pass to $cc -c to compile shared library modules?"
7218     . ./myread
7219     case "$ans" in
7220     none) cccdlflags=' ' ;;
7221     *) cccdlflags="$ans" ;;
7222     esac
7223
7224     cat << EOM
7225
7226 Some systems use ld to create libraries that can be dynamically loaded,
7227 while other systems (such as those using ELF) use $cc.
7228
7229 EOM
7230         case "$ld" in
7231         '')     $cat >try.c <<'EOM'
7232 /* Test for whether ELF binaries are produced */
7233 #include <fcntl.h>
7234 #include <stdlib.h>
7235 int main() {
7236         char b[4];
7237         int i = open("a.out",O_RDONLY);
7238         if(i == -1) 
7239                 exit(1); /* fail */
7240         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
7241                 exit(0); /* succeed (yes, it's ELF) */
7242         else
7243                 exit(1); /* fail */
7244 }
7245 EOM
7246                 if $cc $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then
7247                         cat <<EOM
7248 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
7249 EOM
7250                         dflt="$cc"
7251                 else
7252                         echo "I'll use ld to build dynamic libraries."
7253                         dflt='ld'
7254                 fi
7255                 rm -f try.c a.out
7256                 ;;
7257         *)      dflt="$ld"
7258                 ;;
7259         esac
7260
7261     rp="What command should be used to create dynamic libraries?"
7262     . ./myread
7263         ld="$ans"
7264
7265     cat << EOM
7266
7267 Some systems may require passing special flags to $ld to create a
7268 library that can be dynamically loaded.  If your ld flags include
7269 -L/other/path options to locate libraries outside your loader's normal
7270 search path, you may need to specify those -L options here as well.  To
7271 use no flags, say "none".
7272
7273 EOM
7274     case "$lddlflags" in
7275     '') case "$osname" in
7276                         beos) dflt='-nostart' ;;
7277                         hpux) dflt='-b';
7278                               case "$gccversion" in
7279                               '') dflt="$dflt +vnocompatwarnings" ;;
7280                               esac
7281                               ;;        
7282                         linux|irix*)    dflt='-shared' ;;
7283                         next)  dflt='none' ;;
7284                         solaris) dflt='-G' ;;
7285                         sunos) dflt='-assert nodefinitions' ;;
7286                         svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
7287                 *)     dflt='none' ;;
7288                         esac
7289                         ;;
7290     *) dflt="$lddlflags" ;;
7291     esac
7292
7293         : Try to guess additional flags to pick up local libraries.
7294         : Be careful not to append to a plain 'none'
7295         case "$dflt" in
7296         none) dflt='' ;;
7297         esac
7298         for thisflag in $ldflags; do
7299                 case "$thisflag" in
7300                 -L*|-R*)
7301                         case " $dflt " in
7302                         *" $thisflag "*) ;;
7303                         *) dflt="$dflt $thisflag" ;;
7304                         esac
7305                         ;;
7306                 esac
7307         done
7308
7309         case "$dflt" in
7310         ''|' ') dflt='none' ;;
7311         esac
7312
7313     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
7314     . ./myread
7315     case "$ans" in
7316     none) lddlflags=' ' ;;
7317     *) lddlflags="$ans" ;;
7318     esac
7319
7320         cat <<EOM
7321
7322 Some systems may require passing special flags to $cc to indicate that
7323 the resulting executable will use dynamic linking.  To use no flags,
7324 say "none".
7325
7326 EOM
7327     case "$ccdlflags" in
7328     '') case "$osname" in
7329                 hpux)   dflt='-Wl,-E' ;;
7330                 linux)  dflt='-rdynamic' ;;
7331                 next)   dflt='none' ;;
7332                 sunos)  dflt='none' ;;
7333                 *)      dflt='none' ;;
7334             esac ;;
7335     ' ')  dflt='none' ;;
7336     *)  dflt="$ccdlflags" ;;
7337     esac
7338     rp="Any special flags to pass to $cc to use dynamic linking?"
7339     . ./myread
7340     case "$ans" in
7341     none) ccdlflags=' ' ;;
7342     *) ccdlflags="$ans" ;;
7343     esac
7344     ;;
7345 *)  usedl="$undef"
7346         ld='ld'
7347     dlsrc='dl_none.xs'
7348     lddlflags=''
7349     ccdlflags=''
7350     ;;
7351 esac
7352
7353 also=''
7354 case "$usedl" in
7355 $undef)
7356         # No dynamic loading being used, so don't bother even to prompt.
7357         useshrplib='false'
7358         ;;
7359 *)      case "$useshrplib" in
7360         '')     case "$osname" in
7361                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
7362                         dflt=y
7363                         also='Building a shared libperl is required for dynamic loading to work on your system.'
7364                         ;;
7365                 next*)
7366                         case "$osvers" in
7367                         4*)     dflt=y
7368                                 also='Building a shared libperl is needed for MAB support.'
7369                                 ;;
7370                         *)      dflt=n
7371                                 ;;
7372                         esac
7373                         ;;
7374                 *)      dflt=n
7375                         ;;
7376                 esac
7377                 ;;
7378         $define|true|[Yy]*)
7379                 dflt=y
7380                 ;;
7381         *)      dflt=n
7382                 ;;
7383         esac
7384         $cat << EOM
7385
7386 The perl executable is normally obtained by linking perlmain.c with
7387 libperl${_a}, any static extensions (usually just DynaLoader), and
7388 any other libraries needed on this system (such as -lm, etc.).  Since
7389 your system supports dynamic loading, it is probably possible to build
7390 a shared libperl.$so.  If you will have more than one executable linked
7391 to libperl.$so, this will significantly reduce the size of each
7392 executable, but it may have a noticeable affect on performance.  The
7393 default is probably sensible for your system.
7394 $also
7395
7396 EOM
7397         rp="Build a shared libperl.$so (y/n)"
7398         . ./myread
7399         case "$ans" in
7400         true|$define|[Yy]*)
7401                 useshrplib='true'  ;;
7402         *)      useshrplib='false' ;;
7403         esac
7404         ;;
7405 esac
7406
7407 case "$useshrplib" in
7408 true)
7409         case "$libperl" in
7410         '')
7411                 # Figure out a good name for libperl.so.  Since it gets stored in
7412                 # a version-specific architecture-dependent library, the version
7413                 # number isn't really that important, except for making cc/ld happy.
7414                 #
7415                 # A name such as libperl.so.3.1
7416                 majmin="libperl.$so.$patchlevel.$subversion"
7417                 # A name such as libperl.so.301
7418                 majonly=`echo $patchlevel $subversion |
7419                         $awk '{printf "%d%02d", $1, $2}'`
7420                 majonly=libperl.$so.$majonly
7421                 # I'd prefer to keep the os-specific stuff here to a minimum, and
7422                 # rely on figuring it out from the naming of libc.
7423                 case "${osname}${osvers}" in
7424                 next4*)
7425                         dflt=libperl.5.$so
7426                         # XXX How handle the --version stuff for MAB?
7427                         ;;
7428                 linux*)  # ld won't link with a bare -lperl otherwise.
7429                         dflt=libperl.$so
7430                         ;;
7431                 cygwin*) # include version
7432                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
7433                         ;;
7434                 *)      # Try to guess based on whether libc has major.minor.
7435                         case "$libc" in
7436                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
7437                         *libc.$so.[0-9]*) dflt=$majonly ;;
7438                         *)      dflt=libperl.$so ;;
7439                         esac
7440                         ;;
7441                 esac
7442                 ;;
7443         *)      dflt=$libperl
7444                 ;;
7445         esac
7446         cat << EOM
7447
7448 I need to select a good name for the shared libperl.  If your system uses
7449 library names with major and minor numbers, then you might want something
7450 like $majmin.  Alternatively, if your system uses a single version
7451 number for shared libraries, then you might want to use $majonly.
7452 Or, your system might be quite happy with a simple libperl.$so.
7453
7454 Since the shared libperl will get installed into a version-specific
7455 architecture-dependent directory, the version number of the shared perl
7456 library probably isn't important, so the default should be o.k.
7457
7458 EOM
7459         rp='What name do you want to give to the shared libperl?'
7460         . ./myread
7461         libperl=$ans
7462         echo "Ok, I'll use $libperl"
7463         ;;
7464 *)
7465         libperl="libperl${_a}"
7466         ;;
7467 esac
7468
7469 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
7470 case "$shrpdir" in
7471 '') ;;
7472 *)      $cat >&4 <<EOM
7473 WARNING:  Use of the shrpdir variable for the installation location of
7474 the shared $libperl is not supported.  It was never documented and
7475 will not work in this version.  Let me (perlbug@perl.org)
7476 know of any problems this may cause.
7477
7478 EOM
7479         case "$shrpdir" in
7480         "$archlibexp/CORE")
7481                 $cat >&4 <<EOM
7482 But your current setting of $shrpdir is
7483 the default anyway, so it's harmless.
7484 EOM
7485                 ;;
7486         *)
7487                 $cat >&4 <<EOM
7488 Further, your current attempted setting of $shrpdir
7489 conflicts with the value of $archlibexp/CORE
7490 that installperl will use.
7491 EOM
7492                 ;;
7493         esac
7494         ;;
7495 esac
7496
7497 # How will the perl executable find the installed shared $libperl?
7498 # Add $xxx to ccdlflags.
7499 # If we can't figure out a command-line option, use $shrpenv to
7500 # set env LD_RUN_PATH.  The main perl makefile uses this.
7501 shrpdir=$archlibexp/CORE
7502 xxx=''
7503 tmp_shrpenv=''
7504 if "$useshrplib"; then
7505     case "$osname" in 
7506         aix)
7507                 # We'll set it in Makefile.SH...
7508                 ;;
7509         solaris|netbsd)
7510                 xxx="-R $shrpdir"
7511                 ;;
7512         freebsd)
7513                 xxx="-Wl,-R$shrpdir"
7514                 ;;
7515         linux|irix*|dec_osf)
7516                 xxx="-Wl,-rpath,$shrpdir"
7517                 ;;
7518         next)
7519                 # next doesn't like the default...
7520                 ;;
7521         beos)
7522                 # beos doesn't like the default, either.
7523                 ;;
7524         hpux*)
7525                 # hpux doesn't like the default, either.
7526                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
7527                 ;;
7528         *)
7529                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
7530                 ;;
7531         esac
7532         case "$xxx" in
7533         '') ;;
7534         *)      
7535                 # Only add $xxx if it isn't already in ccdlflags.
7536                 case " $ccdlflags " in
7537                 *" $xxx "*)     ;;
7538                 *)      ccdlflags="$ccdlflags $xxx"
7539                         cat <<EOM >&4
7540
7541 Adding $xxx to the flags
7542 passed to $ld so that the perl executable will find the 
7543 installed shared $libperl.
7544
7545 EOM
7546                         ;;
7547                 esac
7548                 ;;
7549         esac
7550 fi
7551 # Fix ccdlflags in AIX for building external extensions.
7552 # (For building Perl itself bare -bE:perl.exp is needed,
7553 #  Makefile.SH takes care of this.)
7554 case "$osname" in
7555 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
7556 esac
7557 # Respect a hint or command-line value.
7558 case "$shrpenv" in
7559 '') shrpenv="$tmp_shrpenv" ;;
7560 esac
7561 case "$ldlibpthname" in
7562 '')     ldlibpthname=LD_LIBRARY_PATH ;;
7563 none)   ldlibpthname='' ;;
7564 esac
7565
7566 : determine where manual pages are on this system
7567 echo " "
7568 case "$sysman" in
7569 '') 
7570         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
7571         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
7572         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
7573         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
7574         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
7575         sysman=`./loc . /usr/man/man1 $syspath`
7576         ;;
7577 esac
7578 if $test -d "$sysman"; then
7579         echo "System manual is in $sysman." >&4
7580 else
7581         echo "Could not find manual pages in source form." >&4
7582 fi
7583
7584 : determine where manual pages go
7585 set man1dir man1dir none
7586 eval $prefixit
7587 $cat <<EOM
7588
7589 $spackage has manual pages available in source form.
7590 EOM
7591 case "$nroff" in
7592 nroff)
7593         echo "However, you don't have nroff, so they're probably useless to you."
7594         case "$man1dir" in
7595         '') man1dir="none";;
7596         esac;;
7597 esac
7598 echo "If you don't want the manual sources installed, answer 'none'."
7599 case "$man1dir" in
7600 ' ') dflt=none
7601         ;;
7602 '')
7603         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
7604         lookpath="$lookpath $prefixexp/man/p_man/man1"
7605         lookpath="$lookpath $prefixexp/man/u_man/man1"
7606         lookpath="$lookpath $prefixexp/man/man.1"
7607         case "$sysman" in
7608         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
7609         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
7610         esac
7611         set dflt
7612         eval $prefixup
7613         ;;
7614 *)  dflt="$man1dir"
7615         ;;
7616 esac
7617 echo " "
7618 fn=dn+~
7619 rp="Where do the main $spackage manual pages (source) go?"
7620 . ./getfile
7621 if $test "X$man1direxp" != "X$ansexp"; then
7622         installman1dir=''
7623 fi
7624 man1dir="$ans"
7625 man1direxp="$ansexp"
7626 case "$man1dir" in
7627 '')     man1dir=' '
7628         installman1dir='';;
7629 esac
7630
7631 : Change installation prefix, if necessary.
7632 if $test X"$prefix" != X"$installprefix"; then
7633         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
7634 else
7635         installman1dir="$man1direxp"
7636 fi
7637
7638 : What suffix to use on installed man pages
7639
7640 case "$man1dir" in
7641 ' ')
7642         man1ext='0'
7643         ;;
7644 *)
7645         rp="What suffix should be used for the main $spackage man pages?"
7646         case "$man1ext" in
7647         '')     case "$man1dir" in
7648                 *1)  dflt=1 ;;
7649                 *1p) dflt=1p ;;
7650                 *1pm) dflt=1pm ;;
7651                 *l) dflt=l;;
7652                 *n) dflt=n;;
7653                 *o) dflt=o;;
7654                 *p) dflt=p;;
7655                 *C) dflt=C;;
7656                 *L) dflt=L;;
7657                 *L1) dflt=L1;;
7658                 *) dflt=1;;
7659                 esac
7660                 ;;
7661         *)      dflt="$man1ext";;
7662         esac
7663         . ./myread
7664         man1ext="$ans"
7665         ;;
7666 esac
7667
7668 : see if we can have long filenames
7669 echo " "
7670 first=123456789abcdef
7671 $rm -f $first
7672 if (echo hi >$first) 2>/dev/null; then
7673         if $test -f 123456789abcde; then
7674                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
7675                 val="$undef"
7676         else
7677                 echo 'You can have filenames longer than 14 characters.'>&4
7678                 val="$define"
7679         fi
7680 else
7681         $cat <<'EOM'
7682 You can't have filenames longer than 14 chars.
7683 You can't even think about them!
7684 EOM
7685         val="$undef"
7686 fi 
7687 set d_flexfnam
7688 eval $setvar
7689 $rm -rf 123456789abcde*
7690
7691 : determine where library module manual pages go
7692 set man3dir man3dir none
7693 eval $prefixit
7694 $cat <<EOM
7695
7696 $spackage has manual pages for many of the library modules.
7697 EOM
7698
7699 case "$nroff" in
7700 nroff)
7701         $cat <<'EOM'
7702 However, you don't have nroff, so they're probably useless to you.
7703 EOM
7704         case "$man3dir" in
7705         '') man3dir="none";;
7706         esac;;
7707 esac
7708
7709 case "$d_flexfnam" in
7710 undef)
7711         $cat <<'EOM'
7712 However, your system can't handle the long file names like File::Basename.3. 
7713 EOM
7714         case "$man3dir" in
7715         '') man3dir="none";;
7716         esac;;
7717 esac
7718
7719 echo "If you don't want the manual sources installed, answer 'none'."
7720 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7721 case "$man3dir" in
7722 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
7723         if $test -d "$privlib/man/man3"; then
7724                 cat <<EOM >&4
7725
7726 WARNING:  Previous versions of perl installed man3 pages into
7727 $privlib/man/man3.  This version will suggest a 
7728 new default of $dflt.  
7729 EOM
7730                 tdflt=$dflt
7731                 dflt='n'
7732                 rp='Do you wish to preserve the old behavior?(y/n)'
7733                 . ./myread
7734                 case "$ans" in
7735                 y*) dflt="$privlib/man/man3" ;;
7736                 *)  dflt=$tdflt ;;
7737                 esac
7738     fi
7739         ;;
7740 *)      dflt="$man3dir" ;;
7741 esac
7742 case "$dflt" in
7743 ' ') dflt=none ;;
7744 esac
7745 echo " "
7746 fn=dn+~
7747 rp="Where do the $package library man pages (source) go?"
7748 . ./getfile
7749 man3dir="$ans"
7750 man3direxp="$ansexp"
7751 case "$man3dir" in
7752 '')     man3dir=' '
7753         installman3dir='';;
7754 esac
7755
7756 : Change installation prefix, if necessary.
7757 if $test X"$prefix" != X"$installprefix"; then
7758         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
7759 else
7760         installman3dir="$man3direxp"
7761 fi
7762
7763 : What suffix to use on installed man pages
7764 case "$man3dir" in
7765 ' ')
7766         man3ext='0'
7767         ;;
7768 *)
7769         rp="What suffix should be used for the $package library man pages?"
7770         case "$man3ext" in
7771         '')     case "$man3dir" in
7772                 *3)  dflt=3 ;;
7773                 *3p) dflt=3p ;;
7774                 *3pm) dflt=3pm ;;
7775                 *l) dflt=l;;
7776                 *n) dflt=n;;
7777                 *o) dflt=o;;
7778                 *p) dflt=p;;
7779                 *C) dflt=C;;
7780                 *L) dflt=L;;
7781                 *L3) dflt=L3;;
7782                 *) dflt=3;;
7783                 esac
7784                 ;;
7785         *)      dflt="$man3ext";;
7786         esac
7787         . ./myread
7788         man3ext="$ans"
7789         ;;
7790 esac
7791
7792 : see if we have to deal with yellow pages, now NIS.
7793 if $test -d /usr/etc/yp || $test -d /etc/yp; then
7794         if $test -f /usr/etc/nibindd; then
7795                 echo " "
7796                 echo "I'm fairly confident you're on a NeXT."
7797                 echo " "
7798                 rp='Do you get the hosts file via NetInfo?'
7799                 dflt=y
7800                 case "$hostcat" in
7801                 nidump*) ;;
7802                 '') ;;
7803                 *) dflt=n;;
7804                 esac
7805                 . ./myread
7806                 case "$ans" in
7807                 y*) hostcat='nidump hosts .';;
7808                 *)      case "$hostcat" in
7809                         nidump*) hostcat='';;
7810                         esac
7811                         ;;
7812                 esac
7813         fi
7814         case "$hostcat" in
7815         nidump*) ;;
7816         *)
7817                 case "$hostcat" in
7818                 *ypcat*) dflt=y;;
7819                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7820                                 dflt=y
7821                         else
7822                                 dflt=n
7823                         fi;;
7824                 *) dflt=n;;
7825                 esac
7826                 echo " "
7827                 rp='Are you getting the hosts file via yellow pages?'
7828                 . ./myread
7829                 case "$ans" in
7830                 y*) hostcat='ypcat hosts';;
7831                 *) hostcat='cat /etc/hosts';;
7832                 esac
7833                 ;;
7834         esac
7835 fi
7836 case "$hostcat" in
7837 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
7838 esac
7839 case "$groupcat" in
7840 '') test -f /etc/group && groupcat='cat /etc/group';;
7841 esac
7842 case "$passcat" in
7843 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
7844 esac
7845
7846 : now get the host name
7847 echo " "
7848 echo "Figuring out host name..." >&4
7849 case "$myhostname" in
7850 '') cont=true
7851         echo 'Maybe "hostname" will work...'
7852         if tans=`sh -c hostname 2>&1` ; then
7853                 myhostname=$tans
7854                 phostname=hostname
7855                 cont=''
7856         fi
7857         ;;
7858 *) cont='';;
7859 esac
7860 if $test "$cont"; then
7861         if ./xenix; then
7862                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
7863                 if tans=`cat /etc/systemid 2>&1` ; then
7864                         myhostname=$tans
7865                         phostname='cat /etc/systemid'
7866                         echo "Whadyaknow.  Xenix always was a bit strange..."
7867                         cont=''
7868                 fi
7869         elif $test -r /etc/systemid; then
7870                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
7871         fi
7872 fi
7873 if $test "$cont"; then
7874         echo 'No, maybe "uuname -l" will work...'
7875         if tans=`sh -c 'uuname -l' 2>&1` ; then
7876                 myhostname=$tans
7877                 phostname='uuname -l'
7878         else
7879                 echo 'Strange.  Maybe "uname -n" will work...'
7880                 if tans=`sh -c 'uname -n' 2>&1` ; then
7881                         myhostname=$tans
7882                         phostname='uname -n'
7883                 else
7884                         echo 'Oh well, maybe I can mine it out of whoami.h...'
7885                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
7886                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
7887                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
7888                         else
7889                                 case "$myhostname" in
7890                                 '') echo "Does this machine have an identity crisis or something?"
7891                                         phostname='';;
7892                                 *)
7893                                         echo "Well, you said $myhostname before..."
7894                                         phostname='echo $myhostname';;
7895                                 esac
7896                         fi
7897                 fi
7898         fi
7899 fi
7900 : you do not want to know about this
7901 set $myhostname
7902 myhostname=$1
7903
7904 : verify guess
7905 if $test "$myhostname" ; then
7906         dflt=y
7907         rp='Your host name appears to be "'$myhostname'".'" Right?"
7908         . ./myread
7909         case "$ans" in
7910         y*) ;;
7911         *) myhostname='';;
7912         esac
7913 fi
7914
7915 : bad guess or no guess
7916 while $test "X$myhostname" = X ; do
7917         dflt=''
7918         rp="Please type the (one word) name of your host:"
7919         . ./myread
7920         myhostname="$ans"
7921 done
7922
7923 : translate upper to lower if necessary
7924 case "$myhostname" in
7925 *[A-Z]*)
7926         echo "(Normalizing case in your host name)"
7927         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
7928         ;;
7929 esac
7930
7931 case "$myhostname" in
7932 *.*)
7933         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
7934         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
7935         echo "(Trimming domain name from host name--host name is now $myhostname)"
7936         ;;
7937 *) case "$mydomain" in
7938         '')
7939                 {
7940                         test "X$hostcat" = "Xypcat hosts" &&
7941                         ypmatch "$myhostname" hosts 2>/dev/null |\
7942                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
7943                         $test -s hosts
7944                 } || {
7945                         test "X$hostcat" != "X" &&
7946                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
7947                                         /[       ]$myhostname[  . ]/p" > hosts
7948                 }
7949                 tmp_re="[       . ]"
7950                 if $test -f hosts; then
7951                         $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
7952                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
7953                         dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
7954                                 hosts | $sort | $uniq | \
7955                                 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
7956                         case `$echo X$dflt` in
7957                         X*\ *)  echo "(Several hosts in the database matched hostname)"
7958                                 dflt=.
7959                                 ;;
7960                         X.) echo "(You do not have fully-qualified names in the hosts database)"
7961                                 ;;
7962                         esac
7963                 else
7964                         echo "(I cannot locate a hosts database anywhere)"
7965                         dflt=.
7966                 fi
7967                 case "$dflt" in
7968                 .)
7969                         tans=`./loc resolv.conf X /etc /usr/etc`
7970                         if $test -f "$tans"; then
7971                                 echo "(Attempting domain name extraction from $tans)"
7972                                 dflt=.`$sed -n -e 's/   / /g' \
7973                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
7974                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7975                                 case "$dflt" in
7976                                 .) dflt=.`$sed -n -e 's/        / /g' \
7977                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
7978                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7979                                         ;;
7980                                 esac
7981                         fi
7982                         ;;
7983                 esac
7984                 case "$dflt" in
7985                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
7986                         dflt=.`sh -c domainname 2>/dev/null`
7987                         case "$dflt" in
7988                         '') dflt='.';;
7989                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
7990                         esac
7991                         ;;
7992                 esac
7993                 case "$dflt$osname" in
7994                 .os390) echo "(Attempting domain name extraction from //'SYS1.TCPPARMS(TCPDATA)')"
7995                         dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "//'SYS1.TCPPARMS(TCPDATA)'" 2>/dev/null`
7996                         ;;
7997                 esac
7998                 case "$dflt" in
7999                 .) echo "(Lost all hope -- silly guess then)"
8000                         dflt='.uucp'
8001                         ;;
8002                 esac
8003                 $rm -f hosts
8004                 ;;
8005         *) dflt="$mydomain";;
8006         esac;;
8007 esac
8008 echo " "
8009 rp="What is your domain name?"
8010 . ./myread
8011 tans="$ans"
8012 case "$ans" in
8013 '') ;;
8014 .*) ;;
8015 *) tans=".$tans";;
8016 esac
8017 mydomain="$tans"
8018
8019 : translate upper to lower if necessary
8020 case "$mydomain" in
8021 *[A-Z]*)
8022         echo "(Normalizing case in your domain name)"
8023         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
8024         ;;
8025 esac
8026
8027 : a little sanity check here
8028 case "$phostname" in
8029 '') ;;
8030 *)
8031         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
8032         $myhostname$mydomain|$myhostname) ;;
8033         *)
8034                 case "$phostname" in
8035                 sed*)
8036                         echo "(That doesn't agree with your whoami.h file, by the way.)"
8037                         ;;
8038                 *)
8039                         echo "(That doesn't agree with your $phostname command, by the way.)"
8040                         ;;
8041                 esac
8042         ;;
8043         esac
8044         ;;
8045 esac
8046
8047 $cat <<EOM
8048
8049 I need to get your e-mail address in Internet format if possible, i.e.
8050 something like user@host.domain. Please answer accurately since I have
8051 no easy means to double check it. The default value provided below
8052 is most probably close to reality but may not be valid from outside
8053 your organization...
8054
8055 EOM
8056 cont=x
8057 while test "$cont"; do
8058         case "$cf_email" in
8059         '') dflt="$cf_by@$myhostname$mydomain";;
8060         *) dflt="$cf_email";;
8061         esac
8062         rp='What is your e-mail address?'
8063         . ./myread
8064         cf_email="$ans"
8065         case "$cf_email" in
8066         *@*.*) cont='' ;;
8067         *)
8068                 rp='Address does not look like an Internet one.  Use it anyway?'
8069                 case "$fastread" in
8070                 yes) dflt=y ;;
8071                 *) dflt=n ;;
8072                 esac
8073                 . ./myread
8074                 case "$ans" in
8075                 y*) cont='' ;;
8076                 *) echo " " ;;
8077                 esac
8078                 ;;
8079         esac
8080 done
8081
8082 $cat <<EOM
8083
8084 If you or somebody else will be maintaining perl at your site, please
8085 fill in the correct e-mail address here so that they may be contacted
8086 if necessary. Currently, the "perlbug" program included with perl
8087 will send mail to this address in addition to perlbug@perl.org. You may
8088 enter "none" for no administrator.
8089
8090 EOM
8091 case "$perladmin" in
8092 '') dflt="$cf_email";;
8093 *) dflt="$perladmin";;
8094 esac
8095 rp='Perl administrator e-mail address'
8096 . ./myread
8097 perladmin="$ans"
8098
8099 : determine whether to only install version-specific parts.
8100 echo " "
8101 $cat <<EOM
8102 Do you want to install only the version-specific parts of the perl
8103 distribution?  Usually you do *not* want to do this.
8104 EOM
8105 case "$versiononly" in
8106 "$define"|[Yy]*|true) dflt='y' ;;
8107 *) dflt='n';
8108 esac
8109 rp="Do you want to install only the version-specific parts of perl?"
8110 . ./myread
8111 case "$ans" in
8112 [yY]*)  val="$define";;
8113 *)      val="$undef" ;;
8114 esac
8115 set versiononly
8116 eval $setvar
8117
8118 : figure out how to guarantee perl startup
8119 case "$startperl" in
8120 '')
8121         case "$sharpbang" in
8122         *!)
8123                 $cat <<EOH
8124
8125 I can use the #! construct to start perl on your system. This will
8126 make startup of perl scripts faster, but may cause problems if you
8127 want to share those scripts and perl is not in a standard place
8128 ($binexp/perl) on all your platforms. The alternative is to force
8129 a shell by starting the script with a single ':' character.
8130
8131 EOH
8132                 case "$versiononly" in
8133                 "$define")      dflt="$binexp/perl$version";;  
8134                 *)              dflt="$binexp/perl";;
8135                 esac
8136                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
8137                 . ./myread
8138                 case "$ans" in
8139                 none)   startperl=": # use perl";;
8140                 *)      startperl="#!$ans"
8141                         if $test 30 -lt `echo "$ans" | wc -c`; then
8142                                 $cat >&4 <<EOM
8143
8144 WARNING:  Some systems limit the #! command to 32 characters.
8145 If you experience difficulty running Perl scripts with #!, try
8146 installing Perl in a directory with a shorter pathname.
8147
8148 EOM
8149                         fi ;;
8150                 esac
8151                 ;;
8152         *) startperl=": # use perl"
8153                 ;;
8154         esac
8155         ;;
8156 esac
8157 echo "I'll use $startperl to start perl scripts."
8158
8159 : figure best path for perl in scripts
8160 case "$perlpath" in
8161 '')
8162         perlpath="$binexp/perl"
8163         case "$startperl" in
8164         *!*) ;;
8165         *)
8166                 $cat <<EOH
8167
8168 I will use the "eval 'exec'" idiom to start Perl on your system.
8169 I can use the full path of your Perl binary for this purpose, but
8170 doing so may cause problems if you want to share those scripts and
8171 Perl is not always in a standard place ($binexp/perl).
8172
8173 EOH
8174                 dflt="$binexp/perl"
8175                 rp="What path shall I use in \"eval 'exec'\"?"
8176                 . ./myread
8177                 perlpath="$ans"
8178                 ;;
8179         esac
8180         ;;
8181 esac
8182 case "$startperl" in
8183 *!*)    ;;
8184 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
8185 esac
8186
8187 : determine where public executable scripts go
8188 set scriptdir scriptdir
8189 eval $prefixit
8190 case "$scriptdir" in
8191 '')
8192         dflt="$bin"
8193         : guess some guesses
8194         $test -d /usr/share/scripts && dflt=/usr/share/scripts
8195         $test -d /usr/share/bin     && dflt=/usr/share/bin
8196         $test -d /usr/local/script  && dflt=/usr/local/script
8197         $test -d /usr/local/scripts && dflt=/usr/local/scripts
8198         $test -d $prefixexp/script  && dflt=$prefixexp/script
8199         set dflt
8200         eval $prefixup
8201         ;;
8202 *)  dflt="$scriptdir"
8203         ;;
8204 esac
8205 $cat <<EOM
8206  
8207 Some installations have a separate directory just for executable scripts so
8208 that they can mount it across multiple architectures but keep the scripts in
8209 one spot.  You might, for example, have a subdirectory of /usr/share for this.
8210 Or you might just lump your scripts in with all your other executables.
8211  
8212 EOM
8213 fn=d~
8214 rp='Where do you keep publicly executable scripts?'
8215 . ./getfile
8216 if $test "X$ansexp" != "X$scriptdirexp"; then
8217         installscript=''
8218 fi
8219 scriptdir="$ans"
8220 scriptdirexp="$ansexp"
8221 : Change installation prefix, if necessary.
8222 if $test X"$prefix" != X"$installprefix"; then
8223         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
8224 else
8225         installscript="$scriptdirexp"
8226 fi
8227
8228 : determine where add-on public executables go
8229 case "$sitebin" in
8230 '')     dflt=$siteprefix/bin ;;
8231 *)      dflt=$sitebin ;;
8232 esac
8233 fn=d~
8234 rp='Pathname where the add-on public executables should be installed?'
8235 . ./getfile
8236 sitebin="$ans"
8237 sitebinexp="$ansexp"
8238 : Change installation prefix, if necessary.
8239 if $test X"$prefix" != X"$installprefix"; then
8240         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
8241 else
8242         installsitebin="$sitebinexp"
8243 fi
8244
8245 case "$vendorprefix" in
8246 '')     d_vendorbin="$undef"
8247         vendorbin=''
8248         vendorbinexp=''
8249         ;;
8250 *)      d_vendorbin="$define"
8251         : determine where vendor-supplied executables go.
8252         case "$vendorbin" in
8253         '') dflt=$vendorprefix/bin ;;
8254         *)      dflt="$vendorbin" ;;
8255         esac
8256         fn=d~+
8257         rp='Pathname for the vendor-supplied executables directory?'
8258         . ./getfile
8259         vendorbin="$ans"
8260         vendorbinexp="$ansexp"
8261         ;;
8262 esac
8263 : Change installation prefix, if necessary.
8264 if $test X"$prefix" != X"$installprefix"; then
8265         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
8266 else
8267         installvendorbin="$vendorbinexp"
8268 fi
8269
8270 : see if qgcvt exists
8271 set qgcvt d_qgcvt
8272 eval $inlibc
8273
8274 echo " "
8275
8276 if $test X"$d_longdbl" = X"$define"; then
8277
8278 echo "Checking how to print long doubles..." >&4
8279
8280 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
8281         $cat >try.c <<'EOCP'
8282 #include <sys/types.h>
8283 #include <stdio.h>
8284 int main() {
8285   double d = 123.456;
8286   printf("%.3f\n", d);
8287 }
8288 EOCP
8289         set try
8290         if eval $compile; then
8291                 yyy=`$run ./try`
8292                 case "$yyy" in
8293                 123.456)
8294                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
8295                         sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
8296                         echo "We will use %f."
8297                         ;;
8298                 esac
8299         fi
8300 fi
8301
8302 if $test X"$sPRIfldbl" = X; then
8303         $cat >try.c <<'EOCP'
8304 #include <sys/types.h>
8305 #include <stdio.h>
8306 int main() {
8307   long double d = 123.456;
8308   printf("%.3Lf\n", d);
8309 }
8310 EOCP
8311         set try
8312         if eval $compile; then
8313                 yyy=`$run ./try`
8314                 case "$yyy" in
8315                 123.456)
8316                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
8317                         sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
8318                         echo "We will use %Lf."
8319                         ;;
8320                 esac
8321         fi
8322 fi
8323
8324 if $test X"$sPRIfldbl" = X; then
8325         $cat >try.c <<'EOCP'
8326 #include <sys/types.h>
8327 #include <stdio.h>
8328 int main() {
8329   long double d = 123.456;
8330   printf("%.3llf\n", d);
8331 }
8332 EOCP
8333         set try
8334         if eval $compile; then
8335                 yyy=`$run ./try`
8336                 case "$yyy" in
8337                 123.456)
8338                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
8339                         sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
8340                         echo "We will use %llf."
8341                         ;;
8342                 esac
8343         fi
8344 fi
8345
8346 if $test X"$sPRIfldbl" = X; then
8347         $cat >try.c <<'EOCP'
8348 #include <sys/types.h>
8349 #include <stdio.h>
8350 int main() {
8351   long double d = 123.456;
8352   printf("%.3lf\n", d);
8353 }
8354 EOCP
8355         set try
8356         if eval $compile; then
8357                 yyy=`$run ./try`
8358                 case "$yyy" in
8359                 123.456)
8360                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
8361                         sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
8362                         echo "We will use %lf."
8363                         ;;
8364                 esac
8365         fi
8366 fi
8367
8368 if $test X"$sPRIfldbl" = X; then
8369         echo "Cannot figure out how to print long doubles." >&4
8370 else
8371         sSCNfldbl=$sPRIfldbl    # expect consistency
8372 fi
8373
8374 $rm -f try try.*
8375
8376 fi # d_longdbl
8377
8378 case "$sPRIfldbl" in
8379 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
8380         d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; 
8381         d_SCNfldbl="$undef";
8382         ;;
8383 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
8384         d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; 
8385         d_SCNfldbl="$define";
8386         ;;
8387 esac
8388
8389 : Check how to convert floats to strings.
8390 echo " "
8391 echo "Checking for an efficient way to convert floats to strings."
8392 echo " " > try.c
8393 case "$uselongdouble" in
8394 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
8395 esac
8396 case "$d_longdbl" in
8397 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
8398 esac
8399 case "$d_PRIgldbl" in
8400 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
8401 esac
8402 $cat >>try.c <<EOP
8403 #ifdef TRY_gconvert
8404 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
8405 char *myname = "gconvert";
8406 #endif
8407 #ifdef TRY_gcvt
8408 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
8409 char *myname = "gcvt";
8410 #endif
8411 #ifdef TRY_qgcvt
8412 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
8413 char *myname = "qgcvt";
8414 #define DOUBLETYPE long double
8415 #endif
8416 #ifdef TRY_sprintf
8417 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
8418 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
8419 #else
8420 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
8421 #endif
8422 char *myname = "sprintf";
8423 #endif
8424
8425 #ifndef DOUBLETYPE
8426 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
8427 #define DOUBLETYPE long double
8428 #else
8429 #define DOUBLETYPE double
8430 #endif
8431 #endif
8432
8433 #include <stdio.h>
8434
8435 #define I_STDLIB $i_stdlib
8436 #ifdef I_STDLIB
8437 #include <stdlib.h>
8438 #endif
8439
8440 int
8441 checkit(expect, got)
8442 char *expect;
8443 char *got;
8444 {
8445     if (strcmp(expect, got)) {
8446                 printf("%s oddity:  Expected %s, got %s\n",
8447                         myname, expect, got);
8448                 exit(1);
8449         }
8450 }
8451
8452 int main()
8453
8454         char buf[64]; 
8455         buf[63] = '\0';
8456
8457         /* This must be 1st test on (which?) platform */
8458         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
8459         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
8460         checkit("0.1", buf);
8461
8462         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
8463         checkit("1", buf);
8464
8465         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
8466         checkit("1.1", buf);
8467
8468         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
8469         checkit("1.01", buf);
8470
8471         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
8472         checkit("1.001", buf);
8473
8474         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
8475         checkit("1.0001", buf);
8476
8477         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
8478         checkit("1.00001", buf);
8479
8480         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
8481         checkit("1.000001", buf);
8482
8483         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
8484         checkit("0", buf);
8485
8486         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
8487         checkit("-1", buf);
8488
8489         /* Some Linux gcvt's give 1.e+5 here. */
8490         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
8491         checkit("100000", buf);
8492         
8493         /* Some Linux gcvt's give -1.e+5 here. */
8494         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
8495         checkit("-100000", buf);
8496
8497         Gconvert((DOUBLETYPE)123.456, 8, 0, buf); 
8498         checkit("123.456", buf);
8499
8500         /* Testing of 1e+129 in bigintpm.t must not get extra '.' here. */
8501         Gconvert((DOUBLETYPE)1e30, 8, 0, buf);
8502         if (strlen(buf) > 5)
8503             checkit("1e+030", buf); /* for Microsoft */
8504         else
8505             checkit("1e+30", buf);
8506
8507         exit(0);
8508 }
8509 EOP
8510 case "$d_Gconvert" in
8511 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
8512 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
8513 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
8514 *) xxx_list='gconvert gcvt sprintf' ;;
8515 esac
8516
8517 case "$d_longdbl$uselongdouble$d_PRIgldbl" in
8518 "$define$define$define")
8519     # for long doubles prefer first qgcvt, then sprintf
8520     xxx_list="`echo $xxx_list|sed s/sprintf//`" 
8521     xxx_list="sprintf $xxx_list"
8522     case "$d_qgcvt" in
8523     "$define") xxx_list="qgcvt $xxx_list" ;;
8524     esac
8525     ;;
8526 esac
8527
8528 for xxx_convert in $xxx_list; do
8529         echo "Trying $xxx_convert..."
8530         $rm -f try try$_o
8531         set try -DTRY_$xxx_convert
8532         if eval $compile; then
8533                 echo "$xxx_convert() found." >&4
8534                 if $run ./try; then
8535                         echo "I'll use $xxx_convert to convert floats into a string." >&4
8536                         break;
8537                 else
8538                         echo "...But $xxx_convert didn't work as I expected."
8539                 fi
8540         else
8541                 echo "$xxx_convert NOT found." >&4
8542         fi
8543 done
8544         
8545 case "$xxx_convert" in
8546 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
8547 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
8548 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
8549 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
8550    "$define$define$define")
8551       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
8552    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
8553    esac
8554    ;;  
8555 esac
8556
8557 : see if _fwalk exists
8558 set fwalk d__fwalk
8559 eval $inlibc
8560
8561 : Initialize h_fcntl
8562 h_fcntl=false
8563
8564 : Initialize h_sysfile
8565 h_sysfile=false
8566
8567 : access call always available on UNIX
8568 set access d_access
8569 eval $inlibc
8570
8571 : locate the flags for 'access()'
8572 case "$d_access" in
8573 "$define")
8574         echo " "
8575         $cat >access.c <<'EOCP'
8576 #include <sys/types.h>
8577 #ifdef I_FCNTL
8578 #include <fcntl.h>
8579 #endif
8580 #ifdef I_SYS_FILE
8581 #include <sys/file.h>
8582 #endif
8583 #ifdef I_UNISTD
8584 #include <unistd.h>
8585 #endif
8586 int main() {
8587         exit(R_OK);
8588 }
8589 EOCP
8590         : check sys/file.h first, no particular reason here
8591         if $test `./findhdr sys/file.h` && \
8592                 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
8593                 h_sysfile=true;
8594                 echo "<sys/file.h> defines the *_OK access constants." >&4
8595         elif $test `./findhdr fcntl.h` && \
8596                 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
8597                 h_fcntl=true;
8598                 echo "<fcntl.h> defines the *_OK access constants." >&4
8599         elif $test `./findhdr unistd.h` && \
8600                 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
8601                 echo "<unistd.h> defines the *_OK access constants." >&4
8602         else
8603                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
8604         fi
8605         ;;
8606 esac
8607 $rm -f access*
8608
8609 : see if accessx exists
8610 set accessx d_accessx
8611 eval $inlibc
8612
8613 : see if alarm exists
8614 set alarm d_alarm
8615 eval $inlibc
8616
8617 : see if atolf exists
8618 set atolf d_atolf
8619 eval $inlibc
8620
8621 : see if atoll exists
8622 set atoll d_atoll
8623 eval $inlibc
8624
8625 : Look for GNU-cc style attribute checking
8626 echo " "
8627 echo "Checking whether your compiler can handle __attribute__ ..." >&4
8628 $cat >attrib.c <<'EOCP'
8629 #include <stdio.h>
8630 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
8631 EOCP
8632 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
8633         if $contains 'warning' attrib.out >/dev/null 2>&1; then
8634                 echo "Your C compiler doesn't fully support __attribute__."
8635                 val="$undef"
8636         else
8637                 echo "Your C compiler supports __attribute__."
8638                 val="$define"
8639         fi
8640 else
8641         echo "Your C compiler doesn't seem to understand __attribute__ at all."
8642         val="$undef"
8643 fi
8644 set d_attribut
8645 eval $setvar
8646 $rm -f attrib*
8647
8648 : see if bcmp exists
8649 set bcmp d_bcmp
8650 eval $inlibc
8651
8652 : see if bcopy exists
8653 set bcopy d_bcopy
8654 eval $inlibc
8655
8656 : see if this is a unistd.h system
8657 set unistd.h i_unistd
8658 eval $inhdr
8659
8660 : see if getpgrp exists
8661 set getpgrp d_getpgrp
8662 eval $inlibc
8663
8664 case "$d_getpgrp" in
8665 "$define")
8666         echo " "
8667         echo "Checking to see which flavor of getpgrp is in use..."
8668         $cat >try.c <<EOP
8669 #$i_unistd I_UNISTD
8670 #include <sys/types.h>
8671 #ifdef I_UNISTD
8672 #  include <unistd.h>
8673 #endif
8674 int main()
8675 {
8676         if (getuid() == 0) {
8677                 printf("(I see you are running Configure as super-user...)\n");
8678                 setuid(1);
8679         }
8680 #ifdef TRY_BSD_PGRP
8681         if (getpgrp(1) == 0)
8682                 exit(0);
8683 #else
8684         if (getpgrp() > 0)
8685                 exit(0);
8686 #endif
8687         exit(1);
8688 }
8689 EOP
8690         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8691                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
8692                 val="$define"
8693         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8694                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
8695                 val="$undef"
8696         else
8697                 echo "I can't seem to compile and run the test program."
8698                 if ./usg; then
8699                         xxx="a USG one, i.e. you use getpgrp()."
8700                 else
8701                         # SVR4 systems can appear rather BSD-ish.
8702                         case "$i_unistd" in
8703                         $undef)
8704                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
8705                                 val="$define"
8706                                 ;;
8707                         $define)
8708                                 xxx="probably a USG one, i.e. you use getpgrp()."
8709                                 val="$undef"
8710                                 ;;
8711                         esac
8712                 fi
8713                 echo "Assuming your getpgrp is $xxx" >&4
8714         fi
8715         ;;
8716 *) val="$undef";;
8717 esac
8718 set d_bsdgetpgrp
8719 eval $setvar
8720 $rm -f try try.*
8721
8722 : see if setpgrp exists
8723 set setpgrp d_setpgrp
8724 eval $inlibc
8725
8726 case "$d_setpgrp" in
8727 "$define")
8728         echo " "
8729         echo "Checking to see which flavor of setpgrp is in use..."
8730         $cat >try.c <<EOP
8731 #$i_unistd I_UNISTD
8732 #include <sys/types.h>
8733 #ifdef I_UNISTD
8734 #  include <unistd.h>
8735 #endif
8736 int main()
8737 {
8738         if (getuid() == 0) {
8739                 printf("(I see you are running Configure as super-user...)\n");
8740                 setuid(1);
8741         }
8742 #ifdef TRY_BSD_PGRP
8743         if (-1 == setpgrp(1, 1))
8744                 exit(0);
8745 #else
8746         if (setpgrp() != -1)
8747                 exit(0);
8748 #endif
8749         exit(1);
8750 }
8751 EOP
8752         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8753                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
8754                 val="$define"
8755         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8756                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
8757                 val="$undef"
8758         else
8759                 echo "(I can't seem to compile and run the test program.)"
8760                 if ./usg; then
8761                         xxx="a USG one, i.e. you use setpgrp()."
8762                 else
8763                         # SVR4 systems can appear rather BSD-ish.
8764                         case "$i_unistd" in
8765                         $undef)
8766                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
8767                                 val="$define"
8768                                 ;;
8769                         $define)
8770                                 xxx="probably a USG one, i.e. you use setpgrp()."
8771                                 val="$undef"
8772                                 ;;
8773                         esac
8774                 fi
8775                 echo "Assuming your setpgrp is $xxx" >&4
8776         fi
8777         ;;
8778 *) val="$undef";;
8779 esac
8780 set d_bsdsetpgrp
8781 eval $setvar
8782 $rm -f try try.*
8783 : see if bzero exists
8784 set bzero d_bzero
8785 eval $inlibc
8786
8787 : see if signal is declared as pointer to function returning int or void
8788 echo " "
8789 xxx=`./findhdr signal.h`
8790 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
8791 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
8792         echo "You have int (*signal())() instead of void." >&4
8793         val="$undef"
8794 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
8795         echo "You have void (*signal())()." >&4
8796         val="$define"
8797 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
8798         echo "You have int (*signal())() instead of void." >&4
8799         val="$undef"
8800 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
8801         echo "You have void (*signal())()." >&4
8802         val="$define"
8803 else
8804         case "$d_voidsig" in
8805         '')
8806         echo "I can't determine whether signal handler returns void or int..." >&4
8807                 dflt=void
8808                 rp="What type does your signal handler return?"
8809                 . ./myread
8810                 case "$ans" in
8811                 v*) val="$define";;
8812                 *) val="$undef";;
8813                 esac;;
8814         "$define")
8815                 echo "As you already told me, signal handler returns void." >&4
8816                 val="$define"
8817                 ;;
8818         *)      echo "As you already told me, signal handler returns int." >&4
8819                 val="$undef"
8820                 ;;
8821         esac
8822 fi
8823 set d_voidsig
8824 eval $setvar
8825 case "$d_voidsig" in
8826 "$define") signal_t="void";;
8827 *) signal_t="int";;
8828 esac
8829 $rm -f $$.tmp
8830
8831 : check for ability to cast large floats to 32-bit ints.
8832 echo " "
8833 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
8834 if $test "$intsize" -ge 4; then
8835         xxx=int
8836 else
8837         xxx=long
8838 fi
8839 $cat >try.c <<EOCP
8840 #include <stdio.h>
8841 #include <sys/types.h>
8842 #include <signal.h>
8843 $signal_t blech(s) int s; { exit(3); }
8844 int main()
8845 {
8846         $xxx i32;
8847         double f, g;
8848         int result = 0;
8849         char str[16];
8850         signal(SIGFPE, blech);
8851
8852         /* Don't let compiler optimize the test away.  Store the number 
8853            in a writable string for gcc to pass to sscanf under HP/UX.
8854         */
8855         sprintf(str, "2147483647");
8856         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
8857         g = 10 * f;
8858         i32  = ($xxx) g;
8859
8860         /* x86 processors will probably give 0x8000 0000, which is a
8861        sign change.  We don't want that.  We want to mimic SPARC
8862            behavior here, which is to preserve the sign and give
8863            back 0x7fff ffff.
8864         */
8865         if (i32 != ($xxx) f)
8866                 result |= 1;
8867         exit(result);
8868 }
8869 EOCP
8870 set try
8871 if eval $compile_ok; then
8872         $run ./try
8873         yyy=$?
8874 else
8875         echo "(I can't seem to compile the test program--assuming it can't)"
8876         yyy=1
8877 fi
8878 case "$yyy" in
8879 0)      val="$define"
8880         echo "Yup, it can."
8881         ;;
8882 *)      val="$undef"
8883         echo "Nope, it can't."
8884         ;;
8885 esac
8886 set d_casti32
8887 eval $setvar
8888 $rm -f try try.*
8889
8890 : check for ability to cast negative floats to unsigned
8891 echo " "
8892 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
8893 $cat >try.c <<EOCP
8894 #include <stdio.h>
8895 #include <sys/types.h>
8896 #include <signal.h>
8897 $signal_t blech(s) int s; { exit(7); }
8898 $signal_t blech_in_list(s) int s; { exit(4); }
8899 unsigned long dummy_long(p) unsigned long p; { return p; }
8900 unsigned int dummy_int(p) unsigned int p; { return p; }
8901 unsigned short dummy_short(p) unsigned short p; { return p; }
8902 int main()
8903 {
8904         double f;
8905         unsigned long along;
8906         unsigned int aint;
8907         unsigned short ashort;
8908         int result = 0;
8909         char str[16];
8910         
8911         /* Frustrate gcc-2.7.2's optimizer which failed this test with
8912            a direct f = -123. assignment.  gcc-2.8.0 reportedly
8913            optimized the whole file away
8914         */
8915         /* Store the number in a writable string for gcc to pass to 
8916            sscanf under HP/UX.
8917         */
8918         sprintf(str, "-123");
8919         sscanf(str, "%lf", &f);  /* f = -123.; */
8920
8921         signal(SIGFPE, blech);
8922         along = (unsigned long)f;
8923         aint = (unsigned int)f;
8924         ashort = (unsigned short)f;
8925         if (along != (unsigned long)-123)
8926                 result |= 1;
8927         if (aint != (unsigned int)-123)
8928                 result |= 1;
8929         if (ashort != (unsigned short)-123)
8930                 result |= 1;
8931         sprintf(str, "1073741824.");
8932         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
8933         f = f + f;
8934         along = 0;
8935         along = (unsigned long)f;
8936         if (along != 0x80000000)
8937                 result |= 2;
8938         f -= 1.;
8939         along = 0;
8940         along = (unsigned long)f;
8941         if (along != 0x7fffffff)
8942                 result |= 1;
8943         f += 2.;
8944         along = 0;
8945         along = (unsigned long)f;
8946         if (along != 0x80000001)
8947                 result |= 2;
8948         if (result)
8949                 exit(result);
8950         signal(SIGFPE, blech_in_list);
8951         sprintf(str, "123.");
8952         sscanf(str, "%lf", &f);  /* f = 123.; */
8953         along = dummy_long((unsigned long)f);
8954         aint = dummy_int((unsigned int)f);
8955         ashort = dummy_short((unsigned short)f);
8956         if (along != (unsigned long)123)
8957                 result |= 4;
8958         if (aint != (unsigned int)123)
8959                 result |= 4;
8960         if (ashort != (unsigned short)123)
8961                 result |= 4;
8962         exit(result);
8963
8964 }
8965 EOCP
8966 set try
8967 if eval $compile_ok; then
8968         $run ./try
8969         castflags=$?
8970 else
8971         echo "(I can't seem to compile the test program--assuming it can't)"
8972         castflags=7
8973 fi
8974 case "$castflags" in
8975 0)      val="$define"
8976         echo "Yup, it can."
8977         ;;
8978 *)      val="$undef"
8979         echo "Nope, it can't."
8980         ;;
8981 esac
8982 set d_castneg
8983 eval $setvar
8984 $rm -f try.*
8985
8986 : see if vprintf exists
8987 echo " "
8988 if set vprintf val -f d_vprintf; eval $csym; $val; then
8989         echo 'vprintf() found.' >&4
8990         val="$define"
8991         $cat >try.c <<'EOF'
8992 #include <varargs.h>
8993
8994 int main() { xxx("foo"); }
8995
8996 xxx(va_alist)
8997 va_dcl
8998 {
8999         va_list args;
9000         char buf[10];
9001
9002         va_start(args);
9003         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
9004 }
9005 EOF
9006         set try
9007         if eval $compile && $run ./try; then
9008                 echo "Your vsprintf() returns (int)." >&4
9009                 val2="$undef"
9010         else
9011                 echo "Your vsprintf() returns (char*)." >&4
9012                 val2="$define"
9013         fi
9014 else
9015         echo 'vprintf() NOT found.' >&4
9016                 val="$undef"
9017                 val2="$undef"
9018 fi
9019 $rm -f try try.*
9020 set d_vprintf
9021 eval $setvar
9022 val=$val2
9023 set d_charvspr
9024 eval $setvar
9025
9026 : see if chown exists
9027 set chown d_chown
9028 eval $inlibc
9029
9030 : see if chroot exists
9031 set chroot d_chroot
9032 eval $inlibc
9033
9034 : see if chsize exists
9035 set chsize d_chsize
9036 eval $inlibc
9037
9038 hasstruct='varname=$1; struct=$2; shift; shift;
9039 while $test $# -ge 2; do
9040         case "$1" in
9041         $define) echo "#include <$2>";;
9042         esac ;
9043     shift 2;
9044 done > try.c;
9045 echo "int main () { struct $struct foo; }" >> try.c;
9046 set try;
9047 if eval $compile; then
9048         val="$define";
9049 else
9050         val="$undef";
9051 fi;
9052 set $varname;
9053 eval $setvar;
9054 $rm -f try.c try.o'
9055
9056 : see if sys/types.h has to be included
9057 set sys/types.h i_systypes
9058 eval $inhdr
9059
9060 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
9061 while $test $# -ge 2; do
9062         case "$1" in
9063         $define) echo "#include <$2>";;
9064         esac ;
9065     shift 2;
9066 done > try.c;
9067 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
9068 set try;
9069 if eval $compile; then
9070         val="$define";
9071 else
9072         val="$undef";
9073 fi;
9074 set $varname;
9075 eval $setvar;
9076 $rm -f try.c try.o'
9077
9078 socketlib=''
9079 sockethdr=''
9080 : see whether socket exists
9081 echo " "
9082 $echo $n "Hmm... $c" >&4
9083 if set socket val -f d_socket; eval $csym; $val; then
9084         echo "Looks like you have Berkeley networking support." >&4
9085         d_socket="$define"
9086         if set setsockopt val -f; eval $csym; $val; then
9087                 d_oldsock="$undef"
9088         else
9089                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
9090                 d_oldsock="$define"
9091         fi
9092 else
9093         if $contains socklib libc.list >/dev/null 2>&1; then
9094                 echo "Looks like you have Berkeley networking support." >&4
9095                 d_socket="$define"
9096                 : we will have to assume that it supports the 4.2 BSD interface
9097                 d_oldsock="$undef"
9098         else
9099                 echo "You don't have Berkeley networking in libc$_a..." >&4
9100                 if test "X$d_socket" = "X$define"; then
9101                    echo "...but you seem to believe that you have sockets." >&4
9102                 else
9103                         for net in net socket
9104                         do
9105                                 if test -f /usr/lib/lib$net$_a; then
9106                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
9107                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
9108                                         if $contains socket libc.list >/dev/null 2>&1; then
9109                                                 d_socket="$define"
9110                                                 socketlib="-l$net"
9111                                                 case "$net" in
9112                                                 net)
9113                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
9114                                                         sockethdr="-I/usr/netinclude"
9115                                                         ;;
9116                                                 esac
9117                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
9118                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
9119                                                         d_oldsock="$undef"
9120                                                 else
9121                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
9122                                                         d_oldsock="$define"
9123                                                 fi
9124                                                 break
9125                                         fi
9126                                 fi
9127                         done
9128                         if test "X$d_socket" != "X$define"; then
9129                            echo "or anywhere else I see." >&4
9130                            d_socket="$undef"
9131                            d_oldsock="$undef"
9132                         fi
9133                 fi
9134         fi
9135 fi
9136
9137 : see if socketpair exists
9138 set socketpair d_sockpair
9139 eval $inlibc
9140
9141
9142 echo " "
9143 echo "Checking the availability of certain socket constants..." >& 4
9144 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
9145         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
9146         $cat >try.c <<EOF
9147 #include <sys/types.h>
9148 #include <sys/socket.h>
9149 int main() {
9150     int i = $ENUM;
9151 }
9152 EOF
9153         val="$undef"
9154         set try; if eval $compile; then
9155                 val="$define"
9156         fi
9157         set d_${enum}; eval $setvar
9158         $rm -f try.c try
9159 done
9160
9161 : see if this is a sys/uio.h system
9162 set sys/uio.h i_sysuio
9163 eval $inhdr
9164
9165
9166 echo " "
9167 echo "Checking to see if your system supports struct cmsghdr..." >&4
9168 set d_cmsghdr_s cmsghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
9169 eval $hasstruct
9170 case "$d_cmsghdr_s" in
9171 "$define")      echo "Yes, it does."   ;;
9172 *)              echo "No, it doesn't." ;;
9173 esac
9174
9175
9176 : check for const keyword
9177 echo " "
9178 echo 'Checking to see if your C compiler knows about "const"...' >&4
9179 $cat >const.c <<'EOCP'
9180 typedef struct spug { int drokk; } spug;
9181 int main()
9182 {
9183         const char *foo;
9184         const spug y;
9185 }
9186 EOCP
9187 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
9188         val="$define"
9189         echo "Yup, it does."
9190 else
9191         val="$undef"
9192         echo "Nope, it doesn't."
9193 fi
9194 set d_const
9195 eval $setvar
9196
9197 : see if crypt exists
9198 echo " "
9199 if set crypt val -f d_crypt; eval $csym; $val; then
9200         echo 'crypt() found.' >&4
9201         val="$define"
9202         cryptlib=''
9203 else
9204         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
9205         if $test -z "$cryptlib"; then
9206                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
9207         else
9208                 cryptlib=-lcrypt
9209         fi
9210         if $test -z "$cryptlib"; then
9211                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
9212         else
9213                 cryptlib=-lcrypt
9214         fi
9215         if $test -z "$cryptlib"; then
9216                 cryptlib=`./loc libcrypt$_a "" $libpth`
9217         else
9218                 cryptlib=-lcrypt
9219         fi
9220         if $test -z "$cryptlib"; then
9221                 echo 'crypt() NOT found.' >&4
9222                 val="$undef"
9223         else
9224                 val="$define"
9225         fi
9226 fi
9227 set d_crypt
9228 eval $setvar
9229
9230 : get csh whereabouts
9231 case "$csh" in
9232 'csh') val="$undef" ;;
9233 *) val="$define" ;;
9234 esac
9235 set d_csh
9236 eval $setvar
9237 : Respect a hint or command line value for full_csh.
9238 case "$full_csh" in
9239 '') full_csh=$csh ;;
9240 esac
9241
9242 : see if cuserid exists
9243 set cuserid d_cuserid
9244 eval $inlibc
9245
9246 : see if this is a limits.h system
9247 set limits.h i_limits
9248 eval $inhdr
9249
9250 : see if this is a float.h system
9251 set float.h i_float
9252 eval $inhdr
9253
9254 : See if number of significant digits in a double precision number is known
9255 echo " "
9256 $cat >dbl_dig.c <<EOM
9257 #$i_limits I_LIMITS
9258 #$i_float I_FLOAT
9259 #ifdef I_LIMITS
9260 #include <limits.h>
9261 #endif
9262 #ifdef I_FLOAT
9263 #include <float.h>
9264 #endif
9265 #ifdef DBL_DIG
9266 printf("Contains DBL_DIG");
9267 #endif
9268 EOM
9269 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
9270 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
9271         echo "DBL_DIG found." >&4
9272         val="$define"
9273 else
9274         echo "DBL_DIG NOT found." >&4
9275         val="$undef"
9276 fi
9277 $rm -f dbl_dig.?
9278 set d_dbl_dig
9279 eval $setvar
9280
9281 hasproto='varname=$1; func=$2; shift; shift;
9282 while $test $# -ge 2; do
9283         case "$1" in
9284         $define) echo "#include <$2>";;
9285         esac ;
9286     shift 2;
9287 done > try.c;
9288 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
9289 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
9290         echo "$func() prototype found.";
9291         val="$define";
9292 else
9293         echo "$func() prototype NOT found.";
9294         val="$undef";
9295 fi;
9296 set $varname;
9297 eval $setvar;
9298 $rm -f try.c tryout.c'
9299
9300 : see if dbm.h is available
9301 : see if dbmclose exists
9302 set dbmclose d_dbmclose
9303 eval $inlibc
9304
9305 case "$d_dbmclose" in
9306 $define)
9307         set dbm.h i_dbm
9308         eval $inhdr
9309         case "$i_dbm" in
9310         $define)
9311                 val="$undef"
9312                 set i_rpcsvcdbm
9313                 eval $setvar
9314                 ;;
9315         *)      set rpcsvc/dbm.h i_rpcsvcdbm
9316                 eval $inhdr
9317                 ;;
9318         esac
9319         ;;
9320 *)      echo "We won't be including <dbm.h>"
9321         val="$undef"
9322         set i_dbm
9323         eval $setvar
9324         val="$undef"
9325         set i_rpcsvcdbm
9326         eval $setvar
9327         ;;
9328 esac
9329
9330 : see if prototype for dbminit is available
9331 echo " "
9332 set d_dbminitproto dbminit $i_dbm dbm.h
9333 eval $hasproto
9334
9335 : see if difftime exists
9336 set difftime d_difftime
9337 eval $inlibc
9338
9339 : see if this is a dirent system
9340 echo " "
9341 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
9342         val="$define"
9343         echo "<dirent.h> found." >&4
9344 else
9345         val="$undef"
9346         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
9347                 echo "<sys/dir.h> found." >&4
9348                 echo " "
9349         else
9350                 xinc=`./findhdr sys/ndir.h`
9351         fi
9352         echo "<dirent.h> NOT found." >&4
9353 fi
9354 set i_dirent
9355 eval $setvar
9356
9357 : Look for type of directory structure.
9358 echo " "
9359 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9360
9361 case "$direntrytype" in
9362 ''|' ')
9363         case "$i_dirent" in
9364         $define) guess1='struct dirent' ;;
9365         *) guess1='struct direct'  ;;
9366         esac
9367         ;;
9368 *)      guess1="$direntrytype"
9369         ;;
9370 esac
9371
9372 case "$guess1" in
9373 'struct dirent') guess2='struct direct' ;;
9374 *) guess2='struct dirent' ;;
9375 esac
9376                 
9377 if $contains "$guess1" try.c >/dev/null 2>&1; then
9378         direntrytype="$guess1"
9379         echo "Your directory entries are $direntrytype." >&4
9380 elif $contains "$guess2" try.c >/dev/null 2>&1; then
9381         direntrytype="$guess2"
9382         echo "Your directory entries seem to be $direntrytype." >&4
9383 else
9384         echo "I don't recognize your system's directory entries." >&4
9385         rp="What type is used for directory entries on this system?"
9386         dflt="$guess1"
9387         . ./myread
9388         direntrytype="$ans"
9389 fi
9390 $rm -f try.c
9391
9392
9393 : see if the directory entry stores field length
9394 echo " "
9395 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9396 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
9397         echo "Good, your directory entry keeps length information in d_namlen." >&4
9398         val="$define"
9399 else
9400         echo "Your directory entry does not know about the d_namlen field." >&4
9401         val="$undef"
9402 fi
9403 set d_dirnamlen
9404 eval $setvar
9405 $rm -f try.c
9406
9407 : see if dlerror exists
9408 xxx_runnm="$runnm"
9409 runnm=false
9410 set dlerror d_dlerror
9411 eval $inlibc
9412 runnm="$xxx_runnm"
9413
9414 : see if dlfcn is available
9415 set dlfcn.h i_dlfcn
9416 eval $inhdr
9417
9418 case "$usedl" in
9419 $define|y|true)
9420         $cat << EOM
9421
9422 On a few systems, the dynamically loaded modules that perl generates and uses
9423 will need a different extension than shared libs. The default will probably
9424 be appropriate.
9425
9426 EOM
9427         case "$dlext" in
9428         '')     dflt="$so" ;;
9429         *)      dflt="$dlext" ;;
9430         esac
9431         rp='What is the extension of dynamically loaded modules'
9432         . ./myread
9433         dlext="$ans"
9434         ;;
9435 *)
9436         dlext="none"
9437         ;;
9438 esac
9439
9440 : Check if dlsym need a leading underscore
9441 echo " "
9442 val="$undef"
9443
9444 case "$dlsrc" in
9445 dl_dlopen.xs)
9446         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
9447         $cat >dyna.c <<'EOM'
9448 fred () { }
9449 EOM
9450
9451 $cat >fred.c<<EOM
9452
9453 #include <stdio.h>
9454 #$i_dlfcn I_DLFCN
9455 #ifdef I_DLFCN
9456 #include <dlfcn.h>      /* the dynamic linker include file for SunOS/Solaris */
9457 #else
9458 #include <sys/types.h>
9459 #include <nlist.h>
9460 #include <link.h>
9461 #endif
9462
9463 extern int fred() ;
9464
9465 int main()
9466 {
9467     void * handle ;
9468     void * symbol ;
9469 #ifndef RTLD_LAZY
9470     int mode = 1 ;
9471 #else
9472     int mode = RTLD_LAZY ;
9473 #endif
9474     handle = dlopen("./dyna.$dlext", mode) ;
9475     if (handle == NULL) {
9476         printf ("1\n") ;
9477         fflush (stdout) ;
9478         exit(0);
9479     }
9480     symbol = dlsym(handle, "fred") ;
9481     if (symbol == NULL) {
9482         /* try putting a leading underscore */
9483         symbol = dlsym(handle, "_fred") ;
9484         if (symbol == NULL) {
9485             printf ("2\n") ;
9486             fflush (stdout) ;
9487             exit(0);
9488         }
9489         printf ("3\n") ;
9490     }
9491     else
9492         printf ("4\n") ;
9493     fflush (stdout) ;
9494     exit(0);
9495 }
9496 EOM
9497         : Call the object file tmp-dyna.o in case dlext=o.
9498         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
9499                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
9500                 $ld -o dyna.$dlext $ldflags $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && 
9501                 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1 && $to dyna.$dlext; then
9502                 xxx=`$run ./fred`
9503                 case $xxx in
9504                 1)      echo "Test program failed using dlopen." >&4
9505                         echo "Perhaps you should not use dynamic loading." >&4;;
9506                 2)      echo "Test program failed using dlsym." >&4
9507                         echo "Perhaps you should not use dynamic loading." >&4;;
9508                 3)      echo "dlsym needs a leading underscore" >&4
9509                         val="$define" ;;
9510                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
9511                 esac
9512         else
9513                 echo "I can't compile and run the test program." >&4
9514                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
9515         fi
9516         ;;
9517 esac
9518                 
9519 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
9520
9521 set d_dlsymun
9522 eval $setvar
9523
9524 : see if prototype for drand48 is available
9525 echo " "
9526 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
9527 eval $hasproto
9528
9529 : see if dup2 exists
9530 set dup2 d_dup2
9531 eval $inlibc
9532
9533 : see if eaccess exists
9534 set eaccess d_eaccess
9535 eval $inlibc
9536
9537 : see if endgrent exists
9538 set endgrent d_endgrent
9539 eval $inlibc
9540
9541 : see if endhostent exists
9542 set endhostent d_endhent
9543 eval $inlibc
9544
9545 : see if endnetent exists
9546 set endnetent d_endnent
9547 eval $inlibc
9548
9549 : see if endprotoent exists
9550 set endprotoent d_endpent
9551 eval $inlibc
9552
9553 : see if endpwent exists
9554 set endpwent d_endpwent
9555 eval $inlibc
9556
9557 : see if endservent exists
9558 set endservent d_endsent
9559 eval $inlibc
9560
9561 : Locate the flags for 'open()'
9562 echo " "
9563 $cat >try.c <<'EOCP'
9564 #include <sys/types.h>
9565 #ifdef I_FCNTL
9566 #include <fcntl.h>
9567 #endif
9568 #ifdef I_SYS_FILE
9569 #include <sys/file.h>
9570 #endif
9571 int main() {
9572         if(O_RDONLY);
9573 #ifdef O_TRUNC
9574         exit(0);
9575 #else
9576         exit(1);
9577 #endif
9578 }
9579 EOCP
9580 : check sys/file.h first to get FREAD on Sun
9581 if $test `./findhdr sys/file.h` && \
9582                 set try -DI_SYS_FILE && eval $compile; then
9583         h_sysfile=true;
9584         echo "<sys/file.h> defines the O_* constants..." >&4
9585         if $run ./try; then
9586                 echo "and you have the 3 argument form of open()." >&4
9587                 val="$define"
9588         else
9589                 echo "but not the 3 argument form of open().  Oh, well." >&4
9590                 val="$undef"
9591         fi
9592 elif $test `./findhdr fcntl.h` && \
9593                 set try -DI_FCNTL && eval $compile; then
9594         h_fcntl=true;
9595         echo "<fcntl.h> defines the O_* constants..." >&4
9596         if $run ./try; then
9597                 echo "and you have the 3 argument form of open()." >&4
9598                 val="$define"
9599         else
9600                 echo "but not the 3 argument form of open().  Oh, well." >&4
9601                 val="$undef"
9602         fi
9603 else
9604         val="$undef"
9605         echo "I can't find the O_* constant definitions!  You got problems." >&4
9606 fi
9607 set d_open3
9608 eval $setvar
9609 $rm -f try try.*
9610
9611 : see which of string.h or strings.h is needed
9612 echo " "
9613 strings=`./findhdr string.h`
9614 if $test "$strings" && $test -r "$strings"; then
9615         echo "Using <string.h> instead of <strings.h>." >&4
9616         val="$define"
9617 else
9618         val="$undef"
9619         strings=`./findhdr strings.h`
9620         if $test "$strings" && $test -r "$strings"; then
9621                 echo "Using <strings.h> instead of <string.h>." >&4
9622         else
9623                 echo "No string header found -- You'll surely have problems." >&4
9624         fi
9625 fi
9626 set i_string
9627 eval $setvar
9628 case "$i_string" in
9629 "$undef") strings=`./findhdr strings.h`;;
9630 *)        strings=`./findhdr string.h`;;
9631 esac
9632
9633 : check for non-blocking I/O stuff
9634 case "$h_sysfile" in
9635 true) echo "#include <sys/file.h>" > head.c;;
9636 *)
9637        case "$h_fcntl" in
9638        true) echo "#include <fcntl.h>" > head.c;;
9639        *) echo "#include <sys/fcntl.h>" > head.c;;
9640        esac
9641        ;;
9642 esac
9643 echo " "
9644 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
9645 case "$o_nonblock" in
9646 '')
9647         $cat head.c > try.c
9648         $cat >>try.c <<'EOCP'
9649 #include <stdio.h>
9650 int main() {
9651 #ifdef O_NONBLOCK
9652         printf("O_NONBLOCK\n");
9653         exit(0);
9654 #endif
9655 #ifdef O_NDELAY
9656         printf("O_NDELAY\n");
9657         exit(0);
9658 #endif
9659 #ifdef FNDELAY
9660         printf("FNDELAY\n");
9661         exit(0);
9662 #endif
9663         exit(0);
9664 }
9665 EOCP
9666         set try
9667         if eval $compile_ok; then
9668                 o_nonblock=`$run ./try`
9669                 case "$o_nonblock" in
9670                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
9671                 *) echo "Seems like we can use $o_nonblock.";;
9672                 esac
9673         else
9674                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
9675         fi
9676         ;;
9677 *) echo "Using $hint value $o_nonblock.";;
9678 esac
9679 $rm -f try try.* .out core
9680
9681 echo " "
9682 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
9683 case "$eagain" in
9684 '')
9685         $cat head.c > try.c
9686         $cat >>try.c <<EOCP
9687 #include <errno.h>
9688 #include <sys/types.h>
9689 #include <signal.h>
9690 #include <stdio.h> 
9691 #define MY_O_NONBLOCK $o_nonblock
9692 #ifndef errno  /* XXX need better Configure test */
9693 extern int errno;
9694 #endif
9695 #$i_unistd I_UNISTD
9696 #ifdef I_UNISTD
9697 #include <unistd.h>
9698 #endif
9699 #$i_string I_STRING
9700 #ifdef I_STRING
9701 #include <string.h>
9702 #else
9703 #include <strings.h>
9704 #endif
9705 $signal_t blech(x) int x; { exit(3); }
9706 EOCP
9707         $cat >> try.c <<'EOCP'
9708 int main()
9709 {
9710         int pd[2];
9711         int pu[2];
9712         char buf[1];
9713         char string[100];
9714
9715         pipe(pd);       /* Down: child -> parent */
9716         pipe(pu);       /* Up: parent -> child */
9717         if (0 != fork()) {
9718                 int ret;
9719                 close(pd[1]);   /* Parent reads from pd[0] */
9720                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
9721 #ifdef F_SETFL
9722                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
9723                         exit(1);
9724 #else
9725                 exit(4);
9726 #endif
9727                 signal(SIGALRM, blech);
9728                 alarm(5);
9729                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
9730                         exit(2);
9731                 sprintf(string, "%d\n", ret);
9732                 write(2, string, strlen(string));
9733                 alarm(0);
9734 #ifdef EAGAIN
9735                 if (errno == EAGAIN) {
9736                         printf("EAGAIN\n");
9737                         goto ok;
9738                 }
9739 #endif
9740 #ifdef EWOULDBLOCK
9741                 if (errno == EWOULDBLOCK)
9742                         printf("EWOULDBLOCK\n");
9743 #endif
9744         ok:
9745                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
9746                 sleep(2);                               /* Give it time to close our pipe */
9747                 alarm(5);
9748                 ret = read(pd[0], buf, 1);      /* Should read EOF */
9749                 alarm(0);
9750                 sprintf(string, "%d\n", ret);
9751                 write(3, string, strlen(string));
9752                 exit(0);
9753         }
9754
9755         close(pd[0]);                   /* We write to pd[1] */
9756         close(pu[1]);                   /* We read from pu[0] */
9757         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
9758         close(pd[1]);                   /* Pipe pd is now fully closed! */
9759         exit(0);                                /* Bye bye, thank you for playing! */
9760 }
9761 EOCP
9762         set try
9763         if eval $compile_ok; then
9764                 echo "$startsh" >mtry
9765                 echo "$run ./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
9766                 chmod +x mtry
9767                 ./mtry >/dev/null 2>&1
9768                 case $? in
9769                 0) eagain=`$cat try.out`;;
9770                 1) echo "Could not perform non-blocking setting!";;
9771                 2) echo "I did a successful read() for something that was not there!";;
9772                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
9773                 4) echo "Could not find F_SETFL!";;
9774                 *) echo "Something terribly wrong happened during testing.";;
9775                 esac
9776                 rd_nodata=`$cat try.ret`
9777                 echo "A read() system call with no data present returns $rd_nodata."
9778                 case "$rd_nodata" in
9779                 0|-1) ;;
9780                 *)
9781                         echo "(That's peculiar, fixing that to be -1.)"
9782                         rd_nodata=-1
9783                         ;;
9784                 esac
9785                 case "$eagain" in
9786                 '')
9787                         echo "Forcing errno EAGAIN on read() with no data available."
9788                         eagain=EAGAIN
9789                         ;;
9790                 *)
9791                         echo "Your read() sets errno to $eagain when no data is available."
9792                         ;;
9793                 esac
9794                 status=`$cat try.err`
9795                 case "$status" in
9796                 0) echo "And it correctly returns 0 to signal EOF.";;
9797                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
9798                 *) echo "However, your read() returns '$status' on EOF??";;
9799                 esac
9800                 val="$define"
9801                 if test "$status" = "$rd_nodata"; then
9802                         echo "WARNING: you can't distinguish between EOF and no data!"
9803                         val="$undef"
9804                 fi
9805         else
9806                 echo "I can't compile the test program--assuming errno EAGAIN will do."
9807                 eagain=EAGAIN
9808         fi
9809         set d_eofnblk
9810         eval $setvar
9811         ;;
9812 *)
9813         echo "Using $hint value $eagain."
9814         echo "Your read() returns $rd_nodata when no data is present."
9815         case "$d_eofnblk" in
9816         "$define") echo "And you can see EOF because read() returns 0.";;
9817         "$undef") echo "But you can't see EOF status from read() returned value.";;
9818         *)
9819                 echo "(Assuming you can't see EOF status from read anyway.)"
9820                 d_eofnblk=$undef
9821                 ;;
9822         esac
9823         ;;
9824 esac
9825 $rm -f try try.* .out core head.c mtry
9826
9827 : see if fchmod exists
9828 set fchmod d_fchmod
9829 eval $inlibc
9830
9831 : see if fchown exists
9832 set fchown d_fchown
9833 eval $inlibc
9834
9835 : see if this is an fcntl system
9836 set fcntl d_fcntl
9837 eval $inlibc
9838
9839 echo " "
9840 : See if fcntl-based locking works.
9841 $cat >try.c <<'EOCP'
9842 #include <stdlib.h>
9843 #include <unistd.h>
9844 #include <fcntl.h>
9845 int main() {
9846 #if defined(F_SETLK) && defined(F_SETLKW)
9847      struct flock flock;
9848      int retval, fd;
9849      fd = open("try.c", O_RDONLY);
9850      flock.l_type = F_RDLCK;
9851      flock.l_whence = SEEK_SET;
9852      flock.l_start = flock.l_len = 0;
9853      retval = fcntl(fd, F_SETLK, &flock);
9854      close(fd);
9855      (retval < 0 ? exit(2) : exit(0));
9856 #else
9857      exit(2);
9858 #endif
9859 }
9860 EOCP
9861 echo "Checking if fcntl-based file locking works... "
9862 case "$d_fcntl" in
9863 "$define")
9864         set try
9865         if eval $compile_ok; then
9866                 if $run ./try; then
9867                         echo "Yes, it seems to work."
9868                         val="$define"
9869                 else
9870                         echo "Nope, it didn't work."
9871                         val="$undef"
9872                 fi
9873         else
9874                 echo "I'm unable to compile the test program, so I'll assume not."
9875                 val="$undef"
9876         fi
9877         ;;
9878 *) val="$undef";
9879         echo "Nope, since you don't even have fcntl()."
9880         ;;
9881 esac
9882 set d_fcntl_can_lock
9883 eval $setvar
9884 $rm -f try*
9885
9886
9887 : see if sys/select.h has to be included
9888 set sys/select.h i_sysselct
9889 eval $inhdr
9890
9891 : see if we should include time.h, sys/time.h, or both
9892 echo " "
9893 if test "X$timeincl" = X; then
9894         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
9895         $echo $n "I'm now running the test program...$c"
9896         $cat >try.c <<'EOCP'
9897 #include <sys/types.h>
9898 #ifdef I_TIME
9899 #include <time.h>
9900 #endif
9901 #ifdef I_SYSTIME
9902 #ifdef SYSTIMEKERNEL
9903 #define KERNEL
9904 #endif
9905 #include <sys/time.h>
9906 #endif
9907 #ifdef I_SYSSELECT
9908 #include <sys/select.h>
9909 #endif
9910 int main()
9911 {
9912         struct tm foo;
9913 #ifdef S_TIMEVAL
9914         struct timeval bar;
9915 #endif
9916 #ifdef S_TIMEZONE
9917         struct timezone tzp;
9918 #endif
9919         if (foo.tm_sec == foo.tm_sec)
9920                 exit(0);
9921 #ifdef S_TIMEVAL
9922         if (bar.tv_sec == bar.tv_sec)
9923                 exit(0);
9924 #endif
9925         exit(1);
9926 }
9927 EOCP
9928         flags=''
9929         for s_timezone in '-DS_TIMEZONE' ''; do
9930         sysselect=''
9931         for s_timeval in '-DS_TIMEVAL' ''; do
9932         for i_systimek in '' '-DSYSTIMEKERNEL'; do
9933         for i_time in '' '-DI_TIME'; do
9934         for i_systime in '-DI_SYSTIME' ''; do
9935                 case "$flags" in
9936                 '') $echo $n ".$c"
9937                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
9938                         if eval $compile; then
9939                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
9940                                 shift
9941                                 flags="$*"
9942                                 echo " "
9943                                 $echo $n "Succeeded with $flags$c"
9944                         fi
9945                         ;;
9946                 esac
9947         done
9948         done
9949         done
9950         done
9951         done
9952         timeincl=''
9953         echo " "
9954         case "$flags" in
9955         *SYSTIMEKERNEL*) i_systimek="$define"
9956                 timeincl=`./findhdr sys/time.h`
9957                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
9958         *) i_systimek="$undef";;
9959         esac
9960         case "$flags" in
9961         *I_TIME*) i_time="$define"
9962                 timeincl=`./findhdr time.h`" $timeincl"
9963                 echo "We'll include <time.h>." >&4;;
9964         *) i_time="$undef";;
9965         esac
9966         case "$flags" in
9967         *I_SYSTIME*) i_systime="$define"
9968                 timeincl=`./findhdr sys/time.h`" $timeincl"
9969                 echo "We'll include <sys/time.h>." >&4;;
9970         *) i_systime="$undef";;
9971         esac
9972         $rm -f try.c try
9973 fi
9974
9975 : check for fd_set items
9976 $cat <<EOM
9977
9978 Checking to see how well your C compiler handles fd_set and friends ...
9979 EOM
9980 $cat >try.c <<EOCP
9981 #$i_systime I_SYS_TIME
9982 #$i_sysselct I_SYS_SELECT
9983 #$d_socket HAS_SOCKET
9984 #include <sys/types.h>
9985 #ifdef HAS_SOCKET
9986 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
9987 #endif
9988 #ifdef I_SYS_TIME
9989 #include <sys/time.h>
9990 #endif
9991 #ifdef I_SYS_SELECT
9992 #include <sys/select.h>
9993 #endif
9994 int main() {
9995         fd_set fds;
9996
9997 #ifdef TRYBITS
9998         if(fds.fds_bits);
9999 #endif
10000
10001 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
10002         exit(0);
10003 #else
10004         exit(1);
10005 #endif
10006 }
10007 EOCP
10008 set try -DTRYBITS
10009 if eval $compile; then
10010         d_fds_bits="$define"
10011         d_fd_set="$define"
10012         echo "Well, your system knows about the normal fd_set typedef..." >&4
10013         if $run ./try; then
10014                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
10015                 d_fd_macros="$define"
10016         else
10017                 $cat >&4 <<'EOM'
10018 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
10019 EOM
10020                 d_fd_macros="$undef"
10021         fi
10022 else
10023         $cat <<'EOM'
10024 Hmm, your compiler has some difficulty with fd_set.  Checking further...
10025 EOM
10026         set try
10027         if eval $compile; then
10028                 d_fds_bits="$undef"
10029                 d_fd_set="$define"
10030                 echo "Well, your system has some sort of fd_set available..." >&4
10031                 if $run ./try; then
10032                         echo "and you have the normal fd_set macros." >&4
10033                         d_fd_macros="$define"
10034                 else
10035                         $cat <<'EOM'
10036 but not the normal fd_set macros!  Gross!  More work for me...
10037 EOM
10038                         d_fd_macros="$undef"
10039                 fi
10040         else
10041         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
10042                 d_fd_set="$undef"
10043                 d_fds_bits="$undef"
10044                 d_fd_macros="$undef"
10045         fi
10046 fi
10047 $rm -f try try.*
10048
10049 : see if fgetpos exists
10050 set fgetpos d_fgetpos
10051 eval $inlibc
10052
10053 : see if flock exists
10054 set flock d_flock
10055 eval $inlibc
10056
10057 : see if this is a sys/file.h system
10058 val=''
10059 set sys/file.h val
10060 eval $inhdr
10061
10062 : do we need to include sys/file.h ?
10063 case "$val" in
10064 "$define")
10065         echo " "
10066         if $h_sysfile; then
10067                 val="$define"
10068                 echo "We'll be including <sys/file.h>." >&4
10069         else
10070                 val="$undef"
10071                 echo "We won't be including <sys/file.h>." >&4
10072         fi
10073         ;;
10074 *)
10075         h_sysfile=false
10076         ;;
10077 esac
10078 set i_sysfile
10079 eval $setvar
10080
10081 : see if prototype for flock is available
10082 echo " "
10083 set d_flockproto flock $i_sysfile sys/file.h
10084 eval $hasproto
10085
10086 : see if fork exists
10087 set fork d_fork
10088 eval $inlibc
10089
10090 : see if pathconf exists
10091 set pathconf d_pathconf
10092 eval $inlibc
10093
10094 : see if fpathconf exists
10095 set fpathconf d_fpathconf
10096 eval $inlibc
10097
10098
10099 : check for fpos64_t
10100 echo " "
10101 echo "Checking to see if you have fpos64_t..." >&4
10102 $cat >try.c <<EOCP
10103 #include <stdio.h>
10104 int main() { fpos64_t x = 7; }
10105 EOCP
10106 set try
10107 if eval $compile; then
10108         val="$define"
10109         echo "You have fpos64_t."
10110 else
10111         val="$undef"
10112         echo "You do not have fpos64_t."
10113         case "$fpossize" in
10114         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
10115         esac
10116 fi
10117 $rm -f try.* try
10118 set d_fpos64_t
10119 eval $setvar
10120
10121 : see if frexpl exists
10122 set frexpl d_frexpl
10123 eval $inlibc
10124
10125 : see if this is a sys/param system
10126 set sys/param.h i_sysparam
10127 eval $inhdr
10128
10129 : see if this is a sys/mount.h system
10130 set sys/mount.h i_sysmount
10131 eval $inhdr
10132
10133
10134 echo " "
10135 echo "Checking to see if your system supports struct fs_data..." >&4
10136 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
10137 eval $hasstruct
10138 case "$d_fs_data_s" in
10139 "$define")      echo "Yes, it does."   ;;
10140 *)              echo "No, it doesn't." ;;
10141 esac
10142
10143 : see if fseeko exists
10144 set fseeko d_fseeko
10145 eval $inlibc
10146 case "$longsize" in
10147 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
10148 esac
10149
10150 : see if fsetpos exists
10151 set fsetpos d_fsetpos
10152 eval $inlibc
10153
10154
10155 : see if fstatfs exists
10156 set fstatfs d_fstatfs
10157 eval $inlibc
10158
10159
10160 : see if statvfs exists
10161 set statvfs d_statvfs
10162 eval $inlibc
10163
10164 : see if fstatvfs exists
10165 set fstatvfs d_fstatvfs
10166 eval $inlibc
10167
10168
10169 : see if fsync exists
10170 set fsync d_fsync
10171 eval $inlibc
10172
10173 : see if ftello exists
10174 set ftello d_ftello
10175 eval $inlibc
10176 case "$longsize" in
10177 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
10178 esac
10179
10180 : see if getcwd exists
10181 set getcwd d_getcwd
10182 eval $inlibc
10183
10184 : see if getespwnam exists
10185 set getespwnam d_getespwnam
10186 eval $inlibc
10187
10188
10189 : see if getfsstat exists
10190 set getfsstat d_getfsstat
10191 eval $inlibc
10192
10193 : see if getgrent exists
10194 set getgrent d_getgrent
10195 eval $inlibc
10196
10197 : see if gethostbyaddr exists
10198 set gethostbyaddr d_gethbyaddr
10199 eval $inlibc
10200
10201 : see if gethostbyname exists
10202 set gethostbyname d_gethbyname
10203 eval $inlibc
10204
10205 : see if gethostent exists
10206 set gethostent d_gethent
10207 eval $inlibc
10208
10209 : see how we will look up host name
10210 echo " "
10211 call=''
10212 if set gethostname val -f d_gethname; eval $csym; $val; then
10213         echo 'gethostname() found.' >&4
10214         d_gethname="$define"
10215         call=gethostname
10216 fi
10217 if set uname val -f d_uname; eval $csym; $val; then
10218         if ./xenix; then
10219                 $cat <<'EOM'
10220 uname() was found, but you're running xenix, and older versions of xenix
10221 have a broken uname(). If you don't really know whether your xenix is old
10222 enough to have a broken system call, use the default answer.
10223
10224 EOM
10225                 dflt=y
10226                 case "$d_uname" in
10227                 "$define") dflt=n;;
10228                 esac
10229                 rp='Is your uname() broken?'
10230                 . ./myread
10231                 case "$ans" in
10232                 n*) d_uname="$define"; call=uname;;
10233                 esac
10234         else
10235                 echo 'uname() found.' >&4
10236                 d_uname="$define"
10237                 case "$call" in
10238                 '') call=uname ;;
10239                 esac
10240         fi
10241 fi
10242 case "$d_gethname" in
10243 '') d_gethname="$undef";;
10244 esac
10245 case "$d_uname" in
10246 '') d_uname="$undef";;
10247 esac
10248 case "$d_uname$d_gethname" in
10249 *define*)
10250         dflt=n
10251         cat <<EOM
10252  
10253 Every now and then someone has a $call() that lies about the hostname
10254 but can't be fixed for political or economic reasons.  If you wish, I can
10255 pretend $call() isn't there and maybe compute hostname at run-time
10256 thanks to the '$phostname' command.
10257
10258 EOM
10259         rp="Shall I ignore $call() from now on?"
10260         . ./myread
10261         case "$ans" in
10262         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
10263         esac;;
10264 esac
10265 case "$phostname" in
10266 '') aphostname='';;
10267 *) case "$aphostname" in
10268         /*) ;;
10269         *) set X $phostname
10270                 shift
10271                 file=$1
10272                 shift
10273                 file=`./loc $file $file $pth`
10274                 aphostname=`echo $file $*`
10275                 ;;
10276         esac
10277         ;;
10278 esac
10279 case "$d_uname$d_gethname" in
10280 *define*) ;;
10281 *)
10282         case "$phostname" in
10283         '')
10284                 echo "There will be no way for $package to get your hostname." >&4;;
10285         *)
10286         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
10287                 ;;
10288         esac;;
10289 esac
10290 case "$d_phostname" in
10291 '') d_phostname="$undef";;
10292 esac
10293
10294 : see if this is a netdb.h system
10295 set netdb.h i_netdb
10296 eval $inhdr
10297
10298 : see if prototypes for various gethostxxx netdb.h functions are available
10299 echo " "
10300 set d_gethostprotos gethostent $i_netdb netdb.h
10301 eval $hasproto
10302
10303 : see if getitimer exists
10304 set getitimer d_getitimer
10305 eval $inlibc
10306
10307 : see if getlogin exists
10308 set getlogin d_getlogin
10309 eval $inlibc
10310
10311 : see if getmnt exists
10312 set getmnt d_getmnt
10313 eval $inlibc
10314
10315 : see if getmntent exists
10316 set getmntent d_getmntent
10317 eval $inlibc
10318
10319 : see if getnetbyaddr exists
10320 set getnetbyaddr d_getnbyaddr
10321 eval $inlibc
10322
10323 : see if getnetbyname exists
10324 set getnetbyname d_getnbyname
10325 eval $inlibc
10326
10327 : see if getnetent exists
10328 set getnetent d_getnent
10329 eval $inlibc
10330
10331 : see if prototypes for various getnetxxx netdb.h functions are available
10332 echo " "
10333 set d_getnetprotos getnetent $i_netdb netdb.h
10334 eval $hasproto
10335
10336 : see if getpagesize exists
10337 set getpagesize d_getpagsz
10338 eval $inlibc
10339
10340
10341 : see if getprotobyname exists
10342 set getprotobyname d_getpbyname
10343 eval $inlibc
10344
10345 : see if getprotobynumber exists
10346 set getprotobynumber d_getpbynumber
10347 eval $inlibc
10348
10349 : see if getprotoent exists
10350 set getprotoent d_getpent
10351 eval $inlibc
10352
10353 : see if getpgid exists
10354 set getpgid d_getpgid
10355 eval $inlibc
10356
10357 : see if getpgrp2 exists
10358 set getpgrp2 d_getpgrp2
10359 eval $inlibc
10360
10361 : see if getppid exists
10362 set getppid d_getppid
10363 eval $inlibc
10364
10365 : see if getpriority exists
10366 set getpriority d_getprior
10367 eval $inlibc
10368
10369 : see if prototypes for various getprotoxxx netdb.h functions are available
10370 echo " "
10371 set d_getprotoprotos getprotoent $i_netdb netdb.h
10372 eval $hasproto
10373
10374 : see if getprpwnam exists
10375 set getprpwnam d_getprpwnam
10376 eval $inlibc
10377
10378 : see if getpwent exists
10379 set getpwent d_getpwent
10380 eval $inlibc
10381
10382
10383 : see if getservbyname exists
10384 set getservbyname d_getsbyname
10385 eval $inlibc
10386
10387 : see if getservbyport exists
10388 set getservbyport d_getsbyport
10389 eval $inlibc
10390
10391 : see if getservent exists
10392 set getservent d_getsent
10393 eval $inlibc
10394
10395 : see if prototypes for various getservxxx netdb.h functions are available
10396 echo " "
10397 set d_getservprotos getservent $i_netdb netdb.h
10398 eval $hasproto
10399
10400 : see if getspnam exists
10401 set getspnam d_getspnam
10402 eval $inlibc
10403
10404 : see if gettimeofday or ftime exists
10405 set gettimeofday d_gettimeod
10406 eval $inlibc
10407 case "$d_gettimeod" in
10408 "$undef")
10409         set ftime d_ftime 
10410         eval $inlibc
10411         ;;
10412 *)
10413         val="$undef"; set d_ftime; eval $setvar
10414         ;;
10415 esac
10416 case "$d_gettimeod$d_ftime" in
10417 "$undef$undef")
10418         echo " "
10419         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
10420         ;;
10421 esac
10422
10423 : see if this is an grp system
10424 set grp.h i_grp
10425 eval $inhdr
10426
10427 case "$i_grp" in
10428 $define)
10429         xxx=`./findhdr grp.h`
10430         $cppstdin $cppflags $cppminus < $xxx >$$.h
10431
10432         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
10433                 val="$define"
10434         else
10435                 val="$undef"
10436         fi
10437         set d_grpasswd
10438         eval $setvar
10439
10440         $rm -f $$.h
10441         ;;
10442 *)
10443         val="$undef";
10444         set d_grpasswd; eval $setvar
10445         ;;
10446 esac
10447
10448 : see if hasmntopt exists
10449 set hasmntopt d_hasmntopt
10450 eval $inlibc
10451
10452 : see if this is a netinet/in.h or sys/in.h system
10453 set netinet/in.h i_niin sys/in.h i_sysin
10454 eval $inhdr
10455
10456 : see if arpa/inet.h has to be included
10457 set arpa/inet.h i_arpainet
10458 eval $inhdr
10459
10460 : see if htonl --and friends-- exists
10461 val=''
10462 set htonl val
10463 eval $inlibc
10464
10465 : Maybe they are macros.
10466 case "$val" in
10467 $undef)
10468         $cat >htonl.c <<EOM
10469 #include <stdio.h>
10470 #include <sys/types.h>
10471 #$i_niin I_NETINET_IN
10472 #$i_sysin I_SYS_IN
10473 #$i_arpainet I_ARPA_INET
10474 #ifdef I_NETINET_IN
10475 #include <netinet/in.h>
10476 #endif
10477 #ifdef I_SYS_IN
10478 #include <sys/in.h>
10479 #endif
10480 #ifdef I_ARPA_INET
10481 #include <arpa/inet.h>
10482 #endif
10483 #ifdef htonl
10484 printf("Defined as a macro.");
10485 #endif
10486 EOM
10487         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
10488         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
10489                 val="$define"
10490                 echo "But it seems to be defined as a macro." >&4
10491         fi
10492         $rm -f htonl.?
10493         ;;
10494 esac
10495 set d_htonl
10496 eval $setvar
10497
10498 : see if iconv exists
10499 set iconv d_iconv
10500 eval $inlibc
10501
10502 : index or strchr
10503 echo " "
10504 if set index val -f; eval $csym; $val; then
10505         if set strchr val -f d_strchr; eval $csym; $val; then
10506                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
10507                         val="$define"
10508                         vali="$undef"
10509                         echo "strchr() found." >&4
10510                 else
10511                         val="$undef"
10512                         vali="$define"
10513                         echo "index() found." >&4
10514                 fi
10515         else
10516                 val="$undef"
10517                 vali="$define"
10518                 echo "index() found." >&4
10519         fi
10520 else
10521         if set strchr val -f d_strchr; eval $csym; $val; then
10522                 val="$define"
10523                 vali="$undef"
10524                 echo "strchr() found." >&4
10525         else
10526                 echo "No index() or strchr() found!" >&4
10527                 val="$undef"
10528                 vali="$undef"
10529         fi
10530 fi
10531 set d_strchr; eval $setvar
10532 val="$vali"
10533 set d_index; eval $setvar
10534
10535 : check whether inet_aton exists
10536 set inet_aton d_inetaton
10537 eval $inlibc
10538
10539 : Look for isascii
10540 echo " "
10541 $cat >isascii.c <<'EOCP'
10542 #include <stdio.h>
10543 #include <ctype.h>
10544 int main() {
10545         int c = 'A';
10546         if (isascii(c))
10547                 exit(0);
10548         else
10549                 exit(1);
10550 }
10551 EOCP
10552 set isascii
10553 if eval $compile; then
10554         echo "isascii() found." >&4
10555         val="$define"
10556 else
10557         echo "isascii() NOT found." >&4
10558         val="$undef"
10559 fi
10560 set d_isascii
10561 eval $setvar
10562 $rm -f isascii*
10563
10564 : see if isnan exists
10565 set isnan d_isnan
10566 eval $inlibc
10567
10568 : see if isnanl exists
10569 set isnanl d_isnanl
10570 eval $inlibc
10571
10572 : see if killpg exists
10573 set killpg d_killpg
10574 eval $inlibc
10575
10576 : see if lchown exists
10577 echo " "
10578 $cat > try.c <<'EOCP'
10579 /* System header to define __stub macros and hopefully few prototypes,
10580     which can conflict with char lchown(); below.  */
10581 #include <assert.h>
10582 /* Override any gcc2 internal prototype to avoid an error.  */
10583 /* We use char because int might match the return type of a gcc2
10584    builtin and then its argument prototype would still apply.  */
10585 char lchown();
10586 int main() {
10587     /*  The GNU C library defines this for functions which it implements
10588         to always fail with ENOSYS.  Some functions are actually named
10589         something starting with __ and the normal name is an alias.  */
10590 #if defined (__stub_lchown) || defined (__stub___lchown)
10591 choke me
10592 #else
10593 lchown();
10594 #endif
10595 ; return 0; }
10596 EOCP
10597 set try
10598 if eval $compile; then
10599     $echo "lchown() found." >&4
10600     val="$define"
10601 else
10602     $echo "lchown() NOT found." >&4
10603     val="$undef"
10604 fi
10605 set d_lchown
10606 eval $setvar
10607
10608 : See if number of significant digits in a double precision number is known
10609 echo " "
10610 $cat >ldbl_dig.c <<EOM
10611 #$i_limits I_LIMITS
10612 #$i_float I_FLOAT
10613 #ifdef I_LIMITS
10614 #include <limits.h>
10615 #endif
10616 #ifdef I_FLOAT
10617 #include <float.h>
10618 #endif
10619 #ifdef LDBL_DIG
10620 printf("Contains LDBL_DIG");
10621 #endif
10622 EOM
10623 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
10624 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
10625         echo "LDBL_DIG found." >&4
10626         val="$define"
10627 else
10628         echo "LDBL_DIG NOT found." >&4
10629         val="$undef"
10630 fi
10631 $rm -f ldbl_dig.?
10632 set d_ldbl_dig
10633 eval $setvar
10634
10635 : see if link exists
10636 set link d_link
10637 eval $inlibc
10638
10639 : see if localeconv exists
10640 set localeconv d_locconv
10641 eval $inlibc
10642
10643 : see if lockf exists
10644 set lockf d_lockf
10645 eval $inlibc
10646
10647 : see if prototype for lseek is available
10648 echo " "
10649 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
10650 eval $hasproto
10651
10652 : see if lstat exists
10653 set lstat d_lstat
10654 eval $inlibc
10655
10656 : see if madvise exists
10657 set madvise d_madvise
10658 eval $inlibc
10659
10660 : see if mblen exists
10661 set mblen d_mblen
10662 eval $inlibc
10663
10664 : see if mbstowcs exists
10665 set mbstowcs d_mbstowcs
10666 eval $inlibc
10667
10668 : see if mbtowc exists
10669 set mbtowc d_mbtowc
10670 eval $inlibc
10671
10672 : see if memchr exists
10673 set memchr d_memchr
10674 eval $inlibc
10675
10676 : see if memcmp exists
10677 set memcmp d_memcmp
10678 eval $inlibc
10679
10680 : see if memcpy exists
10681 set memcpy d_memcpy
10682 eval $inlibc
10683
10684 : see if memmove exists
10685 set memmove d_memmove
10686 eval $inlibc
10687
10688 : see if memset exists
10689 set memset d_memset
10690 eval $inlibc
10691
10692 : see if mkdir exists
10693 set mkdir d_mkdir
10694 eval $inlibc
10695
10696 : see if mkdtemp exists
10697 set mkdtemp d_mkdtemp
10698 eval $inlibc
10699
10700 : see if mkfifo exists
10701 set mkfifo d_mkfifo
10702 eval $inlibc
10703
10704 : see if mkstemp exists
10705 set mkstemp d_mkstemp
10706 eval $inlibc
10707
10708 : see if mkstemps exists
10709 set mkstemps d_mkstemps
10710 eval $inlibc
10711
10712 : see if mktime exists
10713 set mktime d_mktime
10714 eval $inlibc
10715
10716 : see if this is a sys/mman.h system
10717 set sys/mman.h i_sysmman
10718 eval $inhdr
10719
10720 : see if mmap exists
10721 set mmap d_mmap
10722 eval $inlibc
10723 : see what shmat returns
10724 : default to something harmless
10725 mmaptype='void *'
10726 case "$i_sysmman$d_mmap" in
10727 "$define$define")
10728         $cat >mmap.c <<'END'
10729 #include <sys/mman.h>
10730 void *mmap();
10731 END
10732         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
10733                 mmaptype='void *'
10734         else
10735                 mmaptype='caddr_t'
10736         fi
10737         echo "and it returns ($mmaptype)." >&4
10738         ;;
10739 esac
10740
10741
10742
10743 : see if modfl exists
10744 set modfl d_modfl
10745 eval $inlibc
10746
10747 d_modfl_pow32_bug="$undef"
10748
10749 case "$d_longdbl$d_modfl" in
10750 $define$define)
10751         $cat <<EOM
10752 Checking to see whether your modfl() is okay for large values...
10753 EOM
10754 $cat >try.c <<EOCP
10755 #include <math.h> 
10756 #include <stdio.h>
10757 int main() {
10758     long double nv = 4294967303.15;
10759     long double v, w;
10760     v = modfl(nv, &w);         
10761 #ifdef __GLIBC__
10762     printf("glibc");
10763 #endif
10764     printf(" %"$sPRIfldbl" %"$sPRIfldbl" %"$sPRIfldbl"\n", nv, v, w);
10765     return 0;
10766 }
10767 EOCP
10768         case "$osname:$gccversion" in
10769         aix:)   saveccflags="$ccflags"
10770                 ccflags="$ccflags -qlongdouble" ;; # to avoid core dump
10771         esac
10772         set try
10773         if eval $compile; then
10774                 foo=`$run ./try`
10775                 case "$foo" in
10776                 *" 4294967303.150000 1.150000 4294967302.000000")
10777                         echo >&4 "Your modfl() is broken for large values."
10778                         d_modfl_pow32_bug="$define"
10779                         case "$foo" in
10780                         glibc)  echo >&4 "You should upgrade your glibc to at least 2.2.2 to get a fixed modfl()."
10781                         ;;
10782                         esac
10783                         ;;
10784                 *" 4294967303.150000 0.150000 4294967303.000000")
10785                         echo >&4 "Your modfl() seems okay for large values."
10786                         ;;
10787                 *)      echo >&4 "I don't understand your modfl() at all."
10788                         d_modfl="$undef"
10789                         ;;
10790                 esac
10791                 $rm -f try.* try core core.try.*
10792         else
10793                 echo "I cannot figure out whether your modfl() is okay, assuming it isn't."
10794                 d_modfl="$undef"
10795         fi
10796         case "$osname:$gccversion" in
10797         aix:)   $ccflags="saveccflags" ;; # restore
10798         esac
10799         ;;
10800 esac
10801
10802 : see if mprotect exists
10803 set mprotect d_mprotect
10804 eval $inlibc
10805
10806 : see if msgctl exists
10807 set msgctl d_msgctl
10808 eval $inlibc
10809
10810 : see if msgget exists
10811 set msgget d_msgget
10812 eval $inlibc
10813
10814 : see if msgsnd exists
10815 set msgsnd d_msgsnd
10816 eval $inlibc
10817
10818 : see if msgrcv exists
10819 set msgrcv d_msgrcv
10820 eval $inlibc
10821
10822 : see how much of the 'msg*(2)' library is present.
10823 h_msg=true
10824 echo " "
10825 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
10826 *"$undef"*) h_msg=false;;
10827 esac
10828 case "$osname" in
10829 freebsd)
10830     case "`ipcs 2>&1`" in
10831     "SVID messages"*"not configured"*)
10832         echo "Your $osname does not have the msg*(2) configured." >&4
10833         h_msg=false
10834         val="$undef"
10835         set msgctl d_msgctl
10836         eval $setvar
10837         set msgget d_msgget
10838         eval $setvar
10839         set msgsnd d_msgsnd
10840         eval $setvar
10841         set msgrcv d_msgrcv
10842         eval $setvar
10843         ;;
10844     esac
10845     ;;
10846 esac
10847 : we could also check for sys/ipc.h ...
10848 if $h_msg && $test `./findhdr sys/msg.h`; then
10849         echo "You have the full msg*(2) library." >&4
10850         val="$define"
10851 else
10852         echo "You don't have the full msg*(2) library." >&4
10853         val="$undef"
10854 fi
10855 set d_msg
10856 eval $setvar
10857
10858
10859 echo " "
10860 echo "Checking to see if your system supports struct msghdr..." >&4
10861 set d_msghdr_s msghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
10862 eval $hasstruct
10863 case "$d_msghdr_s" in
10864 "$define")      echo "Yes, it does."   ;;
10865 *)              echo "No, it doesn't." ;;
10866 esac
10867
10868
10869 : see if msync exists
10870 set msync d_msync
10871 eval $inlibc
10872
10873 : see if munmap exists
10874 set munmap d_munmap
10875 eval $inlibc
10876
10877 : see if nice exists
10878 set nice d_nice
10879 eval $inlibc
10880
10881 : check for length of character
10882 echo " "
10883 case "$charsize" in
10884 '')
10885         echo "Checking to see how big your characters are (hey, you never know)..." >&4
10886         $cat >try.c <<'EOCP'
10887 #include <stdio.h>
10888 int main()
10889 {
10890     printf("%d\n", (int)sizeof(char));
10891     exit(0);
10892 }
10893 EOCP
10894         set try
10895         if eval $compile_ok; then
10896                 dflt=`$run ./try`
10897         else
10898                 dflt='1'
10899                 echo "(I can't seem to compile the test program.  Guessing...)"
10900         fi
10901         ;;
10902 *)
10903         dflt="$charsize"
10904         ;;
10905 esac
10906 rp="What is the size of a character (in bytes)?"
10907 . ./myread
10908 charsize="$ans"
10909 $rm -f try.c try
10910
10911 : check for volatile keyword
10912 echo " "
10913 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10914 $cat >try.c <<'EOCP'
10915 int main()
10916 {
10917         typedef struct _goo_struct goo_struct;
10918         goo_struct * volatile goo = ((goo_struct *)0);
10919         struct _goo_struct {
10920                 long long_int;
10921                 int reg_int;
10922                 char char_var;
10923         };
10924         typedef unsigned short foo_t;
10925         char *volatile foo;
10926         volatile int bar;
10927         volatile foo_t blech;
10928         foo = foo;
10929 }
10930 EOCP
10931 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10932         val="$define"
10933         echo "Yup, it does."
10934 else
10935         val="$undef"
10936         echo "Nope, it doesn't."
10937 fi
10938 set d_volatile
10939 eval $setvar
10940 $rm -f try.*
10941
10942
10943 echo " "
10944 $echo "Choosing the C types to be used for Perl's internal types..." >&4
10945
10946 case "$use64bitint:$d_quad:$quadtype" in
10947 define:define:?*)
10948         ivtype="$quadtype"
10949         uvtype="$uquadtype"
10950         ivsize=8
10951         uvsize=8
10952         ;;
10953 *)      ivtype="long"
10954         uvtype="unsigned long"
10955         ivsize=$longsize
10956         uvsize=$longsize
10957         ;;
10958 esac
10959
10960 case "$uselongdouble:$d_longdbl" in
10961 define:define)
10962         nvtype="long double"
10963         nvsize=$longdblsize
10964         ;;
10965 *)      nvtype=double
10966         nvsize=$doublesize
10967         ;;
10968 esac
10969
10970 $echo "(IV will be "$ivtype", $ivsize bytes)"
10971 $echo "(UV will be "$uvtype", $uvsize bytes)"
10972 $echo "(NV will be "$nvtype", $nvsize bytes)"
10973
10974 $cat >try.c <<EOCP
10975 #$i_inttypes I_INTTYPES
10976 #ifdef I_INTTYPES
10977 #include <inttypes.h>
10978 #endif
10979 #include <stdio.h>
10980 int main() {
10981 #ifdef INT8
10982    int8_t i =  INT8_MAX;
10983   uint8_t u = UINT8_MAX;
10984   printf("int8_t\n");
10985 #endif
10986 #ifdef INT16
10987    int16_t i =  INT16_MAX;
10988   uint16_t i = UINT16_MAX;
10989   printf("int16_t\n");
10990 #endif
10991 #ifdef INT32
10992    int32_t i =  INT32_MAX;
10993   uint32_t u = UINT32_MAX;
10994   printf("int32_t\n");
10995 #endif
10996 }
10997 EOCP
10998
10999 case "$i8type" in
11000 '')     case "$charsize" in
11001         1)      i8type=char
11002                 u8type="unsigned char"
11003                 i8size=$charsize
11004                 u8size=$charsize
11005                 ;;
11006         esac
11007         ;;
11008 esac
11009 case "$i8type" in
11010 '')     set try -DINT8
11011         if eval $compile; then
11012                 case "`$run ./try`" in
11013                 int8_t) i8type=int8_t
11014                         u8type=uint8_t
11015                         i8size=1
11016                         u8size=1
11017                         ;;
11018                 esac
11019         fi
11020         ;;
11021 esac
11022 case "$i8type" in
11023 '')     if $test $charsize -ge 1; then
11024                 i8type=char
11025                 u8type="unsigned char"
11026                 i8size=$charsize
11027                 u8size=$charsize
11028         fi
11029         ;;
11030 esac
11031
11032 case "$i16type" in
11033 '')     case "$shortsize" in
11034         2)      i16type=short
11035                 u16type="unsigned short"
11036                 i16size=$shortsize
11037                 u16size=$shortsize
11038                 ;;
11039         esac
11040         ;;
11041 esac
11042 case "$i16type" in
11043 '')     set try -DINT16
11044         if eval $compile; then
11045                 case "`$run ./try`" in
11046                 int16_t)
11047                         i16type=int16_t
11048                         u16type=uint16_t
11049                         i16size=2
11050                         u16size=2
11051                         ;;
11052                 esac
11053         fi
11054         ;;
11055 esac
11056 case "$i16type" in
11057 '')     if $test $shortsize -ge 2; then
11058                 i16type=short
11059                 u16type="unsigned short"
11060                 i16size=$shortsize
11061                 u16size=$shortsize
11062         fi
11063         ;;
11064 esac
11065
11066 case "$i32type" in
11067 '')     case "$longsize" in
11068         4)      i32type=long
11069                 u32type="unsigned long"
11070                 i32size=$longsize
11071                 u32size=$longsize
11072                 ;;
11073         *)      case "$intsize" in
11074                 4)      i32type=int
11075                         u32type="unsigned int"
11076                         i32size=$intsize
11077                         u32size=$intsize
11078                         ;;
11079                 esac
11080                 ;;
11081         esac
11082         ;;
11083 esac
11084 case "$i32type" in
11085 '')     set try -DINT32
11086         if eval $compile; then
11087                 case "`$run ./try`" in
11088                 int32_t)
11089                         i32type=int32_t
11090                         u32type=uint32_t
11091                         i32size=4
11092                         u32size=4
11093                         ;;
11094                 esac
11095         fi
11096         ;;
11097 esac
11098 case "$i32type" in
11099 '')     if $test $intsize -ge 4; then
11100                 i32type=int
11101                 u32type="unsigned int"
11102                 i32size=$intsize
11103                 u32size=$intsize
11104         fi
11105         ;;
11106 esac
11107
11108 case "$i64type" in
11109 '')     case "$d_quad:$quadtype" in
11110         define:?*)
11111                 i64type="$quadtype"
11112                 u64type="$uquadtype"
11113                 i64size=8
11114                 u64size=8
11115                 ;;
11116         esac
11117         ;;
11118 esac
11119
11120 $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
11121 : volatile so that the compiler has to store it out to memory.
11122 if test X"$d_volatile" = X"$define"; then
11123         volatile=volatile
11124 fi
11125 $cat <<EOP >try.c
11126 #include <stdio.h>
11127 #include <sys/types.h>
11128 #include <signal.h>
11129 #ifdef SIGFPE
11130 $volatile int bletched = 0;
11131 $signal_t blech(s) int s; { bletched = 1; }
11132 #endif
11133 int main() {
11134     $uvtype u = 0;
11135     $nvtype d;
11136     int     n = 8 * $uvsize;
11137     int     i;
11138 #ifdef SIGFPE
11139     signal(SIGFPE, blech);
11140 #endif
11141
11142     for (i = 0; i < n; i++) {
11143       u = u << 1 | ($uvtype)1;
11144       d = ($nvtype)u;
11145       if (($uvtype)d != u)
11146         break;
11147       if (d <= 0)
11148         break;
11149       d = ($nvtype)(u - 1);
11150       if (($uvtype)d != (u - 1))
11151         break;
11152 #ifdef SIGFPE
11153       if (bletched) {
11154         break;
11155 #endif
11156       } 
11157     }
11158     printf("%d\n", ((i == n) ? -n : i));
11159     exit(0);
11160 }
11161 EOP
11162 set try
11163
11164 d_nv_preserves_uv="$undef"
11165 if eval $compile; then
11166         d_nv_preserves_uv_bits="`$run ./try`"
11167 fi
11168 case "$d_nv_preserves_uv_bits" in
11169 \-[1-9]*)       
11170         d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
11171         $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11172         d_nv_preserves_uv="$define"
11173         ;;
11174 [1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11175         d_nv_preserves_uv="$undef" ;;
11176 *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
11177         d_nv_preserves_uv_bits="$undef" ;;
11178 esac
11179
11180 $rm -f try.* try
11181
11182
11183 : check for off64_t
11184 echo " "
11185 echo "Checking to see if you have off64_t..." >&4
11186 $cat >try.c <<EOCP
11187 #include <sys/types.h>
11188 #include <unistd.h>
11189 int main() { off64_t x = 7; }
11190 EOCP
11191 set try
11192 if eval $compile; then
11193         val="$define"
11194         echo "You have off64_t."
11195 else
11196         val="$undef"
11197         echo "You do not have off64_t."
11198         case "$lseeksize" in
11199         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
11200         esac
11201 fi
11202 $rm -f try.* try
11203 set d_off64_t
11204 eval $setvar
11205
11206 : see if POSIX threads are available
11207 set pthread.h i_pthread
11208 eval $inhdr
11209
11210
11211
11212
11213 : how to create joinable pthreads
11214 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
11215         echo " "
11216         echo "Checking what constant to use for creating joinable pthreads..." >&4 
11217         $cat >try.c <<'EOCP'
11218 #include <pthread.h>
11219 int main() {
11220     int detachstate = JOINABLE;
11221 }
11222 EOCP
11223         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
11224         if eval $compile; then
11225                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
11226                 val="$undef" # Yes, undef.
11227                 set d_old_pthread_create_joinable
11228                 eval $setvar
11229                 val=""
11230                 set old_pthread_create_joinable
11231                 eval $setvar
11232         else
11233                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
11234                 if eval $compile; then
11235                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
11236                         val="$define"
11237                         set d_old_pthread_create_joinable
11238                         eval $setvar
11239                         val=PTHREAD_CREATE_UNDETACHED
11240                         set old_pthread_create_joinable
11241                         eval $setvar
11242                 else            
11243                         set try -DJOINABLE=__UNDETACHED
11244                         if eval $compile; then
11245                                 echo "You seem to use __UNDETACHED." >&4
11246                                 val="$define"
11247                                 set d_old_pthread_create_joinable
11248                                 eval $setvar
11249                                 val=__UNDETACHED
11250                                 set old_pthread_create_joinable
11251                                 eval $setvar
11252                         else
11253                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
11254                                 val="$define"
11255                                 set d_old_pthread_create_joinable
11256                                 eval $setvar
11257                                 val=0
11258                                 set old_pthread_create_joinable
11259                                 eval $setvar
11260                         fi
11261                 fi
11262         fi
11263         $rm -f try try.*
11264 else
11265     d_old_pthread_create_joinable="$undef"
11266     old_pthread_create_joinable=""
11267 fi
11268
11269 : see if pause exists
11270 set pause d_pause
11271 eval $inlibc
11272
11273 : see if pipe exists
11274 set pipe d_pipe
11275 eval $inlibc
11276
11277 : see if poll exists
11278 set poll d_poll
11279 eval $inlibc
11280
11281
11282 : see whether the various POSIXish _yields exist
11283 $cat >try.c <<EOP
11284 #include <pthread.h>
11285 #include <stdio.h>
11286 int main() {
11287 #ifdef SCHED_YIELD
11288         sched_yield();
11289 #else
11290 #ifdef PTHREAD_YIELD
11291         pthread_yield();
11292 #else
11293 #ifdef PTHREAD_YIELD_NULL
11294         pthread_yield(NULL);
11295 #endif
11296 #endif
11297 #endif
11298 }
11299 EOP
11300 : see if sched_yield exists
11301 set try -DSCHED_YIELD
11302 if eval $compile; then
11303     val="$define"
11304     sched_yield='sched_yield()'
11305 else
11306     val="$undef"
11307 fi
11308 case "$usethreads" in
11309 $define)
11310         case "$val" in
11311         $define) echo 'sched_yield() found.' >&4        ;;
11312         *)       echo 'sched_yield() NOT found.' >&4    ;;
11313         esac
11314 esac
11315 set d_sched_yield
11316 eval $setvar
11317
11318 : see if pthread_yield exists
11319 set try -DPTHREAD_YIELD
11320 if eval $compile; then
11321     val="$define"
11322     case "$sched_yield" in
11323     '') sched_yield='pthread_yield()' ;;
11324     esac
11325 else
11326     set try -DPTHREAD_YIELD_NULL
11327     if eval $compile; then
11328         val="$define"
11329         case "$sched_yield" in
11330         '') sched_yield='pthread_yield(NULL)' ;;
11331         esac
11332     else
11333         val="$undef"
11334     fi
11335 fi
11336 case "$usethreads" in
11337 $define)
11338         case "$val" in
11339         $define) echo 'pthread_yield() found.' >&4      ;;
11340         *)       echo 'pthread_yield() NOT found.' >&4  ;;
11341         esac
11342         ;;
11343 esac
11344 set d_pthread_yield
11345 eval $setvar
11346
11347 case "$sched_yield" in
11348 '') sched_yield=undef ;;
11349 esac
11350
11351 $rm -f try try.*
11352
11353 : see if this is a pwd.h system
11354 set pwd.h i_pwd
11355 eval $inhdr
11356
11357 case "$i_pwd" in
11358 $define)
11359         xxx=`./findhdr pwd.h`
11360         $cppstdin $cppflags $cppminus < $xxx >$$.h
11361
11362         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
11363                 val="$define"
11364         else
11365                 val="$undef"
11366         fi
11367         set d_pwquota
11368         eval $setvar
11369
11370         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
11371                 val="$define"
11372         else
11373                 val="$undef"
11374         fi
11375         set d_pwage
11376         eval $setvar
11377
11378         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
11379                 val="$define"
11380         else
11381                 val="$undef"
11382         fi
11383         set d_pwchange
11384         eval $setvar
11385
11386         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
11387                 val="$define"
11388         else
11389                 val="$undef"
11390         fi
11391         set d_pwclass
11392         eval $setvar
11393
11394         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
11395                 val="$define"
11396         else
11397                 val="$undef"
11398         fi
11399         set d_pwexpire
11400         eval $setvar
11401
11402         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
11403                 val="$define"
11404         else
11405                 val="$undef"
11406         fi
11407         set d_pwcomment
11408         eval $setvar
11409
11410         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
11411                 val="$define"
11412         else
11413                 val="$undef"
11414         fi
11415         set d_pwgecos
11416         eval $setvar
11417
11418         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
11419                 val="$define"
11420         else
11421                 val="$undef"
11422         fi
11423         set d_pwpasswd
11424         eval $setvar
11425
11426         $rm -f $$.h
11427         ;;
11428 *)
11429         val="$undef"; 
11430         set d_pwquota; eval $setvar
11431         set d_pwage; eval $setvar
11432         set d_pwchange; eval $setvar
11433         set d_pwclass; eval $setvar
11434         set d_pwexpire; eval $setvar
11435         set d_pwcomment; eval $setvar
11436         set d_pwgecos; eval $setvar
11437         set d_pwpasswd; eval $setvar
11438         ;;
11439 esac
11440
11441 : see if readdir and friends exist
11442 set readdir d_readdir
11443 eval $inlibc
11444 set seekdir d_seekdir
11445 eval $inlibc
11446 set telldir d_telldir
11447 eval $inlibc
11448 set rewinddir d_rewinddir
11449 eval $inlibc
11450
11451 : see if readlink exists
11452 set readlink d_readlink
11453 eval $inlibc
11454
11455 : see if readv exists
11456 set readv d_readv
11457 eval $inlibc
11458
11459 : see if recvmsg exists
11460 set recvmsg d_recvmsg
11461 eval $inlibc
11462
11463 : see if rename exists
11464 set rename d_rename
11465 eval $inlibc
11466
11467 : see if rmdir exists
11468 set rmdir d_rmdir
11469 eval $inlibc
11470
11471 : see if memory.h is available.
11472 val=''
11473 set memory.h val
11474 eval $inhdr
11475
11476 : See if it conflicts with string.h
11477 case "$val" in
11478 $define)
11479         case "$strings" in
11480         '') ;;
11481         *)
11482                 $cppstdin $cppflags $cppminus < $strings > mem.h
11483                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
11484                         echo " "
11485                         echo "We won't be including <memory.h>."
11486                         val="$undef"
11487                 fi
11488                 $rm -f mem.h
11489                 ;;
11490         esac
11491 esac
11492 set i_memory
11493 eval $setvar
11494
11495 : can bcopy handle overlapping blocks?
11496 val="$undef"
11497 case "$d_bcopy" in
11498 "$define")
11499         echo " "
11500         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
11501         $cat >try.c <<EOCP
11502 #$i_memory I_MEMORY
11503 #$i_stdlib I_STDLIB
11504 #$i_string I_STRING
11505 #$i_unistd I_UNISTD
11506 EOCP
11507         $cat >>try.c <<'EOCP'
11508 #include <stdio.h>
11509 #ifdef I_MEMORY
11510 #  include <memory.h>
11511 #endif
11512 #ifdef I_STDLIB
11513 #  include <stdlib.h>
11514 #endif
11515 #ifdef I_STRING
11516 #  include <string.h>
11517 #else
11518 #  include <strings.h>
11519 #endif
11520 #ifdef I_UNISTD
11521 #  include <unistd.h>  /* Needed for NetBSD */
11522 #endif
11523 int main()
11524 {
11525 char buf[128], abc[128];
11526 char *b;
11527 int len;
11528 int off;
11529 int align;
11530
11531 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
11532
11533 for (align = 7; align >= 0; align--) {
11534         for (len = 36; len; len--) {
11535                 b = buf+align;
11536                 bcopy(abc, b, len);
11537                 for (off = 1; off <= len; off++) {
11538                         bcopy(b, b+off, len);
11539                         bcopy(b+off, b, len);
11540                         if (bcmp(b, abc, len))
11541                                 exit(1);
11542                 }
11543         }
11544 }
11545 exit(0);
11546 }
11547 EOCP
11548         set try
11549         if eval $compile_ok; then
11550                 if $run ./try 2>/dev/null; then
11551                         echo "Yes, it can."
11552                         val="$define"
11553                 else
11554                         echo "It can't, sorry."
11555                         case "$d_memmove" in
11556                         "$define") echo "But that's Ok since you have memmove()." ;;
11557                         esac
11558                 fi
11559         else
11560                 echo "(I can't compile the test program, so we'll assume not...)"
11561                 case "$d_memmove" in
11562                 "$define") echo "But that's Ok since you have memmove()." ;;
11563                 esac
11564         fi
11565         ;;
11566 esac
11567 $rm -f try.* try core
11568 set d_safebcpy
11569 eval $setvar
11570
11571 : can memcpy handle overlapping blocks?
11572 val="$undef"
11573 case "$d_memcpy" in
11574 "$define")
11575         echo " "
11576         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
11577         $cat >try.c <<EOCP
11578 #$i_memory I_MEMORY
11579 #$i_stdlib I_STDLIB
11580 #$i_string I_STRING
11581 #$i_unistd I_UNISTD
11582 EOCP
11583         $cat >>try.c <<'EOCP'
11584 #include <stdio.h>
11585 #ifdef I_MEMORY
11586 #  include <memory.h>
11587 #endif
11588 #ifdef I_STDLIB
11589 #  include <stdlib.h>
11590 #endif
11591 #ifdef I_STRING
11592 #  include <string.h>
11593 #else
11594 #  include <strings.h>
11595 #endif
11596 #ifdef I_UNISTD
11597 #  include <unistd.h>  /* Needed for NetBSD */
11598 #endif
11599 int main()
11600 {
11601 char buf[128], abc[128];
11602 char *b;
11603 int len;
11604 int off;
11605 int align;
11606
11607 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11608    try to store the string in read-only memory. */
11609 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
11610
11611 for (align = 7; align >= 0; align--) {
11612         for (len = 36; len; len--) {
11613                 b = buf+align;
11614                 memcpy(b, abc, len);
11615                 for (off = 1; off <= len; off++) {
11616                         memcpy(b+off, b, len);
11617                         memcpy(b, b+off, len);
11618                         if (memcmp(b, abc, len))
11619                                 exit(1);
11620                 }
11621         }
11622 }
11623 exit(0);
11624 }
11625 EOCP
11626         set try
11627         if eval $compile_ok; then
11628                 if $run ./try 2>/dev/null; then
11629                         echo "Yes, it can."
11630                         val="$define"
11631                 else
11632                         echo "It can't, sorry."
11633                         case "$d_memmove" in
11634                         "$define") echo "But that's Ok since you have memmove()." ;;
11635                         esac
11636                 fi
11637         else
11638                 echo "(I can't compile the test program, so we'll assume not...)"
11639                 case "$d_memmove" in
11640                 "$define") echo "But that's Ok since you have memmove()." ;;
11641                 esac
11642         fi
11643         ;;
11644 esac
11645 $rm -f try.* try core
11646 set d_safemcpy
11647 eval $setvar
11648
11649 : can memcmp be trusted to compare relative magnitude?
11650 val="$undef"
11651 case "$d_memcmp" in
11652 "$define")
11653         echo " "
11654         echo "Checking if your memcmp() can compare relative magnitude..." >&4
11655         $cat >try.c <<EOCP
11656 #$i_memory I_MEMORY
11657 #$i_stdlib I_STDLIB
11658 #$i_string I_STRING
11659 #$i_unistd I_UNISTD
11660 EOCP
11661         $cat >>try.c <<'EOCP'
11662 #include <stdio.h>
11663 #ifdef I_MEMORY
11664 #  include <memory.h>
11665 #endif
11666 #ifdef I_STDLIB
11667 #  include <stdlib.h>
11668 #endif
11669 #ifdef I_STRING
11670 #  include <string.h>
11671 #else
11672 #  include <strings.h>
11673 #endif
11674 #ifdef I_UNISTD
11675 #  include <unistd.h>  /* Needed for NetBSD */
11676 #endif
11677 int main()
11678 {
11679 char a = -1;
11680 char b = 0;
11681 if ((a < b) && memcmp(&a, &b, 1) < 0)
11682         exit(1);
11683 exit(0);
11684 }
11685 EOCP
11686         set try
11687         if eval $compile_ok; then
11688                 if $run ./try 2>/dev/null; then
11689                         echo "Yes, it can."
11690                         val="$define"
11691                 else
11692                         echo "No, it can't (it uses signed chars)."
11693                 fi
11694         else
11695                 echo "(I can't compile the test program, so we'll assume not...)"
11696         fi
11697         ;;
11698 esac
11699 $rm -f try.* try core
11700 set d_sanemcmp
11701 eval $setvar
11702
11703 : see if prototype for sbrk is available
11704 echo " "
11705 set d_sbrkproto sbrk $i_unistd unistd.h
11706 eval $hasproto
11707
11708 : see if select exists
11709 set select d_select
11710 eval $inlibc
11711
11712 : see if semctl exists
11713 set semctl d_semctl
11714 eval $inlibc
11715
11716 : see if semget exists
11717 set semget d_semget
11718 eval $inlibc
11719
11720 : see if semop exists
11721 set semop d_semop
11722 eval $inlibc
11723
11724 : see how much of the 'sem*(2)' library is present.
11725 h_sem=true
11726 echo " "
11727 case "$d_semctl$d_semget$d_semop" in
11728 *"$undef"*) h_sem=false;;
11729 esac
11730 case "$osname" in
11731 freebsd)
11732     case "`ipcs 2>&1`" in
11733     "SVID messages"*"not configured"*)
11734         echo "Your $osname does not have the sem*(2) configured." >&4
11735         h_sem=false
11736         val="$undef"
11737         set semctl d_semctl
11738         eval $setvar
11739         set semget d_semget
11740         eval $setvar
11741         set semop d_semop
11742         eval $setvar
11743         ;;
11744     esac
11745     ;;
11746 esac
11747 : we could also check for sys/ipc.h ...
11748 if $h_sem && $test `./findhdr sys/sem.h`; then
11749         echo "You have the full sem*(2) library." >&4
11750         val="$define"
11751 else
11752         echo "You don't have the full sem*(2) library." >&4
11753         val="$undef"
11754 fi
11755 set d_sem
11756 eval $setvar
11757
11758 : see whether sys/sem.h defines union semun
11759 echo " "
11760 $cat > try.c <<'END'
11761 #include <sys/types.h>
11762 #include <sys/ipc.h>
11763 #include <sys/sem.h>
11764 int main () { union semun semun; semun.buf = 0; }
11765 END
11766 set try
11767 if eval $compile; then
11768     echo "You have union semun in <sys/sem.h>." >&4
11769     val="$define"
11770 else
11771     echo "You do not have union semun in <sys/sem.h>." >&4
11772     val="$undef"
11773 fi
11774 $rm -f try try.c try.h
11775 set d_union_semun
11776 eval $setvar
11777
11778 : see how to do semctl IPC_STAT
11779 case "$d_sem" in
11780 $define)
11781     : see whether semctl IPC_STAT can use union semun
11782     echo " "
11783     $cat > try.h <<END
11784 #ifndef S_IRUSR
11785 #   ifdef S_IREAD
11786 #       define S_IRUSR S_IREAD
11787 #       define S_IWUSR S_IWRITE
11788 #       define S_IXUSR S_IEXEC
11789 #   else
11790 #       define S_IRUSR 0400
11791 #       define S_IWUSR 0200
11792 #       define S_IXUSR 0100
11793 #   endif
11794 #   define S_IRGRP (S_IRUSR>>3)
11795 #   define S_IWGRP (S_IWUSR>>3)
11796 #   define S_IXGRP (S_IXUSR>>3)
11797 #   define S_IROTH (S_IRUSR>>6)
11798 #   define S_IWOTH (S_IWUSR>>6)
11799 #   define S_IXOTH (S_IXUSR>>6)
11800 #endif
11801 #ifndef S_IRWXU
11802 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
11803 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
11804 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
11805 #endif
11806 END
11807
11808     $cat > try.c <<END
11809 #include <sys/types.h>
11810 #include <sys/ipc.h>
11811 #include <sys/sem.h>
11812 #include <sys/stat.h>
11813 #include <stdio.h>
11814 #include <errno.h>
11815 #include "try.h"
11816 #ifndef errno
11817 extern int errno;
11818 #endif
11819 #$d_union_semun HAS_UNION_SEMUN
11820 int main() {
11821     union semun
11822 #ifndef HAS_UNION_SEMUN
11823     {
11824         int val;
11825         struct semid_ds *buf;
11826         unsigned short *array;
11827     }
11828 #endif
11829     arg;
11830     int sem, st;
11831
11832 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
11833     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11834     if (sem > -1) {
11835         struct semid_ds argbuf;
11836         arg.buf = &argbuf;
11837 #       ifdef IPC_STAT
11838         st = semctl(sem, 0, IPC_STAT, arg);
11839         if (st == 0)
11840             printf("semun\n");
11841         else
11842 #       endif /* IPC_STAT */
11843             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11844 #       ifdef IPC_RMID
11845         if (semctl(sem, 0, IPC_RMID, arg) != 0)
11846 #       endif /* IPC_RMID */
11847             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11848     } else
11849 #endif /* IPC_PRIVATE && ... */
11850         printf("semget failed: errno = %d\n", errno);
11851   return 0;
11852 }
11853 END
11854     val="$undef"
11855     set try
11856     if eval $compile; then
11857         xxx=`$run ./try`
11858         case "$xxx" in
11859         semun) val="$define" ;;
11860         esac
11861     fi
11862     $rm -f try try.c
11863     set d_semctl_semun
11864     eval $setvar
11865     case "$d_semctl_semun" in
11866     $define)
11867         echo "You can use union semun for semctl IPC_STAT." >&4
11868         also='also'
11869         ;;
11870     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
11871         also=''
11872         ;;
11873     esac
11874
11875     : see whether semctl IPC_STAT can use struct semid_ds pointer
11876     $cat > try.c <<'END'
11877 #include <sys/types.h>
11878 #include <sys/ipc.h>
11879 #include <sys/sem.h>
11880 #include <sys/stat.h>
11881 #include "try.h"
11882 #include <stdio.h>
11883 #include <errno.h>
11884 #ifndef errno
11885 extern int errno;
11886 #endif
11887 int main() {
11888     struct semid_ds arg;
11889     int sem, st;
11890
11891 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
11892     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11893     if (sem > -1) {
11894 #       ifdef IPC_STAT
11895         st = semctl(sem, 0, IPC_STAT, &arg);
11896         if (st == 0)
11897             printf("semid_ds\n");
11898         else
11899 #       endif /* IPC_STAT */
11900             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11901 #       ifdef IPC_RMID
11902         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
11903 #       endif /* IPC_RMID */
11904             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11905     } else
11906 #endif /* IPC_PRIVATE && ... */
11907         printf("semget failed: errno = %d\n", errno);
11908
11909     return 0;
11910 }
11911 END
11912     val="$undef"
11913     set try
11914     if eval $compile; then
11915         xxx=`$run ./try`
11916         case "$xxx" in
11917         semid_ds) val="$define" ;;
11918         esac
11919     fi
11920     $rm -f try try.c
11921     set d_semctl_semid_ds
11922     eval $setvar
11923     case "$d_semctl_semid_ds" in
11924     $define)
11925         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
11926         ;;
11927     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
11928         ;;
11929     esac
11930     $rm -f try.h
11931     ;;
11932 *)  val="$undef"
11933
11934     # We do not have the full sem*(2) library, so assume we can not
11935     # use either.
11936
11937     set d_semctl_semun
11938     eval $setvar
11939
11940     set d_semctl_semid_ds
11941     eval $setvar
11942     ;;
11943 esac
11944
11945 : see if sendmsg exists
11946 set sendmsg d_sendmsg
11947 eval $inlibc
11948
11949 : see if setegid exists
11950 set setegid d_setegid
11951 eval $inlibc
11952
11953 : see if seteuid exists
11954 set seteuid d_seteuid
11955 eval $inlibc
11956
11957 : see if setgrent exists
11958 set setgrent d_setgrent
11959 eval $inlibc
11960
11961 : see if sethostent exists
11962 set sethostent d_sethent
11963 eval $inlibc
11964
11965 : see if setitimer exists
11966 set setitimer d_setitimer
11967 eval $inlibc
11968
11969 : see if setlinebuf exists
11970 set setlinebuf d_setlinebuf
11971 eval $inlibc
11972
11973 : see if setlocale exists
11974 set setlocale d_setlocale
11975 eval $inlibc
11976
11977 : see if setnetent exists
11978 set setnetent d_setnent
11979 eval $inlibc
11980
11981 : see if setprotoent exists
11982 set setprotoent d_setpent
11983 eval $inlibc
11984
11985 : see if setpgid exists
11986 set setpgid d_setpgid
11987 eval $inlibc
11988
11989 : see if setpgrp2 exists
11990 set setpgrp2 d_setpgrp2
11991 eval $inlibc
11992
11993 : see if setpriority exists
11994 set setpriority d_setprior
11995 eval $inlibc
11996
11997 : see if setproctitle exists
11998 set setproctitle d_setproctitle
11999 eval $inlibc
12000
12001 : see if setpwent exists
12002 set setpwent d_setpwent
12003 eval $inlibc
12004
12005 : see if setregid exists
12006 set setregid d_setregid
12007 eval $inlibc
12008 set setresgid d_setresgid
12009 eval $inlibc
12010
12011 : see if setreuid exists
12012 set setreuid d_setreuid
12013 eval $inlibc
12014 set setresuid d_setresuid
12015 eval $inlibc
12016
12017 : see if setrgid exists
12018 set setrgid d_setrgid
12019 eval $inlibc
12020
12021 : see if setruid exists
12022 set setruid d_setruid
12023 eval $inlibc
12024
12025 : see if setservent exists
12026 set setservent d_setsent
12027 eval $inlibc
12028
12029 : see if setsid exists
12030 set setsid d_setsid
12031 eval $inlibc
12032
12033 : see if setvbuf exists
12034 set setvbuf d_setvbuf
12035 eval $inlibc
12036
12037 : see if sfio.h is available
12038 set sfio.h i_sfio
12039 eval $inhdr
12040
12041
12042 : see if sfio library is available
12043 case "$i_sfio" in
12044 $define)
12045         val=''
12046         set sfreserve val
12047         eval $inlibc
12048         ;;
12049 *)
12050         val="$undef"
12051         ;;
12052 esac
12053 : Ok, but do we want to use it.
12054 case "$val" in
12055 $define)
12056         case "$usesfio" in
12057         true|$define|[yY]*) dflt='y';;
12058         *) dflt='n';;
12059         esac
12060         echo "$package can use the sfio library, but it is experimental."
12061         case "$useperlio" in
12062         "$undef")
12063             echo "For sfio also the PerlIO abstraction layer is needed."
12064             echo "Earlier you said you wouldn't want that."
12065             ;;
12066         esac
12067         rp="You seem to have sfio available, do you want to try using it?"
12068         . ./myread
12069         case "$ans" in
12070         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
12071                 useperlio="$define"
12072                 val="$define"
12073                 ;;
12074         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
12075                 val="$undef"
12076                 ;;
12077         esac
12078         ;;
12079 *)      case "$usesfio" in
12080         true|$define|[yY]*)
12081                 echo "Sorry, cannot find sfio on this machine." >&4
12082                 echo "Ignoring your setting of usesfio=$usesfio." >&4
12083                 val="$undef"
12084                 ;;
12085         esac
12086         ;;
12087 esac
12088 set d_sfio
12089 eval $setvar
12090 case "$d_sfio" in
12091 $define) usesfio='true';;
12092 *) usesfio='false';;
12093 esac
12094 case "$d_sfio" in
12095 $define) ;;
12096 *)      : Remove sfio from list of libraries to use
12097         set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
12098         shift
12099         libs="$*"
12100         echo "libs = $libs" >&4
12101 ;;
12102 esac
12103
12104
12105 : see if shmctl exists
12106 set shmctl d_shmctl
12107 eval $inlibc
12108
12109 : see if shmget exists
12110 set shmget d_shmget
12111 eval $inlibc
12112
12113 : see if shmat exists
12114 set shmat d_shmat
12115 eval $inlibc
12116 : see what shmat returns
12117 case "$d_shmat" in
12118 "$define")
12119         $cat >shmat.c <<'END'
12120 #include <sys/shm.h>
12121 void *shmat();
12122 END
12123         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
12124                 shmattype='void *'
12125         else
12126                 shmattype='char *'
12127         fi
12128         echo "and it returns ($shmattype)." >&4
12129         : see if a prototype for shmat is available
12130         xxx=`./findhdr sys/shm.h`
12131         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
12132         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
12133                 val="$define"
12134         else
12135                 val="$undef"
12136         fi
12137         $rm -f shmat.[co]
12138         ;;
12139 *)
12140         val="$undef"
12141         ;;
12142 esac
12143 set d_shmatprototype
12144 eval $setvar
12145
12146 : see if shmdt exists
12147 set shmdt d_shmdt
12148 eval $inlibc
12149
12150 : see how much of the 'shm*(2)' library is present.
12151 h_shm=true
12152 echo " "
12153 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
12154 *"$undef"*) h_shm=false;;
12155 esac
12156 case "$osname" in
12157 freebsd)
12158     case "`ipcs 2>&1`" in
12159     "SVID shared memory"*"not configured"*)
12160         echo "Your $osname does not have the shm*(2) configured." >&4
12161         h_shm=false
12162         val="$undef"
12163         set shmctl d_shmctl
12164         evat $setvar
12165         set shmget d_shmget
12166         evat $setvar
12167         set shmat d_shmat
12168         evat $setvar
12169         set shmdt d_shmdt
12170         evat $setvar
12171         ;;
12172     esac
12173     ;;
12174 esac
12175 : we could also check for sys/ipc.h ...
12176 if $h_shm && $test `./findhdr sys/shm.h`; then
12177         echo "You have the full shm*(2) library." >&4
12178         val="$define"
12179 else
12180         echo "You don't have the full shm*(2) library." >&4
12181         val="$undef"
12182 fi
12183 set d_shm
12184 eval $setvar
12185
12186 echo " "
12187 : see if we have sigaction
12188 if set sigaction val -f d_sigaction; eval $csym; $val; then
12189         echo 'sigaction() found.' >&4
12190         $cat > try.c <<'EOP'
12191 #include <stdio.h>
12192 #include <sys/types.h>
12193 #include <signal.h>
12194 int main()
12195 {
12196     struct sigaction act, oact;
12197     act.sa_flags = 0;
12198     oact.sa_handler = 0;
12199     /* so that act and oact are used */
12200     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
12201 }
12202 EOP
12203         set try
12204         if eval $compile_ok; then
12205                 val="$define"
12206         else
12207                 echo "But you don't seem to have a useable struct sigaction." >&4
12208                 val="$undef"
12209         fi
12210 else
12211         echo 'sigaction NOT found.' >&4
12212         val="$undef"
12213 fi
12214 set d_sigaction; eval $setvar
12215 $rm -f try try$_o try.c
12216
12217 : see if sigprocmask exists
12218 set sigprocmask d_sigprocmask
12219 eval $inlibc
12220
12221 : see if sigsetjmp exists
12222 echo " "
12223 case "$d_sigsetjmp" in
12224 '')
12225         $cat >try.c <<'EOP'
12226 #include <setjmp.h>
12227 sigjmp_buf env;
12228 int set = 1;
12229 int main()
12230 {
12231         if (sigsetjmp(env,1))
12232                 exit(set);
12233         set = 0;
12234         siglongjmp(env, 1);
12235         exit(1);
12236 }
12237 EOP
12238         set try
12239         if eval $compile; then
12240                 if $run ./try >/dev/null 2>&1; then
12241                         echo "POSIX sigsetjmp found." >&4
12242                         val="$define"
12243                 else
12244                         $cat >&4 <<EOM
12245 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
12246 I'll ignore them.
12247 EOM
12248                         val="$undef"
12249                 fi
12250         else
12251                 echo "sigsetjmp not found." >&4
12252                 val="$undef"
12253         fi
12254         ;;
12255 *) val="$d_sigsetjmp"
12256         case "$d_sigsetjmp" in
12257         $define) echo "POSIX sigsetjmp found." >&4;;
12258         $undef) echo "sigsetjmp not found." >&4;;
12259         esac
12260         ;;
12261 esac
12262 set d_sigsetjmp
12263 eval $setvar
12264 $rm -f try.c try
12265
12266 : see if sockatmark exists
12267 set sockatmark d_sockatmark
12268 eval $inlibc
12269
12270 : see if prototype for sockatmark is available
12271 echo " "
12272 set d_sockatmarkproto sockatmark $d_socket sys/socket.h
12273 eval $hasproto
12274
12275 : see if socks5_init exists
12276 set socks5_init d_socks5_init
12277 eval $inlibc
12278
12279 : see if prototype for setresgid is available
12280 echo " "
12281 set d_sresgproto setresgid $i_unistd unistd.h
12282 eval $hasproto
12283
12284 : see if prototype for setresuid is available
12285 echo " "
12286 set d_sresuproto setresuid $i_unistd unistd.h
12287 eval $hasproto
12288
12289 : see if sys/stat.h is available
12290 set sys/stat.h i_sysstat
12291 eval $inhdr
12292
12293
12294 : see if stat knows about block sizes
12295 echo " "
12296 echo "Checking to see if your struct stat has st_blocks field..." >&4
12297 set d_statblks stat st_blocks $i_sysstat sys/stat.h
12298 eval $hasfield
12299
12300
12301 : see if this is a sys/vfs.h system
12302 set sys/vfs.h i_sysvfs
12303 eval $inhdr
12304
12305
12306 : see if this is a sys/statfs.h system
12307 set sys/statfs.h i_sysstatfs
12308 eval $inhdr
12309
12310
12311 echo " "
12312 echo "Checking to see if your system supports struct statfs..." >&4
12313 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
12314 eval $hasstruct
12315 case "$d_statfs_s" in
12316 "$define")      echo "Yes, it does."   ;;
12317 *)              echo "No, it doesn't." ;;
12318 esac
12319
12320
12321
12322 : see if struct statfs knows about f_flags
12323 case "$d_statfs_s" in
12324 define) 
12325         echo " "
12326         echo "Checking to see if your struct statfs has f_flags field..." >&4
12327         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
12328         eval $hasfield
12329         ;;
12330 *)      val="$undef"
12331         set d_statfs_f_flags
12332         eval $setvar
12333         ;;
12334 esac
12335 case "$d_statfs_f_flags" in
12336 "$define")      echo "Yes, it does."   ;;
12337 *)              echo "No, it doesn't." ;;
12338 esac
12339
12340 : see if _ptr and _cnt from stdio act std
12341 echo " "
12342
12343 if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12344         echo "(Looks like you have stdio.h from BSD.)"
12345         case "$stdio_ptr" in
12346         '') stdio_ptr='((fp)->_p)'
12347                 ptr_lval=$define
12348                 ;;
12349         *)      ptr_lval=$d_stdio_ptr_lval;;
12350         esac
12351         case "$stdio_cnt" in
12352         '') stdio_cnt='((fp)->_r)'
12353                 cnt_lval=$define
12354                 ;;
12355         *)      cnt_lval=$d_stdio_cnt_lval;;
12356         esac
12357         case "$stdio_base" in
12358         '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
12359         esac
12360         case "$stdio_bufsiz" in
12361         '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
12362         esac
12363 elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
12364         echo "(Looks like you have stdio.h from Linux.)"
12365         case "$stdio_ptr" in
12366         '') stdio_ptr='((fp)->_IO_read_ptr)'
12367                 ptr_lval=$define
12368                 ;;
12369         *)      ptr_lval=$d_stdio_ptr_lval;;
12370         esac
12371         case "$stdio_cnt" in
12372         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
12373                 cnt_lval=$undef
12374                 ;;
12375         *)      cnt_lval=$d_stdio_cnt_lval;;
12376         esac
12377         case "$stdio_base" in
12378         '') stdio_base='((fp)->_IO_read_base)';;
12379         esac
12380         case "$stdio_bufsiz" in
12381         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
12382         esac
12383 else
12384         case "$stdio_ptr" in
12385         '') stdio_ptr='((fp)->_ptr)'
12386                 ptr_lval=$define
12387                 ;;
12388         *)      ptr_lval=$d_stdio_ptr_lval;;
12389         esac
12390         case "$stdio_cnt" in
12391         '') stdio_cnt='((fp)->_cnt)'
12392                 cnt_lval=$define
12393                 ;;
12394         *)      cnt_lval=$d_stdio_cnt_lval;;
12395         esac
12396         case "$stdio_base" in
12397         '') stdio_base='((fp)->_base)';;
12398         esac
12399         case "$stdio_bufsiz" in
12400         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
12401         esac
12402 fi
12403
12404 : test whether _ptr and _cnt really work
12405 echo "Checking how std your stdio is..." >&4
12406 $cat >try.c <<EOP
12407 #include <stdio.h>
12408 #define FILE_ptr(fp)    $stdio_ptr
12409 #define FILE_cnt(fp)    $stdio_cnt
12410 int main() {
12411         FILE *fp = fopen("try.c", "r");
12412         char c = getc(fp);
12413         if (
12414                 18 <= FILE_cnt(fp) &&
12415                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12416         )
12417                 exit(0);
12418         exit(1);
12419 }
12420 EOP
12421 val="$undef"
12422 set try
12423 if eval $compile && $to try.c; then
12424         if $run ./try; then
12425                 echo "Your stdio acts pretty std."
12426                 val="$define"
12427         else
12428                 echo "Your stdio isn't very std."
12429         fi
12430 else
12431         echo "Your stdio doesn't appear very std."
12432 fi
12433 $rm -f try.c try
12434 set d_stdstdio
12435 eval $setvar
12436
12437 : Can _ptr be used as an lvalue?
12438 case "$d_stdstdio$ptr_lval" in
12439 $define$define) val=$define ;;
12440 *) val=$undef ;;
12441 esac
12442 set d_stdio_ptr_lval
12443 eval $setvar
12444
12445 : Can _cnt be used as an lvalue?
12446 case "$d_stdstdio$cnt_lval" in
12447 $define$define) val=$define ;;
12448 *) val=$undef ;;
12449 esac
12450 set d_stdio_cnt_lval
12451 eval $setvar
12452
12453
12454 : test whether setting _ptr sets _cnt as a side effect
12455 d_stdio_ptr_lval_sets_cnt="$undef"
12456 d_stdio_ptr_lval_nochange_cnt="$undef"
12457 case "$d_stdio_ptr_lval$d_stdstdio" in
12458 $define$define)
12459         echo "Checking to see what happens if we set the stdio ptr..." >&4
12460 $cat >try.c <<EOP
12461 #include <stdio.h>
12462 /* Can we scream? */
12463 /* Eat dust sed :-) */
12464 /* In the buffer space, no one can hear you scream. */
12465 #define FILE_ptr(fp)    $stdio_ptr
12466 #define FILE_cnt(fp)    $stdio_cnt
12467 #include <sys/types.h>
12468 int main() {
12469         FILE *fp = fopen("try.c", "r");
12470         int c;
12471         char *ptr;
12472         size_t cnt;
12473         if (!fp) {
12474             puts("Fail even to read");
12475             exit(1);
12476         }
12477         c = getc(fp); /* Read away the first # */
12478         if (c == EOF) {
12479             puts("Fail even to read");
12480             exit(1);
12481         }
12482         if (!(
12483                 18 <= FILE_cnt(fp) &&
12484                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12485         )) {
12486                 puts("Fail even to read");
12487                 exit (1);
12488         }
12489         ptr = (char*) FILE_ptr(fp);
12490         cnt = (size_t)FILE_cnt(fp);
12491
12492         FILE_ptr(fp) += 42;
12493
12494         if ((char*)FILE_ptr(fp) != (ptr + 42)) {
12495                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
12496                 exit (1);
12497         }
12498         if (FILE_cnt(fp) <= 20) {
12499                 printf ("Fail (<20 chars to test)");
12500                 exit (1);
12501         }
12502         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
12503                 puts("Fail compare");
12504                 exit (1);
12505         }
12506         if (cnt == FILE_cnt(fp)) {
12507                 puts("Pass_unchanged");
12508                 exit (0);
12509         }       
12510         if (FILE_cnt(fp) == (cnt - 42)) {
12511                 puts("Pass_changed");
12512                 exit (0);
12513         }
12514         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
12515         return 1;
12516
12517 }
12518 EOP
12519         set try
12520         if eval $compile && $to try.c; then
12521                 case `$run ./try` in
12522                 Pass_changed)
12523                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
12524                         d_stdio_ptr_lval_sets_cnt="$define" ;;
12525                 Pass_unchanged)
12526                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
12527                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
12528                 Fail*)
12529                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
12530                 *)
12531                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
12532         esac
12533         else
12534                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
12535         fi
12536         $rm -f try.c try
12537         ;;
12538 esac
12539
12540 : see if _base is also standard
12541 val="$undef"
12542 case "$d_stdstdio" in
12543 $define)
12544         $cat >try.c <<EOP
12545 #include <stdio.h>
12546 #define FILE_base(fp)   $stdio_base
12547 #define FILE_bufsiz(fp) $stdio_bufsiz
12548 int main() {
12549         FILE *fp = fopen("try.c", "r");
12550         char c = getc(fp);
12551         if (
12552                 19 <= FILE_bufsiz(fp) &&
12553                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
12554         )
12555                 exit(0);
12556         exit(1);
12557 }
12558 EOP
12559         set try
12560         if eval $compile && $to try.c; then
12561                 if $run ./try; then
12562                         echo "And its _base field acts std."
12563                         val="$define"
12564                 else
12565                         echo "But its _base field isn't std."
12566                 fi
12567         else
12568                 echo "However, it seems to be lacking the _base field."
12569         fi
12570         $rm -f try.c try
12571         ;;
12572 esac
12573 set d_stdiobase
12574 eval $setvar
12575
12576 $cat >&4 <<EOM
12577 Checking how to access stdio streams by file descriptor number...
12578 EOM
12579 case "$stdio_stream_array" in
12580 '')     $cat >try.c <<EOCP
12581 #include <stdio.h>
12582 int main() {
12583   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
12584     printf("yes\n");
12585 }
12586 EOCP
12587         for s in _iob __iob __sF
12588         do
12589                 set try -DSTDIO_STREAM_ARRAY=$s
12590                 if eval $compile; then
12591                         case "`$run ./try`" in
12592                         yes)    stdio_stream_array=$s; break ;;
12593                         esac
12594                 fi
12595         done
12596         $rm -f try.* try$exe_ext
12597 esac
12598 case "$stdio_stream_array" in
12599 '')     $cat >&4 <<EOM
12600 I can't figure out how to access stdio streams by file descriptor number.
12601 EOM
12602         d_stdio_stream_array="$undef"
12603         ;;
12604 *)      $cat >&4 <<EOM
12605 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
12606 EOM
12607         d_stdio_stream_array="$define"
12608         ;;
12609 esac
12610
12611 : see if strcoll exists
12612 set strcoll d_strcoll
12613 eval $inlibc
12614
12615 : check for structure copying
12616 echo " "
12617 echo "Checking to see if your C compiler can copy structs..." >&4
12618 $cat >try.c <<'EOCP'
12619 int main()
12620 {
12621         struct blurfl {
12622                 int dyick;
12623         } foo, bar;
12624
12625         foo = bar;
12626 }
12627 EOCP
12628 if $cc -c try.c >/dev/null 2>&1 ; then
12629         val="$define"
12630         echo "Yup, it can."
12631 else
12632         val="$undef"
12633         echo "Nope, it can't."
12634 fi
12635 set d_strctcpy
12636 eval $setvar
12637 $rm -f try.*
12638
12639 : see if strerror and/or sys_errlist[] exist
12640 echo " "
12641 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
12642     if set strerror val -f d_strerror; eval $csym; $val; then
12643                 echo 'strerror() found.' >&4
12644                 d_strerror="$define"
12645                 d_strerrm='strerror(e)'
12646                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
12647                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
12648                         d_syserrlst="$define"
12649                 else
12650                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
12651                         d_syserrlst="$undef"
12652                 fi
12653     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
12654                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
12655                 echo 'strerror() found in string header.' >&4
12656                 d_strerror="$define"
12657                 d_strerrm='strerror(e)'
12658                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
12659                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
12660                                 d_syserrlst="$define"
12661                 else
12662                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
12663                         d_syserrlst="$undef"
12664                 fi
12665     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
12666                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
12667                 d_strerror="$undef"
12668                 d_syserrlst="$define"
12669                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
12670     else
12671                 echo 'strerror() and sys_errlist[] NOT found.' >&4
12672                 d_strerror="$undef"
12673                 d_syserrlst="$undef"
12674                 d_strerrm='"unknown"'
12675     fi
12676 fi
12677
12678 : see if strftime exists
12679 set strftime d_strftime
12680 eval $inlibc
12681
12682 : see if strtod exists
12683 set strtod d_strtod
12684 eval $inlibc
12685
12686 : see if strtol exists
12687 set strtol d_strtol
12688 eval $inlibc
12689
12690 : see if strtold exists
12691 set strtold d_strtold
12692 eval $inlibc
12693
12694 : see if strtoll exists
12695 set strtoll d_strtoll
12696 eval $inlibc
12697
12698 case "$d_longlong-$d_strtoll" in
12699 "$define-$define")
12700         $cat <<EOM
12701 Checking whether your strtoll() works okay...
12702 EOM
12703         $cat >try.c <<'EOCP'
12704 #include <errno.h>
12705 #ifdef __hpux
12706 #define strtoll __strtoll
12707 #endif
12708 #ifdef __EMX__
12709 #define strtoll _strtoll
12710 #endif
12711 #include <stdio.h>
12712 extern long long int strtoll(char *s, char **, int); 
12713 static int bad = 0;
12714 int check(char *s, long long ell, int een) {
12715         long long gll;
12716         errno = 0;
12717         gll = strtoll(s, 0, 10);
12718         if (!((gll == ell) && (errno == een)))
12719                 bad++;
12720 }
12721 int main() {
12722         check(" 1",                                      1LL, 0);
12723         check(" 0",                                      0LL, 0);
12724         check("-1",                                     -1LL, 0);
12725         check("-9223372036854775808", -9223372036854775808LL, 0);
12726         check("-9223372036854775808", -9223372036854775808LL, 0);
12727         check(" 9223372036854775807",  9223372036854775807LL, 0);
12728         check("-9223372036854775808", -9223372036854775808LL, 0);
12729         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
12730         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
12731         if (!bad)
12732                 printf("ok\n");
12733 }
12734 EOCP
12735         set try
12736         if eval $compile; then
12737                 yyy=`$run ./try`
12738                 case "$yyy" in
12739                 ok) echo "Your strtoll() seems to be working okay." ;;
12740                 *) cat <<EOM >&4
12741 Your strtoll() doesn't seem to be working okay.
12742 EOM
12743                    d_strtoll="$undef"
12744                    ;;
12745                 esac
12746         else
12747                 echo "(I can't seem to compile the test program--assuming it doesn't)"
12748                 d_strtoll="$undef"
12749         fi
12750         ;;
12751 esac
12752
12753 : see if strtoq exists
12754 set strtoq d_strtoq
12755 eval $inlibc
12756
12757 : see if strtoul exists
12758 set strtoul d_strtoul
12759 eval $inlibc
12760
12761 case "$d_strtoul" in
12762 "$define")
12763         $cat <<EOM
12764 Checking whether your strtoul() works okay...
12765 EOM
12766         $cat >try.c <<'EOCP'
12767 #include <errno.h>
12768 #include <stdio.h>
12769 extern unsigned long int strtoul(char *s, char **, int); 
12770 static int bad = 0;
12771 void check(char *s, unsigned long eul, int een) {
12772         unsigned long gul;
12773         errno = 0;
12774         gul = strtoul(s, 0, 10);
12775         if (!((gul == eul) && (errno == een)))
12776                 bad++;
12777 }
12778 int main() {
12779         check(" 1", 1L, 0);
12780         check(" 0", 0L, 0);
12781 EOCP
12782         case "$longsize" in
12783         8)
12784             $cat >>try.c <<'EOCP'
12785         check("18446744073709551615", 18446744073709551615UL, 0);
12786         check("18446744073709551616", 18446744073709551615UL, ERANGE);
12787 #if 0 /* strtoul() for /^-/ strings is undefined. */
12788         check("-1", 18446744073709551615UL, 0);
12789         check("-18446744073709551614", 2, 0);
12790         check("-18446744073709551615", 1, 0);
12791         check("-18446744073709551616", 18446744073709551615UL, ERANGE);
12792         check("-18446744073709551617", 18446744073709551615UL, ERANGE);
12793 #endif
12794 EOCP
12795                 ;;
12796         4)
12797                     $cat >>try.c <<'EOCP'
12798         check("4294967295", 4294967295UL, 0);
12799         check("4294967296", 4294967295UL, ERANGE);
12800 #if 0 /* strtoul() for /^-/ strings is undefined. */
12801         check("-1", 4294967295UL, 0);
12802         check("-4294967294", 2, 0);
12803         check("-4294967295", 1, 0);
12804         check("-4294967296", 4294967295UL, ERANGE);
12805         check("-4294967297", 4294967295UL, ERANGE);
12806 #endif
12807 EOCP
12808                 ;;
12809         *)
12810 : Should we write these tests to be more portable by sprintf-ing
12811 : ~0 and then manipulating that char string as input for strtol?
12812                 ;;
12813         esac
12814         $cat >>try.c <<'EOCP'
12815         if (!bad)
12816                 printf("ok\n");
12817         return 0;
12818 }
12819 EOCP
12820         set try
12821         if eval $compile; then
12822                 case "`$run ./try`" in
12823                 ok) echo "Your strtoul() seems to be working okay." ;;
12824                 *) cat <<EOM >&4
12825 Your strtoul() doesn't seem to be working okay.
12826 EOM
12827                    d_strtoul="$undef"
12828                    ;;
12829                 esac
12830         fi
12831         ;;
12832 esac
12833
12834 : see if strtoull exists
12835 set strtoull d_strtoull
12836 eval $inlibc
12837
12838 case "$d_longlong-$d_strtoull" in
12839 "$define-$define")
12840         $cat <<EOM
12841 Checking whether your strtoull() works okay...
12842 EOM
12843         $cat >try.c <<'EOCP'
12844 #include <errno.h>
12845 #ifdef __hpux
12846 #define strtoull __strtoull
12847 #endif
12848 #include <stdio.h>
12849 extern unsigned long long int strtoull(char *s, char **, int); 
12850 static int bad = 0;
12851 int check(char *s, long long eull, int een) {
12852         long long gull;
12853         errno = 0;
12854         gull = strtoull(s, 0, 10);
12855         if (!((gull == eull) && (errno == een)))
12856                 bad++;
12857 }
12858 int main() {
12859         check(" 1",                                        1LL, 0);
12860         check(" 0",                                        0LL, 0);
12861         check("18446744073709551615",  18446744073709551615ULL, 0);
12862         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
12863 #if 0 /* strtoull() for /^-/ strings is undefined. */
12864         check("-1",                    18446744073709551615ULL, 0);
12865         check("-18446744073709551614",                     2LL, 0);
12866         check("-18446744073709551615",                     1LL, 0);
12867         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
12868         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
12869 #endif
12870         if (!bad)
12871                 printf("ok\n");
12872 }
12873 EOCP
12874         set try
12875         if eval $compile; then
12876                 case "`$run ./try`" in
12877                 ok) echo "Your strtoull() seems to be working okay." ;;
12878                 *) cat <<EOM >&4
12879 Your strtoull() doesn't seem to be working okay.
12880 EOM
12881                    d_strtoull="$undef"
12882                    ;;
12883                 esac
12884         fi
12885         ;;
12886 esac
12887
12888 : see if strtouq exists
12889 set strtouq d_strtouq
12890 eval $inlibc
12891
12892 case "$d_strtouq" in
12893 "$define")
12894         $cat <<EOM
12895 Checking whether your strtouq() works okay...
12896 EOM
12897         $cat >try.c <<'EOCP'
12898 #include <errno.h>
12899 #include <stdio.h>
12900 extern unsigned long long int strtouq(char *s, char **, int); 
12901 static int bad = 0;
12902 void check(char *s, unsigned long long eull, int een) {
12903         unsigned long long gull;
12904         errno = 0;
12905         gull = strtouq(s, 0, 10);
12906         if (!((gull == eull) && (errno == een)))
12907                 bad++;
12908 }
12909 int main() {
12910         check(" 1",                                        1LL, 0);
12911         check(" 0",                                        0LL, 0);
12912         check("18446744073709551615",  18446744073709551615ULL, 0);
12913         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
12914 #if 0 /* strtouq() for /^-/ strings is undefined. */
12915         check("-1",                    18446744073709551615ULL, 0);
12916         check("-18446744073709551614",                     2LL, 0);
12917         check("-18446744073709551615",                     1LL, 0);
12918         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
12919         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
12920 #endif
12921         if (!bad)
12922                 printf("ok\n");
12923         return 0;
12924 }
12925 EOCP
12926         set try
12927         if eval $compile; then
12928                 case "`$run ./try`" in
12929                 ok) echo "Your strtouq() seems to be working okay." ;;
12930                 *) cat <<EOM >&4
12931 Your strtouq() doesn't seem to be working okay.
12932 EOM
12933                    d_strtouq="$undef"
12934                    ;;
12935                 esac
12936         fi
12937         ;;
12938 esac
12939
12940 : see if strxfrm exists
12941 set strxfrm d_strxfrm
12942 eval $inlibc
12943
12944 : see if symlink exists
12945 set symlink d_symlink
12946 eval $inlibc
12947
12948 : see if syscall exists
12949 set syscall d_syscall
12950 eval $inlibc
12951
12952 : see if prototype for syscall is available
12953 echo " "
12954 set d_syscallproto syscall $i_unistd unistd.h
12955 eval $hasproto
12956
12957 : see if sysconf exists
12958 set sysconf d_sysconf
12959 eval $inlibc
12960
12961 : see if system exists
12962 set system d_system
12963 eval $inlibc
12964
12965 : see if tcgetpgrp exists
12966 set tcgetpgrp d_tcgetpgrp
12967 eval $inlibc
12968
12969 : see if tcsetpgrp exists
12970 set tcsetpgrp d_tcsetpgrp
12971 eval $inlibc
12972
12973 : see if prototype for telldir is available
12974 echo " "
12975 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
12976 eval $hasproto
12977
12978 : see if this is a sys/times.h system
12979 set sys/times.h i_systimes
12980 eval $inhdr
12981
12982 : see if times exists
12983 echo " "
12984 if set times val -f d_times; eval $csym; $val; then
12985         echo 'times() found.' >&4
12986         d_times="$define"
12987         inc=''
12988         case "$i_systimes" in
12989         "$define") inc='sys/times.h';;
12990         esac
12991         rp="What is the type returned by times() on this system?"
12992         set clock_t clocktype long stdio.h sys/types.h $inc
12993         eval $typedef_ask
12994 else
12995         echo 'times() NOT found, hope that will do.' >&4
12996         d_times="$undef"
12997         clocktype='int'
12998 fi
12999
13000 : see if truncate exists
13001 set truncate d_truncate
13002 eval $inlibc
13003
13004 : see if tzname[] exists
13005 echo " "
13006 if set tzname val -a d_tzname; eval $csym; $val; then
13007         val="$define"
13008         echo 'tzname[] found.' >&4
13009 else
13010         val="$undef"
13011         echo 'tzname[] NOT found.' >&4
13012 fi
13013 set d_tzname
13014 eval $setvar
13015
13016 case "$osname" in
13017 next|rhapsody|darwin) multiarch="$define" ;;
13018 esac
13019 case "$multiarch" in
13020 ''|[nN]*) multiarch="$undef" ;;
13021 esac
13022
13023 : check for ordering of bytes in a long
13024 echo " "
13025 case "$usecrosscompile$multiarch" in
13026 *$define*)
13027         $cat <<EOM
13028 You seem to be either cross-compiling or doing a multiarchitecture build,
13029 skipping the byteorder check.
13030
13031 EOM
13032         byteorder='ffff'
13033         ;;
13034 *)
13035         case "$byteorder" in
13036         '')
13037                 $cat <<'EOM'
13038 In the following, larger digits indicate more significance.  A big-endian
13039 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
13040 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
13041 machines may have weird orders like 3412.  A Cray will report 87654321,
13042 an Alpha will report 12345678. If the test program works the default is
13043 probably right.
13044 I'm now running the test program...
13045 EOM
13046                 $cat >try.c <<'EOCP'
13047 #include <stdio.h>
13048 int main()
13049 {
13050         int i;
13051         union {
13052                 unsigned long l;
13053                 char c[sizeof(long)];
13054         } u;
13055
13056         if (sizeof(long) > 4)
13057                 u.l = (0x08070605L << 32) | 0x04030201L;
13058         else
13059                 u.l = 0x04030201L;
13060         for (i = 0; i < sizeof(long); i++)
13061                 printf("%c", u.c[i]+'0');
13062         printf("\n");
13063         exit(0);
13064 }
13065 EOCP
13066                 xxx_prompt=y
13067                 set try
13068                 if eval $compile && ./try > /dev/null; then
13069                         dflt=`$run ./try`
13070                         case "$dflt" in
13071                         [1-4][1-4][1-4][1-4]|12345678|87654321)
13072                                 echo "(The test program ran ok.)"
13073                                 echo "byteorder=$dflt"
13074                                 xxx_prompt=n
13075                         ;;
13076                         ????|????????) echo "(The test program ran ok.)" ;;
13077                         *) echo "(The test program didn't run right for some reason.)" ;;
13078                         esac
13079                 else
13080                         dflt='4321'
13081                         cat <<'EOM'
13082 (I can't seem to compile the test program.  Guessing big-endian...)
13083 EOM
13084                 fi
13085                 case "$xxx_prompt" in
13086                 y)
13087                         rp="What is the order of bytes in a long?"
13088                         . ./myread
13089                         byteorder="$ans"
13090                         ;;
13091                 *)      byteorder=$dflt
13092                         ;;
13093                 esac
13094                 ;;
13095         esac
13096         $rm -f try.c try
13097         ;;
13098 esac
13099
13100
13101 $cat <<EOM
13102
13103 Checking to see whether you can access character data unalignedly...
13104 EOM
13105 $cat >try.c <<EOCP
13106 #include <stdio.h>
13107 #define U32 $u32type
13108 #define BYTEORDER $byteorder
13109 int main() {
13110 #if BYTEORDER == 0x1234 || BYTEORDER == 0x4321
13111     U8 buf[] = "\0\0\0\1\0\0\0\0";
13112     U32 *up;
13113     int i;
13114
13115     if (sizeof(U32) != 4) {
13116         printf("sizeof(U32) is not 4, but %d\n", sizeof(U32));
13117         exit(1);
13118     }
13119
13120     fflush(stdout);
13121
13122     for (i = 0; i < 4; i++) {
13123         up = (U32*)(buf + i);
13124         if (! ((*up == 1 << (8*i)) ||   /* big-endian */
13125                (*up == 1 << (8*(3-i)))  /* little-endian */
13126               )
13127            )
13128         {
13129             printf("read failed (%x)\n", *up);
13130             exit(2);
13131         }
13132     }
13133
13134     /* write test */
13135     for (i = 0; i < 4; i++) {
13136         up = (U32*)(buf + i);
13137         *up = 0xBeef;
13138         if (*up != 0xBeef) {
13139             printf("write failed (%x)\n", *up);
13140             exit(3);
13141         }
13142     }
13143
13144     exit(0);
13145 #else
13146     printf("1\n");
13147     exit(1);
13148 #endif
13149     return 0;
13150 }
13151 EOCP
13152 set try
13153 if eval $compile_ok; then
13154         echo "(Testing for character data alignment may dump core.)" >&4
13155         $run ./try 2>&1 >/dev/null
13156         case "$?" in
13157         0)      cat >&4 <<EOM
13158 You can access character data pretty unalignedly.
13159 EOM
13160                 d_u32align="$undef"
13161                 ;;
13162         *)      cat >&4 <<EOM
13163 It seems that you must access character data in an aligned manner.
13164 EOM
13165                 d_u32align="$define"
13166                 ;;
13167         esac
13168         $rm -f core core.try.* try.core
13169 else
13170         rp='Can you access character data at unaligned addresses?'
13171         dflt='n'
13172         . ./myread
13173         case "$ans" in
13174         [yY]*)  d_u32align="$undef"  ;;
13175         *)      d_u32align="$define" ;;
13176         esac
13177 fi
13178
13179 : see if ualarm exists
13180 set ualarm d_ualarm
13181 eval $inlibc
13182
13183 : see if umask exists
13184 set umask d_umask
13185 eval $inlibc
13186
13187 : see if usleep exists
13188 set usleep d_usleep
13189 eval $inlibc
13190
13191 : see if prototype for usleep is available
13192 echo " "
13193 set d_usleepproto usleep $i_unistd unistd.h
13194 eval $hasproto
13195
13196 : see if ustat exists
13197 set ustat d_ustat
13198 eval $inlibc
13199
13200 : backward compatibility for d_hvfork
13201 if test X$d_hvfork != X; then
13202         d_vfork="$d_hvfork"
13203         d_hvfork=''
13204 fi
13205 : see if there is a vfork
13206 val=''
13207 set vfork val
13208 eval $inlibc
13209
13210 : Ok, but do we want to use it. vfork is reportedly unreliable in 
13211 : perl on Solaris 2.x, and probably elsewhere.
13212 case "$val" in
13213 $define)
13214         echo " "
13215         case "$usevfork" in
13216         false) dflt='n';;
13217         *) dflt='y';;
13218         esac
13219         cat <<'EOM'
13220  
13221 Perl can only use a vfork() that doesn't suffer from strict
13222 restrictions on calling functions or modifying global data in
13223 the child.  For example, glibc-2.1 contains such a vfork()
13224 that is unsuitable.  If your system provides a proper fork()
13225 call, chances are that you do NOT want perl to use vfork().
13226
13227 EOM
13228         rp="Do you still want to use vfork()?"
13229         . ./myread
13230         case "$ans" in
13231         y|Y) ;;
13232         *)
13233                 echo "Ok, we won't use vfork()."
13234                 val="$undef"
13235                 ;;
13236         esac
13237         ;;
13238 esac
13239 set d_vfork
13240 eval $setvar
13241 case "$d_vfork" in
13242 $define) usevfork='true';;
13243 *) usevfork='false';;
13244 esac
13245
13246 : see if this is an sysdir system
13247 set sys/dir.h i_sysdir
13248 eval $inhdr
13249
13250 : see if this is an sysndir system
13251 set sys/ndir.h i_sysndir
13252 eval $inhdr
13253
13254 : see if closedir exists
13255 set closedir d_closedir
13256 eval $inlibc
13257
13258 case "$d_closedir" in
13259 "$define")
13260         echo " "
13261         echo "Checking whether closedir() returns a status..." >&4
13262         cat > try.c <<EOM
13263 #$i_dirent I_DIRENT             /**/
13264 #$i_sysdir I_SYS_DIR            /**/
13265 #$i_sysndir I_SYS_NDIR          /**/
13266 #$i_systypes I_SYS_TYPES        /**/
13267
13268 #if defined(I_SYS_TYPES)
13269 #include <sys/types.h>
13270 #endif
13271 #if defined(I_DIRENT)
13272 #include <dirent.h>
13273 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
13274 #include <sys/dir.h>
13275 #endif
13276 #else
13277 #ifdef I_SYS_NDIR
13278 #include <sys/ndir.h>
13279 #else
13280 #ifdef I_SYS_DIR
13281 #ifdef hp9000s500
13282 #include <ndir.h>       /* may be wrong in the future */
13283 #else
13284 #include <sys/dir.h>
13285 #endif
13286 #endif
13287 #endif
13288 #endif 
13289 int main() { return closedir(opendir(".")); }
13290 EOM
13291         set try
13292         if eval $compile_ok; then
13293                 if $run ./try > /dev/null 2>&1 ; then
13294                         echo "Yes, it does."
13295                         val="$undef"
13296                 else
13297                         echo "No, it doesn't."
13298                         val="$define"
13299                 fi
13300         else
13301                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13302                 val="$define"
13303         fi
13304         ;;
13305 *)
13306         val="$undef";
13307         ;;
13308 esac
13309 set d_void_closedir
13310 eval $setvar
13311 $rm -f try try.*
13312 : see if there is a wait4
13313 set wait4 d_wait4
13314 eval $inlibc
13315
13316 : see if waitpid exists
13317 set waitpid d_waitpid
13318 eval $inlibc
13319
13320 : see if wcstombs exists
13321 set wcstombs d_wcstombs
13322 eval $inlibc
13323
13324 : see if wctomb exists
13325 set wctomb d_wctomb
13326 eval $inlibc
13327
13328 : see if writev exists
13329 set writev d_writev
13330 eval $inlibc
13331
13332 : preserve RCS keywords in files with variable substitution, grrr
13333 Date='$Date'
13334 Id='$Id'
13335 Log='$Log'
13336 RCSfile='$RCSfile'
13337 Revision='$Revision'
13338
13339 : check for alignment requirements
13340 echo " "
13341 case "$usecrosscompile$multiarch" in
13342 *$define*)
13343         $cat <<EOM
13344 You seem to be either cross-compiling or doing a multiarchitecture build,
13345 skipping the memory alignment check.
13346
13347 EOM
13348         case "$alignbytes" in
13349         '') alignbytes=8 ;;
13350         esac
13351         ;;
13352 *)
13353         case "$alignbytes" in
13354         '') echo "Checking alignment constraints..." >&4
13355                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
13356                         $cat >try.c <<'EOCP'
13357 typedef long double NV;
13358 EOCP
13359                 else
13360                         $cat >try.c <<'EOCP'
13361 typedef double NV;
13362 EOCP
13363                 fi
13364                 $cat >>try.c <<'EOCP'
13365 #include <stdio.h>
13366 struct foobar {
13367         char foo;
13368         NV bar;
13369 } try_algn;
13370 int main()
13371 {
13372     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
13373     return(0);
13374 }
13375 EOCP
13376                 set try
13377                 if eval $compile_ok; then
13378                         dflt=`$run ./try`
13379                 else
13380                         dflt='8'
13381                         echo "(I can't seem to compile the test program...)"
13382                 fi
13383                 ;;
13384         *) dflt="$alignbytes"
13385                 ;;
13386         esac
13387         rp="Doubles must be aligned on a how-many-byte boundary?"
13388         . ./myread
13389         alignbytes="$ans"
13390         $rm -f try.c try
13391         ;;
13392 esac
13393
13394
13395 : set the base revision
13396 baserev=5.0
13397
13398 : how do we catenate cpp tokens here?
13399 echo " "
13400 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
13401 $cat >cpp_stuff.c <<'EOCP'
13402 #define RCAT(a,b)a/**/b
13403 #define ACAT(a,b)a ## b
13404 RCAT(Rei,ser)
13405 ACAT(Cir,cus)
13406 EOCP
13407 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
13408 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
13409         echo "Oh!  Smells like ANSI's been here." >&4
13410         echo "We can catify or stringify, separately or together!"
13411         cpp_stuff=42
13412 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
13413         echo "Ah, yes!  The good old days!" >&4
13414         echo "However, in the good old days we don't know how to stringify and"
13415         echo "catify at the same time."
13416         cpp_stuff=1
13417 else
13418         $cat >&4 <<EOM
13419 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
13420 to have to edit the values of CAT[2-5] in config.h...
13421 EOM
13422         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
13423 fi
13424 $rm -f cpp_stuff.*
13425
13426 : see if this is a db.h system
13427 set db.h i_db
13428 eval $inhdr
13429
13430 case "$i_db" in
13431 $define)
13432         : Check db version.
13433         echo " "
13434         echo "Checking Berkeley DB version ..." >&4
13435         $cat >try.c <<EOCP
13436 #$d_const HASCONST
13437 #ifndef HASCONST
13438 #define const
13439 #endif
13440 #include <sys/types.h>
13441 #include <stdio.h>
13442 #include <db.h>
13443 int main(int argc, char *argv[])
13444 {
13445 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
13446     int Major, Minor, Patch ;
13447     unsigned long Version ;
13448     (void)db_version(&Major, &Minor, &Patch) ;
13449     if (argc == 2) {
13450         printf("%d %d %d %d %d %d\n",
13451                DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
13452                Major, Minor, Patch);
13453         exit(0);
13454     }
13455     printf("You have Berkeley DB Version 2 or greater.\n");
13456
13457     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
13458                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
13459     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
13460                 Major, Minor, Patch) ;
13461
13462     /* check that db.h & libdb are compatible */
13463     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
13464         printf("db.h and libdb are incompatible.\n") ;
13465         exit(3);        
13466     }
13467
13468     printf("db.h and libdb are compatible.\n") ;
13469
13470     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
13471                 + DB_VERSION_PATCH ;
13472
13473     /* needs to be >= 2.3.4 */
13474     if (Version < 2003004) {
13475     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
13476         printf("Perl needs Berkeley DB 2.3.4 or greater.\n") ;
13477         exit(2);        
13478     }
13479
13480     exit(0);
13481 #else
13482 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
13483     if (argc == 2) {
13484         printf("1 0 0\n");
13485         exit(0);
13486     }
13487     printf("You have Berkeley DB Version 1.\n");
13488     exit(0);    /* DB version < 2: the coast is clear. */
13489 #else
13490     exit(1);    /* <db.h> not Berkeley DB? */
13491 #endif
13492 #endif
13493 }
13494 EOCP
13495         set try
13496         if eval $compile_ok && $run ./try; then
13497                 echo 'Looks OK.' >&4
13498                 set `$run ./try 1`
13499                 db_version_major=$1
13500                 db_version_minor=$2
13501                 db_version_patch=$3
13502         else
13503                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
13504                 i_db=$undef
13505                 case " $libs " in
13506                 *"-ldb "*)
13507                         : Remove db from list of libraries to use
13508                         echo "Removing unusable -ldb from library list" >&4
13509                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
13510                         shift
13511                         libs="$*"
13512                         echo "libs = $libs" >&4
13513                         ;;
13514                 esac
13515         fi
13516         $rm -f try.*
13517         ;;
13518 esac
13519
13520 case "$i_db" in
13521 define)
13522         : Check the return type needed for hash 
13523         echo " "
13524         echo "Checking return type needed for hash for Berkeley DB ..." >&4
13525         $cat >try.c <<EOCP
13526 #$d_const HASCONST
13527 #ifndef HASCONST
13528 #define const
13529 #endif
13530 #include <sys/types.h>
13531 #include <db.h>
13532
13533 #ifndef DB_VERSION_MAJOR
13534 u_int32_t hash_cb (ptr, size)
13535 const void *ptr;
13536 size_t size;
13537 {
13538 }
13539 HASHINFO info;
13540 int main()
13541 {
13542         info.hash = hash_cb;
13543 }
13544 #endif
13545 EOCP
13546         if $cc $ccflags -c try.c >try.out 2>&1 ; then
13547                 if $contains warning try.out >>/dev/null 2>&1 ; then
13548                         db_hashtype='int'
13549                 else
13550                         db_hashtype='u_int32_t'
13551                 fi
13552         else
13553                 : XXX Maybe we should just give up here.
13554                 db_hashtype=u_int32_t
13555                 $cat try.out >&4
13556                 echo "Help:  I can't seem to compile the db test program." >&4
13557                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
13558         fi
13559         $rm -f try.*
13560         echo "Your version of Berkeley DB uses $db_hashtype for hash."
13561         ;;
13562 *)      db_hashtype=u_int32_t
13563         ;;
13564 esac
13565 case "$i_db" in
13566 define)
13567         : Check the return type needed for prefix 
13568         echo " "
13569         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
13570         cat >try.c <<EOCP
13571 #$d_const HASCONST
13572 #ifndef HASCONST
13573 #define const
13574 #endif
13575 #include <sys/types.h>
13576 #include <db.h>
13577
13578 #ifndef DB_VERSION_MAJOR
13579 size_t prefix_cb (key1, key2)
13580 const DBT *key1;
13581 const DBT *key2;
13582 {
13583 }
13584 BTREEINFO info;
13585 int main()
13586 {
13587         info.prefix = prefix_cb;
13588 }
13589 #endif
13590 EOCP
13591         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
13592                 if $contains warning try.out >>/dev/null 2>&1 ; then
13593                         db_prefixtype='int'
13594                 else
13595                         db_prefixtype='size_t'
13596                 fi
13597         else
13598                 db_prefixtype='size_t'
13599                 : XXX Maybe we should just give up here.
13600                 $cat try.out >&4
13601                 echo "Help:  I can't seem to compile the db test program." >&4
13602                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
13603         fi
13604         $rm -f try.*
13605         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
13606         ;;
13607 *)      db_prefixtype='size_t'
13608         ;;
13609 esac
13610
13611
13612 : How can we generate normalized random numbers ?
13613 echo " "
13614 echo "Looking for a random number function..." >&4
13615 case "$randfunc" in
13616 '')
13617         if set drand48 val -f; eval $csym; $val; then
13618                 dflt="drand48"
13619                 echo "Good, found drand48()." >&4
13620         elif set random val -f; eval $csym; $val; then
13621                 dflt="random"
13622                 echo "OK, found random()." >&4
13623         else
13624                 dflt="rand"
13625                 echo "Yick, looks like I have to use rand()." >&4
13626         fi
13627         echo " "
13628         ;;
13629 *)
13630         dflt="$randfunc"
13631         ;;
13632 esac
13633 cont=true
13634
13635 case "$ccflags" in
13636 *-Dmy_rand=*|*-Dmy_srand=*)
13637         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
13638         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
13639         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
13640         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
13641         ;;
13642 esac
13643
13644 while $test "$cont"; do
13645         rp="Use which function to generate random numbers?"
13646         . ./myread
13647         if $test "$ans" = "$dflt"; then
13648                 : null
13649         else
13650                 randbits=''
13651         fi
13652         randfunc="$ans"
13653         if set $ans val -f; eval $csym; $val; then
13654                 cont=''
13655         else
13656                 dflt=y
13657                 rp="I cannot find function $ans. Use that name anyway?"
13658                 . ./myread
13659                 dflt=rand
13660                 case "$ans" in
13661                         [yY]*) cont='';;
13662                 esac
13663         fi
13664         case "$cont" in
13665         '')
13666                 case "$randfunc" in
13667                 drand48)
13668                         drand01="drand48()"
13669                         seedfunc="srand48"
13670                         randbits=48
13671                         randseedtype=long
13672                         ;;
13673                 rand|random)
13674                         case "$randbits" in
13675                         '')
13676 echo "Checking to see how many bits your $randfunc() function produces..." >&4
13677                                 $cat >try.c <<EOCP
13678 #$i_unistd I_UNISTD
13679 #$i_stdlib I_STDLIB
13680 #include <stdio.h>
13681 #ifdef I_UNISTD
13682 #  include <unistd.h>
13683 #endif
13684 #ifdef I_STDLIB
13685 #  include <stdlib.h>
13686 #endif
13687 int main()
13688 {
13689         register int i;
13690         register unsigned long tmp;
13691         register unsigned long max = 0L;
13692
13693         for (i = 1000; i; i--) {
13694                 tmp = (unsigned long) $randfunc();
13695                 if (tmp > max) max = tmp;
13696         }
13697         for (i = 0; max; i++)
13698                 max /= 2;
13699         printf("%d\n",i);
13700 }
13701 EOCP
13702                                 set try
13703                                 if eval $compile_ok; then
13704                                         dflt=`try`
13705                                 else
13706                                         dflt='?'
13707                                         echo "(I can't seem to compile the test program...)"
13708                                 fi
13709                                 ;;
13710                         *)
13711                                 dflt="$randbits"
13712                                 ;;
13713                         esac
13714                         rp="How many bits does your $randfunc() function produce?"
13715                         . ./myread
13716                         randbits="$ans"
13717                         $rm -f try.c try
13718                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13719                         seedfunc="s$randfunc"
13720                         randseedtype=unsigned
13721                         ;;
13722                 *)
13723                         dflt="31"
13724                         rp="How many bits does your $randfunc() function produce?"
13725                         . ./myread
13726                         randbits="$ans"
13727                         seedfunc="s$randfunc"
13728                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13729                         if set $seedfunc val -f; eval $csym; $val; then
13730                                 echo "(Using $seedfunc() to seed random generator)"
13731                         else
13732                                 echo "(Warning: no $seedfunc() to seed random generator)"
13733                                 seedfunc=rand
13734                         fi
13735                         randseedtype=unsigned
13736                         ;;
13737                 esac
13738                 ;;
13739         esac
13740 done
13741
13742 echo " "
13743 echo "Determining whether or not we are on an EBCDIC system..." >&4
13744 $cat >try.c <<'EOM'
13745 int main()
13746 {
13747   if ('M'==0xd4) return 0;
13748   return 1;
13749 }
13750 EOM
13751
13752 val=$undef
13753 set try
13754 if eval $compile_ok; then
13755         if $run ./try; then
13756                 echo "You seem to speak EBCDIC." >&4
13757                 val="$define"
13758         else
13759                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4
13760         fi
13761 else
13762         echo "I'm unable to compile the test program." >&4
13763         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
13764 fi
13765 $rm -f try try.*
13766 set ebcdic
13767 eval $setvar
13768
13769 echo " "
13770 $cat >&4 <<EOM
13771 Checking how to flush all pending stdio output...
13772 EOM
13773 # I only know how to find the first 32 possibly open files on SunOS.
13774 # See also hints/sunos_4_1.sh and util.c  --AD
13775 case "$osname" in
13776 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
13777 esac
13778 $cat >>try.c <<EOCP
13779 #include <stdio.h>
13780 #$i_unistd I_UNISTD
13781 #ifdef I_UNISTD
13782 # include <unistd.h>
13783 #endif
13784 #$d_sysconf HAS_SYSCONF
13785 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
13786 #ifdef HAS_STDIO_STREAM_ARRAY
13787 # define STDIO_STREAM_ARRAY $stdio_stream_array
13788 #endif
13789 int main() {
13790   FILE* p;
13791   unlink("try.out");
13792   p = fopen("try.out", "w");
13793 #ifdef TRY_FPUTC
13794   fputc('x', p);
13795 #else
13796 # ifdef TRY_FPRINTF
13797   fprintf(p, "x");
13798 # endif
13799 #endif
13800 #ifdef TRY_FFLUSH_NULL
13801   fflush(NULL);
13802 #endif
13803 #ifdef TRY_FFLUSH_ALL
13804   {
13805     long open_max = -1;
13806 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
13807     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
13808 # else
13809 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
13810     open_max = sysconf(_SC_OPEN_MAX);
13811 #  else
13812 #   ifdef FOPEN_MAX
13813     open_max = FOPEN_MAX;
13814 #   else
13815 #    ifdef OPEN_MAX
13816     open_max = OPEN_MAX;
13817 #    else
13818 #     ifdef _NFILE
13819     open_max = _NFILE;
13820 #     endif
13821 #    endif
13822 #   endif
13823 #  endif
13824 # endif 
13825 # ifdef HAS_STDIO_STREAM_ARRAY
13826     if (open_max > 0) {
13827       long i;
13828       for (i = 0; i < open_max; i++)
13829             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
13830                 STDIO_STREAM_ARRAY[i]._file < open_max &&
13831                 STDIO_STREAM_ARRAY[i]._flag)
13832                 fflush(&STDIO_STREAM_ARRAY[i]);
13833     }   
13834   }
13835 # endif
13836 #endif
13837   _exit(42);
13838 }
13839 EOCP
13840 : first we have to find out how _not_ to flush
13841 $to try.c
13842 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
13843     output=''
13844     set try -DTRY_FPUTC
13845     if eval $compile; then
13846             $run ./try 2>/dev/null
13847             code="$?"
13848             $from try.out
13849             if $test ! -s try.out -a "X$code" = X42; then
13850                 output=-DTRY_FPUTC
13851             fi
13852     fi
13853     case "$output" in
13854     '')
13855             set try -DTRY_FPRINTF
13856             if eval $compile; then
13857                     $run ./try 2>/dev/null
13858                     code="$?"
13859                     $from try.out
13860                     if $test ! -s try.out -a "X$code" = X42; then
13861                         output=-DTRY_FPRINTF
13862                     fi
13863             fi
13864         ;;
13865     esac
13866 fi
13867 : check for fflush NULL behaviour
13868 case "$fflushNULL" in
13869 '')     set try -DTRY_FFLUSH_NULL $output
13870         if eval $compile; then
13871                 $run ./try 2>/dev/null
13872                 code="$?"
13873                 $from try.out
13874                 if $test -s try.out -a "X$code" = X42; then
13875                         fflushNULL="`$cat try.out`"
13876                 else
13877                         if $test "X$code" != X42; then
13878                                 $cat >&4 <<EOM
13879 (If this test failed, don't worry, we'll try another method shortly.)
13880 EOM
13881                         fi
13882                 fi
13883         fi
13884         $rm -f core try.core core.try.*
13885         case "$fflushNULL" in
13886         x)      $cat >&4 <<EOM
13887 Your fflush(NULL) works okay for output streams.
13888 Let's see if it clobbers input pipes...
13889 EOM
13890 # As of mid-March 2000 all versions of Solaris appear to have a stdio
13891 # bug that improperly flushes the input end of pipes.  So we avoid the
13892 # autoflush on fork/system/exec support for now. :-(
13893 $cat >tryp.c <<EOCP
13894 #include <stdio.h>
13895 int
13896 main(int argc, char **argv)
13897 {
13898     char buf[1024];
13899     int i;
13900     char *bp = buf;
13901     while (1) {
13902         while ((i = getc(stdin)) != -1
13903                && (*bp++ = i) != '\n'
13904                && bp < &buf[1024])
13905         /* DO NOTHING */ ;
13906         *bp = '\0';
13907         fprintf(stdout, "%s", buf);
13908         fflush(NULL);
13909         if (i == -1)
13910             return 0;
13911         bp = buf;
13912     }
13913 }
13914 EOCP
13915                 fflushNULL="$define"
13916                 set tryp
13917                 if eval $compile; then
13918                     $rm -f tryp.out
13919                     $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
13920                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
13921                        $cat >&4 <<EOM
13922 fflush(NULL) seems to behave okay with input streams.
13923 EOM
13924                         fflushNULL="$define"
13925                     else
13926                         $cat >&4 <<EOM
13927 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
13928 EOM
13929                         fflushNULL="$undef"
13930                     fi
13931                 fi
13932                 $rm -f core tryp.c tryp.core core.tryp.*
13933                 ;;
13934         '')     $cat >&4 <<EOM
13935 Your fflush(NULL) isn't working (contrary to ANSI C).
13936 EOM
13937                 fflushNULL="$undef"
13938                 ;;
13939         *)      $cat >&4 <<EOM
13940 Cannot figure out whether your fflush(NULL) works or not.
13941 I'm assuming it doesn't (contrary to ANSI C).
13942 EOM
13943                 fflushNULL="$undef"
13944                 ;;
13945         esac
13946         ;;
13947 $define|true|[yY]*)
13948         fflushNULL="$define"
13949         ;;
13950 *)
13951         fflushNULL="$undef"
13952         ;;
13953 esac
13954 : check explicit looping only if NULL did not work, and if the pipe
13955 : bug does not show up on an explicit flush too
13956 case "$fflushNULL" in
13957 "$undef")
13958         $cat >tryp.c <<EOCP
13959 #include <stdio.h>
13960 int
13961 main(int argc, char **argv)
13962 {
13963     char buf[1024];
13964     int i;
13965     char *bp = buf;
13966     while (1) {
13967         while ((i = getc(stdin)) != -1
13968                && (*bp++ = i) != '\n'
13969                && bp < &buf[1024])
13970         /* DO NOTHING */ ;
13971         *bp = '\0';
13972         fprintf(stdout, "%s", buf);
13973         fflush(stdin);
13974         if (i == -1)
13975             return 0;
13976         bp = buf;
13977     }
13978 }
13979 EOCP
13980         set tryp
13981         if eval $compile; then
13982             $rm -f tryp.out
13983             $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
13984             if cmp tryp.c tryp.out >/dev/null 2>&1; then
13985                $cat >&4 <<EOM
13986 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
13987 EOM
13988                 : now check for fflushall behaviour
13989                 case "$fflushall" in
13990                 '')     set try -DTRY_FFLUSH_ALL $output
13991                         if eval $compile; then
13992                                 $cat >&4 <<EOM
13993 (Now testing the other method--but note that this also may fail.)
13994 EOM
13995                                 $run ./try 2>/dev/null
13996                                 code=$?
13997                                 $from try.out
13998                                 if $test -s try.out -a "X$code" = X42; then
13999                                         fflushall="`$cat try.out`"
14000                                 fi
14001                         fi
14002                         $rm -f core try.core core.try.*
14003                         case "$fflushall" in
14004                         x)      $cat >&4 <<EOM
14005 Whew. Flushing explicitly all the stdio streams works.
14006 EOM
14007                                 fflushall="$define"
14008                                 ;;
14009                         '')     $cat >&4 <<EOM
14010 Sigh. Flushing explicitly all the stdio streams doesn't work.
14011 EOM
14012                                 fflushall="$undef"
14013                                 ;;
14014                         *)      $cat >&4 <<EOM
14015 Cannot figure out whether flushing stdio streams explicitly works or not.
14016 I'm assuming it doesn't.
14017 EOM
14018                                 fflushall="$undef"
14019                                 ;;
14020                         esac
14021                         ;;
14022                 "$define"|true|[yY]*)
14023                         fflushall="$define"
14024                         ;;
14025                 *)
14026                         fflushall="$undef"
14027                         ;;
14028                 esac
14029             else
14030                 $cat >&4 <<EOM
14031 All is futile.  Even fflush(stdin) clobbers input pipes!
14032 EOM
14033                 fflushall="$undef"
14034             fi
14035         else
14036             fflushall="$undef"
14037         fi
14038         $rm -f core tryp.c tryp.core core.tryp.*
14039         ;;
14040 *)      fflushall="$undef"
14041         ;;
14042 esac
14043
14044 case "$fflushNULL$fflushall" in
14045 undefundef)
14046         $cat <<EOM
14047 OK, I give up.  I cannot figure out how to flush pending stdio output.
14048 We won't be flushing handles at all before fork/exec/popen.
14049 EOM
14050         ;;
14051 esac
14052 $rm -f try.* try$exe_ext
14053
14054 : Store the full pathname to the ar program for use in the C program
14055 : Respect a hint or command line value for full_ar.
14056 case "$full_ar" in
14057 '') full_ar=$ar ;;
14058 esac
14059
14060 : Store the full pathname to the sed program for use in the C program
14061 full_sed=$sed
14062
14063 : see what type gids are declared as in the kernel
14064 echo " "
14065 echo "Looking for the type for group ids returned by getgid()."
14066 set gid_t gidtype xxx stdio.h sys/types.h
14067 eval $typedef
14068 case "$gidtype" in
14069 xxx)
14070         xxx=`./findhdr sys/user.h`
14071         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
14072         case $1 in
14073         unsigned) dflt="$1 $2" ;;
14074         *) dflt="$1" ;;
14075         esac
14076         ;;
14077 *) dflt="$gidtype";;
14078 esac
14079 case "$gidtype" in
14080 gid_t) echo "gid_t found." ;;
14081 *)      rp="What is the type for group ids returned by getgid()?"
14082         . ./myread
14083         gidtype="$ans"
14084         ;;
14085 esac
14086
14087 echo " "
14088 case "$gidtype" in
14089 *_t) zzz="$gidtype"     ;;
14090 *)   zzz="gid"          ;;
14091 esac
14092 echo "Checking the size of $zzz..." >&4 
14093 cat > try.c <<EOCP
14094 #include <sys/types.h>
14095 #include <stdio.h>
14096 int main() {
14097     printf("%d\n", (int)sizeof($gidtype));
14098     exit(0);
14099 }
14100 EOCP
14101 set try
14102 if eval $compile_ok; then
14103         yyy=`$run ./try`
14104         case "$yyy" in
14105         '')     gidsize=4
14106                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
14107                 ;;
14108         *)      gidsize=$yyy
14109                 echo "Your $zzz is $gidsize bytes long."
14110                 ;;
14111         esac
14112 else
14113         gidsize=4
14114         echo "(I can't compile the test program--guessing $gidsize.)" >&4
14115 fi
14116
14117
14118 echo " "
14119 case "$gidtype" in
14120 *_t) zzz="$gidtype"     ;;
14121 *)   zzz="gid"          ;;
14122 esac
14123 echo "Checking the sign of $zzz..." >&4 
14124 cat > try.c <<EOCP
14125 #include <sys/types.h>
14126 #include <stdio.h>
14127 int main() {
14128         $gidtype foo = -1;
14129         if (foo < 0)
14130                 printf("-1\n");
14131         else
14132                 printf("1\n");
14133 }
14134 EOCP
14135 set try
14136 if eval $compile; then
14137         yyy=`$run ./try`
14138         case "$yyy" in
14139         '')     gidsign=1
14140                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14141                 ;;
14142         *)      gidsign=$yyy
14143                 case "$gidsign" in
14144                  1) echo "Your $zzz is unsigned." ;;
14145                 -1) echo "Your $zzz is signed."   ;;
14146                 esac
14147                 ;;
14148         esac
14149 else
14150         gidsign=1
14151         echo "(I can't compile the test program--guessing unsigned.)" >&4
14152 fi
14153
14154
14155 echo " "
14156
14157 if $test X"$quadtype" != X; then
14158
14159 echo "Checking how to print 64-bit integers..." >&4
14160
14161 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
14162         $cat >try.c <<'EOCP'
14163 #include <sys/types.h>
14164 #include <stdio.h>
14165 int main() {
14166   int q = 12345678901;
14167   printf("%ld\n", q);
14168 }
14169 EOCP
14170         set try
14171         if eval $compile; then
14172                 yyy=`$run ./try`
14173                 case "$yyy" in
14174                 12345678901)
14175                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
14176                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
14177                         echo "We will use %d."
14178                         ;;
14179                 esac
14180         fi
14181 fi
14182
14183 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
14184         $cat >try.c <<'EOCP'
14185 #include <sys/types.h>
14186 #include <stdio.h>
14187 int main() {
14188   long q = 12345678901;
14189   printf("%ld\n", q);
14190 }
14191 EOCP
14192         set try
14193         if eval $compile; then
14194                 yyy=`$run ./try`
14195                 case "$yyy" in
14196                 12345678901)
14197                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
14198                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
14199                         echo "We will use %ld."
14200                         ;;
14201                 esac
14202         fi
14203 fi
14204
14205 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
14206         $cat >try.c <<'EOCP'
14207 #include <sys/types.h>
14208 #include <inttypes.h>
14209 #include <stdio.h>
14210 int main() {
14211   int64_t q = 12345678901;
14212   printf("%" PRId64 "\n", q);
14213 }
14214 EOCP
14215         set try
14216         if eval $compile; then
14217                 yyy=`$run ./try`
14218                 case "$yyy" in
14219                 12345678901)
14220                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
14221                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
14222                         echo "We will use the C9X style."
14223                         ;;
14224                 esac
14225         fi
14226 fi
14227
14228 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14229         $cat >try.c <<EOCP
14230 #include <sys/types.h>
14231 #include <stdio.h>
14232 int main() {
14233   $quadtype q = 12345678901;
14234   printf("%Ld\n", q);
14235 }
14236 EOCP
14237         set try
14238         if eval $compile; then
14239                 yyy=`$run ./try`
14240                 case "$yyy" in
14241                 12345678901)
14242                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
14243                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
14244                         echo "We will use %Ld."
14245                         ;;
14246                 esac
14247         fi
14248 fi
14249
14250 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
14251         $cat >try.c <<'EOCP'
14252 #include <sys/types.h>
14253 #include <stdio.h>
14254 int main() {
14255   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
14256   printf("%lld\n", q);
14257 }
14258 EOCP
14259         set try
14260         if eval $compile; then
14261                 yyy=`$run ./try`
14262                 case "$yyy" in
14263                 12345678901)
14264                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
14265                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
14266                         echo "We will use the %lld style."
14267                         ;;
14268                 esac
14269         fi
14270 fi
14271
14272 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14273         $cat >try.c <<EOCP
14274 #include <sys/types.h>
14275 #include <stdio.h>
14276 int main() {
14277   $quadtype q = 12345678901;
14278   printf("%qd\n", q);
14279 }
14280 EOCP
14281         set try
14282         if eval $compile; then
14283                 yyy=`$run ./try`
14284                 case "$yyy" in
14285                 12345678901)
14286                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
14287                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
14288                         echo "We will use %qd."
14289                         ;;
14290                 esac
14291         fi
14292 fi
14293
14294 if $test X"$sPRId64" = X; then
14295         echo "Cannot figure out how to print 64-bit integers." >&4
14296 fi
14297
14298 $rm -f try try.*
14299
14300 fi
14301
14302 case "$sPRId64" in
14303 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
14304         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; 
14305         ;;
14306 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
14307         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; 
14308         ;;
14309 esac
14310
14311
14312 echo " "
14313 $echo "Checking the format strings to be used for Perl's internal types..." >&4
14314
14315 if $test X"$ivsize" = X8; then
14316         ivdformat="$sPRId64"
14317         uvuformat="$sPRIu64"
14318         uvoformat="$sPRIo64"
14319         uvxformat="$sPRIx64"
14320         uvXUformat="$sPRIXU64"
14321 else
14322         if $test X"$ivsize" = X"$longsize"; then
14323                 ivdformat='"ld"'
14324                 uvuformat='"lu"'
14325                 uvoformat='"lo"'
14326                 uvxformat='"lx"'
14327                 uvXUformat='"lX"'
14328         else
14329                 if $test X"$ivsize" = X"$intsize"; then
14330                         ivdformat='"d"'
14331                         uvuformat='"u"'
14332                         uvoformat='"o"'
14333                         uvxformat='"x"'
14334                         uvXUformat='"X"'
14335                 else
14336                         : far out
14337                         if $test X"$ivsize" = X"$shortsize"; then
14338                                 ivdformat='"hd"'
14339                                 uvuformat='"hu"'
14340                                 uvoformat='"ho"'
14341                                 uvxformat='"hx"'
14342                                 uvXUformat='"hX"'
14343                         fi
14344                 fi
14345         fi
14346 fi
14347
14348 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
14349         nveformat="$sPRIeldbl"
14350         nvfformat="$sPRIfldbl"
14351         nvgformat="$sPRIgldbl"
14352         nvEUformat="$sPRIEUldbl"
14353         nvFUformat="$sPRIFUldbl"
14354         nvGUformat="$sPRIGUldbl"
14355 else
14356         nveformat='"e"'
14357         nvfformat='"f"'
14358         nvgformat='"g"'
14359         nvEUformat='"E"'
14360         nvFUformat='"F"'
14361         nvGUformat='"G"'
14362 fi
14363
14364 case "$ivdformat" in
14365 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
14366     exit 1
14367     ;;
14368 esac
14369
14370
14371 echo " "
14372 $echo "Checking the format string to be used for gids..." >&4
14373
14374 case "$gidsign" in
14375 -1)     if $test X"$gidsize" = X"$ivsize"; then
14376                 gidformat="$ivdformat"
14377         else
14378                 if $test X"$gidsize" = X"$longsize"; then
14379                         gidformat='"ld"'
14380                 else
14381                         if $test X"$gidsize" = X"$intsize"; then
14382                                 gidformat='"d"'
14383                         else
14384                                 if $test X"$gidsize" = X"$shortsize"; then
14385                                         gidformat='"hd"'
14386                                 fi
14387                         fi
14388                 fi
14389         fi
14390         ;;
14391 *)      if $test X"$gidsize" = X"$uvsize"; then
14392                 gidformat="$uvuformat"
14393         else
14394                 if $test X"$gidsize" = X"$longsize"; then
14395                         gidformat='"lu"'
14396                 else
14397                         if $test X"$gidsize" = X"$intsize"; then
14398                                 gidformat='"u"'
14399                         else
14400                                 if $test X"$gidsize" = X"$shortsize"; then
14401                                         gidformat='"hu"'
14402                                 fi
14403                         fi
14404                 fi
14405         fi
14406         ;;
14407 esac
14408
14409 : see if getgroups exists
14410 set getgroups d_getgrps
14411 eval $inlibc
14412
14413 : see if setgroups exists
14414 set setgroups d_setgrps
14415 eval $inlibc
14416
14417
14418 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
14419 echo " "
14420 case "$d_getgrps$d_setgrps" in
14421 *define*)
14422         case "$groupstype" in
14423         '') dflt="$gidtype" ;;
14424         *)  dflt="$groupstype" ;;
14425         esac
14426         $cat <<EOM
14427 What type of pointer is the second argument to getgroups() and setgroups()?
14428 Usually this is the same as group ids, $gidtype, but not always.
14429
14430 EOM
14431         rp='What type pointer is the second argument to getgroups() and setgroups()?'
14432         . ./myread
14433         groupstype="$ans"
14434         ;;
14435 *)  groupstype="$gidtype";;
14436 esac
14437
14438 echo " "
14439 echo "Checking if your $make program sets \$(MAKE)..." >&4
14440 case "$make_set_make" in
14441 '')
14442         $sed 's/^X //' > testmake.mak << 'EOF'
14443 Xall:
14444 X       @echo 'maketemp="$(MAKE)"'
14445 EOF
14446         case "`$make -f testmake.mak 2>/dev/null`" in
14447         *maketemp=*) make_set_make='#' ;;
14448         *)      make_set_make="MAKE=$make" ;;
14449         esac
14450         $rm -f testmake.mak
14451         ;;
14452 esac
14453 case "$make_set_make" in
14454 '#') echo "Yup, it does.";;
14455 *) echo "Nope, it doesn't.";;
14456 esac
14457
14458 : see what type is used for mode_t
14459 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
14460 set mode_t modetype int stdio.h sys/types.h
14461 eval $typedef_ask
14462
14463 : see if stdarg is available
14464 echo " "
14465 if $test `./findhdr stdarg.h`; then
14466         echo "<stdarg.h> found." >&4
14467         valstd="$define"
14468 else
14469         echo "<stdarg.h> NOT found." >&4
14470         valstd="$undef"
14471 fi
14472
14473 : see if varags is available
14474 echo " "
14475 if $test `./findhdr varargs.h`; then
14476         echo "<varargs.h> found." >&4
14477 else
14478         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14479 fi
14480
14481 : set up the varargs testing programs
14482 $cat > varargs.c <<EOP
14483 #ifdef I_STDARG
14484 #include <stdarg.h>
14485 #endif
14486 #ifdef I_VARARGS
14487 #include <varargs.h>
14488 #endif
14489
14490 #ifdef I_STDARG
14491 int f(char *p, ...)
14492 #else
14493 int f(va_alist)
14494 va_dcl
14495 #endif
14496 {
14497         va_list ap;
14498 #ifndef I_STDARG
14499         char *p;
14500 #endif
14501 #ifdef I_STDARG
14502         va_start(ap,p);
14503 #else
14504         va_start(ap);
14505         p = va_arg(ap, char *);
14506 #endif
14507         va_end(ap);
14508 }
14509 EOP
14510 $cat > varargs <<EOP
14511 $startsh
14512 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14513         echo "true"
14514 else
14515         echo "false"
14516 fi
14517 $rm -f varargs$_o
14518 EOP
14519 chmod +x varargs
14520
14521 : now check which varargs header should be included
14522 echo " "
14523 i_varhdr=''
14524 case "$valstd" in
14525 "$define")
14526         if `./varargs I_STDARG`; then
14527                 val='stdarg.h'
14528         elif `./varargs I_VARARGS`; then
14529                 val='varargs.h'
14530         fi
14531         ;;
14532 *)
14533         if `./varargs I_VARARGS`; then
14534                 val='varargs.h'
14535         fi
14536         ;;
14537 esac
14538 case "$val" in
14539 '')
14540 echo "I could not find the definition for va_dcl... You have problems..." >&4
14541         val="$undef"; set i_stdarg; eval $setvar
14542         val="$undef"; set i_varargs; eval $setvar
14543         ;;
14544 *) 
14545         set i_varhdr
14546         eval $setvar
14547         case "$i_varhdr" in
14548         stdarg.h)
14549                 val="$define"; set i_stdarg; eval $setvar
14550                 val="$undef"; set i_varargs; eval $setvar
14551                 ;;
14552         varargs.h)
14553                 val="$undef"; set i_stdarg; eval $setvar
14554                 val="$define"; set i_varargs; eval $setvar
14555                 ;;
14556         esac
14557         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14558 esac
14559 $rm -f varargs*
14560
14561 : see if we need va_copy
14562 echo " "
14563 case "$i_stdarg" in
14564 "$define")
14565         $cat >try.c <<EOCP
14566 #include <stdarg.h>
14567 #include <stdio.h>
14568 #$i_stdlib I_STDLIB
14569 #ifdef I_STDLIB
14570 #include <stdlib.h>
14571 #endif
14572 #include <signal.h>
14573
14574 int
14575 ivfprintf(FILE *f, const char *fmt, va_list *valp)
14576 {
14577   return vfprintf(f, fmt, *valp);
14578 }
14579  
14580 int    
14581 myvfprintf(FILE *f, const  char *fmt, va_list val)
14582 {
14583   return ivfprintf(f, fmt, &val);
14584 }
14585       
14586 int
14587 myprintf(char *fmt, ...) 
14588 {
14589   va_list val;
14590   va_start(val, fmt);
14591   return myvfprintf(stdout, fmt, val); 
14592 }         
14593
14594 int
14595 main(int ac, char **av)
14596 {
14597   signal(SIGSEGV, exit);
14598
14599   myprintf("%s%cs all right, then\n", "that", '\'');                            
14600   exit(0);      
14601 }
14602 EOCP
14603         set try
14604         if eval $compile && $run ./try 2>&1 >/dev/null; then
14605                 case "`$run ./try`" in
14606                 "that's all right, then")
14607                         okay=yes
14608                         ;;
14609                 esac
14610         fi
14611         case "$okay" in
14612         yes)    echo "It seems that you don't need va_copy()." >&4
14613                 need_va_copy="$undef"
14614                 ;;
14615         *)      echo "It seems that va_copy() or similar will be needed." >&4
14616                 need_va_copy="$define"
14617                 ;;
14618         esac
14619         $rm -f try.* core core.* *.core *.core.*
14620         ;;
14621 *)      echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
14622         ;;
14623 esac
14624
14625 : define a fucntion to check prototypes
14626 $cat > protochk <<EOSH
14627 $startsh
14628 cc="$cc"
14629 optimize="$optimize"
14630 ccflags="$ccflags"
14631 prototype="$prototype"
14632 define="$define"
14633 rm=$rm
14634 EOSH
14635
14636 $cat >> protochk <<'EOSH'
14637
14638 $rm -f try.c
14639 foo="$1"
14640 shift
14641 while test $# -ge 2; do
14642         case "$1" in
14643                 $define) echo "#include <$2>" >> try.c ;;
14644                 literal) echo "$2" >> try.c ;;
14645         esac
14646     shift 2
14647 done
14648 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
14649 cat >> try.c <<'EOCP'
14650 #ifdef CAN_PROTOTYPE
14651 #define _(args) args
14652 #else
14653 #define _(args) ()
14654 #endif
14655 EOCP
14656 echo "$foo" >> try.c
14657 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
14658 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
14659 status=$?
14660 $rm -f try.[co]
14661 exit $status
14662 EOSH
14663 chmod +x protochk
14664 $eunicefix protochk
14665
14666 : see what type is used for size_t
14667 rp="What is the type used for the length parameter for string functions?"
14668 set size_t sizetype 'unsigned int' stdio.h sys/types.h
14669 eval $typedef_ask
14670
14671 : check for type of arguments to gethostbyaddr. 
14672 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
14673         case "$d_gethbyaddr" in
14674         $define)
14675                 $cat <<EOM
14676
14677 Checking to see what type of arguments are accepted by gethostbyaddr().
14678 EOM
14679                 hdrs="$define sys/types.h
14680                         $d_socket sys/socket.h 
14681                         $i_niin netinet/in.h 
14682                         $i_netdb netdb.h
14683                         $i_unistd unistd.h"
14684                 : The first arg can 'char *' or 'void *'
14685                 : The second arg is some of integral type
14686                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
14687                         for yyy in size_t long int; do
14688                                 case "$netdb_host_type" in
14689                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
14690                                         if ./protochk "$try" $hdrs; then
14691                                                 echo "Your system accepts $xxx for the first arg."
14692                                                 echo "...and $yyy for the second arg."
14693                                                 netdb_host_type="$xxx"
14694                                                 netdb_hlen_type="$yyy"
14695                                         fi
14696                                         ;;
14697                                 esac
14698                         done
14699                 done
14700                 : In case none of those worked, prompt the user.
14701                 case "$netdb_host_type" in
14702                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
14703                         dflt='char *'
14704                         . ./myread
14705                         netdb_host_type=$ans
14706                         rp='What is the type for the 2nd argument to gethostbyaddr?'
14707                         dflt="$sizetype"
14708                         . ./myread
14709                         netdb_hlen_type=$ans
14710                         ;;
14711                 esac
14712                 ;;
14713         *)      : no gethostbyaddr, so pick harmless defaults
14714                 netdb_host_type='char *'
14715                 netdb_hlen_type="$sizetype"
14716                 ;;
14717         esac
14718         # Remove the "const" if needed. -- but then we'll have a 
14719         # prototype clash!
14720         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
14721 fi
14722
14723 : check for type of argument to gethostbyname. 
14724 if test "X$netdb_name_type" = X ; then
14725         case "$d_gethbyname" in
14726         $define)
14727                 $cat <<EOM
14728
14729 Checking to see what type of argument is accepted by gethostbyname().
14730 EOM
14731                 hdrs="$define sys/types.h
14732                         $d_socket sys/socket.h 
14733                         $i_niin netinet/in.h 
14734                         $i_netdb netdb.h
14735                         $i_unistd unistd.h"
14736                 for xxx in "const char *" "char *"; do
14737                         case "$netdb_name_type" in
14738                         '')     try="extern struct hostent *gethostbyname($xxx);"
14739                                 if ./protochk "$try" $hdrs; then
14740                                         echo "Your system accepts $xxx."
14741                                         netdb_name_type="$xxx"
14742                                 fi
14743                                 ;;
14744                         esac
14745                 done
14746                 : In case none of those worked, prompt the user.
14747                 case "$netdb_name_type" in
14748                 '')     rp='What is the type for the 1st argument to gethostbyname?'
14749                         dflt='char *'
14750                         . ./myread
14751                         netdb_name_type=$ans
14752                         ;;
14753                 esac
14754                 ;;
14755         *)      : no gethostbyname, so pick harmless default
14756                 netdb_name_type='char *'
14757                 ;;
14758         esac
14759 fi
14760
14761 : check for type of 1st argument to getnetbyaddr. 
14762 if test "X$netdb_net_type" = X ; then
14763         case "$d_getnbyaddr" in
14764         $define)
14765                 $cat <<EOM
14766
14767 Checking to see what type of 1st argument is accepted by getnetbyaddr().
14768 EOM
14769                 hdrs="$define sys/types.h
14770                         $d_socket sys/socket.h 
14771                         $i_niin netinet/in.h 
14772                         $i_netdb netdb.h
14773                         $i_unistd unistd.h"
14774                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
14775                         case "$netdb_net_type" in
14776                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
14777                                 if ./protochk "$try" $hdrs; then
14778                                         echo "Your system accepts $xxx."
14779                                         netdb_net_type="$xxx"
14780                                 fi
14781                                 ;;
14782                         esac
14783                 done
14784                 : In case none of those worked, prompt the user.
14785                 case "$netdb_net_type" in
14786                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
14787                         dflt='long'
14788                         . ./myread
14789                         netdb_net_type=$ans
14790                         ;;
14791                 esac
14792                 ;;
14793         *)      : no getnetbyaddr, so pick harmless default
14794                 netdb_net_type='long'
14795                 ;;
14796         esac
14797 fi
14798 : locate the preferred pager for this system
14799 case "$pager" in
14800 '')
14801         dflt=''
14802         case "$pg" in
14803         /*) dflt=$pg;;
14804         [a-zA-Z]:/*) dflt=$pg;;
14805         esac
14806         case "$more" in
14807         /*) dflt=$more;;
14808         [a-zA-Z]:/*) dflt=$more;;
14809         esac
14810         case "$less" in
14811         /*) dflt=$less;;
14812         [a-zA-Z]:/*) dflt=$less;;
14813         esac
14814         case "$dflt" in
14815         '') dflt=/usr/ucb/more;;
14816         esac
14817         ;;
14818 *) dflt="$pager";;
14819 esac
14820 echo " "
14821 fn=f/
14822 rp='What pager is used on your system?'
14823 . ./getfile
14824 pager="$ans"
14825
14826 : see what type pids are declared as in the kernel
14827 rp="What is the type of process ids on this system?"
14828 set pid_t pidtype int stdio.h sys/types.h
14829 eval $typedef_ask
14830
14831 : Find earliest binary compatible site_perl subdirectory perl can use.
14832 case "$bincompat5005" in
14833 "$define") xs_apiversion='5.005' ;;
14834 *) xs_apiversion=$version ;;   # The current site_perl version.
14835 esac
14836 : Find earliest pure perl site_perl subdirectory perl can use.
14837 : The versioned directories started at 5.005.
14838 pm_apiversion='5.005'
14839
14840 : see if ar generates random libraries by itself
14841 echo " "
14842 echo "Checking how to generate random libraries on your machine..." >&4
14843 echo 'int bar1() { return bar2(); }' > bar1.c
14844 echo 'int bar2() { return 2; }' > bar2.c
14845 $cat > foo.c <<'EOP'
14846 int main() { printf("%d\n", bar1()); exit(0); }
14847 EOP
14848 $cc $ccflags -c bar1.c >/dev/null 2>&1
14849 $cc $ccflags -c bar2.c >/dev/null 2>&1
14850 $cc $ccflags -c foo.c >/dev/null 2>&1
14851 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
14852 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
14853         $run ./foobar >/dev/null 2>&1; then
14854         echo "$ar appears to generate random libraries itself."
14855         orderlib=false
14856         ranlib=":"
14857 elif $ar ts bar$_a >/dev/null 2>&1 &&
14858         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
14859         $run ./foobar >/dev/null 2>&1; then
14860                 echo "a table of contents needs to be added with '$ar ts'."
14861                 orderlib=false
14862                 ranlib="$ar ts"
14863 else
14864         case "$ranlib" in
14865         :) ranlib='';;
14866         '')
14867                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
14868                 $test -f $ranlib || ranlib=''
14869                 ;;
14870         esac
14871         if $test -n "$ranlib"; then
14872                 echo "your system has '$ranlib'; we'll use that."
14873                 orderlib=false
14874         else
14875                 echo "your system doesn't seem to support random libraries"
14876                 echo "so we'll use lorder and tsort to order the libraries."
14877                 orderlib=true
14878                 ranlib=":"
14879         fi
14880 fi
14881 $rm -f foo* bar* 
14882
14883 : check for type of arguments to select. 
14884 case "$selecttype" in
14885 '') case "$d_select" in
14886         $define)
14887                 echo " "
14888                 $cat <<EOM
14889 Checking to see what type of arguments are accepted by select().
14890 EOM
14891                 hdrs="$define sys/types.h
14892                         $i_systime sys/time.h 
14893                         $i_sysselct sys/select.h
14894                         $d_socket sys/socket.h"
14895                 : The first arg can be int, unsigned, or size_t
14896                 : The last arg may or may not be 'const'
14897                 val=''
14898                 : void pointer has been seen but using that
14899                 : breaks the selectminbits test
14900                 for xxx in 'fd_set *' 'int *'; do
14901                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
14902                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
14903                                         case "$val" in
14904                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
14905                                                 if ./protochk "$try" $hdrs; then
14906                                                         echo "Your system accepts $xxx."
14907                                                         val="$xxx"
14908                                                 fi
14909                                                 ;;
14910                                         esac
14911                                 done
14912                         done
14913                 done
14914                 case "$val" in
14915                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
14916                         case "$d_fd_set" in
14917                                 $define) dflt="fd_set *" ;;
14918                                 *)              dflt="int *" ;;
14919                         esac
14920                         . ./myread
14921                         val=$ans
14922                         ;;
14923                 esac
14924                 selecttype="$val"
14925                 ;;
14926         *)      : no select, so pick a harmless default
14927                 selecttype='int *'
14928                 ;;
14929         esac
14930         ;;
14931 esac
14932
14933 : check for the select 'width'
14934 case "$selectminbits" in
14935 '') case "$d_select" in
14936         $define)
14937                 $cat <<EOM
14938
14939 Checking to see on how many bits at a time your select() operates...
14940 EOM
14941                 $cat >try.c <<EOCP
14942 #include <sys/types.h>
14943 #$i_time I_TIME
14944 #$i_systime I_SYS_TIME
14945 #$i_systimek I_SYS_TIME_KERNEL
14946 #ifdef I_TIME
14947 #   include <time.h>
14948 #endif
14949 #ifdef I_SYS_TIME
14950 #   ifdef I_SYS_TIME_KERNEL
14951 #       define KERNEL
14952 #   endif
14953 #   include <sys/time.h>
14954 #   ifdef I_SYS_TIME_KERNEL
14955 #       undef KERNEL
14956 #   endif
14957 #endif
14958 #$i_sysselct I_SYS_SELECT
14959 #ifdef I_SYS_SELECT
14960 #include <sys/select.h>
14961 #endif
14962 #$d_socket HAS_SOCKET
14963 #ifdef HAS_SOCKET
14964 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
14965 #endif
14966 #include <stdio.h>
14967 $selecttype b;
14968 #define S sizeof(*(b))
14969 #define MINBITS 64
14970 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
14971 #define NBITS  (NBYTES * 8)
14972 int main() {
14973     char s[NBYTES];
14974     struct timeval t;
14975     int i;
14976     FILE* fp;
14977     int fd;
14978
14979     fclose(stdin);
14980     fp = fopen("try.c", "r");
14981     if (fp == 0)
14982       exit(1);
14983     fd = fileno(fp);
14984     if (fd < 0)
14985       exit(2);
14986     b = ($selecttype)s;
14987     for (i = 0; i < NBITS; i++)
14988         FD_SET(i, b);
14989     t.tv_sec  = 0;
14990     t.tv_usec = 0;
14991     select(fd + 1, b, 0, 0, &t);
14992     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
14993     printf("%d\n", i + 1);
14994     return 0;
14995 }
14996 EOCP
14997                 set try
14998                 if eval $compile_ok; then
14999                         selectminbits=`$run ./try`
15000                         case "$selectminbits" in
15001                         '')     cat >&4 <<EOM
15002 Cannot figure out on how many bits at a time your select() operates.
15003 I'll play safe and guess it is 32 bits.
15004 EOM
15005                                 selectminbits=32
15006                                 bits="32 bits"
15007                                 ;;
15008                         1)      bits="1 bit" ;;
15009                         *)      bits="$selectminbits bits" ;;
15010                         esac
15011                         echo "Your select() operates on $bits at a time." >&4
15012                 else
15013                         rp='What is the minimum number of bits your select() operates on?'
15014                         case "$byteorder" in
15015                         1234|12345678)  dflt=32 ;;
15016                         *)              dflt=1  ;;
15017                         esac
15018                         . ./myread
15019                         val=$ans
15020                         selectminbits="$val"
15021                 fi
15022                 $rm -f try.* try
15023                 ;;
15024         *)      : no select, so pick a harmless default
15025                 selectminbits='32'
15026                 ;;
15027         esac
15028         ;;
15029 esac
15030
15031 : Trace out the files included by signal.h, then look for SIGxxx names.
15032 : Remove SIGARRAYSIZE used by HPUX.
15033 : Remove SIGSTKSIZE used by Linux.
15034 : Remove SIGSTKSZ used by Posix.
15035 : Remove SIGTYP void lines used by OS2.
15036 : Some cpps, like os390, dont give the file name anywhere
15037 if [ "X$fieldn" = X ]; then
15038         : Just make some guesses.  We check them later.
15039         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
15040 else
15041         xxx=`echo '#include <signal.h>' |
15042         $cppstdin $cppminus $cppflags 2>/dev/null |
15043         $grep '^[       ]*#.*include' | 
15044         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sed 's!\\\\\\\\!/!g' | $sort | $uniq`
15045 fi
15046 : Check this list of files to be sure we have parsed the cpp output ok.
15047 : This will also avoid potentially non-existent files, such 
15048 : as ../foo/bar.h
15049 xxxfiles=''
15050 for xx in $xxx /dev/null ; do
15051         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
15052 done
15053 : If we have found no files, at least try signal.h
15054 case "$xxxfiles" in
15055 '')     xxxfiles=`./findhdr signal.h` ;;
15056 esac
15057 xxx=`awk '
15058 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
15059         print substr($2, 4, 20)
15060 }
15061 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
15062         print substr($3, 4, 20)
15063 }' $xxxfiles`
15064 : Append some common names just in case the awk scan failed.
15065 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
15066 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
15067 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
15068 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
15069 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
15070
15071 : generate a few handy files for later
15072 $cat > signal.c <<'EOCP'
15073 #include <sys/types.h>
15074 #include <signal.h>
15075 #include <stdio.h>
15076 int main() {
15077
15078 /* Strange style to avoid deeply-nested #if/#else/#endif */
15079 #ifndef NSIG
15080 #  ifdef _NSIG
15081 #    define NSIG (_NSIG)
15082 #  endif
15083 #endif
15084
15085 #ifndef NSIG
15086 #  ifdef SIGMAX
15087 #    define NSIG (SIGMAX+1)
15088 #  endif
15089 #endif
15090
15091 #ifndef NSIG
15092 #  ifdef SIG_MAX
15093 #    define NSIG (SIG_MAX+1)
15094 #  endif
15095 #endif
15096
15097 #ifndef NSIG
15098 #  ifdef MAXSIG
15099 #    define NSIG (MAXSIG+1)
15100 #  endif
15101 #endif
15102
15103 #ifndef NSIG
15104 #  ifdef MAX_SIG
15105 #    define NSIG (MAX_SIG+1)
15106 #  endif
15107 #endif
15108
15109 #ifndef NSIG
15110 #  ifdef SIGARRAYSIZE
15111 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
15112 #  endif
15113 #endif
15114
15115 #ifndef NSIG
15116 #  ifdef _sys_nsig
15117 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
15118 #  endif
15119 #endif
15120
15121 /* Default to some arbitrary number that's big enough to get most
15122    of the common signals.
15123 */
15124 #ifndef NSIG
15125 #    define NSIG 50
15126 #endif
15127
15128 printf("NSIG %d\n", NSIG);
15129
15130 #ifndef JUST_NSIG
15131
15132 EOCP
15133
15134 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
15135 {
15136         printf "#ifdef SIG"; printf $1; printf "\n"
15137         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
15138         printf $1; printf ");\n"
15139         printf "#endif\n"
15140 }
15141 END {
15142         printf "#endif /* JUST_NSIG */\n";
15143         printf "exit(0);\n}\n";
15144 }
15145 ' >>signal.c
15146 $cat >signal.awk <<'EOP'
15147 BEGIN { ndups = 0 }
15148 $1 ~ /^NSIG$/ { nsig = $2 }
15149 ($1 !~ /^NSIG$/) && (NF == 2) {
15150     if ($2 > maxsig) { maxsig = $2 }
15151     if (sig_name[$2]) {
15152         dup_name[ndups] = $1
15153         dup_num[ndups] = $2
15154         ndups++ 
15155     }
15156     else {
15157         sig_name[$2] = $1
15158         sig_num[$2] = $2
15159     }
15160 }
15161 END { 
15162     if (nsig == 0) {
15163         nsig = maxsig + 1
15164     }
15165     printf("NSIG %d\n", nsig);
15166     for (n = 1; n < nsig; n++) {
15167         if (sig_name[n]) {
15168             printf("%s %d\n", sig_name[n], sig_num[n])
15169         }
15170         else {
15171             printf("NUM%d %d\n", n, n) 
15172         }
15173     }
15174     for (n = 0; n < ndups; n++) {
15175         printf("%s %d\n", dup_name[n], dup_num[n])
15176     }
15177 }
15178 EOP
15179 $cat >signal_cmd <<EOS
15180 $startsh
15181 if $test -s signal.lst; then
15182     echo "Using your existing signal.lst file"
15183         exit 0
15184 fi
15185 xxx="$xxx"
15186 EOS
15187 $cat >>signal_cmd <<'EOS'
15188
15189 set signal
15190 if eval $compile_ok; then
15191         $run ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15192 else
15193         echo "(I can't seem be able to compile the whole test program)" >&4
15194         echo "(I'll try it in little pieces.)" >&4
15195         set signal -DJUST_NSIG
15196         if eval $compile_ok; then
15197                 $run ./signal$_exe > signal.nsg
15198                 $cat signal.nsg
15199         else
15200                 echo "I can't seem to figure out how many signals you have." >&4
15201                 echo "Guessing 50." >&4
15202                 echo 'NSIG 50' > signal.nsg
15203         fi
15204         : Now look at all the signal names, one at a time.
15205         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
15206                 $cat > signal.c <<EOCP
15207 #include <sys/types.h>
15208 #include <signal.h>
15209 #include <stdio.h>
15210 int main() {
15211 printf("$xx %d\n", SIG${xx});
15212 return 0;
15213 }
15214 EOCP
15215                 set signal
15216                 if eval $compile; then
15217                         echo "SIG${xx} found."
15218                         $run ./signal$_exe  >> signal.ls1
15219                 else
15220                         echo "SIG${xx} NOT found."
15221                 fi
15222         done
15223         if $test -s signal.ls1; then
15224                 $cat signal.nsg signal.ls1 |
15225                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15226         fi
15227
15228 fi
15229 if $test -s signal.lst; then
15230         :
15231 else
15232         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
15233         echo 'kill -l' >signal
15234         set X `csh -f <signal`
15235         $rm -f signal
15236         shift
15237         case $# in
15238         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
15239         esac
15240         echo $@ | $tr ' ' $trnl | \
15241             $awk '{ printf "%s %d\n", $1, ++s; }
15242                   END { printf "NSIG %d\n", ++s }' >signal.lst
15243 fi
15244 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
15245 EOS
15246 chmod a+x signal_cmd
15247 $eunicefix signal_cmd
15248
15249 : generate list of signal names
15250 echo " "
15251 case "$sig_name_init" in
15252 '') doinit=yes ;;
15253 *)  case "$sig_num_init" in
15254     ''|*,*) doinit=yes ;;
15255     esac ;;
15256 esac
15257 case "$doinit" in
15258 yes)
15259         echo "Generating a list of signal names and numbers..." >&4
15260         . ./signal_cmd
15261         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
15262         sig_name=`$awk 'BEGIN { printf "ZERO " }
15263                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
15264         sig_num=`$awk  'BEGIN { printf "0 " }
15265                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
15266         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
15267                              !/^NSIG/   { printf "\"%s\", ", $1 }
15268                              END        { printf "0\n" }' signal.lst`
15269         sig_num_init=`$awk  'BEGIN      { printf "0, " }
15270                              !/^NSIG/   { printf "%d, ", $2}
15271                              END        { printf "0\n"}' signal.lst`
15272         ;;
15273 esac
15274 echo "The following $sig_count signals are available:"
15275 echo " "
15276 echo $sig_name | $awk \
15277 'BEGIN { linelen = 0 }
15278 {
15279         for (i = 1; i <= NF; i++) {
15280                 name = "SIG" $i " "
15281                 linelen = linelen + length(name)
15282                 if (linelen > 70) {
15283                         printf "\n"
15284                         linelen = length(name)
15285                 }
15286                 printf "%s", name
15287         }
15288         printf "\n"
15289 }'
15290 sig_size=`echo $sig_name | awk '{print NF}'`
15291 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
15292
15293 echo " "
15294 case "$sizetype" in
15295 *_t) zzz="$sizetype"    ;;
15296 *)   zzz="filesize"     ;;
15297 esac
15298 echo "Checking the size of $zzz..." >&4 
15299 cat > try.c <<EOCP
15300 #include <sys/types.h>
15301 #include <stdio.h>
15302 int main() {
15303     printf("%d\n", (int)sizeof($sizetype));
15304     exit(0);
15305 }
15306 EOCP
15307 set try
15308 if eval $compile_ok; then
15309         yyy=`$run ./try`
15310         case "$yyy" in
15311         '')     sizesize=4
15312                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
15313                 ;;
15314         *)      sizesize=$yyy
15315                 echo "Your $zzz size is $sizesize bytes."
15316                 ;;
15317         esac
15318 else
15319         sizesize=4
15320         echo "(I can't compile the test program--guessing $sizesize.)" >&4
15321 fi
15322
15323
15324 : check for socklen_t
15325 echo " "
15326 echo "Checking to see if you have socklen_t..." >&4
15327 $cat >try.c <<EOCP
15328 #include <sys/types.h>
15329 #$d_socket HAS_SOCKET
15330 #ifdef HAS_SOCKET
15331 #include <sys/socket.h>
15332 #endif
15333 int main() { socklen_t x = 16; }
15334 EOCP
15335 set try
15336 if eval $compile; then
15337         val="$define"
15338         echo "You have socklen_t."
15339 else
15340         val="$undef"
15341         echo "You do not have socklen_t."
15342         case "$sizetype" in
15343         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
15344         esac
15345 fi
15346 $rm -f try try.*
15347 set d_socklen_t
15348 eval $setvar
15349
15350 : see if this is a socks.h system
15351 set socks.h i_socks
15352 eval $inhdr
15353
15354 : check for type of the size argument to socket calls
15355 case "$d_socket" in
15356 "$define")
15357         $cat <<EOM
15358
15359 Checking to see what type is the last argument of accept().
15360 EOM
15361         yyy=''
15362         case "$d_socklen_t" in
15363         "$define") yyy="$yyy socklen_t"
15364         esac
15365         yyy="$yyy $sizetype int long unsigned"
15366         for xxx in $yyy; do
15367                 case "$socksizetype" in
15368                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
15369                         case "$usesocks" in
15370                         "$define")
15371                                 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
15372                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15373                                         socksizetype="$xxx"
15374                                 fi
15375                                 ;;
15376                         *)      if ./protochk "$try"  $i_systypes sys/types.h $d_socket sys/socket.h; then
15377                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15378                                         socksizetype="$xxx"
15379                                 fi
15380                                 ;;
15381                         esac
15382                         ;;
15383                 esac
15384         done
15385 : In case none of those worked, prompt the user.
15386         case "$socksizetype" in
15387         '')     rp='What is the type for socket address structure sizes?'
15388                 dflt='int'
15389                 . ./myread
15390                 socksizetype=$ans
15391                 ;;
15392         esac
15393         ;;
15394 *)      : no sockets, so pick relatively harmless default
15395         socksizetype='int'
15396         ;;
15397 esac
15398
15399 : see what type is used for signed size_t
15400 set ssize_t ssizetype int stdio.h sys/types.h
15401 eval $typedef
15402 dflt="$ssizetype"
15403 $cat > try.c <<EOM
15404 #include <stdio.h>
15405 #include <sys/types.h>
15406 #define Size_t $sizetype
15407 #define SSize_t $dflt
15408 int main()
15409 {
15410         if (sizeof(Size_t) == sizeof(SSize_t))
15411                 printf("$dflt\n");
15412         else if (sizeof(Size_t) == sizeof(int))
15413                 printf("int\n");
15414         else 
15415                 printf("long\n");
15416         exit(0);
15417 }
15418 EOM
15419 echo " "
15420 set try
15421 if eval $compile_ok && $run ./try > /dev/null; then
15422         ssizetype=`$run ./try`
15423         echo "I'll be using $ssizetype for functions returning a byte count." >&4
15424 else
15425         $cat >&4 <<EOM
15426 Help! I can't compile and run the ssize_t test program: please enlighten me!
15427 (This is probably a misconfiguration in your system or libraries, and
15428 you really ought to fix it.  Still, I'll try anyway.)
15429
15430 I need a type that is the same size as $sizetype, but is guaranteed to
15431 be signed.  Common values are ssize_t, int and long.
15432
15433 EOM
15434         rp="What signed type is the same size as $sizetype?"
15435         . ./myread
15436         ssizetype="$ans"
15437 fi
15438 $rm -f try try.*
15439
15440 : see what type of char stdio uses.
15441 echo " "
15442 echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
15443 if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
15444         echo "Your stdio uses unsigned chars." >&4
15445         stdchar="unsigned char"
15446 else
15447         echo "Your stdio uses signed chars." >&4
15448         stdchar="char"
15449 fi
15450 $rm -f stdioh
15451
15452
15453
15454 : see if time exists
15455 echo " "
15456 if test "X$d_time" = X -o X"$timetype" = X; then
15457     if set time val -f d_time; eval $csym; $val; then
15458                 echo 'time() found.' >&4
15459                 val="$define"
15460                 rp="What is the type returned by time() on this system?"
15461                 set time_t timetype long stdio.h sys/types.h
15462                 eval $typedef_ask
15463     else
15464                 echo 'time() not found, hope that will do.' >&4
15465                 val="$undef"
15466                 timetype='int';
15467     fi
15468     set d_time
15469     eval $setvar
15470 fi
15471
15472 : see what type uids are declared as in the kernel
15473 echo " "
15474 echo "Looking for the type for user ids returned by getuid()."
15475 set uid_t uidtype xxx stdio.h sys/types.h
15476 eval $typedef
15477 case "$uidtype" in
15478 xxx)
15479         xxx=`./findhdr sys/user.h`
15480         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
15481         case $1 in
15482         unsigned) dflt="$1 $2" ;;
15483         *) dflt="$1" ;;
15484         esac
15485         ;;
15486 *) dflt="$uidtype";;
15487 esac
15488 case "$uidtype" in
15489 uid_t)  echo "uid_t found." ;;
15490 *)      rp="What is the type for user ids returned by getuid()?"
15491         . ./myread
15492         uidtype="$ans"
15493         ;;
15494 esac
15495
15496 echo " "
15497 case "$uidtype" in
15498 *_t) zzz="$uidtype"     ;;
15499 *)   zzz="uid"          ;;
15500 esac
15501 echo "Checking the size of $zzz..." >&4 
15502 cat > try.c <<EOCP
15503 #include <sys/types.h>
15504 #include <stdio.h>
15505 int main() {
15506     printf("%d\n", (int)sizeof($uidtype));
15507     exit(0);
15508 }
15509 EOCP
15510 set try
15511 if eval $compile_ok; then
15512         yyy=`$run ./try`
15513         case "$yyy" in
15514         '')     uidsize=4
15515                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
15516                 ;;
15517         *)      uidsize=$yyy
15518                 echo "Your $zzz is $uidsize bytes long."
15519                 ;;
15520         esac
15521 else
15522         uidsize=4
15523         echo "(I can't compile the test program--guessing $uidsize.)" >&4
15524 fi
15525
15526 echo " "
15527 case "$uidtype" in
15528 *_t) zzz="$uidtype"     ;;
15529 *)   zzz="uid"          ;;
15530 esac
15531 echo "Checking the sign of $zzz..." >&4
15532 cat > try.c <<EOCP
15533 #include <sys/types.h>
15534 #include <stdio.h>
15535 int main() {
15536         $uidtype foo = -1;
15537         if (foo < 0)
15538                 printf("-1\n");
15539         else
15540                 printf("1\n");
15541 }
15542 EOCP
15543 set try
15544 if eval $compile; then
15545         yyy=`$run ./try`
15546         case "$yyy" in
15547         '')     uidsign=1
15548                 echo "(I can't execute the test program--guessing unsigned.)" >&4
15549                 ;;
15550         *)      uidsign=$yyy
15551                 case "$uidsign" in
15552                  1) echo "Your $zzz is unsigned." ;;
15553                 -1) echo "Your $zzz is signed."   ;;
15554                 esac
15555                 ;;
15556         esac
15557 else
15558         uidsign=1
15559         echo "(I can't compile the test program--guessing unsigned.)" >&4
15560 fi
15561
15562
15563
15564 echo " "
15565 $echo "Checking the format string to be used for uids..." >&4
15566
15567 case "$uidsign" in
15568 -1)     if $test X"$uidsize" = X"$ivsize"; then
15569                 uidformat="$ivdformat"
15570         else
15571                 if $test X"$uidsize" = X"$longsize"; then
15572                         uidformat='"ld"'
15573                 else
15574                         if $test X"$uidsize" = X"$intsize"; then
15575                                 uidformat='"d"'
15576                         else
15577                                 if $test X"$uidsize" = X"$shortsize"; then
15578                                         uidformat='"hd"'
15579                                 fi
15580                         fi
15581                 fi
15582         fi
15583         ;;
15584 *)      if $test X"$uidsize" = X"$uvsize"; then
15585                 uidformat="$uvuformat"
15586         else
15587                 if $test X"$uidsize" = X"$longsize"; then
15588                         uidformat='"lu"'
15589                 else
15590                         if $test X"$uidsize" = X"$intsize"; then
15591                                 uidformat='"u"'
15592                         else
15593                                 if $test X"$uidsize" = X"$shortsize"; then
15594                                         uidformat='"hu"'
15595                                 fi
15596                         fi
15597                 fi
15598         fi
15599         ;;
15600 esac
15601
15602 : determine compiler compiler
15603 case "$yacc" in
15604 '')
15605         dflt=yacc;;
15606 *)
15607         dflt="$yacc";;
15608 esac
15609 echo " "
15610 comp='yacc'
15611 if $test -f "$byacc"; then
15612         dflt="$byacc"
15613         comp="byacc or $comp"
15614 fi
15615 if $test -f "$bison"; then
15616         comp="$comp or bison -y"
15617 fi
15618 rp="Which compiler compiler ($comp) shall I use?"
15619 . ./myread
15620 yacc="$ans"
15621 case "$yacc" in
15622 *bis*)
15623         case "$yacc" in
15624         *-y*) ;;
15625         *)
15626                 yacc="$yacc -y"
15627                 echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
15628                 ;;
15629         esac
15630         ;;
15631 esac
15632
15633 : see if fcntl.h is there
15634 val=''
15635 set fcntl.h val
15636 eval $inhdr
15637
15638 : see if we can include fcntl.h
15639 case "$val" in
15640 "$define")
15641         echo " "
15642         if $h_fcntl; then
15643                 val="$define"
15644                 echo "We'll be including <fcntl.h>." >&4
15645         else
15646                 val="$undef"
15647                 if $h_sysfile; then
15648         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
15649                 else
15650                         echo "We won't be including <fcntl.h>." >&4
15651                 fi
15652         fi
15653         ;;
15654 *)
15655         h_fcntl=false
15656         val="$undef"
15657         ;;
15658 esac
15659 set i_fcntl
15660 eval $setvar
15661
15662 : see if this is a iconv.h system
15663 set iconv.h i_iconv
15664 eval $inhdr
15665
15666 : see if this is a ieeefp.h system
15667 set ieeefp.h i_ieeefp
15668 eval $inhdr
15669
15670 : see if this is a libutil.h system
15671 set libutil.h i_libutil
15672 eval $inhdr
15673
15674 : see if locale.h is available
15675 set locale.h i_locale
15676 eval $inhdr
15677
15678 : see if mach cthreads are available
15679 if test "X$usethreads" = "X$define"; then
15680         set mach/cthreads.h i_machcthr
15681         eval $inhdr
15682 else
15683         i_machcthr="$undef"
15684 fi
15685
15686
15687
15688 : see if this is a math.h system
15689 set math.h i_math
15690 eval $inhdr
15691
15692 : see if this is a mntent.h system
15693 set mntent.h i_mntent
15694 eval $inhdr
15695
15696 : see if ndbm.h is available
15697 set ndbm.h t_ndbm
15698 eval $inhdr
15699 case "$t_ndbm" in
15700 $define)
15701         : see if dbm_open exists
15702         set dbm_open d_dbm_open
15703         eval $inlibc
15704         case "$d_dbm_open" in
15705         $undef)
15706                 t_ndbm="$undef"
15707                 echo "We won't be including <ndbm.h>"
15708                 ;;
15709         esac
15710         ;;
15711 esac
15712 val="$t_ndbm"
15713 set i_ndbm
15714 eval $setvar
15715
15716 : see if net/errno.h is available
15717 val=''
15718 set net/errno.h val
15719 eval $inhdr
15720
15721 : Unfortunately, it causes problems on some systems.  Arrgh.
15722 case "$val" in
15723 $define)
15724         cat > try.c <<'EOM'
15725 #include <stdio.h>
15726 #include <errno.h>
15727 #include <net/errno.h>
15728 int func()
15729 {
15730         return ENOTSOCK;
15731 }
15732 EOM
15733         if $cc $ccflags -c try.c >/dev/null 2>&1; then
15734                 echo "We'll be including <net/errno.h>." >&4
15735         else
15736                 echo "We won't be including <net/errno.h>." >&4
15737                 val="$undef"
15738         fi
15739         $rm -f try.* try
15740         ;;
15741 esac
15742 set i_neterrno
15743 eval $setvar
15744
15745 : see if netinet/tcp.h is available
15746 set netinet/tcp.h i_netinettcp
15747 eval $inhdr
15748
15749 : see if this is a poll.h system
15750 set poll.h i_poll
15751 eval $inhdr
15752
15753 : see if this is a prot.h system
15754 set prot.h i_prot
15755 eval $inhdr
15756
15757 echo " "
15758 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
15759 $cat <<'EOSH' > Cppsym.know
15760 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
15761 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
15762 alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
15763 ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
15764 BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
15765 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
15766 bull c cadmus clipper CMU COFF COMPILER_VERSION
15767 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
15768 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
15769 Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
15770 FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
15771 GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
15772 H3050R H3050RX hbullx20 hcx host_mips
15773 hp200 hp300 hp700 HP700 hp800 hp9000
15774 hp9000s200 hp9000s300 hp9000s400 hp9000s500
15775 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
15776 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
15777 IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
15778 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
15779 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
15780 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
15781 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
15782 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
15783 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
15784 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
15785 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
15786 MATH_HAS_NO_SIDE_EFFECTS
15787 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
15788 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
15789 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
15790 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
15791 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
15792 NetBSD news1500 news1700 news1800 news1900 news3700
15793 news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
15794 ns32016 ns32332 ns32k nsc32000
15795 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
15796 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
15797 pc532 pdp11 PGC PIC plexus PORTAR posix
15798 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
15799 POSIX_C_SOURCE POSIX_SOURCE POWER
15800 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
15801 riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
15802 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
15803 sony sony_news sonyrisc sparc sparclite spectrum
15804 stardent stdc STDC_EXT stratos sun sun3 sun386
15805 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
15806 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
15807 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
15808 sysV68 sysV88 Tek4132 Tek4300 titan
15809 TM3200 TM5400 TM5600
15810 tower tower32 tower32_200 tower32_600 tower32_700
15811 tower32_800 tower32_850 tss
15812 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
15813 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
15814 unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
15815 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
15816 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
15817 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
15818 z8000
15819 EOSH
15820 # Maybe put other stuff here too.
15821 cat <<EOSH >>Cppsym.know
15822 $osname
15823 EOSH
15824 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
15825 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
15826 $cat Cppsym.know > Cppsym.c
15827 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
15828 $rm -f Cppsym.a Cppsym.b Cppsym.c
15829 cat <<EOSH > Cppsym
15830 $startsh
15831 if $test \$# -gt 0; then
15832     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
15833     if $test -s Cppsym.got; then
15834         $rm -f Cppsym.got
15835         exit 0
15836     fi
15837     $rm -f Cppsym.got
15838     exit 1
15839 else
15840     $tr " " "$trnl" | ./Cppsym.try
15841     exit 0
15842 fi
15843 EOSH
15844 chmod +x Cppsym
15845 $eunicefix Cppsym
15846 cat <<EOSH > Cppsym.try
15847 $startsh
15848 cat <<'EOCP' > try.c
15849 #include <stdio.h>
15850 int main() {
15851 EOCP
15852 $awk \\
15853 EOSH
15854 cat <<'EOSH' >> Cppsym.try
15855 'length($1) > 0 {
15856     printf "#ifdef %s\n#if %s+0\nprintf(\"%s=%%ld\\n\", (long)%s);\n#else\nprintf(\"%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
15857     printf "#ifdef _%s\n#if _%s+0\nprintf(\"_%s=%%ld\\n\", (long)_%s);\n#else\nprintf(\"_%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
15858     printf "#ifdef __%s\n#if __%s+0\nprintf(\"__%s=%%ld\\n\", (long)__%s);\n#else\nprintf(\"__%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
15859     printf "#ifdef __%s__\n#if __%s__+0\nprintf(\"__%s__=%%ld\\n\", (long)__%s__);\n#else\nprintf(\"__%s__\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
15860 }'       >> try.c
15861 echo 'return 0;}' >> try.c
15862 EOSH
15863 cat <<EOSH >> Cppsym.try
15864 ccflags="$ccflags"
15865 case "$osname-$gccversion" in
15866 irix-) ccflags="\$ccflags -woff 1178" ;;
15867 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
15868 esac
15869 $cc -o try $optimize \$ccflags $ldflags try.c $libs && $run ./try
15870 EOSH
15871 chmod +x Cppsym.try
15872 $eunicefix Cppsym.try
15873 ./Cppsym < Cppsym.know > Cppsym.true
15874 : now check the C compiler for additional symbols
15875 postprocess_cc_v=''
15876 case "$osname" in
15877 aix) postprocess_cc_v="|$tr , ' '" ;;
15878 esac
15879 $cat >ccsym <<EOS
15880 $startsh
15881 $cat >tmp.c <<EOF
15882 extern int foo;
15883 EOF
15884 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
15885 do
15886         case "\$i" in
15887         -D*) echo "\$i" | $sed 's/^-D//';;
15888         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
15889         esac
15890 done
15891 $rm -f try.c
15892 EOS
15893 postprocess_cc_v=''
15894 chmod +x ccsym
15895 $eunicefix ccsym
15896 ./ccsym > ccsym1.raw
15897 if $test -s ccsym1.raw; then
15898        $sort ccsym1.raw | $uniq >ccsym.raw
15899 else
15900        mv ccsym1.raw ccsym.raw
15901 fi
15902
15903 $awk '/\=/ { print $0; next }
15904         { print $0"=1" }' ccsym.raw >ccsym.list
15905 $awk '/\=/ { print $0; next }
15906         { print $0"=1" }' Cppsym.true >ccsym.true
15907 $comm -13 ccsym.true ccsym.list >ccsym.own
15908 $comm -12 ccsym.true ccsym.list >ccsym.com
15909 $comm -23 ccsym.true ccsym.list >ccsym.cpp
15910 also=''
15911 if $test -z ccsym.raw; then
15912         echo "Your C compiler doesn't seem to define any symbols!" >&4
15913         echo " "
15914         echo "However, your C preprocessor defines the following symbols:"
15915         $cat Cppsym.true
15916         ccsymbols=''
15917         cppsymbols=`$cat Cppsym.true`
15918         cppsymbols=`echo $cppsymbols`
15919         cppccsymbols="$cppsymbols"
15920 else
15921         if $test -s ccsym.com; then
15922                 echo "Your C compiler and pre-processor define these symbols:"
15923                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
15924                 also='also '
15925                 symbols='ones'
15926                 cppccsymbols=`$cat ccsym.com`
15927                 cppccsymbols=`echo $cppccsymbols`
15928                 $test "$silent" || sleep 1
15929         fi
15930         if $test -s ccsym.cpp; then
15931                 $test "$also" && echo " "
15932                 echo "Your C pre-processor ${also}defines the following symbols:"
15933                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
15934                 also='further '
15935                 cppsymbols=`$cat ccsym.cpp`
15936                 cppsymbols=`echo $cppsymbols`
15937                 $test "$silent" || sleep 1
15938         fi
15939         if $test -s ccsym.own; then
15940                 $test "$also" && echo " "
15941                 echo "Your C compiler ${also}defines the following cpp symbols:"
15942                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
15943                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
15944                 ccsymbols=`$cat ccsym.own`
15945                 ccsymbols=`echo $ccsymbols`
15946                 $test "$silent" || sleep 1
15947         fi
15948 fi
15949
15950 : see if this is a termio system
15951 val="$undef"
15952 val2="$undef"
15953 val3="$undef"
15954 if $test `./findhdr termios.h`; then
15955         set tcsetattr i_termios
15956         eval $inlibc
15957         val3="$i_termios"
15958 fi
15959 echo " "
15960 case "$val3" in
15961 "$define") echo "You have POSIX termios.h... good!" >&4;;
15962 *) if ./Cppsym pyr; then
15963                 case "`/bin/universe`" in
15964                 ucb) if $test `./findhdr sgtty.h`; then
15965                                 val2="$define"
15966                                 echo "<sgtty.h> found." >&4
15967                         else
15968                                 echo "System is pyramid with BSD universe."
15969                                 echo "<sgtty.h> not found--you could have problems." >&4
15970                         fi;;
15971                 *) if $test `./findhdr termio.h`; then
15972                                 val="$define"
15973                                 echo "<termio.h> found." >&4
15974                         else
15975                                 echo "System is pyramid with USG universe."
15976                                 echo "<termio.h> not found--you could have problems." >&4
15977                         fi;;
15978                 esac
15979         elif ./usg; then
15980                 if $test `./findhdr termio.h`; then
15981                         echo "<termio.h> found." >&4
15982                         val="$define"
15983                 elif $test `./findhdr sgtty.h`; then
15984                         echo "<sgtty.h> found." >&4
15985                         val2="$define"
15986                 else
15987 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
15988                 fi
15989         else
15990                 if $test `./findhdr sgtty.h`; then
15991                         echo "<sgtty.h> found." >&4
15992                         val2="$define"
15993                 elif $test `./findhdr termio.h`; then
15994                         echo "<termio.h> found." >&4
15995                         val="$define"
15996                 else
15997 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
15998                 fi
15999         fi;;
16000 esac
16001 set i_termio; eval $setvar
16002 val=$val2; set i_sgtty; eval $setvar
16003 val=$val3; set i_termios; eval $setvar
16004
16005 : see if this is a shadow.h system
16006 set shadow.h i_shadow
16007 eval $inhdr
16008
16009 : see if stddef is available
16010 set stddef.h i_stddef
16011 eval $inhdr
16012
16013 : see if this is a sunmath.h system
16014 set sunmath.h i_sunmath
16015 eval $inhdr
16016
16017 : see if sys/access.h is available
16018 set sys/access.h i_sysaccess
16019 eval $inhdr
16020
16021 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
16022 set sys/filio.h i_sysfilio
16023 eval $inhdr
16024 echo " "
16025 if $test `./findhdr sys/ioctl.h`; then
16026         val="$define"
16027         echo '<sys/ioctl.h> found.' >&4
16028 else
16029         val="$undef"
16030         if $test $i_sysfilio = "$define"; then
16031             echo '<sys/ioctl.h> NOT found.' >&4
16032         else
16033                 $test $i_sgtty = "$define" && xxx="sgtty.h"
16034                 $test $i_termio = "$define" && xxx="termio.h"
16035                 $test $i_termios = "$define" && xxx="termios.h"
16036 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
16037         fi
16038 fi
16039 set i_sysioctl
16040 eval $setvar
16041
16042 : see if socket ioctl defs are in sys/sockio.h
16043 echo " "
16044 xxx=`./findhdr sys/sockio.h`
16045 if $test "$xxx"; then
16046         if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
16047                 val="$define"
16048                 echo "You have socket ioctls defined in <sys/sockio.h>." >&4
16049         else
16050                 val="$undef"
16051                 echo "No socket ioctls found in <sys/sockio.h>." >&4
16052         fi
16053 else
16054         val="$undef"
16055         $cat <<EOM
16056 <sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
16057 EOM
16058 fi
16059 set i_syssockio
16060 eval $setvar
16061
16062
16063 : see if this is a syslog.h system
16064 set syslog.h i_syslog
16065 eval $inhdr
16066
16067
16068 : see if this is a sys/mode.h system
16069 set sys/mode.h i_sysmode
16070 eval $inhdr
16071
16072 : see if sys/resource.h has to be included
16073 set sys/resource.h i_sysresrc
16074 eval $inhdr
16075
16076 : see if sys/security.h is available
16077 set sys/security.h i_syssecrt
16078 eval $inhdr
16079
16080 : see if this is a sys/statvfs.h system
16081 set sys/statvfs.h i_sysstatvfs
16082 eval $inhdr
16083
16084 : see if this is a sys/un.h system
16085 set sys/un.h i_sysun
16086 eval $inhdr
16087
16088
16089 : see if this is a sys/utsname.h system
16090 set sys/utsname.h i_sysutsname
16091 eval $inhdr
16092
16093 : see if this is a syswait system
16094 set sys/wait.h i_syswait
16095 eval $inhdr
16096
16097 : see if this is a ustat.h system
16098 set ustat.h i_ustat
16099 eval $inhdr
16100
16101 : see if this is an utime system
16102 set utime.h i_utime
16103 eval $inhdr
16104
16105 : see if this is a values.h system
16106 set values.h i_values
16107 eval $inhdr
16108
16109 : see if this is a vfork system
16110 case "$d_vfork" in
16111 "$define")
16112         set vfork.h i_vfork
16113         eval $inhdr
16114         ;;
16115 *)
16116         i_vfork="$undef"
16117         ;;
16118 esac
16119
16120 : see if gdbm.h is available
16121 set gdbm.h t_gdbm
16122 eval $inhdr
16123 case "$t_gdbm" in
16124 $define)
16125         : see if gdbm_open exists
16126         set gdbm_open d_gdbm_open
16127         eval $inlibc
16128         case "$d_gdbm_open" in
16129         $undef)
16130                 t_gdbm="$undef"
16131                 echo "We won't be including <gdbm.h>"
16132                 ;;
16133         esac
16134         ;;
16135 esac
16136 val="$t_gdbm"
16137 set i_gdbm
16138 eval $setvar
16139
16140 echo " "
16141 echo "Looking for extensions..." >&4
16142 : If we are using the old config.sh, known_extensions may contain
16143 : old or inaccurate or duplicate values.
16144 known_extensions=''
16145 nonxs_extensions=''
16146 : We do not use find because it might not be available.
16147 : We do not just use MANIFEST because the user may have dropped
16148 : some additional extensions into the source tree and expect them
16149 : to be built.
16150
16151 : Function to recursively find available extensions, ignoring DynaLoader
16152 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
16153 find_extensions='
16154     for xxx in *; do
16155        case "$xxx" in
16156            DynaLoader|dynaload) ;;
16157            *)
16158            if $test -f $xxx/$xxx.xs; then
16159                known_extensions="$known_extensions $1$xxx";
16160            elif $test -f $xxx/Makefile.PL; then
16161                nonxs_extensions="$nonxs_extensions $1$xxx";
16162            else
16163                if $test -d $xxx -a $# -lt 10; then
16164                    set $1$xxx/ $*;
16165                    cd $xxx;
16166                    eval $find_extensions;
16167                    cd ..;
16168                    shift;
16169                fi;
16170            fi
16171            ;;
16172        esac;
16173     done'
16174 tdir=`pwd`
16175 cd $rsrc/ext
16176 set X
16177 shift
16178 eval $find_extensions
16179 set X $nonxs_extensions
16180 shift
16181 nonxs_extensions="$*"
16182 set X $known_extensions
16183 shift
16184 known_extensions="$*"
16185 cd $tdir
16186
16187 : Now see which are supported on this system.
16188 avail_ext=''
16189 for xxx in $known_extensions ; do
16190         case "$xxx" in
16191         DB_File|db_file)
16192                 case "$i_db" in
16193                 $define) avail_ext="$avail_ext $xxx" ;;
16194                 esac
16195                 ;;
16196         GDBM_File|gdbm_fil)
16197                 case "$i_gdbm" in 
16198                 $define) avail_ext="$avail_ext $xxx" ;;
16199                 esac
16200                 ;;
16201         NDBM_File|ndbm_fil)
16202                 case "$i_ndbm" in
16203                 $define)
16204                     case "$osname-$use64bitint" in
16205                     hpux-define)
16206                         case "$libs" in
16207                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
16208                         esac
16209                         ;;
16210                     *) avail_ext="$avail_ext $xxx" ;;
16211                     esac
16212                     ;;
16213                 esac
16214                 ;;
16215         ODBM_File|odbm_fil) 
16216                 case "${i_dbm}${i_rpcsvcdbm}" in
16217                 *"${define}"*)
16218                     case "$osname-$use64bitint" in
16219                     hpux-define)
16220                         case "$libs" in
16221                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
16222                         esac
16223                         ;;
16224                     *) avail_ext="$avail_ext $xxx" ;;
16225                     esac
16226                     ;;
16227                 esac
16228                 ;;
16229         POSIX|posix)
16230                 case "$useposix" in
16231                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16232                 esac
16233                 ;;
16234         Opcode|opcode)
16235                 case "$useopcode" in
16236                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16237                 esac
16238                 ;;
16239         Socket|socket)
16240                 case "$d_socket" in 
16241                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16242                 esac
16243                 ;;
16244         Sys/Syslog|sys/syslog)
16245                 : XXX syslog requires socket
16246                 case "$d_socket" in 
16247                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16248                 esac
16249                 ;;
16250         Thread|thread)
16251                 case "$usethreads" in
16252                 true|$define|y)
16253                         case "$useithreads" in
16254                         $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;;
16255                         esac
16256                 esac
16257                 ;;
16258         IPC/SysV|ipc/sysv)
16259                 : XXX Do we need a useipcsysv variable here
16260                 case "${d_msg}${d_sem}${d_shm}" in 
16261                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
16262                 esac
16263                 ;;
16264         *)      avail_ext="$avail_ext $xxx"
16265                 ;;
16266         esac
16267 done
16268
16269 set X $avail_ext
16270 shift
16271 avail_ext="$*"
16272
16273 : Now see which nonxs extensions are supported on this system.
16274 : For now assume all are.
16275 nonxs_ext=''
16276 for xxx in $nonxs_extensions ; do
16277         case "$xxx" in
16278         *)      nonxs_ext="$nonxs_ext $xxx"
16279                 ;;
16280         esac
16281 done
16282
16283 set X $nonxs_ext
16284 shift
16285 nonxs_ext="$*"
16286
16287 case $usedl in
16288 $define)
16289         $cat <<EOM
16290 A number of extensions are supplied with $package.  You may choose to
16291 compile these extensions for dynamic loading (the default), compile
16292 them into the $package executable (static loading), or not include
16293 them at all.  Answer "none" to include no extensions.
16294 Note that DynaLoader is always built and need not be mentioned here.
16295
16296 EOM
16297         case "$dynamic_ext" in
16298         '') dflt="$avail_ext" ;;
16299         *)      dflt="$dynamic_ext"
16300                 # Perhaps we are reusing an old out-of-date config.sh.
16301                 case "$hint" in
16302                 previous)
16303                         if test X"$dynamic_ext" != X"$avail_ext"; then
16304                                 $cat <<EOM
16305 NOTICE:  Your previous config.sh list may be incorrect. 
16306 The extensions now available to you are 
16307         ${avail_ext}
16308 but the default list from your previous config.sh is
16309         ${dynamic_ext} 
16310
16311 EOM
16312                         fi
16313                         ;;
16314                 esac
16315                 ;;
16316         esac
16317         case "$dflt" in
16318         '')     dflt=none;;
16319         esac
16320         rp="What extensions do you wish to load dynamically?"
16321         . ./myread
16322         case "$ans" in
16323         none) dynamic_ext=' ' ;;
16324         *) dynamic_ext="$ans" ;;
16325         esac
16326
16327         case "$static_ext" in
16328         '')
16329                 : Exclude those already listed in dynamic linking
16330                 dflt=''
16331                 for xxx in $avail_ext; do
16332                         case " $dynamic_ext " in
16333                         *" $xxx "*) ;;
16334                         *) dflt="$dflt $xxx" ;;
16335                         esac
16336                 done
16337                 set X $dflt
16338                 shift
16339                 dflt="$*"
16340                 ;;
16341         *)  dflt="$static_ext" 
16342                 ;;
16343         esac
16344
16345         case "$dflt" in
16346         '')     dflt=none;;
16347         esac
16348         rp="What extensions do you wish to load statically?"
16349         . ./myread
16350         case "$ans" in
16351         none) static_ext=' ' ;;
16352         *) static_ext="$ans" ;;
16353         esac
16354         ;;
16355 *)
16356         $cat <<EOM
16357 A number of extensions are supplied with $package.  Answer "none" 
16358 to include no extensions. 
16359 Note that DynaLoader is always built and need not be mentioned here.
16360
16361 EOM
16362         case "$static_ext" in
16363         '') dflt="$avail_ext" ;;
16364         *)      dflt="$static_ext"
16365                 # Perhaps we are reusing an old out-of-date config.sh.
16366                 case "$hint" in
16367                 previous)
16368                         if test X"$static_ext" != X"$avail_ext"; then
16369                                 $cat <<EOM
16370 NOTICE:  Your previous config.sh list may be incorrect. 
16371 The extensions now available to you are 
16372         ${avail_ext}
16373 but the default list from your previous config.sh is
16374         ${static_ext} 
16375
16376 EOM
16377                         fi
16378                         ;;
16379                 esac
16380                 ;;
16381         esac
16382         : Exclude those that are not xs extensions
16383         case "$dflt" in
16384         '')     dflt=none;;
16385         esac
16386         rp="What extensions do you wish to include?"
16387         . ./myread
16388         case "$ans" in
16389         none) static_ext=' ' ;;
16390         *) static_ext="$ans" ;;
16391         esac
16392         ;;
16393 esac
16394
16395 set X $dynamic_ext $static_ext $nonxs_ext
16396 shift
16397 extensions="$*"
16398
16399 : Remove libraries needed only for extensions
16400 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
16401 : The exception is SunOS 4.x, which needs them.
16402 case "${osname}X${osvers}" in
16403 sunos*X4*)
16404     perllibs="$libs"
16405     ;;
16406 *) case "$usedl" in
16407     $define|true|[yY]*)
16408             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'` 
16409             shift
16410             perllibs="$*"
16411             ;;
16412     *)  perllibs="$libs"
16413             ;;
16414     esac
16415     ;;
16416 esac
16417
16418 : Remove build directory name from cppstdin so it can be used from
16419 : either the present location or the final installed location.
16420 echo " "
16421 : Get out of the UU directory to get correct path name.
16422 cd ..
16423 case "$cppstdin" in
16424 `pwd`/cppstdin)
16425         echo "Stripping down cppstdin path name"
16426         cppstdin=cppstdin
16427         ;;
16428 esac
16429 cd UU
16430
16431 : end of configuration questions
16432 echo " "
16433 echo "End of configuration questions."
16434 echo " "
16435
16436 : back to where it started
16437 if test -d ../UU; then
16438         cd ..
16439 fi
16440
16441 : configuration may be patched via a 'config.over' file
16442 if $test -f config.over; then
16443         echo " "
16444         dflt=y
16445         rp='I see a config.over file.  Do you wish to load it?'
16446         . UU/myread
16447         case "$ans" in
16448         n*) echo "OK, I'll ignore it.";;
16449         *)      . ./config.over
16450                 echo "Configuration override changes have been loaded."
16451                 ;;
16452         esac
16453 fi
16454
16455 : in case they want portability, strip down executable paths
16456 case "$d_portable" in
16457 "$define")
16458         echo " "
16459         echo "Stripping down executable paths..." >&4
16460         for file in $loclist $trylist; do
16461                 eval temp=\$$file
16462                 eval $file=`basename $temp`
16463         done
16464         ;;
16465 esac
16466
16467 : create config.sh file
16468 echo " "
16469 echo "Creating config.sh..." >&4
16470 $spitshell <<EOT >config.sh
16471 $startsh
16472 #
16473 # This file was produced by running the Configure script. It holds all the
16474 # definitions figured out by Configure. Should you modify one of these values,
16475 # do not forget to propagate your changes by running "Configure -der". You may
16476 # instead choose to run each of the .SH files by yourself, or "Configure -S".
16477 #
16478
16479 # Package name      : $package
16480 # Source directory  : $src
16481 # Configuration time: $cf_time
16482 # Configured by     : $cf_by
16483 # Target system     : $myuname
16484
16485 Author='$Author'
16486 Date='$Date'
16487 Header='$Header'
16488 Id='$Id'
16489 Locker='$Locker'
16490 Log='$Log'
16491 Mcc='$Mcc'
16492 RCSfile='$RCSfile'
16493 Revision='$Revision'
16494 Source='$Source'
16495 State='$State'
16496 _a='$_a'
16497 _exe='$_exe'
16498 _o='$_o'
16499 afs='$afs'
16500 afsroot='$afsroot'
16501 alignbytes='$alignbytes'
16502 ansi2knr='$ansi2knr'
16503 aphostname='$aphostname'
16504 api_revision='$api_revision'
16505 api_subversion='$api_subversion'
16506 api_version='$api_version'
16507 api_versionstring='$api_versionstring'
16508 ar='$ar'
16509 archlib='$archlib'
16510 archlibexp='$archlibexp'
16511 archname64='$archname64'
16512 archname='$archname'
16513 archobjs='$archobjs'
16514 awk='$awk'
16515 baserev='$baserev'
16516 bash='$bash'
16517 bin='$bin'
16518 bincompat5005='$bincompat5005'
16519 binexp='$binexp'
16520 bison='$bison'
16521 byacc='$byacc'
16522 byteorder='$byteorder'
16523 c='$c'
16524 castflags='$castflags'
16525 cat='$cat'
16526 cc='$cc'
16527 cccdlflags='$cccdlflags'
16528 ccdlflags='$ccdlflags'
16529 ccflags='$ccflags'
16530 ccflags_uselargefiles='$ccflags_uselargefiles'
16531 ccname='$ccname'
16532 ccsymbols='$ccsymbols'
16533 ccversion='$ccversion'
16534 cf_by='$cf_by'
16535 cf_email='$cf_email'
16536 cf_time='$cf_time'
16537 charsize='$charsize'
16538 chgrp='$chgrp'
16539 chmod='$chmod'
16540 chown='$chown'
16541 clocktype='$clocktype'
16542 comm='$comm'
16543 compress='$compress'
16544 contains='$contains'
16545 cp='$cp'
16546 cpio='$cpio'
16547 cpp='$cpp'
16548 cpp_stuff='$cpp_stuff'
16549 cppccsymbols='$cppccsymbols'
16550 cppflags='$cppflags'
16551 cpplast='$cpplast'
16552 cppminus='$cppminus'
16553 cpprun='$cpprun'
16554 cppstdin='$cppstdin'
16555 cppsymbols='$cppsymbols'
16556 cryptlib='$cryptlib'
16557 csh='$csh'
16558 d_Gconvert='$d_Gconvert'
16559 d_PRIEUldbl='$d_PRIEUldbl'
16560 d_PRIFUldbl='$d_PRIFUldbl'
16561 d_PRIGUldbl='$d_PRIGUldbl'
16562 d_PRIXU64='$d_PRIXU64'
16563 d_PRId64='$d_PRId64'
16564 d_PRIeldbl='$d_PRIeldbl'
16565 d_PRIfldbl='$d_PRIfldbl'
16566 d_PRIgldbl='$d_PRIgldbl'
16567 d_PRIi64='$d_PRIi64'
16568 d_PRIo64='$d_PRIo64'
16569 d_PRIu64='$d_PRIu64'
16570 d_PRIx64='$d_PRIx64'
16571 d_SCNfldbl='$d_SCNfldbl'
16572 d__fwalk='$d__fwalk'
16573 d_access='$d_access'
16574 d_accessx='$d_accessx'
16575 d_alarm='$d_alarm'
16576 d_archlib='$d_archlib'
16577 d_atolf='$d_atolf'
16578 d_atoll='$d_atoll'
16579 d_attribut='$d_attribut'
16580 d_bcmp='$d_bcmp'
16581 d_bcopy='$d_bcopy'
16582 d_bincompat5005='$d_bincompat5005'
16583 d_bsd='$d_bsd'
16584 d_bsdgetpgrp='$d_bsdgetpgrp'
16585 d_bsdsetpgrp='$d_bsdsetpgrp'
16586 d_bzero='$d_bzero'
16587 d_casti32='$d_casti32'
16588 d_castneg='$d_castneg'
16589 d_charvspr='$d_charvspr'
16590 d_chown='$d_chown'
16591 d_chroot='$d_chroot'
16592 d_chsize='$d_chsize'
16593 d_closedir='$d_closedir'
16594 d_cmsghdr_s='$d_cmsghdr_s'
16595 d_const='$d_const'
16596 d_crypt='$d_crypt'
16597 d_csh='$d_csh'
16598 d_cuserid='$d_cuserid'
16599 d_dbl_dig='$d_dbl_dig'
16600 d_dbminitproto='$d_dbminitproto'
16601 d_difftime='$d_difftime'
16602 d_dirnamlen='$d_dirnamlen'
16603 d_dlerror='$d_dlerror'
16604 d_dlopen='$d_dlopen'
16605 d_dlsymun='$d_dlsymun'
16606 d_dosuid='$d_dosuid'
16607 d_drand48proto='$d_drand48proto'
16608 d_dup2='$d_dup2'
16609 d_eaccess='$d_eaccess'
16610 d_endgrent='$d_endgrent'
16611 d_endhent='$d_endhent'
16612 d_endnent='$d_endnent'
16613 d_endpent='$d_endpent'
16614 d_endpwent='$d_endpwent'
16615 d_endsent='$d_endsent'
16616 d_eofnblk='$d_eofnblk'
16617 d_eunice='$d_eunice'
16618 d_fchmod='$d_fchmod'
16619 d_fchown='$d_fchown'
16620 d_fcntl='$d_fcntl'
16621 d_fcntl_can_lock='$d_fcntl_can_lock'
16622 d_fd_macros='$d_fd_macros'
16623 d_fd_set='$d_fd_set'
16624 d_fds_bits='$d_fds_bits'
16625 d_fgetpos='$d_fgetpos'
16626 d_flexfnam='$d_flexfnam'
16627 d_flock='$d_flock'
16628 d_flockproto='$d_flockproto'
16629 d_fork='$d_fork'
16630 d_fpathconf='$d_fpathconf'
16631 d_fpos64_t='$d_fpos64_t'
16632 d_frexpl='$d_frexpl'
16633 d_fs_data_s='$d_fs_data_s'
16634 d_fseeko='$d_fseeko'
16635 d_fsetpos='$d_fsetpos'
16636 d_fstatfs='$d_fstatfs'
16637 d_fstatvfs='$d_fstatvfs'
16638 d_fsync='$d_fsync'
16639 d_ftello='$d_ftello'
16640 d_ftime='$d_ftime'
16641 d_getcwd='$d_getcwd'
16642 d_getespwnam='$d_getespwnam'
16643 d_getfsstat='$d_getfsstat'
16644 d_getgrent='$d_getgrent'
16645 d_getgrps='$d_getgrps'
16646 d_gethbyaddr='$d_gethbyaddr'
16647 d_gethbyname='$d_gethbyname'
16648 d_gethent='$d_gethent'
16649 d_gethname='$d_gethname'
16650 d_gethostprotos='$d_gethostprotos'
16651 d_getitimer='$d_getitimer'
16652 d_getlogin='$d_getlogin'
16653 d_getmnt='$d_getmnt'
16654 d_getmntent='$d_getmntent'
16655 d_getnbyaddr='$d_getnbyaddr'
16656 d_getnbyname='$d_getnbyname'
16657 d_getnent='$d_getnent'
16658 d_getnetprotos='$d_getnetprotos'
16659 d_getpagsz='$d_getpagsz'
16660 d_getpbyname='$d_getpbyname'
16661 d_getpbynumber='$d_getpbynumber'
16662 d_getpent='$d_getpent'
16663 d_getpgid='$d_getpgid'
16664 d_getpgrp2='$d_getpgrp2'
16665 d_getpgrp='$d_getpgrp'
16666 d_getppid='$d_getppid'
16667 d_getprior='$d_getprior'
16668 d_getprotoprotos='$d_getprotoprotos'
16669 d_getprpwnam='$d_getprpwnam'
16670 d_getpwent='$d_getpwent'
16671 d_getsbyname='$d_getsbyname'
16672 d_getsbyport='$d_getsbyport'
16673 d_getsent='$d_getsent'
16674 d_getservprotos='$d_getservprotos'
16675 d_getspnam='$d_getspnam'
16676 d_gettimeod='$d_gettimeod'
16677 d_gnulibc='$d_gnulibc'
16678 d_grpasswd='$d_grpasswd'
16679 d_hasmntopt='$d_hasmntopt'
16680 d_htonl='$d_htonl'
16681 d_iconv='$d_iconv'
16682 d_index='$d_index'
16683 d_inetaton='$d_inetaton'
16684 d_int64_t='$d_int64_t'
16685 d_isascii='$d_isascii'
16686 d_isnan='$d_isnan'
16687 d_isnanl='$d_isnanl'
16688 d_killpg='$d_killpg'
16689 d_lchown='$d_lchown'
16690 d_ldbl_dig='$d_ldbl_dig'
16691 d_link='$d_link'
16692 d_locconv='$d_locconv'
16693 d_lockf='$d_lockf'
16694 d_longdbl='$d_longdbl'
16695 d_longlong='$d_longlong'
16696 d_lseekproto='$d_lseekproto'
16697 d_lstat='$d_lstat'
16698 d_madvise='$d_madvise'
16699 d_mblen='$d_mblen'
16700 d_mbstowcs='$d_mbstowcs'
16701 d_mbtowc='$d_mbtowc'
16702 d_memchr='$d_memchr'
16703 d_memcmp='$d_memcmp'
16704 d_memcpy='$d_memcpy'
16705 d_memmove='$d_memmove'
16706 d_memset='$d_memset'
16707 d_mkdir='$d_mkdir'
16708 d_mkdtemp='$d_mkdtemp'
16709 d_mkfifo='$d_mkfifo'
16710 d_mkstemp='$d_mkstemp'
16711 d_mkstemps='$d_mkstemps'
16712 d_mktime='$d_mktime'
16713 d_mmap='$d_mmap'
16714 d_modfl='$d_modfl'
16715 d_modfl_pow32_bug='$d_modfl_pow32_bug'
16716 d_mprotect='$d_mprotect'
16717 d_msg='$d_msg'
16718 d_msg_ctrunc='$d_msg_ctrunc'
16719 d_msg_dontroute='$d_msg_dontroute'
16720 d_msg_oob='$d_msg_oob'
16721 d_msg_peek='$d_msg_peek'
16722 d_msg_proxy='$d_msg_proxy'
16723 d_msgctl='$d_msgctl'
16724 d_msgget='$d_msgget'
16725 d_msghdr_s='$d_msghdr_s'
16726 d_msgrcv='$d_msgrcv'
16727 d_msgsnd='$d_msgsnd'
16728 d_msync='$d_msync'
16729 d_munmap='$d_munmap'
16730 d_mymalloc='$d_mymalloc'
16731 d_nice='$d_nice'
16732 d_nv_preserves_uv='$d_nv_preserves_uv'
16733 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
16734 d_off64_t='$d_off64_t'
16735 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
16736 d_oldpthreads='$d_oldpthreads'
16737 d_oldsock='$d_oldsock'
16738 d_open3='$d_open3'
16739 d_pathconf='$d_pathconf'
16740 d_pause='$d_pause'
16741 d_perl_otherlibdirs='$d_perl_otherlibdirs'
16742 d_phostname='$d_phostname'
16743 d_pipe='$d_pipe'
16744 d_poll='$d_poll'
16745 d_portable='$d_portable'
16746 d_pthread_yield='$d_pthread_yield'
16747 d_pwage='$d_pwage'
16748 d_pwchange='$d_pwchange'
16749 d_pwclass='$d_pwclass'
16750 d_pwcomment='$d_pwcomment'
16751 d_pwexpire='$d_pwexpire'
16752 d_pwgecos='$d_pwgecos'
16753 d_pwpasswd='$d_pwpasswd'
16754 d_pwquota='$d_pwquota'
16755 d_qgcvt='$d_qgcvt'
16756 d_quad='$d_quad'
16757 d_readdir='$d_readdir'
16758 d_readlink='$d_readlink'
16759 d_readv='$d_readv'
16760 d_recvmsg='$d_recvmsg'
16761 d_rename='$d_rename'
16762 d_rewinddir='$d_rewinddir'
16763 d_rmdir='$d_rmdir'
16764 d_safebcpy='$d_safebcpy'
16765 d_safemcpy='$d_safemcpy'
16766 d_sanemcmp='$d_sanemcmp'
16767 d_sbrkproto='$d_sbrkproto'
16768 d_sched_yield='$d_sched_yield'
16769 d_scm_rights='$d_scm_rights'
16770 d_seekdir='$d_seekdir'
16771 d_select='$d_select'
16772 d_sem='$d_sem'
16773 d_semctl='$d_semctl'
16774 d_semctl_semid_ds='$d_semctl_semid_ds'
16775 d_semctl_semun='$d_semctl_semun'
16776 d_semget='$d_semget'
16777 d_semop='$d_semop'
16778 d_sendmsg='$d_sendmsg'
16779 d_setegid='$d_setegid'
16780 d_seteuid='$d_seteuid'
16781 d_setgrent='$d_setgrent'
16782 d_setgrps='$d_setgrps'
16783 d_sethent='$d_sethent'
16784 d_setitimer='$d_setitimer'
16785 d_setlinebuf='$d_setlinebuf'
16786 d_setlocale='$d_setlocale'
16787 d_setnent='$d_setnent'
16788 d_setpent='$d_setpent'
16789 d_setpgid='$d_setpgid'
16790 d_setpgrp2='$d_setpgrp2'
16791 d_setpgrp='$d_setpgrp'
16792 d_setprior='$d_setprior'
16793 d_setproctitle='$d_setproctitle'
16794 d_setpwent='$d_setpwent'
16795 d_setregid='$d_setregid'
16796 d_setresgid='$d_setresgid'
16797 d_setresuid='$d_setresuid'
16798 d_setreuid='$d_setreuid'
16799 d_setrgid='$d_setrgid'
16800 d_setruid='$d_setruid'
16801 d_setsent='$d_setsent'
16802 d_setsid='$d_setsid'
16803 d_setvbuf='$d_setvbuf'
16804 d_sfio='$d_sfio'
16805 d_shm='$d_shm'
16806 d_shmat='$d_shmat'
16807 d_shmatprototype='$d_shmatprototype'
16808 d_shmctl='$d_shmctl'
16809 d_shmdt='$d_shmdt'
16810 d_shmget='$d_shmget'
16811 d_sigaction='$d_sigaction'
16812 d_sigprocmask='$d_sigprocmask'
16813 d_sigsetjmp='$d_sigsetjmp'
16814 d_sockatmark='$d_sockatmark'
16815 d_sockatmarkproto='$d_sockatmarkproto'
16816 d_socket='$d_socket'
16817 d_socklen_t='$d_socklen_t'
16818 d_sockpair='$d_sockpair'
16819 d_socks5_init='$d_socks5_init'
16820 d_sqrtl='$d_sqrtl'
16821 d_sresgproto='$d_sresgproto'
16822 d_sresuproto='$d_sresuproto'
16823 d_statblks='$d_statblks'
16824 d_statfs_f_flags='$d_statfs_f_flags'
16825 d_statfs_s='$d_statfs_s'
16826 d_statvfs='$d_statvfs'
16827 d_stdio_cnt_lval='$d_stdio_cnt_lval'
16828 d_stdio_ptr_lval='$d_stdio_ptr_lval'
16829 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
16830 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
16831 d_stdio_stream_array='$d_stdio_stream_array'
16832 d_stdiobase='$d_stdiobase'
16833 d_stdstdio='$d_stdstdio'
16834 d_strchr='$d_strchr'
16835 d_strcoll='$d_strcoll'
16836 d_strctcpy='$d_strctcpy'
16837 d_strerrm='$d_strerrm'
16838 d_strerror='$d_strerror'
16839 d_strftime='$d_strftime'
16840 d_strtod='$d_strtod'
16841 d_strtol='$d_strtol'
16842 d_strtold='$d_strtold'
16843 d_strtoll='$d_strtoll'
16844 d_strtoq='$d_strtoq'
16845 d_strtoul='$d_strtoul'
16846 d_strtoull='$d_strtoull'
16847 d_strtouq='$d_strtouq'
16848 d_strxfrm='$d_strxfrm'
16849 d_suidsafe='$d_suidsafe'
16850 d_symlink='$d_symlink'
16851 d_syscall='$d_syscall'
16852 d_syscallproto='$d_syscallproto'
16853 d_sysconf='$d_sysconf'
16854 d_sysernlst='$d_sysernlst'
16855 d_syserrlst='$d_syserrlst'
16856 d_system='$d_system'
16857 d_tcgetpgrp='$d_tcgetpgrp'
16858 d_tcsetpgrp='$d_tcsetpgrp'
16859 d_telldir='$d_telldir'
16860 d_telldirproto='$d_telldirproto'
16861 d_time='$d_time'
16862 d_times='$d_times'
16863 d_truncate='$d_truncate'
16864 d_tzname='$d_tzname'
16865 d_u32align='$d_u32align'
16866 d_ualarm='$d_ualarm'
16867 d_umask='$d_umask'
16868 d_uname='$d_uname'
16869 d_union_semun='$d_union_semun'
16870 d_usleep='$d_usleep'
16871 d_usleepproto='$d_usleepproto'
16872 d_ustat='$d_ustat'
16873 d_vendorarch='$d_vendorarch'
16874 d_vendorbin='$d_vendorbin'
16875 d_vendorlib='$d_vendorlib'
16876 d_vfork='$d_vfork'
16877 d_void_closedir='$d_void_closedir'
16878 d_voidsig='$d_voidsig'
16879 d_voidtty='$d_voidtty'
16880 d_volatile='$d_volatile'
16881 d_vprintf='$d_vprintf'
16882 d_wait4='$d_wait4'
16883 d_waitpid='$d_waitpid'
16884 d_wcstombs='$d_wcstombs'
16885 d_wctomb='$d_wctomb'
16886 d_writev='$d_writev'
16887 d_xenix='$d_xenix'
16888 date='$date'
16889 db_hashtype='$db_hashtype'
16890 db_prefixtype='$db_prefixtype'
16891 db_version_major='$db_version_major'
16892 db_version_minor='$db_version_minor'
16893 db_version_patch='$db_version_patch'
16894 defvoidused='$defvoidused'
16895 direntrytype='$direntrytype'
16896 dlext='$dlext'
16897 dlsrc='$dlsrc'
16898 doublesize='$doublesize'
16899 drand01='$drand01'
16900 dynamic_ext='$dynamic_ext'
16901 eagain='$eagain'
16902 ebcdic='$ebcdic'
16903 echo='$echo'
16904 egrep='$egrep'
16905 emacs='$emacs'
16906 eunicefix='$eunicefix'
16907 exe_ext='$exe_ext'
16908 expr='$expr'
16909 extensions='$extensions'
16910 fflushNULL='$fflushNULL'
16911 fflushall='$fflushall'
16912 find='$find'
16913 firstmakefile='$firstmakefile'
16914 flex='$flex'
16915 fpossize='$fpossize'
16916 fpostype='$fpostype'
16917 freetype='$freetype'
16918 from='$from'
16919 full_ar='$full_ar'
16920 full_csh='$full_csh'
16921 full_sed='$full_sed'
16922 gccosandvers='$gccosandvers'
16923 gccversion='$gccversion'
16924 gidformat='$gidformat'
16925 gidsign='$gidsign'
16926 gidsize='$gidsize'
16927 gidtype='$gidtype'
16928 glibpth='$glibpth'
16929 grep='$grep'
16930 groupcat='$groupcat'
16931 groupstype='$groupstype'
16932 gzip='$gzip'
16933 h_fcntl='$h_fcntl'
16934 h_sysfile='$h_sysfile'
16935 hint='$hint'
16936 hostcat='$hostcat'
16937 i16size='$i16size'
16938 i16type='$i16type'
16939 i32size='$i32size'
16940 i32type='$i32type'
16941 i64size='$i64size'
16942 i64type='$i64type'
16943 i8size='$i8size'
16944 i8type='$i8type'
16945 i_arpainet='$i_arpainet'
16946 i_bsdioctl='$i_bsdioctl'
16947 i_db='$i_db'
16948 i_dbm='$i_dbm'
16949 i_dirent='$i_dirent'
16950 i_dld='$i_dld'
16951 i_dlfcn='$i_dlfcn'
16952 i_fcntl='$i_fcntl'
16953 i_float='$i_float'
16954 i_gdbm='$i_gdbm'
16955 i_grp='$i_grp'
16956 i_iconv='$i_iconv'
16957 i_ieeefp='$i_ieeefp'
16958 i_inttypes='$i_inttypes'
16959 i_libutil='$i_libutil'
16960 i_limits='$i_limits'
16961 i_locale='$i_locale'
16962 i_machcthr='$i_machcthr'
16963 i_malloc='$i_malloc'
16964 i_math='$i_math'
16965 i_memory='$i_memory'
16966 i_mntent='$i_mntent'
16967 i_ndbm='$i_ndbm'
16968 i_netdb='$i_netdb'
16969 i_neterrno='$i_neterrno'
16970 i_netinettcp='$i_netinettcp'
16971 i_niin='$i_niin'
16972 i_poll='$i_poll'
16973 i_prot='$i_prot'
16974 i_pthread='$i_pthread'
16975 i_pwd='$i_pwd'
16976 i_rpcsvcdbm='$i_rpcsvcdbm'
16977 i_sfio='$i_sfio'
16978 i_sgtty='$i_sgtty'
16979 i_shadow='$i_shadow'
16980 i_socks='$i_socks'
16981 i_stdarg='$i_stdarg'
16982 i_stddef='$i_stddef'
16983 i_stdlib='$i_stdlib'
16984 i_string='$i_string'
16985 i_sunmath='$i_sunmath'
16986 i_sysaccess='$i_sysaccess'
16987 i_sysdir='$i_sysdir'
16988 i_sysfile='$i_sysfile'
16989 i_sysfilio='$i_sysfilio'
16990 i_sysin='$i_sysin'
16991 i_sysioctl='$i_sysioctl'
16992 i_syslog='$i_syslog'
16993 i_sysmman='$i_sysmman'
16994 i_sysmode='$i_sysmode'
16995 i_sysmount='$i_sysmount'
16996 i_sysndir='$i_sysndir'
16997 i_sysparam='$i_sysparam'
16998 i_sysresrc='$i_sysresrc'
16999 i_syssecrt='$i_syssecrt'
17000 i_sysselct='$i_sysselct'
17001 i_syssockio='$i_syssockio'
17002 i_sysstat='$i_sysstat'
17003 i_sysstatfs='$i_sysstatfs'
17004 i_sysstatvfs='$i_sysstatvfs'
17005 i_systime='$i_systime'
17006 i_systimek='$i_systimek'
17007 i_systimes='$i_systimes'
17008 i_systypes='$i_systypes'
17009 i_sysuio='$i_sysuio'
17010 i_sysun='$i_sysun'
17011 i_sysutsname='$i_sysutsname'
17012 i_sysvfs='$i_sysvfs'
17013 i_syswait='$i_syswait'
17014 i_termio='$i_termio'
17015 i_termios='$i_termios'
17016 i_time='$i_time'
17017 i_unistd='$i_unistd'
17018 i_ustat='$i_ustat'
17019 i_utime='$i_utime'
17020 i_values='$i_values'
17021 i_varargs='$i_varargs'
17022 i_varhdr='$i_varhdr'
17023 i_vfork='$i_vfork'
17024 ignore_versioned_solibs='$ignore_versioned_solibs'
17025 inc_version_list='$inc_version_list'
17026 inc_version_list_init='$inc_version_list_init'
17027 incpath='$incpath'
17028 inews='$inews'
17029 installarchlib='$installarchlib'
17030 installbin='$installbin'
17031 installman1dir='$installman1dir'
17032 installman3dir='$installman3dir'
17033 installprefix='$installprefix'
17034 installprefixexp='$installprefixexp'
17035 installprivlib='$installprivlib'
17036 installscript='$installscript'
17037 installsitearch='$installsitearch'
17038 installsitebin='$installsitebin'
17039 installsitelib='$installsitelib'
17040 installstyle='$installstyle'
17041 installusrbinperl='$installusrbinperl'
17042 installvendorarch='$installvendorarch'
17043 installvendorbin='$installvendorbin'
17044 installvendorlib='$installvendorlib'
17045 intsize='$intsize'
17046 issymlink='$issymlink'
17047 ivdformat='$ivdformat'
17048 ivsize='$ivsize'
17049 ivtype='$ivtype'
17050 known_extensions='$known_extensions'
17051 ksh='$ksh'
17052 ld='$ld'
17053 lddlflags='$lddlflags'
17054 ldflags='$ldflags'
17055 ldflags_uselargefiles='$ldflags_uselargefiles'
17056 ldlibpthname='$ldlibpthname'
17057 less='$less'
17058 lib_ext='$lib_ext'
17059 libc='$libc'
17060 libperl='$libperl'
17061 libpth='$libpth'
17062 libs='$libs'
17063 libsdirs='$libsdirs'
17064 libsfiles='$libsfiles'
17065 libsfound='$libsfound'
17066 libspath='$libspath'
17067 libswanted='$libswanted'
17068 libswanted_uselargefiles='$libswanted_uselargefiles'
17069 line='$line'
17070 lint='$lint'
17071 lkflags='$lkflags'
17072 ln='$ln'
17073 lns='$lns'
17074 locincpth='$locincpth'
17075 loclibpth='$loclibpth'
17076 longdblsize='$longdblsize'
17077 longlongsize='$longlongsize'
17078 longsize='$longsize'
17079 lp='$lp'
17080 lpr='$lpr'
17081 ls='$ls'
17082 lseeksize='$lseeksize'
17083 lseektype='$lseektype'
17084 mail='$mail'
17085 mailx='$mailx'
17086 make='$make'
17087 make_set_make='$make_set_make'
17088 mallocobj='$mallocobj'
17089 mallocsrc='$mallocsrc'
17090 malloctype='$malloctype'
17091 man1dir='$man1dir'
17092 man1direxp='$man1direxp'
17093 man1ext='$man1ext'
17094 man3dir='$man3dir'
17095 man3direxp='$man3direxp'
17096 man3ext='$man3ext'
17097 mips_type='$mips_type'
17098 mkdir='$mkdir'
17099 mmaptype='$mmaptype'
17100 modetype='$modetype'
17101 more='$more'
17102 multiarch='$multiarch'
17103 mv='$mv'
17104 myarchname='$myarchname'
17105 mydomain='$mydomain'
17106 myhostname='$myhostname'
17107 myuname='$myuname'
17108 n='$n'
17109 need_va_copy='$need_va_copy'
17110 netdb_hlen_type='$netdb_hlen_type'
17111 netdb_host_type='$netdb_host_type'
17112 netdb_name_type='$netdb_name_type'
17113 netdb_net_type='$netdb_net_type'
17114 nm='$nm'
17115 nm_opt='$nm_opt'
17116 nm_so_opt='$nm_so_opt'
17117 nonxs_ext='$nonxs_ext'
17118 nroff='$nroff'
17119 nvEUformat='$nvEUformat'
17120 nvFUformat='$nvFUformat'
17121 nvGUformat='$nvGUformat'
17122 nveformat='$nveformat'
17123 nvfformat='$nvfformat'
17124 nvgformat='$nvgformat'
17125 nvsize='$nvsize'
17126 nvtype='$nvtype'
17127 o_nonblock='$o_nonblock'
17128 obj_ext='$obj_ext'
17129 old_pthread_create_joinable='$old_pthread_create_joinable'
17130 optimize='$optimize'
17131 orderlib='$orderlib'
17132 osname='$osname'
17133 osvers='$osvers'
17134 otherlibdirs='$otherlibdirs'
17135 package='$package'
17136 pager='$pager'
17137 passcat='$passcat'
17138 patchlevel='$patchlevel'
17139 path_sep='$path_sep'
17140 perl5='$perl5'
17141 perl='$perl'
17142 perl_patchlevel='$perl_patchlevel'
17143 perladmin='$perladmin'
17144 perllibs='$perllibs'
17145 perlpath='$perlpath'
17146 pg='$pg'
17147 phostname='$phostname'
17148 pidtype='$pidtype'
17149 plibpth='$plibpth'
17150 pm_apiversion='$pm_apiversion'
17151 pmake='$pmake'
17152 pr='$pr'
17153 prefix='$prefix'
17154 prefixexp='$prefixexp'
17155 privlib='$privlib'
17156 privlibexp='$privlibexp'
17157 prototype='$prototype'
17158 ptrsize='$ptrsize'
17159 quadkind='$quadkind'
17160 quadtype='$quadtype'
17161 randbits='$randbits'
17162 randfunc='$randfunc'
17163 randseedtype='$randseedtype'
17164 ranlib='$ranlib'
17165 rd_nodata='$rd_nodata'
17166 revision='$revision'
17167 rm='$rm'
17168 rmail='$rmail'
17169 run='$run'
17170 runnm='$runnm'
17171 sPRIEUldbl='$sPRIEUldbl'
17172 sPRIFUldbl='$sPRIFUldbl'
17173 sPRIGUldbl='$sPRIGUldbl'
17174 sPRIXU64='$sPRIXU64'
17175 sPRId64='$sPRId64'
17176 sPRIeldbl='$sPRIeldbl'
17177 sPRIfldbl='$sPRIfldbl'
17178 sPRIgldbl='$sPRIgldbl'
17179 sPRIi64='$sPRIi64'
17180 sPRIo64='$sPRIo64'
17181 sPRIu64='$sPRIu64'
17182 sPRIx64='$sPRIx64'
17183 sSCNfldbl='$sSCNfldbl'
17184 sched_yield='$sched_yield'
17185 scriptdir='$scriptdir'
17186 scriptdirexp='$scriptdirexp'
17187 sed='$sed'
17188 seedfunc='$seedfunc'
17189 selectminbits='$selectminbits'
17190 selecttype='$selecttype'
17191 sendmail='$sendmail'
17192 sh='$sh'
17193 shar='$shar'
17194 sharpbang='$sharpbang'
17195 shmattype='$shmattype'
17196 shortsize='$shortsize'
17197 shrpenv='$shrpenv'
17198 shsharp='$shsharp'
17199 sig_count='$sig_count'
17200 sig_name='$sig_name'
17201 sig_name_init='$sig_name_init'
17202 sig_num='$sig_num'
17203 sig_num_init='$sig_num_init'
17204 sig_size='$sig_size'
17205 signal_t='$signal_t'
17206 sitearch='$sitearch'
17207 sitearchexp='$sitearchexp'
17208 sitebin='$sitebin'
17209 sitebinexp='$sitebinexp'
17210 sitelib='$sitelib'
17211 sitelib_stem='$sitelib_stem'
17212 sitelibexp='$sitelibexp'
17213 siteprefix='$siteprefix'
17214 siteprefixexp='$siteprefixexp'
17215 sizesize='$sizesize'
17216 sizetype='$sizetype'
17217 sleep='$sleep'
17218 smail='$smail'
17219 so='$so'
17220 sockethdr='$sockethdr'
17221 socketlib='$socketlib'
17222 socksizetype='$socksizetype'
17223 sort='$sort'
17224 spackage='$spackage'
17225 spitshell='$spitshell'
17226 src='$src'
17227 ssizetype='$ssizetype'
17228 startperl='$startperl'
17229 startsh='$startsh'
17230 static_ext='$static_ext'
17231 stdchar='$stdchar'
17232 stdio_base='$stdio_base'
17233 stdio_bufsiz='$stdio_bufsiz'
17234 stdio_cnt='$stdio_cnt'
17235 stdio_filbuf='$stdio_filbuf'
17236 stdio_ptr='$stdio_ptr'
17237 stdio_stream_array='$stdio_stream_array'
17238 strings='$strings'
17239 submit='$submit'
17240 subversion='$subversion'
17241 sysman='$sysman'
17242 tail='$tail'
17243 tar='$tar'
17244 targetarch='$targetarch'
17245 tbl='$tbl'
17246 tee='$tee'
17247 test='$test'
17248 timeincl='$timeincl'
17249 timetype='$timetype'
17250 to='$to'
17251 touch='$touch'
17252 tr='$tr'
17253 trnl='$trnl'
17254 troff='$troff'
17255 u16size='$u16size'
17256 u16type='$u16type'
17257 u32size='$u32size'
17258 u32type='$u32type'
17259 u64size='$u64size'
17260 u64type='$u64type'
17261 u8size='$u8size'
17262 u8type='$u8type'
17263 uidformat='$uidformat'
17264 uidsign='$uidsign'
17265 uidsize='$uidsize'
17266 uidtype='$uidtype'
17267 uname='$uname'
17268 uniq='$uniq'
17269 uquadtype='$uquadtype'
17270 use5005threads='$use5005threads'
17271 use64bitall='$use64bitall'
17272 use64bitint='$use64bitint'
17273 usecrosscompile='$usecrosscompile'
17274 usedl='$usedl'
17275 useithreads='$useithreads'
17276 uselargefiles='$uselargefiles'
17277 uselongdouble='$uselongdouble'
17278 usemorebits='$usemorebits'
17279 usemultiplicity='$usemultiplicity'
17280 usemymalloc='$usemymalloc'
17281 usenm='$usenm'
17282 useopcode='$useopcode'
17283 useperlio='$useperlio'
17284 useposix='$useposix'
17285 usereentrant='$usereentrant'
17286 usesfio='$usesfio'
17287 useshrplib='$useshrplib'
17288 usesocks='$usesocks'
17289 usethreads='$usethreads'
17290 usevendorprefix='$usevendorprefix'
17291 usevfork='$usevfork'
17292 usrinc='$usrinc'
17293 uuname='$uuname'
17294 uvXUformat='$uvXUformat'
17295 uvoformat='$uvoformat'
17296 uvsize='$uvsize'
17297 uvtype='$uvtype'
17298 uvuformat='$uvuformat'
17299 uvxformat='$uvxformat'
17300 vendorarch='$vendorarch'
17301 vendorarchexp='$vendorarchexp'
17302 vendorbin='$vendorbin'
17303 vendorbinexp='$vendorbinexp'
17304 vendorlib='$vendorlib'
17305 vendorlib_stem='$vendorlib_stem'
17306 vendorlibexp='$vendorlibexp'
17307 vendorprefix='$vendorprefix'
17308 vendorprefixexp='$vendorprefixexp'
17309 version='$version'
17310 versiononly='$versiononly'
17311 vi='$vi'
17312 voidflags='$voidflags'
17313 xlibpth='$xlibpth'
17314 xs_apiversion='$xs_apiversion'
17315 yacc='$yacc'
17316 yaccflags='$yaccflags'
17317 zcat='$zcat'
17318 zip='$zip'
17319 EOT
17320
17321 : Add in command line options if available
17322 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
17323
17324 : add special variables
17325 $test -f $src/patchlevel.h && \
17326 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
17327 echo "PERL_PATCHLEVEL=$perl_patchlevel" >>config.sh
17328 echo "PERL_CONFIG_SH=true" >>config.sh
17329
17330 : propagate old symbols
17331 if $test -f UU/config.sh; then
17332         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
17333         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
17334         $sort | $uniq -u >UU/oldsyms
17335         set X `cat UU/oldsyms`
17336         shift
17337         case $# in
17338         0) ;;
17339         *)
17340                 cat <<EOM
17341 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
17342 EOM
17343                 echo "# Variables propagated from previous config.sh file." >>config.sh
17344                 for sym in `cat UU/oldsyms`; do
17345                         echo "    Propagating $hint variable "'$'"$sym..."
17346                         eval 'tmp="$'"${sym}"'"'
17347                         echo "$tmp" | \
17348                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
17349                 done
17350                 ;;
17351         esac
17352 fi
17353
17354 : Finish up by extracting the .SH files
17355 case "$alldone" in
17356 exit)
17357         $rm -rf UU
17358         echo "Extraction done."
17359         exit 0
17360         ;;
17361 cont)
17362         ;;
17363 '')
17364         dflt=''
17365         nostick=true
17366         $cat <<EOM
17367
17368 If you'd like to make any changes to the config.sh file before I begin
17369 to configure things, do it as a shell escape now (e.g. !vi config.sh).
17370
17371 EOM
17372         rp="Press return or use a shell escape to edit config.sh:"
17373         . UU/myread
17374         nostick=''
17375         case "$ans" in
17376         '') ;;
17377         *) : in case they cannot read
17378                 sh 1>&4 -c "$ans";;
17379         esac
17380         ;;
17381 esac
17382
17383 : if this fails, just run all the .SH files by hand
17384 . ./config.sh
17385
17386 echo " "
17387 exec 1>&4
17388 pwd=`pwd`
17389 . ./UU/extract
17390 cd $pwd
17391
17392 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
17393         dflt=y
17394         case "$silent" in
17395         true) ;;
17396         *)
17397                 $cat <<EOM
17398
17399 Now you need to generate make dependencies by running "$make depend".
17400 You might prefer to run it in background: "$make depend > makedepend.out &"
17401 It can take a while, so you might not want to run it right now.
17402
17403 EOM
17404                 ;;
17405         esac
17406         rp="Run $make depend now?"
17407         . UU/myread
17408         case "$ans" in
17409         y*)
17410                 $make depend && echo "Now you must run '$make'."
17411                 ;;
17412         *)
17413                 echo "You must run '$make depend' then '$make'."
17414                 ;;
17415         esac
17416 elif test -f [Mm]akefile; then
17417         echo " "
17418         echo "Now you must run a $make."
17419 else
17420         echo "Configure done."
17421 fi
17422
17423 if $test -f Policy.sh; then
17424     $cat <<EOM
17425
17426 If you compile $package on a different machine or from a different object
17427 directory, copy the Policy.sh file from this object directory to the
17428 new one before you run Configure -- this will help you with most of
17429 the policy defaults.
17430
17431 EOM
17432 fi
17433 if $test -f config.msg; then
17434     echo "Hmm.  I also noted the following information while running:"
17435     echo " "
17436     $cat config.msg >&4
17437     $rm -f config.msg
17438 fi
17439 $rm -f kit*isdone ark*isdone
17440 $rm -rf UU
17441
17442 : End of Configure
17443