Further tiny bcopy cleanup
[p5sagit/p5-mst-13.2.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Fri Jun 22 23:55:12 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_fchdir=''
357 d_fchmod=''
358 d_fchown=''
359 d_fcntl=''
360 d_fcntl_can_lock=''
361 d_fd_macros=''
362 d_fd_set=''
363 d_fds_bits=''
364 d_fgetpos=''
365 d_flexfnam=''
366 d_flock=''
367 d_flockproto=''
368 d_fork=''
369 d_fpos64_t=''
370 d_frexpl=''
371 d_fs_data_s=''
372 d_fseeko=''
373 d_fsetpos=''
374 d_fstatfs=''
375 d_fsync=''
376 d_ftello=''
377 d_ftime=''
378 d_gettimeod=''
379 d_Gconvert=''
380 d_getcwd=''
381 d_getespwnam=''
382 d_getfsstat=''
383 d_getgrent=''
384 d_getgrps=''
385 d_gethbyaddr=''
386 d_gethbyname=''
387 d_gethent=''
388 aphostname=''
389 d_gethname=''
390 d_phostname=''
391 d_uname=''
392 d_gethostprotos=''
393 d_getitimer=''
394 d_getlogin=''
395 d_getmnt=''
396 d_getmntent=''
397 d_getnbyaddr=''
398 d_getnbyname=''
399 d_getnent=''
400 d_getnetprotos=''
401 d_getpagsz=''
402 d_getpent=''
403 d_getpgid=''
404 d_getpgrp2=''
405 d_bsdgetpgrp=''
406 d_getpgrp=''
407 d_getppid=''
408 d_getprior=''
409 d_getpbyname=''
410 d_getpbynumber=''
411 d_getprotoprotos=''
412 d_getprpwnam=''
413 d_getpwent=''
414 d_getsent=''
415 d_getservprotos=''
416 d_getspnam=''
417 d_getsbyname=''
418 d_getsbyport=''
419 d_gnulibc=''
420 d_hasmntopt=''
421 d_htonl=''
422 d_iconv=''
423 d_inetaton=''
424 d_int64_t=''
425 d_isascii=''
426 d_isnan=''
427 d_isnanl=''
428 d_killpg=''
429 d_lchown=''
430 d_ldbl_dig=''
431 d_link=''
432 d_locconv=''
433 d_lockf=''
434 d_longdbl=''
435 longdblsize=''
436 d_longlong=''
437 longlongsize=''
438 d_lseekproto=''
439 d_lstat=''
440 d_madvise=''
441 d_mblen=''
442 d_mbstowcs=''
443 d_mbtowc=''
444 d_memchr=''
445 d_memcmp=''
446 d_memcpy=''
447 d_memmove=''
448 d_memset=''
449 d_mkdir=''
450 d_mkdtemp=''
451 d_mkfifo=''
452 d_mkstemp=''
453 d_mkstemps=''
454 d_mktime=''
455 d_mmap=''
456 mmaptype=''
457 d_modfl=''
458 d_modfl_pow32_bug=''
459 d_mprotect=''
460 d_msg=''
461 d_msgctl=''
462 d_msgget=''
463 d_msghdr_s=''
464 d_msgrcv=''
465 d_msgsnd=''
466 d_msync=''
467 d_munmap=''
468 d_nice=''
469 d_off64_t=''
470 d_open3=''
471 d_fpathconf=''
472 d_pathconf=''
473 d_pause=''
474 d_pipe=''
475 d_poll=''
476 d_portable=''
477 d_old_pthread_create_joinable=''
478 old_pthread_create_joinable=''
479 d_pthread_yield=''
480 d_sched_yield=''
481 sched_yield=''
482 d_qgcvt=''
483 d_readdir=''
484 d_rewinddir=''
485 d_seekdir=''
486 d_telldir=''
487 d_readlink=''
488 d_readv=''
489 d_recvmsg=''
490 d_rename=''
491 d_rmdir=''
492 d_safebcpy=''
493 d_safemcpy=''
494 d_sanemcmp=''
495 d_sbrkproto=''
496 d_select=''
497 d_sem=''
498 d_semctl=''
499 d_semget=''
500 d_semop=''
501 d_sendmsg=''
502 d_setegid=''
503 d_seteuid=''
504 d_setgrent=''
505 d_setgrps=''
506 d_sethent=''
507 d_setitimer=''
508 d_setlinebuf=''
509 d_setlocale=''
510 d_setnent=''
511 d_setpent=''
512 d_setpgid=''
513 d_setpgrp2=''
514 d_bsdsetpgrp=''
515 d_setpgrp=''
516 d_setprior=''
517 d_setproctitle=''
518 d_setpwent=''
519 d_setregid=''
520 d_setresgid=''
521 d_setresuid=''
522 d_setreuid=''
523 d_setrgid=''
524 d_setruid=''
525 d_setsent=''
526 d_setsid=''
527 d_setvbuf=''
528 d_sfio=''
529 usesfio=''
530 d_shm=''
531 d_shmat=''
532 d_shmatprototype=''
533 shmattype=''
534 d_shmctl=''
535 d_shmdt=''
536 d_shmget=''
537 d_sigaction=''
538 d_sigprocmask=''
539 d_sigsetjmp=''
540 d_sockatmark=''
541 d_sockatmarkproto=''
542 d_msg_ctrunc=''
543 d_msg_dontroute=''
544 d_msg_oob=''
545 d_msg_peek=''
546 d_msg_proxy=''
547 d_oldsock=''
548 d_scm_rights=''
549 d_socket=''
550 d_sockpair=''
551 sockethdr=''
552 socketlib=''
553 d_socklen_t=''
554 d_socks5_init=''
555 d_sqrtl=''
556 d_sresgproto=''
557 d_sresuproto=''
558 d_statblks=''
559 d_statfs_f_flags=''
560 d_statfs_s=''
561 d_fstatvfs=''
562 d_statvfs=''
563 d_stdio_cnt_lval=''
564 d_stdio_ptr_lval=''
565 d_stdio_ptr_lval_nochange_cnt=''
566 d_stdio_ptr_lval_sets_cnt=''
567 d_stdiobase=''
568 d_stdstdio=''
569 stdio_base=''
570 stdio_bufsiz=''
571 stdio_cnt=''
572 stdio_filbuf=''
573 stdio_ptr=''
574 d_index=''
575 d_strchr=''
576 d_strcoll=''
577 d_strctcpy=''
578 d_strerrm=''
579 d_strerror=''
580 d_sysernlst=''
581 d_syserrlst=''
582 d_strftime=''
583 d_strtod=''
584 d_strtol=''
585 d_strtold=''
586 d_strtoll=''
587 d_strtoq=''
588 d_strtoul=''
589 d_strtoull=''
590 d_strtouq=''
591 d_strxfrm=''
592 d_symlink=''
593 d_syscall=''
594 d_syscallproto=''
595 d_sysconf=''
596 d_system=''
597 d_tcgetpgrp=''
598 d_tcsetpgrp=''
599 d_telldirproto=''
600 d_time=''
601 timetype=''
602 clocktype=''
603 d_times=''
604 d_truncate=''
605 d_tzname=''
606 d_u32align=''
607 d_ualarm=''
608 d_umask=''
609 d_semctl_semid_ds=''
610 d_semctl_semun=''
611 d_union_semun=''
612 d_usleep=''
613 d_usleepproto=''
614 d_ustat=''
615 d_vfork=''
616 usevfork=''
617 d_voidsig=''
618 signal_t=''
619 d_volatile=''
620 d_charvspr=''
621 d_vprintf=''
622 d_wait4=''
623 d_waitpid=''
624 d_wcstombs=''
625 d_wctomb=''
626 d_writev=''
627 dlext=''
628 cccdlflags=''
629 ccdlflags=''
630 dlsrc=''
631 ld=''
632 lddlflags=''
633 usedl=''
634 doublesize=''
635 ebcdic=''
636 fflushNULL=''
637 fflushall=''
638 fpossize=''
639 fpostype=''
640 gccosandvers=''
641 gccversion=''
642 gidformat=''
643 gidsign=''
644 gidsize=''
645 gidtype=''
646 groupstype=''
647 h_fcntl=''
648 h_sysfile=''
649 i_arpainet=''
650 db_hashtype=''
651 db_prefixtype=''
652 db_version_major=''
653 db_version_minor=''
654 db_version_patch=''
655 i_db=''
656 i_dbm=''
657 i_rpcsvcdbm=''
658 d_dirnamlen=''
659 direntrytype=''
660 i_dirent=''
661 i_dld=''
662 i_dlfcn=''
663 i_fcntl=''
664 i_float=''
665 i_gdbm=''
666 d_grpasswd=''
667 i_grp=''
668 i_iconv=''
669 i_ieeefp=''
670 i_inttypes=''
671 i_libutil=''
672 i_limits=''
673 i_locale=''
674 i_machcthr=''
675 i_malloc=''
676 i_math=''
677 i_memory=''
678 i_mntent=''
679 i_ndbm=''
680 i_netdb=''
681 i_neterrno=''
682 i_netinettcp=''
683 i_niin=''
684 i_sysin=''
685 i_poll=''
686 i_prot=''
687 i_pthread=''
688 d_pwage=''
689 d_pwchange=''
690 d_pwclass=''
691 d_pwcomment=''
692 d_pwexpire=''
693 d_pwgecos=''
694 d_pwpasswd=''
695 d_pwquota=''
696 i_pwd=''
697 i_sfio=''
698 i_shadow=''
699 i_socks=''
700 i_stddef=''
701 i_stdlib=''
702 i_string=''
703 strings=''
704 i_sunmath=''
705 i_sysaccess=''
706 i_sysdir=''
707 i_sysfile=''
708 d_voidtty=''
709 i_bsdioctl=''
710 i_sysfilio=''
711 i_sysioctl=''
712 i_syssockio=''
713 i_syslog=''
714 i_sysmman=''
715 i_sysmode=''
716 i_sysmount=''
717 i_sysndir=''
718 i_sysparam=''
719 i_sysresrc=''
720 i_syssecrt=''
721 i_sysselct=''
722 i_sysstat=''
723 i_sysstatfs=''
724 i_sysstatvfs=''
725 i_systimes=''
726 i_systypes=''
727 i_sysuio=''
728 i_sysun=''
729 i_sysutsname=''
730 i_sysvfs=''
731 i_syswait=''
732 i_sgtty=''
733 i_termio=''
734 i_termios=''
735 i_systime=''
736 i_systimek=''
737 i_time=''
738 timeincl=''
739 i_unistd=''
740 i_ustat=''
741 i_utime=''
742 i_values=''
743 i_stdarg=''
744 i_varargs=''
745 i_varhdr=''
746 i_vfork=''
747 inc_version_list=''
748 inc_version_list_init=''
749 installprefix=''
750 installprefixexp=''
751 installstyle=''
752 installusrbinperl=''
753 intsize=''
754 longsize=''
755 shortsize=''
756 issymlink=''
757 libc=''
758 ldlibpthname=''
759 libperl=''
760 shrpenv=''
761 useshrplib=''
762 glibpth=''
763 libpth=''
764 loclibpth=''
765 plibpth=''
766 xlibpth=''
767 ignore_versioned_solibs=''
768 libs=''
769 libsdirs=''
770 libsfiles=''
771 libsfound=''
772 libspath=''
773 lns=''
774 d_PRIEUldbl=''
775 d_PRIFUldbl=''
776 d_PRIGUldbl=''
777 d_PRIeldbl=''
778 d_PRIfldbl=''
779 d_PRIgldbl=''
780 d_SCNfldbl=''
781 sPRIEUldbl=''
782 sPRIFUldbl=''
783 sPRIGUldbl=''
784 sPRIeldbl=''
785 sPRIfldbl=''
786 sPRIgldbl=''
787 sSCNfldbl=''
788 lseeksize=''
789 lseektype=''
790 make_set_make=''
791 d_mymalloc=''
792 freetype=''
793 mallocobj=''
794 mallocsrc=''
795 malloctype=''
796 usemymalloc=''
797 installman1dir=''
798 man1dir=''
799 man1direxp=''
800 man1ext=''
801 installman3dir=''
802 man3dir=''
803 man3direxp=''
804 man3ext=''
805 modetype=''
806 multiarch=''
807 mydomain=''
808 myhostname=''
809 phostname=''
810 c=''
811 n=''
812 d_eofnblk=''
813 eagain=''
814 o_nonblock=''
815 rd_nodata=''
816 need_va_copy=''
817 netdb_hlen_type=''
818 netdb_host_type=''
819 netdb_name_type=''
820 netdb_net_type=''
821 groupcat=''
822 hostcat=''
823 passcat=''
824 orderlib=''
825 ranlib=''
826 d_perl_otherlibdirs=''
827 otherlibdirs=''
828 package=''
829 spackage=''
830 pager=''
831 api_revision=''
832 api_subversion=''
833 api_version=''
834 api_versionstring=''
835 patchlevel=''
836 perl_patchlevel=''
837 revision=''
838 subversion=''
839 version=''
840 perl5=''
841 perladmin=''
842 perlpath=''
843 d_nv_preserves_uv=''
844 d_nv_preserves_uv_bits=''
845 i16size=''
846 i16type=''
847 i32size=''
848 i32type=''
849 i64size=''
850 i64type=''
851 i8size=''
852 i8type=''
853 ivsize=''
854 ivtype=''
855 nvsize=''
856 nvtype=''
857 u16size=''
858 u16type=''
859 u32size=''
860 u32type=''
861 u64size=''
862 u64type=''
863 u8size=''
864 u8type=''
865 uvsize=''
866 uvtype=''
867 ivdformat=''
868 nvEUformat=''
869 nvFUformat=''
870 nvGUformat=''
871 nveformat=''
872 nvfformat=''
873 nvgformat=''
874 uvXUformat=''
875 uvoformat=''
876 uvuformat=''
877 uvxformat=''
878 pidtype=''
879 prefix=''
880 prefixexp=''
881 installprivlib=''
882 privlib=''
883 privlibexp=''
884 prototype=''
885 ptrsize=''
886 d_PRIXU64=''
887 d_PRId64=''
888 d_PRIi64=''
889 d_PRIo64=''
890 d_PRIu64=''
891 d_PRIx64=''
892 sPRIXU64=''
893 sPRId64=''
894 sPRIi64=''
895 sPRIo64=''
896 sPRIu64=''
897 sPRIx64=''
898 d_quad=''
899 quadkind=''
900 quadtype=''
901 uquadtype=''
902 drand01=''
903 randbits=''
904 randfunc=''
905 randseedtype=''
906 seedfunc=''
907 installscript=''
908 scriptdir=''
909 scriptdirexp=''
910 selectminbits=''
911 selecttype=''
912 sh=''
913 sig_count=''
914 sig_name=''
915 sig_name_init=''
916 sig_num=''
917 sig_num_init=''
918 sig_size=''
919 installsitearch=''
920 sitearch=''
921 sitearchexp=''
922 installsitebin=''
923 sitebin=''
924 sitebinexp=''
925 installsitelib=''
926 sitelib=''
927 sitelib_stem=''
928 sitelibexp=''
929 siteprefix=''
930 siteprefixexp=''
931 sizesize=''
932 sizetype=''
933 so=''
934 socksizetype=''
935 sharpbang=''
936 shsharp=''
937 spitshell=''
938 src=''
939 ssizetype=''
940 startperl=''
941 startsh=''
942 stdchar=''
943 d_stdio_stream_array=''
944 stdio_stream_array=''
945 sysman=''
946 trnl=''
947 uidformat=''
948 uidsign=''
949 uidsize=''
950 uidtype=''
951 archname64=''
952 use64bitall=''
953 use64bitint=''
954 ccflags_uselargefiles=''
955 ldflags_uselargefiles=''
956 libswanted_uselargefiles=''
957 uselargefiles=''
958 uselongdouble=''
959 usemorebits=''
960 usemultiplicity=''
961 nm_opt=''
962 nm_so_opt=''
963 runnm=''
964 usenm=''
965 useperlio=''
966 usesocks=''
967 d_oldpthreads=''
968 use5005threads=''
969 useithreads=''
970 usereentrant=''
971 usethreads=''
972 incpath=''
973 mips_type=''
974 usrinc=''
975 d_vendorarch=''
976 installvendorarch=''
977 vendorarch=''
978 vendorarchexp=''
979 d_vendorbin=''
980 installvendorbin=''
981 vendorbin=''
982 vendorbinexp=''
983 d_vendorlib=''
984 installvendorlib=''
985 vendorlib=''
986 vendorlib_stem=''
987 vendorlibexp=''
988 usevendorprefix=''
989 vendorprefix=''
990 vendorprefixexp=''
991 versiononly=''
992 defvoidused=''
993 voidflags=''
994 pm_apiversion=''
995 xs_apiversion=''
996 yacc=''
997 yaccflags=''
998 CONFIG=''
999
1000 define='define'
1001 undef='undef'
1002 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
1003 rmlist=''
1004
1005 : We must find out about Eunice early
1006 eunicefix=':'
1007 if test -f /etc/unixtovms; then
1008         eunicefix=/etc/unixtovms
1009 fi
1010 if test -f /etc/unixtovms.exe; then
1011         eunicefix=/etc/unixtovms.exe
1012 fi
1013
1014 i_whoami=''
1015 ccname=''
1016 ccversion=''
1017 perllibs=''
1018 : set useposix=false in your hint file to disable the POSIX extension.
1019 useposix=true
1020 : set useopcode=false in your hint file to disable the Opcode extension.
1021 useopcode=true
1022 : Trailing extension.  Override this in a hint file, if needed.
1023 _exe=''
1024 : Extra object files, if any, needed on this platform.
1025 archobjs=''
1026 archname=''
1027 : Possible local include directories to search.
1028 : Set locincpth to "" in a hint file to defeat local include searches.
1029 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
1030 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
1031 :
1032 : no include file wanted by default
1033 inclwanted=''
1034
1035 groupstype=''
1036 libnames=''
1037 : change the next line if compiling for Xenix/286 on Xenix/386
1038 xlibpth='/usr/lib/386 /lib/386'
1039 : Possible local library directories to search.
1040 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1041 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1042
1043 : general looking path for locating libraries
1044 glibpth="/lib /usr/lib $xlibpth"
1045 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1046 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1047 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1048
1049 : Private path used by Configure to find libraries.  Its value
1050 : is prepended to libpth. This variable takes care of special
1051 : machines, like the mips.  Usually, it should be empty.
1052 plibpth=''
1053
1054 : default library list
1055 libswanted=''
1056 : some systems want to use only the non-versioned libso:s
1057 ignore_versioned_solibs=''
1058 archname64=''
1059 ccflags_uselargefiles=''
1060 ldflags_uselargefiles=''
1061 libswanted_uselargefiles=''
1062 : set usemultiplicity on the Configure command line to enable multiplicity.
1063 : set usesocks on the Configure command line to enable socks.
1064 : set usethreads on the Configure command line to enable threads.
1065 usereentrant='undef'
1066 : full support for void wanted by default
1067 defvoidused=15
1068
1069 : List of libraries we want.
1070 : If anyone needs -lnet, put it in a hint file.
1071 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1072 libswanted="$libswanted dld ld sun m c cposix posix"
1073 libswanted="$libswanted ndir dir crypt sec"
1074 libswanted="$libswanted ucb bsd BSD PW x iconv util"
1075 : We probably want to search /usr/shlib before most other libraries.
1076 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1077 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1078 glibpth="/usr/shlib $glibpth"
1079 : Do not use vfork unless overridden by a hint file.
1080 usevfork=false
1081
1082 : Find the basic shell for Bourne shell scripts
1083 case "$sh" in
1084 '')
1085         case "$SYSTYPE" in
1086         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1087         *) xxx='/bin/sh';;
1088         esac
1089         if test -f "$xxx"; then
1090                 sh="$xxx"
1091         else
1092                 : Build up a list and do a single loop so we can 'break' out.
1093                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1094                 for xxx in sh bash ksh pdksh ash; do
1095                         for p in $pth; do
1096                                 try="$try ${p}/${xxx}"
1097                         done
1098                 done
1099                 for xxx in $try; do
1100                         if test -f "$xxx"; then
1101                                 sh="$xxx";
1102                                 break
1103                         elif test -f "$xxx.exe"; then
1104                                 sh="$xxx";
1105                                 break
1106                         fi
1107                 done
1108         fi
1109         ;;
1110 esac
1111
1112 case "$sh" in
1113 '')     cat <<EOM >&2
1114 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1115
1116 Usually it's in /bin/sh.  How did you even get this far?
1117 Please contact me (Perl Maintainers) at perlbug@perl.org and 
1118 we'll try to straighten this all out.
1119 EOM
1120         exit 1
1121         ;;
1122 esac
1123
1124 : see if sh knows # comments
1125 if `$sh -c '#' >/dev/null 2>&1`; then
1126         shsharp=true
1127         spitshell=cat
1128         xcat=/bin/cat
1129         test -f $xcat || xcat=/usr/bin/cat
1130         echo "#!$xcat" >sharp
1131         $eunicefix sharp
1132         chmod +x sharp
1133         ./sharp > today
1134         if test -s today; then
1135                 sharpbang='#!'
1136         else
1137                 echo "#! $xcat" > sharp
1138                 $eunicefix sharp
1139                 chmod +x sharp
1140                 ./sharp > today
1141                 if test -s today; then
1142                         sharpbang='#! '
1143                 else
1144                         sharpbang=': use '
1145                 fi
1146         fi
1147 else
1148         echo " "
1149         echo "Your $sh doesn't grok # comments--I will strip them later on."
1150         shsharp=false
1151         cd ..
1152         echo "exec grep -v '^[  ]*#'" >spitshell
1153         chmod +x spitshell
1154         $eunicefix spitshell
1155         spitshell=`pwd`/spitshell
1156         cd UU
1157         echo "I presume that if # doesn't work, #! won't work either!"
1158         sharpbang=': use '
1159 fi
1160 rm -f sharp today
1161
1162 : figure out how to guarantee sh startup
1163 case "$startsh" in
1164 '') startsh=${sharpbang}${sh} ;;
1165 *)
1166 esac
1167 cat >sharp <<EOSS
1168 $startsh
1169 set abc
1170 test "$?abc" != 1
1171 EOSS
1172
1173 chmod +x sharp
1174 $eunicefix sharp
1175 if ./sharp; then
1176         : echo "Yup, it does."
1177 else
1178         echo "Hmm... '$startsh' does not guarantee sh startup..."
1179         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1180 fi
1181 rm -f sharp
1182
1183
1184 : Save command line options in file UU/cmdline.opt for later use in
1185 : generating config.sh.
1186 cat > cmdline.opt <<EOSH
1187 # Configure command line arguments.
1188 config_arg0='$0'
1189 config_args='$*'
1190 config_argc=$#
1191 EOSH
1192 argn=1
1193 for arg in "$@"; do
1194         cat >>cmdline.opt <<EOSH
1195 config_arg$argn='$arg'
1196 EOSH
1197         argn=`expr $argn + 1`
1198 done
1199
1200 : produce awk script to parse command line options
1201 cat >options.awk <<'EOF'
1202 BEGIN {
1203         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1204
1205         len = length(optstr);
1206         for (i = 1; i <= len; i++) {
1207                 c = substr(optstr, i, 1);
1208                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1209                 if (a == ":") {
1210                         arg[c] = 1;
1211                         i++;
1212                 }
1213                 opt[c] = 1;
1214         }
1215 }
1216 {
1217         expect = 0;
1218         str = $0;
1219         if (substr(str, 1, 1) != "-") {
1220                 printf("'%s'\n", str);
1221                 next;
1222         }
1223         len = length($0);
1224         for (i = 2; i <= len; i++) {
1225                 c = substr(str, i, 1);
1226                 if (!opt[c]) {
1227                         printf("-%s\n", substr(str, i));
1228                         next;
1229                 }
1230                 printf("-%s\n", c);
1231                 if (arg[c]) {
1232                         if (i < len)
1233                                 printf("'%s'\n", substr(str, i + 1));
1234                         else
1235                                 expect = 1;
1236                         next;
1237                 }
1238         }
1239 }
1240 END {
1241         if (expect)
1242                 print "?";
1243 }
1244 EOF
1245
1246 : process the command line options
1247 set X `for arg in "$@"; do echo "X$arg"; done |
1248         sed -e s/X// | awk -f options.awk`
1249 eval "set $*"
1250 shift
1251 rm -f options.awk
1252
1253 : set up default values
1254 fastread=''
1255 reuseval=false
1256 config_sh=''
1257 alldone=''
1258 error=''
1259 silent=''
1260 extractsh=''
1261 override=''
1262 knowitall=''
1263 rm -f optdef.sh posthint.sh
1264 cat >optdef.sh <<EOS
1265 $startsh
1266 EOS
1267
1268
1269 : option parsing
1270 while test $# -gt 0; do
1271         case "$1" in
1272         -d) shift; fastread=yes;;
1273         -e) shift; alldone=cont;;
1274         -f)
1275                 shift
1276                 cd ..
1277                 if test -r "$1"; then
1278                         config_sh="$1"
1279                 else
1280                         echo "$me: cannot read config file $1." >&2
1281                         error=true
1282                 fi
1283                 cd UU
1284                 shift;;
1285         -h) shift; error=true;;
1286         -r) shift; reuseval=true;;
1287         -s) shift; silent=true; realsilent=true;;
1288         -E) shift; alldone=exit;;
1289         -K) shift; knowitall=true;;
1290         -O) shift; override=true;;
1291         -S) shift; silent=true; extractsh=true;;
1292         -D)
1293                 shift
1294                 case "$1" in
1295                 *=)
1296                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1297                         echo "$me: ignoring -D $1" >&2
1298                         ;;
1299                 *=*) echo "$1" | \
1300                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1301                 *) echo "$1='define'" >> optdef.sh;;
1302                 esac
1303                 shift
1304                 ;;
1305         -U)
1306                 shift
1307                 case "$1" in
1308                 *=) echo "$1" >> optdef.sh;;
1309                 *=*)
1310                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1311                         echo "$me: ignoring -U $1" >&2
1312                         ;;
1313                 *) echo "$1='undef'" >> optdef.sh;;
1314                 esac
1315                 shift
1316                 ;;
1317         -A)
1318             shift
1319             xxx=''
1320             yyy="$1"
1321             zzz=''
1322             uuu=undef
1323             case "$yyy" in
1324             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1325                  case "$zzz" in
1326                  *:*) zzz='' ;;
1327                  *)   xxx=append
1328                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1329                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1330                  esac
1331                  ;;
1332             esac
1333             case "$xxx" in
1334             '')  case "$yyy" in
1335                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1336                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1337                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1338                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1339                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1340                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1341                  esac
1342                  ;;       
1343             esac
1344             case "$xxx" in
1345             append)
1346                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1347             clear)
1348                 echo "$yyy=''"                  >> posthint.sh ;;
1349             define)
1350                 case "$zzz" in
1351                 '') zzz=define ;;
1352                 esac
1353                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1354             eval)
1355                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1356             prepend)
1357                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1358             undef)
1359                 case "$zzz" in
1360                 '') zzz="$uuu" ;;
1361                 esac
1362                 echo "$yyy=$zzz"                >> posthint.sh ;;
1363             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1364             esac
1365             shift
1366             ;;
1367         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1368             exit 0;;
1369         --) break;;
1370         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1371         *) break;;
1372         esac
1373 done
1374
1375 case "$error" in
1376 true)
1377         cat >&2 <<EOM
1378 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1379                  [-U symbol] [-U symbol=] [-A command:symbol...]
1380   -d : use defaults for all answers.
1381   -e : go on without questioning past the production of config.sh.
1382   -f : specify an alternate default configuration file.
1383   -h : print this help message and exit (with an error status).
1384   -r : reuse C symbols value if possible (skips costly nm extraction).
1385   -s : silent mode, only echoes questions and essential information.
1386   -D : define symbol to have some value:
1387          -D symbol         symbol gets the value 'define'
1388          -D symbol=value   symbol gets the value 'value'
1389   -E : stop at the end of questions, after having produced config.sh.
1390   -K : do not use unless you know what you are doing.
1391   -O : let -D and -U override definitions from loaded configuration file.
1392   -S : perform variable substitutions on all .SH files (can mix with -f)
1393   -U : undefine symbol:
1394          -U symbol    symbol gets the value 'undef'
1395          -U symbol=   symbol gets completely empty
1396   -A : manipulate symbol after the platform specific hints have been applied:
1397          -A symbol=value                append " "value to symbol
1398          -A append:symbol=value         append value to symbol
1399          -A define:symbol=value         define symbol to have value
1400          -A clear:symbol                define symbol to be ''
1401          -A define:symbol               define symbol to be 'define'
1402          -A eval:symbol=value           define symbol to be eval of value
1403          -A prepend:symbol=value        prepend value to symbol
1404          -A undef:symbol                define symbol to be 'undef'
1405          -A undef:symbol=               define symbol to be ''
1406   -V : print version number and exit (with a zero status).
1407 EOM
1408         exit 1
1409         ;;
1410 esac
1411
1412 : Sanity checks
1413 case "$fastread$alldone" in
1414 yescont|yesexit) ;;
1415 *)
1416         case "$extractsh" in
1417         true) ;;
1418         *)
1419                 if test ! -t 0; then
1420                         echo "Say 'sh Configure', not 'sh <Configure'"
1421                         exit 1
1422                 fi
1423                 ;;
1424         esac
1425         ;;
1426 esac
1427
1428 exec 4>&1
1429 case "$silent" in
1430 true) exec 1>/dev/null;;
1431 esac
1432
1433 : run the defines and the undefines, if any, but leave the file out there...
1434 touch optdef.sh
1435 . ./optdef.sh
1436 : create the posthint manipulation script and leave the file out there...
1437 touch posthint.sh
1438
1439 : set package name
1440 package=perl5
1441 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1442 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1443 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1444 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1445 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1446 esac
1447
1448 : Some greps do not return status, grrr.
1449 echo "grimblepritz" >grimble
1450 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1451         contains=contains
1452 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1453         contains=grep
1454 else
1455         contains=contains
1456 fi
1457 rm -f grimble
1458 : the following should work in any shell
1459 case "$contains" in
1460 contains*)
1461         echo " "
1462         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1463         cat >contains <<'EOSS'
1464 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1465 EOSS
1466 chmod +x contains
1467 esac
1468
1469 : Find the path to the source tree
1470 case "$src" in
1471 '') case "$0" in
1472     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1473          case "$src" in
1474          /*)    ;;
1475          .)     ;;
1476          *)     src=`cd ../$src && pwd` ;;
1477          esac
1478          ;;
1479     *)   src='.';;
1480     esac;;
1481 esac
1482 case "$src" in
1483 '')     src=/
1484         rsrc=/
1485         ;;
1486 /*) rsrc="$src";;
1487 *) rsrc="../$src";;
1488 esac
1489 if test -f $rsrc/Configure && \
1490         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1491 then
1492    : found it, so we are ok.
1493 else
1494         rsrc=''
1495         for src in . .. ../.. ../../.. ../../../..; do
1496                 if test -f ../$src/Configure && \
1497                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1498                 then
1499                         rsrc=../$src
1500                         break
1501                 fi
1502         done
1503 fi
1504 case "$rsrc" in
1505 '')
1506         cat <<EOM >&4
1507
1508 Sorry, I can't seem to locate the source dir for $package.  Please start
1509 Configure with an explicit path -- i.e. /some/path/Configure.
1510
1511 EOM
1512         exit 1
1513         ;;
1514 ../.)   rsrc='..';;
1515 *)
1516         echo " "
1517         echo "Sources for $package found in \"$src\"." >&4
1518         ;;
1519 esac
1520
1521 : script used to extract .SH files with variable substitutions
1522 cat >extract <<'EOS'
1523 PERL_CONFIG_SH=true
1524 echo "Doing variable substitutions on .SH files..."
1525 if test -f MANIFEST; then
1526         set x `awk '{print $1}' < MANIFEST | grep '\.SH$'`
1527 else
1528         echo "(Looking for .SH files under the source directory.)"
1529         set x `(cd $src; find . -name "*.SH" -print)`
1530 fi
1531 shift
1532 case $# in
1533 0) set x `(cd $src; echo *.SH)`; shift;;
1534 esac
1535 if test ! -f $src/$1; then
1536         shift
1537 fi
1538 mkdir_p='
1539 name=$1;
1540 create="";
1541 while test $name; do
1542         if test ! -d "$name"; then
1543                 create="$name $create";
1544                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1545                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1546         else
1547                 name="";
1548         fi;
1549 done;
1550 for file in $create; do
1551         mkdir $file;
1552 done
1553 '
1554 for file in $*; do
1555         case "$src" in
1556         ".")
1557                 case "$file" in
1558                 */*)
1559                         dir=`expr X$file : 'X\(.*\)/'`
1560                         file=`expr X$file : 'X.*/\(.*\)'`
1561                         (cd $dir && . ./$file)
1562                         ;;
1563                 *)
1564                         . ./$file
1565                         ;;
1566                 esac
1567                 ;;
1568         *)
1569                 case "$file" in
1570                 */*)
1571                         dir=`expr X$file : 'X\(.*\)/'`
1572                         file=`expr X$file : 'X.*/\(.*\)'`
1573                         (set x $dir; shift; eval $mkdir_p)
1574                         sh <$src/$dir/$file
1575                         ;;
1576                 *)
1577                         sh <$src/$file
1578                         ;;
1579                 esac
1580                 ;;
1581         esac
1582 done
1583 if test -f $src/config_h.SH; then
1584         if test ! -f config.h; then
1585         : oops, they left it out of MANIFEST, probably, so do it anyway.
1586         . $src/config_h.SH
1587         fi
1588 fi
1589 EOS
1590
1591 : extract files and exit if asked to do so
1592 case "$extractsh" in
1593 true)
1594         case "$realsilent" in
1595         true) ;;
1596         *) exec 1>&4;;
1597         esac
1598         case "$config_sh" in
1599         '') config_sh='config.sh';;
1600         esac
1601         echo " "
1602         echo "Fetching answers from $config_sh..."
1603         cd ..
1604         . $config_sh
1605         test "$override" && . ./optdef.sh
1606         echo " "
1607         . UU/extract
1608         rm -rf UU
1609         echo "Extraction done."
1610         exit 0
1611         ;;
1612 esac
1613
1614 : Eunice requires " " instead of "", can you believe it
1615 echo " "
1616 : Here we go...
1617 echo "Beginning of configuration questions for $package."
1618
1619 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1620
1621 : first determine how to suppress newline on echo command
1622 echo " "
1623 echo "Checking echo to see how to suppress newlines..."
1624 (echo "hi there\c" ; echo " ") >.echotmp
1625 if $contains c .echotmp >/dev/null 2>&1 ; then
1626         echo "...using -n."
1627         n='-n'
1628         c=''
1629 else
1630         cat <<'EOM'
1631 ...using \c
1632 EOM
1633         n=''
1634         c='\c'
1635 fi
1636 echo $n "The star should be here-->$c"
1637 echo '*'
1638 rm -f .echotmp
1639
1640 : Now test for existence of everything in MANIFEST
1641 echo " "
1642 if test -f $rsrc/MANIFEST; then
1643         echo "First let's make sure your kit is complete.  Checking..." >&4
1644         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1645         rm -f missing
1646         tmppwd=`pwd`
1647         for filelist in x??; do
1648                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1649         done
1650         if test -s missing; then
1651                 cat missing >&4
1652                 cat >&4 <<'EOM'
1653
1654 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1655
1656 You have the option of continuing the configuration process, despite the
1657 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1658 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1659 and contact the author (perlbug@perl.org).
1660
1661 EOM
1662                 echo $n "Continue? [n] $c" >&4
1663                 read ans
1664                 case "$ans" in
1665                 y*)
1666                         echo "Continuing..." >&4
1667                         rm -f missing
1668                         ;;
1669                 *)
1670                         echo "ABORTING..." >&4
1671                         kill $$
1672                         ;;
1673                 esac
1674         else
1675                 echo "Looks good..."
1676         fi
1677 else
1678         echo "There is no MANIFEST file.  I hope your kit is complete !"
1679 fi
1680 rm -f missing x??
1681
1682 echo " "
1683 : Find the appropriate value for a newline for tr
1684 if test -n "$DJGPP"; then
1685        trnl='\012'
1686 fi
1687 if test X"$trnl" = X; then
1688         case "`echo foo|tr '\n' x 2>/dev/null`" in
1689         foox) trnl='\n' ;;
1690         esac
1691 fi
1692 if test X"$trnl" = X; then
1693         case "`echo foo|tr '\012' x 2>/dev/null`" in
1694         foox) trnl='\012' ;;
1695         esac
1696 fi
1697 if test X"$trnl" = X; then
1698         cat <<EOM >&2
1699
1700 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1701
1702 EOM
1703         exit 1
1704 fi
1705
1706 : compute the number of columns on the terminal for proper question formatting
1707 case "$COLUMNS" in
1708 '') COLUMNS='80';;
1709 esac
1710
1711 : set up the echo used in my read
1712 myecho="case \"\$xxxm\" in
1713 '') echo $n \"\$rp $c\" >&4;;
1714 *) case \"\$rp\" in
1715         '') echo $n \"[\$xxxm] $c\";;
1716         *)
1717                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1718                         echo \"\$rp\" >&4
1719                         echo $n \"[\$xxxm] $c\" >&4
1720                 else
1721                         echo $n \"\$rp [\$xxxm] $c\" >&4
1722                 fi
1723                 ;;
1724         esac;;
1725 esac"
1726
1727 : now set up to do reads with possible shell escape and default assignment
1728 cat <<EOSC >myread
1729 $startsh
1730 xxxm=\$dflt
1731 $myecho
1732 ans='!'
1733 case "\$fastread" in
1734 yes) case "\$dflt" in
1735         '') ;;
1736         *) ans='';
1737                 case "\$silent-\$rp" in
1738                 true-) ;;
1739                 *) echo " " >&4;;
1740                 esac;;
1741         esac;;
1742 *) case "\$silent" in
1743         true) case "\$rp" in
1744                 '') ans='';;
1745                 esac;;
1746         esac;;
1747 esac
1748 while expr "X\$ans" : "X!" >/dev/null; do
1749         read answ
1750         set x \$xxxm
1751         shift
1752         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1753         case  "\$answ" in
1754         "!")
1755                 sh 1>&4
1756                 echo " "
1757                 $myecho
1758                 ;;
1759         !*)
1760                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1761                 shift
1762                 sh 1>&4 -c "\$*"
1763                 echo " "
1764                 $myecho
1765                 ;;
1766         "\$ans")
1767                 case "\$ans" in
1768                 \\&*)
1769                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1770                         shift
1771                         case "\$1" in
1772                         -d)
1773                                 fastread=yes
1774                                 echo "(OK, I'll run with -d after this question.)" >&4
1775                                 ;;
1776                         -*)
1777                                 echo "*** Sorry, \$1 not supported yet." >&4
1778                                 ;;
1779                         esac
1780                         $myecho
1781                         ans=!
1782                         ;;
1783                 esac;;
1784         *)
1785                 case "\$aok" in
1786                 y)
1787                         echo "*** Substitution done -- please confirm."
1788                         xxxm="\$ans"
1789                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1790                         xxxm="\$ans"
1791                         ans=!
1792                         ;;
1793                 *)
1794                         echo "*** Error -- try again."
1795                         ans=!
1796                         ;;
1797                 esac
1798                 $myecho
1799                 ;;
1800         esac
1801         case "\$ans\$xxxm\$nostick" in
1802         '')
1803                 ans=!
1804                 $myecho
1805                 ;;
1806         esac
1807 done
1808 case "\$ans" in
1809 '') ans="\$xxxm";;
1810 esac
1811 EOSC
1812
1813 : create .config dir to save info across Configure sessions
1814 test -d ../.config || mkdir ../.config
1815 cat >../.config/README <<EOF
1816 This directory created by Configure to save information that should
1817 persist across sessions for $package.
1818
1819 You may safely delete it if you wish.
1820 EOF
1821
1822 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
1823 case "$usedevel" in
1824 $define|true|[yY]*) ;;
1825 *) case "$xversion" in
1826    *[13579])
1827         cat >&4 <<EOH
1828 *** WHOA THERE!!! ***
1829
1830     This is an UNSTABLE DEVELOPMENT release.
1831     The version of this $package distribution is $xversion, that is, odd,
1832     (as opposed to even) and that signifies a development release.
1833     If you want a maintenance release, you want an even-numbered version.
1834
1835     Do ***NOT*** install this into production use.
1836     Data corruption and crashes are possible.
1837
1838     It is most seriously suggested that you do not continue any further
1839     unless you want to help in developing and debugging Perl.
1840
1841     If you *still* want to build perl, you can answer 'y' now,
1842     or pass -Dusedevel to Configure.
1843
1844 EOH
1845         rp='Do you really want to continue?'
1846         dflt='n'
1847         . ./myread
1848         case "$ans" in
1849         [yY]) echo >&4 "Okay, continuing."
1850               usedevel="$define" ;;
1851         *) echo >&4 "Okay, bye."
1852            exit 1
1853            ;;
1854         esac
1855         ;;
1856     esac
1857     ;;
1858 esac
1859 case "$usedevel" in
1860 $define|true|[yY]*)
1861         case "$versiononly" in
1862         '') versiononly="$define" ;;
1863         esac
1864         case "$installusrbinperl" in
1865         '') installusrbinperl="$undef" ;;
1866         esac
1867         ;;
1868 esac
1869
1870 : general instructions
1871 needman=true
1872 firsttime=true
1873 user=`(logname) 2>/dev/null`
1874 case "$user" in
1875 '') user=`whoami 2>&1`;;
1876 esac
1877 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1878         firsttime=false
1879         echo " "
1880         rp='Would you like to see the instructions?'
1881         dflt=n
1882         . ./myread
1883         case "$ans" in
1884         [yY]*) ;;
1885         *) needman=false;;
1886         esac
1887 fi
1888 if $needman; then
1889         cat <<EOH
1890
1891 This installation shell script will examine your system and ask you questions
1892 to determine how the perl5 package should be installed. If you get
1893 stuck on a question, you may use a ! shell escape to start a subshell or
1894 execute a command.  Many of the questions will have default answers in square
1895 brackets; typing carriage return will give you the default.
1896
1897 On some of the questions which ask for file or directory names you are allowed
1898 to use the ~name construct to specify the login directory belonging to "name",
1899 even if you don't have a shell which knows about that.  Questions where this is
1900 allowed will be marked "(~name ok)".
1901
1902 EOH
1903         rp=''
1904         dflt='Type carriage return to continue'
1905         . ./myread
1906         cat <<'EOH'
1907
1908 The prompter used in this script allows you to use shell variables and
1909 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1910 in the default answer, as if the default line was a set of arguments given to a
1911 script shell.  This means you may also use $* to repeat the whole default line,
1912 so you do not have to re-type everything to add something to the default.
1913
1914 Everytime there is a substitution, you will have to confirm.  If there is an
1915 error (e.g. an unmatched backtick), the default answer will remain unchanged
1916 and you will be prompted again.
1917
1918 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1919 the questions and use the computed defaults (or the previous answers if there
1920 was already a config.sh file). Type 'Configure -h' for a list of options.
1921 You may also start interactively and then answer '& -d' at any prompt to turn
1922 on the non-interactive behaviour for the remainder of the execution.
1923
1924 EOH
1925         . ./myread
1926         cat <<EOH
1927
1928 Much effort has been expended to ensure that this shell script will run on any
1929 Unix system.  If despite that it blows up on yours, your best bet is to edit
1930 Configure and run it again.  If you can't run Configure for some reason,
1931 you'll have to generate a config.sh file by hand.  Whatever problems you
1932 have, let me (perlbug@perl.org) know how I blew it.
1933
1934 This installation script affects things in two ways:
1935
1936 1) it may do direct variable substitutions on some of the files included
1937    in this kit.
1938 2) it builds a config.h file for inclusion in C programs.  You may edit
1939    any of these files as the need arises after running this script.
1940
1941 If you make a mistake on a question, there is no easy way to back up to it
1942 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1943 files.  Configure will offer to let you do this before it runs the SH files.
1944
1945 EOH
1946         dflt='Type carriage return to continue'
1947         . ./myread
1948         case "$firsttime" in
1949         true) echo $user >>../.config/instruct;;
1950         esac
1951 fi
1952
1953 : find out where common programs are
1954 echo " "
1955 echo "Locating common programs..." >&4
1956 cat <<EOSC >loc
1957 $startsh
1958 case \$# in
1959 0) exit 1;;
1960 esac
1961 thing=\$1
1962 shift
1963 dflt=\$1
1964 shift
1965 for dir in \$*; do
1966         case "\$thing" in
1967         .)
1968         if test -d \$dir/\$thing; then
1969                 echo \$dir
1970                 exit 0
1971         fi
1972         ;;
1973         *)
1974         for thisthing in \$dir/\$thing; do
1975                 : just loop through to pick last item
1976         done
1977         if test -f \$thisthing; then
1978                 echo \$thisthing
1979                 exit 0
1980         elif test -f \$dir/\$thing.exe; then
1981                 if test -n "$DJGPP"; then
1982                         echo \$dir/\$thing.exe
1983                 else
1984                         : on Eunice apparently
1985                         echo \$dir/\$thing
1986                 fi
1987                 exit 0
1988         fi
1989         ;;
1990         esac
1991 done
1992 echo \$dflt
1993 exit 1
1994 EOSC
1995 chmod +x loc
1996 $eunicefix loc
1997 loclist="
1998 awk
1999 cat
2000 comm
2001 cp
2002 echo
2003 expr
2004 grep
2005 ls
2006 make
2007 mkdir
2008 rm
2009 sed
2010 sort
2011 touch
2012 tr
2013 uniq
2014 "
2015 trylist="
2016 Mcc
2017 ar
2018 bison
2019 byacc
2020 cpp
2021 csh
2022 date
2023 egrep
2024 gzip
2025 less
2026 ln
2027 more
2028 nm
2029 nroff
2030 pg
2031 test
2032 uname
2033 zip
2034 "
2035 pth=`echo $PATH | sed -e "s/$p_/ /g"`
2036 pth="$pth /lib /usr/lib"
2037 for file in $loclist; do
2038         eval xxx=\$$file
2039         case "$xxx" in
2040         /*|?:[\\/]*)
2041                 if test -f "$xxx"; then
2042                         : ok
2043                 else
2044                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2045                         xxx=`./loc $file $file $pth`
2046                 fi
2047                 ;;
2048         '') xxx=`./loc $file $file $pth`;;
2049         *) xxx=`./loc $xxx $xxx $pth`;;
2050         esac
2051         eval $file=$xxx
2052         eval _$file=$xxx
2053         case "$xxx" in
2054         /*)
2055                 echo $file is in $xxx.
2056                 ;;
2057         ?:[\\/]*)
2058                 echo $file is in $xxx.
2059                 ;;
2060         *)
2061                 echo "I don't know where '$file' is, and my life depends on it." >&4
2062                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2063                 exit 1
2064                 ;;
2065         esac
2066 done
2067 echo " "
2068 echo "Don't worry if any of the following aren't found..."
2069 say=offhand
2070 for file in $trylist; do
2071         eval xxx=\$$file
2072         case "$xxx" in
2073         /*|?:[\\/]*)
2074                 if test -f "$xxx"; then
2075                         : ok
2076                 else
2077                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2078                         xxx=`./loc $file $file $pth`
2079                 fi
2080                 ;;
2081         '') xxx=`./loc $file $file $pth`;;
2082         *) xxx=`./loc $xxx $xxx $pth`;;
2083         esac
2084         eval $file=$xxx
2085         eval _$file=$xxx
2086         case "$xxx" in
2087         /*)
2088                 echo $file is in $xxx.
2089                 ;;
2090         ?:[\\/]*)
2091                 echo $file is in $xxx.
2092                 ;;
2093         *)
2094                 echo "I don't see $file out there, $say."
2095                 say=either
2096                 ;;
2097         esac
2098 done
2099 case "$egrep" in
2100 egrep)
2101         echo "Substituting grep for egrep."
2102         egrep=$grep
2103         ;;
2104 esac
2105 case "$ln" in
2106 ln)
2107         echo "Substituting cp for ln."
2108         ln=$cp
2109         ;;
2110 esac
2111 case "$test" in
2112 test)
2113         echo "Hopefully test is built into your sh."
2114         ;;
2115 *)
2116         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2117                 echo "Using the test built into your sh."
2118                 test=test
2119                 _test=test
2120         fi
2121         ;;
2122 esac
2123 case "$echo" in
2124 echo)
2125         echo "Hopefully echo is built into your sh."
2126         ;;
2127 '') ;;
2128 *)
2129         echo " "
2130 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2131         $echo $n "hi there$c" >foo1
2132         echo $n "hi there$c" >foo2
2133         if cmp foo1 foo2 >/dev/null 2>&1; then
2134                 echo "They are compatible.  In fact, they may be identical."
2135         else
2136                 case "$n" in
2137                 '-n') n='' c='\c';;
2138                 *) n='-n' c='';;
2139                 esac
2140                 cat <<FOO
2141 They are not compatible!  You are probably running ksh on a non-USG system.
2142 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2143 have echo built in and we may have to run some Bourne shell scripts.  That
2144 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2145
2146 FOO
2147                 $echo $n "The star should be here-->$c"
2148                 $echo "*"
2149         fi
2150         $rm -f foo1 foo2
2151         ;;
2152 esac
2153
2154 cat <<EOS >checkcc
2155 $startsh
2156 EOS
2157 cat <<'EOSC' >>checkcc
2158 case "$cc" in
2159 '') ;;
2160 *)  $rm -f try try.*
2161     $cat >try.c <<EOM
2162 int main(int argc, char *argv[]) {
2163   return 0;
2164 }
2165 EOM
2166     if $cc -o try $ccflags $ldflags try.c; then
2167        :
2168     else
2169         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2170         despair=yes
2171         trygcc=yes
2172         case "$cc" in
2173         *gcc*) trygcc=no ;;
2174         esac
2175         case "`$cc -v -c try.c 2>&1`" in
2176         *gcc*) trygcc=no ;;
2177         esac
2178         if $test X"$trygcc" = Xyes; then
2179             if gcc -o try -c try.c; then
2180                 echo " "
2181                 echo "You seem to have a working gcc, though." >&4
2182                 rp="Would you like to use it?"
2183                 dflt=y
2184                 if $test -f myread; then
2185                     . ./myread
2186                 else
2187                     if $test -f UU/myread; then
2188                         . ./UU/myread
2189                     else
2190                         echo "Cannot find myread, sorry.  Aborting." >&2
2191                         exit 1
2192                     fi
2193                 fi  
2194                 case "$ans" in
2195                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2196                 esac
2197             fi
2198         fi
2199         if $test X"$despair" = Xyes; then
2200             $cat >&4 <<EOM
2201 You need to find a working C compiler.
2202 Either (purchase and) install the C compiler supplied by your OS vendor,
2203 or for a free C compiler try http://gcc.gnu.org/
2204 I cannot continue any further, aborting.
2205 EOM
2206             exit 1
2207         fi
2208     fi
2209     $rm -f try try.*
2210     ;;
2211 esac
2212 EOSC
2213
2214 : determine whether symbolic links are supported
2215 echo " "
2216 $touch blurfl
2217 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2218         echo "Symbolic links are supported." >&4
2219         lns="$ln -s"
2220 else
2221         echo "Symbolic links are NOT supported." >&4
2222         lns="$ln"
2223 fi
2224 $rm -f blurfl sym
2225
2226 : determine whether symbolic links are supported
2227 echo " "
2228 case "$lns" in
2229 *"ln -s")
2230         echo "Checking how to test for symbolic links..." >&4
2231         $lns blurfl sym
2232         if $test "X$issymlink" = X; then
2233                 sh -c "PATH= test -h sym" >/dev/null 2>&1
2234                 if test $? = 0; then
2235                         issymlink="test -h"
2236                 fi              
2237         fi
2238         if $test "X$issymlink" = X; then
2239                 if  $test -h >/dev/null 2>&1; then
2240                         issymlink="$test -h"
2241                         echo "Your builtin 'test -h' may be broken, I'm using external '$test -h'." >&4
2242                 fi              
2243         fi
2244         if $test "X$issymlink" = X; then
2245                 if $test -L sym 2>/dev/null; then
2246                         issymlink="$test -L"
2247                 fi
2248         fi
2249         if $test "X$issymlink" != X; then
2250                 echo "You can test for symbolic links with '$issymlink'." >&4
2251         else
2252                 echo "I do not know how you can test for symbolic links." >&4
2253         fi
2254         $rm -f blurfl sym
2255         ;;
2256 *)      echo "No symbolic links, so not testing for their testing..." >&4
2257         ;;
2258 esac
2259 echo " "
2260
2261
2262 case "$mksymlinks" in
2263 $define|true|[yY]*)
2264         case "$src" in
2265         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2266                 exit 1
2267                 ;;
2268         *)      case "$lns:$issymlink" in
2269                 *"ln -s:"*"test -"?)
2270                         echo "Creating the symbolic links..." >&4
2271                         echo "(First creating the subdirectories...)" >&4
2272                         cd ..
2273                         awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | sort -u | while true; do
2274                                 read directory
2275                                 test -z "$directory" && break
2276                                 mkdir -p $directory
2277                         done
2278                         # Sanity check 1.
2279                         if test ! -d t/base; then
2280                                 echo "Failed to create the subdirectories.  Aborting." >&4
2281                                 exit 1
2282                         fi
2283                         echo "(Then creating the symlinks...)" >&4
2284                         awk '{print $1}' $src/MANIFEST | while true; do
2285                                 read filename
2286                                 test -z "$filename" && break
2287                                 if test -f $filename; then
2288                                         if $issymlink $filename; then
2289                                                 rm -f $filename
2290                                         fi
2291                                 fi
2292                                 if test -f $filename; then
2293                                         echo "$filename already exists, not symlinking."
2294                                 else
2295                                         ln -s $src/$filename $filename
2296                                 fi
2297                         done
2298                         # Sanity check 2.
2299                         if test ! -f t/base/commonsense.t; then
2300                                 echo "Failed to create the symlinks.  Aborting." >&4
2301                                 exit 1
2302                         fi
2303                         cd UU
2304                         ;;
2305                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2306                         ;;
2307                 esac
2308                 ;;
2309         esac
2310         ;;
2311 esac
2312
2313
2314 case "$usecrosscompile" in
2315 $define|true|[yY]*)
2316         $echo "Cross-compiling..."
2317         croak=''
2318         case "$cc" in
2319         *-*-gcc) # A cross-compiling gcc, probably.
2320             targetarch=`$echo $cc|$sed 's/-gcc$//'`
2321             ar=$targetarch-ar
2322             # leave out ld, choosing it is more complex
2323             nm=$targetarch-nm
2324             ranlib=$targetarch-ranlib
2325             $echo 'extern int foo;' > try.c
2326             set X `$cc -v -E perl.c 2>&1 | $awk '/^#include </,/^End of search /'|$grep '/include'`
2327             shift
2328             if $test $# -gt 0; then
2329                 incpth="$incpth $*"
2330                 incpth="$echo $incpth|$sed 's/^ //'"
2331                 echo "Guessing incpth $incpth" >&4
2332                 for i in $*; do
2333                     j=`$echo $i|$sed 's,/include$,/lib,'`
2334                     if $test -d $j; then
2335                         libpth="$libpth $j"
2336                     fi
2337                 done   
2338                 libpth="$echo $libpth|$sed 's/^ //'"
2339                 echo "Guessing libpth $libpth." >&4
2340             fi
2341             $rm -f try.c
2342             ;;
2343         esac
2344         case "$targetarch" in
2345         '') echo "Targetarch not defined." >&4; croak=y ;;
2346         *)  echo "Using targetarch $targetarch." >&4 ;;
2347         esac
2348         case "$incpth" in
2349         '') echo "Incpth not defined." >&4; croak=y ;;
2350         *)  echo "Using incpth $incpth." >&4 ;;
2351         esac
2352         case "$libpth" in
2353         '') echo "Libpth not defined." >&4; croak=y ;;
2354         *)  echo "Using libpth $libpth." >&4 ;;
2355         esac
2356         case "$usrinc" in
2357         '') for i in $incpth; do
2358                 if $test -f $i/errno.h -a -f $i/stdio.h -a -f $i/time.h; then
2359                     usrinc=$i
2360                     echo "Guessing usrinc $usrinc." >&4
2361                     break
2362                 fi
2363             done
2364             case "$usrinc" in
2365             '') echo "Usrinc not defined." >&4; croak=y ;;
2366             esac
2367             ;;
2368         *)  echo "Using usrinc $usrinc." >&4 ;;
2369         esac
2370         case "$targethost" in
2371         '') echo "Targethost not defined." >&4; croak=y ;;
2372         *)  echo "Using targethost $targethost." >&4
2373         esac
2374         locincpth=' '
2375         loclibpth=' '
2376         case "$croak" in
2377         y) echo "Cannot continue, aborting." >&4; exit 1 ;;
2378         esac
2379         case "$src" in
2380         /*) run=$src/Cross/run
2381             targetmkdir=$src/Cross/mkdir
2382             to=$src/Cross/to
2383             from=$src/Cross/from
2384             ;;
2385         *)  pwd=`$test -f ../Configure & cd ..; pwd`
2386             run=$pwd/Cross/run
2387             targetmkdir=$pwd/Cross/mkdirkrun
2388             to=$pwd/Cross/to
2389             from=$pwd/Cross/from
2390             ;;
2391         esac
2392         case "$targetrun" in
2393         '') targetrun=ssh ;;
2394         esac
2395         case "$targetto" in
2396         '') targetto=scp ;;
2397         esac
2398         case "$targetfrom" in
2399         '') targetfrom=scp ;;
2400         esac
2401         run=$run-$targetrun
2402         to=$to-$targetto
2403         from=$from-$targetfrom
2404         case "$targetdir" in
2405         '')  targetdir=/tmp
2406              echo "Guessing targetdir $targetdir." >&4
2407              ;;
2408         esac
2409         case "$targetuser" in
2410         '')  targetuser=root
2411              echo "Guessing targetuser $targetuser." >&4
2412              ;;
2413         esac
2414         case "$targetfrom" in
2415         scp)    q=-q ;;
2416         *)      q='' ;;
2417         esac
2418         case "$targetrun" in
2419         ssh|rsh)
2420             cat >$run <<EOF
2421 #!/bin/sh
2422 case "\$1" in
2423 -cwd)
2424   shift
2425   cwd=\$1
2426   shift
2427   ;;
2428 esac
2429 case "\$cwd" in
2430 '') cwd=$targetdir ;;
2431 esac
2432 exe=\$1
2433 shift
2434 if $test ! -f \$exe.xok; then
2435   $to \$exe
2436   $touch \$exe.xok
2437 fi
2438 $targetrun -l $targetuser $targethost "cd \$cwd && ./\$exe \$@"
2439 EOF
2440             ;;
2441         *)  echo "Unknown targetrun '$targetrun'" >&4
2442             exit 1
2443             ;;
2444         esac
2445         case "$targetmkdir" in
2446         */Cross/mkdir)
2447             cat >$targetmkdir <<EOF
2448 #!/bin/sh
2449 $targetrun -l $targetuser $targethost "mkdir -p \$@"
2450 EOF
2451             ;;
2452         *)  echo "Unknown targetmkdir '$targetmkdir'" >&4
2453             exit 1
2454             ;;
2455         esac
2456         case "$targetto" in
2457         scp|rcp)
2458             cat >$to <<EOF
2459 #!/bin/sh
2460 for f in \$@
2461 do
2462   case "\$f" in
2463   /*)
2464     $targetmkdir \`dirname \$f\`
2465     $targetto $q \$f $targetuser@$targethost:\$f            || exit 1
2466     ;;
2467   *)
2468     $targetmkdir $targetdir/\`dirname \$f\`
2469     $targetto $q \$f $targetuser@$targethost:$targetdir/\$f || exit 1
2470     ;;
2471   esac
2472 done
2473 exit 0
2474 EOF
2475             ;;
2476         cp) cat >$to <<EOF
2477 #!/bin/sh
2478 for f in \$@
2479 do
2480   case "\$f" in
2481   /*)
2482     $mkdir -p $targetdir/\`dirname \$f\`
2483     $cp \$f $targetdir/\$f || exit 1
2484     ;;
2485   *)
2486     $targetmkdir $targetdir/\`dirname \$f\`
2487     $cp \$f $targetdir/\$f || exit 1
2488     ;;
2489   esac
2490 done
2491 exit 0
2492 EOF
2493             ;;
2494         *)  echo "Unknown targetto '$targetto'" >&4
2495             exit 1
2496             ;;
2497         esac
2498         case "$targetfrom" in
2499         scp|rcp)
2500           cat >$from <<EOF
2501 #!/bin/sh
2502 for f in \$@
2503 do
2504   $rm -f \$f
2505   $targetfrom $q $targetuser@$targethost:$targetdir/\$f . || exit 1
2506 done
2507 exit 0
2508 EOF
2509             ;;
2510         cp) cat >$from <<EOF
2511 #!/bin/sh
2512 for f in \$@
2513 do
2514   $rm -f \$f
2515   cp $targetdir/\$f . || exit 1
2516 done
2517 exit 0
2518 EOF
2519             ;;
2520         *)  echo "Unknown targetfrom '$targetfrom'" >&4
2521             exit 1
2522             ;;
2523         esac
2524         if $test ! -f $run; then
2525             echo "Target 'run' script '$run' not found." >&4
2526         else
2527             chmod a+rx $run
2528         fi
2529         if $test ! -f $to; then
2530             echo "Target 'to' script '$to' not found." >&4
2531         else
2532             chmod a+rx $to
2533         fi
2534         if $test ! -f $from; then
2535             echo "Target 'from' script '$from' not found." >&4
2536         else
2537             chmod a+rx $from
2538         fi
2539         if $test ! -f $run -o ! -f $to -o ! -f $from; then
2540             exit 1
2541         fi
2542         cat >&4 <<EOF
2543 Using '$run' for remote execution, and '$from' and '$to'
2544 for remote file transfer.
2545 EOF
2546         ;;
2547 *)      run=''
2548         to=:
2549         from=:
2550         usecrosscompile='undef'
2551         targetarch=''
2552         ;;
2553 esac
2554
2555 : see whether [:lower:] and [:upper:] are supported character classes
2556 echo " "
2557 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2558 ABYZ)
2559         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2560         up='[:upper:]'
2561         low='[:lower:]'
2562         ;;
2563 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2564         # (0xc9 and 0xd1), therefore that is a nice testing point.
2565         if test "X$up" = X -o "X$low" = X; then
2566             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2567             ij) up='[A-Z]'
2568                 low='[a-z]'
2569                 ;;
2570             esac
2571         fi
2572         if test "X$up" = X -o "X$low" = X; then
2573             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2574             ij) up='A-Z'
2575                 low='a-z'
2576                 ;;
2577             esac
2578         fi
2579         if test "X$up" = X -o "X$low" = X; then
2580             case "`echo IJ | od -x 2>/dev/null`" in
2581             *C9D1*|*c9d1*)
2582                 echo "Hey, this might be EBCDIC." >&4
2583                 if test "X$up" = X -o "X$low" = X; then
2584                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2585                     ij) up='[A-IJ-RS-Z]'
2586                         low='[a-ij-rs-z]'
2587                         ;;
2588                     esac
2589                 fi
2590                 if test "X$up" = X -o "X$low" = X; then
2591                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2592                     ij) up='A-IJ-RS-Z'
2593                         low='a-ij-rs-z'
2594                         ;;
2595                     esac
2596                 fi
2597                 ;;
2598             esac
2599         fi
2600 esac
2601 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2602 ij)
2603     echo "Using $up and $low to convert case." >&4
2604     ;;
2605 *)
2606     echo "I don't know how to translate letters from upper to lower case." >&4
2607     echo "Your tr is not acting any way I know of." >&4
2608     exit 1
2609     ;;
2610 esac
2611 : set up the translation script tr, must be called with ./tr of course
2612 cat >tr <<EOSC
2613 $startsh
2614 case "\$1\$2" in
2615 '[A-Z][a-z]') exec $tr '$up' '$low';;
2616 '[a-z][A-Z]') exec $tr '$low' '$up';;
2617 esac
2618 exec $tr "\$@"
2619 EOSC
2620 chmod +x tr
2621 $eunicefix tr
2622
2623 : Try to determine whether config.sh was made on this system
2624 case "$config_sh" in
2625 '')
2626 myuname=`$uname -a 2>/dev/null`
2627 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2628 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2629 # because the A-Z/a-z are not consecutive.
2630 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2631         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2632 newmyuname="$myuname"
2633 dflt=n
2634 case "$knowitall" in
2635 '')
2636         if test -f ../config.sh; then
2637                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2638                         eval "`grep myuname= ../config.sh`"
2639                 fi
2640                 if test "X$myuname" = "X$newmyuname"; then
2641                         dflt=y
2642                 fi
2643         fi
2644         ;;
2645 *) dflt=y;;
2646 esac
2647
2648 : Get old answers from old config file if Configure was run on the
2649 : same system, otherwise use the hints.
2650 hint=default
2651 cd ..
2652 if test -f config.sh; then
2653         echo " "
2654         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2655         . UU/myread
2656         case "$ans" in
2657         n*|N*) echo "OK, I'll ignore it."
2658                 mv config.sh config.sh.old
2659                 myuname="$newmyuname"
2660                 ;;
2661         *)  echo "Fetching default answers from your old config.sh file..." >&4
2662                 tmp_n="$n"
2663                 tmp_c="$c"
2664                 tmp_sh="$sh"
2665                 . ./config.sh
2666                 cp config.sh UU
2667                 n="$tmp_n"
2668                 c="$tmp_c"
2669                 : Older versions did not always set $sh.  Catch re-use of such
2670                 : an old config.sh.
2671                 case "$sh" in
2672                 '') sh="$tmp_sh" ;;
2673                 esac
2674                 hint=previous
2675                 ;;
2676         esac
2677 fi
2678 . ./UU/checkcc
2679 if test ! -f config.sh; then
2680         $cat <<EOM
2681
2682 First time through, eh?  I have some defaults handy for some systems
2683 that need some extra help getting the Configure answers right:
2684
2685 EOM
2686         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2687         dflt=''
2688         : Half the following guesses are probably wrong... If you have better
2689         : tests or hints, please send them to perlbug@perl.org
2690         : The metaconfig authors would also appreciate a copy...
2691         $test -f /irix && osname=irix
2692         $test -f /xenix && osname=sco_xenix
2693         $test -f /dynix && osname=dynix
2694         $test -f /dnix && osname=dnix
2695         $test -f /lynx.os && osname=lynxos
2696         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2697         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2698         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2699         $test -f /bin/mips && /bin/mips && osname=mips
2700         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2701                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2702         $test -d /usr/apollo/bin && osname=apollo
2703         $test -f /etc/saf/_sactab && osname=svr4
2704         $test -d /usr/include/minix && osname=minix
2705         if $test -d /MachTen -o -d /MachTen_Folder; then
2706                 osname=machten
2707                 if $test -x /sbin/version; then
2708                         osvers=`/sbin/version | $awk '{print $2}' |
2709                         $sed -e 's/[A-Za-z]$//'`
2710                 elif $test -x /usr/etc/version; then
2711                         osvers=`/usr/etc/version | $awk '{print $2}' |
2712                         $sed -e 's/[A-Za-z]$//'`
2713                 else
2714                         osvers="$2.$3"
2715                 fi
2716         fi
2717
2718         $test -f /sys/posix.dll &&
2719                 $test -f /usr/bin/what &&
2720                 set X `/usr/bin/what /sys/posix.dll` &&
2721                 $test "$3" = UWIN &&
2722                 osname=uwin &&
2723                 osvers="$5"
2724
2725         if $test -f $uname; then
2726                 set X $myuname
2727                 shift
2728
2729                 case "$5" in
2730                 fps*) osname=fps ;;
2731                 mips*)
2732                         case "$4" in
2733                         umips) osname=umips ;;
2734                         *) osname=mips ;;
2735                         esac;;
2736                 [23]100) osname=mips ;;
2737                 next*) osname=next ;;
2738                 i386*)
2739                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2740                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2741                                 osname='sco'
2742                                 osvers=$tmp
2743                         elif $test -f /etc/kconfig; then
2744                                 osname=isc
2745                                 if test "$lns" = "$ln -s"; then
2746                                         osvers=4
2747                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2748                                         osvers=3
2749                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2750                                         osvers=2
2751                                 fi
2752                         fi
2753                         tmp=''
2754                         ;;
2755                 pc*)
2756                         if test -n "$DJGPP"; then
2757                                 osname=dos
2758                                 osvers=djgpp
2759                         fi
2760                         ;;
2761                 esac
2762
2763                 case "$1" in
2764                 aix) osname=aix
2765                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2766                         case "$tmp" in
2767                         'not found') osvers="$4"."$3" ;;
2768                         '<3240'|'<>3240') osvers=3.2.0 ;;
2769                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2770                         '=3250'|'>3250') osvers=3.2.5 ;;
2771                         *) osvers=$tmp;;
2772                         esac
2773                         ;;
2774                 bsd386) osname=bsd386
2775                         osvers=`$uname -r`
2776                         ;;
2777                 cygwin*) osname=cygwin
2778                         osvers="$3"
2779                         ;;
2780                 *dc.osx) osname=dcosx
2781                         osvers="$3"
2782                         ;;
2783                 dnix) osname=dnix
2784                         osvers="$3"
2785                         ;;
2786                 domainos) osname=apollo
2787                         osvers="$3"
2788                         ;;
2789                 dgux) osname=dgux 
2790                         osvers="$3"
2791                         ;;
2792                 dynixptx*) osname=dynixptx
2793                         osvers=`echo "$4"|sed 's/^v//'`
2794                         ;;
2795                 freebsd) osname=freebsd 
2796                         osvers="$3" ;;
2797                 genix) osname=genix ;;
2798                 hp*) osname=hpux 
2799                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2800                         ;;
2801                 irix*) osname=irix
2802                         case "$3" in
2803                         4*) osvers=4 ;;
2804                         5*) osvers=5 ;;
2805                         *)      osvers="$3" ;;
2806                         esac
2807                         ;;
2808                 linux) osname=linux
2809                         case "$3" in
2810                         *)      osvers="$3" ;;
2811                         esac
2812                         ;;
2813                 MiNT) osname=mint
2814                         ;;
2815                 netbsd*) osname=netbsd
2816                         osvers="$3"
2817                         ;;
2818                 news-os) osvers="$3"
2819                         case "$3" in
2820                         4*) osname=newsos4 ;;
2821                         *) osname=newsos ;;
2822                         esac
2823                         ;;
2824                 next*) osname=next ;;
2825                 nonstop-ux) osname=nonstopux ;;
2826                 POSIX-BC | posix-bc ) osname=posix-bc
2827                         osvers="$3"
2828                         ;;
2829                 powerux | power_ux | powermax_os | powermaxos | \
2830                 powerunix | power_unix) osname=powerux
2831                         osvers="$3"
2832                         ;;
2833                 qnx) osname=qnx
2834                         osvers="$4"
2835                         ;;
2836                 solaris) osname=solaris
2837                         case "$3" in
2838                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2839                         *)      osvers="$3" ;;
2840                         esac
2841                         ;;
2842                 sunos) osname=sunos
2843                         case "$3" in
2844                         5*) osname=solaris
2845                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2846                         *)      osvers="$3" ;;
2847                         esac
2848                         ;;
2849                 titanos) osname=titanos
2850                         case "$3" in
2851                         1*) osvers=1 ;;
2852                         2*) osvers=2 ;;
2853                         3*) osvers=3 ;;
2854                         4*) osvers=4 ;;
2855                         *)      osvers="$3" ;;
2856                         esac
2857                         ;;
2858                 ultrix) osname=ultrix
2859                         osvers="$3"
2860                         ;;
2861                 osf1|mls+)      case "$5" in
2862                                 alpha)
2863                                         osname=dec_osf
2864                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
2865                                         case "$osvers" in
2866                                         [1-9].[0-9]*) ;;
2867                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
2868                                         esac
2869                                         ;;
2870                         hp*)    osname=hp_osf1  ;;
2871                         mips)   osname=mips_osf1 ;;
2872                         esac
2873                         ;;
2874                 unixware) osname=svr5
2875                         osvers="$4"
2876                         ;;
2877                 uts) osname=uts
2878                         osvers="$3"
2879                         ;;
2880                 $2) case "$osname" in
2881                         *isc*) ;;
2882                         *freebsd*) ;;
2883                         svr*)
2884                                 : svr4.x or possibly later
2885                                 case "svr$3" in 
2886                                 ${osname}*)
2887                                         osname=svr$3
2888                                         osvers=$4
2889                                         ;;
2890                                 esac
2891                                 case "$osname" in
2892                                 svr4.0)
2893                                         : Check for ESIX
2894                                         if test -f /stand/boot ; then
2895                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2896                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2897                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2898                                                         if test -n "$isesix"; then
2899                                                                 osname=esix4
2900                                                         fi
2901                                                 fi
2902                                         fi
2903                                         ;;
2904                                 esac
2905                                 ;;
2906                         *)      if test -f /etc/systemid; then
2907                                         osname=sco
2908                                         set `echo $3 | $sed 's/\./ /g'` $4
2909                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2910                                                 osvers=$1.$2.$3
2911                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2912                                                 osvers=$1.$2
2913                                         elif $test -f $src/hints/sco_$1.sh; then
2914                                                 osvers=$1
2915                                         fi
2916                                 else
2917                                         case "$osname" in
2918                                         '') : Still unknown.  Probably a generic Sys V.
2919                                                 osname="sysv"
2920                                                 osvers="$3"
2921                                                 ;;
2922                                         esac
2923                                 fi
2924                                 ;;
2925                         esac
2926                         ;;
2927                 *)      case "$osname" in
2928                         '') : Still unknown.  Probably a generic BSD.
2929                                 osname="$1"
2930                                 osvers="$3"
2931                                 ;;
2932                         esac
2933                         ;;
2934                 esac
2935         else
2936                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2937                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2938                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2939                                 osname=news_os
2940                         fi
2941                         $rm -f UU/kernel.what
2942                 elif test -d c:/.; then
2943                         set X $myuname
2944                         osname=os2
2945                         osvers="$5"
2946                 fi
2947         fi
2948         
2949         case "$targetarch" in
2950         '') ;;
2951         *)  hostarch=$osname
2952             osname=`echo $targetarch|sed 's,^[^-]*-,,'`
2953             osvers=''
2954             ;;
2955         esac
2956
2957         : Now look for a hint file osname_osvers, unless one has been
2958         : specified already.
2959         case "$hintfile" in
2960         ''|' ')
2961                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
2962                 : Also try without trailing minor version numbers.
2963                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
2964                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
2965                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
2966                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
2967                 case "$file" in
2968                 '') dflt=none ;;
2969                 *)  case "$osvers" in
2970                         '') dflt=$file
2971                                 ;;
2972                         *)  if $test -f $src/hints/$file.sh ; then
2973                                         dflt=$file
2974                                 elif $test -f $src/hints/$xfile.sh ; then
2975                                         dflt=$xfile
2976                                 elif $test -f $src/hints/$xxfile.sh ; then
2977                                         dflt=$xxfile
2978                                 elif $test -f $src/hints/$xxxfile.sh ; then
2979                                         dflt=$xxxfile
2980                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2981                                         dflt=$xxxxfile
2982                                 elif $test -f "$src/hints/${osname}.sh" ; then
2983                                         dflt="${osname}"
2984                                 else
2985                                         dflt=none
2986                                 fi
2987                                 ;;
2988                         esac
2989                         ;;
2990                 esac
2991                 if $test -f Policy.sh ; then
2992                         case "$dflt" in
2993                         *Policy*) ;;
2994                         none) dflt="Policy" ;;
2995                         *) dflt="Policy $dflt" ;;
2996                         esac
2997                 fi
2998                 ;;
2999         *)
3000                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
3001                 ;;
3002         esac
3003
3004         if $test -f Policy.sh ; then
3005                 $cat <<EOM
3006
3007 There's also a Policy hint file available, which should make the
3008 site-specific (policy) questions easier to answer.
3009 EOM
3010
3011         fi
3012
3013         $cat <<EOM
3014
3015 You may give one or more space-separated answers, or "none" if appropriate.
3016 A well-behaved OS will have no hints, so answering "none" or just "Policy"
3017 is a good thing.  DO NOT give a wrong version or a wrong OS.
3018
3019 EOM
3020
3021         rp="Which of these apply, if any?"
3022         . UU/myread
3023         tans=$ans
3024         for file in $tans; do
3025                 if $test X$file = XPolicy -a -f Policy.sh; then
3026                         . Policy.sh
3027                         $cat Policy.sh >> UU/config.sh
3028                 elif $test -f $src/hints/$file.sh; then
3029                         . $src/hints/$file.sh
3030                         $cat $src/hints/$file.sh >> UU/config.sh
3031                 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
3032                         : nothing
3033                 else
3034                         : Give one chance to correct a possible typo.
3035                         echo "$file.sh does not exist"
3036                         dflt=$file
3037                         rp="hint to use instead?"
3038                         . UU/myread
3039                         for file in $ans; do
3040                                 if $test -f "$src/hints/$file.sh"; then
3041                                         . $src/hints/$file.sh
3042                                         $cat $src/hints/$file.sh >> UU/config.sh
3043                                 elif $test X$ans = X -o X$ans = Xnone ; then
3044                                         : nothing
3045                                 else
3046                                         echo "$file.sh does not exist -- ignored."
3047                                 fi
3048                         done
3049                 fi
3050         done
3051
3052         hint=recommended
3053         : Remember our hint file for later.
3054         if $test -f "$src/hints/$file.sh" ; then
3055                 hintfile="$file"
3056         else
3057                 hintfile=''
3058         fi
3059 fi
3060 cd UU
3061 ;;
3062 *)
3063         echo " "
3064         echo "Fetching default answers from $config_sh..." >&4
3065         tmp_n="$n"
3066         tmp_c="$c"
3067         cd ..
3068         cp $config_sh config.sh 2>/dev/null
3069         chmod +w config.sh
3070         . ./config.sh
3071         cd UU
3072         cp ../config.sh .
3073         n="$tmp_n"
3074         c="$tmp_c"
3075         hint=previous
3076         ;;
3077 esac
3078 test "$override" && . ./optdef.sh
3079
3080 : Restore computed paths
3081 for file in $loclist $trylist; do
3082         eval $file="\$_$file"
3083 done
3084
3085 cat << EOM
3086
3087 Configure uses the operating system name and version to set some defaults.
3088 The default value is probably right if the name rings a bell. Otherwise,
3089 since spelling matters for me, either accept the default or answer "none"
3090 to leave it blank.
3091
3092 EOM
3093 case "$osname" in
3094         ''|' ')
3095                 case "$hintfile" in
3096                 ''|' '|none) dflt=none ;;
3097                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
3098                 esac
3099                 ;;
3100         *) dflt="$osname" ;;
3101 esac
3102 rp="Operating system name?"
3103 . ./myread
3104 case "$ans" in
3105 none)  osname='' ;;
3106 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
3107 esac
3108 echo " "
3109 case "$osvers" in
3110         ''|' ')
3111                 case "$hintfile" in
3112                 ''|' '|none) dflt=none ;;
3113                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
3114                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
3115                         case "$dflt" in
3116                         ''|' ') dflt=none ;;
3117                         esac
3118                         ;;
3119                 esac
3120                 ;;
3121         *) dflt="$osvers" ;;
3122 esac
3123 rp="Operating system version?"
3124 . ./myread
3125 case "$ans" in
3126 none)  osvers='' ;;
3127 *) osvers="$ans" ;;
3128 esac
3129
3130
3131 . ./posthint.sh
3132
3133 : who configured the system
3134 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
3135 cf_by=`(logname) 2>/dev/null`
3136 case "$cf_by" in
3137 "")
3138         cf_by=`(whoami) 2>/dev/null`
3139         case "$cf_by" in
3140         "") cf_by=unknown ;;
3141         esac ;;
3142 esac
3143
3144 : set up the script used to warn in case of inconsistency
3145 cat <<EOS >whoa
3146 $startsh
3147 EOS
3148 cat <<'EOSC' >>whoa
3149 dflt=y
3150 echo " "
3151 echo "*** WHOA THERE!!! ***" >&4
3152 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
3153 rp="    Keep the $hint value?"
3154 . ./myread
3155 case "$ans" in
3156 y) td=$was; tu=$was;;
3157 esac
3158 EOSC
3159
3160 : function used to set $1 to $val
3161 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
3162 case "$val$was" in
3163 $define$undef) . ./whoa; eval "$var=\$td";;
3164 $undef$define) . ./whoa; eval "$var=\$tu";;
3165 *) eval "$var=$val";;
3166 esac'
3167
3168 case "$usethreads" in
3169 $define|true|[yY]*)     dflt='y';;
3170 *) dflt='n';;
3171 esac
3172 cat <<EOM
3173
3174 Perl can be built to take advantage of threads on some systems.
3175 To do so, Configure can be run with -Dusethreads.
3176
3177 Note that threading is a highly experimental feature, and
3178 some known race conditions still remain.  If you choose to try
3179 it, be very sure to not actually deploy it for production
3180 purposes.  README.threads has more details, and is required
3181 reading if you enable threads.
3182
3183 If this doesn't make any sense to you, just accept the default '$dflt'.
3184 EOM
3185 rp='Build a threading Perl?'
3186 . ./myread
3187 case "$ans" in
3188 y|Y)    val="$define" ;;
3189 *)      val="$undef" ;;
3190 esac
3191 set usethreads
3192 eval $setvar
3193
3194 case "$usethreads" in
3195 $define)
3196         $cat <<EOM
3197
3198 As of 5.5.640, Perl has two different internal threading implementations,
3199 the 5.005 version (5005threads) and an interpreter-based version
3200 (ithreads) that has one interpreter per thread.  Both are very 
3201 experimental.  This arrangement exists to help developers work out
3202 which one is better.
3203
3204 If you're a casual user, you probably don't want interpreter-threads
3205 at this time.  There doesn't yet exist a way to create threads from
3206 within Perl in this model, i.e., "use Thread;" will NOT work.
3207 EOM
3208         : Default to ithreads unless overridden on command line or with
3209         : old config.sh
3210         dflt='y'
3211         case "$use5005threads" in
3212                 $define|true|[yY]*) dflt='n';;
3213         esac
3214         case "$useithreads" in
3215                 $undef|false|[nN]*) dflt='n';;
3216         esac
3217         rp='Use interpreter-based ithreads?'
3218         . ./myread
3219         case "$ans" in
3220         y|Y)    val="$define" ;;
3221         *)      val="$undef" ;;
3222         esac
3223         set useithreads
3224         eval $setvar
3225         : Now set use5005threads to the opposite value.
3226         case "$useithreads" in
3227         $define) val="$undef" ;;
3228         *) val="$define" ;;
3229         esac
3230         set use5005threads
3231         eval $setvar
3232         ;;
3233 *)
3234         useithreads="$undef"
3235         use5005threads="$undef"
3236         ;;
3237 esac
3238
3239 case "$useithreads$use5005threads" in
3240 "$define$define")
3241         $cat >&4 <<EOM
3242
3243 You cannot have both the ithreads and the 5.005 threads enabled
3244 at the same time.  Disabling the 5.005 threads since they are
3245 much less stable than the ithreads.
3246
3247 EOM
3248         use5005threads="$undef"
3249         ;;
3250 esac
3251
3252 case "$d_oldpthreads" in
3253 '')     : Configure tests would be welcome here.  For now, assume undef.
3254         val="$undef" ;;
3255 *)      val="$d_oldpthreads" ;;
3256 esac
3257 set d_oldpthreads
3258 eval $setvar
3259
3260
3261 case "$usethreads" in
3262 "$define"|true|[yY]*)
3263 : Look for a hint-file generated 'call-back-unit'.  If the
3264 : user has specified that a threading perl is to be built,
3265 : we may need to set or change some other defaults.
3266         if $test -f usethreads.cbu; then
3267                 echo "Your platform has some specific hints for threaded builds, using them..."
3268                 . ./usethreads.cbu
3269         else
3270                 $cat <<EOM
3271 (Your platform doesn't have any specific hints for threaded builds.
3272  Assuming POSIX threads, then.)
3273 EOM
3274         fi
3275         ;;
3276 esac
3277
3278 cat <<EOM
3279
3280 Perl can be built so that multiple Perl interpreters can coexist
3281 within the same Perl executable.
3282 EOM
3283
3284 case "$useithreads" in
3285 $define)
3286         cat <<EOM
3287 This multiple interpreter support is required for interpreter-based threads.
3288 EOM
3289         val="$define"
3290         ;;
3291 *)      case "$usemultiplicity" in
3292         $define|true|[yY]*)     dflt='y';;
3293         *) dflt='n';;
3294         esac
3295         echo " "
3296         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
3297         rp='Build Perl for multiplicity?'
3298         . ./myread
3299         case "$ans" in
3300         y|Y)    val="$define" ;;
3301         *)      val="$undef" ;;
3302         esac
3303         ;;
3304 esac
3305 set usemultiplicity
3306 eval $setvar
3307
3308 : make some quick guesses about what we are up against
3309 echo " "
3310 $echo $n "Hmm...  $c"
3311 echo exit 1 >bsd
3312 echo exit 1 >usg
3313 echo exit 1 >v7
3314 echo exit 1 >osf1
3315 echo exit 1 >eunice
3316 echo exit 1 >xenix
3317 echo exit 1 >venix
3318 echo exit 1 >os2
3319 d_bsd="$undef"
3320 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3321 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3322 then
3323         echo "Looks kind of like an OSF/1 system, but we'll see..."
3324         echo exit 0 >osf1
3325 elif test `echo abc | $tr a-z A-Z` = Abc ; then
3326         xxx=`./loc addbib blurfl $pth`
3327         if $test -f $xxx; then
3328         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3329                 echo exit 0 >bsd
3330                 echo exit 0 >usg
3331         else
3332                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3333                         echo "Looks kind of like an extended USG system, but we'll see..."
3334                 else
3335                         echo "Looks kind of like a USG system, but we'll see..."
3336                 fi
3337                 echo exit 0 >usg
3338         fi
3339 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3340         echo "Looks kind of like a BSD system, but we'll see..."
3341         d_bsd="$define"
3342         echo exit 0 >bsd
3343 else
3344         echo "Looks kind of like a Version 7 system, but we'll see..."
3345         echo exit 0 >v7
3346 fi
3347 case "$eunicefix" in
3348 *unixtovms*)
3349         $cat <<'EOI'
3350 There is, however, a strange, musty smell in the air that reminds me of
3351 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3352 EOI
3353         echo exit 0 >eunice
3354         d_eunice="$define"
3355 : it so happens the Eunice I know will not run shell scripts in Unix format
3356         ;;
3357 *)
3358         echo " "
3359         echo "Congratulations.  You aren't running Eunice."
3360         d_eunice="$undef"
3361         ;;
3362 esac
3363 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3364 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
3365 : semicolon as a patch separator
3366 case "$p_" in
3367 :) ;;
3368 *)
3369         $cat <<'EOI'
3370 I have the feeling something is not exactly right, however...don't tell me...
3371 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3372 (Or you may be running DOS with DJGPP.)
3373 EOI
3374         echo exit 0 >os2
3375         ;;
3376 esac
3377 if test -f /xenix; then
3378         echo "Actually, this looks more like a XENIX system..."
3379         echo exit 0 >xenix
3380         d_xenix="$define"
3381 else
3382         echo " "
3383         echo "It's not Xenix..."
3384         d_xenix="$undef"
3385 fi
3386 chmod +x xenix
3387 $eunicefix xenix
3388 if test -f /venix; then
3389         echo "Actually, this looks more like a VENIX system..."
3390         echo exit 0 >venix
3391 else
3392         echo " "
3393         if ./xenix; then
3394                 : null
3395         else
3396                 echo "Nor is it Venix..."
3397         fi
3398 fi
3399 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3400 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3401 $rm -f foo
3402
3403 case "$cc" in
3404 '') dflt=cc;;
3405 *) dflt="$cc";;
3406 esac
3407 rp="Use which C compiler?"
3408 . ./myread
3409 cc="$ans"
3410 : Look for a hint-file generated 'call-back-unit'.  Now that the
3411 : user has specified the compiler, we may need to set or change some
3412 : other defaults.
3413 if $test -f cc.cbu; then
3414     . ./cc.cbu
3415 fi
3416 . ./checkcc
3417
3418 echo " "
3419 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3420 $cat >try.c <<EOM
3421 #include <stdio.h>
3422 int main() {
3423 #ifdef __GNUC__
3424 #ifdef __VERSION__
3425         printf("%s\n", __VERSION__);
3426 #else
3427         printf("%s\n", "1");
3428 #endif
3429 #endif
3430         exit(0);
3431 }
3432 EOM
3433 if $cc -o try $ccflags $ldflags try.c; then
3434         gccversion=`$run ./try`
3435         case "$gccversion" in
3436         '') echo "You are not using GNU cc." ;;
3437         *)  echo "You are using GNU cc $gccversion."
3438             ccname=gcc  
3439             ;;
3440         esac
3441 else
3442         echo " "
3443         echo "*** WHOA THERE!!! ***" >&4
3444         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3445         case "$knowitall" in
3446         '')
3447         echo "    You'd better start hunting for one and let me know about it." >&4
3448                 exit 1
3449                 ;;
3450         esac
3451 fi
3452 $rm -f try try.*
3453 case "$gccversion" in
3454 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3455 esac
3456 case "$gccversion" in
3457 '') gccosandvers='' ;;
3458 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3459    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3460    gccshortvers=''
3461    case "$gccosandvers" in
3462    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3463    $osname$osvers) ;; # looking good
3464    $osname*) cat <<EOM >&4
3465
3466 *** WHOA THERE!!! ***
3467
3468     Your gcc has not been compiled for the exact release of
3469     your operating system ($gccosandvers versus $osname$osvers).
3470
3471     In general it is a good idea to keep gcc synchronized with
3472     the operating system because otherwise serious problems
3473     may ensue when trying to compile software, like Perl.
3474
3475     I'm trying to be optimistic here, though, and will continue.
3476     If later during the configuration and build icky compilation
3477     problems appear (headerfile conflicts being the most common
3478     manifestation), I suggest reinstalling the gcc to match
3479     your operating system release.
3480
3481 EOM
3482       ;;
3483    *) gccosandvers='' ;; # failed to parse, better be silent
3484    esac
3485    ;;
3486 esac
3487 case "$ccname" in
3488 '') ccname="$cc" ;;
3489 esac
3490
3491 case "$gccversion" in
3492 '') ;;
3493 *)  case "$ccflags" in
3494     *-Wall*) ;;
3495     *) ccflags="$ccflags -Wall" ;;
3496     esac
3497     ;;
3498 esac
3499
3500 : see how we invoke the C preprocessor
3501 echo " "
3502 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3503 cat <<'EOT' >testcpp.c
3504 #define ABC abc
3505 #define XYZ xyz
3506 ABC.XYZ
3507 EOT
3508 cd ..
3509 if test ! -f cppstdin; then
3510         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3511                 # AIX cc -E doesn't show the absolute headerfile
3512                 # locations but we'll cheat by using the -M flag.
3513                 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
3514         else
3515                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3516         fi
3517 else
3518         echo "Keeping your $hint cppstdin wrapper."
3519 fi
3520 chmod 755 cppstdin
3521 wrapper=`pwd`/cppstdin
3522 ok='false'
3523 cd UU
3524
3525 if $test "X$cppstdin" != "X" && \
3526         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3527         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3528 then
3529         echo "You used to use $cppstdin $cppminus so we'll use that again."
3530         case "$cpprun" in
3531         '') echo "But let's see if we can live without a wrapper..." ;;
3532         *)
3533                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3534                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3535                 then
3536                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3537                         ok='true'
3538                 else
3539                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3540                 fi
3541                 ;;
3542         esac
3543 else
3544         case "$cppstdin" in
3545         '') ;;
3546         *)
3547                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3548                 ;;
3549         esac
3550 fi
3551
3552 if $ok; then
3553         : nothing
3554 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3555         $cc -E <testcpp.c >testcpp.out 2>&1; \
3556         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3557         echo "Yup, it does."
3558         x_cpp="$cc -E"
3559         x_minus='';
3560 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3561         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3562         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3563         echo "Yup, it does."
3564         x_cpp="$cc -E"
3565         x_minus='-';
3566 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3567         $cc -P <testcpp.c >testcpp.out 2>&1; \
3568         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3569         echo "Yipee, that works!"
3570         x_cpp="$cc -P"
3571         x_minus='';
3572 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3573         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3574         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3575         echo "At long last!"
3576         x_cpp="$cc -P"
3577         x_minus='-';
3578 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3579         $cpp <testcpp.c >testcpp.out 2>&1; \
3580         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3581         echo "It works!"
3582         x_cpp="$cpp"
3583         x_minus='';
3584 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3585         $cpp - <testcpp.c >testcpp.out 2>&1; \
3586         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3587         echo "Hooray, it works!  I was beginning to wonder."
3588         x_cpp="$cpp"
3589         x_minus='-';
3590 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3591         $wrapper <testcpp.c >testcpp.out 2>&1; \
3592         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3593         x_cpp="$wrapper"
3594         x_minus=''
3595         echo "Eureka!"
3596 else
3597         dflt=''
3598         rp="No dice.  I can't find a C preprocessor.  Name one:"
3599         . ./myread
3600         x_cpp="$ans"
3601         x_minus=''
3602         $x_cpp <testcpp.c >testcpp.out 2>&1
3603         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3604                 echo "OK, that will do." >&4
3605         else
3606 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3607                 exit 1
3608         fi
3609 fi
3610
3611 case "$ok" in
3612 false)
3613         cppstdin="$x_cpp"
3614         cppminus="$x_minus"
3615         cpprun="$x_cpp"
3616         cpplast="$x_minus"
3617         set X $x_cpp
3618         shift
3619         case "$1" in
3620         "$cpp")
3621                 echo "Perhaps can we force $cc -E using a wrapper..."
3622                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3623                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3624                 then
3625                         echo "Yup, we can."
3626                         cppstdin="$wrapper"
3627                         cppminus='';
3628                 else
3629                         echo "Nope, we'll have to live without it..."
3630                 fi
3631                 ;;
3632         esac
3633         case "$cpprun" in
3634         "$wrapper")
3635                 cpprun=''
3636                 cpplast=''
3637                 ;;
3638         esac
3639         ;;
3640 esac
3641
3642 case "$cppstdin" in
3643 "$wrapper"|'cppstdin') ;;
3644 *) $rm -f $wrapper;;
3645 esac
3646 $rm -f testcpp.c testcpp.out
3647
3648 : decide how portable to be.  Allow command line overrides.
3649 case "$d_portable" in
3650 "$undef") ;;
3651 *)      d_portable="$define" ;;
3652 esac
3653
3654 : set up shell script to do ~ expansion
3655 cat >filexp <<EOSS
3656 $startsh
3657 : expand filename
3658 case "\$1" in
3659  ~/*|~)
3660         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3661         ;;
3662  ~*)
3663         if $test -f /bin/csh; then
3664                 /bin/csh -f -c "glob \$1"
3665                 failed=\$?
3666                 echo ""
3667                 exit \$failed
3668         else
3669                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3670                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3671                 if $test ! -d "\$dir"; then
3672                         me=\`basename \$0\`
3673                         echo "\$me: can't locate home directory for: \$name" >&2
3674                         exit 1
3675                 fi
3676                 case "\$1" in
3677                 */*)
3678                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3679                         ;;
3680                 *)
3681                         echo \$dir
3682                         ;;
3683                 esac
3684         fi
3685         ;;
3686 *)
3687         echo \$1
3688         ;;
3689 esac
3690 EOSS
3691 chmod +x filexp
3692 $eunicefix filexp
3693
3694 : now set up to get a file name
3695 cat <<EOS >getfile
3696 $startsh
3697 EOS
3698 cat <<'EOSC' >>getfile
3699 tilde=''
3700 fullpath=''
3701 already=''
3702 skip=''
3703 none_ok=''
3704 exp_file=''
3705 nopath_ok=''
3706 orig_rp="$rp"
3707 orig_dflt="$dflt"
3708 case "$gfpth" in
3709 '') gfpth='.' ;;
3710 esac
3711
3712 case "$fn" in
3713 *\(*)
3714         expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3715         fn=`echo $fn | sed 's/(.*)//'`
3716         ;;
3717 esac
3718
3719 case "$fn" in
3720 *:*)
3721         loc_file=`expr $fn : '.*:\(.*\)'`
3722         fn=`expr $fn : '\(.*\):.*'`
3723         ;;
3724 esac
3725
3726 case "$fn" in
3727 *~*) tilde=true;;
3728 esac
3729 case "$fn" in
3730 */*) fullpath=true;;
3731 esac
3732 case "$fn" in
3733 *+*) skip=true;;
3734 esac
3735 case "$fn" in
3736 *n*) none_ok=true;;
3737 esac
3738 case "$fn" in
3739 *e*) exp_file=true;;
3740 esac
3741 case "$fn" in
3742 *p*) nopath_ok=true;;
3743 esac
3744
3745 case "$fn" in
3746 *f*) type='File';;
3747 *d*) type='Directory';;
3748 *l*) type='Locate';;
3749 esac
3750
3751 what="$type"
3752 case "$what" in
3753 Locate) what='File';;
3754 esac
3755
3756 case "$exp_file" in
3757 '')
3758         case "$d_portable" in
3759         "$define") ;;
3760         *) exp_file=true;;
3761         esac
3762         ;;
3763 esac
3764
3765 cd ..
3766 while test "$type"; do
3767         redo=''
3768         rp="$orig_rp"
3769         dflt="$orig_dflt"
3770         case "$tilde" in
3771         true) rp="$rp (~name ok)";;
3772         esac
3773         . UU/myread
3774         if test -f UU/getfile.ok && \
3775                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3776         then
3777                 value="$ans"
3778                 ansexp="$ans"
3779                 break
3780         fi
3781         case "$ans" in
3782         none)
3783                 value=''
3784                 ansexp=''
3785                 case "$none_ok" in
3786                 true) type='';;
3787                 esac
3788                 ;;
3789         *)
3790                 case "$tilde" in
3791                 '') value="$ans"
3792                         ansexp="$ans";;
3793                 *)
3794                         value=`UU/filexp $ans`
3795                         case $? in
3796                         0)
3797                                 if test "$ans" != "$value"; then
3798                                         echo "(That expands to $value on this system.)"
3799                                 fi
3800                                 ;;
3801                         *) value="$ans";;
3802                         esac
3803                         ansexp="$value"
3804                         case "$exp_file" in
3805                         '') value="$ans";;
3806                         esac
3807                         ;;
3808                 esac
3809                 case "$fullpath" in
3810                 true)
3811                         case "$ansexp" in
3812                         /*) value="$ansexp" ;;
3813                         [a-zA-Z]:/*) value="$ansexp" ;;
3814                         *)
3815                                 redo=true
3816                                 case "$already" in
3817                                 true)
3818                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3819                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3820                                         ;;
3821                                 *)
3822                                 echo "Please give a full path name, starting with slash." >&4
3823                                         case "$tilde" in
3824                                         true)
3825                                 echo "Note that using ~name is ok provided it expands well." >&4
3826                                                 already=true
3827                                                 ;;
3828                                         esac
3829                                 esac
3830                                 ;;
3831                         esac
3832                         ;;
3833                 esac
3834                 case "$redo" in
3835                 '')
3836                         case "$type" in
3837                         File)
3838                                 for fp in $gfpth; do
3839                                         if test "X$fp" = X.; then
3840                                             pf="$ansexp"
3841                                         else    
3842                                             pf="$fp/$ansexp"
3843                                         fi
3844                                         if test -f "$pf"; then
3845                                                 type=''
3846                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3847                                         then
3848                                                 echo "($value is not a plain file, but that's ok.)"
3849                                                 type=''
3850                                         fi
3851                                         if test X"$type" = X; then
3852                                             value="$pf"
3853                                             break
3854                                         fi
3855                                 done
3856                                 ;;
3857                         Directory)
3858                                 for fp in $gfpth; do
3859                                         if test "X$fp" = X.; then
3860                                             dir="$ans"
3861                                             direxp="$ansexp"
3862                                         else    
3863                                             dir="$fp/$ansexp"
3864                                             direxp="$fp/$ansexp"
3865                                         fi
3866                                         if test -d "$direxp"; then
3867                                                 type=''
3868                                                 value="$dir"
3869                                                 break
3870                                         fi
3871                                 done
3872                                 ;;
3873                         Locate)
3874                                 if test -d "$ansexp"; then
3875                                         echo "(Looking for $loc_file in directory $value.)"
3876                                         value="$value/$loc_file"
3877                                         ansexp="$ansexp/$loc_file"
3878                                 fi
3879                                 if test -f "$ansexp"; then
3880                                         type=''
3881                                 fi
3882                                 case "$nopath_ok" in
3883                                 true)   case "$value" in
3884                                         */*) ;;
3885                                         *)      echo "Assuming $value will be in people's path."
3886                                                 type=''
3887                                                 ;;
3888                                         esac
3889                                         ;;
3890                                 esac
3891                                 ;;
3892                         esac
3893
3894                         case "$skip" in
3895                         true) type='';
3896                         esac
3897
3898                         case "$type" in
3899                         '') ;;
3900                         *)
3901                                 if test "$fastread" = yes; then
3902                                         dflt=y
3903                                 else
3904                                         dflt=n
3905                                 fi
3906                                 rp="$what $value doesn't exist.  Use that name anyway?"
3907                                 . UU/myread
3908                                 dflt=''
3909                                 case "$ans" in
3910                                 y*) type='';;
3911                                 *) echo " ";;
3912                                 esac
3913                                 ;;
3914                         esac
3915                         ;;
3916                 esac
3917                 ;;
3918         esac
3919 done
3920 cd UU
3921 ans="$value"
3922 rp="$orig_rp"
3923 dflt="$orig_dflt"
3924 rm -f getfile.ok
3925 test "X$gfpthkeep" != Xy && gfpth=""
3926 EOSC
3927
3928 : What should the include directory be ?
3929 echo " "
3930 $echo $n "Hmm...  $c"
3931 dflt='/usr/include'
3932 incpath=''
3933 mips_type=''
3934 if $test -f /bin/mips && /bin/mips; then
3935         echo "Looks like a MIPS system..."
3936         $cat >usr.c <<'EOCP'
3937 #ifdef SYSTYPE_BSD43
3938 /bsd43
3939 #endif
3940 EOCP
3941         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3942                 dflt='/bsd43/usr/include'
3943                 incpath='/bsd43'
3944                 mips_type='BSD 4.3'
3945         else
3946                 mips_type='System V'
3947         fi
3948         $rm -f usr.c usr.out
3949         echo "and you're compiling with the $mips_type compiler and libraries."
3950         xxx_prompt=y
3951         echo "exit 0" >mips
3952 else
3953         echo "Doesn't look like a MIPS system."
3954         xxx_prompt=n
3955         echo "exit 1" >mips
3956 fi
3957 chmod +x mips
3958 $eunicefix mips
3959 case "$usrinc" in
3960 '') ;;
3961 *) dflt="$usrinc";;
3962 esac
3963 case "$xxx_prompt" in
3964 y)      fn=d/
3965         echo " "
3966         rp='Where are the include files you want to use?'
3967         . ./getfile
3968         usrinc="$ans"
3969         ;;
3970 *)      usrinc="$dflt"
3971         ;;
3972 esac
3973
3974 : Set private lib path
3975 case "$plibpth" in
3976 '') if ./mips; then
3977                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3978         fi;;
3979 esac
3980 case "$libpth" in
3981 ' ') dlist='';;
3982 '') dlist="$loclibpth $plibpth $glibpth";;
3983 *) dlist="$libpth";;
3984 esac
3985
3986 : Now check and see which directories actually exist, avoiding duplicates
3987 libpth=''
3988 for xxx in $dlist
3989 do
3990     if $test -d $xxx; then
3991                 case " $libpth " in
3992                 *" $xxx "*) ;;
3993                 *) libpth="$libpth $xxx";;
3994                 esac
3995     fi
3996 done
3997 $cat <<'EOM'
3998
3999 Some systems have incompatible or broken versions of libraries.  Among
4000 the directories listed in the question below, please remove any you
4001 know not to be holding relevant libraries, and add any that are needed.
4002 Say "none" for none.
4003
4004 EOM
4005 case "$libpth" in
4006 '') dflt='none';;
4007 *)
4008         set X $libpth
4009         shift
4010         dflt=${1+"$@"}
4011         ;;
4012 esac
4013 rp="Directories to use for library searches?"
4014 . ./myread
4015 case "$ans" in
4016 none) libpth=' ';;
4017 *) libpth="$ans";;
4018 esac
4019
4020 : compute shared library extension
4021 case "$so" in
4022 '')
4023         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4024                 dflt='sl'
4025         else
4026                 dflt='so'
4027         fi
4028         ;;
4029 *) dflt="$so";;
4030 esac
4031 $cat <<EOM
4032
4033 On some systems, shared libraries may be available.  Answer 'none' if
4034 you want to suppress searching of shared libraries for the remainder
4035 of this configuration.
4036
4037 EOM
4038 rp='What is the file extension used for shared libraries?'
4039 . ./myread
4040 so="$ans"
4041
4042 : Define several unixisms.
4043 : Hints files or command line option can be used to override them.
4044 : The convoluted testing is in case hints files set either the old
4045 : or the new name.
4046 case "$_exe" in
4047 '')     case "$exe_ext" in
4048     '') ;;
4049         *)      _exe="$exe_ext" ;;
4050         esac
4051         ;;
4052 esac
4053 case "$_a" in
4054 '')     case "$lib_ext" in
4055     '') _a='.a';;
4056         *)      _a="$lib_ext" ;;
4057         esac
4058         ;;
4059 esac
4060 case "$_o" in
4061 '') case "$obj_ext" in
4062         '')     _o='.o';;
4063         *)      _o="$obj_ext";;
4064         esac
4065         ;;
4066 esac
4067 case "$p_" in
4068 '') case "$path_sep" in
4069         '')     p_=':';;
4070         *)      p_="$path_sep";;
4071         esac
4072         ;;
4073 esac
4074 exe_ext=$_exe
4075 lib_ext=$_a
4076 obj_ext=$_o
4077 path_sep=$p_
4078
4079 : Which makefile gets called first.  This is used by make depend.
4080 case "$firstmakefile" in
4081 '') firstmakefile='makefile';;
4082 esac
4083
4084 case "$usesocks" in
4085 $define|true|[yY]*)     dflt='y';;
4086 *) dflt='n';;
4087 esac
4088 cat <<EOM
4089
4090 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4091 Configure must be run with -Dusesocks.  If you use SOCKS you also need
4092 to use the PerlIO abstraction layer, this will be implicitly selected.
4093
4094 If this doesn't make any sense to you, just accept the default '$dflt'.
4095 EOM
4096 rp='Build Perl for SOCKS?'
4097 . ./myread
4098 case "$ans" in
4099 y|Y)    val="$define" ;;     
4100 *)      val="$undef" ;;
4101 esac
4102 set usesocks
4103 eval $setvar
4104
4105 case "$usesocks" in
4106 $define|true|[yY]*) useperlio="$define";;
4107 esac
4108
4109 : Looking for optional libraries
4110 echo " "
4111 echo "Checking for optional libraries..." >&4
4112 case "$libs" in
4113 ' '|'') dflt='';;
4114 *) dflt="$libs";;
4115 esac
4116 case "$libswanted" in
4117 '') libswanted='c_s';;
4118 esac
4119 case "$usesocks" in
4120 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
4121 esac
4122 libsfound=''
4123 libsfiles=''
4124 libsdirs=''
4125 libspath=''
4126 for thisdir in $libpth $xlibpth; do
4127   test -d $thisdir && libspath="$libspath $thisdir"
4128 done
4129 for thislib in $libswanted; do
4130         for thisdir in $libspath; do
4131             xxx=''
4132             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4133                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
4134                 $test -f "$xxx" && eval $libscheck
4135                 $test -f "$xxx" && libstyle=shared
4136             fi
4137             if test ! -f "$xxx"; then
4138                 xxx=$thisdir/lib$thislib.$so
4139                 $test -f "$xxx" && eval $libscheck
4140                 $test -f "$xxx" && libstyle=shared
4141             fi  
4142             if test ! -f "$xxx"; then
4143                 xxx=$thisdir/lib$thislib$_a
4144                 $test -f "$xxx" && eval $libscheck
4145                 $test -f "$xxx" && libstyle=static
4146             fi
4147             if test ! -f "$xxx"; then
4148                 xxx=$thisdir/$thislib$_a
4149                 $test -f "$xxx" && eval $libscheck
4150                 $test -f "$xxx" && libstyle=static
4151             fi
4152             if test ! -f "$xxx"; then
4153                 xxx=$thisdir/lib${thislib}_s$_a
4154                 $test -f "$xxx" && eval $libscheck
4155                 $test -f "$xxx" && libstyle=static
4156                 $test -f "$xxx" && thislib=${thislib}_s
4157             fi
4158             if test ! -f "$xxx"; then
4159                 xxx=$thisdir/Slib$thislib$_a
4160                 $test -f "$xxx" && eval $libscheck
4161                 $test -f "$xxx" && libstyle=static
4162             fi
4163             if $test -f "$xxx"; then
4164                 case "$libstyle" in
4165                 shared) echo "Found -l$thislib (shared)." ;;
4166                 static) echo "Found -l$thislib." ;;
4167                 *)      echo "Found -l$thislib ($libstyle)." ;;
4168                 esac
4169                 case " $dflt " in
4170                 *"-l$thislib "*);;
4171                 *) dflt="$dflt -l$thislib"
4172                    libsfound="$libsfound $xxx"
4173                    yyy=`basename $xxx`
4174                    libsfiles="$libsfiles $yyy"
4175                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
4176                    case " $libsdirs " in
4177                    *" $yyy "*) ;;
4178                    *) libsdirs="$libsdirs $yyy" ;;
4179                    esac
4180                    ;;
4181                 esac
4182                 break
4183             fi  
4184         done
4185         if $test ! -f "$xxx"; then
4186             echo "No -l$thislib."
4187         fi
4188 done
4189 set X $dflt
4190 shift
4191 dflt="$*"
4192 case "$libs" in
4193 '') dflt="$dflt";;
4194 *) dflt="$libs";;
4195 esac
4196 case "$dflt" in
4197 ' '|'') dflt='none';;
4198 esac
4199
4200 $cat <<EOM
4201
4202 In order to compile $package on your machine, a number of libraries
4203 are usually needed.  Include any other special libraries here as well.
4204 Say "none" for none.  The default list is almost always right.
4205 EOM
4206
4207 echo " "
4208 rp="What libraries to use?"
4209 . ./myread
4210 case "$ans" in
4211 none) libs=' ';;
4212 *) libs="$ans";;
4213 esac
4214
4215 : determine optimization, if desired, or use for debug flag also
4216 case "$optimize" in
4217 ' '|$undef) dflt='none';;
4218 '') dflt='-O';;
4219 *) dflt="$optimize";;
4220 esac
4221 $cat <<EOH
4222
4223 By default, $package compiles with the -O flag to use the optimizer.
4224 Alternately, you might want to use the symbolic debugger, which uses
4225 the -g flag (on traditional Unix systems).  Either flag can be
4226 specified here.  To use neither flag, specify the word "none".
4227
4228 EOH
4229 rp="What optimizer/debugger flag should be used?"
4230 . ./myread
4231 optimize="$ans"
4232 case "$optimize" in
4233 'none') optimize=" ";;
4234 esac
4235
4236 dflt=''
4237 : We will not override a previous value, but we might want to
4238 : augment a hint file
4239 case "$hint" in
4240 default|recommended)
4241         case "$gccversion" in
4242         1*) dflt='-fpcc-struct-return' ;;
4243         esac
4244         case "$optimize" in
4245         *-g*) dflt="$dflt -DDEBUGGING";;
4246         esac
4247         case "$gccversion" in
4248         2*) if test -d /etc/conf/kconfig.d &&
4249                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4250                 then
4251                         dflt="$dflt -posix"
4252                 fi
4253                 ;;
4254         esac
4255         case "$gccversion" in
4256         1*) ;;
4257         2.[0-8]*) ;;
4258         ?*)     echo " "
4259                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4260                 echo 'int main(void) { return 0; }' > gcctest.c
4261                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4262                         echo "Yes, it does." 2>&1
4263                         case "$ccflags" in
4264                         *strict-aliasing*) 
4265                                 echo "Leaving current flags $ccflags alone." 2>&1
4266                                 ;;
4267                         *) dflt="$dflt -fno-strict-aliasing" ;;
4268                         esac
4269                 else
4270                         echo "Nope, it doesn't, but that's ok." 2>&1
4271                 fi
4272                 ;;
4273         esac
4274         ;;
4275 esac
4276
4277 case "$mips_type" in
4278 *BSD*|'') inclwanted="$locincpth $usrinc";;
4279 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4280 esac
4281 for thisincl in $inclwanted; do
4282         if $test -d $thisincl; then
4283                 if $test x$thisincl != x$usrinc; then
4284                         case "$dflt" in
4285                         *" -I$thisincl "*);;
4286                         *) dflt="$dflt -I$thisincl ";;
4287                         esac
4288                 fi
4289         fi
4290 done
4291
4292 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4293         xxx=true;
4294 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4295         xxx=true;
4296 else
4297         xxx=false;
4298 fi;
4299 if $xxx; then
4300         case "$dflt" in
4301         *$2*);;
4302         *) dflt="$dflt -D$2";;
4303         esac;
4304 fi'
4305
4306 set signal.h LANGUAGE_C; eval $inctest
4307
4308 case "$usesocks" in
4309 $define)
4310         ccflags="$ccflags -DSOCKS"
4311         ;;
4312 esac
4313
4314 case "$hint" in
4315 default|recommended) dflt="$ccflags $dflt" ;;
4316 *) dflt="$ccflags";;
4317 esac
4318
4319 case "$dflt" in
4320 ''|' ') dflt=none;;
4321 esac
4322
4323 $cat <<EOH
4324
4325 Your C compiler may want other flags.  For this question you should include
4326 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4327 but you should NOT include libraries or ld flags like -lwhatever.  If you
4328 want $package to honor its debug switch, you should include -DDEBUGGING here.
4329 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4330
4331 To use no flags, specify the word "none".
4332
4333 EOH
4334 set X $dflt
4335 shift
4336 dflt=${1+"$@"}
4337 rp="Any additional cc flags?"
4338 . ./myread
4339 case "$ans" in
4340 none) ccflags='';;
4341 *) ccflags="$ans";;
4342 esac
4343
4344 : the following weeds options from ccflags that are of no interest to cpp
4345 case "$cppflags" in
4346 '') cppflags="$ccflags" ;;
4347 *)  cppflags="$cppflags $ccflags" ;;
4348 esac
4349 case "$gccversion" in
4350 1*) cppflags="$cppflags -D__GNUC__"
4351 esac
4352 case "$mips_type" in
4353 '');;
4354 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4355 esac
4356 case "$cppflags" in
4357 '');;
4358 *)
4359         echo " "
4360         echo "Let me guess what the preprocessor flags are..." >&4
4361         set X $cppflags
4362         shift
4363         cppflags=''
4364         $cat >cpp.c <<'EOM'
4365 #define BLURFL foo
4366
4367 BLURFL xx LFRULB
4368 EOM
4369         previous=''
4370         for flag in $*
4371         do
4372                 case "$flag" in
4373                 -*) ftry="$flag";;
4374                 *) ftry="$previous $flag";;
4375                 esac
4376                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4377                         >cpp1.out 2>/dev/null && \
4378                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4379                         >cpp2.out 2>/dev/null && \
4380                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4381                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4382                 then
4383                         cppflags="$cppflags $ftry"
4384                         previous=''
4385                 else
4386                         previous="$flag"
4387                 fi
4388         done
4389         set X $cppflags
4390         shift
4391         cppflags=${1+"$@"}
4392         case "$cppflags" in
4393         *-*)  echo "They appear to be: $cppflags";;
4394         esac
4395         $rm -f cpp.c cpp?.out
4396         ;;
4397 esac
4398
4399 : flags used in final linking phase
4400 case "$ldflags" in
4401 '') if ./venix; then
4402                 dflt='-i -z'
4403         else
4404                 dflt=''
4405         fi
4406         case "$ccflags" in
4407         *-posix*) dflt="$dflt -posix" ;;
4408         esac
4409         ;;
4410 *) dflt="$ldflags";;
4411 esac
4412
4413 : Try to guess additional flags to pick up local libraries.
4414 for thislibdir in $libpth; do
4415         case " $loclibpth " in
4416         *" $thislibdir "*)
4417                 case "$dflt " in 
4418                 *"-L$thislibdir "*) ;;
4419                 *)  dflt="$dflt -L$thislibdir" ;;
4420                 esac
4421                 ;;
4422         esac
4423 done
4424
4425 case "$dflt" in
4426 '') dflt='none' ;;
4427 esac
4428
4429 $cat <<EOH
4430
4431 Your C linker may need flags.  For this question you should
4432 include -L/whatever and any other flags used by the C linker, but you
4433 should NOT include libraries like -lwhatever.
4434
4435 Make sure you include the appropriate -L/path flags if your C linker
4436 does not normally search all of the directories you specified above,
4437 namely
4438         $libpth
4439 To use no flags, specify the word "none".
4440
4441 EOH
4442
4443 rp="Any additional ld flags (NOT including libraries)?"
4444 . ./myread
4445 case "$ans" in
4446 none) ldflags='';;
4447 *) ldflags="$ans";;
4448 esac
4449 rmlist="$rmlist pdp11"
4450
4451 : coherency check
4452 echo " "
4453 echo "Checking your choice of C compiler and flags for coherency..." >&4
4454 $cat > try.c <<'EOF'
4455 #include <stdio.h>
4456 int main() { printf("Ok\n"); exit(0); }
4457 EOF
4458 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
4459 shift
4460 $cat >try.msg <<'EOM'
4461 I've tried to compile and run the following simple program:
4462
4463 EOM
4464 $cat try.c >> try.msg
4465
4466 $cat >> try.msg <<EOM
4467
4468 I used the command:
4469
4470         $*
4471         $run ./try
4472
4473 and I got the following output:
4474
4475 EOM
4476 dflt=y
4477 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
4478         if $sh -c "$run ./try" >>try.msg 2>&1; then
4479                 xxx=`$run ./try`
4480                 case "$xxx" in
4481                 "Ok") dflt=n ;;
4482                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4483                         case " $libs " in
4484                         *" -lsfio "*)
4485                                 cat >> try.msg <<'EOQS'
4486 If $libs contains -lsfio, and sfio is mis-configured, then it
4487 sometimes (apparently) runs and exits with a 0 status, but with no
4488 output!  It may have to do with sfio's use of _exit vs. exit.
4489
4490 EOQS
4491                                 rp="You have a big problem.  Shall I abort Configure"
4492                                 dflt=y
4493                                 ;;
4494                         esac
4495                         ;;
4496                 esac
4497         else
4498                 echo "The program compiled OK, but exited with status $?." >>try.msg
4499                 rp="You have a problem.  Shall I abort Configure"
4500                 dflt=y
4501         fi
4502 else
4503         echo "I can't compile the test program." >>try.msg
4504         rp="You have a BIG problem.  Shall I abort Configure"
4505         dflt=y
4506 fi
4507 case "$dflt" in
4508 y)
4509         $cat try.msg >&4
4510         case "$knowitall" in
4511         '')
4512                 echo "(The supplied flags or libraries might be incorrect.)"
4513                 ;;
4514         *) dflt=n;;
4515         esac
4516         echo " "
4517         . ./myread
4518         case "$ans" in
4519         n*|N*) ;;
4520         *)      echo "Ok.  Stopping Configure." >&4
4521                 exit 1
4522                 ;;
4523         esac
4524         ;;
4525 n) echo "OK, that should do.";;
4526 esac
4527 $rm -f try try.* core
4528
4529 : define an is-a-typedef? function
4530 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4531 case "$inclist" in
4532 "") inclist="sys/types.h";;
4533 esac;
4534 eval "varval=\$$var";
4535 case "$varval" in
4536 "")
4537         $rm -f temp.c;
4538         for inc in $inclist; do
4539                 echo "#include <$inc>" >>temp.c;
4540         done;
4541         echo "#ifdef $type" >> temp.c;
4542         echo "printf(\"We have $type\");" >> temp.c;
4543         echo "#endif" >> temp.c;
4544         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4545         if $contains $type temp.E >/dev/null 2>&1; then
4546                 eval "$var=\$type";
4547         else
4548                 eval "$var=\$def";
4549         fi;
4550         $rm -f temp.?;;
4551 *) eval "$var=\$varval";;
4552 esac'
4553
4554 : define an is-a-typedef? function that prompts if the type is not available.
4555 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4556 case "$inclist" in
4557 "") inclist="sys/types.h";;
4558 esac;
4559 eval "varval=\$$var";
4560 case "$varval" in
4561 "")
4562         $rm -f temp.c;
4563         for inc in $inclist; do
4564                 echo "#include <$inc>" >>temp.c;
4565         done;
4566         echo "#ifdef $type" >> temp.c;
4567         echo "printf(\"We have $type\");" >> temp.c;
4568         echo "#endif" >> temp.c;
4569         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4570         echo " " ;
4571         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
4572         if $contains $type temp.E >/dev/null 2>&1; then
4573                 echo "$type found." >&4;
4574                 eval "$var=\$type";
4575         else
4576                 echo "$type NOT found." >&4;
4577                 dflt="$def";
4578                 . ./myread ;
4579                 eval "$var=\$ans";
4580         fi;
4581         $rm -f temp.?;;
4582 *) eval "$var=\$varval";;
4583 esac'
4584
4585 : define a shorthand compile call
4586 compile='
4587 mc_file=$1;
4588 shift;
4589 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
4590 : define a shorthand compile call for compilations that should be ok.
4591 compile_ok='
4592 mc_file=$1;
4593 shift;
4594 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
4595
4596 : check for lengths of integral types
4597 echo " "
4598 case "$intsize" in
4599 '')
4600         echo "Checking to see how big your integers are..." >&4
4601         $cat >try.c <<'EOCP'
4602 #include <stdio.h>
4603 int main()
4604 {
4605         printf("intsize=%d;\n", (int)sizeof(int));
4606         printf("longsize=%d;\n", (int)sizeof(long));
4607         printf("shortsize=%d;\n", (int)sizeof(short));
4608         exit(0);
4609 }
4610 EOCP
4611         set try
4612         if eval $compile_ok && $run ./try > /dev/null; then
4613                 eval `$run ./try`
4614                 echo "Your integers are $intsize bytes long."
4615                 echo "Your long integers are $longsize bytes long."
4616                 echo "Your short integers are $shortsize bytes long."
4617         else
4618                 $cat >&4 <<EOM
4619 !
4620 Help! I can't compile and run the intsize test program: please enlighten me!
4621 (This is probably a misconfiguration in your system or libraries, and
4622 you really ought to fix it.  Still, I'll try anyway.)
4623 !
4624 EOM
4625                 dflt=4
4626                 rp="What is the size of an integer (in bytes)?"
4627                 . ./myread
4628                 intsize="$ans"
4629                 dflt=$intsize
4630                 rp="What is the size of a long integer (in bytes)?"
4631                 . ./myread
4632                 longsize="$ans"
4633                 dflt=2
4634                 rp="What is the size of a short integer (in bytes)?"
4635                 . ./myread
4636                 shortsize="$ans"
4637         fi
4638         ;;
4639 esac
4640 $rm -f try try.*
4641
4642 : see what type lseek is declared as in the kernel
4643 rp="What is the type used for lseek's offset on this system?"
4644 set off_t lseektype long stdio.h sys/types.h
4645 eval $typedef_ask
4646
4647 echo " "
4648 echo "Checking to see how big your file offsets are..." >&4
4649 $cat >try.c <<EOCP
4650 #include <sys/types.h>
4651 #include <stdio.h>
4652 int main()
4653 {
4654     printf("%d\n", (int)sizeof($lseektype));
4655     return(0); 
4656 }
4657 EOCP
4658 set try
4659 if eval $compile_ok; then
4660         lseeksize=`$run ./try`
4661         echo "Your file offsets are $lseeksize bytes long."
4662 else
4663         dflt=$longsize
4664         echo " "
4665         echo "(I can't seem to compile the test program.  Guessing...)"
4666         rp="What is the size of your file offsets (in bytes)?"
4667         . ./myread
4668         lseeksize="$ans"
4669 fi
4670 $rm -f try.c try
4671
4672 : see what type file positions are declared as in the library
4673 rp="What is the type for file position used by fsetpos()?"
4674 set fpos_t fpostype long stdio.h sys/types.h
4675 eval $typedef_ask
4676
4677 echo " "
4678 case "$fpostype" in
4679 *_t) zzz="$fpostype"    ;;
4680 *)   zzz="fpos_t"       ;;
4681 esac
4682 echo "Checking the size of $zzz..." >&4 
4683 cat > try.c <<EOCP
4684 #include <sys/types.h>
4685 #include <stdio.h>
4686 int main() {
4687     printf("%d\n", (int)sizeof($fpostype));
4688     exit(0);
4689 }
4690 EOCP
4691 set try
4692 if eval $compile_ok; then
4693         yyy=`$run ./try`
4694         case "$yyy" in
4695         '')     fpossize=4
4696                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4697                 ;;
4698         *)      fpossize=$yyy
4699                 echo "Your $zzz is $fpossize bytes long."
4700                 ;;
4701         esac
4702 else
4703         dflt="$longsize"
4704         echo " " >&4
4705         echo "(I can't compile the test program.  Guessing...)" >&4
4706         rp="What is the size of your file positions (in bytes)?"
4707         . ./myread
4708         fpossize="$ans"
4709 fi
4710
4711
4712
4713 # Backward compatibility (uselfs is deprecated).
4714 case "$uselfs" in
4715 "$define"|true|[yY]*)
4716         cat <<EOM >&4
4717
4718 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
4719 EOM
4720         uselargefiles="$define"
4721         ;;
4722 esac                          
4723
4724 case "$lseeksize:$fpossize" in
4725 8:8) cat <<EOM
4726
4727 You can have files larger than 2 gigabytes.
4728 EOM
4729    val="$define" ;;
4730 *)    case "$uselargefiles" in
4731    "$undef"|false|[nN]*) dflt='n' ;;
4732    *)   dflt='y' ;;
4733    esac
4734    cat <<EOM
4735
4736 Perl can be built to understand large files (files larger than 2 gigabytes)
4737 on some systems.  To do so, Configure can be run with -Duselargefiles.
4738
4739 If this doesn't make any sense to you, just accept the default '$dflt'.
4740 EOM
4741    rp='Try to understand large files, if available?'
4742    . ./myread
4743    case "$ans" in
4744    y|Y)         val="$define" ;;
4745    *)           val="$undef"  ;;
4746    esac
4747    ;;
4748 esac
4749 set uselargefiles
4750 eval $setvar
4751 case "$uselargefiles" in
4752 "$define")
4753 : Look for a hint-file generated 'call-back-unit'.  If the
4754 : user has specified that a large files perl is to be built,
4755 : we may need to set or change some other defaults.
4756         if $test -f uselargefiles.cbu; then
4757                 echo "Your platform has some specific hints for large file builds, using them..."
4758                 . ./uselargefiles.cbu
4759                 echo " "
4760                 echo "Rechecking to see how big your file offsets are..." >&4
4761                 $cat >try.c <<EOCP
4762 #include <sys/types.h>
4763 #include <stdio.h>
4764 int main()
4765 {
4766     printf("%d\n", (int)sizeof($lseektype));
4767     return(0); 
4768 }
4769 EOCP
4770                 set try
4771                 if eval $compile_ok; then
4772                         lseeksize=`$run ./try`
4773                         $echo "Your file offsets are now $lseeksize bytes long."
4774                 else
4775                         dflt="$lseeksize"
4776                         echo " "
4777                         echo "(I can't seem to compile the test program.  Guessing...)"
4778                         rp="What is the size of your file offsets (in bytes)?"
4779                         . ./myread
4780                         lseeksize="$ans"
4781                 fi
4782                 case "$fpostype" in
4783                 *_t) zzz="$fpostype"    ;;
4784                 *)   zzz="fpos_t"       ;;
4785                 esac
4786                 $echo $n "Rechecking the size of $zzz...$c" >&4 
4787                 $cat > try.c <<EOCP
4788 #include <sys/types.h>
4789 #include <stdio.h>
4790 int main() {
4791     printf("%d\n", (int)sizeof($fpostype));
4792     exit(0);
4793 }
4794 EOCP
4795                 set try
4796                 if eval $compile_ok; then
4797                         yyy=`$run ./try`
4798                         dflt="$lseeksize"
4799                         case "$yyy" in
4800                         '')     echo " "
4801                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4802                                 ;;
4803                         *)      fpossize=$yyy
4804                                 echo " $fpossize bytes." >&4
4805                                 ;;
4806                         esac
4807                 else
4808                         dflt="$fpossize"
4809                         echo " "
4810                         echo "(I can't compile the test program.  Guessing...)" >&4
4811                         rp="What is the size of your file positions (in bytes)?"
4812                         . ./myread
4813                         fpossize="$ans"
4814                 fi
4815                 $rm -f try.c try
4816         fi
4817         ;;
4818 esac
4819
4820
4821 case "$usemorebits" in
4822 "$define"|true|[yY]*)
4823         use64bitint="$define"
4824         uselongdouble="$define"
4825         usemorebits="$define"
4826         ;;
4827 *)      usemorebits="$undef"
4828         ;;
4829 esac
4830
4831 : check for void type
4832 echo " "
4833 echo "Checking to see how well your C compiler groks the void type..." >&4
4834 case "$voidflags" in
4835 '')
4836         $cat >try.c <<'EOCP'
4837 #if TRY & 1
4838 void sub() {
4839 #else
4840 sub() {
4841 #endif
4842         extern void moo();      /* function returning void */
4843         void (*goo)();          /* ptr to func returning void */
4844 #if TRY & 8
4845         void *hue;              /* generic ptr */
4846 #endif
4847 #if TRY & 2
4848         void (*foo[10])();
4849 #endif
4850
4851 #if TRY & 4
4852         if(goo == moo) {
4853                 exit(0);
4854         }
4855 #endif
4856         exit(0);
4857 }
4858 int main() { sub(); }
4859 EOCP
4860         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
4861                 voidflags=$defvoidused
4862         echo "Good.  It appears to support void to the level $package wants.">&4
4863                 if $contains warning .out >/dev/null 2>&1; then
4864                         echo "However, you might get some warnings that look like this:"
4865                         $cat .out
4866                 fi
4867         else
4868 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
4869                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
4870                         echo "It supports 1..."
4871                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
4872                                 echo "It also supports 2..."
4873                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
4874                                         voidflags=7
4875                                         echo "And it supports 4 but not 8 definitely."
4876                                 else
4877                                         echo "It doesn't support 4..."
4878                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
4879                                                 voidflags=11
4880                                                 echo "But it supports 8."
4881                                         else
4882                                                 voidflags=3
4883                                                 echo "Neither does it support 8."
4884                                         fi
4885                                 fi
4886                         else
4887                                 echo "It does not support 2..."
4888                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
4889                                         voidflags=13
4890                                         echo "But it supports 4 and 8."
4891                                 else
4892                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
4893                                                 voidflags=5
4894                                                 echo "And it supports 4 but has not heard about 8."
4895                                         else
4896                                                 echo "However it supports 8 but not 4."
4897                                         fi
4898                                 fi
4899                         fi
4900                 else
4901                         echo "There is no support at all for void."
4902                         voidflags=0
4903                 fi
4904         fi
4905 esac
4906 case "$voidflags" in
4907 "$defvoidused") ;;
4908 *)      $cat >&4 <<'EOM'
4909   Support flag bits are:
4910     1: basic void declarations.
4911     2: arrays of pointers to functions returning void.
4912     4: operations between pointers to and addresses of void functions.
4913     8: generic void pointers.
4914 EOM
4915         dflt="$voidflags";
4916         rp="Your void support flags add up to what?"
4917         . ./myread
4918         voidflags="$ans"
4919         ;;
4920 esac
4921 $rm -f try.* .out
4922
4923 : check for length of pointer
4924 echo " "
4925 case "$ptrsize" in
4926 '')
4927         echo "Checking to see how big your pointers are..." >&4
4928         if test "$voidflags" -gt 7; then
4929                 echo '#define VOID_PTR char *' > try.c
4930         else
4931                 echo '#define VOID_PTR void *' > try.c
4932         fi
4933         $cat >>try.c <<'EOCP'
4934 #include <stdio.h>
4935 int main()
4936 {
4937     printf("%d\n", (int)sizeof(VOID_PTR));
4938     exit(0);
4939 }
4940 EOCP
4941         set try
4942         if eval $compile_ok; then
4943                 ptrsize=`$run ./try`
4944                 echo "Your pointers are $ptrsize bytes long."
4945         else
4946                 dflt='4'
4947                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
4948                 rp="What is the size of a pointer (in bytes)?"
4949                 . ./myread
4950                 ptrsize="$ans"
4951         fi
4952         ;;
4953 esac
4954 $rm -f try.c try
4955
4956 : check for long long
4957 echo " "
4958 echo "Checking to see if you have long long..." >&4
4959 echo 'int main() { long long x = 7; return 0; }' > try.c
4960 set try
4961 if eval $compile; then
4962         val="$define"
4963         echo "You have long long."
4964 else
4965         val="$undef"
4966         echo "You do not have long long."
4967 fi
4968 $rm try.*
4969 set d_longlong
4970 eval $setvar
4971
4972 : check for length of long long
4973 case "${d_longlong}${longlongsize}" in
4974 $define)
4975         echo " "
4976         echo "Checking to see how big your long longs are..." >&4
4977         $cat >try.c <<'EOCP'
4978 #include <stdio.h>
4979 int main()
4980 {
4981     printf("%d\n", (int)sizeof(long long));
4982     return(0);
4983 }
4984 EOCP
4985         set try
4986         if eval $compile_ok; then
4987                 longlongsize=`$run ./try`
4988                 echo "Your long longs are $longlongsize bytes long."
4989         else
4990                 dflt='8'
4991                 echo " "
4992                 echo "(I can't seem to compile the test program.  Guessing...)"
4993                 rp="What is the size of a long long (in bytes)?"
4994                 . ./myread
4995                 longlongsize="$ans"
4996         fi
4997         if $test "X$longsize" = "X$longlongsize"; then
4998                 echo "(That isn't any different from an ordinary long.)"
4999         fi      
5000         ;;
5001 esac
5002 $rm -f try.* try
5003
5004 : determine filename position in cpp output
5005 echo " "
5006 echo "Computing filename position in cpp output for #include directives..." >&4
5007 echo '#include <stdio.h>' > foo.c
5008 $cat >fieldn <<EOF
5009 $startsh
5010 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
5011 $grep '^[       ]*#.*stdio\.h' | \
5012 while read cline; do
5013         pos=1
5014         set \$cline
5015         while $test \$# -gt 0; do
5016                 if $test -r \`echo \$1 | $tr -d '"'\`; then
5017                         echo "\$pos"
5018                         exit 0
5019                 fi
5020                 shift
5021                 pos=\`expr \$pos + 1\`
5022         done
5023 done
5024 EOF
5025 chmod +x fieldn
5026 fieldn=`./fieldn`
5027 $rm -f foo.c fieldn
5028 case $fieldn in
5029 '') pos='???';;
5030 1) pos=first;;
5031 2) pos=second;;
5032 3) pos=third;;
5033 *) pos="${fieldn}th";;
5034 esac
5035 echo "Your cpp writes the filename in the $pos field of the line."
5036
5037 : locate header file
5038 $cat >findhdr <<EOF
5039 $startsh
5040 wanted=\$1
5041 name=''
5042 for usrincdir in $usrinc
5043 do
5044         if test -f \$usrincdir/\$wanted; then
5045                 echo "\$usrincdir/\$wanted"
5046                 exit 0
5047         fi
5048 done
5049 awkprg='{ print \$$fieldn }'
5050 echo "#include <\$wanted>" > foo\$\$.c
5051 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
5052 $grep "^[       ]*#.*\$wanted" | \
5053 while read cline; do
5054         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
5055         case "\$name" in
5056         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
5057         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
5058         *) exit 2;;
5059         esac;
5060 done;
5061 #
5062 # status = 0: grep returned 0 lines, case statement not executed
5063 # status = 1: headerfile found
5064 # status = 2: while loop executed, no headerfile found
5065 #
5066 status=\$?
5067 $rm -f foo\$\$.c;
5068 if test \$status -eq 1; then
5069         exit 0;
5070 fi
5071 exit 1
5072 EOF
5073 chmod +x findhdr
5074
5075 : define an alternate in-header-list? function
5076 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
5077 cont=true; xxf="echo \"<\$1> found.\" >&4";
5078 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
5079 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
5080 esac;
5081 case $# in 4) instead=instead;; *) instead="at last";; esac;
5082 while $test "$cont"; do
5083         xxx=`./findhdr $1`
5084         var=$2; eval "was=\$$2";
5085         if $test "$xxx" && $test -r "$xxx";
5086         then eval $xxf;
5087         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5088                 cont="";
5089         else eval $xxnf;
5090         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5091         set $yyy; shift; shift; yyy=$@;
5092         case $# in 0) cont="";;
5093         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5094                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5095         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5096                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5097         esac;
5098 done;
5099 while $test "$yyy";
5100 do set $yyy; var=$2; eval "was=\$$2";
5101         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5102         set $yyy; shift; shift; yyy=$@;
5103 done'
5104
5105 : see if inttypes.h is available
5106 : we want a real compile instead of Inhdr because some systems
5107 : have an inttypes.h which includes non-existent headers
5108 echo " "
5109 $cat >try.c <<EOCP
5110 #include <inttypes.h>
5111 int main() {
5112         static int32_t foo32 = 0x12345678;
5113 }
5114 EOCP
5115 set try
5116 if eval $compile; then
5117         echo "<inttypes.h> found." >&4
5118         val="$define"
5119 else
5120         echo "<inttypes.h> NOT found." >&4
5121         val="$undef"
5122 fi
5123 $rm -f try.c try
5124 set i_inttypes
5125 eval $setvar
5126
5127 : check for int64_t
5128 echo " "
5129 echo "Checking to see if you have int64_t..." >&4
5130 $cat >try.c <<EOCP
5131 #include <sys/types.h>
5132 #$i_inttypes I_INTTYPES
5133 #ifdef I_INTTYPES
5134 #include <inttypes.h>
5135 #endif
5136 int main() { int64_t x = 7; }
5137 EOCP
5138 set try
5139 if eval $compile; then
5140         val="$define"
5141         echo "You have int64_t."
5142 else
5143         val="$undef"
5144         echo "You do not have int64_t."
5145 fi
5146 $rm -f try try.*
5147 set d_int64_t
5148 eval $setvar
5149
5150
5151 echo " "
5152 echo "Checking which 64-bit integer type we could use..." >&4
5153
5154 case "$intsize" in
5155 8) val=int
5156    set quadtype
5157    eval $setvar
5158    val='"unsigned int"'
5159    set uquadtype
5160    eval $setvar
5161    quadkind=1
5162    ;;
5163 *) case "$longsize" in
5164    8) val=long
5165       set quadtype
5166       eval $setvar
5167       val='"unsigned long"'
5168       set uquadtype
5169       eval $setvar
5170       quadkind=2
5171       ;;
5172    *) case "$d_longlong:$longlongsize" in
5173       define:8)
5174         val='"long long"'
5175         set quadtype
5176         eval $setvar
5177         val='"unsigned long long"'
5178         set uquadtype
5179         eval $setvar
5180         quadkind=3
5181         ;;
5182       *) case "$d_int64_t" in
5183          define)
5184            val=int64_t
5185            set quadtype
5186            eval $setvar
5187            val=uint64_t
5188            set uquadtype
5189            eval $setvar
5190            quadkind=4
5191            ;;
5192          esac
5193          ;;
5194       esac
5195       ;;
5196    esac
5197    ;;
5198 esac
5199
5200 case "$quadtype" in
5201 '')     echo "Alas, no 64-bit integer types in sight." >&4
5202         d_quad="$undef"
5203         ;;
5204 *)      echo "We could use '$quadtype' for 64-bit integers." >&4
5205         d_quad="$define"
5206         ;;
5207 esac
5208
5209
5210 case "$uselonglong" in
5211 "$define"|true|[yY]*)
5212         cat <<EOM >&4
5213
5214 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
5215 EOM
5216         use64bitint="$define"
5217         ;;
5218 esac                          
5219 case "$use64bits" in
5220 "$define"|true|[yY]*)
5221         cat <<EOM >&4
5222
5223 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
5224 EOM
5225         use64bitint="$define"
5226         ;;
5227 esac                          
5228 case "$use64bitints" in
5229 "$define"|true|[yY]*)
5230         cat <<EOM >&4
5231
5232 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
5233 EOM
5234         use64bitint="$define"
5235         ;;
5236 esac                          
5237 case "$use64bitsint" in
5238 "$define"|true|[yY]*)
5239         cat <<EOM >&4
5240
5241 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
5242 EOM
5243         use64bitint="$define"
5244         ;;
5245 esac                          
5246 case "$uselonglongs" in
5247 "$define"|true|[yY]*)
5248         cat <<EOM >&4
5249
5250 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
5251 EOM
5252         use64bitint="$define"
5253         ;;
5254 esac                          
5255 case "$use64bitsall" in
5256 "$define"|true|[yY]*)
5257         cat <<EOM >&4
5258
5259 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
5260 EOM
5261         use64bitall="$define"
5262         ;;
5263 esac                          
5264
5265 case "$ccflags" in
5266 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
5267 esac
5268 case "$use64bitall" in
5269 "$define"|true|[yY]*) use64bitint="$define" ;;
5270 esac
5271
5272 case "$longsize" in
5273 8) cat <<EOM
5274
5275 You have natively 64-bit long integers.
5276 EOM
5277    val="$define"
5278    ;;
5279 *) case "$use64bitint" in
5280    "$define"|true|[yY]*) dflt='y';;
5281    *) dflt='n';;
5282    esac
5283    case "$d_quad" in
5284    "$define") ;;
5285    *) dflt='n' ;;
5286    esac
5287    cat <<EOM
5288
5289 Perl can be built to take advantage of 64-bit integer types
5290 on some systems.  To do so, Configure can be run with -Duse64bitint.
5291 Choosing this option will most probably introduce binary incompatibilities.
5292
5293 If this doesn't make any sense to you, just accept the default '$dflt'.
5294 (The default has been chosen based on your configuration.)
5295 EOM
5296    rp='Try to use 64-bit integers, if available?'
5297    . ./myread
5298    case "$ans" in
5299    [yY]*) val="$define" ;;
5300    *)     val="$undef"  ;;
5301    esac
5302    ;;
5303 esac
5304 set use64bitint
5305 eval $setvar
5306
5307 case "$use64bitall" in
5308 "$define"|true|[yY]*) dflt='y' ;;
5309 *) case "$longsize" in
5310    8) dflt='y' ;;
5311    *) dflt='n' ;;
5312    esac
5313    ;;
5314 esac    
5315 cat <<EOM
5316
5317 You may also choose to try maximal 64-bitness.  It means using as much
5318 64-bitness as possible on the platform.  This in turn means even more
5319 binary incompatibilities.  On the other hand, your platform may not
5320 have any more 64-bitness available than what you already have chosen.
5321
5322 If this doesn't make any sense to you, just accept the default '$dflt'.
5323 (The default has been chosen based on your configuration.)
5324 EOM
5325 rp='Try to use maximal 64-bit support, if available?'
5326 . ./myread
5327 case "$ans" in
5328 [yY]*) val="$define" ;;
5329 *)     val="$undef"  ;;
5330 esac
5331 set use64bitall
5332 eval $setvar
5333 case "$use64bitall" in
5334 "$define")
5335         case "$use64bitint" in
5336         "$undef")
5337                 cat <<EOM
5338
5339 Since you have chosen a maximally 64-bit build, I'm also turning on
5340 the use of 64-bit integers.
5341 EOM
5342                 use64bitint="$define" ;;
5343         esac
5344         ;;
5345 esac
5346
5347 case "$use64bitall" in
5348 "$define"|true|[yY]*)
5349         case "$ptrsize" in
5350         4)      cat <<EOM >&4
5351
5352 *** You have chosen a maximally 64-bit build, but your pointers
5353 *** are only 4 bytes wide, disabling maximal 64-bitness.
5354
5355 EOM
5356                 use64bitall="$undef"
5357                 case "$use64bitint" in
5358                 "$define"|true|[yY]*) ;;
5359                 *)      cat <<EOM >&4
5360
5361 *** Downgrading from maximal 64-bitness to using 64-bit integers.
5362
5363 EOM
5364                         use64bitint="$define"
5365                         ;;
5366                 esac
5367                 ;;
5368         esac
5369         ;;
5370 esac
5371
5372 case "$use64bitint" in
5373 "$define"|true|[yY]*)
5374 : Look for a hint-file generated 'call-back-unit'.  If the
5375 : user has specified that a 64-bit perl is to be built,
5376 : we may need to set or change some other defaults.
5377         if $test -f use64bitint.cbu; then
5378                 echo "Your platform has some specific hints for 64-bit integers, using them..."
5379                 . ./use64bitint.cbu
5380         fi
5381         case "$longsize" in
5382         4) case "$archname64" in
5383            '') archname64=64int ;;
5384            esac
5385            ;;
5386         esac
5387         ;;
5388 esac
5389
5390 case "$use64bitall" in
5391 "$define"|true|[yY]*)
5392 : Look for a hint-file generated 'call-back-unit'.  If the
5393 : user has specified that a maximally 64-bit perl is to be built,
5394 : we may need to set or change some other defaults.
5395         if $test -f use64bitall.cbu; then
5396                 echo "Your platform has some specific hints for 64-bit builds, using them..."
5397                 . ./use64bitall.cbu
5398         fi
5399         case "$longsize" in
5400         4) case "$archname64" in
5401            ''|64int) archname64=64all ;;
5402            esac
5403            ;;
5404         esac
5405         ;;
5406 esac
5407
5408 echo " "
5409 echo "Checking for GNU C Library..." >&4
5410 cat >try.c <<EOM
5411 #include <stdio.h>
5412 int main()
5413 {
5414 #ifdef __GLIBC__
5415     exit(0);
5416 #else
5417     exit(1);
5418 #endif
5419 }
5420 EOM
5421 set try
5422 if eval $compile_ok && $run ./try; then
5423         val="$define"
5424         echo "You are using the GNU C Library"
5425 else
5426         val="$undef"
5427         echo "You are not using the GNU C Library"
5428 fi
5429 $rm -f try try.*
5430 set d_gnulibc
5431 eval $setvar
5432
5433 : see if nm is to be used to determine whether a symbol is defined or not
5434 case "$usenm" in
5435 '')
5436         dflt=''
5437         case "$d_gnulibc" in
5438         "$define")
5439                 echo " "
5440                 echo "nm probably won't work on the GNU C Library." >&4
5441                 dflt=n
5442                 ;;
5443         esac
5444         case "$dflt" in
5445         '') 
5446                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5447                         echo " "
5448                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5449                         echo "'nm' won't be sufficient on this sytem." >&4
5450                         dflt=n
5451                 fi
5452                 ;;
5453         esac
5454         case "$dflt" in
5455         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5456                 if $test $dflt -gt 20; then
5457                         dflt=y
5458                 else
5459                         dflt=n
5460                 fi
5461                 ;;
5462         esac
5463         ;;
5464 *)
5465         case "$usenm" in
5466         true|$define) dflt=y;;
5467         *) dflt=n;;
5468         esac
5469         ;;
5470 esac
5471 $cat <<EOM
5472
5473 I can use $nm to extract the symbols from your C libraries. This
5474 is a time consuming task which may generate huge output on the disk (up
5475 to 3 megabytes) but that should make the symbols extraction faster. The
5476 alternative is to skip the 'nm' extraction part and to compile a small
5477 test program instead to determine whether each symbol is present. If
5478 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5479 this may be the best solution.
5480
5481 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5482
5483 EOM
5484 rp="Shall I use $nm to extract C symbols from the libraries?"
5485 . ./myread
5486 case "$ans" in
5487 [Nn]*) usenm=false;;
5488 *) usenm=true;;
5489 esac
5490
5491 runnm=$usenm
5492 case "$reuseval" in
5493 true) runnm=false;;
5494 esac
5495
5496 : nm options which may be necessary
5497 case "$nm_opt" in
5498 '') if $test -f /mach_boot; then
5499                 nm_opt=''       # Mach
5500         elif $test -d /usr/ccs/lib; then
5501                 nm_opt='-p'     # Solaris (and SunOS?)
5502         elif $test -f /dgux; then
5503                 nm_opt='-p'     # DG-UX
5504         elif $test -f /lib64/rld; then
5505                 nm_opt='-p'     # 64-bit Irix
5506         else
5507                 nm_opt=''
5508         fi;;
5509 esac
5510
5511 : nm options which may be necessary for shared libraries but illegal
5512 : for archive libraries.  Thank you, Linux.
5513 case "$nm_so_opt" in
5514 '')     case "$myuname" in
5515         *linux*)
5516                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5517                         nm_so_opt='--dynamic'
5518                 fi
5519                 ;;
5520         esac
5521         ;;
5522 esac
5523
5524 case "$runnm" in
5525 true)
5526 : get list of predefined functions in a handy place
5527 echo " "
5528 case "$libc" in
5529 '') libc=unknown
5530         case "$libs" in
5531         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5532         esac
5533         ;;
5534 esac
5535 case "$libs" in
5536 '') ;;
5537 *)  for thislib in $libs; do
5538         case "$thislib" in
5539         -lc|-lc_s)
5540                 : Handle C library specially below.
5541                 ;;
5542         -l*)
5543                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5544                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5545                         :
5546                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5547                         :
5548                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5549                         :
5550                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5551                         :
5552                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5553                         :
5554                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5555                         :
5556                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5557                         :
5558                 else
5559                         try=''
5560                 fi
5561                 libnames="$libnames $try"
5562                 ;;
5563         *) libnames="$libnames $thislib" ;;
5564         esac
5565         done
5566         ;;
5567 esac
5568 xxx=normal
5569 case "$libc" in
5570 unknown)
5571         set /lib/libc.$so
5572         for xxx in $libpth; do
5573                 $test -r $1 || set $xxx/libc.$so
5574                 : The messy sed command sorts on library version numbers.
5575                 $test -r $1 || \
5576                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5577                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5578                                 h
5579                                 s/[0-9][0-9]*/0000&/g
5580                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5581                                 G
5582                                 s/\n/ /' | \
5583                          $sort | $sed -e 's/^.* //'`
5584                 eval set \$$#
5585         done
5586         $test -r $1 || set /usr/ccs/lib/libc.$so
5587         $test -r $1 || set /lib/libsys_s$_a
5588         ;;
5589 *)
5590         set blurfl
5591         ;;
5592 esac
5593 if $test -r "$1"; then
5594         echo "Your (shared) C library seems to be in $1."
5595         libc="$1"
5596 elif $test -r /lib/libc && $test -r /lib/clib; then
5597         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5598         xxx=apollo
5599         libc='/lib/clib /lib/libc'
5600         if $test -r /lib/syslib; then
5601                 echo "(Your math library is in /lib/syslib.)"
5602                 libc="$libc /lib/syslib"
5603         fi
5604 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5605         echo "Your C library seems to be in $libc, as you said before."
5606 elif $test -r $incpath/usr/lib/libc$_a; then
5607         libc=$incpath/usr/lib/libc$_a;
5608         echo "Your C library seems to be in $libc.  That's fine."
5609 elif $test -r /lib/libc$_a; then
5610         libc=/lib/libc$_a;
5611         echo "Your C library seems to be in $libc.  You're normal."
5612 else
5613         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5614                 :
5615         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5616                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5617         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5618                 :
5619         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5620                 :
5621         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5622                 :
5623         else
5624                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5625         fi
5626         if $test -r "$tans"; then
5627                 echo "Your C library seems to be in $tans, of all places."
5628                 libc=$tans
5629         else
5630                 libc='blurfl'
5631         fi
5632 fi
5633 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5634         dflt="$libc"
5635         cat <<EOM
5636
5637 If the guess above is wrong (which it might be if you're using a strange
5638 compiler, or your machine supports multiple models), you can override it here.
5639
5640 EOM
5641 else
5642         dflt=''
5643         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
5644         cat >&4 <<EOM
5645 I can't seem to find your C library.  I've looked in the following places:
5646
5647 EOM
5648         $sed 's/^/      /' libpath
5649         cat <<EOM
5650
5651 None of these seems to contain your C library. I need to get its name...
5652
5653 EOM
5654 fi
5655 fn=f
5656 rp='Where is your C library?'
5657 . ./getfile
5658 libc="$ans"
5659
5660 echo " "
5661 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
5662 set X `cat libnames`
5663 shift
5664 xxx=files
5665 case $# in 1) xxx=file; esac
5666 echo "Extracting names from the following $xxx for later perusal:" >&4
5667 echo " "
5668 $sed 's/^/      /' libnames >&4
5669 echo " "
5670 $echo $n "This may take a while...$c" >&4
5671
5672 for file in $*; do
5673         case $file in
5674         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5675         *) $nm $nm_opt $file 2>/dev/null;;
5676         esac
5677 done >libc.tmp
5678
5679 $echo $n ".$c"
5680 $grep fprintf libc.tmp > libc.ptf
5681 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5682 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5683 xxx='[ADTSIW]'
5684 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5685         eval $xscan;\
5686         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5687                 eval $xrun
5688 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5689         eval $xscan;\
5690         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5691                 eval $xrun
5692 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5693         eval $xscan;\
5694         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5695                 eval $xrun
5696 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5697         eval $xscan;\
5698         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5699                 eval $xrun
5700 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5701         eval $xscan;\
5702         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5703                 eval $xrun
5704 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5705         eval $xscan;\
5706         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5707                 eval $xrun
5708 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5709                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5710         eval $xscan;\
5711         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5712                 eval $xrun
5713 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5714         eval $xscan;\
5715         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5716                 eval $xrun
5717 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5718         eval $xscan;\
5719         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5720                 eval $xrun
5721 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5722         eval $xscan;\
5723         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5724                 eval $xrun
5725 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5726         eval $xscan;\
5727         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5728                 eval $xrun
5729 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5730         eval $xscan;\
5731         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5732                 eval $xrun
5733 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5734         eval $xscan;\
5735         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5736                 eval $xrun
5737 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5738         eval $xscan;\
5739         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5740                 eval $xrun
5741 else
5742         $nm -p $* 2>/dev/null >libc.tmp
5743         $grep fprintf libc.tmp > libc.ptf
5744         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5745                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5746         then
5747                 nm_opt='-p'
5748                 eval $xrun
5749         else
5750                 echo " "
5751                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5752                 com=''
5753                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5754                         for thisname in $libnames $libc; do
5755                                 $ar t $thisname >>libc.tmp
5756                         done
5757                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5758                         echo "Ok." >&4
5759                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5760                         # Repeat libc to extract forwarders to DLL entries too
5761                         for thisname in $libnames $libc; do
5762                                 $ar tv $thisname >>libc.tmp
5763                                 # Revision 50 of EMX has bug in $ar.
5764                                 # it will not extract forwarders to DLL entries
5765                                 # Use emximp which will extract exactly them.
5766                                 emximp -o tmp.imp $thisname \
5767                                     2>/dev/null && \
5768                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5769                                     < tmp.imp >>libc.tmp
5770                                 $rm tmp.imp
5771                         done
5772                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5773                         echo "Ok." >&4
5774                 else
5775                         echo "$ar didn't seem to work right." >&4
5776                         echo "Maybe this is a Cray...trying bld instead..." >&4
5777                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5778                         then
5779                                 for thisname in $libnames; do
5780                                         bld t $libnames | \
5781                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5782                                         $ar t $thisname >>libc.tmp
5783                                 done
5784                                 echo "Ok." >&4
5785                         else
5786                                 echo "That didn't work either.  Giving up." >&4
5787                                 exit 1
5788                         fi
5789                 fi
5790         fi
5791 fi
5792 nm_extract="$com"
5793 if $test -f /lib/syscalls.exp; then
5794         echo " "
5795         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5796         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
5797 fi
5798 ;;
5799 esac
5800 $rm -f libnames libpath
5801
5802 : is a C symbol defined?
5803 csym='tlook=$1;
5804 case "$3" in
5805 -v) tf=libc.tmp; tc=""; tdc="";;
5806 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5807 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5808 esac;
5809 tx=yes;
5810 case "$reuseval-$4" in
5811 true-) ;;
5812 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5813 esac;
5814 case "$tx" in
5815 yes)
5816         case "$runnm" in
5817         true)
5818                 if $contains $tlook $tf >/dev/null 2>&1;
5819                 then tval=true;
5820                 else tval=false;
5821                 fi;;
5822         *)
5823                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5824                 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
5825                 then tval=true;
5826                 else tval=false;
5827                 fi;
5828                 $rm -f t t.c;;
5829         esac;;
5830 *)
5831         case "$tval" in
5832         $define) tval=true;;
5833         *) tval=false;;
5834         esac;;
5835 esac;
5836 eval "$2=$tval"'
5837
5838 : define an is-in-libc? function
5839 inlibc='echo " "; td=$define; tu=$undef;
5840 sym=$1; var=$2; eval "was=\$$2";
5841 tx=yes;
5842 case "$reuseval$was" in
5843 true) ;;
5844 true*) tx=no;;
5845 esac;
5846 case "$tx" in
5847 yes)
5848         set $sym tres -f;
5849         eval $csym;
5850         case "$tres" in
5851         true)
5852                 echo "$sym() found." >&4;
5853                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5854         *)
5855                 echo "$sym() NOT found." >&4;
5856                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5857         esac;;
5858 *)
5859         case "$was" in
5860         $define) echo "$sym() found." >&4;;
5861         *) echo "$sym() NOT found." >&4;;
5862         esac;;
5863 esac'
5864
5865 : see if sqrtl exists
5866 set sqrtl d_sqrtl
5867 eval $inlibc
5868
5869 case "$ccflags" in
5870 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
5871 esac
5872
5873 case "$uselongdouble" in
5874 $define|true|[yY]*)     dflt='y';;
5875 *) dflt='n';;
5876 esac
5877 cat <<EOM
5878
5879 Perl can be built to take advantage of long doubles which
5880 (if available) may give more accuracy and range for floating point numbers.
5881
5882 If this doesn't make any sense to you, just accept the default '$dflt'.
5883 EOM
5884 rp='Try to use long doubles if available?'
5885 . ./myread
5886 case "$ans" in
5887 y|Y)    val="$define"   ;;
5888 *)      val="$undef"    ;;
5889 esac
5890 set uselongdouble
5891 eval $setvar
5892
5893 case "$uselongdouble" in
5894 true|[yY]*) uselongdouble="$define" ;;
5895 esac
5896
5897 case "$uselongdouble" in
5898 $define)
5899 : Look for a hint-file generated 'call-back-unit'.  If the
5900 : user has specified that long doubles should be used,
5901 : we may need to set or change some other defaults.
5902         if $test -f uselongdouble.cbu; then
5903                 echo "Your platform has some specific hints for long doubles, using them..."
5904                 . ./uselongdouble.cbu
5905         else
5906                 $cat <<EOM
5907 (Your platform doesn't have any specific hints for long doubles.)
5908 EOM
5909         fi
5910         ;;
5911 esac
5912
5913 case "$uselongdouble:$d_sqrtl" in
5914 $define:$undef)
5915                 $cat <<EOM >&4
5916
5917 *** You requested the use of long doubles but you do not seem to have
5918 *** the mathematic functions for long doubles.  I'm disabling the use
5919 *** of long doubles.
5920
5921 EOM
5922         uselongdouble=$undef
5923         ;;
5924 esac
5925
5926 : check for length of double
5927 echo " "
5928 case "$doublesize" in
5929 '')
5930         echo "Checking to see how big your double precision numbers are..." >&4
5931         $cat >try.c <<'EOCP'
5932 #include <stdio.h>
5933 int main()
5934 {
5935     printf("%d\n", (int)sizeof(double));
5936     exit(0);
5937 }
5938 EOCP
5939         set try
5940         if eval $compile_ok; then
5941                 doublesize=`$run ./try`
5942                 echo "Your double is $doublesize bytes long."
5943         else
5944                 dflt='8'
5945                 echo "(I can't seem to compile the test program.  Guessing...)"
5946                 rp="What is the size of a double precision number (in bytes)?"
5947                 . ./myread
5948                 doublesize="$ans"
5949         fi
5950         ;;
5951 esac
5952 $rm -f try.c try
5953
5954 : check for long doubles
5955 echo " "
5956 echo "Checking to see if you have long double..." >&4
5957 echo 'int main() { long double x = 7.0; }' > try.c
5958 set try
5959 if eval $compile; then
5960         val="$define"
5961         echo "You have long double."
5962 else
5963         val="$undef"
5964         echo "You do not have long double."
5965 fi
5966 $rm try.*
5967 set d_longdbl
5968 eval $setvar
5969
5970 : check for length of long double
5971 case "${d_longdbl}${longdblsize}" in
5972 $define)
5973         echo " "
5974         echo "Checking to see how big your long doubles are..." >&4
5975         $cat >try.c <<'EOCP'
5976 #include <stdio.h>
5977 int main()
5978 {
5979         printf("%d\n", sizeof(long double));
5980 }
5981 EOCP
5982         set try
5983         set try
5984         if eval $compile; then
5985                 longdblsize=`$run ./try`
5986                 echo "Your long doubles are $longdblsize bytes long."
5987         else
5988                 dflt='8'
5989                 echo " "
5990                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
5991                 rp="What is the size of a long double (in bytes)?"
5992                 . ./myread
5993                 longdblsize="$ans"
5994         fi
5995         if $test "X$doublesize" = "X$longdblsize"; then
5996                 echo "(That isn't any different from an ordinary double.)"
5997         fi      
5998         ;;
5999 esac
6000 $rm -f try.* try
6001
6002 case "$useperlio" in
6003 $define|true|[yY]*|'')  dflt='y';;
6004 *) dflt='n';;
6005 esac
6006 cat <<EOM
6007
6008 Previous version of $package used the standard IO mechanisms as
6009 defined in <stdio.h>.  Versions 5.003_02 and later of $package allow
6010 alternate IO mechanisms via the PerlIO abstraction layer, but the
6011 stdio mechanism is still available if needed.  The abstraction layer
6012 can use AT&T's sfio (if you already have sfio installed) or regular stdio.
6013 Using PerlIO with sfio may cause problems with some extension modules.
6014
6015 If this doesn't make any sense to you, just accept the default '$dflt'.
6016 EOM
6017 rp='Use the PerlIO abstraction layer?'
6018 . ./myread
6019 case "$ans" in
6020 y|Y) 
6021         val="$define"
6022         ;;
6023 *)      
6024         echo "Ok, doing things the stdio way."
6025         val="$undef"
6026         ;;
6027 esac
6028 set useperlio
6029 eval $setvar 
6030
6031 case "$usesocks" in
6032 $define|true|[yY]*)
6033         case "$useperlio" in
6034         $define|true|[yY]*) ;;
6035         *)      cat >&4 <<EOM
6036
6037 You are using the SOCKS proxy protocol library which means that you
6038 should also use the PerlIO layer.  You may be headed for trouble.
6039
6040 EOM
6041                 ;;
6042         esac
6043         ;;
6044 esac
6045
6046         
6047 : determine the architecture name
6048 echo " "
6049 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
6050         tarch=`arch`"-$osname"
6051 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
6052         if uname -m > tmparch 2>&1 ; then
6053                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
6054                         -e 's/$/'"-$osname/" tmparch`
6055         else
6056                 tarch="$osname"
6057         fi
6058         $rm -f tmparch
6059 else
6060         tarch="$osname"
6061 fi
6062 case "$myarchname" in
6063 ''|"$tarch") ;;
6064 *)
6065         echo "(Your architecture name used to be $myarchname.)"
6066         archname=''
6067         ;;
6068 esac
6069 case "$targetarch" in
6070 '') ;;
6071 *)  archname=`echo $targetarch|sed 's,^[^-]*-,,'` ;;
6072 esac
6073 myarchname="$tarch"
6074 case "$archname" in
6075 '') dflt="$tarch";;
6076 *) dflt="$archname";;
6077 esac
6078 rp='What is your architecture name'
6079 . ./myread
6080 archname="$ans"
6081 case "$usethreads" in
6082 $define)
6083         echo "Threads selected." >&4
6084         case "$archname" in
6085         *-thread*) echo "...and architecture name already has -thread." >&4
6086                 ;;
6087         *)      archname="$archname-thread"
6088                 echo "...setting architecture name to $archname." >&4
6089                 ;;
6090         esac
6091         ;;
6092 esac
6093 case "$usemultiplicity" in
6094 $define)
6095         echo "Multiplicity selected." >&4
6096         case "$archname" in
6097         *-multi*) echo "...and architecture name already has -multi." >&4
6098                 ;;
6099         *)      archname="$archname-multi"
6100                 echo "...setting architecture name to $archname." >&4
6101                 ;;
6102         esac
6103         ;;
6104 esac
6105 case "$use64bitint$use64bitall" in
6106 *"$define"*)
6107         case "$archname64" in
6108         '')
6109                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
6110                 ;;
6111         *)
6112                 case "$use64bitint" in
6113                 "$define") echo "64 bit integers selected." >&4 ;;
6114                 esac
6115                 case "$use64bitall" in
6116                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
6117                 esac
6118                 case "$archname" in
6119                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
6120                         ;;
6121                 *)      archname="$archname-$archname64"
6122                         echo "...setting architecture name to $archname." >&4
6123                         ;;
6124                 esac
6125                 ;;
6126         esac
6127 esac
6128 case "$uselongdouble" in
6129 $define)
6130         echo "Long doubles selected." >&4
6131         case "$longdblsize" in
6132         $doublesize)
6133                 "...but long doubles are equal to doubles, not changing architecture name." >&4
6134                 ;;
6135         *)
6136                 case "$archname" in
6137                 *-ld*) echo "...and architecture name already has -ld." >&4
6138                         ;;
6139                 *)      archname="$archname-ld"
6140                         echo "...setting architecture name to $archname." >&4
6141                         ;;
6142                 esac
6143                 ;;
6144         esac
6145         ;;
6146 esac
6147 case "$useperlio" in
6148 $define)
6149         echo "Perlio selected." >&4
6150         ;;
6151 *)
6152         echo "Perlio not selected, using stdio." >&4
6153         case "$archname" in
6154         *-stdio*) echo "...and architecture name already has -stdio." >&4
6155                 ;;
6156         *)      archname="$archname-stdio"
6157                 echo "...setting architecture name to $archname." >&4
6158                 ;;
6159         esac
6160         ;;
6161 esac
6162
6163 : determine root of directory hierarchy where package will be installed.
6164 case "$prefix" in
6165 '')
6166         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
6167         ;;
6168 *)
6169         dflt="$prefix"
6170         ;;
6171 esac
6172 $cat <<EOM
6173
6174 By default, $package will be installed in $dflt/bin, manual pages
6175 under $dflt/man, etc..., i.e. with $dflt as prefix for all
6176 installation directories. Typically this is something like /usr/local.
6177 If you wish to have binaries under /usr/bin but other parts of the
6178 installation under /usr/local, that's ok: you will be prompted
6179 separately for each of the installation directories, the prefix being
6180 only used to set the defaults.
6181
6182 EOM
6183 fn=d~
6184 rp='Installation prefix to use?'
6185 . ./getfile
6186 oldprefix=''
6187 case "$prefix" in
6188 '') ;;
6189 *)
6190         case "$ans" in
6191         "$prefix") ;;
6192         *) oldprefix="$prefix";;
6193         esac
6194         ;;
6195 esac
6196 prefix="$ans"
6197 prefixexp="$ansexp"
6198
6199 case "$afsroot" in
6200 '')     afsroot=/afs ;;
6201 *)      afsroot=$afsroot ;;
6202 esac
6203
6204 : is AFS running?
6205 echo " "
6206 case "$afs" in
6207 $define|true)   afs=true ;;
6208 $undef|false)   afs=false ;;
6209 *)      if test -d $afsroot; then
6210                 afs=true
6211         else
6212                 afs=false
6213         fi
6214         ;;
6215 esac
6216 if $afs; then
6217         echo "AFS may be running... I'll be extra cautious then..." >&4
6218 else
6219         echo "AFS does not seem to be running..." >&4
6220 fi
6221
6222 : determine installation prefix for where package is to be installed.
6223 if $afs; then 
6224 $cat <<EOM
6225
6226 Since you are running AFS, I need to distinguish the directory in which
6227 files will reside from the directory in which they are installed (and from
6228 which they are presumably copied to the former directory by occult means).
6229
6230 EOM
6231         case "$installprefix" in
6232         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
6233         *) dflt="$installprefix";;
6234         esac
6235 else
6236 $cat <<EOM
6237
6238 In some special cases, particularly when building $package for distribution,
6239 it is convenient to distinguish between the directory in which files should 
6240 be installed from the directory ($prefix) in which they 
6241 will eventually reside.  For most users, these two directories are the same.
6242
6243 EOM
6244         case "$installprefix" in
6245         '') dflt=$prefix ;;
6246         *) dflt=$installprefix;;
6247         esac
6248 fi
6249 fn=d~
6250 rp='What installation prefix should I use for installing files?'
6251 . ./getfile
6252 installprefix="$ans"
6253 installprefixexp="$ansexp"
6254
6255 : set the prefixit variable, to compute a suitable default value
6256 prefixit='case "$3" in
6257 ""|none)
6258         case "$oldprefix" in
6259         "") eval "$1=\"\$$2\"";;
6260         *)
6261                 case "$3" in
6262                 "") eval "$1=";;
6263                 none)
6264                         eval "tp=\"\$$2\"";
6265                         case "$tp" in
6266                         ""|" ") eval "$1=\"\$$2\"";;
6267                         *) eval "$1=";;
6268                         esac;;
6269                 esac;;
6270         esac;;
6271 *)
6272         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
6273         case "$tp" in
6274         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
6275         /*-$oldprefix/*|\~*-$oldprefix/*)
6276                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
6277         *) eval "$1=\"\$$2\"";;
6278         esac;;
6279 esac'
6280
6281
6282 : get the patchlevel
6283 echo " "
6284 echo "Getting the current patchlevel..." >&4
6285 if $test -r $rsrc/patchlevel.h;then
6286         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
6287         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
6288         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6289         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
6290         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
6291         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6292        perl_patchlevel=`grep ',"DEVEL[0-9][0-9]*"' $rsrc/patchlevel.h|sed 's/[^0-9]//g'`
6293 else
6294         revision=0
6295         patchlevel=0
6296         subversion=0
6297         api_revision=0
6298         api_version=0
6299         api_subversion=0
6300         perl_patchlevel=0
6301         $echo "(You do not have patchlevel.h.  Eek.)"
6302 fi
6303 if $test -r $rsrc/.patch ; then  
6304         if $test "`cat $rsrc/.patch`" -gt "$perl_patchlevel" ; then
6305                 perl_patchlevel=`cat $rsrc/.patch`
6306         fi
6307 fi
6308 case "$perl_patchlevel" in
6309 0)  ;;
6310 '') $echo "(You have $package version $patchlevel subversion $subversion.)" ;;
6311 *)  $echo "(You have $package version $patchlevel subversion $subversion patchlevel $perl_patchlevel.)" ;;
6312 esac
6313 case "$osname" in
6314 dos|vms)
6315         : XXX Should be a Configure test for double-dots in filenames.
6316         version=`echo $revision $patchlevel $subversion | \
6317                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6318         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6319                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6320         ;;
6321 *)
6322         version=`echo $revision $patchlevel $subversion | \
6323                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6324         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6325                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6326         ;;
6327 esac
6328 : Special case the 5.005_xx maintenance series, which used 5.005
6329 : without any subversion label as a subdirectory in $sitelib
6330 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
6331         api_versionstring='5.005'
6332 fi
6333
6334 : determine installation style
6335 : For now, try to deduce it from prefix unless it is already set.
6336 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
6337 case "$installstyle" in
6338 '')     case "$prefix" in
6339                 *perl*) dflt='lib';;
6340                 *) dflt='lib/perl5' ;;
6341         esac
6342         ;;
6343 *)      dflt="$installstyle" ;;
6344 esac
6345 : Probably not worth prompting for this since we prompt for all
6346 : the directories individually, and the prompt would be too long and
6347 : confusing anyway.
6348 installstyle=$dflt
6349
6350 : determine where private library files go
6351 : Usual default is /usr/local/lib/perl5/$version.
6352 : Also allow things like /opt/perl/lib/$version, since 
6353 : /opt/perl/lib/perl5... would be redundant.
6354 : The default "style" setting is made in installstyle.U
6355 case "$installstyle" in
6356 *lib/perl5*) set dflt privlib lib/$package/$version ;;
6357 *)       set dflt privlib lib/$version ;;
6358 esac
6359 eval $prefixit
6360 $cat <<EOM
6361
6362 There are some auxiliary files for $package that need to be put into a
6363 private library directory that is accessible by everyone.
6364
6365 EOM
6366 fn=d~+
6367 rp='Pathname where the private library files will reside?'
6368 . ./getfile
6369 privlib="$ans"
6370 privlibexp="$ansexp"
6371 : Change installation prefix, if necessary.
6372 if $test X"$prefix" != X"$installprefix"; then
6373         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
6374 else
6375         installprivlib="$privlibexp"
6376 fi
6377
6378 : set the prefixup variable, to restore leading tilda escape
6379 prefixup='case "$prefixexp" in
6380 "$prefix") ;;
6381 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
6382 esac'
6383
6384 : determine where public architecture dependent libraries go
6385 set archlib archlib
6386 eval $prefixit
6387 : privlib default is /usr/local/lib/$package/$version
6388 : archlib default is /usr/local/lib/$package/$version/$archname
6389 : privlib may have an optional trailing /share.
6390 tdflt=`echo $privlib | $sed 's,/share$,,'`
6391 tdflt=$tdflt/$archname
6392 case "$archlib" in
6393 '')     dflt=$tdflt
6394         ;;
6395 *)      dflt="$archlib"
6396     ;;
6397 esac
6398 $cat <<EOM
6399
6400 $spackage contains architecture-dependent library files.  If you are
6401 sharing libraries in a heterogeneous environment, you might store
6402 these files in a separate location.  Otherwise, you can just include
6403 them with the rest of the public library files.
6404
6405 EOM
6406 fn=d+~
6407 rp='Where do you want to put the public architecture-dependent libraries?'
6408 . ./getfile
6409 archlib="$ans"
6410 archlibexp="$ansexp"
6411 if $test X"$archlib" = X"$privlib"; then
6412         d_archlib="$undef"
6413 else
6414         d_archlib="$define"
6415 fi
6416 : Change installation prefix, if necessary.
6417 if $test X"$prefix" != X"$installprefix"; then
6418         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
6419 else
6420         installarchlib="$archlibexp"
6421 fi
6422
6423
6424 : Binary compatibility with 5.005 is not possible for builds
6425 : with advanced features
6426 case "$usethreads$usemultiplicity" in
6427 *define*)
6428         bincompat5005="$undef"
6429         d_bincompat5005="$undef"
6430         ;;
6431 *)      $cat <<EOM
6432
6433 This version of Perl can be compiled for binary compatibility with 5.005.
6434 If you decide to do so, you will be able to continue using most of the
6435 extensions that were compiled for Perl 5.005.
6436
6437 EOM
6438         case "$bincompat5005$d_bincompat5005" in
6439         *"$undef"*) dflt=n ;;
6440         *) dflt=y ;;
6441         esac
6442         rp='Binary compatibility with Perl 5.005?'
6443         . ./myread
6444         case "$ans" in
6445         y*) val="$define" ;;
6446         *)  val="$undef" ;;
6447         esac
6448         set d_bincompat5005
6449         eval $setvar
6450         case "$d_bincompat5005" in
6451         "$define")
6452                 bincompat5005="$define"
6453                 ;;
6454         *)      bincompat5005="$undef"
6455                 d_bincompat5005="$undef"
6456                 ;;
6457         esac
6458         ;;
6459 esac
6460
6461
6462 : see if setuid scripts can be secure
6463 $cat <<EOM
6464
6465 Some kernels have a bug that prevents setuid #! scripts from being
6466 secure.  Some sites have disabled setuid #! scripts because of this.
6467
6468 First let's decide if your kernel supports secure setuid #! scripts.
6469 (If setuid #! scripts would be secure but have been disabled anyway,
6470 don't say that they are secure if asked.)
6471
6472 EOM
6473
6474 val="$undef"
6475 if $test -d /dev/fd; then
6476         echo "#!$ls" >reflect
6477         chmod +x,u+s reflect
6478         ./reflect >flect 2>&1
6479         if $contains "/dev/fd" flect >/dev/null; then
6480                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
6481                 val="$define"
6482         else
6483                 $cat <<EOM
6484 If you are not sure if they are secure, I can check but I'll need a
6485 username and password different from the one you are using right now.
6486 If you don't have such a username or don't want me to test, simply
6487 enter 'none'.
6488
6489 EOM
6490                 rp='Other username to test security of setuid scripts with?'
6491                 dflt='none'
6492                 . ./myread
6493                 case "$ans" in
6494                 n|none)
6495                         case "$d_suidsafe" in
6496                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
6497                                 dflt=n;;
6498                         "$undef")
6499                                 echo "Well, the $hint value is *not* secure." >&4
6500                                 dflt=n;;
6501                         *)      echo "Well, the $hint value *is* secure." >&4
6502                                 dflt=y;;
6503                         esac
6504                         ;;
6505                 *)
6506                         $rm -f reflect flect
6507                         echo "#!$ls" >reflect
6508                         chmod +x,u+s reflect
6509                         echo >flect
6510                         chmod a+w flect
6511                         echo '"su" will (probably) prompt you for '"$ans's password."
6512                         su $ans -c './reflect >flect'
6513                         if $contains "/dev/fd" flect >/dev/null; then
6514                                 echo "Okay, it looks like setuid scripts are secure." >&4
6515                                 dflt=y
6516                         else
6517                                 echo "I don't think setuid scripts are secure." >&4
6518                                 dflt=n
6519                         fi
6520                         ;;
6521                 esac
6522                 rp='Does your kernel have *secure* setuid scripts?'
6523                 . ./myread
6524                 case "$ans" in
6525                 [yY]*)  val="$define";;
6526                 *)      val="$undef";;
6527                 esac
6528         fi
6529 else
6530         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
6531         echo "(That's for file descriptors, not floppy disks.)"
6532         val="$undef"
6533 fi
6534 set d_suidsafe
6535 eval $setvar
6536
6537 $rm -f reflect flect
6538
6539 : now see if they want to do setuid emulation
6540 echo " "
6541 val="$undef"
6542 case "$d_suidsafe" in
6543 "$define")
6544         val="$undef"
6545         echo "No need to emulate SUID scripts since they are secure here." >& 4
6546         ;;
6547 *)
6548         $cat <<EOM
6549 Some systems have disabled setuid scripts, especially systems where
6550 setuid scripts cannot be secure.  On systems where setuid scripts have
6551 been disabled, the setuid/setgid bits on scripts are currently
6552 useless.  It is possible for $package to detect those bits and emulate
6553 setuid/setgid in a secure fashion.  This emulation will only work if
6554 setuid scripts have been disabled in your kernel.
6555
6556 EOM
6557         case "$d_dosuid" in
6558         "$define") dflt=y ;;
6559         *) dflt=n ;;
6560         esac
6561         rp="Do you want to do setuid/setgid emulation?"
6562         . ./myread
6563         case "$ans" in
6564         [yY]*)  val="$define";;
6565         *)      val="$undef";;
6566         esac
6567         ;;
6568 esac
6569 set d_dosuid
6570 eval $setvar
6571
6572 : see if this is a malloc.h system
6573 set malloc.h i_malloc
6574 eval $inhdr
6575
6576 : see if stdlib is available
6577 set stdlib.h i_stdlib
6578 eval $inhdr
6579
6580 : determine which malloc to compile in
6581 echo " "
6582 case "$usemymalloc" in
6583 [yY]*|true|$define)     dflt='y' ;;
6584 [nN]*|false|$undef)     dflt='n' ;;
6585 *)      case "$ptrsize" in
6586         4) dflt='y' ;;
6587         *) dflt='n' ;;
6588         esac
6589         ;;
6590 esac
6591 rp="Do you wish to attempt to use the malloc that comes with $package?"
6592 . ./myread
6593 usemymalloc="$ans"
6594 case "$ans" in
6595 y*|true)
6596         usemymalloc='y'
6597         mallocsrc='malloc.c'
6598         mallocobj="malloc$_o"
6599         d_mymalloc="$define"
6600         case "$libs" in
6601         *-lmalloc*)
6602                 : Remove malloc from list of libraries to use
6603                 echo "Removing unneeded -lmalloc from library list" >&4
6604                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
6605                 shift
6606                 libs="$*"
6607                 echo "libs = $libs" >&4
6608                 ;;
6609         esac
6610         ;;
6611 *)
6612         usemymalloc='n'
6613         mallocsrc=''
6614         mallocobj=''
6615         d_mymalloc="$undef"
6616         ;;
6617 esac
6618
6619 : compute the return types of malloc and free
6620 echo " "
6621 $cat >malloc.c <<END
6622 #$i_malloc I_MALLOC
6623 #$i_stdlib I_STDLIB
6624 #include <stdio.h>
6625 #include <sys/types.h>
6626 #ifdef I_MALLOC
6627 #include <malloc.h>
6628 #endif
6629 #ifdef I_STDLIB
6630 #include <stdlib.h>
6631 #endif
6632 #ifdef TRY_MALLOC
6633 void *malloc();
6634 #endif
6635 #ifdef TRY_FREE
6636 void free();
6637 #endif
6638 END
6639 case "$malloctype" in
6640 '')
6641         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
6642                 malloctype='void *'
6643         else
6644                 malloctype='char *'
6645         fi
6646         ;;
6647 esac
6648 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6649
6650 case "$freetype" in
6651 '')
6652         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6653                 freetype='void'
6654         else
6655                 freetype='int'
6656         fi
6657         ;;
6658 esac
6659 echo "Your system uses $freetype free(), it would seem." >&4
6660 $rm -f malloc.[co]
6661 $cat <<EOM
6662
6663 After $package is installed, you may wish to install various
6664 add-on modules and utilities.  Typically, these add-ons will
6665 be installed under $prefix with the rest
6666 of this package.  However, you may wish to install such add-ons
6667 elsewhere under a different prefix.
6668
6669 If you do not wish to put everything under a single prefix, that's
6670 ok.  You will be prompted for the individual locations; this siteprefix
6671 is only used to suggest the defaults.
6672
6673 The default should be fine for most people.
6674
6675 EOM
6676 fn=d~+
6677 rp='Installation prefix to use for add-on modules and utilities?'
6678 : XXX Here might be another good place for an installstyle setting.
6679 case "$siteprefix" in
6680 '') dflt=$prefix ;;
6681 *)  dflt=$siteprefix ;;
6682 esac
6683 . ./getfile
6684 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6685 oldsiteprefix=''
6686 case "$siteprefix" in
6687 '') ;;
6688 *)      case "$ans" in
6689         "$prefix") ;;
6690         *) oldsiteprefix="$prefix";;
6691         esac
6692         ;;
6693 esac
6694 siteprefix="$ans"
6695 siteprefixexp="$ansexp"
6696
6697 : determine where site specific libraries go.
6698 : Usual default is /usr/local/lib/perl5/site_perl/$version
6699 : The default "style" setting is made in installstyle.U
6700 : XXX No longer works with Prefixit stuff.
6701 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6702 case "$sitelib" in
6703 '') case "$installstyle" in
6704         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
6705         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
6706         esac
6707         ;;
6708 *)      dflt="$sitelib"
6709         ;;
6710 esac
6711 $cat <<EOM
6712
6713 The installation process will create a directory for
6714 site-specific extensions and modules.  Most users find it convenient
6715 to place all site-specific files in this directory rather than in the
6716 main distribution directory.
6717
6718 EOM
6719 fn=d~+
6720 rp='Pathname for the site-specific library files?'
6721 . ./getfile
6722 sitelib="$ans"
6723 sitelibexp="$ansexp"
6724 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
6725 : Change installation prefix, if necessary.
6726 if $test X"$prefix" != X"$installprefix"; then
6727         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
6728 else
6729         installsitelib="$sitelibexp"
6730 fi
6731
6732 : determine where site specific architecture-dependent libraries go.
6733 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
6734 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6735 : sitelib may have an optional trailing /share.
6736 case "$sitearch" in
6737 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
6738         dflt="$dflt/$archname"
6739         ;;
6740 *)      dflt="$sitearch"
6741         ;;
6742 esac
6743 set sitearch sitearch none
6744 eval $prefixit
6745 $cat <<EOM
6746
6747 The installation process will also create a directory for
6748 architecture-dependent site-specific extensions and modules.
6749
6750 EOM
6751 fn=d~+
6752 rp='Pathname for the site-specific architecture-dependent library files?'
6753 . ./getfile
6754 sitearch="$ans"
6755 sitearchexp="$ansexp"
6756 : Change installation prefix, if necessary.
6757 if $test X"$prefix" != X"$installprefix"; then
6758         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6759 else
6760         installsitearch="$sitearchexp"
6761 fi
6762
6763 $cat <<EOM
6764
6765 The installation process will also create a directory for
6766 vendor-supplied add-ons.  Vendors who supply perl with their system
6767 may find it convenient to place all vendor-supplied files in this
6768 directory rather than in the main distribution directory.  This will
6769 ease upgrades between binary-compatible maintenance versions of perl.
6770
6771 Of course you may also use these directories in whatever way you see
6772 fit.  For example, you might use them to access modules shared over a
6773 company-wide network.
6774
6775 The default answer should be fine for most people.
6776 This causes further questions about vendor add-ons to be skipped
6777 and no vendor-specific directories will be configured for perl.
6778
6779 EOM
6780 rp='Do you want to configure vendor-specific add-on directories?'
6781 case "$usevendorprefix" in
6782 define|true|[yY]*) dflt=y ;;
6783 *)      : User may have set vendorprefix directly on Configure command line.
6784         case "$vendorprefix" in
6785         ''|' ') dflt=n ;;
6786         *)      dflt=y ;;
6787         esac
6788         ;;
6789 esac
6790 . ./myread
6791 case "$ans" in
6792 [yY]*)  fn=d~+
6793         rp='Installation prefix to use for vendor-supplied add-ons?'
6794         case "$vendorprefix" in
6795         '') dflt='' ;;
6796         *)  dflt=$vendorprefix ;;
6797         esac
6798         . ./getfile
6799         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6800         oldvendorprefix=''
6801         case "$vendorprefix" in
6802         '') ;;
6803         *)      case "$ans" in
6804                 "$prefix") ;;
6805                 *) oldvendorprefix="$prefix";;
6806                 esac
6807                 ;;
6808         esac
6809         usevendorprefix="$define"
6810         vendorprefix="$ans"
6811         vendorprefixexp="$ansexp"
6812         ;;
6813 *)      usevendorprefix="$undef"
6814         vendorprefix=''
6815         vendorprefixexp=''
6816         ;;
6817 esac
6818
6819 case "$vendorprefix" in
6820 '')     d_vendorlib="$undef"
6821         vendorlib=''
6822         vendorlibexp=''
6823         ;;
6824 *)      d_vendorlib="$define"
6825         : determine where vendor-supplied modules go.
6826         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6827         case "$vendorlib" in
6828         '')
6829                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6830                 case "$installstyle" in
6831                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6832                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6833                 esac
6834                 ;;
6835         *)      dflt="$vendorlib"
6836                 ;;
6837         esac
6838         fn=d~+
6839         rp='Pathname for the vendor-supplied library files?'
6840         . ./getfile
6841         vendorlib="$ans"
6842         vendorlibexp="$ansexp"
6843         ;;
6844 esac
6845 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6846 : Change installation prefix, if necessary.
6847 if $test X"$prefix" != X"$installprefix"; then
6848         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6849 else
6850         installvendorlib="$vendorlibexp"
6851 fi
6852
6853 case "$vendorprefix" in
6854 '')     d_vendorarch="$undef"
6855         vendorarch=''
6856         vendorarchexp=''
6857         ;;
6858 *)      d_vendorarch="$define"
6859         : determine where vendor-supplied architecture-dependent libraries go.
6860         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
6861         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6862         : vendorlib may have an optional trailing /share.
6863         case "$vendorarch" in
6864         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
6865                 dflt="$dflt/$archname"
6866                 ;;
6867         *)      dflt="$vendorarch" ;;
6868         esac
6869         fn=d~+
6870         rp='Pathname for vendor-supplied architecture-dependent files?'
6871         . ./getfile
6872         vendorarch="$ans"
6873         vendorarchexp="$ansexp"
6874         ;;
6875 esac
6876 : Change installation prefix, if necessary.
6877 if $test X"$prefix" != X"$installprefix"; then
6878         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6879 else
6880         installvendorarch="$vendorarchexp"
6881 fi
6882
6883 : Final catch-all directories to search
6884 $cat <<EOM
6885
6886 Lastly, you can have perl look in other directories for extensions and
6887 modules in addition to those already specified.
6888 These directories will be searched after 
6889         $sitearch 
6890         $sitelib 
6891 EOM
6892 test X"$vendorlib" != "X" && echo '     ' $vendorlib
6893 test X"$vendorarch" != "X" && echo '    ' $vendorarch
6894 echo ' '
6895 case "$otherlibdirs" in
6896 ''|' ') dflt='none' ;;
6897 *)      dflt="$otherlibdirs" ;;
6898 esac
6899 $cat <<EOM
6900 Enter a colon-separated set of extra paths to include in perl's @INC
6901 search path, or enter 'none' for no extra paths.
6902
6903 EOM
6904
6905 rp='Colon-separated list of additional directories for perl to search?'
6906 . ./myread
6907 case "$ans" in
6908 ' '|''|none)    otherlibdirs=' ' ;;     
6909 *)      otherlibdirs="$ans" ;;
6910 esac
6911 case "$otherlibdirs" in
6912 ' ') val=$undef ;;
6913 *)      val=$define ;;
6914 esac
6915 set d_perl_otherlibdirs
6916 eval $setvar
6917
6918 : Cruising for prototypes
6919 echo " "
6920 echo "Checking out function prototypes..." >&4
6921 $cat >prototype.c <<'EOCP'
6922 int main(int argc, char *argv[]) {
6923         exit(0);}
6924 EOCP
6925 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
6926         echo "Your C compiler appears to support function prototypes."
6927         val="$define"
6928 else
6929         echo "Your C compiler doesn't seem to understand function prototypes."
6930         val="$undef"
6931 fi
6932 set prototype
6933 eval $setvar
6934 $rm -f prototype*
6935
6936 case "$prototype" in
6937 "$define") ;;
6938 *)      ansi2knr='ansi2knr'
6939         echo " "
6940         cat <<EOM >&4
6941
6942 $me:  FATAL ERROR:
6943 This version of $package can only be compiled by a compiler that 
6944 understands function prototypes.  Unfortunately, your C compiler 
6945         $cc $ccflags
6946 doesn't seem to understand them.  Sorry about that.
6947
6948 If GNU cc is available for your system, perhaps you could try that instead.  
6949
6950 Eventually, we hope to support building Perl with pre-ANSI compilers.
6951 If you would like to help in that effort, please contact <perlbug@perl.org>.
6952
6953 Aborting Configure now.
6954 EOM
6955         exit 2
6956         ;;
6957 esac
6958
6959 : determine where public executables go
6960 echo " "
6961 set dflt bin bin
6962 eval $prefixit
6963 fn=d~
6964 rp='Pathname where the public executables will reside?'
6965 . ./getfile
6966 if $test "X$ansexp" != "X$binexp"; then
6967         installbin=''
6968 fi
6969 bin="$ans"
6970 binexp="$ansexp"
6971 : Change installation prefix, if necessary.
6972 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
6973 if $test X"$prefix" != X"$installprefix"; then
6974         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
6975 else
6976         installbin="$binexp"
6977 fi
6978
6979 : Find perl5.005 or later.
6980 echo "Looking for a previously installed perl5.005 or later... "
6981 case "$perl5" in
6982 '')     for tdir in `echo "$binexp$path_sep$PATH" | $sed "s/$path_sep/ /g"`; do
6983                 : Check if this perl is recent and can load a simple module
6984                 if $test -x $tdir/perl$exe_ext && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6985                         perl5=$tdir/perl
6986                         break;
6987                 elif $test -x $tdir/perl5$exe_ext && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6988                         perl5=$tdir/perl5
6989                         break;
6990                 fi
6991         done
6992         ;;
6993 *)      perl5="$perl5"
6994         ;;
6995 esac
6996 case "$perl5" in
6997 '')     echo "None found.  That's ok.";;
6998 *)      echo "Using $perl5." ;;
6999 esac
7000
7001 : Determine list of previous versions to include in @INC
7002 $cat > getverlist <<EOPL
7003 #!$perl5 -w
7004 use File::Basename;
7005 \$api_versionstring = "$api_versionstring";
7006 \$version = "$version";
7007 \$stem = "$sitelib_stem";
7008 \$archname = "$archname";
7009 EOPL
7010         $cat >> getverlist <<'EOPL'
7011 # Can't have leading @ because metaconfig interprets it as a command!
7012 ;@inc_version_list=();
7013 # XXX Redo to do opendir/readdir? 
7014 if (-d $stem) {
7015     chdir($stem);
7016     ;@candidates = glob("5.*");
7017 }
7018 else {
7019     ;@candidates = ();
7020 }
7021
7022 # XXX ToDo:  These comparisons must be reworked when two-digit
7023 # subversions come along, so that 5.7.10 compares as greater than
7024 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
7025 # widespread that we can use the built-in version vectors rather
7026 # than reinventing them here.  For 5.6.0, however, we must
7027 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
7028 foreach $d (@candidates) {
7029     if ($d lt $version) {
7030         if ($d ge $api_versionstring) {
7031             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
7032         }
7033         elsif ($d ge "5.005") {
7034             unshift(@inc_version_list, grep { -d } $d);
7035         }
7036     }
7037     else {
7038         # Skip newer version.  I.e. don't look in
7039         # 5.7.0 if we're installing 5.6.1.
7040     }
7041 }
7042
7043 if (@inc_version_list) {
7044     print join(' ', @inc_version_list);
7045 }
7046 else {
7047     # Blank space to preserve value for next Configure run.
7048     print " ";
7049 }
7050 EOPL
7051 chmod +x getverlist
7052 case "$inc_version_list" in
7053 '')     if test -x "$perl5$exe_ext"; then
7054                 dflt=`$perl5 getverlist`
7055         else
7056                 dflt='none'
7057         fi
7058         ;;
7059 $undef) dflt='none' ;;
7060 *)  eval dflt=\"$inc_version_list\" ;;
7061 esac
7062 case "$dflt" in
7063 ''|' ') dflt=none ;;
7064 esac
7065 case "$dflt" in
7066 5.005) case "$bincompat5005" in
7067        $define|true|[yY]*) ;;
7068        *) dflt=none ;;
7069        esac
7070        ;;
7071 esac
7072 $cat <<'EOM'
7073
7074 In order to ease the process of upgrading, this version of perl 
7075 can be configured to use modules built and installed with earlier 
7076 versions of perl that were installed under $prefix.  Specify here
7077 the list of earlier versions that this version of perl should check.
7078 If Configure detected no earlier versions of perl installed under
7079 $prefix, then the list will be empty.  Answer 'none' to tell perl
7080 to not search earlier versions.
7081
7082 The default should almost always be sensible, so if you're not sure,
7083 just accept the default.
7084 EOM
7085
7086 rp='List of earlier versions to include in @INC?'
7087 . ./myread
7088 case "$ans" in
7089 [Nn]one|''|' ') inc_version_list=' ' ;;
7090 *) inc_version_list="$ans" ;;
7091 esac
7092 case "$inc_version_list" in
7093 ''|' ') 
7094         inc_version_list_init='0';;
7095 *)      inc_version_list_init=`echo $inc_version_list |
7096                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
7097         ;;
7098 esac
7099 $rm -f getverlist
7100
7101 : determine whether to install perl also as /usr/bin/perl
7102
7103 echo " "
7104 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
7105         $cat <<EOM
7106 Many scripts expect perl to be installed as /usr/bin/perl.
7107 I can install the perl you are about to compile also as /usr/bin/perl
7108 (in addition to $installbin/perl).
7109 EOM
7110         case "$installusrbinperl" in
7111         "$undef"|[nN]*) dflt='n';;
7112         *)              dflt='y';;
7113         esac
7114         rp="Do you want to install perl as /usr/bin/perl?"
7115         . ./myread
7116         case "$ans" in
7117         [yY]*)  val="$define";;
7118         *)      val="$undef" ;;
7119         esac
7120 else
7121         val="$undef"
7122 fi
7123 set installusrbinperl
7124 eval $setvar
7125
7126 : see if dld is available
7127 set dld.h i_dld
7128 eval $inhdr
7129
7130 : see if dlopen exists
7131 xxx_runnm="$runnm"
7132 runnm=false
7133 set dlopen d_dlopen
7134 eval $inlibc
7135 runnm="$xxx_runnm"
7136
7137 : determine which dynamic loading, if any, to compile in
7138 echo " "
7139 dldir="ext/DynaLoader"
7140 case "$usedl" in
7141 $define|y|true)
7142         dflt='y'
7143         usedl="$define"
7144         ;;
7145 $undef|n|false)
7146         dflt='n'
7147         usedl="$undef"
7148         ;;
7149 *) 
7150         dflt='n'
7151         case "$d_dlopen" in
7152             $define) dflt='y' ;;
7153         esac
7154         case "$i_dld" in
7155             $define) dflt='y' ;;
7156         esac
7157         : Does a dl_xxx.xs file exist for this operating system
7158         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
7159         ;;
7160 esac
7161 rp="Do you wish to use dynamic loading?"
7162 . ./myread
7163 usedl="$ans"
7164 case "$ans" in
7165 y*) usedl="$define"
7166         case "$dlsrc" in
7167         '')
7168                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
7169                         dflt="$dldir/dl_${osname}.xs"
7170                 elif $test "$d_dlopen" = "$define" ; then
7171                         dflt="$dldir/dl_dlopen.xs"
7172                 elif $test "$i_dld" = "$define" ; then
7173                         dflt="$dldir/dl_dld.xs"
7174                 else
7175                         dflt=''
7176                 fi
7177                 ;;
7178         *)      dflt="$dldir/$dlsrc"
7179                 ;;
7180         esac
7181     echo "The following dynamic loading files are available:"
7182         : Can not go over to $dldir because getfile has path hard-coded in.
7183         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
7184         rp="Source file to use for dynamic loading"
7185         fn="fne"
7186         gfpth="$src"
7187         . ./getfile
7188         usedl="$define"
7189         : emulate basename
7190         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
7191
7192         $cat << EOM
7193
7194 Some systems may require passing special flags to $cc -c to
7195 compile modules that will be used to create a shared library.
7196 To use no flags, say "none".
7197
7198 EOM
7199     case "$cccdlflags" in
7200     '') case "$gccversion" in
7201                 '') case "$osname" in
7202                         hpux)   dflt='+z' ;;
7203                         next)   dflt='none' ;;
7204                         irix*)  dflt='-KPIC' ;;
7205                         svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
7206                         sunos)  dflt='-pic' ;;
7207                         *)      dflt='none' ;;
7208                     esac
7209                         ;;
7210                 *)  case "$osname" in
7211                         svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
7212                         *)      dflt='-fpic' ;;
7213                     esac ;;
7214             esac ;;
7215         ' ') dflt='none' ;;
7216     *)  dflt="$cccdlflags" ;;
7217     esac
7218     rp="Any special flags to pass to $cc -c to compile shared library modules?"
7219     . ./myread
7220     case "$ans" in
7221     none) cccdlflags=' ' ;;
7222     *) cccdlflags="$ans" ;;
7223     esac
7224
7225     cat << EOM
7226
7227 Some systems use ld to create libraries that can be dynamically loaded,
7228 while other systems (such as those using ELF) use $cc.
7229
7230 EOM
7231         case "$ld" in
7232         '')     $cat >try.c <<'EOM'
7233 /* Test for whether ELF binaries are produced */
7234 #include <fcntl.h>
7235 #include <stdlib.h>
7236 int main() {
7237         char b[4];
7238         int i = open("a.out",O_RDONLY);
7239         if(i == -1) 
7240                 exit(1); /* fail */
7241         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
7242                 exit(0); /* succeed (yes, it's ELF) */
7243         else
7244                 exit(1); /* fail */
7245 }
7246 EOM
7247                 if $cc $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then
7248                         cat <<EOM
7249 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
7250 EOM
7251                         dflt="$cc"
7252                 else
7253                         echo "I'll use ld to build dynamic libraries."
7254                         dflt='ld'
7255                 fi
7256                 rm -f try.c a.out
7257                 ;;
7258         *)      dflt="$ld"
7259                 ;;
7260         esac
7261
7262     rp="What command should be used to create dynamic libraries?"
7263     . ./myread
7264         ld="$ans"
7265
7266     cat << EOM
7267
7268 Some systems may require passing special flags to $ld to create a
7269 library that can be dynamically loaded.  If your ld flags include
7270 -L/other/path options to locate libraries outside your loader's normal
7271 search path, you may need to specify those -L options here as well.  To
7272 use no flags, say "none".
7273
7274 EOM
7275     case "$lddlflags" in
7276     '') case "$osname" in
7277                         beos) dflt='-nostart' ;;
7278                         hpux) dflt='-b';
7279                               case "$gccversion" in
7280                               '') dflt="$dflt +vnocompatwarnings" ;;
7281                               esac
7282                               ;;        
7283                         linux|irix*)    dflt='-shared' ;;
7284                         next)  dflt='none' ;;
7285                         solaris) dflt='-G' ;;
7286                         sunos) dflt='-assert nodefinitions' ;;
7287                         svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
7288                 *)     dflt='none' ;;
7289                         esac
7290                         ;;
7291     *) dflt="$lddlflags" ;;
7292     esac
7293
7294         : Try to guess additional flags to pick up local libraries.
7295         : Be careful not to append to a plain 'none'
7296         case "$dflt" in
7297         none) dflt='' ;;
7298         esac
7299         for thisflag in $ldflags; do
7300                 case "$thisflag" in
7301                 -L*|-R*)
7302                         case " $dflt " in
7303                         *" $thisflag "*) ;;
7304                         *) dflt="$dflt $thisflag" ;;
7305                         esac
7306                         ;;
7307                 esac
7308         done
7309
7310         case "$dflt" in
7311         ''|' ') dflt='none' ;;
7312         esac
7313
7314     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
7315     . ./myread
7316     case "$ans" in
7317     none) lddlflags=' ' ;;
7318     *) lddlflags="$ans" ;;
7319     esac
7320
7321         cat <<EOM
7322
7323 Some systems may require passing special flags to $cc to indicate that
7324 the resulting executable will use dynamic linking.  To use no flags,
7325 say "none".
7326
7327 EOM
7328     case "$ccdlflags" in
7329     '') case "$osname" in
7330                 hpux)   dflt='-Wl,-E' ;;
7331                 linux)  dflt='-rdynamic' ;;
7332                 next)   dflt='none' ;;
7333                 sunos)  dflt='none' ;;
7334                 *)      dflt='none' ;;
7335             esac ;;
7336     ' ')  dflt='none' ;;
7337     *)  dflt="$ccdlflags" ;;
7338     esac
7339     rp="Any special flags to pass to $cc to use dynamic linking?"
7340     . ./myread
7341     case "$ans" in
7342     none) ccdlflags=' ' ;;
7343     *) ccdlflags="$ans" ;;
7344     esac
7345     ;;
7346 *)  usedl="$undef"
7347         ld='ld'
7348     dlsrc='dl_none.xs'
7349     lddlflags=''
7350     ccdlflags=''
7351     ;;
7352 esac
7353
7354 also=''
7355 case "$usedl" in
7356 $undef)
7357         # No dynamic loading being used, so don't bother even to prompt.
7358         useshrplib='false'
7359         ;;
7360 *)      case "$useshrplib" in
7361         '')     case "$osname" in
7362                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
7363                         dflt=y
7364                         also='Building a shared libperl is required for dynamic loading to work on your system.'
7365                         ;;
7366                 next*)
7367                         case "$osvers" in
7368                         4*)     dflt=y
7369                                 also='Building a shared libperl is needed for MAB support.'
7370                                 ;;
7371                         *)      dflt=n
7372                                 ;;
7373                         esac
7374                         ;;
7375                 *)      dflt=n
7376                         ;;
7377                 esac
7378                 ;;
7379         $define|true|[Yy]*)
7380                 dflt=y
7381                 ;;
7382         *)      dflt=n
7383                 ;;
7384         esac
7385         $cat << EOM
7386
7387 The perl executable is normally obtained by linking perlmain.c with
7388 libperl${_a}, any static extensions (usually just DynaLoader), and
7389 any other libraries needed on this system (such as -lm, etc.).  Since
7390 your system supports dynamic loading, it is probably possible to build
7391 a shared libperl.$so.  If you will have more than one executable linked
7392 to libperl.$so, this will significantly reduce the size of each
7393 executable, but it may have a noticeable affect on performance.  The
7394 default is probably sensible for your system.
7395 $also
7396
7397 EOM
7398         rp="Build a shared libperl.$so (y/n)"
7399         . ./myread
7400         case "$ans" in
7401         true|$define|[Yy]*)
7402                 useshrplib='true'  ;;
7403         *)      useshrplib='false' ;;
7404         esac
7405         ;;
7406 esac
7407
7408 case "$useshrplib" in
7409 true)
7410         case "$libperl" in
7411         '')
7412                 # Figure out a good name for libperl.so.  Since it gets stored in
7413                 # a version-specific architecture-dependent library, the version
7414                 # number isn't really that important, except for making cc/ld happy.
7415                 #
7416                 # A name such as libperl.so.3.1
7417                 majmin="libperl.$so.$patchlevel.$subversion"
7418                 # A name such as libperl.so.301
7419                 majonly=`echo $patchlevel $subversion |
7420                         $awk '{printf "%d%02d", $1, $2}'`
7421                 majonly=libperl.$so.$majonly
7422                 # I'd prefer to keep the os-specific stuff here to a minimum, and
7423                 # rely on figuring it out from the naming of libc.
7424                 case "${osname}${osvers}" in
7425                 next4*)
7426                         dflt=libperl.5.$so
7427                         # XXX How handle the --version stuff for MAB?
7428                         ;;
7429                 linux*)  # ld won't link with a bare -lperl otherwise.
7430                         dflt=libperl.$so
7431                         ;;
7432                 cygwin*) # include version
7433                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
7434                         ;;
7435                 *)      # Try to guess based on whether libc has major.minor.
7436                         case "$libc" in
7437                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
7438                         *libc.$so.[0-9]*) dflt=$majonly ;;
7439                         *)      dflt=libperl.$so ;;
7440                         esac
7441                         ;;
7442                 esac
7443                 ;;
7444         *)      dflt=$libperl
7445                 ;;
7446         esac
7447         cat << EOM
7448
7449 I need to select a good name for the shared libperl.  If your system uses
7450 library names with major and minor numbers, then you might want something
7451 like $majmin.  Alternatively, if your system uses a single version
7452 number for shared libraries, then you might want to use $majonly.
7453 Or, your system might be quite happy with a simple libperl.$so.
7454
7455 Since the shared libperl will get installed into a version-specific
7456 architecture-dependent directory, the version number of the shared perl
7457 library probably isn't important, so the default should be o.k.
7458
7459 EOM
7460         rp='What name do you want to give to the shared libperl?'
7461         . ./myread
7462         libperl=$ans
7463         echo "Ok, I'll use $libperl"
7464         ;;
7465 *)
7466         libperl="libperl${_a}"
7467         ;;
7468 esac
7469
7470 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
7471 case "$shrpdir" in
7472 '') ;;
7473 *)      $cat >&4 <<EOM
7474 WARNING:  Use of the shrpdir variable for the installation location of
7475 the shared $libperl is not supported.  It was never documented and
7476 will not work in this version.  Let me (perlbug@perl.org)
7477 know of any problems this may cause.
7478
7479 EOM
7480         case "$shrpdir" in
7481         "$archlibexp/CORE")
7482                 $cat >&4 <<EOM
7483 But your current setting of $shrpdir is
7484 the default anyway, so it's harmless.
7485 EOM
7486                 ;;
7487         *)
7488                 $cat >&4 <<EOM
7489 Further, your current attempted setting of $shrpdir
7490 conflicts with the value of $archlibexp/CORE
7491 that installperl will use.
7492 EOM
7493                 ;;
7494         esac
7495         ;;
7496 esac
7497
7498 # How will the perl executable find the installed shared $libperl?
7499 # Add $xxx to ccdlflags.
7500 # If we can't figure out a command-line option, use $shrpenv to
7501 # set env LD_RUN_PATH.  The main perl makefile uses this.
7502 shrpdir=$archlibexp/CORE
7503 xxx=''
7504 tmp_shrpenv=''
7505 if "$useshrplib"; then
7506     case "$osname" in 
7507         aix)
7508                 # We'll set it in Makefile.SH...
7509                 ;;
7510         solaris|netbsd)
7511                 xxx="-R $shrpdir"
7512                 ;;
7513         freebsd)
7514                 xxx="-Wl,-R$shrpdir"
7515                 ;;
7516         linux|irix*|dec_osf)
7517                 xxx="-Wl,-rpath,$shrpdir"
7518                 ;;
7519         next)
7520                 # next doesn't like the default...
7521                 ;;
7522         beos)
7523                 # beos doesn't like the default, either.
7524                 ;;
7525         hpux*)
7526                 # hpux doesn't like the default, either.
7527                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
7528                 ;;
7529         *)
7530                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
7531                 ;;
7532         esac
7533         case "$xxx" in
7534         '') ;;
7535         *)      
7536                 # Only add $xxx if it isn't already in ccdlflags.
7537                 case " $ccdlflags " in
7538                 *" $xxx "*)     ;;
7539                 *)      ccdlflags="$ccdlflags $xxx"
7540                         cat <<EOM >&4
7541
7542 Adding $xxx to the flags
7543 passed to $ld so that the perl executable will find the 
7544 installed shared $libperl.
7545
7546 EOM
7547                         ;;
7548                 esac
7549                 ;;
7550         esac
7551 fi
7552 # Fix ccdlflags in AIX for building external extensions.
7553 # (For building Perl itself bare -bE:perl.exp is needed,
7554 #  Makefile.SH takes care of this.)
7555 case "$osname" in
7556 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
7557 esac
7558 # Respect a hint or command-line value.
7559 case "$shrpenv" in
7560 '') shrpenv="$tmp_shrpenv" ;;
7561 esac
7562 case "$ldlibpthname" in
7563 '')     ldlibpthname=LD_LIBRARY_PATH ;;
7564 none)   ldlibpthname='' ;;
7565 esac
7566
7567 : determine where manual pages are on this system
7568 echo " "
7569 case "$sysman" in
7570 '') 
7571         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
7572         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
7573         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
7574         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
7575         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
7576         sysman=`./loc . /usr/man/man1 $syspath`
7577         ;;
7578 esac
7579 if $test -d "$sysman"; then
7580         echo "System manual is in $sysman." >&4
7581 else
7582         echo "Could not find manual pages in source form." >&4
7583 fi
7584
7585 : determine where manual pages go
7586 set man1dir man1dir none
7587 eval $prefixit
7588 $cat <<EOM
7589
7590 $spackage has manual pages available in source form.
7591 EOM
7592 case "$nroff" in
7593 nroff)
7594         echo "However, you don't have nroff, so they're probably useless to you."
7595         case "$man1dir" in
7596         '') man1dir="none";;
7597         esac;;
7598 esac
7599 echo "If you don't want the manual sources installed, answer 'none'."
7600 case "$man1dir" in
7601 ' ') dflt=none
7602         ;;
7603 '')
7604         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
7605         lookpath="$lookpath $prefixexp/man/p_man/man1"
7606         lookpath="$lookpath $prefixexp/man/u_man/man1"
7607         lookpath="$lookpath $prefixexp/man/man.1"
7608         case "$sysman" in
7609         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
7610         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
7611         esac
7612         set dflt
7613         eval $prefixup
7614         ;;
7615 *)  dflt="$man1dir"
7616         ;;
7617 esac
7618 echo " "
7619 fn=dn+~
7620 rp="Where do the main $spackage manual pages (source) go?"
7621 . ./getfile
7622 if $test "X$man1direxp" != "X$ansexp"; then
7623         installman1dir=''
7624 fi
7625 man1dir="$ans"
7626 man1direxp="$ansexp"
7627 case "$man1dir" in
7628 '')     man1dir=' '
7629         installman1dir='';;
7630 esac
7631
7632 : Change installation prefix, if necessary.
7633 if $test X"$prefix" != X"$installprefix"; then
7634         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
7635 else
7636         installman1dir="$man1direxp"
7637 fi
7638
7639 : What suffix to use on installed man pages
7640
7641 case "$man1dir" in
7642 ' ')
7643         man1ext='0'
7644         ;;
7645 *)
7646         rp="What suffix should be used for the main $spackage man pages?"
7647         case "$man1ext" in
7648         '')     case "$man1dir" in
7649                 *1)  dflt=1 ;;
7650                 *1p) dflt=1p ;;
7651                 *1pm) dflt=1pm ;;
7652                 *l) dflt=l;;
7653                 *n) dflt=n;;
7654                 *o) dflt=o;;
7655                 *p) dflt=p;;
7656                 *C) dflt=C;;
7657                 *L) dflt=L;;
7658                 *L1) dflt=L1;;
7659                 *) dflt=1;;
7660                 esac
7661                 ;;
7662         *)      dflt="$man1ext";;
7663         esac
7664         . ./myread
7665         man1ext="$ans"
7666         ;;
7667 esac
7668
7669 : see if we can have long filenames
7670 echo " "
7671 first=123456789abcdef
7672 $rm -f $first
7673 if (echo hi >$first) 2>/dev/null; then
7674         if $test -f 123456789abcde; then
7675                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
7676                 val="$undef"
7677         else
7678                 echo 'You can have filenames longer than 14 characters.'>&4
7679                 val="$define"
7680         fi
7681 else
7682         $cat <<'EOM'
7683 You can't have filenames longer than 14 chars.
7684 You can't even think about them!
7685 EOM
7686         val="$undef"
7687 fi 
7688 set d_flexfnam
7689 eval $setvar
7690 $rm -rf 123456789abcde*
7691
7692 : determine where library module manual pages go
7693 set man3dir man3dir none
7694 eval $prefixit
7695 $cat <<EOM
7696
7697 $spackage has manual pages for many of the library modules.
7698 EOM
7699
7700 case "$nroff" in
7701 nroff)
7702         $cat <<'EOM'
7703 However, you don't have nroff, so they're probably useless to you.
7704 EOM
7705         case "$man3dir" in
7706         '') man3dir="none";;
7707         esac;;
7708 esac
7709
7710 case "$d_flexfnam" in
7711 undef)
7712         $cat <<'EOM'
7713 However, your system can't handle the long file names like File::Basename.3. 
7714 EOM
7715         case "$man3dir" in
7716         '') man3dir="none";;
7717         esac;;
7718 esac
7719
7720 echo "If you don't want the manual sources installed, answer 'none'."
7721 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7722 case "$man3dir" in
7723 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
7724         if $test -d "$privlib/man/man3"; then
7725                 cat <<EOM >&4
7726
7727 WARNING:  Previous versions of perl installed man3 pages into
7728 $privlib/man/man3.  This version will suggest a 
7729 new default of $dflt.  
7730 EOM
7731                 tdflt=$dflt
7732                 dflt='n'
7733                 rp='Do you wish to preserve the old behavior?(y/n)'
7734                 . ./myread
7735                 case "$ans" in
7736                 y*) dflt="$privlib/man/man3" ;;
7737                 *)  dflt=$tdflt ;;
7738                 esac
7739     fi
7740         ;;
7741 *)      dflt="$man3dir" ;;
7742 esac
7743 case "$dflt" in
7744 ' ') dflt=none ;;
7745 esac
7746 echo " "
7747 fn=dn+~
7748 rp="Where do the $package library man pages (source) go?"
7749 . ./getfile
7750 man3dir="$ans"
7751 man3direxp="$ansexp"
7752 case "$man3dir" in
7753 '')     man3dir=' '
7754         installman3dir='';;
7755 esac
7756
7757 : Change installation prefix, if necessary.
7758 if $test X"$prefix" != X"$installprefix"; then
7759         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
7760 else
7761         installman3dir="$man3direxp"
7762 fi
7763
7764 : What suffix to use on installed man pages
7765 case "$man3dir" in
7766 ' ')
7767         man3ext='0'
7768         ;;
7769 *)
7770         rp="What suffix should be used for the $package library man pages?"
7771         case "$man3ext" in
7772         '')     case "$man3dir" in
7773                 *3)  dflt=3 ;;
7774                 *3p) dflt=3p ;;
7775                 *3pm) dflt=3pm ;;
7776                 *l) dflt=l;;
7777                 *n) dflt=n;;
7778                 *o) dflt=o;;
7779                 *p) dflt=p;;
7780                 *C) dflt=C;;
7781                 *L) dflt=L;;
7782                 *L3) dflt=L3;;
7783                 *) dflt=3;;
7784                 esac
7785                 ;;
7786         *)      dflt="$man3ext";;
7787         esac
7788         . ./myread
7789         man3ext="$ans"
7790         ;;
7791 esac
7792
7793 : see if we have to deal with yellow pages, now NIS.
7794 if $test -d /usr/etc/yp || $test -d /etc/yp; then
7795         if $test -f /usr/etc/nibindd; then
7796                 echo " "
7797                 echo "I'm fairly confident you're on a NeXT."
7798                 echo " "
7799                 rp='Do you get the hosts file via NetInfo?'
7800                 dflt=y
7801                 case "$hostcat" in
7802                 nidump*) ;;
7803                 '') ;;
7804                 *) dflt=n;;
7805                 esac
7806                 . ./myread
7807                 case "$ans" in
7808                 y*) hostcat='nidump hosts .';;
7809                 *)      case "$hostcat" in
7810                         nidump*) hostcat='';;
7811                         esac
7812                         ;;
7813                 esac
7814         fi
7815         case "$hostcat" in
7816         nidump*) ;;
7817         *)
7818                 case "$hostcat" in
7819                 *ypcat*) dflt=y;;
7820                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7821                                 dflt=y
7822                         else
7823                                 dflt=n
7824                         fi;;
7825                 *) dflt=n;;
7826                 esac
7827                 echo " "
7828                 rp='Are you getting the hosts file via yellow pages?'
7829                 . ./myread
7830                 case "$ans" in
7831                 y*) hostcat='ypcat hosts';;
7832                 *) hostcat='cat /etc/hosts';;
7833                 esac
7834                 ;;
7835         esac
7836 fi
7837 case "$hostcat" in
7838 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
7839 esac
7840 case "$groupcat" in
7841 '') test -f /etc/group && groupcat='cat /etc/group';;
7842 esac
7843 case "$passcat" in
7844 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
7845 esac
7846
7847 : now get the host name
7848 echo " "
7849 echo "Figuring out host name..." >&4
7850 case "$myhostname" in
7851 '') cont=true
7852         echo 'Maybe "hostname" will work...'
7853         if tans=`sh -c hostname 2>&1` ; then
7854                 myhostname=$tans
7855                 phostname=hostname
7856                 cont=''
7857         fi
7858         ;;
7859 *) cont='';;
7860 esac
7861 if $test "$cont"; then
7862         if ./xenix; then
7863                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
7864                 if tans=`cat /etc/systemid 2>&1` ; then
7865                         myhostname=$tans
7866                         phostname='cat /etc/systemid'
7867                         echo "Whadyaknow.  Xenix always was a bit strange..."
7868                         cont=''
7869                 fi
7870         elif $test -r /etc/systemid; then
7871                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
7872         fi
7873 fi
7874 if $test "$cont"; then
7875         echo 'No, maybe "uuname -l" will work...'
7876         if tans=`sh -c 'uuname -l' 2>&1` ; then
7877                 myhostname=$tans
7878                 phostname='uuname -l'
7879         else
7880                 echo 'Strange.  Maybe "uname -n" will work...'
7881                 if tans=`sh -c 'uname -n' 2>&1` ; then
7882                         myhostname=$tans
7883                         phostname='uname -n'
7884                 else
7885                         echo 'Oh well, maybe I can mine it out of whoami.h...'
7886                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
7887                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
7888                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
7889                         else
7890                                 case "$myhostname" in
7891                                 '') echo "Does this machine have an identity crisis or something?"
7892                                         phostname='';;
7893                                 *)
7894                                         echo "Well, you said $myhostname before..."
7895                                         phostname='echo $myhostname';;
7896                                 esac
7897                         fi
7898                 fi
7899         fi
7900 fi
7901 : you do not want to know about this
7902 set $myhostname
7903 myhostname=$1
7904
7905 : verify guess
7906 if $test "$myhostname" ; then
7907         dflt=y
7908         rp='Your host name appears to be "'$myhostname'".'" Right?"
7909         . ./myread
7910         case "$ans" in
7911         y*) ;;
7912         *) myhostname='';;
7913         esac
7914 fi
7915
7916 : bad guess or no guess
7917 while $test "X$myhostname" = X ; do
7918         dflt=''
7919         rp="Please type the (one word) name of your host:"
7920         . ./myread
7921         myhostname="$ans"
7922 done
7923
7924 : translate upper to lower if necessary
7925 case "$myhostname" in
7926 *[A-Z]*)
7927         echo "(Normalizing case in your host name)"
7928         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
7929         ;;
7930 esac
7931
7932 case "$myhostname" in
7933 *.*)
7934         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
7935         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
7936         echo "(Trimming domain name from host name--host name is now $myhostname)"
7937         ;;
7938 *) case "$mydomain" in
7939         '')
7940                 {
7941                         test "X$hostcat" = "Xypcat hosts" &&
7942                         ypmatch "$myhostname" hosts 2>/dev/null |\
7943                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
7944                         $test -s hosts
7945                 } || {
7946                         test "X$hostcat" != "X" &&
7947                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
7948                                         /[       ]$myhostname[  . ]/p" > hosts
7949                 }
7950                 tmp_re="[       . ]"
7951                 if $test -f hosts; then
7952                         $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
7953                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
7954                         dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
7955                                 hosts | $sort | $uniq | \
7956                                 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
7957                         case `$echo X$dflt` in
7958                         X*\ *)  echo "(Several hosts in the database matched hostname)"
7959                                 dflt=.
7960                                 ;;
7961                         X.) echo "(You do not have fully-qualified names in the hosts database)"
7962                                 ;;
7963                         esac
7964                 else
7965                         echo "(I cannot locate a hosts database anywhere)"
7966                         dflt=.
7967                 fi
7968                 case "$dflt" in
7969                 .)
7970                         tans=`./loc resolv.conf X /etc /usr/etc`
7971                         if $test -f "$tans"; then
7972                                 echo "(Attempting domain name extraction from $tans)"
7973                                 dflt=.`$sed -n -e 's/   / /g' \
7974                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
7975                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7976                                 case "$dflt" in
7977                                 .) dflt=.`$sed -n -e 's/        / /g' \
7978                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
7979                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7980                                         ;;
7981                                 esac
7982                         fi
7983                         ;;
7984                 esac
7985                 case "$dflt" in
7986                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
7987                         dflt=.`sh -c domainname 2>/dev/null`
7988                         case "$dflt" in
7989                         '') dflt='.';;
7990                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
7991                         esac
7992                         ;;
7993                 esac
7994                 case "$dflt$osname" in
7995                 .os390) echo "(Attempting domain name extraction from //'SYS1.TCPPARMS(TCPDATA)')"
7996                         dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "//'SYS1.TCPPARMS(TCPDATA)'" 2>/dev/null`
7997                         ;;
7998                 esac
7999                 case "$dflt" in
8000                 .) echo "(Lost all hope -- silly guess then)"
8001                         dflt='.uucp'
8002                         ;;
8003                 esac
8004                 $rm -f hosts
8005                 ;;
8006         *) dflt="$mydomain";;
8007         esac;;
8008 esac
8009 echo " "
8010 rp="What is your domain name?"
8011 . ./myread
8012 tans="$ans"
8013 case "$ans" in
8014 '') ;;
8015 .*) ;;
8016 *) tans=".$tans";;
8017 esac
8018 mydomain="$tans"
8019
8020 : translate upper to lower if necessary
8021 case "$mydomain" in
8022 *[A-Z]*)
8023         echo "(Normalizing case in your domain name)"
8024         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
8025         ;;
8026 esac
8027
8028 : a little sanity check here
8029 case "$phostname" in
8030 '') ;;
8031 *)
8032         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
8033         $myhostname$mydomain|$myhostname) ;;
8034         *)
8035                 case "$phostname" in
8036                 sed*)
8037                         echo "(That doesn't agree with your whoami.h file, by the way.)"
8038                         ;;
8039                 *)
8040                         echo "(That doesn't agree with your $phostname command, by the way.)"
8041                         ;;
8042                 esac
8043         ;;
8044         esac
8045         ;;
8046 esac
8047
8048 $cat <<EOM
8049
8050 I need to get your e-mail address in Internet format if possible, i.e.
8051 something like user@host.domain. Please answer accurately since I have
8052 no easy means to double check it. The default value provided below
8053 is most probably close to reality but may not be valid from outside
8054 your organization...
8055
8056 EOM
8057 cont=x
8058 while test "$cont"; do
8059         case "$cf_email" in
8060         '') dflt="$cf_by@$myhostname$mydomain";;
8061         *) dflt="$cf_email";;
8062         esac
8063         rp='What is your e-mail address?'
8064         . ./myread
8065         cf_email="$ans"
8066         case "$cf_email" in
8067         *@*.*) cont='' ;;
8068         *)
8069                 rp='Address does not look like an Internet one.  Use it anyway?'
8070                 case "$fastread" in
8071                 yes) dflt=y ;;
8072                 *) dflt=n ;;
8073                 esac
8074                 . ./myread
8075                 case "$ans" in
8076                 y*) cont='' ;;
8077                 *) echo " " ;;
8078                 esac
8079                 ;;
8080         esac
8081 done
8082
8083 $cat <<EOM
8084
8085 If you or somebody else will be maintaining perl at your site, please
8086 fill in the correct e-mail address here so that they may be contacted
8087 if necessary. Currently, the "perlbug" program included with perl
8088 will send mail to this address in addition to perlbug@perl.org. You may
8089 enter "none" for no administrator.
8090
8091 EOM
8092 case "$perladmin" in
8093 '') dflt="$cf_email";;
8094 *) dflt="$perladmin";;
8095 esac
8096 rp='Perl administrator e-mail address'
8097 . ./myread
8098 perladmin="$ans"
8099
8100 : determine whether to only install version-specific parts.
8101 echo " "
8102 $cat <<EOM
8103 Do you want to install only the version-specific parts of the perl
8104 distribution?  Usually you do *not* want to do this.
8105 EOM
8106 case "$versiononly" in
8107 "$define"|[Yy]*|true) dflt='y' ;;
8108 *) dflt='n';
8109 esac
8110 rp="Do you want to install only the version-specific parts of perl?"
8111 . ./myread
8112 case "$ans" in
8113 [yY]*)  val="$define";;
8114 *)      val="$undef" ;;
8115 esac
8116 set versiononly
8117 eval $setvar
8118
8119 : figure out how to guarantee perl startup
8120 case "$startperl" in
8121 '')
8122         case "$sharpbang" in
8123         *!)
8124                 $cat <<EOH
8125
8126 I can use the #! construct to start perl on your system. This will
8127 make startup of perl scripts faster, but may cause problems if you
8128 want to share those scripts and perl is not in a standard place
8129 ($binexp/perl) on all your platforms. The alternative is to force
8130 a shell by starting the script with a single ':' character.
8131
8132 EOH
8133                 case "$versiononly" in
8134                 "$define")      dflt="$binexp/perl$version";;  
8135                 *)              dflt="$binexp/perl";;
8136                 esac
8137                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
8138                 . ./myread
8139                 case "$ans" in
8140                 none)   startperl=": # use perl";;
8141                 *)      startperl="#!$ans"
8142                         if $test 30 -lt `echo "$ans" | wc -c`; then
8143                                 $cat >&4 <<EOM
8144
8145 WARNING:  Some systems limit the #! command to 32 characters.
8146 If you experience difficulty running Perl scripts with #!, try
8147 installing Perl in a directory with a shorter pathname.
8148
8149 EOM
8150                         fi ;;
8151                 esac
8152                 ;;
8153         *) startperl=": # use perl"
8154                 ;;
8155         esac
8156         ;;
8157 esac
8158 echo "I'll use $startperl to start perl scripts."
8159
8160 : figure best path for perl in scripts
8161 case "$perlpath" in
8162 '')
8163         perlpath="$binexp/perl"
8164         case "$startperl" in
8165         *!*) ;;
8166         *)
8167                 $cat <<EOH
8168
8169 I will use the "eval 'exec'" idiom to start Perl on your system.
8170 I can use the full path of your Perl binary for this purpose, but
8171 doing so may cause problems if you want to share those scripts and
8172 Perl is not always in a standard place ($binexp/perl).
8173
8174 EOH
8175                 dflt="$binexp/perl"
8176                 rp="What path shall I use in \"eval 'exec'\"?"
8177                 . ./myread
8178                 perlpath="$ans"
8179                 ;;
8180         esac
8181         ;;
8182 esac
8183 case "$startperl" in
8184 *!*)    ;;
8185 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
8186 esac
8187
8188 : determine where public executable scripts go
8189 set scriptdir scriptdir
8190 eval $prefixit
8191 case "$scriptdir" in
8192 '')
8193         dflt="$bin"
8194         : guess some guesses
8195         $test -d /usr/share/scripts && dflt=/usr/share/scripts
8196         $test -d /usr/share/bin     && dflt=/usr/share/bin
8197         $test -d /usr/local/script  && dflt=/usr/local/script
8198         $test -d /usr/local/scripts && dflt=/usr/local/scripts
8199         $test -d $prefixexp/script  && dflt=$prefixexp/script
8200         set dflt
8201         eval $prefixup
8202         ;;
8203 *)  dflt="$scriptdir"
8204         ;;
8205 esac
8206 $cat <<EOM
8207  
8208 Some installations have a separate directory just for executable scripts so
8209 that they can mount it across multiple architectures but keep the scripts in
8210 one spot.  You might, for example, have a subdirectory of /usr/share for this.
8211 Or you might just lump your scripts in with all your other executables.
8212  
8213 EOM
8214 fn=d~
8215 rp='Where do you keep publicly executable scripts?'
8216 . ./getfile
8217 if $test "X$ansexp" != "X$scriptdirexp"; then
8218         installscript=''
8219 fi
8220 scriptdir="$ans"
8221 scriptdirexp="$ansexp"
8222 : Change installation prefix, if necessary.
8223 if $test X"$prefix" != X"$installprefix"; then
8224         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
8225 else
8226         installscript="$scriptdirexp"
8227 fi
8228
8229 : determine where add-on public executables go
8230 case "$sitebin" in
8231 '')     dflt=$siteprefix/bin ;;
8232 *)      dflt=$sitebin ;;
8233 esac
8234 fn=d~
8235 rp='Pathname where the add-on public executables should be installed?'
8236 . ./getfile
8237 sitebin="$ans"
8238 sitebinexp="$ansexp"
8239 : Change installation prefix, if necessary.
8240 if $test X"$prefix" != X"$installprefix"; then
8241         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
8242 else
8243         installsitebin="$sitebinexp"
8244 fi
8245
8246 case "$vendorprefix" in
8247 '')     d_vendorbin="$undef"
8248         vendorbin=''
8249         vendorbinexp=''
8250         ;;
8251 *)      d_vendorbin="$define"
8252         : determine where vendor-supplied executables go.
8253         case "$vendorbin" in
8254         '') dflt=$vendorprefix/bin ;;
8255         *)      dflt="$vendorbin" ;;
8256         esac
8257         fn=d~+
8258         rp='Pathname for the vendor-supplied executables directory?'
8259         . ./getfile
8260         vendorbin="$ans"
8261         vendorbinexp="$ansexp"
8262         ;;
8263 esac
8264 : Change installation prefix, if necessary.
8265 if $test X"$prefix" != X"$installprefix"; then
8266         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
8267 else
8268         installvendorbin="$vendorbinexp"
8269 fi
8270
8271 : see if qgcvt exists
8272 set qgcvt d_qgcvt
8273 eval $inlibc
8274
8275 echo " "
8276
8277 if $test X"$d_longdbl" = X"$define"; then
8278
8279 echo "Checking how to print long doubles..." >&4
8280
8281 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
8282         $cat >try.c <<'EOCP'
8283 #include <sys/types.h>
8284 #include <stdio.h>
8285 int main() {
8286   double d = 123.456;
8287   printf("%.3f\n", d);
8288 }
8289 EOCP
8290         set try
8291         if eval $compile; then
8292                 yyy=`$run ./try`
8293                 case "$yyy" in
8294                 123.456)
8295                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
8296                         sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
8297                         echo "We will use %f."
8298                         ;;
8299                 esac
8300         fi
8301 fi
8302
8303 if $test X"$sPRIfldbl" = X; then
8304         $cat >try.c <<'EOCP'
8305 #include <sys/types.h>
8306 #include <stdio.h>
8307 int main() {
8308   long double d = 123.456;
8309   printf("%.3Lf\n", d);
8310 }
8311 EOCP
8312         set try
8313         if eval $compile; then
8314                 yyy=`$run ./try`
8315                 case "$yyy" in
8316                 123.456)
8317                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
8318                         sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
8319                         echo "We will use %Lf."
8320                         ;;
8321                 esac
8322         fi
8323 fi
8324
8325 if $test X"$sPRIfldbl" = X; then
8326         $cat >try.c <<'EOCP'
8327 #include <sys/types.h>
8328 #include <stdio.h>
8329 int main() {
8330   long double d = 123.456;
8331   printf("%.3llf\n", d);
8332 }
8333 EOCP
8334         set try
8335         if eval $compile; then
8336                 yyy=`$run ./try`
8337                 case "$yyy" in
8338                 123.456)
8339                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
8340                         sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
8341                         echo "We will use %llf."
8342                         ;;
8343                 esac
8344         fi
8345 fi
8346
8347 if $test X"$sPRIfldbl" = X; then
8348         $cat >try.c <<'EOCP'
8349 #include <sys/types.h>
8350 #include <stdio.h>
8351 int main() {
8352   long double d = 123.456;
8353   printf("%.3lf\n", d);
8354 }
8355 EOCP
8356         set try
8357         if eval $compile; then
8358                 yyy=`$run ./try`
8359                 case "$yyy" in
8360                 123.456)
8361                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
8362                         sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
8363                         echo "We will use %lf."
8364                         ;;
8365                 esac
8366         fi
8367 fi
8368
8369 if $test X"$sPRIfldbl" = X; then
8370         echo "Cannot figure out how to print long doubles." >&4
8371 else
8372         sSCNfldbl=$sPRIfldbl    # expect consistency
8373 fi
8374
8375 $rm -f try try.*
8376
8377 fi # d_longdbl
8378
8379 case "$sPRIfldbl" in
8380 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
8381         d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; 
8382         d_SCNfldbl="$undef";
8383         ;;
8384 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
8385         d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; 
8386         d_SCNfldbl="$define";
8387         ;;
8388 esac
8389
8390 : Check how to convert floats to strings.
8391 echo " "
8392 echo "Checking for an efficient way to convert floats to strings."
8393 echo " " > try.c
8394 case "$uselongdouble" in
8395 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
8396 esac
8397 case "$d_longdbl" in
8398 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
8399 esac
8400 case "$d_PRIgldbl" in
8401 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
8402 esac
8403 $cat >>try.c <<EOP
8404 #ifdef TRY_gconvert
8405 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
8406 char *myname = "gconvert";
8407 #endif
8408 #ifdef TRY_gcvt
8409 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
8410 char *myname = "gcvt";
8411 #endif
8412 #ifdef TRY_qgcvt
8413 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
8414 char *myname = "qgcvt";
8415 #define DOUBLETYPE long double
8416 #endif
8417 #ifdef TRY_sprintf
8418 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
8419 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
8420 #else
8421 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
8422 #endif
8423 char *myname = "sprintf";
8424 #endif
8425
8426 #ifndef DOUBLETYPE
8427 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
8428 #define DOUBLETYPE long double
8429 #else
8430 #define DOUBLETYPE double
8431 #endif
8432 #endif
8433
8434 #include <stdio.h>
8435
8436 #define I_STDLIB $i_stdlib
8437 #ifdef I_STDLIB
8438 #include <stdlib.h>
8439 #endif
8440
8441 int
8442 checkit(expect, got)
8443 char *expect;
8444 char *got;
8445 {
8446     if (strcmp(expect, got)) {
8447                 printf("%s oddity:  Expected %s, got %s\n",
8448                         myname, expect, got);
8449                 exit(1);
8450         }
8451 }
8452
8453 int main()
8454
8455         char buf[64]; 
8456         buf[63] = '\0';
8457
8458         /* This must be 1st test on (which?) platform */
8459         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
8460         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
8461         checkit("0.1", buf);
8462
8463         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
8464         checkit("1", buf);
8465
8466         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
8467         checkit("1.1", buf);
8468
8469         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
8470         checkit("1.01", buf);
8471
8472         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
8473         checkit("1.001", buf);
8474
8475         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
8476         checkit("1.0001", buf);
8477
8478         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
8479         checkit("1.00001", buf);
8480
8481         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
8482         checkit("1.000001", buf);
8483
8484         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
8485         checkit("0", buf);
8486
8487         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
8488         checkit("-1", buf);
8489
8490         /* Some Linux gcvt's give 1.e+5 here. */
8491         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
8492         checkit("100000", buf);
8493         
8494         /* Some Linux gcvt's give -1.e+5 here. */
8495         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
8496         checkit("-100000", buf);
8497
8498         Gconvert((DOUBLETYPE)123.456, 8, 0, buf); 
8499         checkit("123.456", buf);
8500
8501         /* Testing of 1e+129 in bigintpm.t must not get extra '.' here. */
8502         Gconvert((DOUBLETYPE)1e30, 8, 0, buf);
8503         if (strlen(buf) > 5)
8504             checkit("1e+030", buf); /* for Microsoft */
8505         else
8506             checkit("1e+30", buf);
8507
8508         exit(0);
8509 }
8510 EOP
8511 case "$d_Gconvert" in
8512 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
8513 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
8514 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
8515 *) xxx_list='gconvert gcvt sprintf' ;;
8516 esac
8517
8518 case "$d_longdbl$uselongdouble$d_PRIgldbl" in
8519 "$define$define$define")
8520     # for long doubles prefer first qgcvt, then sprintf
8521     xxx_list="`echo $xxx_list|sed s/sprintf//`" 
8522     xxx_list="sprintf $xxx_list"
8523     case "$d_qgcvt" in
8524     "$define") xxx_list="qgcvt $xxx_list" ;;
8525     esac
8526     ;;
8527 esac
8528
8529 for xxx_convert in $xxx_list; do
8530         echo "Trying $xxx_convert..."
8531         $rm -f try try$_o
8532         set try -DTRY_$xxx_convert
8533         if eval $compile; then
8534                 echo "$xxx_convert() found." >&4
8535                 if $run ./try; then
8536                         echo "I'll use $xxx_convert to convert floats into a string." >&4
8537                         break;
8538                 else
8539                         echo "...But $xxx_convert didn't work as I expected."
8540                 fi
8541         else
8542                 echo "$xxx_convert NOT found." >&4
8543         fi
8544 done
8545         
8546 case "$xxx_convert" in
8547 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
8548 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
8549 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
8550 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
8551    "$define$define$define")
8552       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
8553    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
8554    esac
8555    ;;  
8556 esac
8557
8558 : see if _fwalk exists
8559 set fwalk d__fwalk
8560 eval $inlibc
8561
8562 : Initialize h_fcntl
8563 h_fcntl=false
8564
8565 : Initialize h_sysfile
8566 h_sysfile=false
8567
8568 : access call always available on UNIX
8569 set access d_access
8570 eval $inlibc
8571
8572 : locate the flags for 'access()'
8573 case "$d_access" in
8574 "$define")
8575         echo " "
8576         $cat >access.c <<'EOCP'
8577 #include <sys/types.h>
8578 #ifdef I_FCNTL
8579 #include <fcntl.h>
8580 #endif
8581 #ifdef I_SYS_FILE
8582 #include <sys/file.h>
8583 #endif
8584 #ifdef I_UNISTD
8585 #include <unistd.h>
8586 #endif
8587 int main() {
8588         exit(R_OK);
8589 }
8590 EOCP
8591         : check sys/file.h first, no particular reason here
8592         if $test `./findhdr sys/file.h` && \
8593                 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
8594                 h_sysfile=true;
8595                 echo "<sys/file.h> defines the *_OK access constants." >&4
8596         elif $test `./findhdr fcntl.h` && \
8597                 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
8598                 h_fcntl=true;
8599                 echo "<fcntl.h> defines the *_OK access constants." >&4
8600         elif $test `./findhdr unistd.h` && \
8601                 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
8602                 echo "<unistd.h> defines the *_OK access constants." >&4
8603         else
8604                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
8605         fi
8606         ;;
8607 esac
8608 $rm -f access*
8609
8610 : see if accessx exists
8611 set accessx d_accessx
8612 eval $inlibc
8613
8614 : see if alarm exists
8615 set alarm d_alarm
8616 eval $inlibc
8617
8618 : see if atolf exists
8619 set atolf d_atolf
8620 eval $inlibc
8621
8622 : see if atoll exists
8623 set atoll d_atoll
8624 eval $inlibc
8625
8626 : Look for GNU-cc style attribute checking
8627 echo " "
8628 echo "Checking whether your compiler can handle __attribute__ ..." >&4
8629 $cat >attrib.c <<'EOCP'
8630 #include <stdio.h>
8631 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
8632 EOCP
8633 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
8634         if $contains 'warning' attrib.out >/dev/null 2>&1; then
8635                 echo "Your C compiler doesn't fully support __attribute__."
8636                 val="$undef"
8637         else
8638                 echo "Your C compiler supports __attribute__."
8639                 val="$define"
8640         fi
8641 else
8642         echo "Your C compiler doesn't seem to understand __attribute__ at all."
8643         val="$undef"
8644 fi
8645 set d_attribut
8646 eval $setvar
8647 $rm -f attrib*
8648
8649 : see if bcmp exists
8650 set bcmp d_bcmp
8651 eval $inlibc
8652
8653 : see if bcopy exists
8654 set bcopy d_bcopy
8655 eval $inlibc
8656
8657 : see if this is a unistd.h system
8658 set unistd.h i_unistd
8659 eval $inhdr
8660
8661 : see if getpgrp exists
8662 set getpgrp d_getpgrp
8663 eval $inlibc
8664
8665 case "$d_getpgrp" in
8666 "$define")
8667         echo " "
8668         echo "Checking to see which flavor of getpgrp is in use..."
8669         $cat >try.c <<EOP
8670 #$i_unistd I_UNISTD
8671 #include <sys/types.h>
8672 #ifdef I_UNISTD
8673 #  include <unistd.h>
8674 #endif
8675 int main()
8676 {
8677         if (getuid() == 0) {
8678                 printf("(I see you are running Configure as super-user...)\n");
8679                 setuid(1);
8680         }
8681 #ifdef TRY_BSD_PGRP
8682         if (getpgrp(1) == 0)
8683                 exit(0);
8684 #else
8685         if (getpgrp() > 0)
8686                 exit(0);
8687 #endif
8688         exit(1);
8689 }
8690 EOP
8691         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8692                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
8693                 val="$define"
8694         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8695                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
8696                 val="$undef"
8697         else
8698                 echo "I can't seem to compile and run the test program."
8699                 if ./usg; then
8700                         xxx="a USG one, i.e. you use getpgrp()."
8701                 else
8702                         # SVR4 systems can appear rather BSD-ish.
8703                         case "$i_unistd" in
8704                         $undef)
8705                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
8706                                 val="$define"
8707                                 ;;
8708                         $define)
8709                                 xxx="probably a USG one, i.e. you use getpgrp()."
8710                                 val="$undef"
8711                                 ;;
8712                         esac
8713                 fi
8714                 echo "Assuming your getpgrp is $xxx" >&4
8715         fi
8716         ;;
8717 *) val="$undef";;
8718 esac
8719 set d_bsdgetpgrp
8720 eval $setvar
8721 $rm -f try try.*
8722
8723 : see if setpgrp exists
8724 set setpgrp d_setpgrp
8725 eval $inlibc
8726
8727 case "$d_setpgrp" in
8728 "$define")
8729         echo " "
8730         echo "Checking to see which flavor of setpgrp is in use..."
8731         $cat >try.c <<EOP
8732 #$i_unistd I_UNISTD
8733 #include <sys/types.h>
8734 #ifdef I_UNISTD
8735 #  include <unistd.h>
8736 #endif
8737 int main()
8738 {
8739         if (getuid() == 0) {
8740                 printf("(I see you are running Configure as super-user...)\n");
8741                 setuid(1);
8742         }
8743 #ifdef TRY_BSD_PGRP
8744         if (-1 == setpgrp(1, 1))
8745                 exit(0);
8746 #else
8747         if (setpgrp() != -1)
8748                 exit(0);
8749 #endif
8750         exit(1);
8751 }
8752 EOP
8753         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8754                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
8755                 val="$define"
8756         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8757                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
8758                 val="$undef"
8759         else
8760                 echo "(I can't seem to compile and run the test program.)"
8761                 if ./usg; then
8762                         xxx="a USG one, i.e. you use setpgrp()."
8763                 else
8764                         # SVR4 systems can appear rather BSD-ish.
8765                         case "$i_unistd" in
8766                         $undef)
8767                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
8768                                 val="$define"
8769                                 ;;
8770                         $define)
8771                                 xxx="probably a USG one, i.e. you use setpgrp()."
8772                                 val="$undef"
8773                                 ;;
8774                         esac
8775                 fi
8776                 echo "Assuming your setpgrp is $xxx" >&4
8777         fi
8778         ;;
8779 *) val="$undef";;
8780 esac
8781 set d_bsdsetpgrp
8782 eval $setvar
8783 $rm -f try try.*
8784 : see if bzero exists
8785 set bzero d_bzero
8786 eval $inlibc
8787
8788 : see if signal is declared as pointer to function returning int or void
8789 echo " "
8790 xxx=`./findhdr signal.h`
8791 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
8792 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
8793         echo "You have int (*signal())() instead of void." >&4
8794         val="$undef"
8795 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
8796         echo "You have void (*signal())()." >&4
8797         val="$define"
8798 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
8799         echo "You have int (*signal())() instead of void." >&4
8800         val="$undef"
8801 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
8802         echo "You have void (*signal())()." >&4
8803         val="$define"
8804 else
8805         case "$d_voidsig" in
8806         '')
8807         echo "I can't determine whether signal handler returns void or int..." >&4
8808                 dflt=void
8809                 rp="What type does your signal handler return?"
8810                 . ./myread
8811                 case "$ans" in
8812                 v*) val="$define";;
8813                 *) val="$undef";;
8814                 esac;;
8815         "$define")
8816                 echo "As you already told me, signal handler returns void." >&4
8817                 val="$define"
8818                 ;;
8819         *)      echo "As you already told me, signal handler returns int." >&4
8820                 val="$undef"
8821                 ;;
8822         esac
8823 fi
8824 set d_voidsig
8825 eval $setvar
8826 case "$d_voidsig" in
8827 "$define") signal_t="void";;
8828 *) signal_t="int";;
8829 esac
8830 $rm -f $$.tmp
8831
8832 : check for ability to cast large floats to 32-bit ints.
8833 echo " "
8834 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
8835 if $test "$intsize" -ge 4; then
8836         xxx=int
8837 else
8838         xxx=long
8839 fi
8840 $cat >try.c <<EOCP
8841 #include <stdio.h>
8842 #include <sys/types.h>
8843 #include <signal.h>
8844 $signal_t blech(s) int s; { exit(3); }
8845 int main()
8846 {
8847         $xxx i32;
8848         double f, g;
8849         int result = 0;
8850         char str[16];
8851         signal(SIGFPE, blech);
8852
8853         /* Don't let compiler optimize the test away.  Store the number 
8854            in a writable string for gcc to pass to sscanf under HP/UX.
8855         */
8856         sprintf(str, "2147483647");
8857         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
8858         g = 10 * f;
8859         i32  = ($xxx) g;
8860
8861         /* x86 processors will probably give 0x8000 0000, which is a
8862        sign change.  We don't want that.  We want to mimic SPARC
8863            behavior here, which is to preserve the sign and give
8864            back 0x7fff ffff.
8865         */
8866         if (i32 != ($xxx) f)
8867                 result |= 1;
8868         exit(result);
8869 }
8870 EOCP
8871 set try
8872 if eval $compile_ok; then
8873         $run ./try
8874         yyy=$?
8875 else
8876         echo "(I can't seem to compile the test program--assuming it can't)"
8877         yyy=1
8878 fi
8879 case "$yyy" in
8880 0)      val="$define"
8881         echo "Yup, it can."
8882         ;;
8883 *)      val="$undef"
8884         echo "Nope, it can't."
8885         ;;
8886 esac
8887 set d_casti32
8888 eval $setvar
8889 $rm -f try try.*
8890
8891 : check for ability to cast negative floats to unsigned
8892 echo " "
8893 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
8894 $cat >try.c <<EOCP
8895 #include <stdio.h>
8896 #include <sys/types.h>
8897 #include <signal.h>
8898 $signal_t blech(s) int s; { exit(7); }
8899 $signal_t blech_in_list(s) int s; { exit(4); }
8900 unsigned long dummy_long(p) unsigned long p; { return p; }
8901 unsigned int dummy_int(p) unsigned int p; { return p; }
8902 unsigned short dummy_short(p) unsigned short p; { return p; }
8903 int main()
8904 {
8905         double f;
8906         unsigned long along;
8907         unsigned int aint;
8908         unsigned short ashort;
8909         int result = 0;
8910         char str[16];
8911         
8912         /* Frustrate gcc-2.7.2's optimizer which failed this test with
8913            a direct f = -123. assignment.  gcc-2.8.0 reportedly
8914            optimized the whole file away
8915         */
8916         /* Store the number in a writable string for gcc to pass to 
8917            sscanf under HP/UX.
8918         */
8919         sprintf(str, "-123");
8920         sscanf(str, "%lf", &f);  /* f = -123.; */
8921
8922         signal(SIGFPE, blech);
8923         along = (unsigned long)f;
8924         aint = (unsigned int)f;
8925         ashort = (unsigned short)f;
8926         if (along != (unsigned long)-123)
8927                 result |= 1;
8928         if (aint != (unsigned int)-123)
8929                 result |= 1;
8930         if (ashort != (unsigned short)-123)
8931                 result |= 1;
8932         sprintf(str, "1073741824.");
8933         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
8934         f = f + f;
8935         along = 0;
8936         along = (unsigned long)f;
8937         if (along != 0x80000000)
8938                 result |= 2;
8939         f -= 1.;
8940         along = 0;
8941         along = (unsigned long)f;
8942         if (along != 0x7fffffff)
8943                 result |= 1;
8944         f += 2.;
8945         along = 0;
8946         along = (unsigned long)f;
8947         if (along != 0x80000001)
8948                 result |= 2;
8949         if (result)
8950                 exit(result);
8951         signal(SIGFPE, blech_in_list);
8952         sprintf(str, "123.");
8953         sscanf(str, "%lf", &f);  /* f = 123.; */
8954         along = dummy_long((unsigned long)f);
8955         aint = dummy_int((unsigned int)f);
8956         ashort = dummy_short((unsigned short)f);
8957         if (along != (unsigned long)123)
8958                 result |= 4;
8959         if (aint != (unsigned int)123)
8960                 result |= 4;
8961         if (ashort != (unsigned short)123)
8962                 result |= 4;
8963         exit(result);
8964
8965 }
8966 EOCP
8967 set try
8968 if eval $compile_ok; then
8969         $run ./try
8970         castflags=$?
8971 else
8972         echo "(I can't seem to compile the test program--assuming it can't)"
8973         castflags=7
8974 fi
8975 case "$castflags" in
8976 0)      val="$define"
8977         echo "Yup, it can."
8978         ;;
8979 *)      val="$undef"
8980         echo "Nope, it can't."
8981         ;;
8982 esac
8983 set d_castneg
8984 eval $setvar
8985 $rm -f try.*
8986
8987 : see if vprintf exists
8988 echo " "
8989 if set vprintf val -f d_vprintf; eval $csym; $val; then
8990         echo 'vprintf() found.' >&4
8991         val="$define"
8992         $cat >try.c <<'EOF'
8993 #include <varargs.h>
8994
8995 int main() { xxx("foo"); }
8996
8997 xxx(va_alist)
8998 va_dcl
8999 {
9000         va_list args;
9001         char buf[10];
9002
9003         va_start(args);
9004         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
9005 }
9006 EOF
9007         set try
9008         if eval $compile && $run ./try; then
9009                 echo "Your vsprintf() returns (int)." >&4
9010                 val2="$undef"
9011         else
9012                 echo "Your vsprintf() returns (char*)." >&4
9013                 val2="$define"
9014         fi
9015 else
9016         echo 'vprintf() NOT found.' >&4
9017                 val="$undef"
9018                 val2="$undef"
9019 fi
9020 $rm -f try try.*
9021 set d_vprintf
9022 eval $setvar
9023 val=$val2
9024 set d_charvspr
9025 eval $setvar
9026
9027 : see if chown exists
9028 set chown d_chown
9029 eval $inlibc
9030
9031 : see if chroot exists
9032 set chroot d_chroot
9033 eval $inlibc
9034
9035 : see if chsize exists
9036 set chsize d_chsize
9037 eval $inlibc
9038
9039 hasstruct='varname=$1; struct=$2; shift; shift;
9040 while $test $# -ge 2; do
9041         case "$1" in
9042         $define) echo "#include <$2>";;
9043         esac ;
9044     shift 2;
9045 done > try.c;
9046 echo "int main () { struct $struct foo; }" >> try.c;
9047 set try;
9048 if eval $compile; then
9049         val="$define";
9050 else
9051         val="$undef";
9052 fi;
9053 set $varname;
9054 eval $setvar;
9055 $rm -f try.c try.o'
9056
9057 : see if sys/types.h has to be included
9058 set sys/types.h i_systypes
9059 eval $inhdr
9060
9061 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
9062 while $test $# -ge 2; do
9063         case "$1" in
9064         $define) echo "#include <$2>";;
9065         esac ;
9066     shift 2;
9067 done > try.c;
9068 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
9069 set try;
9070 if eval $compile; then
9071         val="$define";
9072 else
9073         val="$undef";
9074 fi;
9075 set $varname;
9076 eval $setvar;
9077 $rm -f try.c try.o'
9078
9079 socketlib=''
9080 sockethdr=''
9081 : see whether socket exists
9082 echo " "
9083 $echo $n "Hmm... $c" >&4
9084 if set socket val -f d_socket; eval $csym; $val; then
9085         echo "Looks like you have Berkeley networking support." >&4
9086         d_socket="$define"
9087         if set setsockopt val -f; eval $csym; $val; then
9088                 d_oldsock="$undef"
9089         else
9090                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
9091                 d_oldsock="$define"
9092         fi
9093 else
9094         if $contains socklib libc.list >/dev/null 2>&1; then
9095                 echo "Looks like you have Berkeley networking support." >&4
9096                 d_socket="$define"
9097                 : we will have to assume that it supports the 4.2 BSD interface
9098                 d_oldsock="$undef"
9099         else
9100                 echo "You don't have Berkeley networking in libc$_a..." >&4
9101                 if test "X$d_socket" = "X$define"; then
9102                    echo "...but you seem to believe that you have sockets." >&4
9103                 else
9104                         for net in net socket
9105                         do
9106                                 if test -f /usr/lib/lib$net$_a; then
9107                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
9108                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
9109                                         if $contains socket libc.list >/dev/null 2>&1; then
9110                                                 d_socket="$define"
9111                                                 socketlib="-l$net"
9112                                                 case "$net" in
9113                                                 net)
9114                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
9115                                                         sockethdr="-I/usr/netinclude"
9116                                                         ;;
9117                                                 esac
9118                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
9119                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
9120                                                         d_oldsock="$undef"
9121                                                 else
9122                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
9123                                                         d_oldsock="$define"
9124                                                 fi
9125                                                 break
9126                                         fi
9127                                 fi
9128                         done
9129                         if test "X$d_socket" != "X$define"; then
9130                            echo "or anywhere else I see." >&4
9131                            d_socket="$undef"
9132                            d_oldsock="$undef"
9133                         fi
9134                 fi
9135         fi
9136 fi
9137
9138 : see if socketpair exists
9139 set socketpair d_sockpair
9140 eval $inlibc
9141
9142
9143 echo " "
9144 echo "Checking the availability of certain socket constants..." >& 4
9145 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
9146         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
9147         $cat >try.c <<EOF
9148 #include <sys/types.h>
9149 #include <sys/socket.h>
9150 int main() {
9151     int i = $ENUM;
9152 }
9153 EOF
9154         val="$undef"
9155         set try; if eval $compile; then
9156                 val="$define"
9157         fi
9158         set d_${enum}; eval $setvar
9159         $rm -f try.c try
9160 done
9161
9162 : see if this is a sys/uio.h system
9163 set sys/uio.h i_sysuio
9164 eval $inhdr
9165
9166
9167 echo " "
9168 echo "Checking to see if your system supports struct cmsghdr..." >&4
9169 set d_cmsghdr_s cmsghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
9170 eval $hasstruct
9171 case "$d_cmsghdr_s" in
9172 "$define")      echo "Yes, it does."   ;;
9173 *)              echo "No, it doesn't." ;;
9174 esac
9175
9176
9177 : check for const keyword
9178 echo " "
9179 echo 'Checking to see if your C compiler knows about "const"...' >&4
9180 $cat >const.c <<'EOCP'
9181 typedef struct spug { int drokk; } spug;
9182 int main()
9183 {
9184         const char *foo;
9185         const spug y;
9186 }
9187 EOCP
9188 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
9189         val="$define"
9190         echo "Yup, it does."
9191 else
9192         val="$undef"
9193         echo "Nope, it doesn't."
9194 fi
9195 set d_const
9196 eval $setvar
9197
9198 : see if crypt exists
9199 echo " "
9200 if set crypt val -f d_crypt; eval $csym; $val; then
9201         echo 'crypt() found.' >&4
9202         val="$define"
9203         cryptlib=''
9204 else
9205         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
9206         if $test -z "$cryptlib"; then
9207                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
9208         else
9209                 cryptlib=-lcrypt
9210         fi
9211         if $test -z "$cryptlib"; then
9212                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
9213         else
9214                 cryptlib=-lcrypt
9215         fi
9216         if $test -z "$cryptlib"; then
9217                 cryptlib=`./loc libcrypt$_a "" $libpth`
9218         else
9219                 cryptlib=-lcrypt
9220         fi
9221         if $test -z "$cryptlib"; then
9222                 echo 'crypt() NOT found.' >&4
9223                 val="$undef"
9224         else
9225                 val="$define"
9226         fi
9227 fi
9228 set d_crypt
9229 eval $setvar
9230
9231 : get csh whereabouts
9232 case "$csh" in
9233 'csh') val="$undef" ;;
9234 *) val="$define" ;;
9235 esac
9236 set d_csh
9237 eval $setvar
9238 : Respect a hint or command line value for full_csh.
9239 case "$full_csh" in
9240 '') full_csh=$csh ;;
9241 esac
9242
9243 : see if cuserid exists
9244 set cuserid d_cuserid
9245 eval $inlibc
9246
9247 : see if this is a limits.h system
9248 set limits.h i_limits
9249 eval $inhdr
9250
9251 : see if this is a float.h system
9252 set float.h i_float
9253 eval $inhdr
9254
9255 : See if number of significant digits in a double precision number is known
9256 echo " "
9257 $cat >dbl_dig.c <<EOM
9258 #$i_limits I_LIMITS
9259 #$i_float I_FLOAT
9260 #ifdef I_LIMITS
9261 #include <limits.h>
9262 #endif
9263 #ifdef I_FLOAT
9264 #include <float.h>
9265 #endif
9266 #ifdef DBL_DIG
9267 printf("Contains DBL_DIG");
9268 #endif
9269 EOM
9270 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
9271 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
9272         echo "DBL_DIG found." >&4
9273         val="$define"
9274 else
9275         echo "DBL_DIG NOT found." >&4
9276         val="$undef"
9277 fi
9278 $rm -f dbl_dig.?
9279 set d_dbl_dig
9280 eval $setvar
9281
9282 hasproto='varname=$1; func=$2; shift; shift;
9283 while $test $# -ge 2; do
9284         case "$1" in
9285         $define) echo "#include <$2>";;
9286         esac ;
9287     shift 2;
9288 done > try.c;
9289 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
9290 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
9291         echo "$func() prototype found.";
9292         val="$define";
9293 else
9294         echo "$func() prototype NOT found.";
9295         val="$undef";
9296 fi;
9297 set $varname;
9298 eval $setvar;
9299 $rm -f try.c tryout.c'
9300
9301 : see if dbm.h is available
9302 : see if dbmclose exists
9303 set dbmclose d_dbmclose
9304 eval $inlibc
9305
9306 case "$d_dbmclose" in
9307 $define)
9308         set dbm.h i_dbm
9309         eval $inhdr
9310         case "$i_dbm" in
9311         $define)
9312                 val="$undef"
9313                 set i_rpcsvcdbm
9314                 eval $setvar
9315                 ;;
9316         *)      set rpcsvc/dbm.h i_rpcsvcdbm
9317                 eval $inhdr
9318                 ;;
9319         esac
9320         ;;
9321 *)      echo "We won't be including <dbm.h>"
9322         val="$undef"
9323         set i_dbm
9324         eval $setvar
9325         val="$undef"
9326         set i_rpcsvcdbm
9327         eval $setvar
9328         ;;
9329 esac
9330
9331 : see if prototype for dbminit is available
9332 echo " "
9333 set d_dbminitproto dbminit $i_dbm dbm.h
9334 eval $hasproto
9335
9336 : see if difftime exists
9337 set difftime d_difftime
9338 eval $inlibc
9339
9340 : see if this is a dirent system
9341 echo " "
9342 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
9343         val="$define"
9344         echo "<dirent.h> found." >&4
9345 else
9346         val="$undef"
9347         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
9348                 echo "<sys/dir.h> found." >&4
9349                 echo " "
9350         else
9351                 xinc=`./findhdr sys/ndir.h`
9352         fi
9353         echo "<dirent.h> NOT found." >&4
9354 fi
9355 set i_dirent
9356 eval $setvar
9357
9358 : Look for type of directory structure.
9359 echo " "
9360 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9361
9362 case "$direntrytype" in
9363 ''|' ')
9364         case "$i_dirent" in
9365         $define) guess1='struct dirent' ;;
9366         *) guess1='struct direct'  ;;
9367         esac
9368         ;;
9369 *)      guess1="$direntrytype"
9370         ;;
9371 esac
9372
9373 case "$guess1" in
9374 'struct dirent') guess2='struct direct' ;;
9375 *) guess2='struct dirent' ;;
9376 esac
9377                 
9378 if $contains "$guess1" try.c >/dev/null 2>&1; then
9379         direntrytype="$guess1"
9380         echo "Your directory entries are $direntrytype." >&4
9381 elif $contains "$guess2" try.c >/dev/null 2>&1; then
9382         direntrytype="$guess2"
9383         echo "Your directory entries seem to be $direntrytype." >&4
9384 else
9385         echo "I don't recognize your system's directory entries." >&4
9386         rp="What type is used for directory entries on this system?"
9387         dflt="$guess1"
9388         . ./myread
9389         direntrytype="$ans"
9390 fi
9391 $rm -f try.c
9392
9393
9394 : see if the directory entry stores field length
9395 echo " "
9396 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9397 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
9398         echo "Good, your directory entry keeps length information in d_namlen." >&4
9399         val="$define"
9400 else
9401         echo "Your directory entry does not know about the d_namlen field." >&4
9402         val="$undef"
9403 fi
9404 set d_dirnamlen
9405 eval $setvar
9406 $rm -f try.c
9407
9408 : see if dlerror exists
9409 xxx_runnm="$runnm"
9410 runnm=false
9411 set dlerror d_dlerror
9412 eval $inlibc
9413 runnm="$xxx_runnm"
9414
9415 : see if dlfcn is available
9416 set dlfcn.h i_dlfcn
9417 eval $inhdr
9418
9419 case "$usedl" in
9420 $define|y|true)
9421         $cat << EOM
9422
9423 On a few systems, the dynamically loaded modules that perl generates and uses
9424 will need a different extension than shared libs. The default will probably
9425 be appropriate.
9426
9427 EOM
9428         case "$dlext" in
9429         '')     dflt="$so" ;;
9430         *)      dflt="$dlext" ;;
9431         esac
9432         rp='What is the extension of dynamically loaded modules'
9433         . ./myread
9434         dlext="$ans"
9435         ;;
9436 *)
9437         dlext="none"
9438         ;;
9439 esac
9440
9441 : Check if dlsym need a leading underscore
9442 echo " "
9443 val="$undef"
9444
9445 case "$dlsrc" in
9446 dl_dlopen.xs)
9447         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
9448         $cat >dyna.c <<'EOM'
9449 fred () { }
9450 EOM
9451
9452 $cat >fred.c<<EOM
9453
9454 #include <stdio.h>
9455 #$i_dlfcn I_DLFCN
9456 #ifdef I_DLFCN
9457 #include <dlfcn.h>      /* the dynamic linker include file for SunOS/Solaris */
9458 #else
9459 #include <sys/types.h>
9460 #include <nlist.h>
9461 #include <link.h>
9462 #endif
9463
9464 extern int fred() ;
9465
9466 int main()
9467 {
9468     void * handle ;
9469     void * symbol ;
9470 #ifndef RTLD_LAZY
9471     int mode = 1 ;
9472 #else
9473     int mode = RTLD_LAZY ;
9474 #endif
9475     handle = dlopen("./dyna.$dlext", mode) ;
9476     if (handle == NULL) {
9477         printf ("1\n") ;
9478         fflush (stdout) ;
9479         exit(0);
9480     }
9481     symbol = dlsym(handle, "fred") ;
9482     if (symbol == NULL) {
9483         /* try putting a leading underscore */
9484         symbol = dlsym(handle, "_fred") ;
9485         if (symbol == NULL) {
9486             printf ("2\n") ;
9487             fflush (stdout) ;
9488             exit(0);
9489         }
9490         printf ("3\n") ;
9491     }
9492     else
9493         printf ("4\n") ;
9494     fflush (stdout) ;
9495     exit(0);
9496 }
9497 EOM
9498         : Call the object file tmp-dyna.o in case dlext=o.
9499         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
9500                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
9501                 $ld -o dyna.$dlext $ldflags $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && 
9502                 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1 && $to dyna.$dlext; then
9503                 xxx=`$run ./fred`
9504                 case $xxx in
9505                 1)      echo "Test program failed using dlopen." >&4
9506                         echo "Perhaps you should not use dynamic loading." >&4;;
9507                 2)      echo "Test program failed using dlsym." >&4
9508                         echo "Perhaps you should not use dynamic loading." >&4;;
9509                 3)      echo "dlsym needs a leading underscore" >&4
9510                         val="$define" ;;
9511                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
9512                 esac
9513         else
9514                 echo "I can't compile and run the test program." >&4
9515                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
9516         fi
9517         ;;
9518 esac
9519                 
9520 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
9521
9522 set d_dlsymun
9523 eval $setvar
9524
9525 : see if prototype for drand48 is available
9526 echo " "
9527 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
9528 eval $hasproto
9529
9530 : see if dup2 exists
9531 set dup2 d_dup2
9532 eval $inlibc
9533
9534 : see if eaccess exists
9535 set eaccess d_eaccess
9536 eval $inlibc
9537
9538 : see if endgrent exists
9539 set endgrent d_endgrent
9540 eval $inlibc
9541
9542 : see if endhostent exists
9543 set endhostent d_endhent
9544 eval $inlibc
9545
9546 : see if endnetent exists
9547 set endnetent d_endnent
9548 eval $inlibc
9549
9550 : see if endprotoent exists
9551 set endprotoent d_endpent
9552 eval $inlibc
9553
9554 : see if endpwent exists
9555 set endpwent d_endpwent
9556 eval $inlibc
9557
9558 : see if endservent exists
9559 set endservent d_endsent
9560 eval $inlibc
9561
9562 : Locate the flags for 'open()'
9563 echo " "
9564 $cat >try.c <<'EOCP'
9565 #include <sys/types.h>
9566 #ifdef I_FCNTL
9567 #include <fcntl.h>
9568 #endif
9569 #ifdef I_SYS_FILE
9570 #include <sys/file.h>
9571 #endif
9572 int main() {
9573         if(O_RDONLY);
9574 #ifdef O_TRUNC
9575         exit(0);
9576 #else
9577         exit(1);
9578 #endif
9579 }
9580 EOCP
9581 : check sys/file.h first to get FREAD on Sun
9582 if $test `./findhdr sys/file.h` && \
9583                 set try -DI_SYS_FILE && eval $compile; then
9584         h_sysfile=true;
9585         echo "<sys/file.h> defines the O_* constants..." >&4
9586         if $run ./try; then
9587                 echo "and you have the 3 argument form of open()." >&4
9588                 val="$define"
9589         else
9590                 echo "but not the 3 argument form of open().  Oh, well." >&4
9591                 val="$undef"
9592         fi
9593 elif $test `./findhdr fcntl.h` && \
9594                 set try -DI_FCNTL && eval $compile; then
9595         h_fcntl=true;
9596         echo "<fcntl.h> defines the O_* constants..." >&4
9597         if $run ./try; then
9598                 echo "and you have the 3 argument form of open()." >&4
9599                 val="$define"
9600         else
9601                 echo "but not the 3 argument form of open().  Oh, well." >&4
9602                 val="$undef"
9603         fi
9604 else
9605         val="$undef"
9606         echo "I can't find the O_* constant definitions!  You got problems." >&4
9607 fi
9608 set d_open3
9609 eval $setvar
9610 $rm -f try try.*
9611
9612 : see which of string.h or strings.h is needed
9613 echo " "
9614 strings=`./findhdr string.h`
9615 if $test "$strings" && $test -r "$strings"; then
9616         echo "Using <string.h> instead of <strings.h>." >&4
9617         val="$define"
9618 else
9619         val="$undef"
9620         strings=`./findhdr strings.h`
9621         if $test "$strings" && $test -r "$strings"; then
9622                 echo "Using <strings.h> instead of <string.h>." >&4
9623         else
9624                 echo "No string header found -- You'll surely have problems." >&4
9625         fi
9626 fi
9627 set i_string
9628 eval $setvar
9629 case "$i_string" in
9630 "$undef") strings=`./findhdr strings.h`;;
9631 *)        strings=`./findhdr string.h`;;
9632 esac
9633
9634 : check for non-blocking I/O stuff
9635 case "$h_sysfile" in
9636 true) echo "#include <sys/file.h>" > head.c;;
9637 *)
9638        case "$h_fcntl" in
9639        true) echo "#include <fcntl.h>" > head.c;;
9640        *) echo "#include <sys/fcntl.h>" > head.c;;
9641        esac
9642        ;;
9643 esac
9644 echo " "
9645 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
9646 case "$o_nonblock" in
9647 '')
9648         $cat head.c > try.c
9649         $cat >>try.c <<'EOCP'
9650 #include <stdio.h>
9651 int main() {
9652 #ifdef O_NONBLOCK
9653         printf("O_NONBLOCK\n");
9654         exit(0);
9655 #endif
9656 #ifdef O_NDELAY
9657         printf("O_NDELAY\n");
9658         exit(0);
9659 #endif
9660 #ifdef FNDELAY
9661         printf("FNDELAY\n");
9662         exit(0);
9663 #endif
9664         exit(0);
9665 }
9666 EOCP
9667         set try
9668         if eval $compile_ok; then
9669                 o_nonblock=`$run ./try`
9670                 case "$o_nonblock" in
9671                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
9672                 *) echo "Seems like we can use $o_nonblock.";;
9673                 esac
9674         else
9675                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
9676         fi
9677         ;;
9678 *) echo "Using $hint value $o_nonblock.";;
9679 esac
9680 $rm -f try try.* .out core
9681
9682 echo " "
9683 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
9684 case "$eagain" in
9685 '')
9686         $cat head.c > try.c
9687         $cat >>try.c <<EOCP
9688 #include <errno.h>
9689 #include <sys/types.h>
9690 #include <signal.h>
9691 #include <stdio.h> 
9692 #define MY_O_NONBLOCK $o_nonblock
9693 #ifndef errno  /* XXX need better Configure test */
9694 extern int errno;
9695 #endif
9696 #$i_unistd I_UNISTD
9697 #ifdef I_UNISTD
9698 #include <unistd.h>
9699 #endif
9700 #$i_string I_STRING
9701 #ifdef I_STRING
9702 #include <string.h>
9703 #else
9704 #include <strings.h>
9705 #endif
9706 $signal_t blech(x) int x; { exit(3); }
9707 EOCP
9708         $cat >> try.c <<'EOCP'
9709 int main()
9710 {
9711         int pd[2];
9712         int pu[2];
9713         char buf[1];
9714         char string[100];
9715
9716         pipe(pd);       /* Down: child -> parent */
9717         pipe(pu);       /* Up: parent -> child */
9718         if (0 != fork()) {
9719                 int ret;
9720                 close(pd[1]);   /* Parent reads from pd[0] */
9721                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
9722 #ifdef F_SETFL
9723                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
9724                         exit(1);
9725 #else
9726                 exit(4);
9727 #endif
9728                 signal(SIGALRM, blech);
9729                 alarm(5);
9730                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
9731                         exit(2);
9732                 sprintf(string, "%d\n", ret);
9733                 write(2, string, strlen(string));
9734                 alarm(0);
9735 #ifdef EAGAIN
9736                 if (errno == EAGAIN) {
9737                         printf("EAGAIN\n");
9738                         goto ok;
9739                 }
9740 #endif
9741 #ifdef EWOULDBLOCK
9742                 if (errno == EWOULDBLOCK)
9743                         printf("EWOULDBLOCK\n");
9744 #endif
9745         ok:
9746                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
9747                 sleep(2);                               /* Give it time to close our pipe */
9748                 alarm(5);
9749                 ret = read(pd[0], buf, 1);      /* Should read EOF */
9750                 alarm(0);
9751                 sprintf(string, "%d\n", ret);
9752                 write(3, string, strlen(string));
9753                 exit(0);
9754         }
9755
9756         close(pd[0]);                   /* We write to pd[1] */
9757         close(pu[1]);                   /* We read from pu[0] */
9758         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
9759         close(pd[1]);                   /* Pipe pd is now fully closed! */
9760         exit(0);                                /* Bye bye, thank you for playing! */
9761 }
9762 EOCP
9763         set try
9764         if eval $compile_ok; then
9765                 echo "$startsh" >mtry
9766                 echo "$run ./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
9767                 chmod +x mtry
9768                 ./mtry >/dev/null 2>&1
9769                 case $? in
9770                 0) eagain=`$cat try.out`;;
9771                 1) echo "Could not perform non-blocking setting!";;
9772                 2) echo "I did a successful read() for something that was not there!";;
9773                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
9774                 4) echo "Could not find F_SETFL!";;
9775                 *) echo "Something terribly wrong happened during testing.";;
9776                 esac
9777                 rd_nodata=`$cat try.ret`
9778                 echo "A read() system call with no data present returns $rd_nodata."
9779                 case "$rd_nodata" in
9780                 0|-1) ;;
9781                 *)
9782                         echo "(That's peculiar, fixing that to be -1.)"
9783                         rd_nodata=-1
9784                         ;;
9785                 esac
9786                 case "$eagain" in
9787                 '')
9788                         echo "Forcing errno EAGAIN on read() with no data available."
9789                         eagain=EAGAIN
9790                         ;;
9791                 *)
9792                         echo "Your read() sets errno to $eagain when no data is available."
9793                         ;;
9794                 esac
9795                 status=`$cat try.err`
9796                 case "$status" in
9797                 0) echo "And it correctly returns 0 to signal EOF.";;
9798                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
9799                 *) echo "However, your read() returns '$status' on EOF??";;
9800                 esac
9801                 val="$define"
9802                 if test "$status" = "$rd_nodata"; then
9803                         echo "WARNING: you can't distinguish between EOF and no data!"
9804                         val="$undef"
9805                 fi
9806         else
9807                 echo "I can't compile the test program--assuming errno EAGAIN will do."
9808                 eagain=EAGAIN
9809         fi
9810         set d_eofnblk
9811         eval $setvar
9812         ;;
9813 *)
9814         echo "Using $hint value $eagain."
9815         echo "Your read() returns $rd_nodata when no data is present."
9816         case "$d_eofnblk" in
9817         "$define") echo "And you can see EOF because read() returns 0.";;
9818         "$undef") echo "But you can't see EOF status from read() returned value.";;
9819         *)
9820                 echo "(Assuming you can't see EOF status from read anyway.)"
9821                 d_eofnblk=$undef
9822                 ;;
9823         esac
9824         ;;
9825 esac
9826 $rm -f try try.* .out core head.c mtry
9827
9828 : see if fchdir exists
9829 set fchdir d_fchdir
9830 eval $inlibc
9831
9832 : see if fchmod exists
9833 set fchmod d_fchmod
9834 eval $inlibc
9835
9836 : see if fchown exists
9837 set fchown d_fchown
9838 eval $inlibc
9839
9840 : see if this is an fcntl system
9841 set fcntl d_fcntl
9842 eval $inlibc
9843
9844 echo " "
9845 : See if fcntl-based locking works.
9846 $cat >try.c <<'EOCP'
9847 #include <stdlib.h>
9848 #include <unistd.h>
9849 #include <fcntl.h>
9850 int main() {
9851 #if defined(F_SETLK) && defined(F_SETLKW)
9852      struct flock flock;
9853      int retval, fd;
9854      fd = open("try.c", O_RDONLY);
9855      flock.l_type = F_RDLCK;
9856      flock.l_whence = SEEK_SET;
9857      flock.l_start = flock.l_len = 0;
9858      retval = fcntl(fd, F_SETLK, &flock);
9859      close(fd);
9860      (retval < 0 ? exit(2) : exit(0));
9861 #else
9862      exit(2);
9863 #endif
9864 }
9865 EOCP
9866 echo "Checking if fcntl-based file locking works... "
9867 case "$d_fcntl" in
9868 "$define")
9869         set try
9870         if eval $compile_ok; then
9871                 if $run ./try; then
9872                         echo "Yes, it seems to work."
9873                         val="$define"
9874                 else
9875                         echo "Nope, it didn't work."
9876                         val="$undef"
9877                 fi
9878         else
9879                 echo "I'm unable to compile the test program, so I'll assume not."
9880                 val="$undef"
9881         fi
9882         ;;
9883 *) val="$undef";
9884         echo "Nope, since you don't even have fcntl()."
9885         ;;
9886 esac
9887 set d_fcntl_can_lock
9888 eval $setvar
9889 $rm -f try*
9890
9891
9892 : see if sys/select.h has to be included
9893 set sys/select.h i_sysselct
9894 eval $inhdr
9895
9896 : see if we should include time.h, sys/time.h, or both
9897 echo " "
9898 if test "X$timeincl" = X; then
9899         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
9900         $echo $n "I'm now running the test program...$c"
9901         $cat >try.c <<'EOCP'
9902 #include <sys/types.h>
9903 #ifdef I_TIME
9904 #include <time.h>
9905 #endif
9906 #ifdef I_SYSTIME
9907 #ifdef SYSTIMEKERNEL
9908 #define KERNEL
9909 #endif
9910 #include <sys/time.h>
9911 #endif
9912 #ifdef I_SYSSELECT
9913 #include <sys/select.h>
9914 #endif
9915 int main()
9916 {
9917         struct tm foo;
9918 #ifdef S_TIMEVAL
9919         struct timeval bar;
9920 #endif
9921 #ifdef S_TIMEZONE
9922         struct timezone tzp;
9923 #endif
9924         if (foo.tm_sec == foo.tm_sec)
9925                 exit(0);
9926 #ifdef S_TIMEVAL
9927         if (bar.tv_sec == bar.tv_sec)
9928                 exit(0);
9929 #endif
9930         exit(1);
9931 }
9932 EOCP
9933         flags=''
9934         for s_timezone in '-DS_TIMEZONE' ''; do
9935         sysselect=''
9936         for s_timeval in '-DS_TIMEVAL' ''; do
9937         for i_systimek in '' '-DSYSTIMEKERNEL'; do
9938         for i_time in '' '-DI_TIME'; do
9939         for i_systime in '-DI_SYSTIME' ''; do
9940                 case "$flags" in
9941                 '') $echo $n ".$c"
9942                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
9943                         if eval $compile; then
9944                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
9945                                 shift
9946                                 flags="$*"
9947                                 echo " "
9948                                 $echo $n "Succeeded with $flags$c"
9949                         fi
9950                         ;;
9951                 esac
9952         done
9953         done
9954         done
9955         done
9956         done
9957         timeincl=''
9958         echo " "
9959         case "$flags" in
9960         *SYSTIMEKERNEL*) i_systimek="$define"
9961                 timeincl=`./findhdr sys/time.h`
9962                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
9963         *) i_systimek="$undef";;
9964         esac
9965         case "$flags" in
9966         *I_TIME*) i_time="$define"
9967                 timeincl=`./findhdr time.h`" $timeincl"
9968                 echo "We'll include <time.h>." >&4;;
9969         *) i_time="$undef";;
9970         esac
9971         case "$flags" in
9972         *I_SYSTIME*) i_systime="$define"
9973                 timeincl=`./findhdr sys/time.h`" $timeincl"
9974                 echo "We'll include <sys/time.h>." >&4;;
9975         *) i_systime="$undef";;
9976         esac
9977         $rm -f try.c try
9978 fi
9979
9980 : check for fd_set items
9981 $cat <<EOM
9982
9983 Checking to see how well your C compiler handles fd_set and friends ...
9984 EOM
9985 $cat >try.c <<EOCP
9986 #$i_systime I_SYS_TIME
9987 #$i_sysselct I_SYS_SELECT
9988 #$d_socket HAS_SOCKET
9989 #include <sys/types.h>
9990 #ifdef HAS_SOCKET
9991 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
9992 #endif
9993 #ifdef I_SYS_TIME
9994 #include <sys/time.h>
9995 #endif
9996 #ifdef I_SYS_SELECT
9997 #include <sys/select.h>
9998 #endif
9999 int main() {
10000         fd_set fds;
10001
10002 #ifdef TRYBITS
10003         if(fds.fds_bits);
10004 #endif
10005
10006 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
10007         exit(0);
10008 #else
10009         exit(1);
10010 #endif
10011 }
10012 EOCP
10013 set try -DTRYBITS
10014 if eval $compile; then
10015         d_fds_bits="$define"
10016         d_fd_set="$define"
10017         echo "Well, your system knows about the normal fd_set typedef..." >&4
10018         if $run ./try; then
10019                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
10020                 d_fd_macros="$define"
10021         else
10022                 $cat >&4 <<'EOM'
10023 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
10024 EOM
10025                 d_fd_macros="$undef"
10026         fi
10027 else
10028         $cat <<'EOM'
10029 Hmm, your compiler has some difficulty with fd_set.  Checking further...
10030 EOM
10031         set try
10032         if eval $compile; then
10033                 d_fds_bits="$undef"
10034                 d_fd_set="$define"
10035                 echo "Well, your system has some sort of fd_set available..." >&4
10036                 if $run ./try; then
10037                         echo "and you have the normal fd_set macros." >&4
10038                         d_fd_macros="$define"
10039                 else
10040                         $cat <<'EOM'
10041 but not the normal fd_set macros!  Gross!  More work for me...
10042 EOM
10043                         d_fd_macros="$undef"
10044                 fi
10045         else
10046         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
10047                 d_fd_set="$undef"
10048                 d_fds_bits="$undef"
10049                 d_fd_macros="$undef"
10050         fi
10051 fi
10052 $rm -f try try.*
10053
10054 : see if fgetpos exists
10055 set fgetpos d_fgetpos
10056 eval $inlibc
10057
10058 : see if flock exists
10059 set flock d_flock
10060 eval $inlibc
10061
10062 : see if this is a sys/file.h system
10063 val=''
10064 set sys/file.h val
10065 eval $inhdr
10066
10067 : do we need to include sys/file.h ?
10068 case "$val" in
10069 "$define")
10070         echo " "
10071         if $h_sysfile; then
10072                 val="$define"
10073                 echo "We'll be including <sys/file.h>." >&4
10074         else
10075                 val="$undef"
10076                 echo "We won't be including <sys/file.h>." >&4
10077         fi
10078         ;;
10079 *)
10080         h_sysfile=false
10081         ;;
10082 esac
10083 set i_sysfile
10084 eval $setvar
10085
10086 : see if prototype for flock is available
10087 echo " "
10088 set d_flockproto flock $i_sysfile sys/file.h
10089 eval $hasproto
10090
10091 : see if fork exists
10092 set fork d_fork
10093 eval $inlibc
10094
10095 : see if pathconf exists
10096 set pathconf d_pathconf
10097 eval $inlibc
10098
10099 : see if fpathconf exists
10100 set fpathconf d_fpathconf
10101 eval $inlibc
10102
10103
10104 : check for fpos64_t
10105 echo " "
10106 echo "Checking to see if you have fpos64_t..." >&4
10107 $cat >try.c <<EOCP
10108 #include <stdio.h>
10109 int main() { fpos64_t x = 7; }
10110 EOCP
10111 set try
10112 if eval $compile; then
10113         val="$define"
10114         echo "You have fpos64_t."
10115 else
10116         val="$undef"
10117         echo "You do not have fpos64_t."
10118         case "$fpossize" in
10119         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
10120         esac
10121 fi
10122 $rm -f try.* try
10123 set d_fpos64_t
10124 eval $setvar
10125
10126 : see if frexpl exists
10127 set frexpl d_frexpl
10128 eval $inlibc
10129
10130 : see if this is a sys/param system
10131 set sys/param.h i_sysparam
10132 eval $inhdr
10133
10134 : see if this is a sys/mount.h system
10135 set sys/mount.h i_sysmount
10136 eval $inhdr
10137
10138
10139 echo " "
10140 echo "Checking to see if your system supports struct fs_data..." >&4
10141 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
10142 eval $hasstruct
10143 case "$d_fs_data_s" in
10144 "$define")      echo "Yes, it does."   ;;
10145 *)              echo "No, it doesn't." ;;
10146 esac
10147
10148 : see if fseeko exists
10149 set fseeko d_fseeko
10150 eval $inlibc
10151 case "$longsize" in
10152 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
10153 esac
10154
10155 : see if fsetpos exists
10156 set fsetpos d_fsetpos
10157 eval $inlibc
10158
10159
10160 : see if fstatfs exists
10161 set fstatfs d_fstatfs
10162 eval $inlibc
10163
10164
10165 : see if statvfs exists
10166 set statvfs d_statvfs
10167 eval $inlibc
10168
10169 : see if fstatvfs exists
10170 set fstatvfs d_fstatvfs
10171 eval $inlibc
10172
10173
10174 : see if fsync exists
10175 set fsync d_fsync
10176 eval $inlibc
10177
10178 : see if ftello exists
10179 set ftello d_ftello
10180 eval $inlibc
10181 case "$longsize" in
10182 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
10183 esac
10184
10185 : see if getcwd exists
10186 set getcwd d_getcwd
10187 eval $inlibc
10188
10189 : see if getespwnam exists
10190 set getespwnam d_getespwnam
10191 eval $inlibc
10192
10193
10194 : see if getfsstat exists
10195 set getfsstat d_getfsstat
10196 eval $inlibc
10197
10198 : see if getgrent exists
10199 set getgrent d_getgrent
10200 eval $inlibc
10201
10202 : see if gethostbyaddr exists
10203 set gethostbyaddr d_gethbyaddr
10204 eval $inlibc
10205
10206 : see if gethostbyname exists
10207 set gethostbyname d_gethbyname
10208 eval $inlibc
10209
10210 : see if gethostent exists
10211 set gethostent d_gethent
10212 eval $inlibc
10213
10214 : see how we will look up host name
10215 echo " "
10216 call=''
10217 if set gethostname val -f d_gethname; eval $csym; $val; then
10218         echo 'gethostname() found.' >&4
10219         d_gethname="$define"
10220         call=gethostname
10221 fi
10222 if set uname val -f d_uname; eval $csym; $val; then
10223         if ./xenix; then
10224                 $cat <<'EOM'
10225 uname() was found, but you're running xenix, and older versions of xenix
10226 have a broken uname(). If you don't really know whether your xenix is old
10227 enough to have a broken system call, use the default answer.
10228
10229 EOM
10230                 dflt=y
10231                 case "$d_uname" in
10232                 "$define") dflt=n;;
10233                 esac
10234                 rp='Is your uname() broken?'
10235                 . ./myread
10236                 case "$ans" in
10237                 n*) d_uname="$define"; call=uname;;
10238                 esac
10239         else
10240                 echo 'uname() found.' >&4
10241                 d_uname="$define"
10242                 case "$call" in
10243                 '') call=uname ;;
10244                 esac
10245         fi
10246 fi
10247 case "$d_gethname" in
10248 '') d_gethname="$undef";;
10249 esac
10250 case "$d_uname" in
10251 '') d_uname="$undef";;
10252 esac
10253 case "$d_uname$d_gethname" in
10254 *define*)
10255         dflt=n
10256         cat <<EOM
10257  
10258 Every now and then someone has a $call() that lies about the hostname
10259 but can't be fixed for political or economic reasons.  If you wish, I can
10260 pretend $call() isn't there and maybe compute hostname at run-time
10261 thanks to the '$phostname' command.
10262
10263 EOM
10264         rp="Shall I ignore $call() from now on?"
10265         . ./myread
10266         case "$ans" in
10267         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
10268         esac;;
10269 esac
10270 case "$phostname" in
10271 '') aphostname='';;
10272 *) case "$aphostname" in
10273         /*) ;;
10274         *) set X $phostname
10275                 shift
10276                 file=$1
10277                 shift
10278                 file=`./loc $file $file $pth`
10279                 aphostname=`echo $file $*`
10280                 ;;
10281         esac
10282         ;;
10283 esac
10284 case "$d_uname$d_gethname" in
10285 *define*) ;;
10286 *)
10287         case "$phostname" in
10288         '')
10289                 echo "There will be no way for $package to get your hostname." >&4;;
10290         *)
10291         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
10292                 ;;
10293         esac;;
10294 esac
10295 case "$d_phostname" in
10296 '') d_phostname="$undef";;
10297 esac
10298
10299 : see if this is a netdb.h system
10300 set netdb.h i_netdb
10301 eval $inhdr
10302
10303 : see if prototypes for various gethostxxx netdb.h functions are available
10304 echo " "
10305 set d_gethostprotos gethostent $i_netdb netdb.h
10306 eval $hasproto
10307
10308 : see if getitimer exists
10309 set getitimer d_getitimer
10310 eval $inlibc
10311
10312 : see if getlogin exists
10313 set getlogin d_getlogin
10314 eval $inlibc
10315
10316 : see if getmnt exists
10317 set getmnt d_getmnt
10318 eval $inlibc
10319
10320 : see if getmntent exists
10321 set getmntent d_getmntent
10322 eval $inlibc
10323
10324 : see if getnetbyaddr exists
10325 set getnetbyaddr d_getnbyaddr
10326 eval $inlibc
10327
10328 : see if getnetbyname exists
10329 set getnetbyname d_getnbyname
10330 eval $inlibc
10331
10332 : see if getnetent exists
10333 set getnetent d_getnent
10334 eval $inlibc
10335
10336 : see if prototypes for various getnetxxx netdb.h functions are available
10337 echo " "
10338 set d_getnetprotos getnetent $i_netdb netdb.h
10339 eval $hasproto
10340
10341 : see if getpagesize exists
10342 set getpagesize d_getpagsz
10343 eval $inlibc
10344
10345
10346 : see if getprotobyname exists
10347 set getprotobyname d_getpbyname
10348 eval $inlibc
10349
10350 : see if getprotobynumber exists
10351 set getprotobynumber d_getpbynumber
10352 eval $inlibc
10353
10354 : see if getprotoent exists
10355 set getprotoent d_getpent
10356 eval $inlibc
10357
10358 : see if getpgid exists
10359 set getpgid d_getpgid
10360 eval $inlibc
10361
10362 : see if getpgrp2 exists
10363 set getpgrp2 d_getpgrp2
10364 eval $inlibc
10365
10366 : see if getppid exists
10367 set getppid d_getppid
10368 eval $inlibc
10369
10370 : see if getpriority exists
10371 set getpriority d_getprior
10372 eval $inlibc
10373
10374 : see if prototypes for various getprotoxxx netdb.h functions are available
10375 echo " "
10376 set d_getprotoprotos getprotoent $i_netdb netdb.h
10377 eval $hasproto
10378
10379 : see if getprpwnam exists
10380 set getprpwnam d_getprpwnam
10381 eval $inlibc
10382
10383 : see if getpwent exists
10384 set getpwent d_getpwent
10385 eval $inlibc
10386
10387
10388 : see if getservbyname exists
10389 set getservbyname d_getsbyname
10390 eval $inlibc
10391
10392 : see if getservbyport exists
10393 set getservbyport d_getsbyport
10394 eval $inlibc
10395
10396 : see if getservent exists
10397 set getservent d_getsent
10398 eval $inlibc
10399
10400 : see if prototypes for various getservxxx netdb.h functions are available
10401 echo " "
10402 set d_getservprotos getservent $i_netdb netdb.h
10403 eval $hasproto
10404
10405 : see if getspnam exists
10406 set getspnam d_getspnam
10407 eval $inlibc
10408
10409 : see if gettimeofday or ftime exists
10410 set gettimeofday d_gettimeod
10411 eval $inlibc
10412 case "$d_gettimeod" in
10413 "$undef")
10414         set ftime d_ftime 
10415         eval $inlibc
10416         ;;
10417 *)
10418         val="$undef"; set d_ftime; eval $setvar
10419         ;;
10420 esac
10421 case "$d_gettimeod$d_ftime" in
10422 "$undef$undef")
10423         echo " "
10424         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
10425         ;;
10426 esac
10427
10428 : see if this is an grp system
10429 set grp.h i_grp
10430 eval $inhdr
10431
10432 case "$i_grp" in
10433 $define)
10434         xxx=`./findhdr grp.h`
10435         $cppstdin $cppflags $cppminus < $xxx >$$.h
10436
10437         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
10438                 val="$define"
10439         else
10440                 val="$undef"
10441         fi
10442         set d_grpasswd
10443         eval $setvar
10444
10445         $rm -f $$.h
10446         ;;
10447 *)
10448         val="$undef";
10449         set d_grpasswd; eval $setvar
10450         ;;
10451 esac
10452
10453 : see if hasmntopt exists
10454 set hasmntopt d_hasmntopt
10455 eval $inlibc
10456
10457 : see if this is a netinet/in.h or sys/in.h system
10458 set netinet/in.h i_niin sys/in.h i_sysin
10459 eval $inhdr
10460
10461 : see if arpa/inet.h has to be included
10462 set arpa/inet.h i_arpainet
10463 eval $inhdr
10464
10465 : see if htonl --and friends-- exists
10466 val=''
10467 set htonl val
10468 eval $inlibc
10469
10470 : Maybe they are macros.
10471 case "$val" in
10472 $undef)
10473         $cat >htonl.c <<EOM
10474 #include <stdio.h>
10475 #include <sys/types.h>
10476 #$i_niin I_NETINET_IN
10477 #$i_sysin I_SYS_IN
10478 #$i_arpainet I_ARPA_INET
10479 #ifdef I_NETINET_IN
10480 #include <netinet/in.h>
10481 #endif
10482 #ifdef I_SYS_IN
10483 #include <sys/in.h>
10484 #endif
10485 #ifdef I_ARPA_INET
10486 #include <arpa/inet.h>
10487 #endif
10488 #ifdef htonl
10489 printf("Defined as a macro.");
10490 #endif
10491 EOM
10492         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
10493         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
10494                 val="$define"
10495                 echo "But it seems to be defined as a macro." >&4
10496         fi
10497         $rm -f htonl.?
10498         ;;
10499 esac
10500 set d_htonl
10501 eval $setvar
10502
10503 : see if iconv exists
10504 set iconv d_iconv
10505 eval $inlibc
10506
10507 : index or strchr
10508 echo " "
10509 if set index val -f; eval $csym; $val; then
10510         if set strchr val -f d_strchr; eval $csym; $val; then
10511                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
10512                         val="$define"
10513                         vali="$undef"
10514                         echo "strchr() found." >&4
10515                 else
10516                         val="$undef"
10517                         vali="$define"
10518                         echo "index() found." >&4
10519                 fi
10520         else
10521                 val="$undef"
10522                 vali="$define"
10523                 echo "index() found." >&4
10524         fi
10525 else
10526         if set strchr val -f d_strchr; eval $csym; $val; then
10527                 val="$define"
10528                 vali="$undef"
10529                 echo "strchr() found." >&4
10530         else
10531                 echo "No index() or strchr() found!" >&4
10532                 val="$undef"
10533                 vali="$undef"
10534         fi
10535 fi
10536 set d_strchr; eval $setvar
10537 val="$vali"
10538 set d_index; eval $setvar
10539
10540 : check whether inet_aton exists
10541 set inet_aton d_inetaton
10542 eval $inlibc
10543
10544 : Look for isascii
10545 echo " "
10546 $cat >isascii.c <<'EOCP'
10547 #include <stdio.h>
10548 #include <ctype.h>
10549 int main() {
10550         int c = 'A';
10551         if (isascii(c))
10552                 exit(0);
10553         else
10554                 exit(1);
10555 }
10556 EOCP
10557 set isascii
10558 if eval $compile; then
10559         echo "isascii() found." >&4
10560         val="$define"
10561 else
10562         echo "isascii() NOT found." >&4
10563         val="$undef"
10564 fi
10565 set d_isascii
10566 eval $setvar
10567 $rm -f isascii*
10568
10569 : see if isnan exists
10570 set isnan d_isnan
10571 eval $inlibc
10572
10573 : see if isnanl exists
10574 set isnanl d_isnanl
10575 eval $inlibc
10576
10577 : see if killpg exists
10578 set killpg d_killpg
10579 eval $inlibc
10580
10581 : see if lchown exists
10582 echo " "
10583 $cat > try.c <<'EOCP'
10584 /* System header to define __stub macros and hopefully few prototypes,
10585     which can conflict with char lchown(); below.  */
10586 #include <assert.h>
10587 /* Override any gcc2 internal prototype to avoid an error.  */
10588 /* We use char because int might match the return type of a gcc2
10589    builtin and then its argument prototype would still apply.  */
10590 char lchown();
10591 int main() {
10592     /*  The GNU C library defines this for functions which it implements
10593         to always fail with ENOSYS.  Some functions are actually named
10594         something starting with __ and the normal name is an alias.  */
10595 #if defined (__stub_lchown) || defined (__stub___lchown)
10596 choke me
10597 #else
10598 lchown();
10599 #endif
10600 ; return 0; }
10601 EOCP
10602 set try
10603 if eval $compile; then
10604     $echo "lchown() found." >&4
10605     val="$define"
10606 else
10607     $echo "lchown() NOT found." >&4
10608     val="$undef"
10609 fi
10610 set d_lchown
10611 eval $setvar
10612
10613 : See if number of significant digits in a double precision number is known
10614 echo " "
10615 $cat >ldbl_dig.c <<EOM
10616 #$i_limits I_LIMITS
10617 #$i_float I_FLOAT
10618 #ifdef I_LIMITS
10619 #include <limits.h>
10620 #endif
10621 #ifdef I_FLOAT
10622 #include <float.h>
10623 #endif
10624 #ifdef LDBL_DIG
10625 printf("Contains LDBL_DIG");
10626 #endif
10627 EOM
10628 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
10629 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
10630         echo "LDBL_DIG found." >&4
10631         val="$define"
10632 else
10633         echo "LDBL_DIG NOT found." >&4
10634         val="$undef"
10635 fi
10636 $rm -f ldbl_dig.?
10637 set d_ldbl_dig
10638 eval $setvar
10639
10640 : see if link exists
10641 set link d_link
10642 eval $inlibc
10643
10644 : see if localeconv exists
10645 set localeconv d_locconv
10646 eval $inlibc
10647
10648 : see if lockf exists
10649 set lockf d_lockf
10650 eval $inlibc
10651
10652 : see if prototype for lseek is available
10653 echo " "
10654 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
10655 eval $hasproto
10656
10657 : see if lstat exists
10658 set lstat d_lstat
10659 eval $inlibc
10660
10661 : see if madvise exists
10662 set madvise d_madvise
10663 eval $inlibc
10664
10665 : see if mblen exists
10666 set mblen d_mblen
10667 eval $inlibc
10668
10669 : see if mbstowcs exists
10670 set mbstowcs d_mbstowcs
10671 eval $inlibc
10672
10673 : see if mbtowc exists
10674 set mbtowc d_mbtowc
10675 eval $inlibc
10676
10677 : see if memchr exists
10678 set memchr d_memchr
10679 eval $inlibc
10680
10681 : see if memcmp exists
10682 set memcmp d_memcmp
10683 eval $inlibc
10684
10685 : see if memcpy exists
10686 set memcpy d_memcpy
10687 eval $inlibc
10688
10689 : see if memmove exists
10690 set memmove d_memmove
10691 eval $inlibc
10692
10693 : see if memset exists
10694 set memset d_memset
10695 eval $inlibc
10696
10697 : see if mkdir exists
10698 set mkdir d_mkdir
10699 eval $inlibc
10700
10701 : see if mkdtemp exists
10702 set mkdtemp d_mkdtemp
10703 eval $inlibc
10704
10705 : see if mkfifo exists
10706 set mkfifo d_mkfifo
10707 eval $inlibc
10708
10709 : see if mkstemp exists
10710 set mkstemp d_mkstemp
10711 eval $inlibc
10712
10713 : see if mkstemps exists
10714 set mkstemps d_mkstemps
10715 eval $inlibc
10716
10717 : see if mktime exists
10718 set mktime d_mktime
10719 eval $inlibc
10720
10721 : see if this is a sys/mman.h system
10722 set sys/mman.h i_sysmman
10723 eval $inhdr
10724
10725 : see if mmap exists
10726 set mmap d_mmap
10727 eval $inlibc
10728 : see what shmat returns
10729 : default to something harmless
10730 mmaptype='void *'
10731 case "$i_sysmman$d_mmap" in
10732 "$define$define")
10733         $cat >mmap.c <<'END'
10734 #include <sys/mman.h>
10735 void *mmap();
10736 END
10737         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
10738                 mmaptype='void *'
10739         else
10740                 mmaptype='caddr_t'
10741         fi
10742         echo "and it returns ($mmaptype)." >&4
10743         ;;
10744 esac
10745
10746
10747
10748 : see if modfl exists
10749 set modfl d_modfl
10750 eval $inlibc
10751
10752 d_modfl_pow32_bug="$undef"
10753
10754 case "$d_longdbl$d_modfl" in
10755 $define$define)
10756         $cat <<EOM
10757 Checking to see whether your modfl() is okay for large values...
10758 EOM
10759 $cat >try.c <<EOCP
10760 #include <math.h> 
10761 #include <stdio.h>
10762 int main() {
10763     long double nv = 4294967303.15;
10764     long double v, w;
10765     v = modfl(nv, &w);         
10766 #ifdef __GLIBC__
10767     printf("glibc");
10768 #endif
10769     printf(" %"$sPRIfldbl" %"$sPRIfldbl" %"$sPRIfldbl"\n", nv, v, w);
10770     return 0;
10771 }
10772 EOCP
10773         case "$osname:$gccversion" in
10774         aix:)   saveccflags="$ccflags"
10775                 ccflags="$ccflags -qlongdouble" ;; # to avoid core dump
10776         esac
10777         set try
10778         if eval $compile; then
10779                 foo=`$run ./try`
10780                 case "$foo" in
10781                 *" 4294967303.150000 1.150000 4294967302.000000")
10782                         echo >&4 "Your modfl() is broken for large values."
10783                         d_modfl_pow32_bug="$define"
10784                         case "$foo" in
10785                         glibc)  echo >&4 "You should upgrade your glibc to at least 2.2.2 to get a fixed modfl()."
10786                         ;;
10787                         esac
10788                         ;;
10789                 *" 4294967303.150000 0.150000 4294967303.000000")
10790                         echo >&4 "Your modfl() seems okay for large values."
10791                         ;;
10792                 *)      echo >&4 "I don't understand your modfl() at all."
10793                         d_modfl="$undef"
10794                         ;;
10795                 esac
10796                 $rm -f try.* try core core.try.*
10797         else
10798                 echo "I cannot figure out whether your modfl() is okay, assuming it isn't."
10799                 d_modfl="$undef"
10800         fi
10801         case "$osname:$gccversion" in
10802         aix:)   $ccflags="$saveccflags" ;; # restore
10803         esac
10804         ;;
10805 esac
10806
10807 : see if mprotect exists
10808 set mprotect d_mprotect
10809 eval $inlibc
10810
10811 : see if msgctl exists
10812 set msgctl d_msgctl
10813 eval $inlibc
10814
10815 : see if msgget exists
10816 set msgget d_msgget
10817 eval $inlibc
10818
10819 : see if msgsnd exists
10820 set msgsnd d_msgsnd
10821 eval $inlibc
10822
10823 : see if msgrcv exists
10824 set msgrcv d_msgrcv
10825 eval $inlibc
10826
10827 : see how much of the 'msg*(2)' library is present.
10828 h_msg=true
10829 echo " "
10830 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
10831 *"$undef"*) h_msg=false;;
10832 esac
10833 case "$osname" in
10834 freebsd)
10835     case "`ipcs 2>&1`" in
10836     "SVID messages"*"not configured"*)
10837         echo "Your $osname does not have the msg*(2) configured." >&4
10838         h_msg=false
10839         val="$undef"
10840         set msgctl d_msgctl
10841         eval $setvar
10842         set msgget d_msgget
10843         eval $setvar
10844         set msgsnd d_msgsnd
10845         eval $setvar
10846         set msgrcv d_msgrcv
10847         eval $setvar
10848         ;;
10849     esac
10850     ;;
10851 esac
10852 : we could also check for sys/ipc.h ...
10853 if $h_msg && $test `./findhdr sys/msg.h`; then
10854         echo "You have the full msg*(2) library." >&4
10855         val="$define"
10856 else
10857         echo "You don't have the full msg*(2) library." >&4
10858         val="$undef"
10859 fi
10860 set d_msg
10861 eval $setvar
10862
10863
10864 echo " "
10865 echo "Checking to see if your system supports struct msghdr..." >&4
10866 set d_msghdr_s msghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
10867 eval $hasstruct
10868 case "$d_msghdr_s" in
10869 "$define")      echo "Yes, it does."   ;;
10870 *)              echo "No, it doesn't." ;;
10871 esac
10872
10873
10874 : see if msync exists
10875 set msync d_msync
10876 eval $inlibc
10877
10878 : see if munmap exists
10879 set munmap d_munmap
10880 eval $inlibc
10881
10882 : see if nice exists
10883 set nice d_nice
10884 eval $inlibc
10885
10886 : check for length of character
10887 echo " "
10888 case "$charsize" in
10889 '')
10890         echo "Checking to see how big your characters are (hey, you never know)..." >&4
10891         $cat >try.c <<'EOCP'
10892 #include <stdio.h>
10893 int main()
10894 {
10895     printf("%d\n", (int)sizeof(char));
10896     exit(0);
10897 }
10898 EOCP
10899         set try
10900         if eval $compile_ok; then
10901                 dflt=`$run ./try`
10902         else
10903                 dflt='1'
10904                 echo "(I can't seem to compile the test program.  Guessing...)"
10905         fi
10906         ;;
10907 *)
10908         dflt="$charsize"
10909         ;;
10910 esac
10911 rp="What is the size of a character (in bytes)?"
10912 . ./myread
10913 charsize="$ans"
10914 $rm -f try.c try
10915
10916 : check for volatile keyword
10917 echo " "
10918 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10919 $cat >try.c <<'EOCP'
10920 int main()
10921 {
10922         typedef struct _goo_struct goo_struct;
10923         goo_struct * volatile goo = ((goo_struct *)0);
10924         struct _goo_struct {
10925                 long long_int;
10926                 int reg_int;
10927                 char char_var;
10928         };
10929         typedef unsigned short foo_t;
10930         char *volatile foo;
10931         volatile int bar;
10932         volatile foo_t blech;
10933         foo = foo;
10934 }
10935 EOCP
10936 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10937         val="$define"
10938         echo "Yup, it does."
10939 else
10940         val="$undef"
10941         echo "Nope, it doesn't."
10942 fi
10943 set d_volatile
10944 eval $setvar
10945 $rm -f try.*
10946
10947
10948 echo " "
10949 $echo "Choosing the C types to be used for Perl's internal types..." >&4
10950
10951 case "$use64bitint:$d_quad:$quadtype" in
10952 define:define:?*)
10953         ivtype="$quadtype"
10954         uvtype="$uquadtype"
10955         ivsize=8
10956         uvsize=8
10957         ;;
10958 *)      ivtype="long"
10959         uvtype="unsigned long"
10960         ivsize=$longsize
10961         uvsize=$longsize
10962         ;;
10963 esac
10964
10965 case "$uselongdouble:$d_longdbl" in
10966 define:define)
10967         nvtype="long double"
10968         nvsize=$longdblsize
10969         ;;
10970 *)      nvtype=double
10971         nvsize=$doublesize
10972         ;;
10973 esac
10974
10975 $echo "(IV will be "$ivtype", $ivsize bytes)"
10976 $echo "(UV will be "$uvtype", $uvsize bytes)"
10977 $echo "(NV will be "$nvtype", $nvsize bytes)"
10978
10979 $cat >try.c <<EOCP
10980 #$i_inttypes I_INTTYPES
10981 #ifdef I_INTTYPES
10982 #include <inttypes.h>
10983 #endif
10984 #include <stdio.h>
10985 int main() {
10986 #ifdef INT8
10987    int8_t i =  INT8_MAX;
10988   uint8_t u = UINT8_MAX;
10989   printf("int8_t\n");
10990 #endif
10991 #ifdef INT16
10992    int16_t i =  INT16_MAX;
10993   uint16_t i = UINT16_MAX;
10994   printf("int16_t\n");
10995 #endif
10996 #ifdef INT32
10997    int32_t i =  INT32_MAX;
10998   uint32_t u = UINT32_MAX;
10999   printf("int32_t\n");
11000 #endif
11001 }
11002 EOCP
11003
11004 case "$i8type" in
11005 '')     case "$charsize" in
11006         1)      i8type=char
11007                 u8type="unsigned char"
11008                 i8size=$charsize
11009                 u8size=$charsize
11010                 ;;
11011         esac
11012         ;;
11013 esac
11014 case "$i8type" in
11015 '')     set try -DINT8
11016         if eval $compile; then
11017                 case "`$run ./try`" in
11018                 int8_t) i8type=int8_t
11019                         u8type=uint8_t
11020                         i8size=1
11021                         u8size=1
11022                         ;;
11023                 esac
11024         fi
11025         ;;
11026 esac
11027 case "$i8type" in
11028 '')     if $test $charsize -ge 1; then
11029                 i8type=char
11030                 u8type="unsigned char"
11031                 i8size=$charsize
11032                 u8size=$charsize
11033         fi
11034         ;;
11035 esac
11036
11037 case "$i16type" in
11038 '')     case "$shortsize" in
11039         2)      i16type=short
11040                 u16type="unsigned short"
11041                 i16size=$shortsize
11042                 u16size=$shortsize
11043                 ;;
11044         esac
11045         ;;
11046 esac
11047 case "$i16type" in
11048 '')     set try -DINT16
11049         if eval $compile; then
11050                 case "`$run ./try`" in
11051                 int16_t)
11052                         i16type=int16_t
11053                         u16type=uint16_t
11054                         i16size=2
11055                         u16size=2
11056                         ;;
11057                 esac
11058         fi
11059         ;;
11060 esac
11061 case "$i16type" in
11062 '')     if $test $shortsize -ge 2; then
11063                 i16type=short
11064                 u16type="unsigned short"
11065                 i16size=$shortsize
11066                 u16size=$shortsize
11067         fi
11068         ;;
11069 esac
11070
11071 case "$i32type" in
11072 '')     case "$longsize" in
11073         4)      i32type=long
11074                 u32type="unsigned long"
11075                 i32size=$longsize
11076                 u32size=$longsize
11077                 ;;
11078         *)      case "$intsize" in
11079                 4)      i32type=int
11080                         u32type="unsigned int"
11081                         i32size=$intsize
11082                         u32size=$intsize
11083                         ;;
11084                 esac
11085                 ;;
11086         esac
11087         ;;
11088 esac
11089 case "$i32type" in
11090 '')     set try -DINT32
11091         if eval $compile; then
11092                 case "`$run ./try`" in
11093                 int32_t)
11094                         i32type=int32_t
11095                         u32type=uint32_t
11096                         i32size=4
11097                         u32size=4
11098                         ;;
11099                 esac
11100         fi
11101         ;;
11102 esac
11103 case "$i32type" in
11104 '')     if $test $intsize -ge 4; then
11105                 i32type=int
11106                 u32type="unsigned int"
11107                 i32size=$intsize
11108                 u32size=$intsize
11109         fi
11110         ;;
11111 esac
11112
11113 case "$i64type" in
11114 '')     case "$d_quad:$quadtype" in
11115         define:?*)
11116                 i64type="$quadtype"
11117                 u64type="$uquadtype"
11118                 i64size=8
11119                 u64size=8
11120                 ;;
11121         esac
11122         ;;
11123 esac
11124
11125 $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
11126 : volatile so that the compiler has to store it out to memory.
11127 if test X"$d_volatile" = X"$define"; then
11128         volatile=volatile
11129 fi
11130 $cat <<EOP >try.c
11131 #include <stdio.h>
11132 #include <sys/types.h>
11133 #include <signal.h>
11134 #ifdef SIGFPE
11135 $volatile int bletched = 0;
11136 $signal_t blech(s) int s; { bletched = 1; }
11137 #endif
11138 int main() {
11139     $uvtype u = 0;
11140     $nvtype d;
11141     int     n = 8 * $uvsize;
11142     int     i;
11143 #ifdef SIGFPE
11144     signal(SIGFPE, blech);
11145 #endif
11146
11147     for (i = 0; i < n; i++) {
11148       u = u << 1 | ($uvtype)1;
11149       d = ($nvtype)u;
11150       if (($uvtype)d != u)
11151         break;
11152       if (d <= 0)
11153         break;
11154       d = ($nvtype)(u - 1);
11155       if (($uvtype)d != (u - 1))
11156         break;
11157 #ifdef SIGFPE
11158       if (bletched) {
11159         break;
11160 #endif
11161       } 
11162     }
11163     printf("%d\n", ((i == n) ? -n : i));
11164     exit(0);
11165 }
11166 EOP
11167 set try
11168
11169 d_nv_preserves_uv="$undef"
11170 if eval $compile; then
11171         d_nv_preserves_uv_bits="`$run ./try`"
11172 fi
11173 case "$d_nv_preserves_uv_bits" in
11174 \-[1-9]*)       
11175         d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
11176         $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11177         d_nv_preserves_uv="$define"
11178         ;;
11179 [1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11180         d_nv_preserves_uv="$undef" ;;
11181 *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
11182         d_nv_preserves_uv_bits="$undef" ;;
11183 esac
11184
11185 $rm -f try.* try
11186
11187
11188 : check for off64_t
11189 echo " "
11190 echo "Checking to see if you have off64_t..." >&4
11191 $cat >try.c <<EOCP
11192 #include <sys/types.h>
11193 #include <unistd.h>
11194 int main() { off64_t x = 7; }
11195 EOCP
11196 set try
11197 if eval $compile; then
11198         val="$define"
11199         echo "You have off64_t."
11200 else
11201         val="$undef"
11202         echo "You do not have off64_t."
11203         case "$lseeksize" in
11204         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
11205         esac
11206 fi
11207 $rm -f try.* try
11208 set d_off64_t
11209 eval $setvar
11210
11211 : see if POSIX threads are available
11212 set pthread.h i_pthread
11213 eval $inhdr
11214
11215
11216
11217
11218 : how to create joinable pthreads
11219 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
11220         echo " "
11221         echo "Checking what constant to use for creating joinable pthreads..." >&4 
11222         $cat >try.c <<'EOCP'
11223 #include <pthread.h>
11224 int main() {
11225     int detachstate = JOINABLE;
11226 }
11227 EOCP
11228         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
11229         if eval $compile; then
11230                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
11231                 val="$undef" # Yes, undef.
11232                 set d_old_pthread_create_joinable
11233                 eval $setvar
11234                 val=""
11235                 set old_pthread_create_joinable
11236                 eval $setvar
11237         else
11238                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
11239                 if eval $compile; then
11240                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
11241                         val="$define"
11242                         set d_old_pthread_create_joinable
11243                         eval $setvar
11244                         val=PTHREAD_CREATE_UNDETACHED
11245                         set old_pthread_create_joinable
11246                         eval $setvar
11247                 else            
11248                         set try -DJOINABLE=__UNDETACHED
11249                         if eval $compile; then
11250                                 echo "You seem to use __UNDETACHED." >&4
11251                                 val="$define"
11252                                 set d_old_pthread_create_joinable
11253                                 eval $setvar
11254                                 val=__UNDETACHED
11255                                 set old_pthread_create_joinable
11256                                 eval $setvar
11257                         else
11258                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
11259                                 val="$define"
11260                                 set d_old_pthread_create_joinable
11261                                 eval $setvar
11262                                 val=0
11263                                 set old_pthread_create_joinable
11264                                 eval $setvar
11265                         fi
11266                 fi
11267         fi
11268         $rm -f try try.*
11269 else
11270     d_old_pthread_create_joinable="$undef"
11271     old_pthread_create_joinable=""
11272 fi
11273
11274 : see if pause exists
11275 set pause d_pause
11276 eval $inlibc
11277
11278 : see if pipe exists
11279 set pipe d_pipe
11280 eval $inlibc
11281
11282 : see if poll exists
11283 set poll d_poll
11284 eval $inlibc
11285
11286
11287 : see whether the various POSIXish _yields exist
11288 $cat >try.c <<EOP
11289 #include <pthread.h>
11290 #include <stdio.h>
11291 int main() {
11292 #ifdef SCHED_YIELD
11293         sched_yield();
11294 #else
11295 #ifdef PTHREAD_YIELD
11296         pthread_yield();
11297 #else
11298 #ifdef PTHREAD_YIELD_NULL
11299         pthread_yield(NULL);
11300 #endif
11301 #endif
11302 #endif
11303 }
11304 EOP
11305 : see if sched_yield exists
11306 set try -DSCHED_YIELD
11307 if eval $compile; then
11308     val="$define"
11309     sched_yield='sched_yield()'
11310 else
11311     val="$undef"
11312 fi
11313 case "$usethreads" in
11314 $define)
11315         case "$val" in
11316         $define) echo 'sched_yield() found.' >&4        ;;
11317         *)       echo 'sched_yield() NOT found.' >&4    ;;
11318         esac
11319 esac
11320 set d_sched_yield
11321 eval $setvar
11322
11323 : see if pthread_yield exists
11324 set try -DPTHREAD_YIELD
11325 if eval $compile; then
11326     val="$define"
11327     case "$sched_yield" in
11328     '') sched_yield='pthread_yield()' ;;
11329     esac
11330 else
11331     set try -DPTHREAD_YIELD_NULL
11332     if eval $compile; then
11333         val="$define"
11334         case "$sched_yield" in
11335         '') sched_yield='pthread_yield(NULL)' ;;
11336         esac
11337     else
11338         val="$undef"
11339     fi
11340 fi
11341 case "$usethreads" in
11342 $define)
11343         case "$val" in
11344         $define) echo 'pthread_yield() found.' >&4      ;;
11345         *)       echo 'pthread_yield() NOT found.' >&4  ;;
11346         esac
11347         ;;
11348 esac
11349 set d_pthread_yield
11350 eval $setvar
11351
11352 case "$sched_yield" in
11353 '') sched_yield=undef ;;
11354 esac
11355
11356 $rm -f try try.*
11357
11358 : see if this is a pwd.h system
11359 set pwd.h i_pwd
11360 eval $inhdr
11361
11362 case "$i_pwd" in
11363 $define)
11364         xxx=`./findhdr pwd.h`
11365         $cppstdin $cppflags $cppminus < $xxx >$$.h
11366
11367         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
11368                 val="$define"
11369         else
11370                 val="$undef"
11371         fi
11372         set d_pwquota
11373         eval $setvar
11374
11375         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
11376                 val="$define"
11377         else
11378                 val="$undef"
11379         fi
11380         set d_pwage
11381         eval $setvar
11382
11383         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
11384                 val="$define"
11385         else
11386                 val="$undef"
11387         fi
11388         set d_pwchange
11389         eval $setvar
11390
11391         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
11392                 val="$define"
11393         else
11394                 val="$undef"
11395         fi
11396         set d_pwclass
11397         eval $setvar
11398
11399         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
11400                 val="$define"
11401         else
11402                 val="$undef"
11403         fi
11404         set d_pwexpire
11405         eval $setvar
11406
11407         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
11408                 val="$define"
11409         else
11410                 val="$undef"
11411         fi
11412         set d_pwcomment
11413         eval $setvar
11414
11415         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
11416                 val="$define"
11417         else
11418                 val="$undef"
11419         fi
11420         set d_pwgecos
11421         eval $setvar
11422
11423         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
11424                 val="$define"
11425         else
11426                 val="$undef"
11427         fi
11428         set d_pwpasswd
11429         eval $setvar
11430
11431         $rm -f $$.h
11432         ;;
11433 *)
11434         val="$undef"; 
11435         set d_pwquota; eval $setvar
11436         set d_pwage; eval $setvar
11437         set d_pwchange; eval $setvar
11438         set d_pwclass; eval $setvar
11439         set d_pwexpire; eval $setvar
11440         set d_pwcomment; eval $setvar
11441         set d_pwgecos; eval $setvar
11442         set d_pwpasswd; eval $setvar
11443         ;;
11444 esac
11445
11446 : see if readdir and friends exist
11447 set readdir d_readdir
11448 eval $inlibc
11449 set seekdir d_seekdir
11450 eval $inlibc
11451 set telldir d_telldir
11452 eval $inlibc
11453 set rewinddir d_rewinddir
11454 eval $inlibc
11455
11456 : see if readlink exists
11457 set readlink d_readlink
11458 eval $inlibc
11459
11460 : see if readv exists
11461 set readv d_readv
11462 eval $inlibc
11463
11464 : see if recvmsg exists
11465 set recvmsg d_recvmsg
11466 eval $inlibc
11467
11468 : see if rename exists
11469 set rename d_rename
11470 eval $inlibc
11471
11472 : see if rmdir exists
11473 set rmdir d_rmdir
11474 eval $inlibc
11475
11476 : see if memory.h is available.
11477 val=''
11478 set memory.h val
11479 eval $inhdr
11480
11481 : See if it conflicts with string.h
11482 case "$val" in
11483 $define)
11484         case "$strings" in
11485         '') ;;
11486         *)
11487                 $cppstdin $cppflags $cppminus < $strings > mem.h
11488                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
11489                         echo " "
11490                         echo "We won't be including <memory.h>."
11491                         val="$undef"
11492                 fi
11493                 $rm -f mem.h
11494                 ;;
11495         esac
11496 esac
11497 set i_memory
11498 eval $setvar
11499
11500 : can bcopy handle overlapping blocks?
11501 echo " "
11502 val="$undef"
11503 case "$d_memmove" in
11504 "$define") echo "I'll use memmove() instead of bcopy() for overlapping copies." ;;
11505 *)      case "$d_bcopy" in
11506         "$define")
11507                 echo "Checking to see if bcopy() can do overlapping copies..." >&4
11508                 $cat >try.c <<EOCP
11509 #$i_memory I_MEMORY
11510 #$i_stdlib I_STDLIB
11511 #$i_string I_STRING
11512 #$i_unistd I_UNISTD
11513 EOCP
11514         $cat >>try.c <<'EOCP'
11515 #include <stdio.h>
11516 #ifdef I_MEMORY
11517 #  include <memory.h>
11518 #endif
11519 #ifdef I_STDLIB
11520 #  include <stdlib.h>
11521 #endif
11522 #ifdef I_STRING
11523 #  include <string.h>
11524 #else
11525 #  include <strings.h>
11526 #endif
11527 #ifdef I_UNISTD
11528 #  include <unistd.h>  /* Needed for NetBSD */
11529 #endif
11530 int main()
11531 {
11532 char buf[128], abc[128];
11533 char *b;
11534 int len;
11535 int off;
11536 int align;
11537
11538 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11539    try to store the string in read-only memory. */
11540 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
11541
11542 for (align = 7; align >= 0; align--) {
11543         for (len = 36; len; len--) {
11544                 b = buf+align;
11545                 bcopy(abc, b, len);
11546                 for (off = 1; off <= len; off++) {
11547                         bcopy(b, b+off, len);
11548                         bcopy(b+off, b, len);
11549                         if (bcmp(b, abc, len))
11550                                 exit(1);
11551                 }
11552         }
11553 }
11554 exit(0);
11555 }
11556 EOCP
11557                 set try
11558                 if eval $compile_ok; then
11559                         if ./try 2>/dev/null; then
11560                                 echo "Yes, it can."
11561                                 val="$define"
11562                         else
11563                                 echo "It can't, sorry."
11564                         fi
11565                 else
11566                         echo "(I can't compile the test program, so we'll assume not...)"
11567                 fi
11568                 ;;
11569         esac
11570         $rm -f try.* try core
11571         ;;
11572 esac
11573 set d_safebcpy
11574 eval $setvar
11575
11576 : can memcpy handle overlapping blocks?
11577 echo " "
11578 val="$undef"
11579 case "$d_memmove" in
11580 "$define") echo "I'll use memmove() instead of memcpy() for overlapping copies." ;;
11581 *)      case "$d_memcpy" in
11582         "$define")
11583                 echo "Checking to see if memcpy() can do overlapping copies..." >&4
11584                 $cat >try.c <<EOCP
11585 #$i_memory I_MEMORY
11586 #$i_stdlib I_STDLIB
11587 #$i_string I_STRING
11588 #$i_unistd I_UNISTD
11589 EOCP
11590         $cat >>try.c <<'EOCP'
11591 #include <stdio.h>
11592 #ifdef I_MEMORY
11593 #  include <memory.h>
11594 #endif
11595 #ifdef I_STDLIB
11596 #  include <stdlib.h>
11597 #endif
11598 #ifdef I_STRING
11599 #  include <string.h>
11600 #else
11601 #  include <strings.h>
11602 #endif
11603 #ifdef I_UNISTD
11604 #  include <unistd.h>  /* Needed for NetBSD */
11605 #endif
11606 int main()
11607 {
11608 char buf[128], abc[128];
11609 char *b;
11610 int len;
11611 int off;
11612 int align;
11613
11614 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11615    try to store the string in read-only memory. */
11616 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
11617
11618 for (align = 7; align >= 0; align--) {
11619         for (len = 36; len; len--) {
11620                 b = buf+align;
11621                 memcpy(b, abc, len);
11622                 for (off = 1; off <= len; off++) {
11623                         memcpy(b+off, b, len);
11624                         memcpy(b, b+off, len);
11625                         if (memcmp(b, abc, len))
11626                                 exit(1);
11627                 }
11628         }
11629 }
11630 exit(0);
11631 }
11632 EOCP
11633                 set try
11634                 if eval $compile_ok; then
11635                         if ./try 2>/dev/null; then
11636                                 echo "Yes, it can."
11637                                 val="$define"
11638                         else
11639                                 echo "It can't, sorry."
11640                         fi
11641                 else
11642                         echo "(I can't compile the test program, so we'll assume not...)"
11643                 fi
11644                 ;;
11645         esac
11646         $rm -f try.* try core
11647         ;;
11648 esac
11649 set d_safemcpy
11650 eval $setvar
11651
11652 : can memcmp be trusted to compare relative magnitude?
11653 val="$undef"
11654 case "$d_memcmp" in
11655 "$define")
11656         echo " "
11657         echo "Checking if your memcmp() can compare relative magnitude..." >&4
11658         $cat >try.c <<EOCP
11659 #$i_memory I_MEMORY
11660 #$i_stdlib I_STDLIB
11661 #$i_string I_STRING
11662 #$i_unistd I_UNISTD
11663 EOCP
11664         $cat >>try.c <<'EOCP'
11665 #include <stdio.h>
11666 #ifdef I_MEMORY
11667 #  include <memory.h>
11668 #endif
11669 #ifdef I_STDLIB
11670 #  include <stdlib.h>
11671 #endif
11672 #ifdef I_STRING
11673 #  include <string.h>
11674 #else
11675 #  include <strings.h>
11676 #endif
11677 #ifdef I_UNISTD
11678 #  include <unistd.h>  /* Needed for NetBSD */
11679 #endif
11680 int main()
11681 {
11682 char a = -1;
11683 char b = 0;
11684 if ((a < b) && memcmp(&a, &b, 1) < 0)
11685         exit(1);
11686 exit(0);
11687 }
11688 EOCP
11689         set try
11690         if eval $compile_ok; then
11691                 if $run ./try 2>/dev/null; then
11692                         echo "Yes, it can."
11693                         val="$define"
11694                 else
11695                         echo "No, it can't (it uses signed chars)."
11696                 fi
11697         else
11698                 echo "(I can't compile the test program, so we'll assume not...)"
11699         fi
11700         ;;
11701 esac
11702 $rm -f try.* try core
11703 set d_sanemcmp
11704 eval $setvar
11705
11706 : see if prototype for sbrk is available
11707 echo " "
11708 set d_sbrkproto sbrk $i_unistd unistd.h
11709 eval $hasproto
11710
11711 : see if select exists
11712 set select d_select
11713 eval $inlibc
11714
11715 : see if semctl exists
11716 set semctl d_semctl
11717 eval $inlibc
11718
11719 : see if semget exists
11720 set semget d_semget
11721 eval $inlibc
11722
11723 : see if semop exists
11724 set semop d_semop
11725 eval $inlibc
11726
11727 : see how much of the 'sem*(2)' library is present.
11728 h_sem=true
11729 echo " "
11730 case "$d_semctl$d_semget$d_semop" in
11731 *"$undef"*) h_sem=false;;
11732 esac
11733 case "$osname" in
11734 freebsd)
11735     case "`ipcs 2>&1`" in
11736     "SVID messages"*"not configured"*)
11737         echo "Your $osname does not have the sem*(2) configured." >&4
11738         h_sem=false
11739         val="$undef"
11740         set semctl d_semctl
11741         eval $setvar
11742         set semget d_semget
11743         eval $setvar
11744         set semop d_semop
11745         eval $setvar
11746         ;;
11747     esac
11748     ;;
11749 esac
11750 : we could also check for sys/ipc.h ...
11751 if $h_sem && $test `./findhdr sys/sem.h`; then
11752         echo "You have the full sem*(2) library." >&4
11753         val="$define"
11754 else
11755         echo "You don't have the full sem*(2) library." >&4
11756         val="$undef"
11757 fi
11758 set d_sem
11759 eval $setvar
11760
11761 : see whether sys/sem.h defines union semun
11762 echo " "
11763 $cat > try.c <<'END'
11764 #include <sys/types.h>
11765 #include <sys/ipc.h>
11766 #include <sys/sem.h>
11767 int main () { union semun semun; semun.buf = 0; }
11768 END
11769 set try
11770 if eval $compile; then
11771     echo "You have union semun in <sys/sem.h>." >&4
11772     val="$define"
11773 else
11774     echo "You do not have union semun in <sys/sem.h>." >&4
11775     val="$undef"
11776 fi
11777 $rm -f try try.c try.h
11778 set d_union_semun
11779 eval $setvar
11780
11781 : see how to do semctl IPC_STAT
11782 case "$d_sem" in
11783 $define)
11784     : see whether semctl IPC_STAT can use union semun
11785     echo " "
11786     $cat > try.h <<END
11787 #ifndef S_IRUSR
11788 #   ifdef S_IREAD
11789 #       define S_IRUSR S_IREAD
11790 #       define S_IWUSR S_IWRITE
11791 #       define S_IXUSR S_IEXEC
11792 #   else
11793 #       define S_IRUSR 0400
11794 #       define S_IWUSR 0200
11795 #       define S_IXUSR 0100
11796 #   endif
11797 #   define S_IRGRP (S_IRUSR>>3)
11798 #   define S_IWGRP (S_IWUSR>>3)
11799 #   define S_IXGRP (S_IXUSR>>3)
11800 #   define S_IROTH (S_IRUSR>>6)
11801 #   define S_IWOTH (S_IWUSR>>6)
11802 #   define S_IXOTH (S_IXUSR>>6)
11803 #endif
11804 #ifndef S_IRWXU
11805 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
11806 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
11807 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
11808 #endif
11809 END
11810
11811     $cat > try.c <<END
11812 #include <sys/types.h>
11813 #include <sys/ipc.h>
11814 #include <sys/sem.h>
11815 #include <sys/stat.h>
11816 #include <stdio.h>
11817 #include <errno.h>
11818 #include "try.h"
11819 #ifndef errno
11820 extern int errno;
11821 #endif
11822 #$d_union_semun HAS_UNION_SEMUN
11823 int main() {
11824     union semun
11825 #ifndef HAS_UNION_SEMUN
11826     {
11827         int val;
11828         struct semid_ds *buf;
11829         unsigned short *array;
11830     }
11831 #endif
11832     arg;
11833     int sem, st;
11834
11835 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
11836     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11837     if (sem > -1) {
11838         struct semid_ds argbuf;
11839         arg.buf = &argbuf;
11840 #       ifdef IPC_STAT
11841         st = semctl(sem, 0, IPC_STAT, arg);
11842         if (st == 0)
11843             printf("semun\n");
11844         else
11845 #       endif /* IPC_STAT */
11846             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11847 #       ifdef IPC_RMID
11848         if (semctl(sem, 0, IPC_RMID, arg) != 0)
11849 #       endif /* IPC_RMID */
11850             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11851     } else
11852 #endif /* IPC_PRIVATE && ... */
11853         printf("semget failed: errno = %d\n", errno);
11854   return 0;
11855 }
11856 END
11857     val="$undef"
11858     set try
11859     if eval $compile; then
11860         xxx=`$run ./try`
11861         case "$xxx" in
11862         semun) val="$define" ;;
11863         esac
11864     fi
11865     $rm -f try try.c
11866     set d_semctl_semun
11867     eval $setvar
11868     case "$d_semctl_semun" in
11869     $define)
11870         echo "You can use union semun for semctl IPC_STAT." >&4
11871         also='also'
11872         ;;
11873     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
11874         also=''
11875         ;;
11876     esac
11877
11878     : see whether semctl IPC_STAT can use struct semid_ds pointer
11879     $cat > try.c <<'END'
11880 #include <sys/types.h>
11881 #include <sys/ipc.h>
11882 #include <sys/sem.h>
11883 #include <sys/stat.h>
11884 #include "try.h"
11885 #include <stdio.h>
11886 #include <errno.h>
11887 #ifndef errno
11888 extern int errno;
11889 #endif
11890 int main() {
11891     struct semid_ds arg;
11892     int sem, st;
11893
11894 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
11895     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11896     if (sem > -1) {
11897 #       ifdef IPC_STAT
11898         st = semctl(sem, 0, IPC_STAT, &arg);
11899         if (st == 0)
11900             printf("semid_ds\n");
11901         else
11902 #       endif /* IPC_STAT */
11903             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11904 #       ifdef IPC_RMID
11905         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
11906 #       endif /* IPC_RMID */
11907             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11908     } else
11909 #endif /* IPC_PRIVATE && ... */
11910         printf("semget failed: errno = %d\n", errno);
11911
11912     return 0;
11913 }
11914 END
11915     val="$undef"
11916     set try
11917     if eval $compile; then
11918         xxx=`$run ./try`
11919         case "$xxx" in
11920         semid_ds) val="$define" ;;
11921         esac
11922     fi
11923     $rm -f try try.c
11924     set d_semctl_semid_ds
11925     eval $setvar
11926     case "$d_semctl_semid_ds" in
11927     $define)
11928         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
11929         ;;
11930     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
11931         ;;
11932     esac
11933     $rm -f try.h
11934     ;;
11935 *)  val="$undef"
11936
11937     # We do not have the full sem*(2) library, so assume we can not
11938     # use either.
11939
11940     set d_semctl_semun
11941     eval $setvar
11942
11943     set d_semctl_semid_ds
11944     eval $setvar
11945     ;;
11946 esac
11947
11948 : see if sendmsg exists
11949 set sendmsg d_sendmsg
11950 eval $inlibc
11951
11952 : see if setegid exists
11953 set setegid d_setegid
11954 eval $inlibc
11955
11956 : see if seteuid exists
11957 set seteuid d_seteuid
11958 eval $inlibc
11959
11960 : see if setgrent exists
11961 set setgrent d_setgrent
11962 eval $inlibc
11963
11964 : see if sethostent exists
11965 set sethostent d_sethent
11966 eval $inlibc
11967
11968 : see if setitimer exists
11969 set setitimer d_setitimer
11970 eval $inlibc
11971
11972 : see if setlinebuf exists
11973 set setlinebuf d_setlinebuf
11974 eval $inlibc
11975
11976 : see if setlocale exists
11977 set setlocale d_setlocale
11978 eval $inlibc
11979
11980 : see if setnetent exists
11981 set setnetent d_setnent
11982 eval $inlibc
11983
11984 : see if setprotoent exists
11985 set setprotoent d_setpent
11986 eval $inlibc
11987
11988 : see if setpgid exists
11989 set setpgid d_setpgid
11990 eval $inlibc
11991
11992 : see if setpgrp2 exists
11993 set setpgrp2 d_setpgrp2
11994 eval $inlibc
11995
11996 : see if setpriority exists
11997 set setpriority d_setprior
11998 eval $inlibc
11999
12000 : see if setproctitle exists
12001 set setproctitle d_setproctitle
12002 eval $inlibc
12003
12004 : see if setpwent exists
12005 set setpwent d_setpwent
12006 eval $inlibc
12007
12008 : see if setregid exists
12009 set setregid d_setregid
12010 eval $inlibc
12011 set setresgid d_setresgid
12012 eval $inlibc
12013
12014 : see if setreuid exists
12015 set setreuid d_setreuid
12016 eval $inlibc
12017 set setresuid d_setresuid
12018 eval $inlibc
12019
12020 : see if setrgid exists
12021 set setrgid d_setrgid
12022 eval $inlibc
12023
12024 : see if setruid exists
12025 set setruid d_setruid
12026 eval $inlibc
12027
12028 : see if setservent exists
12029 set setservent d_setsent
12030 eval $inlibc
12031
12032 : see if setsid exists
12033 set setsid d_setsid
12034 eval $inlibc
12035
12036 : see if setvbuf exists
12037 set setvbuf d_setvbuf
12038 eval $inlibc
12039
12040 : see if sfio.h is available
12041 set sfio.h i_sfio
12042 eval $inhdr
12043
12044
12045 : see if sfio library is available
12046 case "$i_sfio" in
12047 $define)
12048         val=''
12049         set sfreserve val
12050         eval $inlibc
12051         ;;
12052 *)
12053         val="$undef"
12054         ;;
12055 esac
12056 : Ok, but do we want to use it.
12057 case "$val" in
12058 $define)
12059         case "$usesfio" in
12060         true|$define|[yY]*) dflt='y';;
12061         *) dflt='n';;
12062         esac
12063         echo "$package can use the sfio library, but it is experimental."
12064         case "$useperlio" in
12065         "$undef")
12066             echo "For sfio also the PerlIO abstraction layer is needed."
12067             echo "Earlier you said you wouldn't want that."
12068             ;;
12069         esac
12070         rp="You seem to have sfio available, do you want to try using it?"
12071         . ./myread
12072         case "$ans" in
12073         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
12074                 useperlio="$define"
12075                 val="$define"
12076                 ;;
12077         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
12078                 val="$undef"
12079                 ;;
12080         esac
12081         ;;
12082 *)      case "$usesfio" in
12083         true|$define|[yY]*)
12084                 echo "Sorry, cannot find sfio on this machine." >&4
12085                 echo "Ignoring your setting of usesfio=$usesfio." >&4
12086                 val="$undef"
12087                 ;;
12088         esac
12089         ;;
12090 esac
12091 set d_sfio
12092 eval $setvar
12093 case "$d_sfio" in
12094 $define) usesfio='true';;
12095 *) usesfio='false';;
12096 esac
12097 case "$d_sfio" in
12098 $define) ;;
12099 *)      : Remove sfio from list of libraries to use
12100         case "$libs" in
12101         *-lsfio*)
12102                 echo "Removing unneeded -lsfio from library list" >&4
12103                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
12104                 shift
12105                 libs="$*"
12106                 echo "libs = $libs" >&4
12107                 ;;
12108         esac
12109 ;;
12110 esac
12111
12112
12113 : see if shmctl exists
12114 set shmctl d_shmctl
12115 eval $inlibc
12116
12117 : see if shmget exists
12118 set shmget d_shmget
12119 eval $inlibc
12120
12121 : see if shmat exists
12122 set shmat d_shmat
12123 eval $inlibc
12124 : see what shmat returns
12125 case "$d_shmat" in
12126 "$define")
12127         $cat >shmat.c <<'END'
12128 #include <sys/shm.h>
12129 void *shmat();
12130 END
12131         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
12132                 shmattype='void *'
12133         else
12134                 shmattype='char *'
12135         fi
12136         echo "and it returns ($shmattype)." >&4
12137         : see if a prototype for shmat is available
12138         xxx=`./findhdr sys/shm.h`
12139         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
12140         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
12141                 val="$define"
12142         else
12143                 val="$undef"
12144         fi
12145         $rm -f shmat.[co]
12146         ;;
12147 *)
12148         val="$undef"
12149         ;;
12150 esac
12151 set d_shmatprototype
12152 eval $setvar
12153
12154 : see if shmdt exists
12155 set shmdt d_shmdt
12156 eval $inlibc
12157
12158 : see how much of the 'shm*(2)' library is present.
12159 h_shm=true
12160 echo " "
12161 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
12162 *"$undef"*) h_shm=false;;
12163 esac
12164 case "$osname" in
12165 freebsd)
12166     case "`ipcs 2>&1`" in
12167     "SVID shared memory"*"not configured"*)
12168         echo "Your $osname does not have the shm*(2) configured." >&4
12169         h_shm=false
12170         val="$undef"
12171         set shmctl d_shmctl
12172         evat $setvar
12173         set shmget d_shmget
12174         evat $setvar
12175         set shmat d_shmat
12176         evat $setvar
12177         set shmdt d_shmdt
12178         evat $setvar
12179         ;;
12180     esac
12181     ;;
12182 esac
12183 : we could also check for sys/ipc.h ...
12184 if $h_shm && $test `./findhdr sys/shm.h`; then
12185         echo "You have the full shm*(2) library." >&4
12186         val="$define"
12187 else
12188         echo "You don't have the full shm*(2) library." >&4
12189         val="$undef"
12190 fi
12191 set d_shm
12192 eval $setvar
12193
12194 echo " "
12195 : see if we have sigaction
12196 if set sigaction val -f d_sigaction; eval $csym; $val; then
12197         echo 'sigaction() found.' >&4
12198         $cat > try.c <<'EOP'
12199 #include <stdio.h>
12200 #include <sys/types.h>
12201 #include <signal.h>
12202 int main()
12203 {
12204     struct sigaction act, oact;
12205     act.sa_flags = 0;
12206     oact.sa_handler = 0;
12207     /* so that act and oact are used */
12208     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
12209 }
12210 EOP
12211         set try
12212         if eval $compile_ok; then
12213                 val="$define"
12214         else
12215                 echo "But you don't seem to have a useable struct sigaction." >&4
12216                 val="$undef"
12217         fi
12218 else
12219         echo 'sigaction NOT found.' >&4
12220         val="$undef"
12221 fi
12222 set d_sigaction; eval $setvar
12223 $rm -f try try$_o try.c
12224
12225 : see if sigprocmask exists
12226 set sigprocmask d_sigprocmask
12227 eval $inlibc
12228
12229 : see if sigsetjmp exists
12230 echo " "
12231 case "$d_sigsetjmp" in
12232 '')
12233         $cat >try.c <<'EOP'
12234 #include <setjmp.h>
12235 sigjmp_buf env;
12236 int set = 1;
12237 int main()
12238 {
12239         if (sigsetjmp(env,1))
12240                 exit(set);
12241         set = 0;
12242         siglongjmp(env, 1);
12243         exit(1);
12244 }
12245 EOP
12246         set try
12247         if eval $compile; then
12248                 if $run ./try >/dev/null 2>&1; then
12249                         echo "POSIX sigsetjmp found." >&4
12250                         val="$define"
12251                 else
12252                         $cat >&4 <<EOM
12253 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
12254 I'll ignore them.
12255 EOM
12256                         val="$undef"
12257                 fi
12258         else
12259                 echo "sigsetjmp not found." >&4
12260                 val="$undef"
12261         fi
12262         ;;
12263 *) val="$d_sigsetjmp"
12264         case "$d_sigsetjmp" in
12265         $define) echo "POSIX sigsetjmp found." >&4;;
12266         $undef) echo "sigsetjmp not found." >&4;;
12267         esac
12268         ;;
12269 esac
12270 set d_sigsetjmp
12271 eval $setvar
12272 $rm -f try.c try
12273
12274 : see if sockatmark exists
12275 set sockatmark d_sockatmark
12276 eval $inlibc
12277
12278 : see if prototype for sockatmark is available
12279 echo " "
12280 set d_sockatmarkproto sockatmark $d_socket sys/socket.h
12281 eval $hasproto
12282
12283 : see if socks5_init exists
12284 set socks5_init d_socks5_init
12285 eval $inlibc
12286
12287 : see if prototype for setresgid is available
12288 echo " "
12289 set d_sresgproto setresgid $i_unistd unistd.h
12290 eval $hasproto
12291
12292 : see if prototype for setresuid is available
12293 echo " "
12294 set d_sresuproto setresuid $i_unistd unistd.h
12295 eval $hasproto
12296
12297 : see if sys/stat.h is available
12298 set sys/stat.h i_sysstat
12299 eval $inhdr
12300
12301
12302 : see if stat knows about block sizes
12303 echo " "
12304 echo "Checking to see if your struct stat has st_blocks field..." >&4
12305 set d_statblks stat st_blocks $i_sysstat sys/stat.h
12306 eval $hasfield
12307
12308
12309 : see if this is a sys/vfs.h system
12310 set sys/vfs.h i_sysvfs
12311 eval $inhdr
12312
12313
12314 : see if this is a sys/statfs.h system
12315 set sys/statfs.h i_sysstatfs
12316 eval $inhdr
12317
12318
12319 echo " "
12320 echo "Checking to see if your system supports struct statfs..." >&4
12321 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
12322 eval $hasstruct
12323 case "$d_statfs_s" in
12324 "$define")      echo "Yes, it does."   ;;
12325 *)              echo "No, it doesn't." ;;
12326 esac
12327
12328
12329
12330 : see if struct statfs knows about f_flags
12331 case "$d_statfs_s" in
12332 define) 
12333         echo " "
12334         echo "Checking to see if your struct statfs has f_flags field..." >&4
12335         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
12336         eval $hasfield
12337         ;;
12338 *)      val="$undef"
12339         set d_statfs_f_flags
12340         eval $setvar
12341         ;;
12342 esac
12343 case "$d_statfs_f_flags" in
12344 "$define")      echo "Yes, it does."   ;;
12345 *)              echo "No, it doesn't." ;;
12346 esac
12347
12348 : see if _ptr and _cnt from stdio act std
12349 echo " "
12350
12351 if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12352         echo "(Looks like you have stdio.h from BSD.)"
12353         case "$stdio_ptr" in
12354         '') stdio_ptr='((fp)->_p)'
12355                 ptr_lval=$define
12356                 ;;
12357         *)      ptr_lval=$d_stdio_ptr_lval;;
12358         esac
12359         case "$stdio_cnt" in
12360         '') stdio_cnt='((fp)->_r)'
12361                 cnt_lval=$define
12362                 ;;
12363         *)      cnt_lval=$d_stdio_cnt_lval;;
12364         esac
12365         case "$stdio_base" in
12366         '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
12367         esac
12368         case "$stdio_bufsiz" in
12369         '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
12370         esac
12371 elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
12372         echo "(Looks like you have stdio.h from Linux.)"
12373         case "$stdio_ptr" in
12374         '') stdio_ptr='((fp)->_IO_read_ptr)'
12375                 ptr_lval=$define
12376                 ;;
12377         *)      ptr_lval=$d_stdio_ptr_lval;;
12378         esac
12379         case "$stdio_cnt" in
12380         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
12381                 cnt_lval=$undef
12382                 ;;
12383         *)      cnt_lval=$d_stdio_cnt_lval;;
12384         esac
12385         case "$stdio_base" in
12386         '') stdio_base='((fp)->_IO_read_base)';;
12387         esac
12388         case "$stdio_bufsiz" in
12389         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
12390         esac
12391 else
12392         case "$stdio_ptr" in
12393         '') stdio_ptr='((fp)->_ptr)'
12394                 ptr_lval=$define
12395                 ;;
12396         *)      ptr_lval=$d_stdio_ptr_lval;;
12397         esac
12398         case "$stdio_cnt" in
12399         '') stdio_cnt='((fp)->_cnt)'
12400                 cnt_lval=$define
12401                 ;;
12402         *)      cnt_lval=$d_stdio_cnt_lval;;
12403         esac
12404         case "$stdio_base" in
12405         '') stdio_base='((fp)->_base)';;
12406         esac
12407         case "$stdio_bufsiz" in
12408         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
12409         esac
12410 fi
12411
12412 : test whether _ptr and _cnt really work
12413 echo "Checking how std your stdio is..." >&4
12414 $cat >try.c <<EOP
12415 #include <stdio.h>
12416 #define FILE_ptr(fp)    $stdio_ptr
12417 #define FILE_cnt(fp)    $stdio_cnt
12418 int main() {
12419         FILE *fp = fopen("try.c", "r");
12420         char c = getc(fp);
12421         if (
12422                 18 <= FILE_cnt(fp) &&
12423                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12424         )
12425                 exit(0);
12426         exit(1);
12427 }
12428 EOP
12429 val="$undef"
12430 set try
12431 if eval $compile && $to try.c; then
12432         if $run ./try; then
12433                 echo "Your stdio acts pretty std."
12434                 val="$define"
12435         else
12436                 echo "Your stdio isn't very std."
12437         fi
12438 else
12439         echo "Your stdio doesn't appear very std."
12440 fi
12441 $rm -f try.c try
12442 set d_stdstdio
12443 eval $setvar
12444
12445 : Can _ptr be used as an lvalue?
12446 case "$d_stdstdio$ptr_lval" in
12447 $define$define) val=$define ;;
12448 *) val=$undef ;;
12449 esac
12450 set d_stdio_ptr_lval
12451 eval $setvar
12452
12453 : Can _cnt be used as an lvalue?
12454 case "$d_stdstdio$cnt_lval" in
12455 $define$define) val=$define ;;
12456 *) val=$undef ;;
12457 esac
12458 set d_stdio_cnt_lval
12459 eval $setvar
12460
12461
12462 : test whether setting _ptr sets _cnt as a side effect
12463 d_stdio_ptr_lval_sets_cnt="$undef"
12464 d_stdio_ptr_lval_nochange_cnt="$undef"
12465 case "$d_stdio_ptr_lval$d_stdstdio" in
12466 $define$define)
12467         echo "Checking to see what happens if we set the stdio ptr..." >&4
12468 $cat >try.c <<EOP
12469 #include <stdio.h>
12470 /* Can we scream? */
12471 /* Eat dust sed :-) */
12472 /* In the buffer space, no one can hear you scream. */
12473 #define FILE_ptr(fp)    $stdio_ptr
12474 #define FILE_cnt(fp)    $stdio_cnt
12475 #include <sys/types.h>
12476 int main() {
12477         FILE *fp = fopen("try.c", "r");
12478         int c;
12479         char *ptr;
12480         size_t cnt;
12481         if (!fp) {
12482             puts("Fail even to read");
12483             exit(1);
12484         }
12485         c = getc(fp); /* Read away the first # */
12486         if (c == EOF) {
12487             puts("Fail even to read");
12488             exit(1);
12489         }
12490         if (!(
12491                 18 <= FILE_cnt(fp) &&
12492                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12493         )) {
12494                 puts("Fail even to read");
12495                 exit (1);
12496         }
12497         ptr = (char*) FILE_ptr(fp);
12498         cnt = (size_t)FILE_cnt(fp);
12499
12500         FILE_ptr(fp) += 42;
12501
12502         if ((char*)FILE_ptr(fp) != (ptr + 42)) {
12503                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
12504                 exit (1);
12505         }
12506         if (FILE_cnt(fp) <= 20) {
12507                 printf ("Fail (<20 chars to test)");
12508                 exit (1);
12509         }
12510         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
12511                 puts("Fail compare");
12512                 exit (1);
12513         }
12514         if (cnt == FILE_cnt(fp)) {
12515                 puts("Pass_unchanged");
12516                 exit (0);
12517         }       
12518         if (FILE_cnt(fp) == (cnt - 42)) {
12519                 puts("Pass_changed");
12520                 exit (0);
12521         }
12522         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
12523         return 1;
12524
12525 }
12526 EOP
12527         set try
12528         if eval $compile && $to try.c; then
12529                 case `$run ./try` in
12530                 Pass_changed)
12531                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
12532                         d_stdio_ptr_lval_sets_cnt="$define" ;;
12533                 Pass_unchanged)
12534                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
12535                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
12536                 Fail*)
12537                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
12538                 *)
12539                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
12540         esac
12541         else
12542                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
12543         fi
12544         $rm -f try.c try
12545         ;;
12546 esac
12547
12548 : see if _base is also standard
12549 val="$undef"
12550 case "$d_stdstdio" in
12551 $define)
12552         $cat >try.c <<EOP
12553 #include <stdio.h>
12554 #define FILE_base(fp)   $stdio_base
12555 #define FILE_bufsiz(fp) $stdio_bufsiz
12556 int main() {
12557         FILE *fp = fopen("try.c", "r");
12558         char c = getc(fp);
12559         if (
12560                 19 <= FILE_bufsiz(fp) &&
12561                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
12562         )
12563                 exit(0);
12564         exit(1);
12565 }
12566 EOP
12567         set try
12568         if eval $compile && $to try.c; then
12569                 if $run ./try; then
12570                         echo "And its _base field acts std."
12571                         val="$define"
12572                 else
12573                         echo "But its _base field isn't std."
12574                 fi
12575         else
12576                 echo "However, it seems to be lacking the _base field."
12577         fi
12578         $rm -f try.c try
12579         ;;
12580 esac
12581 set d_stdiobase
12582 eval $setvar
12583
12584 $cat >&4 <<EOM
12585 Checking how to access stdio streams by file descriptor number...
12586 EOM
12587 case "$stdio_stream_array" in
12588 '')     $cat >try.c <<EOCP
12589 #include <stdio.h>
12590 int main() {
12591   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
12592     printf("yes\n");
12593 }
12594 EOCP
12595         for s in _iob __iob __sF
12596         do
12597                 set try -DSTDIO_STREAM_ARRAY=$s
12598                 if eval $compile; then
12599                         case "`$run ./try`" in
12600                         yes)    stdio_stream_array=$s; break ;;
12601                         esac
12602                 fi
12603         done
12604         $rm -f try.* try$exe_ext
12605 esac
12606 case "$stdio_stream_array" in
12607 '')     $cat >&4 <<EOM
12608 I can't figure out how to access stdio streams by file descriptor number.
12609 EOM
12610         d_stdio_stream_array="$undef"
12611         ;;
12612 *)      $cat >&4 <<EOM
12613 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
12614 EOM
12615         d_stdio_stream_array="$define"
12616         ;;
12617 esac
12618
12619 : see if strcoll exists
12620 set strcoll d_strcoll
12621 eval $inlibc
12622
12623 : check for structure copying
12624 echo " "
12625 echo "Checking to see if your C compiler can copy structs..." >&4
12626 $cat >try.c <<'EOCP'
12627 int main()
12628 {
12629         struct blurfl {
12630                 int dyick;
12631         } foo, bar;
12632
12633         foo = bar;
12634 }
12635 EOCP
12636 if $cc -c try.c >/dev/null 2>&1 ; then
12637         val="$define"
12638         echo "Yup, it can."
12639 else
12640         val="$undef"
12641         echo "Nope, it can't."
12642 fi
12643 set d_strctcpy
12644 eval $setvar
12645 $rm -f try.*
12646
12647 : see if strerror and/or sys_errlist[] exist
12648 echo " "
12649 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
12650     if set strerror val -f d_strerror; eval $csym; $val; then
12651                 echo 'strerror() found.' >&4
12652                 d_strerror="$define"
12653                 d_strerrm='strerror(e)'
12654                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
12655                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
12656                         d_syserrlst="$define"
12657                 else
12658                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
12659                         d_syserrlst="$undef"
12660                 fi
12661     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
12662                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
12663                 echo 'strerror() found in string header.' >&4
12664                 d_strerror="$define"
12665                 d_strerrm='strerror(e)'
12666                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
12667                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
12668                                 d_syserrlst="$define"
12669                 else
12670                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
12671                         d_syserrlst="$undef"
12672                 fi
12673     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
12674                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
12675                 d_strerror="$undef"
12676                 d_syserrlst="$define"
12677                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
12678     else
12679                 echo 'strerror() and sys_errlist[] NOT found.' >&4
12680                 d_strerror="$undef"
12681                 d_syserrlst="$undef"
12682                 d_strerrm='"unknown"'
12683     fi
12684 fi
12685
12686 : see if strftime exists
12687 set strftime d_strftime
12688 eval $inlibc
12689
12690 : see if strtod exists
12691 set strtod d_strtod
12692 eval $inlibc
12693
12694 : see if strtol exists
12695 set strtol d_strtol
12696 eval $inlibc
12697
12698 : see if strtold exists
12699 set strtold d_strtold
12700 eval $inlibc
12701
12702 : see if strtoll exists
12703 set strtoll d_strtoll
12704 eval $inlibc
12705
12706 case "$d_longlong-$d_strtoll" in
12707 "$define-$define")
12708         $cat <<EOM
12709 Checking whether your strtoll() works okay...
12710 EOM
12711         $cat >try.c <<'EOCP'
12712 #include <errno.h>
12713 #ifdef __hpux
12714 #define strtoll __strtoll
12715 #endif
12716 #ifdef __EMX__
12717 #define strtoll _strtoll
12718 #endif
12719 #include <stdio.h>
12720 extern long long int strtoll(char *s, char **, int); 
12721 static int bad = 0;
12722 int check(char *s, long long ell, int een) {
12723         long long gll;
12724         errno = 0;
12725         gll = strtoll(s, 0, 10);
12726         if (!((gll == ell) && (errno == een)))
12727                 bad++;
12728 }
12729 int main() {
12730         check(" 1",                                      1LL, 0);
12731         check(" 0",                                      0LL, 0);
12732         check("-1",                                     -1LL, 0);
12733         check("-9223372036854775808", -9223372036854775808LL, 0);
12734         check("-9223372036854775808", -9223372036854775808LL, 0);
12735         check(" 9223372036854775807",  9223372036854775807LL, 0);
12736         check("-9223372036854775808", -9223372036854775808LL, 0);
12737         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
12738         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
12739         if (!bad)
12740                 printf("ok\n");
12741 }
12742 EOCP
12743         set try
12744         if eval $compile; then
12745                 yyy=`$run ./try`
12746                 case "$yyy" in
12747                 ok) echo "Your strtoll() seems to be working okay." ;;
12748                 *) cat <<EOM >&4
12749 Your strtoll() doesn't seem to be working okay.
12750 EOM
12751                    d_strtoll="$undef"
12752                    ;;
12753                 esac
12754         else
12755                 echo "(I can't seem to compile the test program--assuming it doesn't)"
12756                 d_strtoll="$undef"
12757         fi
12758         ;;
12759 esac
12760
12761 : see if strtoq exists
12762 set strtoq d_strtoq
12763 eval $inlibc
12764
12765 : see if strtoul exists
12766 set strtoul d_strtoul
12767 eval $inlibc
12768
12769 case "$d_strtoul" in
12770 "$define")
12771         $cat <<EOM
12772 Checking whether your strtoul() works okay...
12773 EOM
12774         $cat >try.c <<'EOCP'
12775 #include <errno.h>
12776 #include <stdio.h>
12777 extern unsigned long int strtoul(char *s, char **, int); 
12778 static int bad = 0;
12779 void check(char *s, unsigned long eul, int een) {
12780         unsigned long gul;
12781         errno = 0;
12782         gul = strtoul(s, 0, 10);
12783         if (!((gul == eul) && (errno == een)))
12784                 bad++;
12785 }
12786 int main() {
12787         check(" 1", 1L, 0);
12788         check(" 0", 0L, 0);
12789 EOCP
12790         case "$longsize" in
12791         8)
12792             $cat >>try.c <<'EOCP'
12793         check("18446744073709551615", 18446744073709551615UL, 0);
12794         check("18446744073709551616", 18446744073709551615UL, ERANGE);
12795 #if 0 /* strtoul() for /^-/ strings is undefined. */
12796         check("-1", 18446744073709551615UL, 0);
12797         check("-18446744073709551614", 2, 0);
12798         check("-18446744073709551615", 1, 0);
12799         check("-18446744073709551616", 18446744073709551615UL, ERANGE);
12800         check("-18446744073709551617", 18446744073709551615UL, ERANGE);
12801 #endif
12802 EOCP
12803                 ;;
12804         4)
12805                     $cat >>try.c <<'EOCP'
12806         check("4294967295", 4294967295UL, 0);
12807         check("4294967296", 4294967295UL, ERANGE);
12808 #if 0 /* strtoul() for /^-/ strings is undefined. */
12809         check("-1", 4294967295UL, 0);
12810         check("-4294967294", 2, 0);
12811         check("-4294967295", 1, 0);
12812         check("-4294967296", 4294967295UL, ERANGE);
12813         check("-4294967297", 4294967295UL, ERANGE);
12814 #endif
12815 EOCP
12816                 ;;
12817         *)
12818 : Should we write these tests to be more portable by sprintf-ing
12819 : ~0 and then manipulating that char string as input for strtol?
12820                 ;;
12821         esac
12822         $cat >>try.c <<'EOCP'
12823         if (!bad)
12824                 printf("ok\n");
12825         return 0;
12826 }
12827 EOCP
12828         set try
12829         if eval $compile; then
12830                 case "`$run ./try`" in
12831                 ok) echo "Your strtoul() seems to be working okay." ;;
12832                 *) cat <<EOM >&4
12833 Your strtoul() doesn't seem to be working okay.
12834 EOM
12835                    d_strtoul="$undef"
12836                    ;;
12837                 esac
12838         fi
12839         ;;
12840 esac
12841
12842 : see if strtoull exists
12843 set strtoull d_strtoull
12844 eval $inlibc
12845
12846 case "$d_longlong-$d_strtoull" in
12847 "$define-$define")
12848         $cat <<EOM
12849 Checking whether your strtoull() works okay...
12850 EOM
12851         $cat >try.c <<'EOCP'
12852 #include <errno.h>
12853 #ifdef __hpux
12854 #define strtoull __strtoull
12855 #endif
12856 #include <stdio.h>
12857 extern unsigned long long int strtoull(char *s, char **, int); 
12858 static int bad = 0;
12859 int check(char *s, long long eull, int een) {
12860         long long gull;
12861         errno = 0;
12862         gull = strtoull(s, 0, 10);
12863         if (!((gull == eull) && (errno == een)))
12864                 bad++;
12865 }
12866 int main() {
12867         check(" 1",                                        1LL, 0);
12868         check(" 0",                                        0LL, 0);
12869         check("18446744073709551615",  18446744073709551615ULL, 0);
12870         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
12871 #if 0 /* strtoull() for /^-/ strings is undefined. */
12872         check("-1",                    18446744073709551615ULL, 0);
12873         check("-18446744073709551614",                     2LL, 0);
12874         check("-18446744073709551615",                     1LL, 0);
12875         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
12876         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
12877 #endif
12878         if (!bad)
12879                 printf("ok\n");
12880 }
12881 EOCP
12882         set try
12883         if eval $compile; then
12884                 case "`$run ./try`" in
12885                 ok) echo "Your strtoull() seems to be working okay." ;;
12886                 *) cat <<EOM >&4
12887 Your strtoull() doesn't seem to be working okay.
12888 EOM
12889                    d_strtoull="$undef"
12890                    ;;
12891                 esac
12892         fi
12893         ;;
12894 esac
12895
12896 : see if strtouq exists
12897 set strtouq d_strtouq
12898 eval $inlibc
12899
12900 case "$d_strtouq" in
12901 "$define")
12902         $cat <<EOM
12903 Checking whether your strtouq() works okay...
12904 EOM
12905         $cat >try.c <<'EOCP'
12906 #include <errno.h>
12907 #include <stdio.h>
12908 extern unsigned long long int strtouq(char *s, char **, int); 
12909 static int bad = 0;
12910 void check(char *s, unsigned long long eull, int een) {
12911         unsigned long long gull;
12912         errno = 0;
12913         gull = strtouq(s, 0, 10);
12914         if (!((gull == eull) && (errno == een)))
12915                 bad++;
12916 }
12917 int main() {
12918         check(" 1",                                        1LL, 0);
12919         check(" 0",                                        0LL, 0);
12920         check("18446744073709551615",  18446744073709551615ULL, 0);
12921         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
12922 #if 0 /* strtouq() for /^-/ strings is undefined. */
12923         check("-1",                    18446744073709551615ULL, 0);
12924         check("-18446744073709551614",                     2LL, 0);
12925         check("-18446744073709551615",                     1LL, 0);
12926         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
12927         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
12928 #endif
12929         if (!bad)
12930                 printf("ok\n");
12931         return 0;
12932 }
12933 EOCP
12934         set try
12935         if eval $compile; then
12936                 case "`$run ./try`" in
12937                 ok) echo "Your strtouq() seems to be working okay." ;;
12938                 *) cat <<EOM >&4
12939 Your strtouq() doesn't seem to be working okay.
12940 EOM
12941                    d_strtouq="$undef"
12942                    ;;
12943                 esac
12944         fi
12945         ;;
12946 esac
12947
12948 : see if strxfrm exists
12949 set strxfrm d_strxfrm
12950 eval $inlibc
12951
12952 : see if symlink exists
12953 set symlink d_symlink
12954 eval $inlibc
12955
12956 : see if syscall exists
12957 set syscall d_syscall
12958 eval $inlibc
12959
12960 : see if prototype for syscall is available
12961 echo " "
12962 set d_syscallproto syscall $i_unistd unistd.h
12963 eval $hasproto
12964
12965 : see if sysconf exists
12966 set sysconf d_sysconf
12967 eval $inlibc
12968
12969 : see if system exists
12970 set system d_system
12971 eval $inlibc
12972
12973 : see if tcgetpgrp exists
12974 set tcgetpgrp d_tcgetpgrp
12975 eval $inlibc
12976
12977 : see if tcsetpgrp exists
12978 set tcsetpgrp d_tcsetpgrp
12979 eval $inlibc
12980
12981 : see if prototype for telldir is available
12982 echo " "
12983 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
12984 eval $hasproto
12985
12986 : see if this is a sys/times.h system
12987 set sys/times.h i_systimes
12988 eval $inhdr
12989
12990 : see if times exists
12991 echo " "
12992 if set times val -f d_times; eval $csym; $val; then
12993         echo 'times() found.' >&4
12994         d_times="$define"
12995         inc=''
12996         case "$i_systimes" in
12997         "$define") inc='sys/times.h';;
12998         esac
12999         rp="What is the type returned by times() on this system?"
13000         set clock_t clocktype long stdio.h sys/types.h $inc
13001         eval $typedef_ask
13002 else
13003         echo 'times() NOT found, hope that will do.' >&4
13004         d_times="$undef"
13005         clocktype='int'
13006 fi
13007
13008 : see if truncate exists
13009 set truncate d_truncate
13010 eval $inlibc
13011
13012 : see if tzname[] exists
13013 echo " "
13014 if set tzname val -a d_tzname; eval $csym; $val; then
13015         val="$define"
13016         echo 'tzname[] found.' >&4
13017 else
13018         val="$undef"
13019         echo 'tzname[] NOT found.' >&4
13020 fi
13021 set d_tzname
13022 eval $setvar
13023
13024 case "$osname" in
13025 next|rhapsody|darwin) multiarch="$define" ;;
13026 esac
13027 case "$multiarch" in
13028 ''|[nN]*) multiarch="$undef" ;;
13029 esac
13030
13031 : check for ordering of bytes in a long
13032 echo " "
13033 case "$usecrosscompile$multiarch" in
13034 *$define*)
13035         $cat <<EOM
13036 You seem to be either cross-compiling or doing a multiarchitecture build,
13037 skipping the byteorder check.
13038
13039 EOM
13040         byteorder='ffff'
13041         ;;
13042 *)
13043         case "$byteorder" in
13044         '')
13045                 $cat <<'EOM'
13046 In the following, larger digits indicate more significance.  A big-endian
13047 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
13048 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
13049 machines may have weird orders like 3412.  A Cray will report 87654321,
13050 an Alpha will report 12345678. If the test program works the default is
13051 probably right.
13052 I'm now running the test program...
13053 EOM
13054                 $cat >try.c <<'EOCP'
13055 #include <stdio.h>
13056 int main()
13057 {
13058         int i;
13059         union {
13060                 unsigned long l;
13061                 char c[sizeof(long)];
13062         } u;
13063
13064         if (sizeof(long) > 4)
13065                 u.l = (0x08070605L << 32) | 0x04030201L;
13066         else
13067                 u.l = 0x04030201L;
13068         for (i = 0; i < sizeof(long); i++)
13069                 printf("%c", u.c[i]+'0');
13070         printf("\n");
13071         exit(0);
13072 }
13073 EOCP
13074                 xxx_prompt=y
13075                 set try
13076                 if eval $compile && ./try > /dev/null; then
13077                         dflt=`$run ./try`
13078                         case "$dflt" in
13079                         [1-4][1-4][1-4][1-4]|12345678|87654321)
13080                                 echo "(The test program ran ok.)"
13081                                 echo "byteorder=$dflt"
13082                                 xxx_prompt=n
13083                         ;;
13084                         ????|????????) echo "(The test program ran ok.)" ;;
13085                         *) echo "(The test program didn't run right for some reason.)" ;;
13086                         esac
13087                 else
13088                         dflt='4321'
13089                         cat <<'EOM'
13090 (I can't seem to compile the test program.  Guessing big-endian...)
13091 EOM
13092                 fi
13093                 case "$xxx_prompt" in
13094                 y)
13095                         rp="What is the order of bytes in a long?"
13096                         . ./myread
13097                         byteorder="$ans"
13098                         ;;
13099                 *)      byteorder=$dflt
13100                         ;;
13101                 esac
13102                 ;;
13103         esac
13104         $rm -f try.c try
13105         ;;
13106 esac
13107
13108
13109 $cat <<EOM
13110
13111 Checking to see whether you can access character data unalignedly...
13112 EOM
13113 $cat >try.c <<EOCP
13114 #include <stdio.h>
13115 #define U32 $u32type
13116 #define BYTEORDER $byteorder
13117 int main() {
13118 #if BYTEORDER == 0x1234 || BYTEORDER == 0x4321
13119     U8 buf[] = "\0\0\0\1\0\0\0\0";
13120     U32 *up;
13121     int i;
13122
13123     if (sizeof(U32) != 4) {
13124         printf("sizeof(U32) is not 4, but %d\n", sizeof(U32));
13125         exit(1);
13126     }
13127
13128     fflush(stdout);
13129
13130     for (i = 0; i < 4; i++) {
13131         up = (U32*)(buf + i);
13132         if (! ((*up == 1 << (8*i)) ||   /* big-endian */
13133                (*up == 1 << (8*(3-i)))  /* little-endian */
13134               )
13135            )
13136         {
13137             printf("read failed (%x)\n", *up);
13138             exit(2);
13139         }
13140     }
13141
13142     /* write test */
13143     for (i = 0; i < 4; i++) {
13144         up = (U32*)(buf + i);
13145         *up = 0xBeef;
13146         if (*up != 0xBeef) {
13147             printf("write failed (%x)\n", *up);
13148             exit(3);
13149         }
13150     }
13151
13152     exit(0);
13153 #else
13154     printf("1\n");
13155     exit(1);
13156 #endif
13157     return 0;
13158 }
13159 EOCP
13160 set try
13161 if eval $compile_ok; then
13162         echo "(Testing for character data alignment may dump core.)" >&4
13163         $run ./try 2>&1 >/dev/null
13164         case "$?" in
13165         0)      cat >&4 <<EOM
13166 You can access character data pretty unalignedly.
13167 EOM
13168                 d_u32align="$undef"
13169                 ;;
13170         *)      cat >&4 <<EOM
13171 It seems that you must access character data in an aligned manner.
13172 EOM
13173                 d_u32align="$define"
13174                 ;;
13175         esac
13176         $rm -f core core.try.* try.core
13177 else
13178         rp='Can you access character data at unaligned addresses?'
13179         dflt='n'
13180         . ./myread
13181         case "$ans" in
13182         [yY]*)  d_u32align="$undef"  ;;
13183         *)      d_u32align="$define" ;;
13184         esac
13185 fi
13186
13187 : see if ualarm exists
13188 set ualarm d_ualarm
13189 eval $inlibc
13190
13191 : see if umask exists
13192 set umask d_umask
13193 eval $inlibc
13194
13195 : see if usleep exists
13196 set usleep d_usleep
13197 eval $inlibc
13198
13199 : see if prototype for usleep is available
13200 echo " "
13201 set d_usleepproto usleep $i_unistd unistd.h
13202 eval $hasproto
13203
13204 : see if ustat exists
13205 set ustat d_ustat
13206 eval $inlibc
13207
13208 : backward compatibility for d_hvfork
13209 if test X$d_hvfork != X; then
13210         d_vfork="$d_hvfork"
13211         d_hvfork=''
13212 fi
13213 : see if there is a vfork
13214 val=''
13215 set vfork val
13216 eval $inlibc
13217
13218 : Ok, but do we want to use it. vfork is reportedly unreliable in 
13219 : perl on Solaris 2.x, and probably elsewhere.
13220 case "$val" in
13221 $define)
13222         echo " "
13223         case "$usevfork" in
13224         false) dflt='n';;
13225         *) dflt='y';;
13226         esac
13227         cat <<'EOM'
13228  
13229 Perl can only use a vfork() that doesn't suffer from strict
13230 restrictions on calling functions or modifying global data in
13231 the child.  For example, glibc-2.1 contains such a vfork()
13232 that is unsuitable.  If your system provides a proper fork()
13233 call, chances are that you do NOT want perl to use vfork().
13234
13235 EOM
13236         rp="Do you still want to use vfork()?"
13237         . ./myread
13238         case "$ans" in
13239         y|Y) ;;
13240         *)
13241                 echo "Ok, we won't use vfork()."
13242                 val="$undef"
13243                 ;;
13244         esac
13245         ;;
13246 esac
13247 set d_vfork
13248 eval $setvar
13249 case "$d_vfork" in
13250 $define) usevfork='true';;
13251 *) usevfork='false';;
13252 esac
13253
13254 : see if this is an sysdir system
13255 set sys/dir.h i_sysdir
13256 eval $inhdr
13257
13258 : see if this is an sysndir system
13259 set sys/ndir.h i_sysndir
13260 eval $inhdr
13261
13262 : see if closedir exists
13263 set closedir d_closedir
13264 eval $inlibc
13265
13266 case "$d_closedir" in
13267 "$define")
13268         echo " "
13269         echo "Checking whether closedir() returns a status..." >&4
13270         cat > try.c <<EOM
13271 #$i_dirent I_DIRENT             /**/
13272 #$i_sysdir I_SYS_DIR            /**/
13273 #$i_sysndir I_SYS_NDIR          /**/
13274 #$i_systypes I_SYS_TYPES        /**/
13275
13276 #if defined(I_SYS_TYPES)
13277 #include <sys/types.h>
13278 #endif
13279 #if defined(I_DIRENT)
13280 #include <dirent.h>
13281 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
13282 #include <sys/dir.h>
13283 #endif
13284 #else
13285 #ifdef I_SYS_NDIR
13286 #include <sys/ndir.h>
13287 #else
13288 #ifdef I_SYS_DIR
13289 #ifdef hp9000s500
13290 #include <ndir.h>       /* may be wrong in the future */
13291 #else
13292 #include <sys/dir.h>
13293 #endif
13294 #endif
13295 #endif
13296 #endif 
13297 int main() { return closedir(opendir(".")); }
13298 EOM
13299         set try
13300         if eval $compile_ok; then
13301                 if $run ./try > /dev/null 2>&1 ; then
13302                         echo "Yes, it does."
13303                         val="$undef"
13304                 else
13305                         echo "No, it doesn't."
13306                         val="$define"
13307                 fi
13308         else
13309                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13310                 val="$define"
13311         fi
13312         ;;
13313 *)
13314         val="$undef";
13315         ;;
13316 esac
13317 set d_void_closedir
13318 eval $setvar
13319 $rm -f try try.*
13320 : see if there is a wait4
13321 set wait4 d_wait4
13322 eval $inlibc
13323
13324 : see if waitpid exists
13325 set waitpid d_waitpid
13326 eval $inlibc
13327
13328 : see if wcstombs exists
13329 set wcstombs d_wcstombs
13330 eval $inlibc
13331
13332 : see if wctomb exists
13333 set wctomb d_wctomb
13334 eval $inlibc
13335
13336 : see if writev exists
13337 set writev d_writev
13338 eval $inlibc
13339
13340 : preserve RCS keywords in files with variable substitution, grrr
13341 Date='$Date'
13342 Id='$Id'
13343 Log='$Log'
13344 RCSfile='$RCSfile'
13345 Revision='$Revision'
13346
13347 : check for alignment requirements
13348 echo " "
13349 case "$usecrosscompile$multiarch" in
13350 *$define*)
13351         $cat <<EOM
13352 You seem to be either cross-compiling or doing a multiarchitecture build,
13353 skipping the memory alignment check.
13354
13355 EOM
13356         case "$alignbytes" in
13357         '') alignbytes=8 ;;
13358         esac
13359         ;;
13360 *)
13361         case "$alignbytes" in
13362         '') echo "Checking alignment constraints..." >&4
13363                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
13364                         $cat >try.c <<'EOCP'
13365 typedef long double NV;
13366 EOCP
13367                 else
13368                         $cat >try.c <<'EOCP'
13369 typedef double NV;
13370 EOCP
13371                 fi
13372                 $cat >>try.c <<'EOCP'
13373 #include <stdio.h>
13374 struct foobar {
13375         char foo;
13376         NV bar;
13377 } try_algn;
13378 int main()
13379 {
13380     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
13381     return(0);
13382 }
13383 EOCP
13384                 set try
13385                 if eval $compile_ok; then
13386                         dflt=`$run ./try`
13387                 else
13388                         dflt='8'
13389                         echo "(I can't seem to compile the test program...)"
13390                 fi
13391                 ;;
13392         *) dflt="$alignbytes"
13393                 ;;
13394         esac
13395         rp="Doubles must be aligned on a how-many-byte boundary?"
13396         . ./myread
13397         alignbytes="$ans"
13398         $rm -f try.c try
13399         ;;
13400 esac
13401
13402
13403 : set the base revision
13404 baserev=5.0
13405
13406 : how do we catenate cpp tokens here?
13407 echo " "
13408 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
13409 $cat >cpp_stuff.c <<'EOCP'
13410 #define RCAT(a,b)a/**/b
13411 #define ACAT(a,b)a ## b
13412 RCAT(Rei,ser)
13413 ACAT(Cir,cus)
13414 EOCP
13415 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
13416 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
13417         echo "Oh!  Smells like ANSI's been here." >&4
13418         echo "We can catify or stringify, separately or together!"
13419         cpp_stuff=42
13420 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
13421         echo "Ah, yes!  The good old days!" >&4
13422         echo "However, in the good old days we don't know how to stringify and"
13423         echo "catify at the same time."
13424         cpp_stuff=1
13425 else
13426         $cat >&4 <<EOM
13427 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
13428 to have to edit the values of CAT[2-5] in config.h...
13429 EOM
13430         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
13431 fi
13432 $rm -f cpp_stuff.*
13433
13434 : see if this is a db.h system
13435 set db.h i_db
13436 eval $inhdr
13437
13438 case "$i_db" in
13439 $define)
13440         : Check db version.
13441         echo " "
13442         echo "Checking Berkeley DB version ..." >&4
13443         $cat >try.c <<EOCP
13444 #$d_const HASCONST
13445 #ifndef HASCONST
13446 #define const
13447 #endif
13448 #include <sys/types.h>
13449 #include <stdio.h>
13450 #include <db.h>
13451 int main(int argc, char *argv[])
13452 {
13453 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
13454     int Major, Minor, Patch ;
13455     unsigned long Version ;
13456     (void)db_version(&Major, &Minor, &Patch) ;
13457     if (argc == 2) {
13458         printf("%d %d %d %d %d %d\n",
13459                DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
13460                Major, Minor, Patch);
13461         exit(0);
13462     }
13463     printf("You have Berkeley DB Version 2 or greater.\n");
13464
13465     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
13466                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
13467     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
13468                 Major, Minor, Patch) ;
13469
13470     /* check that db.h & libdb are compatible */
13471     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
13472         printf("db.h and libdb are incompatible.\n") ;
13473         exit(3);        
13474     }
13475
13476     printf("db.h and libdb are compatible.\n") ;
13477
13478     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
13479                 + DB_VERSION_PATCH ;
13480
13481     /* needs to be >= 2.3.4 */
13482     if (Version < 2003004) {
13483     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
13484         printf("Perl needs Berkeley DB 2.3.4 or greater.\n") ;
13485         exit(2);        
13486     }
13487
13488     exit(0);
13489 #else
13490 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
13491     if (argc == 2) {
13492         printf("1 0 0\n");
13493         exit(0);
13494     }
13495     printf("You have Berkeley DB Version 1.\n");
13496     exit(0);    /* DB version < 2: the coast is clear. */
13497 #else
13498     exit(1);    /* <db.h> not Berkeley DB? */
13499 #endif
13500 #endif
13501 }
13502 EOCP
13503         set try
13504         if eval $compile_ok && $run ./try; then
13505                 echo 'Looks OK.' >&4
13506                 set `$run ./try 1`
13507                 db_version_major=$1
13508                 db_version_minor=$2
13509                 db_version_patch=$3
13510         else
13511                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
13512                 i_db=$undef
13513                 case " $libs " in
13514                 *"-ldb "*)
13515                         : Remove db from list of libraries to use
13516                         echo "Removing unusable -ldb from library list" >&4
13517                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
13518                         shift
13519                         libs="$*"
13520                         echo "libs = $libs" >&4
13521                         ;;
13522                 esac
13523         fi
13524         $rm -f try.*
13525         ;;
13526 esac
13527
13528 case "$i_db" in
13529 define)
13530         : Check the return type needed for hash 
13531         echo " "
13532         echo "Checking return type needed for hash for Berkeley DB ..." >&4
13533         $cat >try.c <<EOCP
13534 #$d_const HASCONST
13535 #ifndef HASCONST
13536 #define const
13537 #endif
13538 #include <sys/types.h>
13539 #include <db.h>
13540
13541 #ifndef DB_VERSION_MAJOR
13542 u_int32_t hash_cb (ptr, size)
13543 const void *ptr;
13544 size_t size;
13545 {
13546 }
13547 HASHINFO info;
13548 int main()
13549 {
13550         info.hash = hash_cb;
13551 }
13552 #endif
13553 EOCP
13554         if $cc $ccflags -c try.c >try.out 2>&1 ; then
13555                 if $contains warning try.out >>/dev/null 2>&1 ; then
13556                         db_hashtype='int'
13557                 else
13558                         db_hashtype='u_int32_t'
13559                 fi
13560         else
13561                 : XXX Maybe we should just give up here.
13562                 db_hashtype=u_int32_t
13563                 $cat try.out >&4
13564                 echo "Help:  I can't seem to compile the db test program." >&4
13565                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
13566         fi
13567         $rm -f try.*
13568         echo "Your version of Berkeley DB uses $db_hashtype for hash."
13569         ;;
13570 *)      db_hashtype=u_int32_t
13571         ;;
13572 esac
13573 case "$i_db" in
13574 define)
13575         : Check the return type needed for prefix 
13576         echo " "
13577         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
13578         cat >try.c <<EOCP
13579 #$d_const HASCONST
13580 #ifndef HASCONST
13581 #define const
13582 #endif
13583 #include <sys/types.h>
13584 #include <db.h>
13585
13586 #ifndef DB_VERSION_MAJOR
13587 size_t prefix_cb (key1, key2)
13588 const DBT *key1;
13589 const DBT *key2;
13590 {
13591 }
13592 BTREEINFO info;
13593 int main()
13594 {
13595         info.prefix = prefix_cb;
13596 }
13597 #endif
13598 EOCP
13599         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
13600                 if $contains warning try.out >>/dev/null 2>&1 ; then
13601                         db_prefixtype='int'
13602                 else
13603                         db_prefixtype='size_t'
13604                 fi
13605         else
13606                 db_prefixtype='size_t'
13607                 : XXX Maybe we should just give up here.
13608                 $cat try.out >&4
13609                 echo "Help:  I can't seem to compile the db test program." >&4
13610                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
13611         fi
13612         $rm -f try.*
13613         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
13614         ;;
13615 *)      db_prefixtype='size_t'
13616         ;;
13617 esac
13618
13619
13620 : How can we generate normalized random numbers ?
13621 echo " "
13622 echo "Looking for a random number function..." >&4
13623 case "$randfunc" in
13624 '')
13625         if set drand48 val -f; eval $csym; $val; then
13626                 dflt="drand48"
13627                 echo "Good, found drand48()." >&4
13628         elif set random val -f; eval $csym; $val; then
13629                 dflt="random"
13630                 echo "OK, found random()." >&4
13631         else
13632                 dflt="rand"
13633                 echo "Yick, looks like I have to use rand()." >&4
13634         fi
13635         echo " "
13636         ;;
13637 *)
13638         dflt="$randfunc"
13639         ;;
13640 esac
13641 cont=true
13642
13643 case "$ccflags" in
13644 *-Dmy_rand=*|*-Dmy_srand=*)
13645         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
13646         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
13647         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
13648         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
13649         ;;
13650 esac
13651
13652 while $test "$cont"; do
13653         rp="Use which function to generate random numbers?"
13654         . ./myread
13655         if $test "$ans" = "$dflt"; then
13656                 : null
13657         else
13658                 randbits=''
13659         fi
13660         randfunc="$ans"
13661         if set $ans val -f; eval $csym; $val; then
13662                 cont=''
13663         else
13664                 dflt=y
13665                 rp="I cannot find function $ans. Use that name anyway?"
13666                 . ./myread
13667                 dflt=rand
13668                 case "$ans" in
13669                         [yY]*) cont='';;
13670                 esac
13671         fi
13672         case "$cont" in
13673         '')
13674                 case "$randfunc" in
13675                 drand48)
13676                         drand01="drand48()"
13677                         seedfunc="srand48"
13678                         randbits=48
13679                         randseedtype=long
13680                         ;;
13681                 rand|random)
13682                         case "$randbits" in
13683                         '')
13684 echo "Checking to see how many bits your $randfunc() function produces..." >&4
13685                                 $cat >try.c <<EOCP
13686 #$i_unistd I_UNISTD
13687 #$i_stdlib I_STDLIB
13688 #include <stdio.h>
13689 #ifdef I_UNISTD
13690 #  include <unistd.h>
13691 #endif
13692 #ifdef I_STDLIB
13693 #  include <stdlib.h>
13694 #endif
13695 int main()
13696 {
13697         register int i;
13698         register unsigned long tmp;
13699         register unsigned long max = 0L;
13700
13701         for (i = 1000; i; i--) {
13702                 tmp = (unsigned long) $randfunc();
13703                 if (tmp > max) max = tmp;
13704         }
13705         for (i = 0; max; i++)
13706                 max /= 2;
13707         printf("%d\n",i);
13708 }
13709 EOCP
13710                                 set try
13711                                 if eval $compile_ok; then
13712                                         dflt=`try`
13713                                 else
13714                                         dflt='?'
13715                                         echo "(I can't seem to compile the test program...)"
13716                                 fi
13717                                 ;;
13718                         *)
13719                                 dflt="$randbits"
13720                                 ;;
13721                         esac
13722                         rp="How many bits does your $randfunc() function produce?"
13723                         . ./myread
13724                         randbits="$ans"
13725                         $rm -f try.c try
13726                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13727                         seedfunc="s$randfunc"
13728                         randseedtype=unsigned
13729                         ;;
13730                 *)
13731                         dflt="31"
13732                         rp="How many bits does your $randfunc() function produce?"
13733                         . ./myread
13734                         randbits="$ans"
13735                         seedfunc="s$randfunc"
13736                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13737                         if set $seedfunc val -f; eval $csym; $val; then
13738                                 echo "(Using $seedfunc() to seed random generator)"
13739                         else
13740                                 echo "(Warning: no $seedfunc() to seed random generator)"
13741                                 seedfunc=rand
13742                         fi
13743                         randseedtype=unsigned
13744                         ;;
13745                 esac
13746                 ;;
13747         esac
13748 done
13749
13750 echo " "
13751 echo "Determining whether or not we are on an EBCDIC system..." >&4
13752 $cat >try.c <<'EOM'
13753 int main()
13754 {
13755   if ('M'==0xd4) return 0;
13756   return 1;
13757 }
13758 EOM
13759
13760 val=$undef
13761 set try
13762 if eval $compile_ok; then
13763         if $run ./try; then
13764                 echo "You seem to speak EBCDIC." >&4
13765                 val="$define"
13766         else
13767                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4
13768         fi
13769 else
13770         echo "I'm unable to compile the test program." >&4
13771         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
13772 fi
13773 $rm -f try try.*
13774 set ebcdic
13775 eval $setvar
13776
13777 echo " "
13778 $cat >&4 <<EOM
13779 Checking how to flush all pending stdio output...
13780 EOM
13781 # I only know how to find the first 32 possibly open files on SunOS.
13782 # See also hints/sunos_4_1.sh and util.c  --AD
13783 case "$osname" in
13784 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
13785 esac
13786 $cat >>try.c <<EOCP
13787 #include <stdio.h>
13788 #$i_unistd I_UNISTD
13789 #ifdef I_UNISTD
13790 # include <unistd.h>
13791 #endif
13792 #$d_sysconf HAS_SYSCONF
13793 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
13794 #ifdef HAS_STDIO_STREAM_ARRAY
13795 # define STDIO_STREAM_ARRAY $stdio_stream_array
13796 #endif
13797 int main() {
13798   FILE* p;
13799   unlink("try.out");
13800   p = fopen("try.out", "w");
13801 #ifdef TRY_FPUTC
13802   fputc('x', p);
13803 #else
13804 # ifdef TRY_FPRINTF
13805   fprintf(p, "x");
13806 # endif
13807 #endif
13808 #ifdef TRY_FFLUSH_NULL
13809   fflush(NULL);
13810 #endif
13811 #ifdef TRY_FFLUSH_ALL
13812   {
13813     long open_max = -1;
13814 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
13815     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
13816 # else
13817 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
13818     open_max = sysconf(_SC_OPEN_MAX);
13819 #  else
13820 #   ifdef FOPEN_MAX
13821     open_max = FOPEN_MAX;
13822 #   else
13823 #    ifdef OPEN_MAX
13824     open_max = OPEN_MAX;
13825 #    else
13826 #     ifdef _NFILE
13827     open_max = _NFILE;
13828 #     endif
13829 #    endif
13830 #   endif
13831 #  endif
13832 # endif 
13833 # ifdef HAS_STDIO_STREAM_ARRAY
13834     if (open_max > 0) {
13835       long i;
13836       for (i = 0; i < open_max; i++)
13837             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
13838                 STDIO_STREAM_ARRAY[i]._file < open_max &&
13839                 STDIO_STREAM_ARRAY[i]._flag)
13840                 fflush(&STDIO_STREAM_ARRAY[i]);
13841     }   
13842   }
13843 # endif
13844 #endif
13845   _exit(42);
13846 }
13847 EOCP
13848 : first we have to find out how _not_ to flush
13849 $to try.c
13850 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
13851     output=''
13852     set try -DTRY_FPUTC
13853     if eval $compile; then
13854             $run ./try 2>/dev/null
13855             code="$?"
13856             $from try.out
13857             if $test ! -s try.out -a "X$code" = X42; then
13858                 output=-DTRY_FPUTC
13859             fi
13860     fi
13861     case "$output" in
13862     '')
13863             set try -DTRY_FPRINTF
13864             if eval $compile; then
13865                     $run ./try 2>/dev/null
13866                     code="$?"
13867                     $from try.out
13868                     if $test ! -s try.out -a "X$code" = X42; then
13869                         output=-DTRY_FPRINTF
13870                     fi
13871             fi
13872         ;;
13873     esac
13874 fi
13875 : check for fflush NULL behaviour
13876 case "$fflushNULL" in
13877 '')     set try -DTRY_FFLUSH_NULL $output
13878         if eval $compile; then
13879                 $run ./try 2>/dev/null
13880                 code="$?"
13881                 $from try.out
13882                 if $test -s try.out -a "X$code" = X42; then
13883                         fflushNULL="`$cat try.out`"
13884                 else
13885                         if $test "X$code" != X42; then
13886                                 $cat >&4 <<EOM
13887 (If this test failed, don't worry, we'll try another method shortly.)
13888 EOM
13889                         fi
13890                 fi
13891         fi
13892         $rm -f core try.core core.try.*
13893         case "$fflushNULL" in
13894         x)      $cat >&4 <<EOM
13895 Your fflush(NULL) works okay for output streams.
13896 Let's see if it clobbers input pipes...
13897 EOM
13898 # As of mid-March 2000 all versions of Solaris appear to have a stdio
13899 # bug that improperly flushes the input end of pipes.  So we avoid the
13900 # autoflush on fork/system/exec support for now. :-(
13901 $cat >tryp.c <<EOCP
13902 #include <stdio.h>
13903 int
13904 main(int argc, char **argv)
13905 {
13906     char buf[1024];
13907     int i;
13908     char *bp = buf;
13909     while (1) {
13910         while ((i = getc(stdin)) != -1
13911                && (*bp++ = i) != '\n'
13912                && bp < &buf[1024])
13913         /* DO NOTHING */ ;
13914         *bp = '\0';
13915         fprintf(stdout, "%s", buf);
13916         fflush(NULL);
13917         if (i == -1)
13918             return 0;
13919         bp = buf;
13920     }
13921 }
13922 EOCP
13923                 fflushNULL="$define"
13924                 set tryp
13925                 if eval $compile; then
13926                     $rm -f tryp.out
13927                     $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
13928                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
13929                        $cat >&4 <<EOM
13930 fflush(NULL) seems to behave okay with input streams.
13931 EOM
13932                         fflushNULL="$define"
13933                     else
13934                         $cat >&4 <<EOM
13935 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
13936 EOM
13937                         fflushNULL="$undef"
13938                     fi
13939                 fi
13940                 $rm -f core tryp.c tryp.core core.tryp.*
13941                 ;;
13942         '')     $cat >&4 <<EOM
13943 Your fflush(NULL) isn't working (contrary to ANSI C).
13944 EOM
13945                 fflushNULL="$undef"
13946                 ;;
13947         *)      $cat >&4 <<EOM
13948 Cannot figure out whether your fflush(NULL) works or not.
13949 I'm assuming it doesn't (contrary to ANSI C).
13950 EOM
13951                 fflushNULL="$undef"
13952                 ;;
13953         esac
13954         ;;
13955 $define|true|[yY]*)
13956         fflushNULL="$define"
13957         ;;
13958 *)
13959         fflushNULL="$undef"
13960         ;;
13961 esac
13962 : check explicit looping only if NULL did not work, and if the pipe
13963 : bug does not show up on an explicit flush too
13964 case "$fflushNULL" in
13965 "$undef")
13966         $cat >tryp.c <<EOCP
13967 #include <stdio.h>
13968 int
13969 main(int argc, char **argv)
13970 {
13971     char buf[1024];
13972     int i;
13973     char *bp = buf;
13974     while (1) {
13975         while ((i = getc(stdin)) != -1
13976                && (*bp++ = i) != '\n'
13977                && bp < &buf[1024])
13978         /* DO NOTHING */ ;
13979         *bp = '\0';
13980         fprintf(stdout, "%s", buf);
13981         fflush(stdin);
13982         if (i == -1)
13983             return 0;
13984         bp = buf;
13985     }
13986 }
13987 EOCP
13988         set tryp
13989         if eval $compile; then
13990             $rm -f tryp.out
13991             $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
13992             if cmp tryp.c tryp.out >/dev/null 2>&1; then
13993                $cat >&4 <<EOM
13994 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
13995 EOM
13996                 : now check for fflushall behaviour
13997                 case "$fflushall" in
13998                 '')     set try -DTRY_FFLUSH_ALL $output
13999                         if eval $compile; then
14000                                 $cat >&4 <<EOM
14001 (Now testing the other method--but note that this also may fail.)
14002 EOM
14003                                 $run ./try 2>/dev/null
14004                                 code=$?
14005                                 $from try.out
14006                                 if $test -s try.out -a "X$code" = X42; then
14007                                         fflushall="`$cat try.out`"
14008                                 fi
14009                         fi
14010                         $rm -f core try.core core.try.*
14011                         case "$fflushall" in
14012                         x)      $cat >&4 <<EOM
14013 Whew. Flushing explicitly all the stdio streams works.
14014 EOM
14015                                 fflushall="$define"
14016                                 ;;
14017                         '')     $cat >&4 <<EOM
14018 Sigh. Flushing explicitly all the stdio streams doesn't work.
14019 EOM
14020                                 fflushall="$undef"
14021                                 ;;
14022                         *)      $cat >&4 <<EOM
14023 Cannot figure out whether flushing stdio streams explicitly works or not.
14024 I'm assuming it doesn't.
14025 EOM
14026                                 fflushall="$undef"
14027                                 ;;
14028                         esac
14029                         ;;
14030                 "$define"|true|[yY]*)
14031                         fflushall="$define"
14032                         ;;
14033                 *)
14034                         fflushall="$undef"
14035                         ;;
14036                 esac
14037             else
14038                 $cat >&4 <<EOM
14039 All is futile.  Even fflush(stdin) clobbers input pipes!
14040 EOM
14041                 fflushall="$undef"
14042             fi
14043         else
14044             fflushall="$undef"
14045         fi
14046         $rm -f core tryp.c tryp.core core.tryp.*
14047         ;;
14048 *)      fflushall="$undef"
14049         ;;
14050 esac
14051
14052 case "$fflushNULL$fflushall" in
14053 undefundef)
14054         $cat <<EOM
14055 OK, I give up.  I cannot figure out how to flush pending stdio output.
14056 We won't be flushing handles at all before fork/exec/popen.
14057 EOM
14058         ;;
14059 esac
14060 $rm -f try.* try$exe_ext
14061
14062 : Store the full pathname to the ar program for use in the C program
14063 : Respect a hint or command line value for full_ar.
14064 case "$full_ar" in
14065 '') full_ar=$ar ;;
14066 esac
14067
14068 : Store the full pathname to the sed program for use in the C program
14069 full_sed=$sed
14070
14071 : see what type gids are declared as in the kernel
14072 echo " "
14073 echo "Looking for the type for group ids returned by getgid()."
14074 set gid_t gidtype xxx stdio.h sys/types.h
14075 eval $typedef
14076 case "$gidtype" in
14077 xxx)
14078         xxx=`./findhdr sys/user.h`
14079         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
14080         case $1 in
14081         unsigned) dflt="$1 $2" ;;
14082         *) dflt="$1" ;;
14083         esac
14084         ;;
14085 *) dflt="$gidtype";;
14086 esac
14087 case "$gidtype" in
14088 gid_t) echo "gid_t found." ;;
14089 *)      rp="What is the type for group ids returned by getgid()?"
14090         . ./myread
14091         gidtype="$ans"
14092         ;;
14093 esac
14094
14095 echo " "
14096 case "$gidtype" in
14097 *_t) zzz="$gidtype"     ;;
14098 *)   zzz="gid"          ;;
14099 esac
14100 echo "Checking the size of $zzz..." >&4 
14101 cat > try.c <<EOCP
14102 #include <sys/types.h>
14103 #include <stdio.h>
14104 int main() {
14105     printf("%d\n", (int)sizeof($gidtype));
14106     exit(0);
14107 }
14108 EOCP
14109 set try
14110 if eval $compile_ok; then
14111         yyy=`$run ./try`
14112         case "$yyy" in
14113         '')     gidsize=4
14114                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
14115                 ;;
14116         *)      gidsize=$yyy
14117                 echo "Your $zzz is $gidsize bytes long."
14118                 ;;
14119         esac
14120 else
14121         gidsize=4
14122         echo "(I can't compile the test program--guessing $gidsize.)" >&4
14123 fi
14124
14125
14126 echo " "
14127 case "$gidtype" in
14128 *_t) zzz="$gidtype"     ;;
14129 *)   zzz="gid"          ;;
14130 esac
14131 echo "Checking the sign of $zzz..." >&4 
14132 cat > try.c <<EOCP
14133 #include <sys/types.h>
14134 #include <stdio.h>
14135 int main() {
14136         $gidtype foo = -1;
14137         if (foo < 0)
14138                 printf("-1\n");
14139         else
14140                 printf("1\n");
14141 }
14142 EOCP
14143 set try
14144 if eval $compile; then
14145         yyy=`$run ./try`
14146         case "$yyy" in
14147         '')     gidsign=1
14148                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14149                 ;;
14150         *)      gidsign=$yyy
14151                 case "$gidsign" in
14152                  1) echo "Your $zzz is unsigned." ;;
14153                 -1) echo "Your $zzz is signed."   ;;
14154                 esac
14155                 ;;
14156         esac
14157 else
14158         gidsign=1
14159         echo "(I can't compile the test program--guessing unsigned.)" >&4
14160 fi
14161
14162
14163 echo " "
14164
14165 if $test X"$quadtype" != X; then
14166
14167 echo "Checking how to print 64-bit integers..." >&4
14168
14169 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
14170         $cat >try.c <<'EOCP'
14171 #include <sys/types.h>
14172 #include <stdio.h>
14173 int main() {
14174   int q = 12345678901;
14175   printf("%ld\n", q);
14176 }
14177 EOCP
14178         set try
14179         if eval $compile; then
14180                 yyy=`$run ./try`
14181                 case "$yyy" in
14182                 12345678901)
14183                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
14184                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
14185                         echo "We will use %d."
14186                         ;;
14187                 esac
14188         fi
14189 fi
14190
14191 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
14192         $cat >try.c <<'EOCP'
14193 #include <sys/types.h>
14194 #include <stdio.h>
14195 int main() {
14196   long q = 12345678901;
14197   printf("%ld\n", q);
14198 }
14199 EOCP
14200         set try
14201         if eval $compile; then
14202                 yyy=`$run ./try`
14203                 case "$yyy" in
14204                 12345678901)
14205                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
14206                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
14207                         echo "We will use %ld."
14208                         ;;
14209                 esac
14210         fi
14211 fi
14212
14213 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
14214         $cat >try.c <<'EOCP'
14215 #include <sys/types.h>
14216 #include <inttypes.h>
14217 #include <stdio.h>
14218 int main() {
14219   int64_t q = 12345678901;
14220   printf("%" PRId64 "\n", q);
14221 }
14222 EOCP
14223         set try
14224         if eval $compile; then
14225                 yyy=`$run ./try`
14226                 case "$yyy" in
14227                 12345678901)
14228                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
14229                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
14230                         echo "We will use the C9X style."
14231                         ;;
14232                 esac
14233         fi
14234 fi
14235
14236 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14237         $cat >try.c <<EOCP
14238 #include <sys/types.h>
14239 #include <stdio.h>
14240 int main() {
14241   $quadtype q = 12345678901;
14242   printf("%Ld\n", q);
14243 }
14244 EOCP
14245         set try
14246         if eval $compile; then
14247                 yyy=`$run ./try`
14248                 case "$yyy" in
14249                 12345678901)
14250                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
14251                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
14252                         echo "We will use %Ld."
14253                         ;;
14254                 esac
14255         fi
14256 fi
14257
14258 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
14259         $cat >try.c <<'EOCP'
14260 #include <sys/types.h>
14261 #include <stdio.h>
14262 int main() {
14263   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
14264   printf("%lld\n", q);
14265 }
14266 EOCP
14267         set try
14268         if eval $compile; then
14269                 yyy=`$run ./try`
14270                 case "$yyy" in
14271                 12345678901)
14272                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
14273                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
14274                         echo "We will use the %lld style."
14275                         ;;
14276                 esac
14277         fi
14278 fi
14279
14280 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14281         $cat >try.c <<EOCP
14282 #include <sys/types.h>
14283 #include <stdio.h>
14284 int main() {
14285   $quadtype q = 12345678901;
14286   printf("%qd\n", q);
14287 }
14288 EOCP
14289         set try
14290         if eval $compile; then
14291                 yyy=`$run ./try`
14292                 case "$yyy" in
14293                 12345678901)
14294                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
14295                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
14296                         echo "We will use %qd."
14297                         ;;
14298                 esac
14299         fi
14300 fi
14301
14302 if $test X"$sPRId64" = X; then
14303         echo "Cannot figure out how to print 64-bit integers." >&4
14304 fi
14305
14306 $rm -f try try.*
14307
14308 fi
14309
14310 case "$sPRId64" in
14311 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
14312         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; 
14313         ;;
14314 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
14315         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; 
14316         ;;
14317 esac
14318
14319
14320 echo " "
14321 $echo "Checking the format strings to be used for Perl's internal types..." >&4
14322
14323 if $test X"$ivsize" = X8; then
14324         ivdformat="$sPRId64"
14325         uvuformat="$sPRIu64"
14326         uvoformat="$sPRIo64"
14327         uvxformat="$sPRIx64"
14328         uvXUformat="$sPRIXU64"
14329 else
14330         if $test X"$ivsize" = X"$longsize"; then
14331                 ivdformat='"ld"'
14332                 uvuformat='"lu"'
14333                 uvoformat='"lo"'
14334                 uvxformat='"lx"'
14335                 uvXUformat='"lX"'
14336         else
14337                 if $test X"$ivsize" = X"$intsize"; then
14338                         ivdformat='"d"'
14339                         uvuformat='"u"'
14340                         uvoformat='"o"'
14341                         uvxformat='"x"'
14342                         uvXUformat='"X"'
14343                 else
14344                         : far out
14345                         if $test X"$ivsize" = X"$shortsize"; then
14346                                 ivdformat='"hd"'
14347                                 uvuformat='"hu"'
14348                                 uvoformat='"ho"'
14349                                 uvxformat='"hx"'
14350                                 uvXUformat='"hX"'
14351                         fi
14352                 fi
14353         fi
14354 fi
14355
14356 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
14357         nveformat="$sPRIeldbl"
14358         nvfformat="$sPRIfldbl"
14359         nvgformat="$sPRIgldbl"
14360         nvEUformat="$sPRIEUldbl"
14361         nvFUformat="$sPRIFUldbl"
14362         nvGUformat="$sPRIGUldbl"
14363 else
14364         nveformat='"e"'
14365         nvfformat='"f"'
14366         nvgformat='"g"'
14367         nvEUformat='"E"'
14368         nvFUformat='"F"'
14369         nvGUformat='"G"'
14370 fi
14371
14372 case "$ivdformat" in
14373 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
14374     exit 1
14375     ;;
14376 esac
14377
14378
14379 echo " "
14380 $echo "Checking the format string to be used for gids..." >&4
14381
14382 case "$gidsign" in
14383 -1)     if $test X"$gidsize" = X"$ivsize"; then
14384                 gidformat="$ivdformat"
14385         else
14386                 if $test X"$gidsize" = X"$longsize"; then
14387                         gidformat='"ld"'
14388                 else
14389                         if $test X"$gidsize" = X"$intsize"; then
14390                                 gidformat='"d"'
14391                         else
14392                                 if $test X"$gidsize" = X"$shortsize"; then
14393                                         gidformat='"hd"'
14394                                 fi
14395                         fi
14396                 fi
14397         fi
14398         ;;
14399 *)      if $test X"$gidsize" = X"$uvsize"; then
14400                 gidformat="$uvuformat"
14401         else
14402                 if $test X"$gidsize" = X"$longsize"; then
14403                         gidformat='"lu"'
14404                 else
14405                         if $test X"$gidsize" = X"$intsize"; then
14406                                 gidformat='"u"'
14407                         else
14408                                 if $test X"$gidsize" = X"$shortsize"; then
14409                                         gidformat='"hu"'
14410                                 fi
14411                         fi
14412                 fi
14413         fi
14414         ;;
14415 esac
14416
14417 : see if getgroups exists
14418 set getgroups d_getgrps
14419 eval $inlibc
14420
14421 : see if setgroups exists
14422 set setgroups d_setgrps
14423 eval $inlibc
14424
14425
14426 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
14427 echo " "
14428 case "$d_getgrps$d_setgrps" in
14429 *define*)
14430         case "$groupstype" in
14431         '') dflt="$gidtype" ;;
14432         *)  dflt="$groupstype" ;;
14433         esac
14434         $cat <<EOM
14435 What type of pointer is the second argument to getgroups() and setgroups()?
14436 Usually this is the same as group ids, $gidtype, but not always.
14437
14438 EOM
14439         rp='What type pointer is the second argument to getgroups() and setgroups()?'
14440         . ./myread
14441         groupstype="$ans"
14442         ;;
14443 *)  groupstype="$gidtype";;
14444 esac
14445
14446 echo " "
14447 echo "Checking if your $make program sets \$(MAKE)..." >&4
14448 case "$make_set_make" in
14449 '')
14450         $sed 's/^X //' > testmake.mak << 'EOF'
14451 Xall:
14452 X       @echo 'maketemp="$(MAKE)"'
14453 EOF
14454         case "`$make -f testmake.mak 2>/dev/null`" in
14455         *maketemp=*) make_set_make='#' ;;
14456         *)      make_set_make="MAKE=$make" ;;
14457         esac
14458         $rm -f testmake.mak
14459         ;;
14460 esac
14461 case "$make_set_make" in
14462 '#') echo "Yup, it does.";;
14463 *) echo "Nope, it doesn't.";;
14464 esac
14465
14466 : see what type is used for mode_t
14467 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
14468 set mode_t modetype int stdio.h sys/types.h
14469 eval $typedef_ask
14470
14471 : see if stdarg is available
14472 echo " "
14473 if $test `./findhdr stdarg.h`; then
14474         echo "<stdarg.h> found." >&4
14475         valstd="$define"
14476 else
14477         echo "<stdarg.h> NOT found." >&4
14478         valstd="$undef"
14479 fi
14480
14481 : see if varags is available
14482 echo " "
14483 if $test `./findhdr varargs.h`; then
14484         echo "<varargs.h> found." >&4
14485 else
14486         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14487 fi
14488
14489 : set up the varargs testing programs
14490 $cat > varargs.c <<EOP
14491 #ifdef I_STDARG
14492 #include <stdarg.h>
14493 #endif
14494 #ifdef I_VARARGS
14495 #include <varargs.h>
14496 #endif
14497
14498 #ifdef I_STDARG
14499 int f(char *p, ...)
14500 #else
14501 int f(va_alist)
14502 va_dcl
14503 #endif
14504 {
14505         va_list ap;
14506 #ifndef I_STDARG
14507         char *p;
14508 #endif
14509 #ifdef I_STDARG
14510         va_start(ap,p);
14511 #else
14512         va_start(ap);
14513         p = va_arg(ap, char *);
14514 #endif
14515         va_end(ap);
14516 }
14517 EOP
14518 $cat > varargs <<EOP
14519 $startsh
14520 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14521         echo "true"
14522 else
14523         echo "false"
14524 fi
14525 $rm -f varargs$_o
14526 EOP
14527 chmod +x varargs
14528
14529 : now check which varargs header should be included
14530 echo " "
14531 i_varhdr=''
14532 case "$valstd" in
14533 "$define")
14534         if `./varargs I_STDARG`; then
14535                 val='stdarg.h'
14536         elif `./varargs I_VARARGS`; then
14537                 val='varargs.h'
14538         fi
14539         ;;
14540 *)
14541         if `./varargs I_VARARGS`; then
14542                 val='varargs.h'
14543         fi
14544         ;;
14545 esac
14546 case "$val" in
14547 '')
14548 echo "I could not find the definition for va_dcl... You have problems..." >&4
14549         val="$undef"; set i_stdarg; eval $setvar
14550         val="$undef"; set i_varargs; eval $setvar
14551         ;;
14552 *) 
14553         set i_varhdr
14554         eval $setvar
14555         case "$i_varhdr" in
14556         stdarg.h)
14557                 val="$define"; set i_stdarg; eval $setvar
14558                 val="$undef"; set i_varargs; eval $setvar
14559                 ;;
14560         varargs.h)
14561                 val="$undef"; set i_stdarg; eval $setvar
14562                 val="$define"; set i_varargs; eval $setvar
14563                 ;;
14564         esac
14565         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14566 esac
14567 $rm -f varargs*
14568
14569 : see if we need va_copy
14570 echo " "
14571 case "$i_stdarg" in
14572 "$define")
14573         $cat >try.c <<EOCP
14574 #include <stdarg.h>
14575 #include <stdio.h>
14576 #$i_stdlib I_STDLIB
14577 #ifdef I_STDLIB
14578 #include <stdlib.h>
14579 #endif
14580 #include <signal.h>
14581
14582 int
14583 ivfprintf(FILE *f, const char *fmt, va_list *valp)
14584 {
14585   return vfprintf(f, fmt, *valp);
14586 }
14587  
14588 int    
14589 myvfprintf(FILE *f, const  char *fmt, va_list val)
14590 {
14591   return ivfprintf(f, fmt, &val);
14592 }
14593       
14594 int
14595 myprintf(char *fmt, ...) 
14596 {
14597   va_list val;
14598   va_start(val, fmt);
14599   return myvfprintf(stdout, fmt, val); 
14600 }         
14601
14602 int
14603 main(int ac, char **av)
14604 {
14605   signal(SIGSEGV, exit);
14606
14607   myprintf("%s%cs all right, then\n", "that", '\'');                            
14608   exit(0);      
14609 }
14610 EOCP
14611         set try
14612         if eval $compile && $run ./try 2>&1 >/dev/null; then
14613                 case "`$run ./try`" in
14614                 "that's all right, then")
14615                         okay=yes
14616                         ;;
14617                 esac
14618         fi
14619         case "$okay" in
14620         yes)    echo "It seems that you don't need va_copy()." >&4
14621                 need_va_copy="$undef"
14622                 ;;
14623         *)      echo "It seems that va_copy() or similar will be needed." >&4
14624                 need_va_copy="$define"
14625                 ;;
14626         esac
14627         $rm -f try.* core core.* *.core *.core.*
14628         ;;
14629 *)      echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
14630         ;;
14631 esac
14632
14633 : define a fucntion to check prototypes
14634 $cat > protochk <<EOSH
14635 $startsh
14636 cc="$cc"
14637 optimize="$optimize"
14638 ccflags="$ccflags"
14639 prototype="$prototype"
14640 define="$define"
14641 rm=$rm
14642 EOSH
14643
14644 $cat >> protochk <<'EOSH'
14645
14646 $rm -f try.c
14647 foo="$1"
14648 shift
14649 while test $# -ge 2; do
14650         case "$1" in
14651                 $define) echo "#include <$2>" >> try.c ;;
14652                 literal) echo "$2" >> try.c ;;
14653         esac
14654     shift 2
14655 done
14656 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
14657 cat >> try.c <<'EOCP'
14658 #ifdef CAN_PROTOTYPE
14659 #define _(args) args
14660 #else
14661 #define _(args) ()
14662 #endif
14663 EOCP
14664 echo "$foo" >> try.c
14665 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
14666 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
14667 status=$?
14668 $rm -f try.[co]
14669 exit $status
14670 EOSH
14671 chmod +x protochk
14672 $eunicefix protochk
14673
14674 : see what type is used for size_t
14675 rp="What is the type used for the length parameter for string functions?"
14676 set size_t sizetype 'unsigned int' stdio.h sys/types.h
14677 eval $typedef_ask
14678
14679 : check for type of arguments to gethostbyaddr. 
14680 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
14681         case "$d_gethbyaddr" in
14682         $define)
14683                 $cat <<EOM
14684
14685 Checking to see what type of arguments are accepted by gethostbyaddr().
14686 EOM
14687                 hdrs="$define sys/types.h
14688                         $d_socket sys/socket.h 
14689                         $i_niin netinet/in.h 
14690                         $i_netdb netdb.h
14691                         $i_unistd unistd.h"
14692                 : The first arg can 'char *' or 'void *'
14693                 : The second arg is some of integral type
14694                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
14695                         for yyy in size_t long int; do
14696                                 case "$netdb_host_type" in
14697                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
14698                                         if ./protochk "$try" $hdrs; then
14699                                                 echo "Your system accepts $xxx for the first arg."
14700                                                 echo "...and $yyy for the second arg."
14701                                                 netdb_host_type="$xxx"
14702                                                 netdb_hlen_type="$yyy"
14703                                         fi
14704                                         ;;
14705                                 esac
14706                         done
14707                 done
14708                 : In case none of those worked, prompt the user.
14709                 case "$netdb_host_type" in
14710                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
14711                         dflt='char *'
14712                         . ./myread
14713                         netdb_host_type=$ans
14714                         rp='What is the type for the 2nd argument to gethostbyaddr?'
14715                         dflt="$sizetype"
14716                         . ./myread
14717                         netdb_hlen_type=$ans
14718                         ;;
14719                 esac
14720                 ;;
14721         *)      : no gethostbyaddr, so pick harmless defaults
14722                 netdb_host_type='char *'
14723                 netdb_hlen_type="$sizetype"
14724                 ;;
14725         esac
14726         # Remove the "const" if needed. -- but then we'll have a 
14727         # prototype clash!
14728         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
14729 fi
14730
14731 : check for type of argument to gethostbyname. 
14732 if test "X$netdb_name_type" = X ; then
14733         case "$d_gethbyname" in
14734         $define)
14735                 $cat <<EOM
14736
14737 Checking to see what type of argument is accepted by gethostbyname().
14738 EOM
14739                 hdrs="$define sys/types.h
14740                         $d_socket sys/socket.h 
14741                         $i_niin netinet/in.h 
14742                         $i_netdb netdb.h
14743                         $i_unistd unistd.h"
14744                 for xxx in "const char *" "char *"; do
14745                         case "$netdb_name_type" in
14746                         '')     try="extern struct hostent *gethostbyname($xxx);"
14747                                 if ./protochk "$try" $hdrs; then
14748                                         echo "Your system accepts $xxx."
14749                                         netdb_name_type="$xxx"
14750                                 fi
14751                                 ;;
14752                         esac
14753                 done
14754                 : In case none of those worked, prompt the user.
14755                 case "$netdb_name_type" in
14756                 '')     rp='What is the type for the 1st argument to gethostbyname?'
14757                         dflt='char *'
14758                         . ./myread
14759                         netdb_name_type=$ans
14760                         ;;
14761                 esac
14762                 ;;
14763         *)      : no gethostbyname, so pick harmless default
14764                 netdb_name_type='char *'
14765                 ;;
14766         esac
14767 fi
14768
14769 : check for type of 1st argument to getnetbyaddr. 
14770 if test "X$netdb_net_type" = X ; then
14771         case "$d_getnbyaddr" in
14772         $define)
14773                 $cat <<EOM
14774
14775 Checking to see what type of 1st argument is accepted by getnetbyaddr().
14776 EOM
14777                 hdrs="$define sys/types.h
14778                         $d_socket sys/socket.h 
14779                         $i_niin netinet/in.h 
14780                         $i_netdb netdb.h
14781                         $i_unistd unistd.h"
14782                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
14783                         case "$netdb_net_type" in
14784                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
14785                                 if ./protochk "$try" $hdrs; then
14786                                         echo "Your system accepts $xxx."
14787                                         netdb_net_type="$xxx"
14788                                 fi
14789                                 ;;
14790                         esac
14791                 done
14792                 : In case none of those worked, prompt the user.
14793                 case "$netdb_net_type" in
14794                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
14795                         dflt='long'
14796                         . ./myread
14797                         netdb_net_type=$ans
14798                         ;;
14799                 esac
14800                 ;;
14801         *)      : no getnetbyaddr, so pick harmless default
14802                 netdb_net_type='long'
14803                 ;;
14804         esac
14805 fi
14806 : locate the preferred pager for this system
14807 case "$pager" in
14808 '')
14809         dflt=''
14810         case "$pg" in
14811         /*) dflt=$pg;;
14812         [a-zA-Z]:/*) dflt=$pg;;
14813         esac
14814         case "$more" in
14815         /*) dflt=$more;;
14816         [a-zA-Z]:/*) dflt=$more;;
14817         esac
14818         case "$less" in
14819         /*) dflt=$less;;
14820         [a-zA-Z]:/*) dflt=$less;;
14821         esac
14822         case "$dflt" in
14823         '') dflt=/usr/ucb/more;;
14824         esac
14825         ;;
14826 *) dflt="$pager";;
14827 esac
14828 echo " "
14829 fn=f/
14830 rp='What pager is used on your system?'
14831 . ./getfile
14832 pager="$ans"
14833
14834 : see what type pids are declared as in the kernel
14835 rp="What is the type of process ids on this system?"
14836 set pid_t pidtype int stdio.h sys/types.h
14837 eval $typedef_ask
14838
14839 : Find earliest binary compatible site_perl subdirectory perl can use.
14840 case "$bincompat5005" in
14841 "$define") xs_apiversion='5.005' ;;
14842 *) xs_apiversion=$version ;;   # The current site_perl version.
14843 esac
14844 : Find earliest pure perl site_perl subdirectory perl can use.
14845 : The versioned directories started at 5.005.
14846 pm_apiversion='5.005'
14847
14848 : see if ar generates random libraries by itself
14849 echo " "
14850 echo "Checking how to generate random libraries on your machine..." >&4
14851 echo 'int bar1() { return bar2(); }' > bar1.c
14852 echo 'int bar2() { return 2; }' > bar2.c
14853 $cat > foo.c <<'EOP'
14854 int main() { printf("%d\n", bar1()); exit(0); }
14855 EOP
14856 $cc $ccflags -c bar1.c >/dev/null 2>&1
14857 $cc $ccflags -c bar2.c >/dev/null 2>&1
14858 $cc $ccflags -c foo.c >/dev/null 2>&1
14859 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
14860 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
14861         $run ./foobar >/dev/null 2>&1; then
14862         echo "$ar appears to generate random libraries itself."
14863         orderlib=false
14864         ranlib=":"
14865 elif $ar ts bar$_a >/dev/null 2>&1 &&
14866         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
14867         $run ./foobar >/dev/null 2>&1; then
14868                 echo "a table of contents needs to be added with '$ar ts'."
14869                 orderlib=false
14870                 ranlib="$ar ts"
14871 else
14872         case "$ranlib" in
14873         :) ranlib='';;
14874         '')
14875                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
14876                 $test -f $ranlib || ranlib=''
14877                 ;;
14878         esac
14879         if $test -n "$ranlib"; then
14880                 echo "your system has '$ranlib'; we'll use that."
14881                 orderlib=false
14882         else
14883                 echo "your system doesn't seem to support random libraries"
14884                 echo "so we'll use lorder and tsort to order the libraries."
14885                 orderlib=true
14886                 ranlib=":"
14887         fi
14888 fi
14889 $rm -f foo* bar* 
14890
14891 : check for type of arguments to select. 
14892 case "$selecttype" in
14893 '') case "$d_select" in
14894         $define)
14895                 echo " "
14896                 $cat <<EOM
14897 Checking to see what type of arguments are accepted by select().
14898 EOM
14899                 hdrs="$define sys/types.h
14900                         $i_systime sys/time.h 
14901                         $i_sysselct sys/select.h
14902                         $d_socket sys/socket.h"
14903                 : The first arg can be int, unsigned, or size_t
14904                 : The last arg may or may not be 'const'
14905                 val=''
14906                 : void pointer has been seen but using that
14907                 : breaks the selectminbits test
14908                 for xxx in 'fd_set *' 'int *'; do
14909                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
14910                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
14911                                         case "$val" in
14912                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
14913                                                 if ./protochk "$try" $hdrs; then
14914                                                         echo "Your system accepts $xxx."
14915                                                         val="$xxx"
14916                                                 fi
14917                                                 ;;
14918                                         esac
14919                                 done
14920                         done
14921                 done
14922                 case "$val" in
14923                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
14924                         case "$d_fd_set" in
14925                                 $define) dflt="fd_set *" ;;
14926                                 *)              dflt="int *" ;;
14927                         esac
14928                         . ./myread
14929                         val=$ans
14930                         ;;
14931                 esac
14932                 selecttype="$val"
14933                 ;;
14934         *)      : no select, so pick a harmless default
14935                 selecttype='int *'
14936                 ;;
14937         esac
14938         ;;
14939 esac
14940
14941 : check for the select 'width'
14942 case "$selectminbits" in
14943 '') case "$d_select" in
14944         $define)
14945                 $cat <<EOM
14946
14947 Checking to see on how many bits at a time your select() operates...
14948 EOM
14949                 $cat >try.c <<EOCP
14950 #include <sys/types.h>
14951 #$i_time I_TIME
14952 #$i_systime I_SYS_TIME
14953 #$i_systimek I_SYS_TIME_KERNEL
14954 #ifdef I_TIME
14955 #   include <time.h>
14956 #endif
14957 #ifdef I_SYS_TIME
14958 #   ifdef I_SYS_TIME_KERNEL
14959 #       define KERNEL
14960 #   endif
14961 #   include <sys/time.h>
14962 #   ifdef I_SYS_TIME_KERNEL
14963 #       undef KERNEL
14964 #   endif
14965 #endif
14966 #$i_sysselct I_SYS_SELECT
14967 #ifdef I_SYS_SELECT
14968 #include <sys/select.h>
14969 #endif
14970 #$d_socket HAS_SOCKET
14971 #ifdef HAS_SOCKET
14972 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
14973 #endif
14974 #include <stdio.h>
14975 $selecttype b;
14976 #define S sizeof(*(b))
14977 #define MINBITS 64
14978 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
14979 #define NBITS  (NBYTES * 8)
14980 int main() {
14981     char s[NBYTES];
14982     struct timeval t;
14983     int i;
14984     FILE* fp;
14985     int fd;
14986
14987     fclose(stdin);
14988     fp = fopen("try.c", "r");
14989     if (fp == 0)
14990       exit(1);
14991     fd = fileno(fp);
14992     if (fd < 0)
14993       exit(2);
14994     b = ($selecttype)s;
14995     for (i = 0; i < NBITS; i++)
14996         FD_SET(i, b);
14997     t.tv_sec  = 0;
14998     t.tv_usec = 0;
14999     select(fd + 1, b, 0, 0, &t);
15000     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
15001     printf("%d\n", i + 1);
15002     return 0;
15003 }
15004 EOCP
15005                 set try
15006                 if eval $compile_ok; then
15007                         selectminbits=`$run ./try`
15008                         case "$selectminbits" in
15009                         '')     cat >&4 <<EOM
15010 Cannot figure out on how many bits at a time your select() operates.
15011 I'll play safe and guess it is 32 bits.
15012 EOM
15013                                 selectminbits=32
15014                                 bits="32 bits"
15015                                 ;;
15016                         1)      bits="1 bit" ;;
15017                         *)      bits="$selectminbits bits" ;;
15018                         esac
15019                         echo "Your select() operates on $bits at a time." >&4
15020                 else
15021                         rp='What is the minimum number of bits your select() operates on?'
15022                         case "$byteorder" in
15023                         1234|12345678)  dflt=32 ;;
15024                         *)              dflt=1  ;;
15025                         esac
15026                         . ./myread
15027                         val=$ans
15028                         selectminbits="$val"
15029                 fi
15030                 $rm -f try.* try
15031                 ;;
15032         *)      : no select, so pick a harmless default
15033                 selectminbits='32'
15034                 ;;
15035         esac
15036         ;;
15037 esac
15038
15039 : Trace out the files included by signal.h, then look for SIGxxx names.
15040 : Remove SIGARRAYSIZE used by HPUX.
15041 : Remove SIGSTKSIZE used by Linux.
15042 : Remove SIGSTKSZ used by Posix.
15043 : Remove SIGTYP void lines used by OS2.
15044 : Some cpps, like os390, dont give the file name anywhere
15045 if [ "X$fieldn" = X ]; then
15046         : Just make some guesses.  We check them later.
15047         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
15048 else
15049         xxx=`echo '#include <signal.h>' |
15050         $cppstdin $cppminus $cppflags 2>/dev/null |
15051         $grep '^[       ]*#.*include' | 
15052         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sed 's!\\\\\\\\!/!g' | $sort | $uniq`
15053 fi
15054 : Check this list of files to be sure we have parsed the cpp output ok.
15055 : This will also avoid potentially non-existent files, such 
15056 : as ../foo/bar.h
15057 xxxfiles=''
15058 for xx in $xxx /dev/null ; do
15059         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
15060 done
15061 : If we have found no files, at least try signal.h
15062 case "$xxxfiles" in
15063 '')     xxxfiles=`./findhdr signal.h` ;;
15064 esac
15065 xxx=`awk '
15066 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
15067         print substr($2, 4, 20)
15068 }
15069 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
15070         print substr($3, 4, 20)
15071 }' $xxxfiles`
15072 : Append some common names just in case the awk scan failed.
15073 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
15074 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
15075 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
15076 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
15077 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
15078
15079 : generate a few handy files for later
15080 $cat > signal.c <<'EOCP'
15081 #include <sys/types.h>
15082 #include <signal.h>
15083 #include <stdio.h>
15084 int main() {
15085
15086 /* Strange style to avoid deeply-nested #if/#else/#endif */
15087 #ifndef NSIG
15088 #  ifdef _NSIG
15089 #    define NSIG (_NSIG)
15090 #  endif
15091 #endif
15092
15093 #ifndef NSIG
15094 #  ifdef SIGMAX
15095 #    define NSIG (SIGMAX+1)
15096 #  endif
15097 #endif
15098
15099 #ifndef NSIG
15100 #  ifdef SIG_MAX
15101 #    define NSIG (SIG_MAX+1)
15102 #  endif
15103 #endif
15104
15105 #ifndef NSIG
15106 #  ifdef MAXSIG
15107 #    define NSIG (MAXSIG+1)
15108 #  endif
15109 #endif
15110
15111 #ifndef NSIG
15112 #  ifdef MAX_SIG
15113 #    define NSIG (MAX_SIG+1)
15114 #  endif
15115 #endif
15116
15117 #ifndef NSIG
15118 #  ifdef SIGARRAYSIZE
15119 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
15120 #  endif
15121 #endif
15122
15123 #ifndef NSIG
15124 #  ifdef _sys_nsig
15125 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
15126 #  endif
15127 #endif
15128
15129 /* Default to some arbitrary number that's big enough to get most
15130    of the common signals.
15131 */
15132 #ifndef NSIG
15133 #    define NSIG 50
15134 #endif
15135
15136 printf("NSIG %d\n", NSIG);
15137
15138 #ifndef JUST_NSIG
15139
15140 EOCP
15141
15142 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
15143 {
15144         printf "#ifdef SIG"; printf $1; printf "\n"
15145         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
15146         printf $1; printf ");\n"
15147         printf "#endif\n"
15148 }
15149 END {
15150         printf "#endif /* JUST_NSIG */\n";
15151         printf "exit(0);\n}\n";
15152 }
15153 ' >>signal.c
15154 $cat >signal.awk <<'EOP'
15155 BEGIN { ndups = 0 }
15156 $1 ~ /^NSIG$/ { nsig = $2 }
15157 ($1 !~ /^NSIG$/) && (NF == 2) {
15158     if ($2 > maxsig) { maxsig = $2 }
15159     if (sig_name[$2]) {
15160         dup_name[ndups] = $1
15161         dup_num[ndups] = $2
15162         ndups++ 
15163     }
15164     else {
15165         sig_name[$2] = $1
15166         sig_num[$2] = $2
15167     }
15168 }
15169 END { 
15170     if (nsig == 0) {
15171         nsig = maxsig + 1
15172     }
15173     printf("NSIG %d\n", nsig);
15174     for (n = 1; n < nsig; n++) {
15175         if (sig_name[n]) {
15176             printf("%s %d\n", sig_name[n], sig_num[n])
15177         }
15178         else {
15179             printf("NUM%d %d\n", n, n) 
15180         }
15181     }
15182     for (n = 0; n < ndups; n++) {
15183         printf("%s %d\n", dup_name[n], dup_num[n])
15184     }
15185 }
15186 EOP
15187 $cat >signal_cmd <<EOS
15188 $startsh
15189 if $test -s signal.lst; then
15190     echo "Using your existing signal.lst file"
15191         exit 0
15192 fi
15193 xxx="$xxx"
15194 EOS
15195 $cat >>signal_cmd <<'EOS'
15196
15197 set signal
15198 if eval $compile_ok; then
15199         $run ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15200 else
15201         echo "(I can't seem be able to compile the whole test program)" >&4
15202         echo "(I'll try it in little pieces.)" >&4
15203         set signal -DJUST_NSIG
15204         if eval $compile_ok; then
15205                 $run ./signal$_exe > signal.nsg
15206                 $cat signal.nsg
15207         else
15208                 echo "I can't seem to figure out how many signals you have." >&4
15209                 echo "Guessing 50." >&4
15210                 echo 'NSIG 50' > signal.nsg
15211         fi
15212         : Now look at all the signal names, one at a time.
15213         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
15214                 $cat > signal.c <<EOCP
15215 #include <sys/types.h>
15216 #include <signal.h>
15217 #include <stdio.h>
15218 int main() {
15219 printf("$xx %d\n", SIG${xx});
15220 return 0;
15221 }
15222 EOCP
15223                 set signal
15224                 if eval $compile; then
15225                         echo "SIG${xx} found."
15226                         $run ./signal$_exe  >> signal.ls1
15227                 else
15228                         echo "SIG${xx} NOT found."
15229                 fi
15230         done
15231         if $test -s signal.ls1; then
15232                 $cat signal.nsg signal.ls1 |
15233                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15234         fi
15235
15236 fi
15237 if $test -s signal.lst; then
15238         :
15239 else
15240         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
15241         echo 'kill -l' >signal
15242         set X `csh -f <signal`
15243         $rm -f signal
15244         shift
15245         case $# in
15246         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
15247         esac
15248         echo $@ | $tr ' ' $trnl | \
15249             $awk '{ printf "%s %d\n", $1, ++s; }
15250                   END { printf "NSIG %d\n", ++s }' >signal.lst
15251 fi
15252 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
15253 EOS
15254 chmod a+x signal_cmd
15255 $eunicefix signal_cmd
15256
15257 : generate list of signal names
15258 echo " "
15259 case "$sig_name_init" in
15260 '') doinit=yes ;;
15261 *)  case "$sig_num_init" in
15262     ''|*,*) doinit=yes ;;
15263     esac ;;
15264 esac
15265 case "$doinit" in
15266 yes)
15267         echo "Generating a list of signal names and numbers..." >&4
15268         . ./signal_cmd
15269         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
15270         sig_name=`$awk 'BEGIN { printf "ZERO " }
15271                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
15272         sig_num=`$awk  'BEGIN { printf "0 " }
15273                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
15274         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
15275                              !/^NSIG/   { printf "\"%s\", ", $1 }
15276                              END        { printf "0\n" }' signal.lst`
15277         sig_num_init=`$awk  'BEGIN      { printf "0, " }
15278                              !/^NSIG/   { printf "%d, ", $2}
15279                              END        { printf "0\n"}' signal.lst`
15280         ;;
15281 esac
15282 echo "The following $sig_count signals are available:"
15283 echo " "
15284 echo $sig_name | $awk \
15285 'BEGIN { linelen = 0 }
15286 {
15287         for (i = 1; i <= NF; i++) {
15288                 name = "SIG" $i " "
15289                 linelen = linelen + length(name)
15290                 if (linelen > 70) {
15291                         printf "\n"
15292                         linelen = length(name)
15293                 }
15294                 printf "%s", name
15295         }
15296         printf "\n"
15297 }'
15298 sig_size=`echo $sig_name | awk '{print NF}'`
15299 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
15300
15301 echo " "
15302 case "$sizetype" in
15303 *_t) zzz="$sizetype"    ;;
15304 *)   zzz="filesize"     ;;
15305 esac
15306 echo "Checking the size of $zzz..." >&4 
15307 cat > try.c <<EOCP
15308 #include <sys/types.h>
15309 #include <stdio.h>
15310 int main() {
15311     printf("%d\n", (int)sizeof($sizetype));
15312     exit(0);
15313 }
15314 EOCP
15315 set try
15316 if eval $compile_ok; then
15317         yyy=`$run ./try`
15318         case "$yyy" in
15319         '')     sizesize=4
15320                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
15321                 ;;
15322         *)      sizesize=$yyy
15323                 echo "Your $zzz size is $sizesize bytes."
15324                 ;;
15325         esac
15326 else
15327         sizesize=4
15328         echo "(I can't compile the test program--guessing $sizesize.)" >&4
15329 fi
15330
15331
15332 : check for socklen_t
15333 echo " "
15334 echo "Checking to see if you have socklen_t..." >&4
15335 $cat >try.c <<EOCP
15336 #include <sys/types.h>
15337 #$d_socket HAS_SOCKET
15338 #ifdef HAS_SOCKET
15339 #include <sys/socket.h>
15340 #endif
15341 int main() { socklen_t x = 16; }
15342 EOCP
15343 set try
15344 if eval $compile; then
15345         val="$define"
15346         echo "You have socklen_t."
15347 else
15348         val="$undef"
15349         echo "You do not have socklen_t."
15350         case "$sizetype" in
15351         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
15352         esac
15353 fi
15354 $rm -f try try.*
15355 set d_socklen_t
15356 eval $setvar
15357
15358 : see if this is a socks.h system
15359 set socks.h i_socks
15360 eval $inhdr
15361
15362 : check for type of the size argument to socket calls
15363 case "$d_socket" in
15364 "$define")
15365         $cat <<EOM
15366
15367 Checking to see what type is the last argument of accept().
15368 EOM
15369         yyy=''
15370         case "$d_socklen_t" in
15371         "$define") yyy="$yyy socklen_t"
15372         esac
15373         yyy="$yyy $sizetype int long unsigned"
15374         for xxx in $yyy; do
15375                 case "$socksizetype" in
15376                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
15377                         case "$usesocks" in
15378                         "$define")
15379                                 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
15380                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15381                                         socksizetype="$xxx"
15382                                 fi
15383                                 ;;
15384                         *)      if ./protochk "$try"  $i_systypes sys/types.h $d_socket sys/socket.h; then
15385                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15386                                         socksizetype="$xxx"
15387                                 fi
15388                                 ;;
15389                         esac
15390                         ;;
15391                 esac
15392         done
15393 : In case none of those worked, prompt the user.
15394         case "$socksizetype" in
15395         '')     rp='What is the type for socket address structure sizes?'
15396                 dflt='int'
15397                 . ./myread
15398                 socksizetype=$ans
15399                 ;;
15400         esac
15401         ;;
15402 *)      : no sockets, so pick relatively harmless default
15403         socksizetype='int'
15404         ;;
15405 esac
15406
15407 : see what type is used for signed size_t
15408 set ssize_t ssizetype int stdio.h sys/types.h
15409 eval $typedef
15410 dflt="$ssizetype"
15411 $cat > try.c <<EOM
15412 #include <stdio.h>
15413 #include <sys/types.h>
15414 #define Size_t $sizetype
15415 #define SSize_t $dflt
15416 int main()
15417 {
15418         if (sizeof(Size_t) == sizeof(SSize_t))
15419                 printf("$dflt\n");
15420         else if (sizeof(Size_t) == sizeof(int))
15421                 printf("int\n");
15422         else 
15423                 printf("long\n");
15424         exit(0);
15425 }
15426 EOM
15427 echo " "
15428 set try
15429 if eval $compile_ok && $run ./try > /dev/null; then
15430         ssizetype=`$run ./try`
15431         echo "I'll be using $ssizetype for functions returning a byte count." >&4
15432 else
15433         $cat >&4 <<EOM
15434 Help! I can't compile and run the ssize_t test program: please enlighten me!
15435 (This is probably a misconfiguration in your system or libraries, and
15436 you really ought to fix it.  Still, I'll try anyway.)
15437
15438 I need a type that is the same size as $sizetype, but is guaranteed to
15439 be signed.  Common values are ssize_t, int and long.
15440
15441 EOM
15442         rp="What signed type is the same size as $sizetype?"
15443         . ./myread
15444         ssizetype="$ans"
15445 fi
15446 $rm -f try try.*
15447
15448 : see what type of char stdio uses.
15449 echo " "
15450 echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
15451 if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
15452         echo "Your stdio uses unsigned chars." >&4
15453         stdchar="unsigned char"
15454 else
15455         echo "Your stdio uses signed chars." >&4
15456         stdchar="char"
15457 fi
15458 $rm -f stdioh
15459
15460
15461
15462 : see if time exists
15463 echo " "
15464 if test "X$d_time" = X -o X"$timetype" = X; then
15465     if set time val -f d_time; eval $csym; $val; then
15466                 echo 'time() found.' >&4
15467                 val="$define"
15468                 rp="What is the type returned by time() on this system?"
15469                 set time_t timetype long stdio.h sys/types.h
15470                 eval $typedef_ask
15471     else
15472                 echo 'time() not found, hope that will do.' >&4
15473                 val="$undef"
15474                 timetype='int';
15475     fi
15476     set d_time
15477     eval $setvar
15478 fi
15479
15480 : see what type uids are declared as in the kernel
15481 echo " "
15482 echo "Looking for the type for user ids returned by getuid()."
15483 set uid_t uidtype xxx stdio.h sys/types.h
15484 eval $typedef
15485 case "$uidtype" in
15486 xxx)
15487         xxx=`./findhdr sys/user.h`
15488         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
15489         case $1 in
15490         unsigned) dflt="$1 $2" ;;
15491         *) dflt="$1" ;;
15492         esac
15493         ;;
15494 *) dflt="$uidtype";;
15495 esac
15496 case "$uidtype" in
15497 uid_t)  echo "uid_t found." ;;
15498 *)      rp="What is the type for user ids returned by getuid()?"
15499         . ./myread
15500         uidtype="$ans"
15501         ;;
15502 esac
15503
15504 echo " "
15505 case "$uidtype" in
15506 *_t) zzz="$uidtype"     ;;
15507 *)   zzz="uid"          ;;
15508 esac
15509 echo "Checking the size of $zzz..." >&4 
15510 cat > try.c <<EOCP
15511 #include <sys/types.h>
15512 #include <stdio.h>
15513 int main() {
15514     printf("%d\n", (int)sizeof($uidtype));
15515     exit(0);
15516 }
15517 EOCP
15518 set try
15519 if eval $compile_ok; then
15520         yyy=`$run ./try`
15521         case "$yyy" in
15522         '')     uidsize=4
15523                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
15524                 ;;
15525         *)      uidsize=$yyy
15526                 echo "Your $zzz is $uidsize bytes long."
15527                 ;;
15528         esac
15529 else
15530         uidsize=4
15531         echo "(I can't compile the test program--guessing $uidsize.)" >&4
15532 fi
15533
15534 echo " "
15535 case "$uidtype" in
15536 *_t) zzz="$uidtype"     ;;
15537 *)   zzz="uid"          ;;
15538 esac
15539 echo "Checking the sign of $zzz..." >&4
15540 cat > try.c <<EOCP
15541 #include <sys/types.h>
15542 #include <stdio.h>
15543 int main() {
15544         $uidtype foo = -1;
15545         if (foo < 0)
15546                 printf("-1\n");
15547         else
15548                 printf("1\n");
15549 }
15550 EOCP
15551 set try
15552 if eval $compile; then
15553         yyy=`$run ./try`
15554         case "$yyy" in
15555         '')     uidsign=1
15556                 echo "(I can't execute the test program--guessing unsigned.)" >&4
15557                 ;;
15558         *)      uidsign=$yyy
15559                 case "$uidsign" in
15560                  1) echo "Your $zzz is unsigned." ;;
15561                 -1) echo "Your $zzz is signed."   ;;
15562                 esac
15563                 ;;
15564         esac
15565 else
15566         uidsign=1
15567         echo "(I can't compile the test program--guessing unsigned.)" >&4
15568 fi
15569
15570
15571
15572 echo " "
15573 $echo "Checking the format string to be used for uids..." >&4
15574
15575 case "$uidsign" in
15576 -1)     if $test X"$uidsize" = X"$ivsize"; then
15577                 uidformat="$ivdformat"
15578         else
15579                 if $test X"$uidsize" = X"$longsize"; then
15580                         uidformat='"ld"'
15581                 else
15582                         if $test X"$uidsize" = X"$intsize"; then
15583                                 uidformat='"d"'
15584                         else
15585                                 if $test X"$uidsize" = X"$shortsize"; then
15586                                         uidformat='"hd"'
15587                                 fi
15588                         fi
15589                 fi
15590         fi
15591         ;;
15592 *)      if $test X"$uidsize" = X"$uvsize"; then
15593                 uidformat="$uvuformat"
15594         else
15595                 if $test X"$uidsize" = X"$longsize"; then
15596                         uidformat='"lu"'
15597                 else
15598                         if $test X"$uidsize" = X"$intsize"; then
15599                                 uidformat='"u"'
15600                         else
15601                                 if $test X"$uidsize" = X"$shortsize"; then
15602                                         uidformat='"hu"'
15603                                 fi
15604                         fi
15605                 fi
15606         fi
15607         ;;
15608 esac
15609
15610 : determine compiler compiler
15611 case "$yacc" in
15612 '')
15613         dflt=yacc;;
15614 *)
15615         dflt="$yacc";;
15616 esac
15617 echo " "
15618 comp='yacc'
15619 if $test -f "$byacc"; then
15620         dflt="$byacc"
15621         comp="byacc or $comp"
15622 fi
15623 if $test -f "$bison"; then
15624         comp="$comp or bison -y"
15625 fi
15626 rp="Which compiler compiler ($comp) shall I use?"
15627 . ./myread
15628 yacc="$ans"
15629 case "$yacc" in
15630 *bis*)
15631         case "$yacc" in
15632         *-y*) ;;
15633         *)
15634                 yacc="$yacc -y"
15635                 echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
15636                 ;;
15637         esac
15638         ;;
15639 esac
15640
15641 : see if fcntl.h is there
15642 val=''
15643 set fcntl.h val
15644 eval $inhdr
15645
15646 : see if we can include fcntl.h
15647 case "$val" in
15648 "$define")
15649         echo " "
15650         if $h_fcntl; then
15651                 val="$define"
15652                 echo "We'll be including <fcntl.h>." >&4
15653         else
15654                 val="$undef"
15655                 if $h_sysfile; then
15656         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
15657                 else
15658                         echo "We won't be including <fcntl.h>." >&4
15659                 fi
15660         fi
15661         ;;
15662 *)
15663         h_fcntl=false
15664         val="$undef"
15665         ;;
15666 esac
15667 set i_fcntl
15668 eval $setvar
15669
15670 : see if this is a iconv.h system
15671 set iconv.h i_iconv
15672 eval $inhdr
15673
15674 : see if this is a ieeefp.h system
15675 set ieeefp.h i_ieeefp
15676 eval $inhdr
15677
15678 : see if this is a libutil.h system
15679 set libutil.h i_libutil
15680 eval $inhdr
15681
15682 : see if locale.h is available
15683 set locale.h i_locale
15684 eval $inhdr
15685
15686 : see if mach cthreads are available
15687 if test "X$usethreads" = "X$define"; then
15688         set mach/cthreads.h i_machcthr
15689         eval $inhdr
15690 else
15691         i_machcthr="$undef"
15692 fi
15693
15694
15695
15696 : see if this is a math.h system
15697 set math.h i_math
15698 eval $inhdr
15699
15700 : see if this is a mntent.h system
15701 set mntent.h i_mntent
15702 eval $inhdr
15703
15704 : see if ndbm.h is available
15705 set ndbm.h t_ndbm
15706 eval $inhdr
15707 case "$t_ndbm" in
15708 $define)
15709         : see if dbm_open exists
15710         set dbm_open d_dbm_open
15711         eval $inlibc
15712         case "$d_dbm_open" in
15713         $undef)
15714                 t_ndbm="$undef"
15715                 echo "We won't be including <ndbm.h>"
15716                 ;;
15717         esac
15718         ;;
15719 esac
15720 val="$t_ndbm"
15721 set i_ndbm
15722 eval $setvar
15723
15724 : see if net/errno.h is available
15725 val=''
15726 set net/errno.h val
15727 eval $inhdr
15728
15729 : Unfortunately, it causes problems on some systems.  Arrgh.
15730 case "$val" in
15731 $define)
15732         cat > try.c <<'EOM'
15733 #include <stdio.h>
15734 #include <errno.h>
15735 #include <net/errno.h>
15736 int func()
15737 {
15738         return ENOTSOCK;
15739 }
15740 EOM
15741         if $cc $ccflags -c try.c >/dev/null 2>&1; then
15742                 echo "We'll be including <net/errno.h>." >&4
15743         else
15744                 echo "We won't be including <net/errno.h>." >&4
15745                 val="$undef"
15746         fi
15747         $rm -f try.* try
15748         ;;
15749 esac
15750 set i_neterrno
15751 eval $setvar
15752
15753 : see if netinet/tcp.h is available
15754 set netinet/tcp.h i_netinettcp
15755 eval $inhdr
15756
15757 : see if this is a poll.h system
15758 set poll.h i_poll
15759 eval $inhdr
15760
15761 : see if this is a prot.h system
15762 set prot.h i_prot
15763 eval $inhdr
15764
15765 echo " "
15766 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
15767 $cat <<'EOSH' > Cppsym.know
15768 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
15769 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
15770 alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
15771 ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
15772 BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
15773 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
15774 bull c cadmus clipper CMU COFF COMPILER_VERSION
15775 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
15776 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
15777 Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
15778 FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
15779 GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
15780 H3050R H3050RX hbullx20 hcx host_mips
15781 hp200 hp300 hp700 HP700 hp800 hp9000
15782 hp9000s200 hp9000s300 hp9000s400 hp9000s500
15783 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
15784 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
15785 IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
15786 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
15787 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
15788 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
15789 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
15790 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
15791 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
15792 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
15793 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
15794 MATH_HAS_NO_SIDE_EFFECTS
15795 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
15796 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
15797 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
15798 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
15799 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
15800 NetBSD news1500 news1700 news1800 news1900 news3700
15801 news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
15802 ns32016 ns32332 ns32k nsc32000
15803 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
15804 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
15805 pc532 pdp11 PGC PIC plexus PORTAR posix
15806 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
15807 POSIX_C_SOURCE POSIX_SOURCE POWER
15808 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
15809 riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
15810 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
15811 sony sony_news sonyrisc sparc sparclite spectrum
15812 stardent stdc STDC_EXT stratos sun sun3 sun386
15813 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
15814 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
15815 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
15816 sysV68 sysV88 Tek4132 Tek4300 titan
15817 TM3200 TM5400 TM5600
15818 tower tower32 tower32_200 tower32_600 tower32_700
15819 tower32_800 tower32_850 tss
15820 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
15821 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
15822 unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
15823 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
15824 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
15825 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
15826 z8000
15827 EOSH
15828 # Maybe put other stuff here too.
15829 cat <<EOSH >>Cppsym.know
15830 $osname
15831 EOSH
15832 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
15833 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
15834 $cat Cppsym.know > Cppsym.c
15835 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
15836 $rm -f Cppsym.a Cppsym.b Cppsym.c
15837 cat <<EOSH > Cppsym
15838 $startsh
15839 if $test \$# -gt 0; then
15840     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
15841     if $test -s Cppsym.got; then
15842         $rm -f Cppsym.got
15843         exit 0
15844     fi
15845     $rm -f Cppsym.got
15846     exit 1
15847 else
15848     $tr " " "$trnl" | ./Cppsym.try
15849     exit 0
15850 fi
15851 EOSH
15852 chmod +x Cppsym
15853 $eunicefix Cppsym
15854 cat <<EOSH > Cppsym.try
15855 $startsh
15856 cat <<'EOCP' > try.c
15857 #include <stdio.h>
15858 int main() {
15859 EOCP
15860 $awk \\
15861 EOSH
15862 cat <<'EOSH' >> Cppsym.try
15863 'length($1) > 0 {
15864     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
15865     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
15866     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
15867     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
15868 }'       >> try.c
15869 echo 'return 0;}' >> try.c
15870 EOSH
15871 cat <<EOSH >> Cppsym.try
15872 ccflags="$ccflags"
15873 case "$osname-$gccversion" in
15874 irix-) ccflags="\$ccflags -woff 1178" ;;
15875 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
15876 esac
15877 $cc -o try $optimize \$ccflags $ldflags try.c $libs && $run ./try
15878 EOSH
15879 chmod +x Cppsym.try
15880 $eunicefix Cppsym.try
15881 ./Cppsym < Cppsym.know > Cppsym.true
15882 : now check the C compiler for additional symbols
15883 postprocess_cc_v=''
15884 case "$osname" in
15885 aix) postprocess_cc_v="|$tr , ' '" ;;
15886 esac
15887 $cat >ccsym <<EOS
15888 $startsh
15889 $cat >tmp.c <<EOF
15890 extern int foo;
15891 EOF
15892 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
15893 do
15894         case "\$i" in
15895         -D*) echo "\$i" | $sed 's/^-D//';;
15896         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
15897         esac
15898 done
15899 $rm -f try.c
15900 EOS
15901 postprocess_cc_v=''
15902 chmod +x ccsym
15903 $eunicefix ccsym
15904 ./ccsym > ccsym1.raw
15905 if $test -s ccsym1.raw; then
15906        $sort ccsym1.raw | $uniq >ccsym.raw
15907 else
15908        mv ccsym1.raw ccsym.raw
15909 fi
15910
15911 $awk '/\=/ { print $0; next }
15912         { print $0"=1" }' ccsym.raw >ccsym.list
15913 $awk '/\=/ { print $0; next }
15914         { print $0"=1" }' Cppsym.true >ccsym.true
15915 $comm -13 ccsym.true ccsym.list >ccsym.own
15916 $comm -12 ccsym.true ccsym.list >ccsym.com
15917 $comm -23 ccsym.true ccsym.list >ccsym.cpp
15918 also=''
15919 if $test -z ccsym.raw; then
15920         echo "Your C compiler doesn't seem to define any symbols!" >&4
15921         echo " "
15922         echo "However, your C preprocessor defines the following symbols:"
15923         $cat Cppsym.true
15924         ccsymbols=''
15925         cppsymbols=`$cat Cppsym.true`
15926         cppsymbols=`echo $cppsymbols`
15927         cppccsymbols="$cppsymbols"
15928 else
15929         if $test -s ccsym.com; then
15930                 echo "Your C compiler and pre-processor define these symbols:"
15931                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
15932                 also='also '
15933                 symbols='ones'
15934                 cppccsymbols=`$cat ccsym.com`
15935                 cppccsymbols=`echo $cppccsymbols`
15936                 $test "$silent" || sleep 1
15937         fi
15938         if $test -s ccsym.cpp; then
15939                 $test "$also" && echo " "
15940                 echo "Your C pre-processor ${also}defines the following symbols:"
15941                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
15942                 also='further '
15943                 cppsymbols=`$cat ccsym.cpp`
15944                 cppsymbols=`echo $cppsymbols`
15945                 $test "$silent" || sleep 1
15946         fi
15947         if $test -s ccsym.own; then
15948                 $test "$also" && echo " "
15949                 echo "Your C compiler ${also}defines the following cpp symbols:"
15950                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
15951                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
15952                 ccsymbols=`$cat ccsym.own`
15953                 ccsymbols=`echo $ccsymbols`
15954                 $test "$silent" || sleep 1
15955         fi
15956 fi
15957
15958 : see if this is a termio system
15959 val="$undef"
15960 val2="$undef"
15961 val3="$undef"
15962 if $test `./findhdr termios.h`; then
15963         set tcsetattr i_termios
15964         eval $inlibc
15965         val3="$i_termios"
15966 fi
15967 echo " "
15968 case "$val3" in
15969 "$define") echo "You have POSIX termios.h... good!" >&4;;
15970 *) if ./Cppsym pyr; then
15971                 case "`/bin/universe`" in
15972                 ucb) if $test `./findhdr sgtty.h`; then
15973                                 val2="$define"
15974                                 echo "<sgtty.h> found." >&4
15975                         else
15976                                 echo "System is pyramid with BSD universe."
15977                                 echo "<sgtty.h> not found--you could have problems." >&4
15978                         fi;;
15979                 *) if $test `./findhdr termio.h`; then
15980                                 val="$define"
15981                                 echo "<termio.h> found." >&4
15982                         else
15983                                 echo "System is pyramid with USG universe."
15984                                 echo "<termio.h> not found--you could have problems." >&4
15985                         fi;;
15986                 esac
15987         elif ./usg; then
15988                 if $test `./findhdr termio.h`; then
15989                         echo "<termio.h> found." >&4
15990                         val="$define"
15991                 elif $test `./findhdr sgtty.h`; then
15992                         echo "<sgtty.h> found." >&4
15993                         val2="$define"
15994                 else
15995 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
15996                 fi
15997         else
15998                 if $test `./findhdr sgtty.h`; then
15999                         echo "<sgtty.h> found." >&4
16000                         val2="$define"
16001                 elif $test `./findhdr termio.h`; then
16002                         echo "<termio.h> found." >&4
16003                         val="$define"
16004                 else
16005 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
16006                 fi
16007         fi;;
16008 esac
16009 set i_termio; eval $setvar
16010 val=$val2; set i_sgtty; eval $setvar
16011 val=$val3; set i_termios; eval $setvar
16012
16013 : see if this is a shadow.h system
16014 set shadow.h i_shadow
16015 eval $inhdr
16016
16017 : see if stddef is available
16018 set stddef.h i_stddef
16019 eval $inhdr
16020
16021 : see if this is a sunmath.h system
16022 set sunmath.h i_sunmath
16023 eval $inhdr
16024
16025 : see if sys/access.h is available
16026 set sys/access.h i_sysaccess
16027 eval $inhdr
16028
16029 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
16030 set sys/filio.h i_sysfilio
16031 eval $inhdr
16032 echo " "
16033 if $test `./findhdr sys/ioctl.h`; then
16034         val="$define"
16035         echo '<sys/ioctl.h> found.' >&4
16036 else
16037         val="$undef"
16038         if $test $i_sysfilio = "$define"; then
16039             echo '<sys/ioctl.h> NOT found.' >&4
16040         else
16041                 $test $i_sgtty = "$define" && xxx="sgtty.h"
16042                 $test $i_termio = "$define" && xxx="termio.h"
16043                 $test $i_termios = "$define" && xxx="termios.h"
16044 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
16045         fi
16046 fi
16047 set i_sysioctl
16048 eval $setvar
16049
16050 : see if socket ioctl defs are in sys/sockio.h
16051 echo " "
16052 xxx=`./findhdr sys/sockio.h`
16053 if $test "$xxx"; then
16054         if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
16055                 val="$define"
16056                 echo "You have socket ioctls defined in <sys/sockio.h>." >&4
16057         else
16058                 val="$undef"
16059                 echo "No socket ioctls found in <sys/sockio.h>." >&4
16060         fi
16061 else
16062         val="$undef"
16063         $cat <<EOM
16064 <sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
16065 EOM
16066 fi
16067 set i_syssockio
16068 eval $setvar
16069
16070
16071 : see if this is a syslog.h system
16072 set syslog.h i_syslog
16073 eval $inhdr
16074
16075
16076 : see if this is a sys/mode.h system
16077 set sys/mode.h i_sysmode
16078 eval $inhdr
16079
16080 : see if sys/resource.h has to be included
16081 set sys/resource.h i_sysresrc
16082 eval $inhdr
16083
16084 : see if sys/security.h is available
16085 set sys/security.h i_syssecrt
16086 eval $inhdr
16087
16088 : see if this is a sys/statvfs.h system
16089 set sys/statvfs.h i_sysstatvfs
16090 eval $inhdr
16091
16092 : see if this is a sys/un.h system
16093 set sys/un.h i_sysun
16094 eval $inhdr
16095
16096
16097 : see if this is a sys/utsname.h system
16098 set sys/utsname.h i_sysutsname
16099 eval $inhdr
16100
16101 : see if this is a syswait system
16102 set sys/wait.h i_syswait
16103 eval $inhdr
16104
16105 : see if this is a ustat.h system
16106 set ustat.h i_ustat
16107 eval $inhdr
16108
16109 : see if this is an utime system
16110 set utime.h i_utime
16111 eval $inhdr
16112
16113 : see if this is a values.h system
16114 set values.h i_values
16115 eval $inhdr
16116
16117 : see if this is a vfork system
16118 case "$d_vfork" in
16119 "$define")
16120         set vfork.h i_vfork
16121         eval $inhdr
16122         ;;
16123 *)
16124         i_vfork="$undef"
16125         ;;
16126 esac
16127
16128 : see if gdbm.h is available
16129 set gdbm.h t_gdbm
16130 eval $inhdr
16131 case "$t_gdbm" in
16132 $define)
16133         : see if gdbm_open exists
16134         set gdbm_open d_gdbm_open
16135         eval $inlibc
16136         case "$d_gdbm_open" in
16137         $undef)
16138                 t_gdbm="$undef"
16139                 echo "We won't be including <gdbm.h>"
16140                 ;;
16141         esac
16142         ;;
16143 esac
16144 val="$t_gdbm"
16145 set i_gdbm
16146 eval $setvar
16147
16148 echo " "
16149 echo "Looking for extensions..." >&4
16150 : If we are using the old config.sh, known_extensions may contain
16151 : old or inaccurate or duplicate values.
16152 known_extensions=''
16153 nonxs_extensions=''
16154 : We do not use find because it might not be available.
16155 : We do not just use MANIFEST because the user may have dropped
16156 : some additional extensions into the source tree and expect them
16157 : to be built.
16158
16159 : Function to recursively find available extensions, ignoring DynaLoader
16160 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
16161 find_extensions='
16162     for xxx in *; do
16163        case "$xxx" in
16164            DynaLoader|dynaload) ;;
16165            *)
16166            if $test -f $xxx/$xxx.xs; then
16167                known_extensions="$known_extensions $1$xxx";
16168            elif $test -f $xxx/Makefile.PL; then
16169                nonxs_extensions="$nonxs_extensions $1$xxx";
16170            else
16171                if $test -d $xxx -a $# -lt 10; then
16172                    set $1$xxx/ $*;
16173                    cd $xxx;
16174                    eval $find_extensions;
16175                    cd ..;
16176                    shift;
16177                fi;
16178            fi
16179            ;;
16180        esac;
16181     done'
16182 tdir=`pwd`
16183 cd $rsrc/ext
16184 set X
16185 shift
16186 eval $find_extensions
16187 set X $nonxs_extensions
16188 shift
16189 nonxs_extensions="$*"
16190 set X $known_extensions
16191 shift
16192 known_extensions="$*"
16193 cd $tdir
16194
16195 : Now see which are supported on this system.
16196 avail_ext=''
16197 for xxx in $known_extensions ; do
16198         case "$xxx" in
16199         DB_File|db_file)
16200                 case "$i_db" in
16201                 $define) avail_ext="$avail_ext $xxx" ;;
16202                 esac
16203                 ;;
16204         GDBM_File|gdbm_fil)
16205                 case "$i_gdbm" in 
16206                 $define) avail_ext="$avail_ext $xxx" ;;
16207                 esac
16208                 ;;
16209         NDBM_File|ndbm_fil)
16210                 case "$i_ndbm" in
16211                 $define)
16212                     case "$osname-$use64bitint" in
16213                     hpux-define)
16214                         case "$libs" in
16215                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
16216                         esac
16217                         ;;
16218                     *) avail_ext="$avail_ext $xxx" ;;
16219                     esac
16220                     ;;
16221                 esac
16222                 ;;
16223         ODBM_File|odbm_fil) 
16224                 case "${i_dbm}${i_rpcsvcdbm}" in
16225                 *"${define}"*)
16226                     case "$osname-$use64bitint" in
16227                     hpux-define)
16228                         case "$libs" in
16229                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
16230                         esac
16231                         ;;
16232                     *) avail_ext="$avail_ext $xxx" ;;
16233                     esac
16234                     ;;
16235                 esac
16236                 ;;
16237         POSIX|posix)
16238                 case "$useposix" in
16239                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16240                 esac
16241                 ;;
16242         Opcode|opcode)
16243                 case "$useopcode" in
16244                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16245                 esac
16246                 ;;
16247         Socket|socket)
16248                 case "$d_socket" in 
16249                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16250                 esac
16251                 ;;
16252         Sys/Syslog|sys/syslog)
16253                 : XXX syslog requires socket
16254                 case "$d_socket" in 
16255                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16256                 esac
16257                 ;;
16258         Thread|thread)
16259                 case "$usethreads" in
16260                 true|$define|y)
16261                         case "$useithreads" in
16262                         $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;;
16263                         esac
16264                 esac
16265                 ;;
16266         IPC/SysV|ipc/sysv)
16267                 : XXX Do we need a useipcsysv variable here
16268                 case "${d_msg}${d_sem}${d_shm}" in 
16269                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
16270                 esac
16271                 ;;
16272         *)      avail_ext="$avail_ext $xxx"
16273                 ;;
16274         esac
16275 done
16276
16277 set X $avail_ext
16278 shift
16279 avail_ext="$*"
16280
16281 : Now see which nonxs extensions are supported on this system.
16282 : For now assume all are.
16283 nonxs_ext=''
16284 for xxx in $nonxs_extensions ; do
16285         case "$xxx" in
16286         *)      nonxs_ext="$nonxs_ext $xxx"
16287                 ;;
16288         esac
16289 done
16290
16291 set X $nonxs_ext
16292 shift
16293 nonxs_ext="$*"
16294
16295 case $usedl in
16296 $define)
16297         $cat <<EOM
16298 A number of extensions are supplied with $package.  You may choose to
16299 compile these extensions for dynamic loading (the default), compile
16300 them into the $package executable (static loading), or not include
16301 them at all.  Answer "none" to include no extensions.
16302 Note that DynaLoader is always built and need not be mentioned here.
16303
16304 EOM
16305         case "$dynamic_ext" in
16306         '') dflt="$avail_ext" ;;
16307         *)      dflt="$dynamic_ext"
16308                 # Perhaps we are reusing an old out-of-date config.sh.
16309                 case "$hint" in
16310                 previous)
16311                         if test X"$dynamic_ext" != X"$avail_ext"; then
16312                                 $cat <<EOM
16313 NOTICE:  Your previous config.sh list may be incorrect. 
16314 The extensions now available to you are 
16315         ${avail_ext}
16316 but the default list from your previous config.sh is
16317         ${dynamic_ext} 
16318
16319 EOM
16320                         fi
16321                         ;;
16322                 esac
16323                 ;;
16324         esac
16325         case "$dflt" in
16326         '')     dflt=none;;
16327         esac
16328         rp="What extensions do you wish to load dynamically?"
16329         . ./myread
16330         case "$ans" in
16331         none) dynamic_ext=' ' ;;
16332         *) dynamic_ext="$ans" ;;
16333         esac
16334
16335         case "$static_ext" in
16336         '')
16337                 : Exclude those already listed in dynamic linking
16338                 dflt=''
16339                 for xxx in $avail_ext; do
16340                         case " $dynamic_ext " in
16341                         *" $xxx "*) ;;
16342                         *) dflt="$dflt $xxx" ;;
16343                         esac
16344                 done
16345                 set X $dflt
16346                 shift
16347                 dflt="$*"
16348                 ;;
16349         *)  dflt="$static_ext" 
16350                 ;;
16351         esac
16352
16353         case "$dflt" in
16354         '')     dflt=none;;
16355         esac
16356         rp="What extensions do you wish to load statically?"
16357         . ./myread
16358         case "$ans" in
16359         none) static_ext=' ' ;;
16360         *) static_ext="$ans" ;;
16361         esac
16362         ;;
16363 *)
16364         $cat <<EOM
16365 A number of extensions are supplied with $package.  Answer "none" 
16366 to include no extensions. 
16367 Note that DynaLoader is always built and need not be mentioned here.
16368
16369 EOM
16370         case "$static_ext" in
16371         '') dflt="$avail_ext" ;;
16372         *)      dflt="$static_ext"
16373                 # Perhaps we are reusing an old out-of-date config.sh.
16374                 case "$hint" in
16375                 previous)
16376                         if test X"$static_ext" != X"$avail_ext"; then
16377                                 $cat <<EOM
16378 NOTICE:  Your previous config.sh list may be incorrect. 
16379 The extensions now available to you are 
16380         ${avail_ext}
16381 but the default list from your previous config.sh is
16382         ${static_ext} 
16383
16384 EOM
16385                         fi
16386                         ;;
16387                 esac
16388                 ;;
16389         esac
16390         : Exclude those that are not xs extensions
16391         case "$dflt" in
16392         '')     dflt=none;;
16393         esac
16394         rp="What extensions do you wish to include?"
16395         . ./myread
16396         case "$ans" in
16397         none) static_ext=' ' ;;
16398         *) static_ext="$ans" ;;
16399         esac
16400         ;;
16401 esac
16402
16403 set X $dynamic_ext $static_ext $nonxs_ext
16404 shift
16405 extensions="$*"
16406
16407 : Remove libraries needed only for extensions
16408 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
16409 : The exception is SunOS 4.x, which needs them.
16410 case "${osname}X${osvers}" in
16411 sunos*X4*)
16412     perllibs="$libs"
16413     ;;
16414 *) case "$usedl" in
16415     $define|true|[yY]*)
16416             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'` 
16417             shift
16418             perllibs="$*"
16419             ;;
16420     *)  perllibs="$libs"
16421             ;;
16422     esac
16423     ;;
16424 esac
16425
16426 : Remove build directory name from cppstdin so it can be used from
16427 : either the present location or the final installed location.
16428 echo " "
16429 : Get out of the UU directory to get correct path name.
16430 cd ..
16431 case "$cppstdin" in
16432 `pwd`/cppstdin)
16433         echo "Stripping down cppstdin path name"
16434         cppstdin=cppstdin
16435         ;;
16436 esac
16437 cd UU
16438
16439 : end of configuration questions
16440 echo " "
16441 echo "End of configuration questions."
16442 echo " "
16443
16444 : back to where it started
16445 if test -d ../UU; then
16446         cd ..
16447 fi
16448
16449 : configuration may be patched via a 'config.over' file
16450 if $test -f config.over; then
16451         echo " "
16452         dflt=y
16453         rp='I see a config.over file.  Do you wish to load it?'
16454         . UU/myread
16455         case "$ans" in
16456         n*) echo "OK, I'll ignore it.";;
16457         *)      . ./config.over
16458                 echo "Configuration override changes have been loaded."
16459                 ;;
16460         esac
16461 fi
16462
16463 : in case they want portability, strip down executable paths
16464 case "$d_portable" in
16465 "$define")
16466         echo " "
16467         echo "Stripping down executable paths..." >&4
16468         for file in $loclist $trylist; do
16469                 eval temp=\$$file
16470                 eval $file=`basename $temp`
16471         done
16472         ;;
16473 esac
16474
16475 : create config.sh file
16476 echo " "
16477 echo "Creating config.sh..." >&4
16478 $spitshell <<EOT >config.sh
16479 $startsh
16480 #
16481 # This file was produced by running the Configure script. It holds all the
16482 # definitions figured out by Configure. Should you modify one of these values,
16483 # do not forget to propagate your changes by running "Configure -der". You may
16484 # instead choose to run each of the .SH files by yourself, or "Configure -S".
16485 #
16486
16487 # Package name      : $package
16488 # Source directory  : $src
16489 # Configuration time: $cf_time
16490 # Configured by     : $cf_by
16491 # Target system     : $myuname
16492
16493 Author='$Author'
16494 Date='$Date'
16495 Header='$Header'
16496 Id='$Id'
16497 Locker='$Locker'
16498 Log='$Log'
16499 Mcc='$Mcc'
16500 RCSfile='$RCSfile'
16501 Revision='$Revision'
16502 Source='$Source'
16503 State='$State'
16504 _a='$_a'
16505 _exe='$_exe'
16506 _o='$_o'
16507 afs='$afs'
16508 afsroot='$afsroot'
16509 alignbytes='$alignbytes'
16510 ansi2knr='$ansi2knr'
16511 aphostname='$aphostname'
16512 api_revision='$api_revision'
16513 api_subversion='$api_subversion'
16514 api_version='$api_version'
16515 api_versionstring='$api_versionstring'
16516 ar='$ar'
16517 archlib='$archlib'
16518 archlibexp='$archlibexp'
16519 archname64='$archname64'
16520 archname='$archname'
16521 archobjs='$archobjs'
16522 awk='$awk'
16523 baserev='$baserev'
16524 bash='$bash'
16525 bin='$bin'
16526 bincompat5005='$bincompat5005'
16527 binexp='$binexp'
16528 bison='$bison'
16529 byacc='$byacc'
16530 byteorder='$byteorder'
16531 c='$c'
16532 castflags='$castflags'
16533 cat='$cat'
16534 cc='$cc'
16535 cccdlflags='$cccdlflags'
16536 ccdlflags='$ccdlflags'
16537 ccflags='$ccflags'
16538 ccflags_uselargefiles='$ccflags_uselargefiles'
16539 ccname='$ccname'
16540 ccsymbols='$ccsymbols'
16541 ccversion='$ccversion'
16542 cf_by='$cf_by'
16543 cf_email='$cf_email'
16544 cf_time='$cf_time'
16545 charsize='$charsize'
16546 chgrp='$chgrp'
16547 chmod='$chmod'
16548 chown='$chown'
16549 clocktype='$clocktype'
16550 comm='$comm'
16551 compress='$compress'
16552 contains='$contains'
16553 cp='$cp'
16554 cpio='$cpio'
16555 cpp='$cpp'
16556 cpp_stuff='$cpp_stuff'
16557 cppccsymbols='$cppccsymbols'
16558 cppflags='$cppflags'
16559 cpplast='$cpplast'
16560 cppminus='$cppminus'
16561 cpprun='$cpprun'
16562 cppstdin='$cppstdin'
16563 cppsymbols='$cppsymbols'
16564 cryptlib='$cryptlib'
16565 csh='$csh'
16566 d_Gconvert='$d_Gconvert'
16567 d_PRIEUldbl='$d_PRIEUldbl'
16568 d_PRIFUldbl='$d_PRIFUldbl'
16569 d_PRIGUldbl='$d_PRIGUldbl'
16570 d_PRIXU64='$d_PRIXU64'
16571 d_PRId64='$d_PRId64'
16572 d_PRIeldbl='$d_PRIeldbl'
16573 d_PRIfldbl='$d_PRIfldbl'
16574 d_PRIgldbl='$d_PRIgldbl'
16575 d_PRIi64='$d_PRIi64'
16576 d_PRIo64='$d_PRIo64'
16577 d_PRIu64='$d_PRIu64'
16578 d_PRIx64='$d_PRIx64'
16579 d_SCNfldbl='$d_SCNfldbl'
16580 d__fwalk='$d__fwalk'
16581 d_access='$d_access'
16582 d_accessx='$d_accessx'
16583 d_alarm='$d_alarm'
16584 d_archlib='$d_archlib'
16585 d_atolf='$d_atolf'
16586 d_atoll='$d_atoll'
16587 d_attribut='$d_attribut'
16588 d_bcmp='$d_bcmp'
16589 d_bcopy='$d_bcopy'
16590 d_bincompat5005='$d_bincompat5005'
16591 d_bsd='$d_bsd'
16592 d_bsdgetpgrp='$d_bsdgetpgrp'
16593 d_bsdsetpgrp='$d_bsdsetpgrp'
16594 d_bzero='$d_bzero'
16595 d_casti32='$d_casti32'
16596 d_castneg='$d_castneg'
16597 d_charvspr='$d_charvspr'
16598 d_chown='$d_chown'
16599 d_chroot='$d_chroot'
16600 d_chsize='$d_chsize'
16601 d_closedir='$d_closedir'
16602 d_cmsghdr_s='$d_cmsghdr_s'
16603 d_const='$d_const'
16604 d_crypt='$d_crypt'
16605 d_csh='$d_csh'
16606 d_cuserid='$d_cuserid'
16607 d_dbl_dig='$d_dbl_dig'
16608 d_dbminitproto='$d_dbminitproto'
16609 d_difftime='$d_difftime'
16610 d_dirnamlen='$d_dirnamlen'
16611 d_dlerror='$d_dlerror'
16612 d_dlopen='$d_dlopen'
16613 d_dlsymun='$d_dlsymun'
16614 d_dosuid='$d_dosuid'
16615 d_drand48proto='$d_drand48proto'
16616 d_dup2='$d_dup2'
16617 d_eaccess='$d_eaccess'
16618 d_endgrent='$d_endgrent'
16619 d_endhent='$d_endhent'
16620 d_endnent='$d_endnent'
16621 d_endpent='$d_endpent'
16622 d_endpwent='$d_endpwent'
16623 d_endsent='$d_endsent'
16624 d_eofnblk='$d_eofnblk'
16625 d_eunice='$d_eunice'
16626 d_fchdir='$d_fchdir'
16627 d_fchmod='$d_fchmod'
16628 d_fchown='$d_fchown'
16629 d_fcntl='$d_fcntl'
16630 d_fcntl_can_lock='$d_fcntl_can_lock'
16631 d_fd_macros='$d_fd_macros'
16632 d_fd_set='$d_fd_set'
16633 d_fds_bits='$d_fds_bits'
16634 d_fgetpos='$d_fgetpos'
16635 d_flexfnam='$d_flexfnam'
16636 d_flock='$d_flock'
16637 d_flockproto='$d_flockproto'
16638 d_fork='$d_fork'
16639 d_fpathconf='$d_fpathconf'
16640 d_fpos64_t='$d_fpos64_t'
16641 d_frexpl='$d_frexpl'
16642 d_fs_data_s='$d_fs_data_s'
16643 d_fseeko='$d_fseeko'
16644 d_fsetpos='$d_fsetpos'
16645 d_fstatfs='$d_fstatfs'
16646 d_fstatvfs='$d_fstatvfs'
16647 d_fsync='$d_fsync'
16648 d_ftello='$d_ftello'
16649 d_ftime='$d_ftime'
16650 d_getcwd='$d_getcwd'
16651 d_getespwnam='$d_getespwnam'
16652 d_getfsstat='$d_getfsstat'
16653 d_getgrent='$d_getgrent'
16654 d_getgrps='$d_getgrps'
16655 d_gethbyaddr='$d_gethbyaddr'
16656 d_gethbyname='$d_gethbyname'
16657 d_gethent='$d_gethent'
16658 d_gethname='$d_gethname'
16659 d_gethostprotos='$d_gethostprotos'
16660 d_getitimer='$d_getitimer'
16661 d_getlogin='$d_getlogin'
16662 d_getmnt='$d_getmnt'
16663 d_getmntent='$d_getmntent'
16664 d_getnbyaddr='$d_getnbyaddr'
16665 d_getnbyname='$d_getnbyname'
16666 d_getnent='$d_getnent'
16667 d_getnetprotos='$d_getnetprotos'
16668 d_getpagsz='$d_getpagsz'
16669 d_getpbyname='$d_getpbyname'
16670 d_getpbynumber='$d_getpbynumber'
16671 d_getpent='$d_getpent'
16672 d_getpgid='$d_getpgid'
16673 d_getpgrp2='$d_getpgrp2'
16674 d_getpgrp='$d_getpgrp'
16675 d_getppid='$d_getppid'
16676 d_getprior='$d_getprior'
16677 d_getprotoprotos='$d_getprotoprotos'
16678 d_getprpwnam='$d_getprpwnam'
16679 d_getpwent='$d_getpwent'
16680 d_getsbyname='$d_getsbyname'
16681 d_getsbyport='$d_getsbyport'
16682 d_getsent='$d_getsent'
16683 d_getservprotos='$d_getservprotos'
16684 d_getspnam='$d_getspnam'
16685 d_gettimeod='$d_gettimeod'
16686 d_gnulibc='$d_gnulibc'
16687 d_grpasswd='$d_grpasswd'
16688 d_hasmntopt='$d_hasmntopt'
16689 d_htonl='$d_htonl'
16690 d_iconv='$d_iconv'
16691 d_index='$d_index'
16692 d_inetaton='$d_inetaton'
16693 d_int64_t='$d_int64_t'
16694 d_isascii='$d_isascii'
16695 d_isnan='$d_isnan'
16696 d_isnanl='$d_isnanl'
16697 d_killpg='$d_killpg'
16698 d_lchown='$d_lchown'
16699 d_ldbl_dig='$d_ldbl_dig'
16700 d_link='$d_link'
16701 d_locconv='$d_locconv'
16702 d_lockf='$d_lockf'
16703 d_longdbl='$d_longdbl'
16704 d_longlong='$d_longlong'
16705 d_lseekproto='$d_lseekproto'
16706 d_lstat='$d_lstat'
16707 d_madvise='$d_madvise'
16708 d_mblen='$d_mblen'
16709 d_mbstowcs='$d_mbstowcs'
16710 d_mbtowc='$d_mbtowc'
16711 d_memchr='$d_memchr'
16712 d_memcmp='$d_memcmp'
16713 d_memcpy='$d_memcpy'
16714 d_memmove='$d_memmove'
16715 d_memset='$d_memset'
16716 d_mkdir='$d_mkdir'
16717 d_mkdtemp='$d_mkdtemp'
16718 d_mkfifo='$d_mkfifo'
16719 d_mkstemp='$d_mkstemp'
16720 d_mkstemps='$d_mkstemps'
16721 d_mktime='$d_mktime'
16722 d_mmap='$d_mmap'
16723 d_modfl='$d_modfl'
16724 d_modfl_pow32_bug='$d_modfl_pow32_bug'
16725 d_mprotect='$d_mprotect'
16726 d_msg='$d_msg'
16727 d_msg_ctrunc='$d_msg_ctrunc'
16728 d_msg_dontroute='$d_msg_dontroute'
16729 d_msg_oob='$d_msg_oob'
16730 d_msg_peek='$d_msg_peek'
16731 d_msg_proxy='$d_msg_proxy'
16732 d_msgctl='$d_msgctl'
16733 d_msgget='$d_msgget'
16734 d_msghdr_s='$d_msghdr_s'
16735 d_msgrcv='$d_msgrcv'
16736 d_msgsnd='$d_msgsnd'
16737 d_msync='$d_msync'
16738 d_munmap='$d_munmap'
16739 d_mymalloc='$d_mymalloc'
16740 d_nice='$d_nice'
16741 d_nv_preserves_uv='$d_nv_preserves_uv'
16742 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
16743 d_off64_t='$d_off64_t'
16744 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
16745 d_oldpthreads='$d_oldpthreads'
16746 d_oldsock='$d_oldsock'
16747 d_open3='$d_open3'
16748 d_pathconf='$d_pathconf'
16749 d_pause='$d_pause'
16750 d_perl_otherlibdirs='$d_perl_otherlibdirs'
16751 d_phostname='$d_phostname'
16752 d_pipe='$d_pipe'
16753 d_poll='$d_poll'
16754 d_portable='$d_portable'
16755 d_pthread_yield='$d_pthread_yield'
16756 d_pwage='$d_pwage'
16757 d_pwchange='$d_pwchange'
16758 d_pwclass='$d_pwclass'
16759 d_pwcomment='$d_pwcomment'
16760 d_pwexpire='$d_pwexpire'
16761 d_pwgecos='$d_pwgecos'
16762 d_pwpasswd='$d_pwpasswd'
16763 d_pwquota='$d_pwquota'
16764 d_qgcvt='$d_qgcvt'
16765 d_quad='$d_quad'
16766 d_readdir='$d_readdir'
16767 d_readlink='$d_readlink'
16768 d_readv='$d_readv'
16769 d_recvmsg='$d_recvmsg'
16770 d_rename='$d_rename'
16771 d_rewinddir='$d_rewinddir'
16772 d_rmdir='$d_rmdir'
16773 d_safebcpy='$d_safebcpy'
16774 d_safemcpy='$d_safemcpy'
16775 d_sanemcmp='$d_sanemcmp'
16776 d_sbrkproto='$d_sbrkproto'
16777 d_sched_yield='$d_sched_yield'
16778 d_scm_rights='$d_scm_rights'
16779 d_seekdir='$d_seekdir'
16780 d_select='$d_select'
16781 d_sem='$d_sem'
16782 d_semctl='$d_semctl'
16783 d_semctl_semid_ds='$d_semctl_semid_ds'
16784 d_semctl_semun='$d_semctl_semun'
16785 d_semget='$d_semget'
16786 d_semop='$d_semop'
16787 d_sendmsg='$d_sendmsg'
16788 d_setegid='$d_setegid'
16789 d_seteuid='$d_seteuid'
16790 d_setgrent='$d_setgrent'
16791 d_setgrps='$d_setgrps'
16792 d_sethent='$d_sethent'
16793 d_setitimer='$d_setitimer'
16794 d_setlinebuf='$d_setlinebuf'
16795 d_setlocale='$d_setlocale'
16796 d_setnent='$d_setnent'
16797 d_setpent='$d_setpent'
16798 d_setpgid='$d_setpgid'
16799 d_setpgrp2='$d_setpgrp2'
16800 d_setpgrp='$d_setpgrp'
16801 d_setprior='$d_setprior'
16802 d_setproctitle='$d_setproctitle'
16803 d_setpwent='$d_setpwent'
16804 d_setregid='$d_setregid'
16805 d_setresgid='$d_setresgid'
16806 d_setresuid='$d_setresuid'
16807 d_setreuid='$d_setreuid'
16808 d_setrgid='$d_setrgid'
16809 d_setruid='$d_setruid'
16810 d_setsent='$d_setsent'
16811 d_setsid='$d_setsid'
16812 d_setvbuf='$d_setvbuf'
16813 d_sfio='$d_sfio'
16814 d_shm='$d_shm'
16815 d_shmat='$d_shmat'
16816 d_shmatprototype='$d_shmatprototype'
16817 d_shmctl='$d_shmctl'
16818 d_shmdt='$d_shmdt'
16819 d_shmget='$d_shmget'
16820 d_sigaction='$d_sigaction'
16821 d_sigprocmask='$d_sigprocmask'
16822 d_sigsetjmp='$d_sigsetjmp'
16823 d_sockatmark='$d_sockatmark'
16824 d_sockatmarkproto='$d_sockatmarkproto'
16825 d_socket='$d_socket'
16826 d_socklen_t='$d_socklen_t'
16827 d_sockpair='$d_sockpair'
16828 d_socks5_init='$d_socks5_init'
16829 d_sqrtl='$d_sqrtl'
16830 d_sresgproto='$d_sresgproto'
16831 d_sresuproto='$d_sresuproto'
16832 d_statblks='$d_statblks'
16833 d_statfs_f_flags='$d_statfs_f_flags'
16834 d_statfs_s='$d_statfs_s'
16835 d_statvfs='$d_statvfs'
16836 d_stdio_cnt_lval='$d_stdio_cnt_lval'
16837 d_stdio_ptr_lval='$d_stdio_ptr_lval'
16838 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
16839 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
16840 d_stdio_stream_array='$d_stdio_stream_array'
16841 d_stdiobase='$d_stdiobase'
16842 d_stdstdio='$d_stdstdio'
16843 d_strchr='$d_strchr'
16844 d_strcoll='$d_strcoll'
16845 d_strctcpy='$d_strctcpy'
16846 d_strerrm='$d_strerrm'
16847 d_strerror='$d_strerror'
16848 d_strftime='$d_strftime'
16849 d_strtod='$d_strtod'
16850 d_strtol='$d_strtol'
16851 d_strtold='$d_strtold'
16852 d_strtoll='$d_strtoll'
16853 d_strtoq='$d_strtoq'
16854 d_strtoul='$d_strtoul'
16855 d_strtoull='$d_strtoull'
16856 d_strtouq='$d_strtouq'
16857 d_strxfrm='$d_strxfrm'
16858 d_suidsafe='$d_suidsafe'
16859 d_symlink='$d_symlink'
16860 d_syscall='$d_syscall'
16861 d_syscallproto='$d_syscallproto'
16862 d_sysconf='$d_sysconf'
16863 d_sysernlst='$d_sysernlst'
16864 d_syserrlst='$d_syserrlst'
16865 d_system='$d_system'
16866 d_tcgetpgrp='$d_tcgetpgrp'
16867 d_tcsetpgrp='$d_tcsetpgrp'
16868 d_telldir='$d_telldir'
16869 d_telldirproto='$d_telldirproto'
16870 d_time='$d_time'
16871 d_times='$d_times'
16872 d_truncate='$d_truncate'
16873 d_tzname='$d_tzname'
16874 d_u32align='$d_u32align'
16875 d_ualarm='$d_ualarm'
16876 d_umask='$d_umask'
16877 d_uname='$d_uname'
16878 d_union_semun='$d_union_semun'
16879 d_usleep='$d_usleep'
16880 d_usleepproto='$d_usleepproto'
16881 d_ustat='$d_ustat'
16882 d_vendorarch='$d_vendorarch'
16883 d_vendorbin='$d_vendorbin'
16884 d_vendorlib='$d_vendorlib'
16885 d_vfork='$d_vfork'
16886 d_void_closedir='$d_void_closedir'
16887 d_voidsig='$d_voidsig'
16888 d_voidtty='$d_voidtty'
16889 d_volatile='$d_volatile'
16890 d_vprintf='$d_vprintf'
16891 d_wait4='$d_wait4'
16892 d_waitpid='$d_waitpid'
16893 d_wcstombs='$d_wcstombs'
16894 d_wctomb='$d_wctomb'
16895 d_writev='$d_writev'
16896 d_xenix='$d_xenix'
16897 date='$date'
16898 db_hashtype='$db_hashtype'
16899 db_prefixtype='$db_prefixtype'
16900 db_version_major='$db_version_major'
16901 db_version_minor='$db_version_minor'
16902 db_version_patch='$db_version_patch'
16903 defvoidused='$defvoidused'
16904 direntrytype='$direntrytype'
16905 dlext='$dlext'
16906 dlsrc='$dlsrc'
16907 doublesize='$doublesize'
16908 drand01='$drand01'
16909 dynamic_ext='$dynamic_ext'
16910 eagain='$eagain'
16911 ebcdic='$ebcdic'
16912 echo='$echo'
16913 egrep='$egrep'
16914 emacs='$emacs'
16915 eunicefix='$eunicefix'
16916 exe_ext='$exe_ext'
16917 expr='$expr'
16918 extensions='$extensions'
16919 fflushNULL='$fflushNULL'
16920 fflushall='$fflushall'
16921 find='$find'
16922 firstmakefile='$firstmakefile'
16923 flex='$flex'
16924 fpossize='$fpossize'
16925 fpostype='$fpostype'
16926 freetype='$freetype'
16927 from='$from'
16928 full_ar='$full_ar'
16929 full_csh='$full_csh'
16930 full_sed='$full_sed'
16931 gccosandvers='$gccosandvers'
16932 gccversion='$gccversion'
16933 gidformat='$gidformat'
16934 gidsign='$gidsign'
16935 gidsize='$gidsize'
16936 gidtype='$gidtype'
16937 glibpth='$glibpth'
16938 grep='$grep'
16939 groupcat='$groupcat'
16940 groupstype='$groupstype'
16941 gzip='$gzip'
16942 h_fcntl='$h_fcntl'
16943 h_sysfile='$h_sysfile'
16944 hint='$hint'
16945 hostcat='$hostcat'
16946 i16size='$i16size'
16947 i16type='$i16type'
16948 i32size='$i32size'
16949 i32type='$i32type'
16950 i64size='$i64size'
16951 i64type='$i64type'
16952 i8size='$i8size'
16953 i8type='$i8type'
16954 i_arpainet='$i_arpainet'
16955 i_bsdioctl='$i_bsdioctl'
16956 i_db='$i_db'
16957 i_dbm='$i_dbm'
16958 i_dirent='$i_dirent'
16959 i_dld='$i_dld'
16960 i_dlfcn='$i_dlfcn'
16961 i_fcntl='$i_fcntl'
16962 i_float='$i_float'
16963 i_gdbm='$i_gdbm'
16964 i_grp='$i_grp'
16965 i_iconv='$i_iconv'
16966 i_ieeefp='$i_ieeefp'
16967 i_inttypes='$i_inttypes'
16968 i_libutil='$i_libutil'
16969 i_limits='$i_limits'
16970 i_locale='$i_locale'
16971 i_machcthr='$i_machcthr'
16972 i_malloc='$i_malloc'
16973 i_math='$i_math'
16974 i_memory='$i_memory'
16975 i_mntent='$i_mntent'
16976 i_ndbm='$i_ndbm'
16977 i_netdb='$i_netdb'
16978 i_neterrno='$i_neterrno'
16979 i_netinettcp='$i_netinettcp'
16980 i_niin='$i_niin'
16981 i_poll='$i_poll'
16982 i_prot='$i_prot'
16983 i_pthread='$i_pthread'
16984 i_pwd='$i_pwd'
16985 i_rpcsvcdbm='$i_rpcsvcdbm'
16986 i_sfio='$i_sfio'
16987 i_sgtty='$i_sgtty'
16988 i_shadow='$i_shadow'
16989 i_socks='$i_socks'
16990 i_stdarg='$i_stdarg'
16991 i_stddef='$i_stddef'
16992 i_stdlib='$i_stdlib'
16993 i_string='$i_string'
16994 i_sunmath='$i_sunmath'
16995 i_sysaccess='$i_sysaccess'
16996 i_sysdir='$i_sysdir'
16997 i_sysfile='$i_sysfile'
16998 i_sysfilio='$i_sysfilio'
16999 i_sysin='$i_sysin'
17000 i_sysioctl='$i_sysioctl'
17001 i_syslog='$i_syslog'
17002 i_sysmman='$i_sysmman'
17003 i_sysmode='$i_sysmode'
17004 i_sysmount='$i_sysmount'
17005 i_sysndir='$i_sysndir'
17006 i_sysparam='$i_sysparam'
17007 i_sysresrc='$i_sysresrc'
17008 i_syssecrt='$i_syssecrt'
17009 i_sysselct='$i_sysselct'
17010 i_syssockio='$i_syssockio'
17011 i_sysstat='$i_sysstat'
17012 i_sysstatfs='$i_sysstatfs'
17013 i_sysstatvfs='$i_sysstatvfs'
17014 i_systime='$i_systime'
17015 i_systimek='$i_systimek'
17016 i_systimes='$i_systimes'
17017 i_systypes='$i_systypes'
17018 i_sysuio='$i_sysuio'
17019 i_sysun='$i_sysun'
17020 i_sysutsname='$i_sysutsname'
17021 i_sysvfs='$i_sysvfs'
17022 i_syswait='$i_syswait'
17023 i_termio='$i_termio'
17024 i_termios='$i_termios'
17025 i_time='$i_time'
17026 i_unistd='$i_unistd'
17027 i_ustat='$i_ustat'
17028 i_utime='$i_utime'
17029 i_values='$i_values'
17030 i_varargs='$i_varargs'
17031 i_varhdr='$i_varhdr'
17032 i_vfork='$i_vfork'
17033 ignore_versioned_solibs='$ignore_versioned_solibs'
17034 inc_version_list='$inc_version_list'
17035 inc_version_list_init='$inc_version_list_init'
17036 incpath='$incpath'
17037 inews='$inews'
17038 installarchlib='$installarchlib'
17039 installbin='$installbin'
17040 installman1dir='$installman1dir'
17041 installman3dir='$installman3dir'
17042 installprefix='$installprefix'
17043 installprefixexp='$installprefixexp'
17044 installprivlib='$installprivlib'
17045 installscript='$installscript'
17046 installsitearch='$installsitearch'
17047 installsitebin='$installsitebin'
17048 installsitelib='$installsitelib'
17049 installstyle='$installstyle'
17050 installusrbinperl='$installusrbinperl'
17051 installvendorarch='$installvendorarch'
17052 installvendorbin='$installvendorbin'
17053 installvendorlib='$installvendorlib'
17054 intsize='$intsize'
17055 issymlink='$issymlink'
17056 ivdformat='$ivdformat'
17057 ivsize='$ivsize'
17058 ivtype='$ivtype'
17059 known_extensions='$known_extensions'
17060 ksh='$ksh'
17061 ld='$ld'
17062 lddlflags='$lddlflags'
17063 ldflags='$ldflags'
17064 ldflags_uselargefiles='$ldflags_uselargefiles'
17065 ldlibpthname='$ldlibpthname'
17066 less='$less'
17067 lib_ext='$lib_ext'
17068 libc='$libc'
17069 libperl='$libperl'
17070 libpth='$libpth'
17071 libs='$libs'
17072 libsdirs='$libsdirs'
17073 libsfiles='$libsfiles'
17074 libsfound='$libsfound'
17075 libspath='$libspath'
17076 libswanted='$libswanted'
17077 libswanted_uselargefiles='$libswanted_uselargefiles'
17078 line='$line'
17079 lint='$lint'
17080 lkflags='$lkflags'
17081 ln='$ln'
17082 lns='$lns'
17083 locincpth='$locincpth'
17084 loclibpth='$loclibpth'
17085 longdblsize='$longdblsize'
17086 longlongsize='$longlongsize'
17087 longsize='$longsize'
17088 lp='$lp'
17089 lpr='$lpr'
17090 ls='$ls'
17091 lseeksize='$lseeksize'
17092 lseektype='$lseektype'
17093 mail='$mail'
17094 mailx='$mailx'
17095 make='$make'
17096 make_set_make='$make_set_make'
17097 mallocobj='$mallocobj'
17098 mallocsrc='$mallocsrc'
17099 malloctype='$malloctype'
17100 man1dir='$man1dir'
17101 man1direxp='$man1direxp'
17102 man1ext='$man1ext'
17103 man3dir='$man3dir'
17104 man3direxp='$man3direxp'
17105 man3ext='$man3ext'
17106 mips_type='$mips_type'
17107 mkdir='$mkdir'
17108 mmaptype='$mmaptype'
17109 modetype='$modetype'
17110 more='$more'
17111 multiarch='$multiarch'
17112 mv='$mv'
17113 myarchname='$myarchname'
17114 mydomain='$mydomain'
17115 myhostname='$myhostname'
17116 myuname='$myuname'
17117 n='$n'
17118 need_va_copy='$need_va_copy'
17119 netdb_hlen_type='$netdb_hlen_type'
17120 netdb_host_type='$netdb_host_type'
17121 netdb_name_type='$netdb_name_type'
17122 netdb_net_type='$netdb_net_type'
17123 nm='$nm'
17124 nm_opt='$nm_opt'
17125 nm_so_opt='$nm_so_opt'
17126 nonxs_ext='$nonxs_ext'
17127 nroff='$nroff'
17128 nvEUformat='$nvEUformat'
17129 nvFUformat='$nvFUformat'
17130 nvGUformat='$nvGUformat'
17131 nveformat='$nveformat'
17132 nvfformat='$nvfformat'
17133 nvgformat='$nvgformat'
17134 nvsize='$nvsize'
17135 nvtype='$nvtype'
17136 o_nonblock='$o_nonblock'
17137 obj_ext='$obj_ext'
17138 old_pthread_create_joinable='$old_pthread_create_joinable'
17139 optimize='$optimize'
17140 orderlib='$orderlib'
17141 osname='$osname'
17142 osvers='$osvers'
17143 otherlibdirs='$otherlibdirs'
17144 package='$package'
17145 pager='$pager'
17146 passcat='$passcat'
17147 patchlevel='$patchlevel'
17148 path_sep='$path_sep'
17149 perl5='$perl5'
17150 perl='$perl'
17151 perl_patchlevel='$perl_patchlevel'
17152 perladmin='$perladmin'
17153 perllibs='$perllibs'
17154 perlpath='$perlpath'
17155 pg='$pg'
17156 phostname='$phostname'
17157 pidtype='$pidtype'
17158 plibpth='$plibpth'
17159 pm_apiversion='$pm_apiversion'
17160 pmake='$pmake'
17161 pr='$pr'
17162 prefix='$prefix'
17163 prefixexp='$prefixexp'
17164 privlib='$privlib'
17165 privlibexp='$privlibexp'
17166 prototype='$prototype'
17167 ptrsize='$ptrsize'
17168 quadkind='$quadkind'
17169 quadtype='$quadtype'
17170 randbits='$randbits'
17171 randfunc='$randfunc'
17172 randseedtype='$randseedtype'
17173 ranlib='$ranlib'
17174 rd_nodata='$rd_nodata'
17175 revision='$revision'
17176 rm='$rm'
17177 rmail='$rmail'
17178 run='$run'
17179 runnm='$runnm'
17180 sPRIEUldbl='$sPRIEUldbl'
17181 sPRIFUldbl='$sPRIFUldbl'
17182 sPRIGUldbl='$sPRIGUldbl'
17183 sPRIXU64='$sPRIXU64'
17184 sPRId64='$sPRId64'
17185 sPRIeldbl='$sPRIeldbl'
17186 sPRIfldbl='$sPRIfldbl'
17187 sPRIgldbl='$sPRIgldbl'
17188 sPRIi64='$sPRIi64'
17189 sPRIo64='$sPRIo64'
17190 sPRIu64='$sPRIu64'
17191 sPRIx64='$sPRIx64'
17192 sSCNfldbl='$sSCNfldbl'
17193 sched_yield='$sched_yield'
17194 scriptdir='$scriptdir'
17195 scriptdirexp='$scriptdirexp'
17196 sed='$sed'
17197 seedfunc='$seedfunc'
17198 selectminbits='$selectminbits'
17199 selecttype='$selecttype'
17200 sendmail='$sendmail'
17201 sh='$sh'
17202 shar='$shar'
17203 sharpbang='$sharpbang'
17204 shmattype='$shmattype'
17205 shortsize='$shortsize'
17206 shrpenv='$shrpenv'
17207 shsharp='$shsharp'
17208 sig_count='$sig_count'
17209 sig_name='$sig_name'
17210 sig_name_init='$sig_name_init'
17211 sig_num='$sig_num'
17212 sig_num_init='$sig_num_init'
17213 sig_size='$sig_size'
17214 signal_t='$signal_t'
17215 sitearch='$sitearch'
17216 sitearchexp='$sitearchexp'
17217 sitebin='$sitebin'
17218 sitebinexp='$sitebinexp'
17219 sitelib='$sitelib'
17220 sitelib_stem='$sitelib_stem'
17221 sitelibexp='$sitelibexp'
17222 siteprefix='$siteprefix'
17223 siteprefixexp='$siteprefixexp'
17224 sizesize='$sizesize'
17225 sizetype='$sizetype'
17226 sleep='$sleep'
17227 smail='$smail'
17228 so='$so'
17229 sockethdr='$sockethdr'
17230 socketlib='$socketlib'
17231 socksizetype='$socksizetype'
17232 sort='$sort'
17233 spackage='$spackage'
17234 spitshell='$spitshell'
17235 src='$src'
17236 ssizetype='$ssizetype'
17237 startperl='$startperl'
17238 startsh='$startsh'
17239 static_ext='$static_ext'
17240 stdchar='$stdchar'
17241 stdio_base='$stdio_base'
17242 stdio_bufsiz='$stdio_bufsiz'
17243 stdio_cnt='$stdio_cnt'
17244 stdio_filbuf='$stdio_filbuf'
17245 stdio_ptr='$stdio_ptr'
17246 stdio_stream_array='$stdio_stream_array'
17247 strings='$strings'
17248 submit='$submit'
17249 subversion='$subversion'
17250 sysman='$sysman'
17251 tail='$tail'
17252 tar='$tar'
17253 targetarch='$targetarch'
17254 tbl='$tbl'
17255 tee='$tee'
17256 test='$test'
17257 timeincl='$timeincl'
17258 timetype='$timetype'
17259 to='$to'
17260 touch='$touch'
17261 tr='$tr'
17262 trnl='$trnl'
17263 troff='$troff'
17264 u16size='$u16size'
17265 u16type='$u16type'
17266 u32size='$u32size'
17267 u32type='$u32type'
17268 u64size='$u64size'
17269 u64type='$u64type'
17270 u8size='$u8size'
17271 u8type='$u8type'
17272 uidformat='$uidformat'
17273 uidsign='$uidsign'
17274 uidsize='$uidsize'
17275 uidtype='$uidtype'
17276 uname='$uname'
17277 uniq='$uniq'
17278 uquadtype='$uquadtype'
17279 use5005threads='$use5005threads'
17280 use64bitall='$use64bitall'
17281 use64bitint='$use64bitint'
17282 usecrosscompile='$usecrosscompile'
17283 usedl='$usedl'
17284 useithreads='$useithreads'
17285 uselargefiles='$uselargefiles'
17286 uselongdouble='$uselongdouble'
17287 usemorebits='$usemorebits'
17288 usemultiplicity='$usemultiplicity'
17289 usemymalloc='$usemymalloc'
17290 usenm='$usenm'
17291 useopcode='$useopcode'
17292 useperlio='$useperlio'
17293 useposix='$useposix'
17294 usereentrant='$usereentrant'
17295 usesfio='$usesfio'
17296 useshrplib='$useshrplib'
17297 usesocks='$usesocks'
17298 usethreads='$usethreads'
17299 usevendorprefix='$usevendorprefix'
17300 usevfork='$usevfork'
17301 usrinc='$usrinc'
17302 uuname='$uuname'
17303 uvXUformat='$uvXUformat'
17304 uvoformat='$uvoformat'
17305 uvsize='$uvsize'
17306 uvtype='$uvtype'
17307 uvuformat='$uvuformat'
17308 uvxformat='$uvxformat'
17309 vendorarch='$vendorarch'
17310 vendorarchexp='$vendorarchexp'
17311 vendorbin='$vendorbin'
17312 vendorbinexp='$vendorbinexp'
17313 vendorlib='$vendorlib'
17314 vendorlib_stem='$vendorlib_stem'
17315 vendorlibexp='$vendorlibexp'
17316 vendorprefix='$vendorprefix'
17317 vendorprefixexp='$vendorprefixexp'
17318 version='$version'
17319 versiononly='$versiononly'
17320 vi='$vi'
17321 voidflags='$voidflags'
17322 xlibpth='$xlibpth'
17323 xs_apiversion='$xs_apiversion'
17324 yacc='$yacc'
17325 yaccflags='$yaccflags'
17326 zcat='$zcat'
17327 zip='$zip'
17328 EOT
17329
17330 : Add in command line options if available
17331 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
17332
17333 : add special variables
17334 $test -f $src/patchlevel.h && \
17335 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
17336 echo "PERL_PATCHLEVEL=$perl_patchlevel" >>config.sh
17337 echo "PERL_CONFIG_SH=true" >>config.sh
17338
17339 : propagate old symbols
17340 if $test -f UU/config.sh; then
17341         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
17342         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
17343         $sort | $uniq -u >UU/oldsyms
17344         set X `cat UU/oldsyms`
17345         shift
17346         case $# in
17347         0) ;;
17348         *)
17349                 cat <<EOM
17350 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
17351 EOM
17352                 echo "# Variables propagated from previous config.sh file." >>config.sh
17353                 for sym in `cat UU/oldsyms`; do
17354                         echo "    Propagating $hint variable "'$'"$sym..."
17355                         eval 'tmp="$'"${sym}"'"'
17356                         echo "$tmp" | \
17357                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
17358                 done
17359                 ;;
17360         esac
17361 fi
17362
17363 : Finish up by extracting the .SH files
17364 case "$alldone" in
17365 exit)
17366         $rm -rf UU
17367         echo "Extraction done."
17368         exit 0
17369         ;;
17370 cont)
17371         ;;
17372 '')
17373         dflt=''
17374         nostick=true
17375         $cat <<EOM
17376
17377 If you'd like to make any changes to the config.sh file before I begin
17378 to configure things, do it as a shell escape now (e.g. !vi config.sh).
17379
17380 EOM
17381         rp="Press return or use a shell escape to edit config.sh:"
17382         . UU/myread
17383         nostick=''
17384         case "$ans" in
17385         '') ;;
17386         *) : in case they cannot read
17387                 sh 1>&4 -c "$ans";;
17388         esac
17389         ;;
17390 esac
17391
17392 : if this fails, just run all the .SH files by hand
17393 . ./config.sh
17394
17395 echo " "
17396 exec 1>&4
17397 pwd=`pwd`
17398 . ./UU/extract
17399 cd $pwd
17400
17401 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
17402         dflt=y
17403         case "$silent" in
17404         true) ;;
17405         *)
17406                 $cat <<EOM
17407
17408 Now you need to generate make dependencies by running "$make depend".
17409 You might prefer to run it in background: "$make depend > makedepend.out &"
17410 It can take a while, so you might not want to run it right now.
17411
17412 EOM
17413                 ;;
17414         esac
17415         rp="Run $make depend now?"
17416         . UU/myread
17417         case "$ans" in
17418         y*)
17419                 $make depend && echo "Now you must run '$make'."
17420                 ;;
17421         *)
17422                 echo "You must run '$make depend' then '$make'."
17423                 ;;
17424         esac
17425 elif test -f [Mm]akefile; then
17426         echo " "
17427         echo "Now you must run a $make."
17428 else
17429         echo "Configure done."
17430 fi
17431
17432 if $test -f Policy.sh; then
17433     $cat <<EOM
17434
17435 If you compile $package on a different machine or from a different object
17436 directory, copy the Policy.sh file from this object directory to the
17437 new one before you run Configure -- this will help you with most of
17438 the policy defaults.
17439
17440 EOM
17441 fi
17442 if $test -f config.msg; then
17443     echo "Hmm.  I also noted the following information while running:"
17444     echo " "
17445     $cat config.msg >&4
17446     $rm -f config.msg
17447 fi
17448 $rm -f kit*isdone ark*isdone
17449 $rm -rf UU
17450
17451 : End of Configure
17452