Move use64bitint and use64bitall before uselargefiles.
[p5sagit/p5-mst-13.2.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Thu Jun 28 16:56:19 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 args_exp=''
1194 args_sep=''
1195 for arg in "$@"; do
1196         cat >>cmdline.opt <<EOSH
1197 config_arg$argn='$arg'
1198 EOSH
1199         # Extreme backslashitis: replace each ' by '"'"'
1200         cat <<EOC | sed -e "s/'/'"'"'"'"'"'"'/g" > cmdl.opt
1201 $arg
1202 EOC
1203         arg_exp=`cat cmdl.opt`
1204         args_exp="$args_exp$args_sep'$arg_exp'"
1205         argn=`expr $argn + 1`
1206         args_sep=' '
1207 done
1208 # args_exp is good for restarting self: eval "set X $args_exp"; shift; $0 "$@"
1209 # used by ./hints/os2.sh
1210 rm -f cmdl.opt
1211
1212 : produce awk script to parse command line options
1213 cat >options.awk <<'EOF'
1214 BEGIN {
1215         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1216
1217         len = length(optstr);
1218         for (i = 1; i <= len; i++) {
1219                 c = substr(optstr, i, 1);
1220                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1221                 if (a == ":") {
1222                         arg[c] = 1;
1223                         i++;
1224                 }
1225                 opt[c] = 1;
1226         }
1227 }
1228 {
1229         expect = 0;
1230         str = $0;
1231         if (substr(str, 1, 1) != "-") {
1232                 printf("'%s'\n", str);
1233                 next;
1234         }
1235         len = length($0);
1236         for (i = 2; i <= len; i++) {
1237                 c = substr(str, i, 1);
1238                 if (!opt[c]) {
1239                         printf("-%s\n", substr(str, i));
1240                         next;
1241                 }
1242                 printf("-%s\n", c);
1243                 if (arg[c]) {
1244                         if (i < len)
1245                                 printf("'%s'\n", substr(str, i + 1));
1246                         else
1247                                 expect = 1;
1248                         next;
1249                 }
1250         }
1251 }
1252 END {
1253         if (expect)
1254                 print "?";
1255 }
1256 EOF
1257
1258 : process the command line options
1259 set X `for arg in "$@"; do echo "X$arg"; done |
1260         sed -e s/X// | awk -f options.awk`
1261 eval "set $*"
1262 shift
1263 rm -f options.awk
1264
1265 : set up default values
1266 fastread=''
1267 reuseval=false
1268 config_sh=''
1269 alldone=''
1270 error=''
1271 silent=''
1272 extractsh=''
1273 override=''
1274 knowitall=''
1275 rm -f optdef.sh posthint.sh
1276 cat >optdef.sh <<EOS
1277 $startsh
1278 EOS
1279
1280
1281 : option parsing
1282 while test $# -gt 0; do
1283         case "$1" in
1284         -d) shift; fastread=yes;;
1285         -e) shift; alldone=cont;;
1286         -f)
1287                 shift
1288                 cd ..
1289                 if test -r "$1"; then
1290                         config_sh="$1"
1291                 else
1292                         echo "$me: cannot read config file $1." >&2
1293                         error=true
1294                 fi
1295                 cd UU
1296                 shift;;
1297         -h) shift; error=true;;
1298         -r) shift; reuseval=true;;
1299         -s) shift; silent=true; realsilent=true;;
1300         -E) shift; alldone=exit;;
1301         -K) shift; knowitall=true;;
1302         -O) shift; override=true;;
1303         -S) shift; silent=true; extractsh=true;;
1304         -D)
1305                 shift
1306                 case "$1" in
1307                 *=)
1308                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1309                         echo "$me: ignoring -D $1" >&2
1310                         ;;
1311                 *=*) echo "$1" | \
1312                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1313                 *) echo "$1='define'" >> optdef.sh;;
1314                 esac
1315                 shift
1316                 ;;
1317         -U)
1318                 shift
1319                 case "$1" in
1320                 *=) echo "$1" >> optdef.sh;;
1321                 *=*)
1322                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1323                         echo "$me: ignoring -U $1" >&2
1324                         ;;
1325                 *) echo "$1='undef'" >> optdef.sh;;
1326                 esac
1327                 shift
1328                 ;;
1329         -A)
1330             shift
1331             xxx=''
1332             yyy="$1"
1333             zzz=''
1334             uuu=undef
1335             case "$yyy" in
1336             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1337                  case "$zzz" in
1338                  *:*) zzz='' ;;
1339                  *)   xxx=append
1340                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1341                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1342                  esac
1343                  ;;
1344             esac
1345             case "$xxx" in
1346             '')  case "$yyy" in
1347                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1348                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1349                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1350                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1351                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1352                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1353                  esac
1354                  ;;       
1355             esac
1356             case "$xxx" in
1357             append)
1358                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1359             clear)
1360                 echo "$yyy=''"                  >> posthint.sh ;;
1361             define)
1362                 case "$zzz" in
1363                 '') zzz=define ;;
1364                 esac
1365                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1366             eval)
1367                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1368             prepend)
1369                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1370             undef)
1371                 case "$zzz" in
1372                 '') zzz="$uuu" ;;
1373                 esac
1374                 echo "$yyy=$zzz"                >> posthint.sh ;;
1375             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1376             esac
1377             shift
1378             ;;
1379         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1380             exit 0;;
1381         --) break;;
1382         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1383         *) break;;
1384         esac
1385 done
1386
1387 case "$error" in
1388 true)
1389         cat >&2 <<EOM
1390 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1391                  [-U symbol] [-U symbol=] [-A command:symbol...]
1392   -d : use defaults for all answers.
1393   -e : go on without questioning past the production of config.sh.
1394   -f : specify an alternate default configuration file.
1395   -h : print this help message and exit (with an error status).
1396   -r : reuse C symbols value if possible (skips costly nm extraction).
1397   -s : silent mode, only echoes questions and essential information.
1398   -D : define symbol to have some value:
1399          -D symbol         symbol gets the value 'define'
1400          -D symbol=value   symbol gets the value 'value'
1401   -E : stop at the end of questions, after having produced config.sh.
1402   -K : do not use unless you know what you are doing.
1403   -O : let -D and -U override definitions from loaded configuration file.
1404   -S : perform variable substitutions on all .SH files (can mix with -f)
1405   -U : undefine symbol:
1406          -U symbol    symbol gets the value 'undef'
1407          -U symbol=   symbol gets completely empty
1408   -A : manipulate symbol after the platform specific hints have been applied:
1409          -A symbol=value                append " "value to symbol
1410          -A append:symbol=value         append value to symbol
1411          -A define:symbol=value         define symbol to have value
1412          -A clear:symbol                define symbol to be ''
1413          -A define:symbol               define symbol to be 'define'
1414          -A eval:symbol=value           define symbol to be eval of value
1415          -A prepend:symbol=value        prepend value to symbol
1416          -A undef:symbol                define symbol to be 'undef'
1417          -A undef:symbol=               define symbol to be ''
1418   -V : print version number and exit (with a zero status).
1419 EOM
1420         exit 1
1421         ;;
1422 esac
1423
1424 : Sanity checks
1425 case "$fastread$alldone" in
1426 yescont|yesexit) ;;
1427 *)
1428         case "$extractsh" in
1429         true) ;;
1430         *)
1431                 if test ! -t 0; then
1432                         echo "Say 'sh Configure', not 'sh <Configure'"
1433                         exit 1
1434                 fi
1435                 ;;
1436         esac
1437         ;;
1438 esac
1439
1440 exec 4>&1
1441 case "$silent" in
1442 true) exec 1>/dev/null;;
1443 esac
1444
1445 : run the defines and the undefines, if any, but leave the file out there...
1446 touch optdef.sh
1447 . ./optdef.sh
1448 : create the posthint manipulation script and leave the file out there...
1449 touch posthint.sh
1450
1451 : set package name
1452 package=perl5
1453 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1454 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1455 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1456 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1457 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1458 esac
1459
1460 : Some greps do not return status, grrr.
1461 echo "grimblepritz" >grimble
1462 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1463         contains=contains
1464 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1465         contains=grep
1466 else
1467         contains=contains
1468 fi
1469 rm -f grimble
1470 : the following should work in any shell
1471 case "$contains" in
1472 contains*)
1473         echo " "
1474         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1475         cat >contains <<'EOSS'
1476 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1477 EOSS
1478 chmod +x contains
1479 esac
1480
1481 : Find the path to the source tree
1482 case "$src" in
1483 '') case "$0" in
1484     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1485          case "$src" in
1486          /*)    ;;
1487          .)     ;;
1488          *)     src=`cd ../$src && pwd` ;;
1489          esac
1490          ;;
1491     *)   src='.';;
1492     esac;;
1493 esac
1494 case "$src" in
1495 '')     src=/
1496         rsrc=/
1497         ;;
1498 /*) rsrc="$src";;
1499 *) rsrc="../$src";;
1500 esac
1501 if test -f $rsrc/Configure && \
1502         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1503 then
1504    : found it, so we are ok.
1505 else
1506         rsrc=''
1507         for src in . .. ../.. ../../.. ../../../..; do
1508                 if test -f ../$src/Configure && \
1509                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1510                 then
1511                         rsrc=../$src
1512                         break
1513                 fi
1514         done
1515 fi
1516 case "$rsrc" in
1517 '')
1518         cat <<EOM >&4
1519
1520 Sorry, I can't seem to locate the source dir for $package.  Please start
1521 Configure with an explicit path -- i.e. /some/path/Configure.
1522
1523 EOM
1524         exit 1
1525         ;;
1526 ../.)   rsrc='..';;
1527 *)
1528         echo " "
1529         echo "Sources for $package found in \"$src\"." >&4
1530         ;;
1531 esac
1532
1533 : script used to extract .SH files with variable substitutions
1534 cat >extract <<'EOS'
1535 PERL_CONFIG_SH=true
1536 echo "Doing variable substitutions on .SH files..."
1537 if test -f MANIFEST; then
1538         set x `awk '{print $1}' < MANIFEST | grep '\.SH$'`
1539 else
1540         echo "(Looking for .SH files under the source directory.)"
1541         set x `(cd $src; find . -name "*.SH" -print)`
1542 fi
1543 shift
1544 case $# in
1545 0) set x `(cd $src; echo *.SH)`; shift;;
1546 esac
1547 if test ! -f $src/$1; then
1548         shift
1549 fi
1550 mkdir_p='
1551 name=$1;
1552 create="";
1553 while test $name; do
1554         if test ! -d "$name"; then
1555                 create="$name $create";
1556                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1557                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1558         else
1559                 name="";
1560         fi;
1561 done;
1562 for file in $create; do
1563         mkdir $file;
1564 done
1565 '
1566 for file in $*; do
1567         case "$src" in
1568         ".")
1569                 case "$file" in
1570                 */*)
1571                         dir=`expr X$file : 'X\(.*\)/'`
1572                         file=`expr X$file : 'X.*/\(.*\)'`
1573                         (cd $dir && . ./$file)
1574                         ;;
1575                 *)
1576                         . ./$file
1577                         ;;
1578                 esac
1579                 ;;
1580         *)
1581                 case "$file" in
1582                 */*)
1583                         dir=`expr X$file : 'X\(.*\)/'`
1584                         file=`expr X$file : 'X.*/\(.*\)'`
1585                         (set x $dir; shift; eval $mkdir_p)
1586                         sh <$src/$dir/$file
1587                         ;;
1588                 *)
1589                         sh <$src/$file
1590                         ;;
1591                 esac
1592                 ;;
1593         esac
1594 done
1595 if test -f $src/config_h.SH; then
1596         if test ! -f config.h; then
1597         : oops, they left it out of MANIFEST, probably, so do it anyway.
1598         . $src/config_h.SH
1599         fi
1600 fi
1601 EOS
1602
1603 : extract files and exit if asked to do so
1604 case "$extractsh" in
1605 true)
1606         case "$realsilent" in
1607         true) ;;
1608         *) exec 1>&4;;
1609         esac
1610         case "$config_sh" in
1611         '') config_sh='config.sh';;
1612         esac
1613         echo " "
1614         echo "Fetching answers from $config_sh..."
1615         cd ..
1616         . $config_sh
1617         test "$override" && . ./optdef.sh
1618         echo " "
1619         . UU/extract
1620         rm -rf UU
1621         echo "Extraction done."
1622         exit 0
1623         ;;
1624 esac
1625
1626 : Eunice requires " " instead of "", can you believe it
1627 echo " "
1628 : Here we go...
1629 echo "Beginning of configuration questions for $package."
1630
1631 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1632
1633 : first determine how to suppress newline on echo command
1634 echo " "
1635 echo "Checking echo to see how to suppress newlines..."
1636 (echo "hi there\c" ; echo " ") >.echotmp
1637 if $contains c .echotmp >/dev/null 2>&1 ; then
1638         echo "...using -n."
1639         n='-n'
1640         c=''
1641 else
1642         cat <<'EOM'
1643 ...using \c
1644 EOM
1645         n=''
1646         c='\c'
1647 fi
1648 echo $n "The star should be here-->$c"
1649 echo '*'
1650 rm -f .echotmp
1651
1652 : Now test for existence of everything in MANIFEST
1653 echo " "
1654 if test -f $rsrc/MANIFEST; then
1655         echo "First let's make sure your kit is complete.  Checking..." >&4
1656         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1657         rm -f missing
1658         tmppwd=`pwd`
1659         for filelist in x??; do
1660                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1661         done
1662         if test -s missing; then
1663                 cat missing >&4
1664                 cat >&4 <<'EOM'
1665
1666 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1667
1668 You have the option of continuing the configuration process, despite the
1669 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1670 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1671 and contact the author (perlbug@perl.org).
1672
1673 EOM
1674                 echo $n "Continue? [n] $c" >&4
1675                 read ans
1676                 case "$ans" in
1677                 y*)
1678                         echo "Continuing..." >&4
1679                         rm -f missing
1680                         ;;
1681                 *)
1682                         echo "ABORTING..." >&4
1683                         kill $$
1684                         ;;
1685                 esac
1686         else
1687                 echo "Looks good..."
1688         fi
1689 else
1690         echo "There is no MANIFEST file.  I hope your kit is complete !"
1691 fi
1692 rm -f missing x??
1693
1694 echo " "
1695 : Find the appropriate value for a newline for tr
1696 if test -n "$DJGPP"; then
1697        trnl='\012'
1698 fi
1699 if test X"$trnl" = X; then
1700         case "`echo foo|tr '\n' x 2>/dev/null`" in
1701         foox) trnl='\n' ;;
1702         esac
1703 fi
1704 if test X"$trnl" = X; then
1705         case "`echo foo|tr '\012' x 2>/dev/null`" in
1706         foox) trnl='\012' ;;
1707         esac
1708 fi
1709 if test X"$trnl" = X; then
1710         cat <<EOM >&2
1711
1712 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1713
1714 EOM
1715         exit 1
1716 fi
1717
1718 : compute the number of columns on the terminal for proper question formatting
1719 case "$COLUMNS" in
1720 '') COLUMNS='80';;
1721 esac
1722
1723 : set up the echo used in my read
1724 myecho="case \"\$xxxm\" in
1725 '') echo $n \"\$rp $c\" >&4;;
1726 *) case \"\$rp\" in
1727         '') echo $n \"[\$xxxm] $c\";;
1728         *)
1729                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1730                         echo \"\$rp\" >&4
1731                         echo $n \"[\$xxxm] $c\" >&4
1732                 else
1733                         echo $n \"\$rp [\$xxxm] $c\" >&4
1734                 fi
1735                 ;;
1736         esac;;
1737 esac"
1738
1739 : now set up to do reads with possible shell escape and default assignment
1740 cat <<EOSC >myread
1741 $startsh
1742 xxxm=\$dflt
1743 $myecho
1744 ans='!'
1745 case "\$fastread" in
1746 yes) case "\$dflt" in
1747         '') ;;
1748         *) ans='';
1749                 case "\$silent-\$rp" in
1750                 true-) ;;
1751                 *) echo " " >&4;;
1752                 esac;;
1753         esac;;
1754 *) case "\$silent" in
1755         true) case "\$rp" in
1756                 '') ans='';;
1757                 esac;;
1758         esac;;
1759 esac
1760 while expr "X\$ans" : "X!" >/dev/null; do
1761         read answ
1762         set x \$xxxm
1763         shift
1764         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1765         case  "\$answ" in
1766         "!")
1767                 sh 1>&4
1768                 echo " "
1769                 $myecho
1770                 ;;
1771         !*)
1772                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1773                 shift
1774                 sh 1>&4 -c "\$*"
1775                 echo " "
1776                 $myecho
1777                 ;;
1778         "\$ans")
1779                 case "\$ans" in
1780                 \\&*)
1781                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1782                         shift
1783                         case "\$1" in
1784                         -d)
1785                                 fastread=yes
1786                                 echo "(OK, I'll run with -d after this question.)" >&4
1787                                 ;;
1788                         -*)
1789                                 echo "*** Sorry, \$1 not supported yet." >&4
1790                                 ;;
1791                         esac
1792                         $myecho
1793                         ans=!
1794                         ;;
1795                 esac;;
1796         *)
1797                 case "\$aok" in
1798                 y)
1799                         echo "*** Substitution done -- please confirm."
1800                         xxxm="\$ans"
1801                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1802                         xxxm="\$ans"
1803                         ans=!
1804                         ;;
1805                 *)
1806                         echo "*** Error -- try again."
1807                         ans=!
1808                         ;;
1809                 esac
1810                 $myecho
1811                 ;;
1812         esac
1813         case "\$ans\$xxxm\$nostick" in
1814         '')
1815                 ans=!
1816                 $myecho
1817                 ;;
1818         esac
1819 done
1820 case "\$ans" in
1821 '') ans="\$xxxm";;
1822 esac
1823 EOSC
1824
1825 : create .config dir to save info across Configure sessions
1826 test -d ../.config || mkdir ../.config
1827 cat >../.config/README <<EOF
1828 This directory created by Configure to save information that should
1829 persist across sessions for $package.
1830
1831 You may safely delete it if you wish.
1832 EOF
1833
1834 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
1835 case "$usedevel" in
1836 $define|true|[yY]*) ;;
1837 *) case "$xversion" in
1838    *[13579])
1839         cat >&4 <<EOH
1840 *** WHOA THERE!!! ***
1841
1842     This is an UNSTABLE DEVELOPMENT release.
1843     The version of this $package distribution is $xversion, that is, odd,
1844     (as opposed to even) and that signifies a development release.
1845     If you want a maintenance release, you want an even-numbered version.
1846
1847     Do ***NOT*** install this into production use.
1848     Data corruption and crashes are possible.
1849
1850     It is most seriously suggested that you do not continue any further
1851     unless you want to help in developing and debugging Perl.
1852
1853     If you *still* want to build perl, you can answer 'y' now,
1854     or pass -Dusedevel to Configure.
1855
1856 EOH
1857         rp='Do you really want to continue?'
1858         dflt='n'
1859         . ./myread
1860         case "$ans" in
1861         [yY]) echo >&4 "Okay, continuing."
1862               usedevel="$define" ;;
1863         *) echo >&4 "Okay, bye."
1864            exit 1
1865            ;;
1866         esac
1867         ;;
1868     esac
1869     ;;
1870 esac
1871 case "$usedevel" in
1872 $define|true|[yY]*)
1873         case "$versiononly" in
1874         '') versiononly="$define" ;;
1875         esac
1876         case "$installusrbinperl" in
1877         '') installusrbinperl="$undef" ;;
1878         esac
1879         ;;
1880 esac
1881
1882 : general instructions
1883 needman=true
1884 firsttime=true
1885 user=`(logname) 2>/dev/null`
1886 case "$user" in
1887 '') user=`whoami 2>&1`;;
1888 esac
1889 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1890         firsttime=false
1891         echo " "
1892         rp='Would you like to see the instructions?'
1893         dflt=n
1894         . ./myread
1895         case "$ans" in
1896         [yY]*) ;;
1897         *) needman=false;;
1898         esac
1899 fi
1900 if $needman; then
1901         cat <<EOH
1902
1903 This installation shell script will examine your system and ask you questions
1904 to determine how the perl5 package should be installed. If you get
1905 stuck on a question, you may use a ! shell escape to start a subshell or
1906 execute a command.  Many of the questions will have default answers in square
1907 brackets; typing carriage return will give you the default.
1908
1909 On some of the questions which ask for file or directory names you are allowed
1910 to use the ~name construct to specify the login directory belonging to "name",
1911 even if you don't have a shell which knows about that.  Questions where this is
1912 allowed will be marked "(~name ok)".
1913
1914 EOH
1915         rp=''
1916         dflt='Type carriage return to continue'
1917         . ./myread
1918         cat <<'EOH'
1919
1920 The prompter used in this script allows you to use shell variables and
1921 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1922 in the default answer, as if the default line was a set of arguments given to a
1923 script shell.  This means you may also use $* to repeat the whole default line,
1924 so you do not have to re-type everything to add something to the default.
1925
1926 Everytime there is a substitution, you will have to confirm.  If there is an
1927 error (e.g. an unmatched backtick), the default answer will remain unchanged
1928 and you will be prompted again.
1929
1930 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1931 the questions and use the computed defaults (or the previous answers if there
1932 was already a config.sh file). Type 'Configure -h' for a list of options.
1933 You may also start interactively and then answer '& -d' at any prompt to turn
1934 on the non-interactive behaviour for the remainder of the execution.
1935
1936 EOH
1937         . ./myread
1938         cat <<EOH
1939
1940 Much effort has been expended to ensure that this shell script will run on any
1941 Unix system.  If despite that it blows up on yours, your best bet is to edit
1942 Configure and run it again.  If you can't run Configure for some reason,
1943 you'll have to generate a config.sh file by hand.  Whatever problems you
1944 have, let me (perlbug@perl.org) know how I blew it.
1945
1946 This installation script affects things in two ways:
1947
1948 1) it may do direct variable substitutions on some of the files included
1949    in this kit.
1950 2) it builds a config.h file for inclusion in C programs.  You may edit
1951    any of these files as the need arises after running this script.
1952
1953 If you make a mistake on a question, there is no easy way to back up to it
1954 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1955 files.  Configure will offer to let you do this before it runs the SH files.
1956
1957 EOH
1958         dflt='Type carriage return to continue'
1959         . ./myread
1960         case "$firsttime" in
1961         true) echo $user >>../.config/instruct;;
1962         esac
1963 fi
1964
1965 : find out where common programs are
1966 echo " "
1967 echo "Locating common programs..." >&4
1968 cat <<EOSC >loc
1969 $startsh
1970 case \$# in
1971 0) exit 1;;
1972 esac
1973 thing=\$1
1974 shift
1975 dflt=\$1
1976 shift
1977 for dir in \$*; do
1978         case "\$thing" in
1979         .)
1980         if test -d \$dir/\$thing; then
1981                 echo \$dir
1982                 exit 0
1983         fi
1984         ;;
1985         *)
1986         for thisthing in \$dir/\$thing; do
1987                 : just loop through to pick last item
1988         done
1989         if test -f \$thisthing; then
1990                 echo \$thisthing
1991                 exit 0
1992         elif test -f \$dir/\$thing.exe; then
1993                 if test -n "$DJGPP"; then
1994                         echo \$dir/\$thing.exe
1995                 else
1996                         : on Eunice apparently
1997                         echo \$dir/\$thing
1998                 fi
1999                 exit 0
2000         fi
2001         ;;
2002         esac
2003 done
2004 echo \$dflt
2005 exit 1
2006 EOSC
2007 chmod +x loc
2008 $eunicefix loc
2009 loclist="
2010 awk
2011 cat
2012 chmod
2013 comm
2014 cp
2015 echo
2016 expr
2017 grep
2018 ls
2019 make
2020 mkdir
2021 rm
2022 sed
2023 sort
2024 touch
2025 tr
2026 uniq
2027 "
2028 trylist="
2029 Mcc
2030 ar
2031 bison
2032 byacc
2033 cpp
2034 csh
2035 date
2036 egrep
2037 gzip
2038 less
2039 ln
2040 more
2041 nm
2042 nroff
2043 pg
2044 test
2045 uname
2046 zip
2047 "
2048 pth=`echo $PATH | sed -e "s/$p_/ /g"`
2049 pth="$pth /lib /usr/lib"
2050 for file in $loclist; do
2051         eval xxx=\$$file
2052         case "$xxx" in
2053         /*|?:[\\/]*)
2054                 if test -f "$xxx"; then
2055                         : ok
2056                 else
2057                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2058                         xxx=`./loc $file $file $pth`
2059                 fi
2060                 ;;
2061         '') xxx=`./loc $file $file $pth`;;
2062         *) xxx=`./loc $xxx $xxx $pth`;;
2063         esac
2064         eval $file=$xxx
2065         eval _$file=$xxx
2066         case "$xxx" in
2067         /*)
2068                 echo $file is in $xxx.
2069                 ;;
2070         ?:[\\/]*)
2071                 echo $file is in $xxx.
2072                 ;;
2073         *)
2074                 echo "I don't know where '$file' is, and my life depends on it." >&4
2075                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2076                 exit 1
2077                 ;;
2078         esac
2079 done
2080 echo " "
2081 echo "Don't worry if any of the following aren't found..."
2082 say=offhand
2083 for file in $trylist; do
2084         eval xxx=\$$file
2085         case "$xxx" in
2086         /*|?:[\\/]*)
2087                 if test -f "$xxx"; then
2088                         : ok
2089                 else
2090                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2091                         xxx=`./loc $file $file $pth`
2092                 fi
2093                 ;;
2094         '') xxx=`./loc $file $file $pth`;;
2095         *) xxx=`./loc $xxx $xxx $pth`;;
2096         esac
2097         eval $file=$xxx
2098         eval _$file=$xxx
2099         case "$xxx" in
2100         /*)
2101                 echo $file is in $xxx.
2102                 ;;
2103         ?:[\\/]*)
2104                 echo $file is in $xxx.
2105                 ;;
2106         *)
2107                 echo "I don't see $file out there, $say."
2108                 say=either
2109                 ;;
2110         esac
2111 done
2112 case "$egrep" in
2113 egrep)
2114         echo "Substituting grep for egrep."
2115         egrep=$grep
2116         ;;
2117 esac
2118 case "$ln" in
2119 ln)
2120         echo "Substituting cp for ln."
2121         ln=$cp
2122         ;;
2123 esac
2124 case "$test" in
2125 test)
2126         echo "Hopefully test is built into your sh."
2127         ;;
2128 *)
2129         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2130                 echo "Using the test built into your sh."
2131                 test=test
2132                 _test=test
2133         fi
2134         ;;
2135 esac
2136 case "$echo" in
2137 echo)
2138         echo "Hopefully echo is built into your sh."
2139         ;;
2140 '') ;;
2141 *)
2142         echo " "
2143 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2144         $echo $n "hi there$c" >foo1
2145         echo $n "hi there$c" >foo2
2146         if cmp foo1 foo2 >/dev/null 2>&1; then
2147                 echo "They are compatible.  In fact, they may be identical."
2148         else
2149                 case "$n" in
2150                 '-n') n='' c='\c';;
2151                 *) n='-n' c='';;
2152                 esac
2153                 cat <<FOO
2154 They are not compatible!  You are probably running ksh on a non-USG system.
2155 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2156 have echo built in and we may have to run some Bourne shell scripts.  That
2157 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2158
2159 FOO
2160                 $echo $n "The star should be here-->$c"
2161                 $echo "*"
2162         fi
2163         $rm -f foo1 foo2
2164         ;;
2165 esac
2166
2167 cat <<EOS >checkcc
2168 $startsh
2169 EOS
2170 cat <<'EOSC' >>checkcc
2171 case "$cc" in
2172 '') ;;
2173 *)  $rm -f try try.*
2174     $cat >try.c <<EOM
2175 int main(int argc, char *argv[]) {
2176   return 0;
2177 }
2178 EOM
2179     if $cc -o try $ccflags $ldflags try.c; then
2180        :
2181     else
2182         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2183         despair=yes
2184         trygcc=yes
2185         case "$cc" in
2186         *gcc*) trygcc=no ;;
2187         esac
2188         case "`$cc -v -c try.c 2>&1`" in
2189         *gcc*) trygcc=no ;;
2190         esac
2191         if $test X"$trygcc" = Xyes; then
2192             if gcc -o try -c try.c; then
2193                 echo " "
2194                 echo "You seem to have a working gcc, though." >&4
2195                 rp="Would you like to use it?"
2196                 dflt=y
2197                 if $test -f myread; then
2198                     . ./myread
2199                 else
2200                     if $test -f UU/myread; then
2201                         . ./UU/myread
2202                     else
2203                         echo "Cannot find myread, sorry.  Aborting." >&2
2204                         exit 1
2205                     fi
2206                 fi  
2207                 case "$ans" in
2208                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2209                 esac
2210             fi
2211         fi
2212         if $test X"$despair" = Xyes; then
2213             $cat >&4 <<EOM
2214 You need to find a working C compiler.
2215 Either (purchase and) install the C compiler supplied by your OS vendor,
2216 or for a free C compiler try http://gcc.gnu.org/
2217 I cannot continue any further, aborting.
2218 EOM
2219             exit 1
2220         fi
2221     fi
2222     $rm -f try try.*
2223     ;;
2224 esac
2225 EOSC
2226
2227 : determine whether symbolic links are supported
2228 echo " "
2229 $touch blurfl
2230 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2231         echo "Symbolic links are supported." >&4
2232         lns="$ln -s"
2233 else
2234         echo "Symbolic links are NOT supported." >&4
2235         lns="$ln"
2236 fi
2237 $rm -f blurfl sym
2238
2239 : determine whether symbolic links are supported
2240 echo " "
2241 case "$lns" in
2242 *"ln -s")
2243         echo "Checking how to test for symbolic links..." >&4
2244         $lns blurfl sym
2245         if $test "X$issymlink" = X; then
2246                 sh -c "PATH= test -h sym" >/dev/null 2>&1
2247                 if test $? = 0; then
2248                         issymlink="test -h"
2249                 fi              
2250         fi
2251         if $test "X$issymlink" = X; then
2252                 if  $test -h >/dev/null 2>&1; then
2253                         issymlink="$test -h"
2254                         echo "Your builtin 'test -h' may be broken, I'm using external '$test -h'." >&4
2255                 fi              
2256         fi
2257         if $test "X$issymlink" = X; then
2258                 if $test -L sym 2>/dev/null; then
2259                         issymlink="$test -L"
2260                 fi
2261         fi
2262         if $test "X$issymlink" != X; then
2263                 echo "You can test for symbolic links with '$issymlink'." >&4
2264         else
2265                 echo "I do not know how you can test for symbolic links." >&4
2266         fi
2267         $rm -f blurfl sym
2268         ;;
2269 *)      echo "No symbolic links, so not testing for their testing..." >&4
2270         ;;
2271 esac
2272 echo " "
2273
2274
2275 case "$mksymlinks" in
2276 $define|true|[yY]*)
2277         case "$src" in
2278         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2279                 exit 1
2280                 ;;
2281         *)      case "$lns:$issymlink" in
2282                 *"ln -s:"*"test -"?)
2283                         echo "Creating the symbolic links..." >&4
2284                         echo "(First creating the subdirectories...)" >&4
2285                         cd ..
2286                         awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | sort -u | while true; do
2287                                 read directory
2288                                 test -z "$directory" && break
2289                                 mkdir -p $directory
2290                         done
2291                         # Sanity check 1.
2292                         if test ! -d t/base; then
2293                                 echo "Failed to create the subdirectories.  Aborting." >&4
2294                                 exit 1
2295                         fi
2296                         echo "(Then creating the symlinks...)" >&4
2297                         awk '{print $1}' $src/MANIFEST | while true; do
2298                                 read filename
2299                                 test -z "$filename" && break
2300                                 if test -f $filename; then
2301                                         if $issymlink $filename; then
2302                                                 rm -f $filename
2303                                         fi
2304                                 fi
2305                                 if test -f $filename; then
2306                                         echo "$filename already exists, not symlinking."
2307                                 else
2308                                         ln -s $src/$filename $filename
2309                                 fi
2310                         done
2311                         # Sanity check 2.
2312                         if test ! -f t/base/commonsense.t; then
2313                                 echo "Failed to create the symlinks.  Aborting." >&4
2314                                 exit 1
2315                         fi
2316                         cd UU
2317                         ;;
2318                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2319                         ;;
2320                 esac
2321                 ;;
2322         esac
2323         ;;
2324 esac
2325
2326
2327 case "$usecrosscompile" in
2328 $define|true|[yY]*)
2329         $echo "Cross-compiling..."
2330         croak=''
2331         case "$cc" in
2332         *-*-gcc) # A cross-compiling gcc, probably.
2333             targetarch=`$echo $cc|$sed 's/-gcc$//'`
2334             ar=$targetarch-ar
2335             # leave out ld, choosing it is more complex
2336             nm=$targetarch-nm
2337             ranlib=$targetarch-ranlib
2338             $echo 'extern int foo;' > try.c
2339             set X `$cc -v -E try.c 2>&1 | $awk '/^#include </,/^End of search /'|$grep '/include'`
2340             shift
2341             if $test $# -gt 0; then
2342                 incpth="$incpth $*"
2343                 incpth="`$echo $incpth|$sed 's/^ //'`"
2344                 echo "Guessing incpth '$incpth'." >&4
2345                 for i in $*; do
2346                     j="`$echo $i|$sed 's,/include$,/lib,'`"
2347                     if $test -d $j; then
2348                         libpth="$libpth $j"
2349                     fi
2350                 done   
2351                 libpth="`$echo $libpth|$sed 's/^ //'`"
2352                 echo "Guessing libpth '$libpth'." >&4
2353             fi
2354             $rm -f try.c
2355             ;;
2356         esac
2357         case "$targetarch" in
2358         '') echo "Targetarch not defined." >&4; croak=y ;;
2359         *)  echo "Using targetarch $targetarch." >&4 ;;
2360         esac
2361         case "$incpth" in
2362         '') echo "Incpth not defined." >&4; croak=y ;;
2363         *)  echo "Using incpth '$incpth'." >&4 ;;
2364         esac
2365         case "$libpth" in
2366         '') echo "Libpth not defined." >&4; croak=y ;;
2367         *)  echo "Using libpth '$libpth'." >&4 ;;
2368         esac
2369         case "$usrinc" in
2370         '') for i in $incpth; do
2371                 if $test -f $i/errno.h -a -f $i/stdio.h -a -f $i/time.h; then
2372                     usrinc=$i
2373                     echo "Guessing usrinc $usrinc." >&4
2374                     break
2375                 fi
2376             done
2377             case "$usrinc" in
2378             '') echo "Usrinc not defined." >&4; croak=y ;;
2379             esac
2380             ;;
2381         *)  echo "Using usrinc $usrinc." >&4 ;;
2382         esac
2383         case "$targethost" in
2384         '') echo "Targethost not defined." >&4; croak=y ;;
2385         *)  echo "Using targethost $targethost." >&4
2386         esac
2387         locincpth=' '
2388         loclibpth=' '
2389         case "$croak" in
2390         y) echo "Cannot continue, aborting." >&4; exit 1 ;;
2391         esac
2392         case "$src" in
2393         /*) run=$src/Cross/run
2394             targetmkdir=$src/Cross/mkdir
2395             to=$src/Cross/to
2396             from=$src/Cross/from
2397             ;;
2398         *)  pwd=`$test -f ../Configure & cd ..; pwd`
2399             run=$pwd/Cross/run
2400             targetmkdir=$pwd/Cross/mkdir
2401             to=$pwd/Cross/to
2402             from=$pwd/Cross/from
2403             ;;
2404         esac
2405         case "$targetrun" in
2406         '') targetrun=ssh ;;
2407         esac
2408         case "$targetto" in
2409         '') targetto=scp ;;
2410         esac
2411         case "$targetfrom" in
2412         '') targetfrom=scp ;;
2413         esac
2414         run=$run-$targetrun
2415         to=$to-$targetto
2416         from=$from-$targetfrom
2417         case "$targetdir" in
2418         '')  targetdir=/tmp
2419              echo "Guessing targetdir $targetdir." >&4
2420              ;;
2421         esac
2422         case "$targetuser" in
2423         '')  targetuser=root
2424              echo "Guessing targetuser $targetuser." >&4
2425              ;;
2426         esac
2427         case "$targetfrom" in
2428         scp)    q=-q ;;
2429         *)      q='' ;;
2430         esac
2431         case "$targetrun" in
2432         ssh|rsh)
2433             cat >$run <<EOF
2434 #!/bin/sh
2435 case "\$1" in
2436 -cwd)
2437   shift
2438   cwd=\$1
2439   shift
2440   ;;
2441 esac
2442 case "\$cwd" in
2443 '') cwd=$targetdir ;;
2444 esac
2445 exe=\$1
2446 shift
2447 if $test ! -f \$exe.xok; then
2448   $to \$exe
2449   $touch \$exe.xok
2450 fi
2451 $targetrun -l $targetuser $targethost "cd \$cwd && ./\$exe \$@"
2452 EOF
2453             ;;
2454         *)  echo "Unknown targetrun '$targetrun'" >&4
2455             exit 1
2456             ;;
2457         esac
2458         case "$targetmkdir" in
2459         */Cross/mkdir)
2460             cat >$targetmkdir <<EOF
2461 #!/bin/sh
2462 $targetrun -l $targetuser $targethost "mkdir -p \$@"
2463 EOF
2464             $chmod a+rx $targetmkdir
2465             ;;
2466         *)  echo "Unknown targetmkdir '$targetmkdir'" >&4
2467             exit 1
2468             ;;
2469         esac
2470         case "$targetto" in
2471         scp|rcp)
2472             cat >$to <<EOF
2473 #!/bin/sh
2474 for f in \$@
2475 do
2476   case "\$f" in
2477   /*)
2478     $targetmkdir \`dirname \$f\`
2479     $targetto $q \$f $targetuser@$targethost:\$f            || exit 1
2480     ;;
2481   *)
2482     $targetmkdir $targetdir/\`dirname \$f\`
2483     $targetto $q \$f $targetuser@$targethost:$targetdir/\$f || exit 1
2484     ;;
2485   esac
2486 done
2487 exit 0
2488 EOF
2489             ;;
2490         cp) cat >$to <<EOF
2491 #!/bin/sh
2492 for f in \$@
2493 do
2494   case "\$f" in
2495   /*)
2496     $mkdir -p $targetdir/\`dirname \$f\`
2497     $cp \$f $targetdir/\$f || exit 1
2498     ;;
2499   *)
2500     $targetmkdir $targetdir/\`dirname \$f\`
2501     $cp \$f $targetdir/\$f || exit 1
2502     ;;
2503   esac
2504 done
2505 exit 0
2506 EOF
2507             ;;
2508         *)  echo "Unknown targetto '$targetto'" >&4
2509             exit 1
2510             ;;
2511         esac
2512         case "$targetfrom" in
2513         scp|rcp)
2514           cat >$from <<EOF
2515 #!/bin/sh
2516 for f in \$@
2517 do
2518   $rm -f \$f
2519   $targetfrom $q $targetuser@$targethost:$targetdir/\$f . || exit 1
2520 done
2521 exit 0
2522 EOF
2523             ;;
2524         cp) cat >$from <<EOF
2525 #!/bin/sh
2526 for f in \$@
2527 do
2528   $rm -f \$f
2529   cp $targetdir/\$f . || exit 1
2530 done
2531 exit 0
2532 EOF
2533             ;;
2534         *)  echo "Unknown targetfrom '$targetfrom'" >&4
2535             exit 1
2536             ;;
2537         esac
2538         if $test ! -f $run; then
2539             echo "Target 'run' script '$run' not found." >&4
2540         else
2541             $chmod a+rx $run
2542         fi
2543         if $test ! -f $to; then
2544             echo "Target 'to' script '$to' not found." >&4
2545         else
2546             $chmod a+rx $to
2547         fi
2548         if $test ! -f $from; then
2549             echo "Target 'from' script '$from' not found." >&4
2550         else
2551             $chmod a+rx $from
2552         fi
2553         if $test ! -f $run -o ! -f $to -o ! -f $from; then
2554             exit 1
2555         fi
2556         cat >&4 <<EOF
2557 Using '$run' for remote execution,
2558 and '$from' and '$to'
2559 for remote file transfer.
2560 EOF
2561         ;;
2562 *)      run=''
2563         to=:
2564         from=:
2565         usecrosscompile='undef'
2566         targetarch=''
2567         ;;
2568 esac
2569
2570 : see whether [:lower:] and [:upper:] are supported character classes
2571 echo " "
2572 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2573 ABYZ)
2574         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2575         up='[:upper:]'
2576         low='[:lower:]'
2577         ;;
2578 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2579         # (0xc9 and 0xd1), therefore that is a nice testing point.
2580         if test "X$up" = X -o "X$low" = X; then
2581             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2582             ij) up='[A-Z]'
2583                 low='[a-z]'
2584                 ;;
2585             esac
2586         fi
2587         if test "X$up" = X -o "X$low" = X; then
2588             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2589             ij) up='A-Z'
2590                 low='a-z'
2591                 ;;
2592             esac
2593         fi
2594         if test "X$up" = X -o "X$low" = X; then
2595             case "`echo IJ | od -x 2>/dev/null`" in
2596             *C9D1*|*c9d1*)
2597                 echo "Hey, this might be EBCDIC." >&4
2598                 if test "X$up" = X -o "X$low" = X; then
2599                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2600                     ij) up='[A-IJ-RS-Z]'
2601                         low='[a-ij-rs-z]'
2602                         ;;
2603                     esac
2604                 fi
2605                 if test "X$up" = X -o "X$low" = X; then
2606                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2607                     ij) up='A-IJ-RS-Z'
2608                         low='a-ij-rs-z'
2609                         ;;
2610                     esac
2611                 fi
2612                 ;;
2613             esac
2614         fi
2615 esac
2616 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2617 ij)
2618     echo "Using $up and $low to convert case." >&4
2619     ;;
2620 *)
2621     echo "I don't know how to translate letters from upper to lower case." >&4
2622     echo "Your tr is not acting any way I know of." >&4
2623     exit 1
2624     ;;
2625 esac
2626 : set up the translation script tr, must be called with ./tr of course
2627 cat >tr <<EOSC
2628 $startsh
2629 case "\$1\$2" in
2630 '[A-Z][a-z]') exec $tr '$up' '$low';;
2631 '[a-z][A-Z]') exec $tr '$low' '$up';;
2632 esac
2633 exec $tr "\$@"
2634 EOSC
2635 chmod +x tr
2636 $eunicefix tr
2637
2638 : Try to determine whether config.sh was made on this system
2639 case "$config_sh" in
2640 '')
2641 myuname=`$uname -a 2>/dev/null`
2642 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2643 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2644 # because the A-Z/a-z are not consecutive.
2645 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2646         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2647 newmyuname="$myuname"
2648 dflt=n
2649 case "$knowitall" in
2650 '')
2651         if test -f ../config.sh; then
2652                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2653                         eval "`grep myuname= ../config.sh`"
2654                 fi
2655                 if test "X$myuname" = "X$newmyuname"; then
2656                         dflt=y
2657                 fi
2658         fi
2659         ;;
2660 *) dflt=y;;
2661 esac
2662
2663 : Get old answers from old config file if Configure was run on the
2664 : same system, otherwise use the hints.
2665 hint=default
2666 cd ..
2667 if test -f config.sh; then
2668         echo " "
2669         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2670         . UU/myread
2671         case "$ans" in
2672         n*|N*) echo "OK, I'll ignore it."
2673                 mv config.sh config.sh.old
2674                 myuname="$newmyuname"
2675                 ;;
2676         *)  echo "Fetching default answers from your old config.sh file..." >&4
2677                 tmp_n="$n"
2678                 tmp_c="$c"
2679                 tmp_sh="$sh"
2680                 . ./config.sh
2681                 cp config.sh UU
2682                 n="$tmp_n"
2683                 c="$tmp_c"
2684                 : Older versions did not always set $sh.  Catch re-use of such
2685                 : an old config.sh.
2686                 case "$sh" in
2687                 '') sh="$tmp_sh" ;;
2688                 esac
2689                 hint=previous
2690                 ;;
2691         esac
2692 fi
2693 . ./UU/checkcc
2694 if test ! -f config.sh; then
2695         $cat <<EOM
2696
2697 First time through, eh?  I have some defaults handy for some systems
2698 that need some extra help getting the Configure answers right:
2699
2700 EOM
2701         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2702         dflt=''
2703         : Half the following guesses are probably wrong... If you have better
2704         : tests or hints, please send them to perlbug@perl.org
2705         : The metaconfig authors would also appreciate a copy...
2706         $test -f /irix && osname=irix
2707         $test -f /xenix && osname=sco_xenix
2708         $test -f /dynix && osname=dynix
2709         $test -f /dnix && osname=dnix
2710         $test -f /lynx.os && osname=lynxos
2711         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2712         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2713         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2714         $test -f /bin/mips && /bin/mips && osname=mips
2715         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2716                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2717         $test -d /usr/apollo/bin && osname=apollo
2718         $test -f /etc/saf/_sactab && osname=svr4
2719         $test -d /usr/include/minix && osname=minix
2720         if $test -d /MachTen -o -d /MachTen_Folder; then
2721                 osname=machten
2722                 if $test -x /sbin/version; then
2723                         osvers=`/sbin/version | $awk '{print $2}' |
2724                         $sed -e 's/[A-Za-z]$//'`
2725                 elif $test -x /usr/etc/version; then
2726                         osvers=`/usr/etc/version | $awk '{print $2}' |
2727                         $sed -e 's/[A-Za-z]$//'`
2728                 else
2729                         osvers="$2.$3"
2730                 fi
2731         fi
2732
2733         $test -f /sys/posix.dll &&
2734                 $test -f /usr/bin/what &&
2735                 set X `/usr/bin/what /sys/posix.dll` &&
2736                 $test "$3" = UWIN &&
2737                 osname=uwin &&
2738                 osvers="$5"
2739
2740         if $test -f $uname; then
2741                 set X $myuname
2742                 shift
2743
2744                 case "$5" in
2745                 fps*) osname=fps ;;
2746                 mips*)
2747                         case "$4" in
2748                         umips) osname=umips ;;
2749                         *) osname=mips ;;
2750                         esac;;
2751                 [23]100) osname=mips ;;
2752                 next*) osname=next ;;
2753                 i386*)
2754                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2755                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2756                                 osname='sco'
2757                                 osvers=$tmp
2758                         elif $test -f /etc/kconfig; then
2759                                 osname=isc
2760                                 if test "$lns" = "$ln -s"; then
2761                                         osvers=4
2762                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2763                                         osvers=3
2764                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2765                                         osvers=2
2766                                 fi
2767                         fi
2768                         tmp=''
2769                         ;;
2770                 pc*)
2771                         if test -n "$DJGPP"; then
2772                                 osname=dos
2773                                 osvers=djgpp
2774                         fi
2775                         ;;
2776                 esac
2777
2778                 case "$1" in
2779                 aix) osname=aix
2780                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2781                         case "$tmp" in
2782                         'not found') osvers="$4"."$3" ;;
2783                         '<3240'|'<>3240') osvers=3.2.0 ;;
2784                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2785                         '=3250'|'>3250') osvers=3.2.5 ;;
2786                         *) osvers=$tmp;;
2787                         esac
2788                         ;;
2789                 bsd386) osname=bsd386
2790                         osvers=`$uname -r`
2791                         ;;
2792                 cygwin*) osname=cygwin
2793                         osvers="$3"
2794                         ;;
2795                 *dc.osx) osname=dcosx
2796                         osvers="$3"
2797                         ;;
2798                 dnix) osname=dnix
2799                         osvers="$3"
2800                         ;;
2801                 domainos) osname=apollo
2802                         osvers="$3"
2803                         ;;
2804                 dgux) osname=dgux 
2805                         osvers="$3"
2806                         ;;
2807                 dynixptx*) osname=dynixptx
2808                         osvers=`echo "$4"|sed 's/^v//'`
2809                         ;;
2810                 freebsd) osname=freebsd 
2811                         osvers="$3" ;;
2812                 genix) osname=genix ;;
2813                 hp*) osname=hpux 
2814                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2815                         ;;
2816                 irix*) osname=irix
2817                         case "$3" in
2818                         4*) osvers=4 ;;
2819                         5*) osvers=5 ;;
2820                         *)      osvers="$3" ;;
2821                         esac
2822                         ;;
2823                 linux) osname=linux
2824                         case "$3" in
2825                         *)      osvers="$3" ;;
2826                         esac
2827                         ;;
2828                 MiNT) osname=mint
2829                         ;;
2830                 netbsd*) osname=netbsd
2831                         osvers="$3"
2832                         ;;
2833                 news-os) osvers="$3"
2834                         case "$3" in
2835                         4*) osname=newsos4 ;;
2836                         *) osname=newsos ;;
2837                         esac
2838                         ;;
2839                 next*) osname=next ;;
2840                 nonstop-ux) osname=nonstopux ;;
2841                 POSIX-BC | posix-bc ) osname=posix-bc
2842                         osvers="$3"
2843                         ;;
2844                 powerux | power_ux | powermax_os | powermaxos | \
2845                 powerunix | power_unix) osname=powerux
2846                         osvers="$3"
2847                         ;;
2848                 qnx) osname=qnx
2849                         osvers="$4"
2850                         ;;
2851                 solaris) osname=solaris
2852                         case "$3" in
2853                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2854                         *)      osvers="$3" ;;
2855                         esac
2856                         ;;
2857                 sunos) osname=sunos
2858                         case "$3" in
2859                         5*) osname=solaris
2860                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2861                         *)      osvers="$3" ;;
2862                         esac
2863                         ;;
2864                 titanos) osname=titanos
2865                         case "$3" in
2866                         1*) osvers=1 ;;
2867                         2*) osvers=2 ;;
2868                         3*) osvers=3 ;;
2869                         4*) osvers=4 ;;
2870                         *)      osvers="$3" ;;
2871                         esac
2872                         ;;
2873                 ultrix) osname=ultrix
2874                         osvers="$3"
2875                         ;;
2876                 osf1|mls+)      case "$5" in
2877                                 alpha)
2878                                         osname=dec_osf
2879                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
2880                                         case "$osvers" in
2881                                         [1-9].[0-9]*) ;;
2882                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
2883                                         esac
2884                                         ;;
2885                         hp*)    osname=hp_osf1  ;;
2886                         mips)   osname=mips_osf1 ;;
2887                         esac
2888                         ;;
2889                 unixware) osname=svr5
2890                         osvers="$4"
2891                         ;;
2892                 uts) osname=uts
2893                         osvers="$3"
2894                         ;;
2895                 $2) case "$osname" in
2896                         *isc*) ;;
2897                         *freebsd*) ;;
2898                         svr*)
2899                                 : svr4.x or possibly later
2900                                 case "svr$3" in 
2901                                 ${osname}*)
2902                                         osname=svr$3
2903                                         osvers=$4
2904                                         ;;
2905                                 esac
2906                                 case "$osname" in
2907                                 svr4.0)
2908                                         : Check for ESIX
2909                                         if test -f /stand/boot ; then
2910                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2911                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2912                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2913                                                         if test -n "$isesix"; then
2914                                                                 osname=esix4
2915                                                         fi
2916                                                 fi
2917                                         fi
2918                                         ;;
2919                                 esac
2920                                 ;;
2921                         *)      if test -f /etc/systemid; then
2922                                         osname=sco
2923                                         set `echo $3 | $sed 's/\./ /g'` $4
2924                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2925                                                 osvers=$1.$2.$3
2926                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2927                                                 osvers=$1.$2
2928                                         elif $test -f $src/hints/sco_$1.sh; then
2929                                                 osvers=$1
2930                                         fi
2931                                 else
2932                                         case "$osname" in
2933                                         '') : Still unknown.  Probably a generic Sys V.
2934                                                 osname="sysv"
2935                                                 osvers="$3"
2936                                                 ;;
2937                                         esac
2938                                 fi
2939                                 ;;
2940                         esac
2941                         ;;
2942                 *)      case "$osname" in
2943                         '') : Still unknown.  Probably a generic BSD.
2944                                 osname="$1"
2945                                 osvers="$3"
2946                                 ;;
2947                         esac
2948                         ;;
2949                 esac
2950         else
2951                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2952                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2953                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2954                                 osname=news_os
2955                         fi
2956                         $rm -f UU/kernel.what
2957                 elif test -d c:/.; then
2958                         set X $myuname
2959                         osname=os2
2960                         osvers="$5"
2961                 fi
2962         fi
2963         
2964         case "$targetarch" in
2965         '') ;;
2966         *)  hostarch=$osname
2967             osname=`echo $targetarch|sed 's,^[^-]*-,,'`
2968             osvers=''
2969             ;;
2970         esac
2971
2972         : Now look for a hint file osname_osvers, unless one has been
2973         : specified already.
2974         case "$hintfile" in
2975         ''|' ')
2976                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
2977                 : Also try without trailing minor version numbers.
2978                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
2979                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
2980                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
2981                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
2982                 case "$file" in
2983                 '') dflt=none ;;
2984                 *)  case "$osvers" in
2985                         '') dflt=$file
2986                                 ;;
2987                         *)  if $test -f $src/hints/$file.sh ; then
2988                                         dflt=$file
2989                                 elif $test -f $src/hints/$xfile.sh ; then
2990                                         dflt=$xfile
2991                                 elif $test -f $src/hints/$xxfile.sh ; then
2992                                         dflt=$xxfile
2993                                 elif $test -f $src/hints/$xxxfile.sh ; then
2994                                         dflt=$xxxfile
2995                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2996                                         dflt=$xxxxfile
2997                                 elif $test -f "$src/hints/${osname}.sh" ; then
2998                                         dflt="${osname}"
2999                                 else
3000                                         dflt=none
3001                                 fi
3002                                 ;;
3003                         esac
3004                         ;;
3005                 esac
3006                 if $test -f Policy.sh ; then
3007                         case "$dflt" in
3008                         *Policy*) ;;
3009                         none) dflt="Policy" ;;
3010                         *) dflt="Policy $dflt" ;;
3011                         esac
3012                 fi
3013                 ;;
3014         *)
3015                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
3016                 ;;
3017         esac
3018
3019         if $test -f Policy.sh ; then
3020                 $cat <<EOM
3021
3022 There's also a Policy hint file available, which should make the
3023 site-specific (policy) questions easier to answer.
3024 EOM
3025
3026         fi
3027
3028         $cat <<EOM
3029
3030 You may give one or more space-separated answers, or "none" if appropriate.
3031 A well-behaved OS will have no hints, so answering "none" or just "Policy"
3032 is a good thing.  DO NOT give a wrong version or a wrong OS.
3033
3034 EOM
3035
3036         rp="Which of these apply, if any?"
3037         . UU/myread
3038         tans=$ans
3039         for file in $tans; do
3040                 if $test X$file = XPolicy -a -f Policy.sh; then
3041                         . Policy.sh
3042                         $cat Policy.sh >> UU/config.sh
3043                 elif $test -f $src/hints/$file.sh; then
3044                         . $src/hints/$file.sh
3045                         $cat $src/hints/$file.sh >> UU/config.sh
3046                 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
3047                         : nothing
3048                 else
3049                         : Give one chance to correct a possible typo.
3050                         echo "$file.sh does not exist"
3051                         dflt=$file
3052                         rp="hint to use instead?"
3053                         . UU/myread
3054                         for file in $ans; do
3055                                 if $test -f "$src/hints/$file.sh"; then
3056                                         . $src/hints/$file.sh
3057                                         $cat $src/hints/$file.sh >> UU/config.sh
3058                                 elif $test X$ans = X -o X$ans = Xnone ; then
3059                                         : nothing
3060                                 else
3061                                         echo "$file.sh does not exist -- ignored."
3062                                 fi
3063                         done
3064                 fi
3065         done
3066
3067         hint=recommended
3068         : Remember our hint file for later.
3069         if $test -f "$src/hints/$file.sh" ; then
3070                 hintfile="$file"
3071         else
3072                 hintfile=''
3073         fi
3074 fi
3075 cd UU
3076 ;;
3077 *)
3078         echo " "
3079         echo "Fetching default answers from $config_sh..." >&4
3080         tmp_n="$n"
3081         tmp_c="$c"
3082         cd ..
3083         cp $config_sh config.sh 2>/dev/null
3084         chmod +w config.sh
3085         . ./config.sh
3086         cd UU
3087         cp ../config.sh .
3088         n="$tmp_n"
3089         c="$tmp_c"
3090         hint=previous
3091         ;;
3092 esac
3093 test "$override" && . ./optdef.sh
3094
3095 : Restore computed paths
3096 for file in $loclist $trylist; do
3097         eval $file="\$_$file"
3098 done
3099
3100 cat << EOM
3101
3102 Configure uses the operating system name and version to set some defaults.
3103 The default value is probably right if the name rings a bell. Otherwise,
3104 since spelling matters for me, either accept the default or answer "none"
3105 to leave it blank.
3106
3107 EOM
3108 case "$osname" in
3109         ''|' ')
3110                 case "$hintfile" in
3111                 ''|' '|none) dflt=none ;;
3112                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
3113                 esac
3114                 ;;
3115         *) dflt="$osname" ;;
3116 esac
3117 rp="Operating system name?"
3118 . ./myread
3119 case "$ans" in
3120 none)  osname='' ;;
3121 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
3122 esac
3123 echo " "
3124 case "$osvers" in
3125         ''|' ')
3126                 case "$hintfile" in
3127                 ''|' '|none) dflt=none ;;
3128                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
3129                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
3130                         case "$dflt" in
3131                         ''|' ') dflt=none ;;
3132                         esac
3133                         ;;
3134                 esac
3135                 ;;
3136         *) dflt="$osvers" ;;
3137 esac
3138 rp="Operating system version?"
3139 . ./myread
3140 case "$ans" in
3141 none)  osvers='' ;;
3142 *) osvers="$ans" ;;
3143 esac
3144
3145
3146 . ./posthint.sh
3147
3148 : who configured the system
3149 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
3150 cf_by=`(logname) 2>/dev/null`
3151 case "$cf_by" in
3152 "")
3153         cf_by=`(whoami) 2>/dev/null`
3154         case "$cf_by" in
3155         "") cf_by=unknown ;;
3156         esac ;;
3157 esac
3158
3159 : set up the script used to warn in case of inconsistency
3160 cat <<EOS >whoa
3161 $startsh
3162 EOS
3163 cat <<'EOSC' >>whoa
3164 dflt=y
3165 echo " "
3166 echo "*** WHOA THERE!!! ***" >&4
3167 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
3168 rp="    Keep the $hint value?"
3169 . ./myread
3170 case "$ans" in
3171 y) td=$was; tu=$was;;
3172 esac
3173 EOSC
3174
3175 : function used to set $1 to $val
3176 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
3177 case "$val$was" in
3178 $define$undef) . ./whoa; eval "$var=\$td";;
3179 $undef$define) . ./whoa; eval "$var=\$tu";;
3180 *) eval "$var=$val";;
3181 esac'
3182
3183 case "$usethreads" in
3184 $define|true|[yY]*)     dflt='y';;
3185 *) dflt='n';;
3186 esac
3187 cat <<EOM
3188
3189 Perl can be built to take advantage of threads on some systems.
3190 To do so, Configure can be run with -Dusethreads.
3191
3192 Note that threading is a highly experimental feature, and
3193 some known race conditions still remain.  If you choose to try
3194 it, be very sure to not actually deploy it for production
3195 purposes.  README.threads has more details, and is required
3196 reading if you enable threads.
3197
3198 If this doesn't make any sense to you, just accept the default '$dflt'.
3199 EOM
3200 rp='Build a threading Perl?'
3201 . ./myread
3202 case "$ans" in
3203 y|Y)    val="$define" ;;
3204 *)      val="$undef" ;;
3205 esac
3206 set usethreads
3207 eval $setvar
3208
3209 case "$usethreads" in
3210 $define)
3211         $cat <<EOM
3212
3213 As of 5.5.640, Perl has two different internal threading implementations,
3214 the 5.005 version (5005threads) and an interpreter-based version
3215 (ithreads) that has one interpreter per thread.  Both are very 
3216 experimental.  This arrangement exists to help developers work out
3217 which one is better.
3218
3219 If you're a casual user, you probably don't want interpreter-threads
3220 at this time.  There doesn't yet exist a way to create threads from
3221 within Perl in this model, i.e., "use Thread;" will NOT work.
3222 EOM
3223         : Default to ithreads unless overridden on command line or with
3224         : old config.sh
3225         dflt='y'
3226         case "$use5005threads" in
3227                 $define|true|[yY]*) dflt='n';;
3228         esac
3229         case "$useithreads" in
3230                 $undef|false|[nN]*) dflt='n';;
3231         esac
3232         rp='Use interpreter-based ithreads?'
3233         . ./myread
3234         case "$ans" in
3235         y|Y)    val="$define" ;;
3236         *)      val="$undef" ;;
3237         esac
3238         set useithreads
3239         eval $setvar
3240         : Now set use5005threads to the opposite value.
3241         case "$useithreads" in
3242         $define) val="$undef" ;;
3243         *) val="$define" ;;
3244         esac
3245         set use5005threads
3246         eval $setvar
3247         ;;
3248 *)
3249         useithreads="$undef"
3250         use5005threads="$undef"
3251         ;;
3252 esac
3253
3254 case "$useithreads$use5005threads" in
3255 "$define$define")
3256         $cat >&4 <<EOM
3257
3258 You cannot have both the ithreads and the 5.005 threads enabled
3259 at the same time.  Disabling the 5.005 threads since they are
3260 much less stable than the ithreads.
3261
3262 EOM
3263         use5005threads="$undef"
3264         ;;
3265 esac
3266
3267 case "$d_oldpthreads" in
3268 '')     : Configure tests would be welcome here.  For now, assume undef.
3269         val="$undef" ;;
3270 *)      val="$d_oldpthreads" ;;
3271 esac
3272 set d_oldpthreads
3273 eval $setvar
3274
3275
3276 case "$usethreads" in
3277 "$define"|true|[yY]*)
3278 : Look for a hint-file generated 'call-back-unit'.  If the
3279 : user has specified that a threading perl is to be built,
3280 : we may need to set or change some other defaults.
3281         if $test -f usethreads.cbu; then
3282                 echo "Your platform has some specific hints for threaded builds, using them..."
3283                 . ./usethreads.cbu
3284         else
3285                 $cat <<EOM
3286 (Your platform doesn't have any specific hints for threaded builds.
3287  Assuming POSIX threads, then.)
3288 EOM
3289         fi
3290         ;;
3291 esac
3292
3293 cat <<EOM
3294
3295 Perl can be built so that multiple Perl interpreters can coexist
3296 within the same Perl executable.
3297 EOM
3298
3299 case "$useithreads" in
3300 $define)
3301         cat <<EOM
3302 This multiple interpreter support is required for interpreter-based threads.
3303 EOM
3304         val="$define"
3305         ;;
3306 *)      case "$usemultiplicity" in
3307         $define|true|[yY]*)     dflt='y';;
3308         *) dflt='n';;
3309         esac
3310         echo " "
3311         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
3312         rp='Build Perl for multiplicity?'
3313         . ./myread
3314         case "$ans" in
3315         y|Y)    val="$define" ;;
3316         *)      val="$undef" ;;
3317         esac
3318         ;;
3319 esac
3320 set usemultiplicity
3321 eval $setvar
3322
3323
3324 case "$usemorebits" in
3325 "$define"|true|[yY]*)
3326         use64bitint="$define"
3327         uselongdouble="$define"
3328         usemorebits="$define"
3329         ;;
3330 *)      usemorebits="$undef"
3331         ;;
3332 esac
3333
3334 : make some quick guesses about what we are up against
3335 echo " "
3336 $echo $n "Hmm...  $c"
3337 echo exit 1 >bsd
3338 echo exit 1 >usg
3339 echo exit 1 >v7
3340 echo exit 1 >osf1
3341 echo exit 1 >eunice
3342 echo exit 1 >xenix
3343 echo exit 1 >venix
3344 echo exit 1 >os2
3345 d_bsd="$undef"
3346 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3347 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3348 then
3349         echo "Looks kind of like an OSF/1 system, but we'll see..."
3350         echo exit 0 >osf1
3351 elif test `echo abc | $tr a-z A-Z` = Abc ; then
3352         xxx=`./loc addbib blurfl $pth`
3353         if $test -f $xxx; then
3354         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3355                 echo exit 0 >bsd
3356                 echo exit 0 >usg
3357         else
3358                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3359                         echo "Looks kind of like an extended USG system, but we'll see..."
3360                 else
3361                         echo "Looks kind of like a USG system, but we'll see..."
3362                 fi
3363                 echo exit 0 >usg
3364         fi
3365 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3366         echo "Looks kind of like a BSD system, but we'll see..."
3367         d_bsd="$define"
3368         echo exit 0 >bsd
3369 else
3370         echo "Looks kind of like a Version 7 system, but we'll see..."
3371         echo exit 0 >v7
3372 fi
3373 case "$eunicefix" in
3374 *unixtovms*)
3375         $cat <<'EOI'
3376 There is, however, a strange, musty smell in the air that reminds me of
3377 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3378 EOI
3379         echo exit 0 >eunice
3380         d_eunice="$define"
3381 : it so happens the Eunice I know will not run shell scripts in Unix format
3382         ;;
3383 *)
3384         echo " "
3385         echo "Congratulations.  You aren't running Eunice."
3386         d_eunice="$undef"
3387         ;;
3388 esac
3389 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3390 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
3391 : semicolon as a patch separator
3392 case "$p_" in
3393 :) ;;
3394 *)
3395         $cat <<'EOI'
3396 I have the feeling something is not exactly right, however...don't tell me...
3397 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3398 (Or you may be running DOS with DJGPP.)
3399 EOI
3400         echo exit 0 >os2
3401         ;;
3402 esac
3403 if test -f /xenix; then
3404         echo "Actually, this looks more like a XENIX system..."
3405         echo exit 0 >xenix
3406         d_xenix="$define"
3407 else
3408         echo " "
3409         echo "It's not Xenix..."
3410         d_xenix="$undef"
3411 fi
3412 chmod +x xenix
3413 $eunicefix xenix
3414 if test -f /venix; then
3415         echo "Actually, this looks more like a VENIX system..."
3416         echo exit 0 >venix
3417 else
3418         echo " "
3419         if ./xenix; then
3420                 : null
3421         else
3422                 echo "Nor is it Venix..."
3423         fi
3424 fi
3425 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3426 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3427 $rm -f foo
3428
3429 case "$cc" in
3430 '') dflt=cc;;
3431 *) dflt="$cc";;
3432 esac
3433 rp="Use which C compiler?"
3434 . ./myread
3435 cc="$ans"
3436 : Look for a hint-file generated 'call-back-unit'.  Now that the
3437 : user has specified the compiler, we may need to set or change some
3438 : other defaults.
3439 if $test -f cc.cbu; then
3440     . ./cc.cbu
3441 fi
3442 . ./checkcc
3443
3444 echo " "
3445 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3446 $cat >try.c <<EOM
3447 #include <stdio.h>
3448 int main() {
3449 #ifdef __GNUC__
3450 #ifdef __VERSION__
3451         printf("%s\n", __VERSION__);
3452 #else
3453         printf("%s\n", "1");
3454 #endif
3455 #endif
3456         exit(0);
3457 }
3458 EOM
3459 if $cc -o try $ccflags $ldflags try.c; then
3460         gccversion=`$run ./try`
3461         case "$gccversion" in
3462         '') echo "You are not using GNU cc." ;;
3463         *)  echo "You are using GNU cc $gccversion."
3464             ccname=gcc  
3465             ;;
3466         esac
3467 else
3468         echo " "
3469         echo "*** WHOA THERE!!! ***" >&4
3470         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3471         case "$knowitall" in
3472         '')
3473         echo "    You'd better start hunting for one and let me know about it." >&4
3474                 exit 1
3475                 ;;
3476         esac
3477 fi
3478 $rm -f try try.*
3479 case "$gccversion" in
3480 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3481 esac
3482 case "$gccversion" in
3483 '') gccosandvers='' ;;
3484 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3485    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3486    gccshortvers=''
3487    case "$gccosandvers" in
3488    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3489    $osname$osvers) ;; # looking good
3490    $osname*) cat <<EOM >&4
3491
3492 *** WHOA THERE!!! ***
3493
3494     Your gcc has not been compiled for the exact release of
3495     your operating system ($gccosandvers versus $osname$osvers).
3496
3497     In general it is a good idea to keep gcc synchronized with
3498     the operating system because otherwise serious problems
3499     may ensue when trying to compile software, like Perl.
3500
3501     I'm trying to be optimistic here, though, and will continue.
3502     If later during the configuration and build icky compilation
3503     problems appear (headerfile conflicts being the most common
3504     manifestation), I suggest reinstalling the gcc to match
3505     your operating system release.
3506
3507 EOM
3508       ;;
3509    *) gccosandvers='' ;; # failed to parse, better be silent
3510    esac
3511    ;;
3512 esac
3513 case "$ccname" in
3514 '') ccname="$cc" ;;
3515 esac
3516
3517 case "$gccversion" in
3518 '') ;;
3519 *)  case "$ccflags" in
3520     *-Wall*) ;;
3521     *) ccflags="$ccflags -Wall" ;;
3522     esac
3523     ;;
3524 esac
3525
3526 : decide how portable to be.  Allow command line overrides.
3527 case "$d_portable" in
3528 "$undef") ;;
3529 *)      d_portable="$define" ;;
3530 esac
3531
3532 : set up shell script to do ~ expansion
3533 cat >filexp <<EOSS
3534 $startsh
3535 : expand filename
3536 case "\$1" in
3537  ~/*|~)
3538         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3539         ;;
3540  ~*)
3541         if $test -f /bin/csh; then
3542                 /bin/csh -f -c "glob \$1"
3543                 failed=\$?
3544                 echo ""
3545                 exit \$failed
3546         else
3547                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3548                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3549                 if $test ! -d "\$dir"; then
3550                         me=\`basename \$0\`
3551                         echo "\$me: can't locate home directory for: \$name" >&2
3552                         exit 1
3553                 fi
3554                 case "\$1" in
3555                 */*)
3556                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3557                         ;;
3558                 *)
3559                         echo \$dir
3560                         ;;
3561                 esac
3562         fi
3563         ;;
3564 *)
3565         echo \$1
3566         ;;
3567 esac
3568 EOSS
3569 chmod +x filexp
3570 $eunicefix filexp
3571
3572 : now set up to get a file name
3573 cat <<EOS >getfile
3574 $startsh
3575 EOS
3576 cat <<'EOSC' >>getfile
3577 tilde=''
3578 fullpath=''
3579 already=''
3580 skip=''
3581 none_ok=''
3582 exp_file=''
3583 nopath_ok=''
3584 orig_rp="$rp"
3585 orig_dflt="$dflt"
3586 case "$gfpth" in
3587 '') gfpth='.' ;;
3588 esac
3589
3590 case "$fn" in
3591 *\(*)
3592         expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3593         fn=`echo $fn | sed 's/(.*)//'`
3594         ;;
3595 esac
3596
3597 case "$fn" in
3598 *:*)
3599         loc_file=`expr $fn : '.*:\(.*\)'`
3600         fn=`expr $fn : '\(.*\):.*'`
3601         ;;
3602 esac
3603
3604 case "$fn" in
3605 *~*) tilde=true;;
3606 esac
3607 case "$fn" in
3608 */*) fullpath=true;;
3609 esac
3610 case "$fn" in
3611 *+*) skip=true;;
3612 esac
3613 case "$fn" in
3614 *n*) none_ok=true;;
3615 esac
3616 case "$fn" in
3617 *e*) exp_file=true;;
3618 esac
3619 case "$fn" in
3620 *p*) nopath_ok=true;;
3621 esac
3622
3623 case "$fn" in
3624 *f*) type='File';;
3625 *d*) type='Directory';;
3626 *l*) type='Locate';;
3627 esac
3628
3629 what="$type"
3630 case "$what" in
3631 Locate) what='File';;
3632 esac
3633
3634 case "$exp_file" in
3635 '')
3636         case "$d_portable" in
3637         "$define") ;;
3638         *) exp_file=true;;
3639         esac
3640         ;;
3641 esac
3642
3643 cd ..
3644 while test "$type"; do
3645         redo=''
3646         rp="$orig_rp"
3647         dflt="$orig_dflt"
3648         case "$tilde" in
3649         true) rp="$rp (~name ok)";;
3650         esac
3651         . UU/myread
3652         if test -f UU/getfile.ok && \
3653                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3654         then
3655                 value="$ans"
3656                 ansexp="$ans"
3657                 break
3658         fi
3659         case "$ans" in
3660         none)
3661                 value=''
3662                 ansexp=''
3663                 case "$none_ok" in
3664                 true) type='';;
3665                 esac
3666                 ;;
3667         *)
3668                 case "$tilde" in
3669                 '') value="$ans"
3670                         ansexp="$ans";;
3671                 *)
3672                         value=`UU/filexp $ans`
3673                         case $? in
3674                         0)
3675                                 if test "$ans" != "$value"; then
3676                                         echo "(That expands to $value on this system.)"
3677                                 fi
3678                                 ;;
3679                         *) value="$ans";;
3680                         esac
3681                         ansexp="$value"
3682                         case "$exp_file" in
3683                         '') value="$ans";;
3684                         esac
3685                         ;;
3686                 esac
3687                 case "$fullpath" in
3688                 true)
3689                         case "$ansexp" in
3690                         /*) value="$ansexp" ;;
3691                         [a-zA-Z]:/*) value="$ansexp" ;;
3692                         *)
3693                                 redo=true
3694                                 case "$already" in
3695                                 true)
3696                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3697                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3698                                         ;;
3699                                 *)
3700                                 echo "Please give a full path name, starting with slash." >&4
3701                                         case "$tilde" in
3702                                         true)
3703                                 echo "Note that using ~name is ok provided it expands well." >&4
3704                                                 already=true
3705                                                 ;;
3706                                         esac
3707                                 esac
3708                                 ;;
3709                         esac
3710                         ;;
3711                 esac
3712                 case "$redo" in
3713                 '')
3714                         case "$type" in
3715                         File)
3716                                 for fp in $gfpth; do
3717                                         if test "X$fp" = X.; then
3718                                             pf="$ansexp"
3719                                         else    
3720                                             pf="$fp/$ansexp"
3721                                         fi
3722                                         if test -f "$pf"; then
3723                                                 type=''
3724                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3725                                         then
3726                                                 echo "($value is not a plain file, but that's ok.)"
3727                                                 type=''
3728                                         fi
3729                                         if test X"$type" = X; then
3730                                             value="$pf"
3731                                             break
3732                                         fi
3733                                 done
3734                                 ;;
3735                         Directory)
3736                                 for fp in $gfpth; do
3737                                         if test "X$fp" = X.; then
3738                                             dir="$ans"
3739                                             direxp="$ansexp"
3740                                         else    
3741                                             dir="$fp/$ansexp"
3742                                             direxp="$fp/$ansexp"
3743                                         fi
3744                                         if test -d "$direxp"; then
3745                                                 type=''
3746                                                 value="$dir"
3747                                                 break
3748                                         fi
3749                                 done
3750                                 ;;
3751                         Locate)
3752                                 if test -d "$ansexp"; then
3753                                         echo "(Looking for $loc_file in directory $value.)"
3754                                         value="$value/$loc_file"
3755                                         ansexp="$ansexp/$loc_file"
3756                                 fi
3757                                 if test -f "$ansexp"; then
3758                                         type=''
3759                                 fi
3760                                 case "$nopath_ok" in
3761                                 true)   case "$value" in
3762                                         */*) ;;
3763                                         *)      echo "Assuming $value will be in people's path."
3764                                                 type=''
3765                                                 ;;
3766                                         esac
3767                                         ;;
3768                                 esac
3769                                 ;;
3770                         esac
3771
3772                         case "$skip" in
3773                         true) type='';
3774                         esac
3775
3776                         case "$type" in
3777                         '') ;;
3778                         *)
3779                                 if test "$fastread" = yes; then
3780                                         dflt=y
3781                                 else
3782                                         dflt=n
3783                                 fi
3784                                 rp="$what $value doesn't exist.  Use that name anyway?"
3785                                 . UU/myread
3786                                 dflt=''
3787                                 case "$ans" in
3788                                 y*) type='';;
3789                                 *) echo " ";;
3790                                 esac
3791                                 ;;
3792                         esac
3793                         ;;
3794                 esac
3795                 ;;
3796         esac
3797 done
3798 cd UU
3799 ans="$value"
3800 rp="$orig_rp"
3801 dflt="$orig_dflt"
3802 rm -f getfile.ok
3803 test "X$gfpthkeep" != Xy && gfpth=""
3804 EOSC
3805
3806 : What should the include directory be ?
3807 echo " "
3808 $echo $n "Hmm...  $c"
3809 dflt='/usr/include'
3810 incpath=''
3811 mips_type=''
3812 if $test -f /bin/mips && /bin/mips; then
3813         echo "Looks like a MIPS system..."
3814         $cat >usr.c <<'EOCP'
3815 #ifdef SYSTYPE_BSD43
3816 /bsd43
3817 #endif
3818 EOCP
3819         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3820                 dflt='/bsd43/usr/include'
3821                 incpath='/bsd43'
3822                 mips_type='BSD 4.3'
3823         else
3824                 mips_type='System V'
3825         fi
3826         $rm -f usr.c usr.out
3827         echo "and you're compiling with the $mips_type compiler and libraries."
3828         xxx_prompt=y
3829         echo "exit 0" >mips
3830 else
3831         echo "Doesn't look like a MIPS system."
3832         xxx_prompt=n
3833         echo "exit 1" >mips
3834 fi
3835 chmod +x mips
3836 $eunicefix mips
3837 case "$usrinc" in
3838 '') ;;
3839 *) dflt="$usrinc";;
3840 esac
3841 case "$xxx_prompt" in
3842 y)      fn=d/
3843         echo " "
3844         rp='Where are the include files you want to use?'
3845         . ./getfile
3846         usrinc="$ans"
3847         ;;
3848 *)      usrinc="$dflt"
3849         ;;
3850 esac
3851
3852 : see how we invoke the C preprocessor
3853 echo " "
3854 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3855 cat <<'EOT' >testcpp.c
3856 #define ABC abc
3857 #define XYZ xyz
3858 ABC.XYZ
3859 EOT
3860 cd ..
3861 if test ! -f cppstdin; then
3862         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3863                 # AIX cc -E doesn't show the absolute headerfile
3864                 # locations but we'll cheat by using the -M flag.
3865                 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
3866         else
3867                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3868         fi
3869 else
3870         echo "Keeping your $hint cppstdin wrapper."
3871 fi
3872 chmod 755 cppstdin
3873 wrapper=`pwd`/cppstdin
3874 ok='false'
3875 cd UU
3876
3877 if $test "X$cppstdin" != "X" && \
3878         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3879         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3880 then
3881         echo "You used to use $cppstdin $cppminus so we'll use that again."
3882         case "$cpprun" in
3883         '') echo "But let's see if we can live without a wrapper..." ;;
3884         *)
3885                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3886                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3887                 then
3888                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3889                         ok='true'
3890                 else
3891                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3892                 fi
3893                 ;;
3894         esac
3895 else
3896         case "$cppstdin" in
3897         '') ;;
3898         *)
3899                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3900                 ;;
3901         esac
3902 fi
3903
3904 if $ok; then
3905         : nothing
3906 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3907         $cc -E <testcpp.c >testcpp.out 2>&1; \
3908         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3909         echo "Yup, it does."
3910         x_cpp="$cc -E"
3911         x_minus='';
3912 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3913         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3914         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3915         echo "Yup, it does."
3916         x_cpp="$cc -E"
3917         x_minus='-';
3918 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3919         $cc -P <testcpp.c >testcpp.out 2>&1; \
3920         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3921         echo "Yipee, that works!"
3922         x_cpp="$cc -P"
3923         x_minus='';
3924 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3925         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3926         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3927         echo "At long last!"
3928         x_cpp="$cc -P"
3929         x_minus='-';
3930 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3931         $cpp <testcpp.c >testcpp.out 2>&1; \
3932         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3933         echo "It works!"
3934         x_cpp="$cpp"
3935         x_minus='';
3936 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3937         $cpp - <testcpp.c >testcpp.out 2>&1; \
3938         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3939         echo "Hooray, it works!  I was beginning to wonder."
3940         x_cpp="$cpp"
3941         x_minus='-';
3942 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3943         $wrapper <testcpp.c >testcpp.out 2>&1; \
3944         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3945         x_cpp="$wrapper"
3946         x_minus=''
3947         echo "Eureka!"
3948 else
3949         dflt=''
3950         rp="No dice.  I can't find a C preprocessor.  Name one:"
3951         . ./myread
3952         x_cpp="$ans"
3953         x_minus=''
3954         $x_cpp <testcpp.c >testcpp.out 2>&1
3955         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3956                 echo "OK, that will do." >&4
3957         else
3958 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3959                 exit 1
3960         fi
3961 fi
3962
3963 case "$ok" in
3964 false)
3965         cppstdin="$x_cpp"
3966         cppminus="$x_minus"
3967         cpprun="$x_cpp"
3968         cpplast="$x_minus"
3969         set X $x_cpp
3970         shift
3971         case "$1" in
3972         "$cpp")
3973                 echo "Perhaps can we force $cc -E using a wrapper..."
3974                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3975                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3976                 then
3977                         echo "Yup, we can."
3978                         cppstdin="$wrapper"
3979                         cppminus='';
3980                 else
3981                         echo "Nope, we'll have to live without it..."
3982                 fi
3983                 ;;
3984         esac
3985         case "$cpprun" in
3986         "$wrapper")
3987                 cpprun=''
3988                 cpplast=''
3989                 ;;
3990         esac
3991         ;;
3992 esac
3993
3994 case "$cppstdin" in
3995 "$wrapper"|'cppstdin') ;;
3996 *) $rm -f $wrapper;;
3997 esac
3998 $rm -f testcpp.c testcpp.out
3999
4000 : Set private lib path
4001 case "$plibpth" in
4002 '') if ./mips; then
4003                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
4004         fi;;
4005 esac
4006 case "$libpth" in
4007 ' ') dlist='';;
4008 '') dlist="$loclibpth $plibpth $glibpth";;
4009 *) dlist="$libpth";;
4010 esac
4011
4012 : Now check and see which directories actually exist, avoiding duplicates
4013 libpth=''
4014 for xxx in $dlist
4015 do
4016     if $test -d $xxx; then
4017                 case " $libpth " in
4018                 *" $xxx "*) ;;
4019                 *) libpth="$libpth $xxx";;
4020                 esac
4021     fi
4022 done
4023 $cat <<'EOM'
4024
4025 Some systems have incompatible or broken versions of libraries.  Among
4026 the directories listed in the question below, please remove any you
4027 know not to be holding relevant libraries, and add any that are needed.
4028 Say "none" for none.
4029
4030 EOM
4031 case "$libpth" in
4032 '') dflt='none';;
4033 *)
4034         set X $libpth
4035         shift
4036         dflt=${1+"$@"}
4037         ;;
4038 esac
4039 rp="Directories to use for library searches?"
4040 . ./myread
4041 case "$ans" in
4042 none) libpth=' ';;
4043 *) libpth="$ans";;
4044 esac
4045
4046 : compute shared library extension
4047 case "$so" in
4048 '')
4049         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4050                 dflt='sl'
4051         else
4052                 dflt='so'
4053         fi
4054         ;;
4055 *) dflt="$so";;
4056 esac
4057 $cat <<EOM
4058
4059 On some systems, shared libraries may be available.  Answer 'none' if
4060 you want to suppress searching of shared libraries for the remainder
4061 of this configuration.
4062
4063 EOM
4064 rp='What is the file extension used for shared libraries?'
4065 . ./myread
4066 so="$ans"
4067
4068 : Define several unixisms.
4069 : Hints files or command line option can be used to override them.
4070 : The convoluted testing is in case hints files set either the old
4071 : or the new name.
4072 case "$_exe" in
4073 '')     case "$exe_ext" in
4074     '') ;;
4075         *)      _exe="$exe_ext" ;;
4076         esac
4077         ;;
4078 esac
4079 case "$_a" in
4080 '')     case "$lib_ext" in
4081     '') _a='.a';;
4082         *)      _a="$lib_ext" ;;
4083         esac
4084         ;;
4085 esac
4086 case "$_o" in
4087 '') case "$obj_ext" in
4088         '')     _o='.o';;
4089         *)      _o="$obj_ext";;
4090         esac
4091         ;;
4092 esac
4093 case "$p_" in
4094 '') case "$path_sep" in
4095         '')     p_=':';;
4096         *)      p_="$path_sep";;
4097         esac
4098         ;;
4099 esac
4100 exe_ext=$_exe
4101 lib_ext=$_a
4102 obj_ext=$_o
4103 path_sep=$p_
4104
4105 : Which makefile gets called first.  This is used by make depend.
4106 case "$firstmakefile" in
4107 '') firstmakefile='makefile';;
4108 esac
4109
4110 case "$usesocks" in
4111 $define|true|[yY]*)     dflt='y';;
4112 *) dflt='n';;
4113 esac
4114 cat <<EOM
4115
4116 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4117 Configure must be run with -Dusesocks.  If you use SOCKS you also need
4118 to use the PerlIO abstraction layer, this will be implicitly selected.
4119
4120 If this doesn't make any sense to you, just accept the default '$dflt'.
4121 EOM
4122 rp='Build Perl for SOCKS?'
4123 . ./myread
4124 case "$ans" in
4125 y|Y)    val="$define" ;;     
4126 *)      val="$undef" ;;
4127 esac
4128 set usesocks
4129 eval $setvar
4130
4131 case "$usesocks" in
4132 $define|true|[yY]*) useperlio="$define";;
4133 esac
4134
4135 : Looking for optional libraries
4136 echo " "
4137 echo "Checking for optional libraries..." >&4
4138 case "$libs" in
4139 ' '|'') dflt='';;
4140 *) dflt="$libs";;
4141 esac
4142 case "$libswanted" in
4143 '') libswanted='c_s';;
4144 esac
4145 case "$usesocks" in
4146 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
4147 esac
4148 libsfound=''
4149 libsfiles=''
4150 libsdirs=''
4151 libspath=''
4152 for thisdir in $libpth $xlibpth; do
4153   test -d $thisdir && libspath="$libspath $thisdir"
4154 done
4155 for thislib in $libswanted; do
4156         for thisdir in $libspath; do
4157             xxx=''
4158             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4159                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
4160                 $test -f "$xxx" && eval $libscheck
4161                 $test -f "$xxx" && libstyle=shared
4162             fi
4163             if test ! -f "$xxx"; then
4164                 xxx=$thisdir/lib$thislib.$so
4165                 $test -f "$xxx" && eval $libscheck
4166                 $test -f "$xxx" && libstyle=shared
4167             fi  
4168             if test ! -f "$xxx"; then
4169                 xxx=$thisdir/lib$thislib$_a
4170                 $test -f "$xxx" && eval $libscheck
4171                 $test -f "$xxx" && libstyle=static
4172             fi
4173             if test ! -f "$xxx"; then
4174                 xxx=$thisdir/$thislib$_a
4175                 $test -f "$xxx" && eval $libscheck
4176                 $test -f "$xxx" && libstyle=static
4177             fi
4178             if test ! -f "$xxx"; then
4179                 xxx=$thisdir/lib${thislib}_s$_a
4180                 $test -f "$xxx" && eval $libscheck
4181                 $test -f "$xxx" && libstyle=static
4182                 $test -f "$xxx" && thislib=${thislib}_s
4183             fi
4184             if test ! -f "$xxx"; then
4185                 xxx=$thisdir/Slib$thislib$_a
4186                 $test -f "$xxx" && eval $libscheck
4187                 $test -f "$xxx" && libstyle=static
4188             fi
4189             if $test -f "$xxx"; then
4190                 case "$libstyle" in
4191                 shared) echo "Found -l$thislib (shared)." ;;
4192                 static) echo "Found -l$thislib." ;;
4193                 *)      echo "Found -l$thislib ($libstyle)." ;;
4194                 esac
4195                 case " $dflt " in
4196                 *"-l$thislib "*);;
4197                 *) dflt="$dflt -l$thislib"
4198                    libsfound="$libsfound $xxx"
4199                    yyy=`basename $xxx`
4200                    libsfiles="$libsfiles $yyy"
4201                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
4202                    case " $libsdirs " in
4203                    *" $yyy "*) ;;
4204                    *) libsdirs="$libsdirs $yyy" ;;
4205                    esac
4206                    ;;
4207                 esac
4208                 break
4209             fi  
4210         done
4211         if $test ! -f "$xxx"; then
4212             echo "No -l$thislib."
4213         fi
4214 done
4215 set X $dflt
4216 shift
4217 dflt="$*"
4218 case "$libs" in
4219 '') dflt="$dflt";;
4220 *) dflt="$libs";;
4221 esac
4222 case "$dflt" in
4223 ' '|'') dflt='none';;
4224 esac
4225
4226 $cat <<EOM
4227
4228 In order to compile $package on your machine, a number of libraries
4229 are usually needed.  Include any other special libraries here as well.
4230 Say "none" for none.  The default list is almost always right.
4231 EOM
4232
4233 echo " "
4234 rp="What libraries to use?"
4235 . ./myread
4236 case "$ans" in
4237 none) libs=' ';;
4238 *) libs="$ans";;
4239 esac
4240
4241 : determine optimization, if desired, or use for debug flag also
4242 case "$optimize" in
4243 ' '|$undef) dflt='none';;
4244 '') dflt='-O';;
4245 *) dflt="$optimize";;
4246 esac
4247 $cat <<EOH
4248
4249 By default, $package compiles with the -O flag to use the optimizer.
4250 Alternately, you might want to use the symbolic debugger, which uses
4251 the -g flag (on traditional Unix systems).  Either flag can be
4252 specified here.  To use neither flag, specify the word "none".
4253
4254 EOH
4255 rp="What optimizer/debugger flag should be used?"
4256 . ./myread
4257 optimize="$ans"
4258 case "$optimize" in
4259 'none') optimize=" ";;
4260 esac
4261
4262 dflt=''
4263 : We will not override a previous value, but we might want to
4264 : augment a hint file
4265 case "$hint" in
4266 default|recommended)
4267         case "$gccversion" in
4268         1*) dflt='-fpcc-struct-return' ;;
4269         esac
4270         case "$optimize" in
4271         *-g*) dflt="$dflt -DDEBUGGING";;
4272         esac
4273         case "$gccversion" in
4274         2*) if test -d /etc/conf/kconfig.d &&
4275                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4276                 then
4277                         dflt="$dflt -posix"
4278                 fi
4279                 ;;
4280         esac
4281         case "$gccversion" in
4282         1*) ;;
4283         2.[0-8]*) ;;
4284         ?*)     echo " "
4285                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4286                 echo 'int main(void) { return 0; }' > gcctest.c
4287                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4288                         echo "Yes, it does." 2>&1
4289                         case "$ccflags" in
4290                         *strict-aliasing*) 
4291                                 echo "Leaving current flags $ccflags alone." 2>&1
4292                                 ;;
4293                         *) dflt="$dflt -fno-strict-aliasing" ;;
4294                         esac
4295                 else
4296                         echo "Nope, it doesn't, but that's ok." 2>&1
4297                 fi
4298                 ;;
4299         esac
4300         ;;
4301 esac
4302
4303 case "$mips_type" in
4304 *BSD*|'') inclwanted="$locincpth $usrinc";;
4305 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4306 esac
4307 for thisincl in $inclwanted; do
4308         if $test -d $thisincl; then
4309                 if $test x$thisincl != x$usrinc; then
4310                         case "$dflt" in
4311                         *" -I$thisincl "*);;
4312                         *) dflt="$dflt -I$thisincl ";;
4313                         esac
4314                 fi
4315         fi
4316 done
4317
4318 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4319         xxx=true;
4320 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4321         xxx=true;
4322 else
4323         xxx=false;
4324 fi;
4325 if $xxx; then
4326         case "$dflt" in
4327         *$2*);;
4328         *) dflt="$dflt -D$2";;
4329         esac;
4330 fi'
4331
4332 set signal.h LANGUAGE_C; eval $inctest
4333
4334 case "$usesocks" in
4335 $define)
4336         ccflags="$ccflags -DSOCKS"
4337         ;;
4338 esac
4339
4340 case "$hint" in
4341 default|recommended) dflt="$ccflags $dflt" ;;
4342 *) dflt="$ccflags";;
4343 esac
4344
4345 case "$dflt" in
4346 ''|' ') dflt=none;;
4347 esac
4348
4349 $cat <<EOH
4350
4351 Your C compiler may want other flags.  For this question you should include
4352 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4353 but you should NOT include libraries or ld flags like -lwhatever.  If you
4354 want $package to honor its debug switch, you should include -DDEBUGGING here.
4355 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4356
4357 To use no flags, specify the word "none".
4358
4359 EOH
4360 set X $dflt
4361 shift
4362 dflt=${1+"$@"}
4363 rp="Any additional cc flags?"
4364 . ./myread
4365 case "$ans" in
4366 none) ccflags='';;
4367 *) ccflags="$ans";;
4368 esac
4369
4370 : the following weeds options from ccflags that are of no interest to cpp
4371 case "$cppflags" in
4372 '') cppflags="$ccflags" ;;
4373 *)  cppflags="$cppflags $ccflags" ;;
4374 esac
4375 case "$gccversion" in
4376 1*) cppflags="$cppflags -D__GNUC__"
4377 esac
4378 case "$mips_type" in
4379 '');;
4380 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4381 esac
4382 case "$cppflags" in
4383 '');;
4384 *)
4385         echo " "
4386         echo "Let me guess what the preprocessor flags are..." >&4
4387         set X $cppflags
4388         shift
4389         cppflags=''
4390         $cat >cpp.c <<'EOM'
4391 #define BLURFL foo
4392
4393 BLURFL xx LFRULB
4394 EOM
4395         previous=''
4396         for flag in $*
4397         do
4398                 case "$flag" in
4399                 -*) ftry="$flag";;
4400                 *) ftry="$previous $flag";;
4401                 esac
4402                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4403                         >cpp1.out 2>/dev/null && \
4404                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4405                         >cpp2.out 2>/dev/null && \
4406                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4407                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4408                 then
4409                         cppflags="$cppflags $ftry"
4410                         previous=''
4411                 else
4412                         previous="$flag"
4413                 fi
4414         done
4415         set X $cppflags
4416         shift
4417         cppflags=${1+"$@"}
4418         case "$cppflags" in
4419         *-*)  echo "They appear to be: $cppflags";;
4420         esac
4421         $rm -f cpp.c cpp?.out
4422         ;;
4423 esac
4424
4425 : flags used in final linking phase
4426 case "$ldflags" in
4427 '') if ./venix; then
4428                 dflt='-i -z'
4429         else
4430                 dflt=''
4431         fi
4432         case "$ccflags" in
4433         *-posix*) dflt="$dflt -posix" ;;
4434         esac
4435         ;;
4436 *) dflt="$ldflags";;
4437 esac
4438
4439 : Try to guess additional flags to pick up local libraries.
4440 for thislibdir in $libpth; do
4441         case " $loclibpth " in
4442         *" $thislibdir "*)
4443                 case "$dflt " in 
4444                 *"-L$thislibdir "*) ;;
4445                 *)  dflt="$dflt -L$thislibdir" ;;
4446                 esac
4447                 ;;
4448         esac
4449 done
4450
4451 case "$dflt" in
4452 '') dflt='none' ;;
4453 esac
4454
4455 $cat <<EOH
4456
4457 Your C linker may need flags.  For this question you should
4458 include -L/whatever and any other flags used by the C linker, but you
4459 should NOT include libraries like -lwhatever.
4460
4461 Make sure you include the appropriate -L/path flags if your C linker
4462 does not normally search all of the directories you specified above,
4463 namely
4464         $libpth
4465 To use no flags, specify the word "none".
4466
4467 EOH
4468
4469 rp="Any additional ld flags (NOT including libraries)?"
4470 . ./myread
4471 case "$ans" in
4472 none) ldflags='';;
4473 *) ldflags="$ans";;
4474 esac
4475 rmlist="$rmlist pdp11"
4476
4477 : coherency check
4478 echo " "
4479 echo "Checking your choice of C compiler and flags for coherency..." >&4
4480 $cat > try.c <<'EOF'
4481 #include <stdio.h>
4482 int main() { printf("Ok\n"); exit(0); }
4483 EOF
4484 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
4485 shift
4486 $cat >try.msg <<'EOM'
4487 I've tried to compile and run the following simple program:
4488
4489 EOM
4490 $cat try.c >> try.msg
4491
4492 $cat >> try.msg <<EOM
4493
4494 I used the command:
4495
4496         $*
4497         $run ./try
4498
4499 and I got the following output:
4500
4501 EOM
4502 dflt=y
4503 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
4504         if $sh -c "$run ./try" >>try.msg 2>&1; then
4505                 xxx=`$run ./try`
4506                 case "$xxx" in
4507                 "Ok") dflt=n ;;
4508                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4509                         case " $libs " in
4510                         *" -lsfio "*)
4511                                 cat >> try.msg <<'EOQS'
4512 If $libs contains -lsfio, and sfio is mis-configured, then it
4513 sometimes (apparently) runs and exits with a 0 status, but with no
4514 output!  It may have to do with sfio's use of _exit vs. exit.
4515
4516 EOQS
4517                                 rp="You have a big problem.  Shall I abort Configure"
4518                                 dflt=y
4519                                 ;;
4520                         esac
4521                         ;;
4522                 esac
4523         else
4524                 echo "The program compiled OK, but exited with status $?." >>try.msg
4525                 rp="You have a problem.  Shall I abort Configure"
4526                 dflt=y
4527         fi
4528 else
4529         echo "I can't compile the test program." >>try.msg
4530         rp="You have a BIG problem.  Shall I abort Configure"
4531         dflt=y
4532 fi
4533 case "$dflt" in
4534 y)
4535         $cat try.msg >&4
4536         case "$knowitall" in
4537         '')
4538                 echo "(The supplied flags or libraries might be incorrect.)"
4539                 ;;
4540         *) dflt=n;;
4541         esac
4542         echo " "
4543         . ./myread
4544         case "$ans" in
4545         n*|N*) ;;
4546         *)      echo "Ok.  Stopping Configure." >&4
4547                 exit 1
4548                 ;;
4549         esac
4550         ;;
4551 n) echo "OK, that should do.";;
4552 esac
4553 $rm -f try try.* core
4554
4555 : define a shorthand compile call
4556 compile='
4557 mc_file=$1;
4558 shift;
4559 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
4560 : define a shorthand compile call for compilations that should be ok.
4561 compile_ok='
4562 mc_file=$1;
4563 shift;
4564 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
4565
4566 : check for lengths of integral types
4567 echo " "
4568 case "$intsize" in
4569 '')
4570         echo "Checking to see how big your integers are..." >&4
4571         $cat >try.c <<'EOCP'
4572 #include <stdio.h>
4573 int main()
4574 {
4575         printf("intsize=%d;\n", (int)sizeof(int));
4576         printf("longsize=%d;\n", (int)sizeof(long));
4577         printf("shortsize=%d;\n", (int)sizeof(short));
4578         exit(0);
4579 }
4580 EOCP
4581         set try
4582         if eval $compile_ok && $run ./try > /dev/null; then
4583                 eval `$run ./try`
4584                 echo "Your integers are $intsize bytes long."
4585                 echo "Your long integers are $longsize bytes long."
4586                 echo "Your short integers are $shortsize bytes long."
4587         else
4588                 $cat >&4 <<EOM
4589 !
4590 Help! I can't compile and run the intsize test program: please enlighten me!
4591 (This is probably a misconfiguration in your system or libraries, and
4592 you really ought to fix it.  Still, I'll try anyway.)
4593 !
4594 EOM
4595                 dflt=4
4596                 rp="What is the size of an integer (in bytes)?"
4597                 . ./myread
4598                 intsize="$ans"
4599                 dflt=$intsize
4600                 rp="What is the size of a long integer (in bytes)?"
4601                 . ./myread
4602                 longsize="$ans"
4603                 dflt=2
4604                 rp="What is the size of a short integer (in bytes)?"
4605                 . ./myread
4606                 shortsize="$ans"
4607         fi
4608         ;;
4609 esac
4610 $rm -f try try.*
4611
4612 : check for void type
4613 echo " "
4614 echo "Checking to see how well your C compiler groks the void type..." >&4
4615 case "$voidflags" in
4616 '')
4617         $cat >try.c <<'EOCP'
4618 #if TRY & 1
4619 void sub() {
4620 #else
4621 sub() {
4622 #endif
4623         extern void moo();      /* function returning void */
4624         void (*goo)();          /* ptr to func returning void */
4625 #if TRY & 8
4626         void *hue;              /* generic ptr */
4627 #endif
4628 #if TRY & 2
4629         void (*foo[10])();
4630 #endif
4631
4632 #if TRY & 4
4633         if(goo == moo) {
4634                 exit(0);
4635         }
4636 #endif
4637         exit(0);
4638 }
4639 int main() { sub(); }
4640 EOCP
4641         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
4642                 voidflags=$defvoidused
4643         echo "Good.  It appears to support void to the level $package wants.">&4
4644                 if $contains warning .out >/dev/null 2>&1; then
4645                         echo "However, you might get some warnings that look like this:"
4646                         $cat .out
4647                 fi
4648         else
4649 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
4650                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
4651                         echo "It supports 1..."
4652                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
4653                                 echo "It also supports 2..."
4654                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
4655                                         voidflags=7
4656                                         echo "And it supports 4 but not 8 definitely."
4657                                 else
4658                                         echo "It doesn't support 4..."
4659                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
4660                                                 voidflags=11
4661                                                 echo "But it supports 8."
4662                                         else
4663                                                 voidflags=3
4664                                                 echo "Neither does it support 8."
4665                                         fi
4666                                 fi
4667                         else
4668                                 echo "It does not support 2..."
4669                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
4670                                         voidflags=13
4671                                         echo "But it supports 4 and 8."
4672                                 else
4673                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
4674                                                 voidflags=5
4675                                                 echo "And it supports 4 but has not heard about 8."
4676                                         else
4677                                                 echo "However it supports 8 but not 4."
4678                                         fi
4679                                 fi
4680                         fi
4681                 else
4682                         echo "There is no support at all for void."
4683                         voidflags=0
4684                 fi
4685         fi
4686 esac
4687 case "$voidflags" in
4688 "$defvoidused") ;;
4689 *)      $cat >&4 <<'EOM'
4690   Support flag bits are:
4691     1: basic void declarations.
4692     2: arrays of pointers to functions returning void.
4693     4: operations between pointers to and addresses of void functions.
4694     8: generic void pointers.
4695 EOM
4696         dflt="$voidflags";
4697         rp="Your void support flags add up to what?"
4698         . ./myread
4699         voidflags="$ans"
4700         ;;
4701 esac
4702 $rm -f try.* .out
4703
4704 : check for length of pointer
4705 echo " "
4706 case "$ptrsize" in
4707 '')
4708         echo "Checking to see how big your pointers are..." >&4
4709         if test "$voidflags" -gt 7; then
4710                 echo '#define VOID_PTR char *' > try.c
4711         else
4712                 echo '#define VOID_PTR void *' > try.c
4713         fi
4714         $cat >>try.c <<'EOCP'
4715 #include <stdio.h>
4716 int main()
4717 {
4718     printf("%d\n", (int)sizeof(VOID_PTR));
4719     exit(0);
4720 }
4721 EOCP
4722         set try
4723         if eval $compile_ok; then
4724                 ptrsize=`$run ./try`
4725                 echo "Your pointers are $ptrsize bytes long."
4726         else
4727                 dflt='4'
4728                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
4729                 rp="What is the size of a pointer (in bytes)?"
4730                 . ./myread
4731                 ptrsize="$ans"
4732         fi
4733         ;;
4734 esac
4735 $rm -f try.c try
4736
4737 : check for long long
4738 echo " "
4739 echo "Checking to see if you have long long..." >&4
4740 echo 'int main() { long long x = 7; return 0; }' > try.c
4741 set try
4742 if eval $compile; then
4743         val="$define"
4744         echo "You have long long."
4745 else
4746         val="$undef"
4747         echo "You do not have long long."
4748 fi
4749 $rm try.*
4750 set d_longlong
4751 eval $setvar
4752
4753 : check for length of long long
4754 case "${d_longlong}${longlongsize}" in
4755 $define)
4756         echo " "
4757         echo "Checking to see how big your long longs are..." >&4
4758         $cat >try.c <<'EOCP'
4759 #include <stdio.h>
4760 int main()
4761 {
4762     printf("%d\n", (int)sizeof(long long));
4763     return(0);
4764 }
4765 EOCP
4766         set try
4767         if eval $compile_ok; then
4768                 longlongsize=`$run ./try`
4769                 echo "Your long longs are $longlongsize bytes long."
4770         else
4771                 dflt='8'
4772                 echo " "
4773                 echo "(I can't seem to compile the test program.  Guessing...)"
4774                 rp="What is the size of a long long (in bytes)?"
4775                 . ./myread
4776                 longlongsize="$ans"
4777         fi
4778         if $test "X$longsize" = "X$longlongsize"; then
4779                 echo "(That isn't any different from an ordinary long.)"
4780         fi      
4781         ;;
4782 esac
4783 $rm -f try.* try
4784
4785 : determine filename position in cpp output
4786 echo " "
4787 echo "Computing filename position in cpp output for #include directives..." >&4
4788 echo '#include <stdio.h>' > foo.c
4789 $cat >fieldn <<EOF
4790 $startsh
4791 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4792 $grep '^[       ]*#.*stdio\.h' | \
4793 while read cline; do
4794         pos=1
4795         set \$cline
4796         while $test \$# -gt 0; do
4797                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4798                         echo "\$pos"
4799                         exit 0
4800                 fi
4801                 shift
4802                 pos=\`expr \$pos + 1\`
4803         done
4804 done
4805 EOF
4806 chmod +x fieldn
4807 fieldn=`./fieldn`
4808 $rm -f foo.c fieldn
4809 case $fieldn in
4810 '') pos='???';;
4811 1) pos=first;;
4812 2) pos=second;;
4813 3) pos=third;;
4814 *) pos="${fieldn}th";;
4815 esac
4816 echo "Your cpp writes the filename in the $pos field of the line."
4817
4818 : locate header file
4819 $cat >findhdr <<EOF
4820 $startsh
4821 wanted=\$1
4822 name=''
4823 for usrincdir in $usrinc
4824 do
4825         if test -f \$usrincdir/\$wanted; then
4826                 echo "\$usrincdir/\$wanted"
4827                 exit 0
4828         fi
4829 done
4830 awkprg='{ print \$$fieldn }'
4831 echo "#include <\$wanted>" > foo\$\$.c
4832 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4833 $grep "^[       ]*#.*\$wanted" | \
4834 while read cline; do
4835         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4836         case "\$name" in
4837         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4838         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4839         *) exit 2;;
4840         esac;
4841 done;
4842 #
4843 # status = 0: grep returned 0 lines, case statement not executed
4844 # status = 1: headerfile found
4845 # status = 2: while loop executed, no headerfile found
4846 #
4847 status=\$?
4848 $rm -f foo\$\$.c;
4849 if test \$status -eq 1; then
4850         exit 0;
4851 fi
4852 exit 1
4853 EOF
4854 chmod +x findhdr
4855
4856 : define an alternate in-header-list? function
4857 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4858 cont=true; xxf="echo \"<\$1> found.\" >&4";
4859 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4860 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4861 esac;
4862 case $# in 4) instead=instead;; *) instead="at last";; esac;
4863 while $test "$cont"; do
4864         xxx=`./findhdr $1`
4865         var=$2; eval "was=\$$2";
4866         if $test "$xxx" && $test -r "$xxx";
4867         then eval $xxf;
4868         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4869                 cont="";
4870         else eval $xxnf;
4871         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4872         set $yyy; shift; shift; yyy=$@;
4873         case $# in 0) cont="";;
4874         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4875                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4876         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4877                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4878         esac;
4879 done;
4880 while $test "$yyy";
4881 do set $yyy; var=$2; eval "was=\$$2";
4882         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4883         set $yyy; shift; shift; yyy=$@;
4884 done'
4885
4886 : see if inttypes.h is available
4887 : we want a real compile instead of Inhdr because some systems
4888 : have an inttypes.h which includes non-existent headers
4889 echo " "
4890 $cat >try.c <<EOCP
4891 #include <inttypes.h>
4892 int main() {
4893         static int32_t foo32 = 0x12345678;
4894 }
4895 EOCP
4896 set try
4897 if eval $compile; then
4898         echo "<inttypes.h> found." >&4
4899         val="$define"
4900 else
4901         echo "<inttypes.h> NOT found." >&4
4902         val="$undef"
4903 fi
4904 $rm -f try.c try
4905 set i_inttypes
4906 eval $setvar
4907
4908 : check for int64_t
4909 echo " "
4910 echo "Checking to see if you have int64_t..." >&4
4911 $cat >try.c <<EOCP
4912 #include <sys/types.h>
4913 #$i_inttypes I_INTTYPES
4914 #ifdef I_INTTYPES
4915 #include <inttypes.h>
4916 #endif
4917 int main() { int64_t x = 7; }
4918 EOCP
4919 set try
4920 if eval $compile; then
4921         val="$define"
4922         echo "You have int64_t."
4923 else
4924         val="$undef"
4925         echo "You do not have int64_t."
4926 fi
4927 $rm -f try try.*
4928 set d_int64_t
4929 eval $setvar
4930
4931
4932 echo " "
4933 echo "Checking which 64-bit integer type we could use..." >&4
4934
4935 case "$intsize" in
4936 8) val=int
4937    set quadtype
4938    eval $setvar
4939    val='"unsigned int"'
4940    set uquadtype
4941    eval $setvar
4942    quadkind=1
4943    ;;
4944 *) case "$longsize" in
4945    8) val=long
4946       set quadtype
4947       eval $setvar
4948       val='"unsigned long"'
4949       set uquadtype
4950       eval $setvar
4951       quadkind=2
4952       ;;
4953    *) case "$d_longlong:$longlongsize" in
4954       define:8)
4955         val='"long long"'
4956         set quadtype
4957         eval $setvar
4958         val='"unsigned long long"'
4959         set uquadtype
4960         eval $setvar
4961         quadkind=3
4962         ;;
4963       *) case "$d_int64_t" in
4964          define)
4965            val=int64_t
4966            set quadtype
4967            eval $setvar
4968            val=uint64_t
4969            set uquadtype
4970            eval $setvar
4971            quadkind=4
4972            ;;
4973          esac
4974          ;;
4975       esac
4976       ;;
4977    esac
4978    ;;
4979 esac
4980
4981 case "$quadtype" in
4982 '')     echo "Alas, no 64-bit integer types in sight." >&4
4983         d_quad="$undef"
4984         ;;
4985 *)      echo "We could use '$quadtype' for 64-bit integers." >&4
4986         d_quad="$define"
4987         ;;
4988 esac
4989
4990
4991 case "$uselonglong" in
4992 "$define"|true|[yY]*)
4993         cat <<EOM >&4
4994
4995 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
4996 EOM
4997         use64bitint="$define"
4998         ;;
4999 esac                          
5000 case "$use64bits" in
5001 "$define"|true|[yY]*)
5002         cat <<EOM >&4
5003
5004 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
5005 EOM
5006         use64bitint="$define"
5007         ;;
5008 esac                          
5009 case "$use64bitints" in
5010 "$define"|true|[yY]*)
5011         cat <<EOM >&4
5012
5013 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
5014 EOM
5015         use64bitint="$define"
5016         ;;
5017 esac                          
5018 case "$use64bitsint" in
5019 "$define"|true|[yY]*)
5020         cat <<EOM >&4
5021
5022 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
5023 EOM
5024         use64bitint="$define"
5025         ;;
5026 esac                          
5027 case "$uselonglongs" in
5028 "$define"|true|[yY]*)
5029         cat <<EOM >&4
5030
5031 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
5032 EOM
5033         use64bitint="$define"
5034         ;;
5035 esac                          
5036 case "$use64bitsall" in
5037 "$define"|true|[yY]*)
5038         cat <<EOM >&4
5039
5040 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
5041 EOM
5042         use64bitall="$define"
5043         ;;
5044 esac                          
5045
5046 case "$ccflags" in
5047 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
5048 esac
5049 case "$use64bitall" in
5050 "$define"|true|[yY]*) use64bitint="$define" ;;
5051 esac
5052
5053 case "$longsize" in
5054 8) cat <<EOM
5055
5056 You have natively 64-bit long integers.
5057 EOM
5058    val="$define"
5059    ;;
5060 *) case "$use64bitint" in
5061    "$define"|true|[yY]*) dflt='y';;
5062    *) dflt='n';;
5063    esac
5064    case "$d_quad" in
5065    "$define") ;;
5066    *) dflt='n' ;;
5067    esac
5068    cat <<EOM
5069
5070 Perl can be built to take advantage of 64-bit integer types
5071 on some systems.  To do so, Configure can be run with -Duse64bitint.
5072 Choosing this option will most probably introduce binary incompatibilities.
5073
5074 If this doesn't make any sense to you, just accept the default '$dflt'.
5075 (The default has been chosen based on your configuration.)
5076 EOM
5077    rp='Try to use 64-bit integers, if available?'
5078    . ./myread
5079    case "$ans" in
5080    [yY]*) val="$define" ;;
5081    *)     val="$undef"  ;;
5082    esac
5083    ;;
5084 esac
5085 set use64bitint
5086 eval $setvar
5087
5088 case "$use64bitall" in
5089 "$define"|true|[yY]*) dflt='y' ;;
5090 *) case "$longsize" in
5091    8) dflt='y' ;;
5092    *) dflt='n' ;;
5093    esac
5094    ;;
5095 esac    
5096 cat <<EOM
5097
5098 You may also choose to try maximal 64-bitness.  It means using as much
5099 64-bitness as possible on the platform.  This in turn means even more
5100 binary incompatibilities.  On the other hand, your platform may not
5101 have any more 64-bitness available than what you already have chosen.
5102
5103 If this doesn't make any sense to you, just accept the default '$dflt'.
5104 (The default has been chosen based on your configuration.)
5105 EOM
5106 rp='Try to use maximal 64-bit support, if available?'
5107 . ./myread
5108 case "$ans" in
5109 [yY]*) val="$define" ;;
5110 *)     val="$undef"  ;;
5111 esac
5112 set use64bitall
5113 eval $setvar
5114 case "$use64bitall" in
5115 "$define")
5116         case "$use64bitint" in
5117         "$undef")
5118                 cat <<EOM
5119
5120 Since you have chosen a maximally 64-bit build, I'm also turning on
5121 the use of 64-bit integers.
5122 EOM
5123                 use64bitint="$define" ;;
5124         esac
5125         ;;
5126 esac
5127
5128 case "$use64bitall" in
5129 "$define"|true|[yY]*)
5130         case "$ptrsize" in
5131         4)      cat <<EOM >&4
5132
5133 *** You have chosen a maximally 64-bit build, but your pointers
5134 *** are only 4 bytes wide, disabling maximal 64-bitness.
5135
5136 EOM
5137                 use64bitall="$undef"
5138                 case "$use64bitint" in
5139                 "$define"|true|[yY]*) ;;
5140                 *)      cat <<EOM >&4
5141
5142 *** Downgrading from maximal 64-bitness to using 64-bit integers.
5143
5144 EOM
5145                         use64bitint="$define"
5146                         ;;
5147                 esac
5148                 ;;
5149         esac
5150         ;;
5151 esac
5152
5153 case "$use64bitint" in
5154 "$define"|true|[yY]*)
5155 : Look for a hint-file generated 'call-back-unit'.  If the
5156 : user has specified that a 64-bit perl is to be built,
5157 : we may need to set or change some other defaults.
5158         if $test -f use64bitint.cbu; then
5159                 echo "Your platform has some specific hints for 64-bit integers, using them..."
5160                 . ./use64bitint.cbu
5161         fi
5162         case "$longsize" in
5163         4) case "$archname64" in
5164            '') archname64=64int ;;
5165            esac
5166            ;;
5167         esac
5168         ;;
5169 esac
5170
5171 case "$use64bitall" in
5172 "$define"|true|[yY]*)
5173 : Look for a hint-file generated 'call-back-unit'.  If the
5174 : user has specified that a maximally 64-bit perl is to be built,
5175 : we may need to set or change some other defaults.
5176         if $test -f use64bitall.cbu; then
5177                 echo "Your platform has some specific hints for 64-bit builds, using them..."
5178                 . ./use64bitall.cbu
5179         fi
5180         case "$longsize" in
5181         4) case "$archname64" in
5182            ''|64int) archname64=64all ;;
5183            esac
5184            ;;
5185         esac
5186         ;;
5187 esac
5188
5189 echo " "
5190 echo "Checking for GNU C Library..." >&4
5191 cat >try.c <<EOM
5192 #include <stdio.h>
5193 int main()
5194 {
5195 #ifdef __GLIBC__
5196     exit(0);
5197 #else
5198     exit(1);
5199 #endif
5200 }
5201 EOM
5202 set try
5203 if eval $compile_ok && $run ./try; then
5204         val="$define"
5205         echo "You are using the GNU C Library"
5206 else
5207         val="$undef"
5208         echo "You are not using the GNU C Library"
5209 fi
5210 $rm -f try try.*
5211 set d_gnulibc
5212 eval $setvar
5213
5214 : see if nm is to be used to determine whether a symbol is defined or not
5215 case "$usenm" in
5216 '')
5217         dflt=''
5218         case "$d_gnulibc" in
5219         "$define")
5220                 echo " "
5221                 echo "nm probably won't work on the GNU C Library." >&4
5222                 dflt=n
5223                 ;;
5224         esac
5225         case "$dflt" in
5226         '') 
5227                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5228                         echo " "
5229                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5230                         echo "'nm' won't be sufficient on this sytem." >&4
5231                         dflt=n
5232                 fi
5233                 ;;
5234         esac
5235         case "$dflt" in
5236         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5237                 if $test $dflt -gt 20; then
5238                         dflt=y
5239                 else
5240                         dflt=n
5241                 fi
5242                 ;;
5243         esac
5244         ;;
5245 *)
5246         case "$usenm" in
5247         true|$define) dflt=y;;
5248         *) dflt=n;;
5249         esac
5250         ;;
5251 esac
5252 $cat <<EOM
5253
5254 I can use $nm to extract the symbols from your C libraries. This
5255 is a time consuming task which may generate huge output on the disk (up
5256 to 3 megabytes) but that should make the symbols extraction faster. The
5257 alternative is to skip the 'nm' extraction part and to compile a small
5258 test program instead to determine whether each symbol is present. If
5259 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5260 this may be the best solution.
5261
5262 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5263
5264 EOM
5265 rp="Shall I use $nm to extract C symbols from the libraries?"
5266 . ./myread
5267 case "$ans" in
5268 [Nn]*) usenm=false;;
5269 *) usenm=true;;
5270 esac
5271
5272 runnm=$usenm
5273 case "$reuseval" in
5274 true) runnm=false;;
5275 esac
5276
5277 : nm options which may be necessary
5278 case "$nm_opt" in
5279 '') if $test -f /mach_boot; then
5280                 nm_opt=''       # Mach
5281         elif $test -d /usr/ccs/lib; then
5282                 nm_opt='-p'     # Solaris (and SunOS?)
5283         elif $test -f /dgux; then
5284                 nm_opt='-p'     # DG-UX
5285         elif $test -f /lib64/rld; then
5286                 nm_opt='-p'     # 64-bit Irix
5287         else
5288                 nm_opt=''
5289         fi;;
5290 esac
5291
5292 : nm options which may be necessary for shared libraries but illegal
5293 : for archive libraries.  Thank you, Linux.
5294 case "$nm_so_opt" in
5295 '')     case "$myuname" in
5296         *linux*)
5297                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5298                         nm_so_opt='--dynamic'
5299                 fi
5300                 ;;
5301         esac
5302         ;;
5303 esac
5304
5305 case "$runnm" in
5306 true)
5307 : get list of predefined functions in a handy place
5308 echo " "
5309 case "$libc" in
5310 '') libc=unknown
5311         case "$libs" in
5312         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5313         esac
5314         ;;
5315 esac
5316 case "$libs" in
5317 '') ;;
5318 *)  for thislib in $libs; do
5319         case "$thislib" in
5320         -lc|-lc_s)
5321                 : Handle C library specially below.
5322                 ;;
5323         -l*)
5324                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5325                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5326                         :
5327                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5328                         :
5329                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5330                         :
5331                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5332                         :
5333                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5334                         :
5335                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5336                         :
5337                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5338                         :
5339                 else
5340                         try=''
5341                 fi
5342                 libnames="$libnames $try"
5343                 ;;
5344         *) libnames="$libnames $thislib" ;;
5345         esac
5346         done
5347         ;;
5348 esac
5349 xxx=normal
5350 case "$libc" in
5351 unknown)
5352         set /lib/libc.$so
5353         for xxx in $libpth; do
5354                 $test -r $1 || set $xxx/libc.$so
5355                 : The messy sed command sorts on library version numbers.
5356                 $test -r $1 || \
5357                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5358                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5359                                 h
5360                                 s/[0-9][0-9]*/0000&/g
5361                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5362                                 G
5363                                 s/\n/ /' | \
5364                          $sort | $sed -e 's/^.* //'`
5365                 eval set \$$#
5366         done
5367         $test -r $1 || set /usr/ccs/lib/libc.$so
5368         $test -r $1 || set /lib/libsys_s$_a
5369         ;;
5370 *)
5371         set blurfl
5372         ;;
5373 esac
5374 if $test -r "$1"; then
5375         echo "Your (shared) C library seems to be in $1."
5376         libc="$1"
5377 elif $test -r /lib/libc && $test -r /lib/clib; then
5378         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5379         xxx=apollo
5380         libc='/lib/clib /lib/libc'
5381         if $test -r /lib/syslib; then
5382                 echo "(Your math library is in /lib/syslib.)"
5383                 libc="$libc /lib/syslib"
5384         fi
5385 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5386         echo "Your C library seems to be in $libc, as you said before."
5387 elif $test -r $incpath/usr/lib/libc$_a; then
5388         libc=$incpath/usr/lib/libc$_a;
5389         echo "Your C library seems to be in $libc.  That's fine."
5390 elif $test -r /lib/libc$_a; then
5391         libc=/lib/libc$_a;
5392         echo "Your C library seems to be in $libc.  You're normal."
5393 else
5394         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5395                 :
5396         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5397                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5398         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5399                 :
5400         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5401                 :
5402         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5403                 :
5404         else
5405                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5406         fi
5407         if $test -r "$tans"; then
5408                 echo "Your C library seems to be in $tans, of all places."
5409                 libc=$tans
5410         else
5411                 libc='blurfl'
5412         fi
5413 fi
5414 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5415         dflt="$libc"
5416         cat <<EOM
5417
5418 If the guess above is wrong (which it might be if you're using a strange
5419 compiler, or your machine supports multiple models), you can override it here.
5420
5421 EOM
5422 else
5423         dflt=''
5424         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
5425         cat >&4 <<EOM
5426 I can't seem to find your C library.  I've looked in the following places:
5427
5428 EOM
5429         $sed 's/^/      /' libpath
5430         cat <<EOM
5431
5432 None of these seems to contain your C library. I need to get its name...
5433
5434 EOM
5435 fi
5436 fn=f
5437 rp='Where is your C library?'
5438 . ./getfile
5439 libc="$ans"
5440
5441 echo " "
5442 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
5443 set X `cat libnames`
5444 shift
5445 xxx=files
5446 case $# in 1) xxx=file; esac
5447 echo "Extracting names from the following $xxx for later perusal:" >&4
5448 echo " "
5449 $sed 's/^/      /' libnames >&4
5450 echo " "
5451 $echo $n "This may take a while...$c" >&4
5452
5453 for file in $*; do
5454         case $file in
5455         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5456         *) $nm $nm_opt $file 2>/dev/null;;
5457         esac
5458 done >libc.tmp
5459
5460 $echo $n ".$c"
5461 $grep fprintf libc.tmp > libc.ptf
5462 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5463 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5464 xxx='[ADTSIW]'
5465 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5466         eval $xscan;\
5467         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5468                 eval $xrun
5469 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5470         eval $xscan;\
5471         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5472                 eval $xrun
5473 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5474         eval $xscan;\
5475         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5476                 eval $xrun
5477 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5478         eval $xscan;\
5479         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5480                 eval $xrun
5481 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5482         eval $xscan;\
5483         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5484                 eval $xrun
5485 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5486         eval $xscan;\
5487         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5488                 eval $xrun
5489 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5490                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5491         eval $xscan;\
5492         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5493                 eval $xrun
5494 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5495         eval $xscan;\
5496         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5497                 eval $xrun
5498 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5499         eval $xscan;\
5500         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5501                 eval $xrun
5502 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5503         eval $xscan;\
5504         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5505                 eval $xrun
5506 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5507         eval $xscan;\
5508         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5509                 eval $xrun
5510 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5511         eval $xscan;\
5512         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5513                 eval $xrun
5514 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5515         eval $xscan;\
5516         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5517                 eval $xrun
5518 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5519         eval $xscan;\
5520         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5521                 eval $xrun
5522 else
5523         $nm -p $* 2>/dev/null >libc.tmp
5524         $grep fprintf libc.tmp > libc.ptf
5525         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5526                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5527         then
5528                 nm_opt='-p'
5529                 eval $xrun
5530         else
5531                 echo " "
5532                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5533                 com=''
5534                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5535                         for thisname in $libnames $libc; do
5536                                 $ar t $thisname >>libc.tmp
5537                         done
5538                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5539                         echo "Ok." >&4
5540                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5541                         # Repeat libc to extract forwarders to DLL entries too
5542                         for thisname in $libnames $libc; do
5543                                 $ar tv $thisname >>libc.tmp
5544                                 # Revision 50 of EMX has bug in $ar.
5545                                 # it will not extract forwarders to DLL entries
5546                                 # Use emximp which will extract exactly them.
5547                                 emximp -o tmp.imp $thisname \
5548                                     2>/dev/null && \
5549                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5550                                     < tmp.imp >>libc.tmp
5551                                 $rm tmp.imp
5552                         done
5553                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5554                         echo "Ok." >&4
5555                 else
5556                         echo "$ar didn't seem to work right." >&4
5557                         echo "Maybe this is a Cray...trying bld instead..." >&4
5558                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5559                         then
5560                                 for thisname in $libnames; do
5561                                         bld t $libnames | \
5562                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5563                                         $ar t $thisname >>libc.tmp
5564                                 done
5565                                 echo "Ok." >&4
5566                         else
5567                                 echo "That didn't work either.  Giving up." >&4
5568                                 exit 1
5569                         fi
5570                 fi
5571         fi
5572 fi
5573 nm_extract="$com"
5574 if $test -f /lib/syscalls.exp; then
5575         echo " "
5576         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5577         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
5578 fi
5579 ;;
5580 esac
5581 $rm -f libnames libpath
5582
5583 : is a C symbol defined?
5584 csym='tlook=$1;
5585 case "$3" in
5586 -v) tf=libc.tmp; tc=""; tdc="";;
5587 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5588 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5589 esac;
5590 tx=yes;
5591 case "$reuseval-$4" in
5592 true-) ;;
5593 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5594 esac;
5595 case "$tx" in
5596 yes)
5597         case "$runnm" in
5598         true)
5599                 if $contains $tlook $tf >/dev/null 2>&1;
5600                 then tval=true;
5601                 else tval=false;
5602                 fi;;
5603         *)
5604                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5605                 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
5606                 then tval=true;
5607                 else tval=false;
5608                 fi;
5609                 $rm -f t t.c;;
5610         esac;;
5611 *)
5612         case "$tval" in
5613         $define) tval=true;;
5614         *) tval=false;;
5615         esac;;
5616 esac;
5617 eval "$2=$tval"'
5618
5619 : define an is-in-libc? function
5620 inlibc='echo " "; td=$define; tu=$undef;
5621 sym=$1; var=$2; eval "was=\$$2";
5622 tx=yes;
5623 case "$reuseval$was" in
5624 true) ;;
5625 true*) tx=no;;
5626 esac;
5627 case "$tx" in
5628 yes)
5629         set $sym tres -f;
5630         eval $csym;
5631         case "$tres" in
5632         true)
5633                 echo "$sym() found." >&4;
5634                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5635         *)
5636                 echo "$sym() NOT found." >&4;
5637                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5638         esac;;
5639 *)
5640         case "$was" in
5641         $define) echo "$sym() found." >&4;;
5642         *) echo "$sym() NOT found." >&4;;
5643         esac;;
5644 esac'
5645
5646 : see if sqrtl exists
5647 set sqrtl d_sqrtl
5648 eval $inlibc
5649
5650 case "$ccflags" in
5651 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
5652 esac
5653
5654 case "$uselongdouble" in
5655 $define|true|[yY]*)     dflt='y';;
5656 *) dflt='n';;
5657 esac
5658 cat <<EOM
5659
5660 Perl can be built to take advantage of long doubles which
5661 (if available) may give more accuracy and range for floating point numbers.
5662
5663 If this doesn't make any sense to you, just accept the default '$dflt'.
5664 EOM
5665 rp='Try to use long doubles if available?'
5666 . ./myread
5667 case "$ans" in
5668 y|Y)    val="$define"   ;;
5669 *)      val="$undef"    ;;
5670 esac
5671 set uselongdouble
5672 eval $setvar
5673
5674 case "$uselongdouble" in
5675 true|[yY]*) uselongdouble="$define" ;;
5676 esac
5677
5678 case "$uselongdouble" in
5679 $define)
5680 : Look for a hint-file generated 'call-back-unit'.  If the
5681 : user has specified that long doubles should be used,
5682 : we may need to set or change some other defaults.
5683         if $test -f uselongdouble.cbu; then
5684                 echo "Your platform has some specific hints for long doubles, using them..."
5685                 . ./uselongdouble.cbu
5686         else
5687                 $cat <<EOM
5688 (Your platform doesn't have any specific hints for long doubles.)
5689 EOM
5690         fi
5691         ;;
5692 esac
5693
5694 case "$uselongdouble:$d_sqrtl" in
5695 $define:$undef)
5696                 $cat <<EOM >&4
5697
5698 *** You requested the use of long doubles but you do not seem to have
5699 *** the mathematic functions for long doubles.  I'm disabling the use
5700 *** of long doubles.
5701
5702 EOM
5703         uselongdouble=$undef
5704         ;;
5705 esac
5706
5707 : check for length of double
5708 echo " "
5709 case "$doublesize" in
5710 '')
5711         echo "Checking to see how big your double precision numbers are..." >&4
5712         $cat >try.c <<'EOCP'
5713 #include <stdio.h>
5714 int main()
5715 {
5716     printf("%d\n", (int)sizeof(double));
5717     exit(0);
5718 }
5719 EOCP
5720         set try
5721         if eval $compile_ok; then
5722                 doublesize=`$run ./try`
5723                 echo "Your double is $doublesize bytes long."
5724         else
5725                 dflt='8'
5726                 echo "(I can't seem to compile the test program.  Guessing...)"
5727                 rp="What is the size of a double precision number (in bytes)?"
5728                 . ./myread
5729                 doublesize="$ans"
5730         fi
5731         ;;
5732 esac
5733 $rm -f try.c try
5734
5735 : check for long doubles
5736 echo " "
5737 echo "Checking to see if you have long double..." >&4
5738 echo 'int main() { long double x = 7.0; }' > try.c
5739 set try
5740 if eval $compile; then
5741         val="$define"
5742         echo "You have long double."
5743 else
5744         val="$undef"
5745         echo "You do not have long double."
5746 fi
5747 $rm try.*
5748 set d_longdbl
5749 eval $setvar
5750
5751 : check for length of long double
5752 case "${d_longdbl}${longdblsize}" in
5753 $define)
5754         echo " "
5755         echo "Checking to see how big your long doubles are..." >&4
5756         $cat >try.c <<'EOCP'
5757 #include <stdio.h>
5758 int main()
5759 {
5760         printf("%d\n", sizeof(long double));
5761 }
5762 EOCP
5763         set try
5764         set try
5765         if eval $compile; then
5766                 longdblsize=`$run ./try`
5767                 echo "Your long doubles are $longdblsize bytes long."
5768         else
5769                 dflt='8'
5770                 echo " "
5771                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
5772                 rp="What is the size of a long double (in bytes)?"
5773                 . ./myread
5774                 longdblsize="$ans"
5775         fi
5776         if $test "X$doublesize" = "X$longdblsize"; then
5777                 echo "(That isn't any different from an ordinary double.)"
5778         fi      
5779         ;;
5780 esac
5781 $rm -f try.* try
5782
5783 case "$useperlio" in
5784 $define|true|[yY]*|'')  dflt='y';;
5785 *) dflt='n';;
5786 esac
5787 cat <<EOM
5788
5789 Previous version of $package used the standard IO mechanisms as
5790 defined in <stdio.h>.  Versions 5.003_02 and later of $package allow
5791 alternate IO mechanisms via the PerlIO abstraction layer, but the
5792 stdio mechanism is still available if needed.  The abstraction layer
5793 can use AT&T's sfio (if you already have sfio installed) or regular stdio.
5794 Using PerlIO with sfio may cause problems with some extension modules.
5795
5796 If this doesn't make any sense to you, just accept the default '$dflt'.
5797 EOM
5798 rp='Use the PerlIO abstraction layer?'
5799 . ./myread
5800 case "$ans" in
5801 y|Y) 
5802         val="$define"
5803         ;;
5804 *)      
5805         echo "Ok, doing things the stdio way."
5806         val="$undef"
5807         ;;
5808 esac
5809 set useperlio
5810 eval $setvar 
5811
5812 case "$usesocks" in
5813 $define|true|[yY]*)
5814         case "$useperlio" in
5815         $define|true|[yY]*) ;;
5816         *)      cat >&4 <<EOM
5817
5818 You are using the SOCKS proxy protocol library which means that you
5819 should also use the PerlIO layer.  You may be headed for trouble.
5820
5821 EOM
5822                 ;;
5823         esac
5824         ;;
5825 esac
5826
5827         
5828 : determine the architecture name
5829 echo " "
5830 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
5831         tarch=`arch`"-$osname"
5832 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
5833         if uname -m > tmparch 2>&1 ; then
5834                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
5835                         -e 's/$/'"-$osname/" tmparch`
5836         else
5837                 tarch="$osname"
5838         fi
5839         $rm -f tmparch
5840 else
5841         tarch="$osname"
5842 fi
5843 case "$myarchname" in
5844 ''|"$tarch") ;;
5845 *)
5846         echo "(Your architecture name used to be $myarchname.)"
5847         archname=''
5848         ;;
5849 esac
5850 case "$targetarch" in
5851 '') ;;
5852 *)  archname=`echo $targetarch|sed 's,^[^-]*-,,'` ;;
5853 esac
5854 myarchname="$tarch"
5855 case "$archname" in
5856 '') dflt="$tarch";;
5857 *) dflt="$archname";;
5858 esac
5859 rp='What is your architecture name'
5860 . ./myread
5861 archname="$ans"
5862 case "$usethreads" in
5863 $define)
5864         echo "Threads selected." >&4
5865         case "$archname" in
5866         *-thread*) echo "...and architecture name already has -thread." >&4
5867                 ;;
5868         *)      archname="$archname-thread"
5869                 echo "...setting architecture name to $archname." >&4
5870                 ;;
5871         esac
5872         ;;
5873 esac
5874 case "$usemultiplicity" in
5875 $define)
5876         echo "Multiplicity selected." >&4
5877         case "$archname" in
5878         *-multi*) echo "...and architecture name already has -multi." >&4
5879                 ;;
5880         *)      archname="$archname-multi"
5881                 echo "...setting architecture name to $archname." >&4
5882                 ;;
5883         esac
5884         ;;
5885 esac
5886 case "$use64bitint$use64bitall" in
5887 *"$define"*)
5888         case "$archname64" in
5889         '')
5890                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
5891                 ;;
5892         *)
5893                 case "$use64bitint" in
5894                 "$define") echo "64 bit integers selected." >&4 ;;
5895                 esac
5896                 case "$use64bitall" in
5897                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
5898                 esac
5899                 case "$archname" in
5900                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
5901                         ;;
5902                 *)      archname="$archname-$archname64"
5903                         echo "...setting architecture name to $archname." >&4
5904                         ;;
5905                 esac
5906                 ;;
5907         esac
5908 esac
5909 case "$uselongdouble" in
5910 $define)
5911         echo "Long doubles selected." >&4
5912         case "$longdblsize" in
5913         $doublesize)
5914                 "...but long doubles are equal to doubles, not changing architecture name." >&4
5915                 ;;
5916         *)
5917                 case "$archname" in
5918                 *-ld*) echo "...and architecture name already has -ld." >&4
5919                         ;;
5920                 *)      archname="$archname-ld"
5921                         echo "...setting architecture name to $archname." >&4
5922                         ;;
5923                 esac
5924                 ;;
5925         esac
5926         ;;
5927 esac
5928 case "$useperlio" in
5929 $define)
5930         echo "Perlio selected." >&4
5931         ;;
5932 *)
5933         echo "Perlio not selected, using stdio." >&4
5934         case "$archname" in
5935         *-stdio*) echo "...and architecture name already has -stdio." >&4
5936                 ;;
5937         *)      archname="$archname-stdio"
5938                 echo "...setting architecture name to $archname." >&4
5939                 ;;
5940         esac
5941         ;;
5942 esac
5943
5944 : determine root of directory hierarchy where package will be installed.
5945 case "$prefix" in
5946 '')
5947         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
5948         ;;
5949 *)
5950         dflt="$prefix"
5951         ;;
5952 esac
5953 $cat <<EOM
5954
5955 By default, $package will be installed in $dflt/bin, manual pages
5956 under $dflt/man, etc..., i.e. with $dflt as prefix for all
5957 installation directories. Typically this is something like /usr/local.
5958 If you wish to have binaries under /usr/bin but other parts of the
5959 installation under /usr/local, that's ok: you will be prompted
5960 separately for each of the installation directories, the prefix being
5961 only used to set the defaults.
5962
5963 EOM
5964 fn=d~
5965 rp='Installation prefix to use?'
5966 . ./getfile
5967 oldprefix=''
5968 case "$prefix" in
5969 '') ;;
5970 *)
5971         case "$ans" in
5972         "$prefix") ;;
5973         *) oldprefix="$prefix";;
5974         esac
5975         ;;
5976 esac
5977 prefix="$ans"
5978 prefixexp="$ansexp"
5979
5980 case "$afsroot" in
5981 '')     afsroot=/afs ;;
5982 *)      afsroot=$afsroot ;;
5983 esac
5984
5985 : is AFS running?
5986 echo " "
5987 case "$afs" in
5988 $define|true)   afs=true ;;
5989 $undef|false)   afs=false ;;
5990 *)      if test -d $afsroot; then
5991                 afs=true
5992         else
5993                 afs=false
5994         fi
5995         ;;
5996 esac
5997 if $afs; then
5998         echo "AFS may be running... I'll be extra cautious then..." >&4
5999 else
6000         echo "AFS does not seem to be running..." >&4
6001 fi
6002
6003 : determine installation prefix for where package is to be installed.
6004 if $afs; then 
6005 $cat <<EOM
6006
6007 Since you are running AFS, I need to distinguish the directory in which
6008 files will reside from the directory in which they are installed (and from
6009 which they are presumably copied to the former directory by occult means).
6010
6011 EOM
6012         case "$installprefix" in
6013         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
6014         *) dflt="$installprefix";;
6015         esac
6016 else
6017 $cat <<EOM
6018
6019 In some special cases, particularly when building $package for distribution,
6020 it is convenient to distinguish between the directory in which files should 
6021 be installed from the directory ($prefix) in which they 
6022 will eventually reside.  For most users, these two directories are the same.
6023
6024 EOM
6025         case "$installprefix" in
6026         '') dflt=$prefix ;;
6027         *) dflt=$installprefix;;
6028         esac
6029 fi
6030 fn=d~
6031 rp='What installation prefix should I use for installing files?'
6032 . ./getfile
6033 installprefix="$ans"
6034 installprefixexp="$ansexp"
6035
6036 : set the prefixit variable, to compute a suitable default value
6037 prefixit='case "$3" in
6038 ""|none)
6039         case "$oldprefix" in
6040         "") eval "$1=\"\$$2\"";;
6041         *)
6042                 case "$3" in
6043                 "") eval "$1=";;
6044                 none)
6045                         eval "tp=\"\$$2\"";
6046                         case "$tp" in
6047                         ""|" ") eval "$1=\"\$$2\"";;
6048                         *) eval "$1=";;
6049                         esac;;
6050                 esac;;
6051         esac;;
6052 *)
6053         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
6054         case "$tp" in
6055         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
6056         /*-$oldprefix/*|\~*-$oldprefix/*)
6057                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
6058         *) eval "$1=\"\$$2\"";;
6059         esac;;
6060 esac'
6061
6062
6063 : get the patchlevel
6064 echo " "
6065 echo "Getting the current patchlevel..." >&4
6066 if $test -r $rsrc/patchlevel.h;then
6067         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
6068         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
6069         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6070         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
6071         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
6072         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6073        perl_patchlevel=`grep ',"DEVEL[0-9][0-9]*"' $rsrc/patchlevel.h|sed 's/[^0-9]//g'`
6074 else
6075         revision=0
6076         patchlevel=0
6077         subversion=0
6078         api_revision=0
6079         api_version=0
6080         api_subversion=0
6081         perl_patchlevel=0
6082         $echo "(You do not have patchlevel.h.  Eek.)"
6083 fi
6084 if $test -r $rsrc/.patch ; then  
6085         if $test "`cat $rsrc/.patch`" -gt "$perl_patchlevel" ; then
6086                 perl_patchlevel=`cat $rsrc/.patch`
6087         fi
6088 fi
6089 case "$perl_patchlevel" in
6090 0)  ;;
6091 '') $echo "(You have $package version $patchlevel subversion $subversion.)" ;;
6092 *)  $echo "(You have $package version $patchlevel subversion $subversion patchlevel $perl_patchlevel.)" ;;
6093 esac
6094 case "$osname" in
6095 dos|vms)
6096         : XXX Should be a Configure test for double-dots in filenames.
6097         version=`echo $revision $patchlevel $subversion | \
6098                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6099         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6100                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6101         ;;
6102 *)
6103         version=`echo $revision $patchlevel $subversion | \
6104                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6105         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6106                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6107         ;;
6108 esac
6109 : Special case the 5.005_xx maintenance series, which used 5.005
6110 : without any subversion label as a subdirectory in $sitelib
6111 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
6112         api_versionstring='5.005'
6113 fi
6114
6115 : determine installation style
6116 : For now, try to deduce it from prefix unless it is already set.
6117 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
6118 case "$installstyle" in
6119 '')     case "$prefix" in
6120                 *perl*) dflt='lib';;
6121                 *) dflt='lib/perl5' ;;
6122         esac
6123         ;;
6124 *)      dflt="$installstyle" ;;
6125 esac
6126 : Probably not worth prompting for this since we prompt for all
6127 : the directories individually, and the prompt would be too long and
6128 : confusing anyway.
6129 installstyle=$dflt
6130
6131 : determine where private library files go
6132 : Usual default is /usr/local/lib/perl5/$version.
6133 : Also allow things like /opt/perl/lib/$version, since 
6134 : /opt/perl/lib/perl5... would be redundant.
6135 : The default "style" setting is made in installstyle.U
6136 case "$installstyle" in
6137 *lib/perl5*) set dflt privlib lib/$package/$version ;;
6138 *)       set dflt privlib lib/$version ;;
6139 esac
6140 eval $prefixit
6141 $cat <<EOM
6142
6143 There are some auxiliary files for $package that need to be put into a
6144 private library directory that is accessible by everyone.
6145
6146 EOM
6147 fn=d~+
6148 rp='Pathname where the private library files will reside?'
6149 . ./getfile
6150 privlib="$ans"
6151 privlibexp="$ansexp"
6152 : Change installation prefix, if necessary.
6153 if $test X"$prefix" != X"$installprefix"; then
6154         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
6155 else
6156         installprivlib="$privlibexp"
6157 fi
6158
6159 : set the prefixup variable, to restore leading tilda escape
6160 prefixup='case "$prefixexp" in
6161 "$prefix") ;;
6162 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
6163 esac'
6164
6165 : determine where public architecture dependent libraries go
6166 set archlib archlib
6167 eval $prefixit
6168 : privlib default is /usr/local/lib/$package/$version
6169 : archlib default is /usr/local/lib/$package/$version/$archname
6170 : privlib may have an optional trailing /share.
6171 tdflt=`echo $privlib | $sed 's,/share$,,'`
6172 tdflt=$tdflt/$archname
6173 case "$archlib" in
6174 '')     dflt=$tdflt
6175         ;;
6176 *)      dflt="$archlib"
6177     ;;
6178 esac
6179 $cat <<EOM
6180
6181 $spackage contains architecture-dependent library files.  If you are
6182 sharing libraries in a heterogeneous environment, you might store
6183 these files in a separate location.  Otherwise, you can just include
6184 them with the rest of the public library files.
6185
6186 EOM
6187 fn=d+~
6188 rp='Where do you want to put the public architecture-dependent libraries?'
6189 . ./getfile
6190 archlib="$ans"
6191 archlibexp="$ansexp"
6192 if $test X"$archlib" = X"$privlib"; then
6193         d_archlib="$undef"
6194 else
6195         d_archlib="$define"
6196 fi
6197 : Change installation prefix, if necessary.
6198 if $test X"$prefix" != X"$installprefix"; then
6199         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
6200 else
6201         installarchlib="$archlibexp"
6202 fi
6203
6204
6205 : Binary compatibility with 5.005 is not possible for builds
6206 : with advanced features
6207 case "$usethreads$usemultiplicity" in
6208 *define*)
6209         bincompat5005="$undef"
6210         d_bincompat5005="$undef"
6211         ;;
6212 *)      $cat <<EOM
6213
6214 This version of Perl can be compiled for binary compatibility with 5.005.
6215 If you decide to do so, you will be able to continue using most of the
6216 extensions that were compiled for Perl 5.005.
6217
6218 EOM
6219         case "$bincompat5005$d_bincompat5005" in
6220         *"$undef"*) dflt=n ;;
6221         *) dflt=y ;;
6222         esac
6223         rp='Binary compatibility with Perl 5.005?'
6224         . ./myread
6225         case "$ans" in
6226         y*) val="$define" ;;
6227         *)  val="$undef" ;;
6228         esac
6229         set d_bincompat5005
6230         eval $setvar
6231         case "$d_bincompat5005" in
6232         "$define")
6233                 bincompat5005="$define"
6234                 ;;
6235         *)      bincompat5005="$undef"
6236                 d_bincompat5005="$undef"
6237                 ;;
6238         esac
6239         ;;
6240 esac
6241
6242
6243 : see if setuid scripts can be secure
6244 $cat <<EOM
6245
6246 Some kernels have a bug that prevents setuid #! scripts from being
6247 secure.  Some sites have disabled setuid #! scripts because of this.
6248
6249 First let's decide if your kernel supports secure setuid #! scripts.
6250 (If setuid #! scripts would be secure but have been disabled anyway,
6251 don't say that they are secure if asked.)
6252
6253 EOM
6254
6255 val="$undef"
6256 if $test -d /dev/fd; then
6257         echo "#!$ls" >reflect
6258         chmod +x,u+s reflect
6259         ./reflect >flect 2>&1
6260         if $contains "/dev/fd" flect >/dev/null; then
6261                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
6262                 val="$define"
6263         else
6264                 $cat <<EOM
6265 If you are not sure if they are secure, I can check but I'll need a
6266 username and password different from the one you are using right now.
6267 If you don't have such a username or don't want me to test, simply
6268 enter 'none'.
6269
6270 EOM
6271                 rp='Other username to test security of setuid scripts with?'
6272                 dflt='none'
6273                 . ./myread
6274                 case "$ans" in
6275                 n|none)
6276                         case "$d_suidsafe" in
6277                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
6278                                 dflt=n;;
6279                         "$undef")
6280                                 echo "Well, the $hint value is *not* secure." >&4
6281                                 dflt=n;;
6282                         *)      echo "Well, the $hint value *is* secure." >&4
6283                                 dflt=y;;
6284                         esac
6285                         ;;
6286                 *)
6287                         $rm -f reflect flect
6288                         echo "#!$ls" >reflect
6289                         chmod +x,u+s reflect
6290                         echo >flect
6291                         chmod a+w flect
6292                         echo '"su" will (probably) prompt you for '"$ans's password."
6293                         su $ans -c './reflect >flect'
6294                         if $contains "/dev/fd" flect >/dev/null; then
6295                                 echo "Okay, it looks like setuid scripts are secure." >&4
6296                                 dflt=y
6297                         else
6298                                 echo "I don't think setuid scripts are secure." >&4
6299                                 dflt=n
6300                         fi
6301                         ;;
6302                 esac
6303                 rp='Does your kernel have *secure* setuid scripts?'
6304                 . ./myread
6305                 case "$ans" in
6306                 [yY]*)  val="$define";;
6307                 *)      val="$undef";;
6308                 esac
6309         fi
6310 else
6311         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
6312         echo "(That's for file descriptors, not floppy disks.)"
6313         val="$undef"
6314 fi
6315 set d_suidsafe
6316 eval $setvar
6317
6318 $rm -f reflect flect
6319
6320 : now see if they want to do setuid emulation
6321 echo " "
6322 val="$undef"
6323 case "$d_suidsafe" in
6324 "$define")
6325         val="$undef"
6326         echo "No need to emulate SUID scripts since they are secure here." >& 4
6327         ;;
6328 *)
6329         $cat <<EOM
6330 Some systems have disabled setuid scripts, especially systems where
6331 setuid scripts cannot be secure.  On systems where setuid scripts have
6332 been disabled, the setuid/setgid bits on scripts are currently
6333 useless.  It is possible for $package to detect those bits and emulate
6334 setuid/setgid in a secure fashion.  This emulation will only work if
6335 setuid scripts have been disabled in your kernel.
6336
6337 EOM
6338         case "$d_dosuid" in
6339         "$define") dflt=y ;;
6340         *) dflt=n ;;
6341         esac
6342         rp="Do you want to do setuid/setgid emulation?"
6343         . ./myread
6344         case "$ans" in
6345         [yY]*)  val="$define";;
6346         *)      val="$undef";;
6347         esac
6348         ;;
6349 esac
6350 set d_dosuid
6351 eval $setvar
6352
6353 : see if this is a malloc.h system
6354 set malloc.h i_malloc
6355 eval $inhdr
6356
6357 : see if stdlib is available
6358 set stdlib.h i_stdlib
6359 eval $inhdr
6360
6361 : determine which malloc to compile in
6362 echo " "
6363 case "$usemymalloc" in
6364 [yY]*|true|$define)     dflt='y' ;;
6365 [nN]*|false|$undef)     dflt='n' ;;
6366 *)      case "$ptrsize" in
6367         4) dflt='y' ;;
6368         *) dflt='n' ;;
6369         esac
6370         ;;
6371 esac
6372 rp="Do you wish to attempt to use the malloc that comes with $package?"
6373 . ./myread
6374 usemymalloc="$ans"
6375 case "$ans" in
6376 y*|true)
6377         usemymalloc='y'
6378         mallocsrc='malloc.c'
6379         mallocobj="malloc$_o"
6380         d_mymalloc="$define"
6381         case "$libs" in
6382         *-lmalloc*)
6383                 : Remove malloc from list of libraries to use
6384                 echo "Removing unneeded -lmalloc from library list" >&4
6385                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
6386                 shift
6387                 libs="$*"
6388                 echo "libs = $libs" >&4
6389                 ;;
6390         esac
6391         ;;
6392 *)
6393         usemymalloc='n'
6394         mallocsrc=''
6395         mallocobj=''
6396         d_mymalloc="$undef"
6397         ;;
6398 esac
6399
6400 : compute the return types of malloc and free
6401 echo " "
6402 $cat >malloc.c <<END
6403 #$i_malloc I_MALLOC
6404 #$i_stdlib I_STDLIB
6405 #include <stdio.h>
6406 #include <sys/types.h>
6407 #ifdef I_MALLOC
6408 #include <malloc.h>
6409 #endif
6410 #ifdef I_STDLIB
6411 #include <stdlib.h>
6412 #endif
6413 #ifdef TRY_MALLOC
6414 void *malloc();
6415 #endif
6416 #ifdef TRY_FREE
6417 void free();
6418 #endif
6419 END
6420 case "$malloctype" in
6421 '')
6422         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
6423                 malloctype='void *'
6424         else
6425                 malloctype='char *'
6426         fi
6427         ;;
6428 esac
6429 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6430
6431 case "$freetype" in
6432 '')
6433         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6434                 freetype='void'
6435         else
6436                 freetype='int'
6437         fi
6438         ;;
6439 esac
6440 echo "Your system uses $freetype free(), it would seem." >&4
6441 $rm -f malloc.[co]
6442 $cat <<EOM
6443
6444 After $package is installed, you may wish to install various
6445 add-on modules and utilities.  Typically, these add-ons will
6446 be installed under $prefix with the rest
6447 of this package.  However, you may wish to install such add-ons
6448 elsewhere under a different prefix.
6449
6450 If you do not wish to put everything under a single prefix, that's
6451 ok.  You will be prompted for the individual locations; this siteprefix
6452 is only used to suggest the defaults.
6453
6454 The default should be fine for most people.
6455
6456 EOM
6457 fn=d~+
6458 rp='Installation prefix to use for add-on modules and utilities?'
6459 : XXX Here might be another good place for an installstyle setting.
6460 case "$siteprefix" in
6461 '') dflt=$prefix ;;
6462 *)  dflt=$siteprefix ;;
6463 esac
6464 . ./getfile
6465 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6466 oldsiteprefix=''
6467 case "$siteprefix" in
6468 '') ;;
6469 *)      case "$ans" in
6470         "$prefix") ;;
6471         *) oldsiteprefix="$prefix";;
6472         esac
6473         ;;
6474 esac
6475 siteprefix="$ans"
6476 siteprefixexp="$ansexp"
6477
6478 : determine where site specific libraries go.
6479 : Usual default is /usr/local/lib/perl5/site_perl/$version
6480 : The default "style" setting is made in installstyle.U
6481 : XXX No longer works with Prefixit stuff.
6482 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6483 case "$sitelib" in
6484 '') case "$installstyle" in
6485         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
6486         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
6487         esac
6488         ;;
6489 *)      dflt="$sitelib"
6490         ;;
6491 esac
6492 $cat <<EOM
6493
6494 The installation process will create a directory for
6495 site-specific extensions and modules.  Most users find it convenient
6496 to place all site-specific files in this directory rather than in the
6497 main distribution directory.
6498
6499 EOM
6500 fn=d~+
6501 rp='Pathname for the site-specific library files?'
6502 . ./getfile
6503 sitelib="$ans"
6504 sitelibexp="$ansexp"
6505 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
6506 : Change installation prefix, if necessary.
6507 if $test X"$prefix" != X"$installprefix"; then
6508         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
6509 else
6510         installsitelib="$sitelibexp"
6511 fi
6512
6513 : determine where site specific architecture-dependent libraries go.
6514 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
6515 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6516 : sitelib may have an optional trailing /share.
6517 case "$sitearch" in
6518 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
6519         dflt="$dflt/$archname"
6520         ;;
6521 *)      dflt="$sitearch"
6522         ;;
6523 esac
6524 set sitearch sitearch none
6525 eval $prefixit
6526 $cat <<EOM
6527
6528 The installation process will also create a directory for
6529 architecture-dependent site-specific extensions and modules.
6530
6531 EOM
6532 fn=d~+
6533 rp='Pathname for the site-specific architecture-dependent library files?'
6534 . ./getfile
6535 sitearch="$ans"
6536 sitearchexp="$ansexp"
6537 : Change installation prefix, if necessary.
6538 if $test X"$prefix" != X"$installprefix"; then
6539         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6540 else
6541         installsitearch="$sitearchexp"
6542 fi
6543
6544 $cat <<EOM
6545
6546 The installation process will also create a directory for
6547 vendor-supplied add-ons.  Vendors who supply perl with their system
6548 may find it convenient to place all vendor-supplied files in this
6549 directory rather than in the main distribution directory.  This will
6550 ease upgrades between binary-compatible maintenance versions of perl.
6551
6552 Of course you may also use these directories in whatever way you see
6553 fit.  For example, you might use them to access modules shared over a
6554 company-wide network.
6555
6556 The default answer should be fine for most people.
6557 This causes further questions about vendor add-ons to be skipped
6558 and no vendor-specific directories will be configured for perl.
6559
6560 EOM
6561 rp='Do you want to configure vendor-specific add-on directories?'
6562 case "$usevendorprefix" in
6563 define|true|[yY]*) dflt=y ;;
6564 *)      : User may have set vendorprefix directly on Configure command line.
6565         case "$vendorprefix" in
6566         ''|' ') dflt=n ;;
6567         *)      dflt=y ;;
6568         esac
6569         ;;
6570 esac
6571 . ./myread
6572 case "$ans" in
6573 [yY]*)  fn=d~+
6574         rp='Installation prefix to use for vendor-supplied add-ons?'
6575         case "$vendorprefix" in
6576         '') dflt='' ;;
6577         *)  dflt=$vendorprefix ;;
6578         esac
6579         . ./getfile
6580         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6581         oldvendorprefix=''
6582         case "$vendorprefix" in
6583         '') ;;
6584         *)      case "$ans" in
6585                 "$prefix") ;;
6586                 *) oldvendorprefix="$prefix";;
6587                 esac
6588                 ;;
6589         esac
6590         usevendorprefix="$define"
6591         vendorprefix="$ans"
6592         vendorprefixexp="$ansexp"
6593         ;;
6594 *)      usevendorprefix="$undef"
6595         vendorprefix=''
6596         vendorprefixexp=''
6597         ;;
6598 esac
6599
6600 case "$vendorprefix" in
6601 '')     d_vendorlib="$undef"
6602         vendorlib=''
6603         vendorlibexp=''
6604         ;;
6605 *)      d_vendorlib="$define"
6606         : determine where vendor-supplied modules go.
6607         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6608         case "$vendorlib" in
6609         '')
6610                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6611                 case "$installstyle" in
6612                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6613                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6614                 esac
6615                 ;;
6616         *)      dflt="$vendorlib"
6617                 ;;
6618         esac
6619         fn=d~+
6620         rp='Pathname for the vendor-supplied library files?'
6621         . ./getfile
6622         vendorlib="$ans"
6623         vendorlibexp="$ansexp"
6624         ;;
6625 esac
6626 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6627 : Change installation prefix, if necessary.
6628 if $test X"$prefix" != X"$installprefix"; then
6629         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6630 else
6631         installvendorlib="$vendorlibexp"
6632 fi
6633
6634 case "$vendorprefix" in
6635 '')     d_vendorarch="$undef"
6636         vendorarch=''
6637         vendorarchexp=''
6638         ;;
6639 *)      d_vendorarch="$define"
6640         : determine where vendor-supplied architecture-dependent libraries go.
6641         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
6642         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6643         : vendorlib may have an optional trailing /share.
6644         case "$vendorarch" in
6645         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
6646                 dflt="$dflt/$archname"
6647                 ;;
6648         *)      dflt="$vendorarch" ;;
6649         esac
6650         fn=d~+
6651         rp='Pathname for vendor-supplied architecture-dependent files?'
6652         . ./getfile
6653         vendorarch="$ans"
6654         vendorarchexp="$ansexp"
6655         ;;
6656 esac
6657 : Change installation prefix, if necessary.
6658 if $test X"$prefix" != X"$installprefix"; then
6659         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6660 else
6661         installvendorarch="$vendorarchexp"
6662 fi
6663
6664 : Final catch-all directories to search
6665 $cat <<EOM
6666
6667 Lastly, you can have perl look in other directories for extensions and
6668 modules in addition to those already specified.
6669 These directories will be searched after 
6670         $sitearch 
6671         $sitelib 
6672 EOM
6673 test X"$vendorlib" != "X" && echo '     ' $vendorlib
6674 test X"$vendorarch" != "X" && echo '    ' $vendorarch
6675 echo ' '
6676 case "$otherlibdirs" in
6677 ''|' ') dflt='none' ;;
6678 *)      dflt="$otherlibdirs" ;;
6679 esac
6680 $cat <<EOM
6681 Enter a colon-separated set of extra paths to include in perl's @INC
6682 search path, or enter 'none' for no extra paths.
6683
6684 EOM
6685
6686 rp='Colon-separated list of additional directories for perl to search?'
6687 . ./myread
6688 case "$ans" in
6689 ' '|''|none)    otherlibdirs=' ' ;;     
6690 *)      otherlibdirs="$ans" ;;
6691 esac
6692 case "$otherlibdirs" in
6693 ' ') val=$undef ;;
6694 *)      val=$define ;;
6695 esac
6696 set d_perl_otherlibdirs
6697 eval $setvar
6698
6699 : Cruising for prototypes
6700 echo " "
6701 echo "Checking out function prototypes..." >&4
6702 $cat >prototype.c <<'EOCP'
6703 int main(int argc, char *argv[]) {
6704         exit(0);}
6705 EOCP
6706 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
6707         echo "Your C compiler appears to support function prototypes."
6708         val="$define"
6709 else
6710         echo "Your C compiler doesn't seem to understand function prototypes."
6711         val="$undef"
6712 fi
6713 set prototype
6714 eval $setvar
6715 $rm -f prototype*
6716
6717 case "$prototype" in
6718 "$define") ;;
6719 *)      ansi2knr='ansi2knr'
6720         echo " "
6721         cat <<EOM >&4
6722
6723 $me:  FATAL ERROR:
6724 This version of $package can only be compiled by a compiler that 
6725 understands function prototypes.  Unfortunately, your C compiler 
6726         $cc $ccflags
6727 doesn't seem to understand them.  Sorry about that.
6728
6729 If GNU cc is available for your system, perhaps you could try that instead.  
6730
6731 Eventually, we hope to support building Perl with pre-ANSI compilers.
6732 If you would like to help in that effort, please contact <perlbug@perl.org>.
6733
6734 Aborting Configure now.
6735 EOM
6736         exit 2
6737         ;;
6738 esac
6739
6740 : determine where public executables go
6741 echo " "
6742 set dflt bin bin
6743 eval $prefixit
6744 fn=d~
6745 rp='Pathname where the public executables will reside?'
6746 . ./getfile
6747 if $test "X$ansexp" != "X$binexp"; then
6748         installbin=''
6749 fi
6750 bin="$ans"
6751 binexp="$ansexp"
6752 : Change installation prefix, if necessary.
6753 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
6754 if $test X"$prefix" != X"$installprefix"; then
6755         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
6756 else
6757         installbin="$binexp"
6758 fi
6759
6760 : Find perl5.005 or later.
6761 echo "Looking for a previously installed perl5.005 or later... "
6762 case "$perl5" in
6763 '')     for tdir in `echo "$binexp$path_sep$PATH" | $sed "s/$path_sep/ /g"`; do
6764                 : Check if this perl is recent and can load a simple module
6765                 if $test -x $tdir/perl$exe_ext && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6766                         perl5=$tdir/perl
6767                         break;
6768                 elif $test -x $tdir/perl5$exe_ext && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6769                         perl5=$tdir/perl5
6770                         break;
6771                 fi
6772         done
6773         ;;
6774 *)      perl5="$perl5"
6775         ;;
6776 esac
6777 case "$perl5" in
6778 '')     echo "None found.  That's ok.";;
6779 *)      echo "Using $perl5." ;;
6780 esac
6781
6782 : Determine list of previous versions to include in @INC
6783 $cat > getverlist <<EOPL
6784 #!$perl5 -w
6785 use File::Basename;
6786 \$api_versionstring = "$api_versionstring";
6787 \$version = "$version";
6788 \$stem = "$sitelib_stem";
6789 \$archname = "$archname";
6790 EOPL
6791         $cat >> getverlist <<'EOPL'
6792 # Can't have leading @ because metaconfig interprets it as a command!
6793 ;@inc_version_list=();
6794 # XXX Redo to do opendir/readdir? 
6795 if (-d $stem) {
6796     chdir($stem);
6797     ;@candidates = glob("5.*");
6798 }
6799 else {
6800     ;@candidates = ();
6801 }
6802
6803 # XXX ToDo:  These comparisons must be reworked when two-digit
6804 # subversions come along, so that 5.7.10 compares as greater than
6805 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
6806 # widespread that we can use the built-in version vectors rather
6807 # than reinventing them here.  For 5.6.0, however, we must
6808 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
6809 foreach $d (@candidates) {
6810     if ($d lt $version) {
6811         if ($d ge $api_versionstring) {
6812             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
6813         }
6814         elsif ($d ge "5.005") {
6815             unshift(@inc_version_list, grep { -d } $d);
6816         }
6817     }
6818     else {
6819         # Skip newer version.  I.e. don't look in
6820         # 5.7.0 if we're installing 5.6.1.
6821     }
6822 }
6823
6824 if (@inc_version_list) {
6825     print join(' ', @inc_version_list);
6826 }
6827 else {
6828     # Blank space to preserve value for next Configure run.
6829     print " ";
6830 }
6831 EOPL
6832 chmod +x getverlist
6833 case "$inc_version_list" in
6834 '')     if test -x "$perl5$exe_ext"; then
6835                 dflt=`$perl5 getverlist`
6836         else
6837                 dflt='none'
6838         fi
6839         ;;
6840 $undef) dflt='none' ;;
6841 *)  eval dflt=\"$inc_version_list\" ;;
6842 esac
6843 case "$dflt" in
6844 ''|' ') dflt=none ;;
6845 esac
6846 case "$dflt" in
6847 5.005) case "$bincompat5005" in
6848        $define|true|[yY]*) ;;
6849        *) dflt=none ;;
6850        esac
6851        ;;
6852 esac
6853 $cat <<'EOM'
6854
6855 In order to ease the process of upgrading, this version of perl 
6856 can be configured to use modules built and installed with earlier 
6857 versions of perl that were installed under $prefix.  Specify here
6858 the list of earlier versions that this version of perl should check.
6859 If Configure detected no earlier versions of perl installed under
6860 $prefix, then the list will be empty.  Answer 'none' to tell perl
6861 to not search earlier versions.
6862
6863 The default should almost always be sensible, so if you're not sure,
6864 just accept the default.
6865 EOM
6866
6867 rp='List of earlier versions to include in @INC?'
6868 . ./myread
6869 case "$ans" in
6870 [Nn]one|''|' ') inc_version_list=' ' ;;
6871 *) inc_version_list="$ans" ;;
6872 esac
6873 case "$inc_version_list" in
6874 ''|' ') 
6875         inc_version_list_init='0';;
6876 *)      inc_version_list_init=`echo $inc_version_list |
6877                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
6878         ;;
6879 esac
6880 $rm -f getverlist
6881
6882 : determine whether to install perl also as /usr/bin/perl
6883
6884 echo " "
6885 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
6886         $cat <<EOM
6887 Many scripts expect perl to be installed as /usr/bin/perl.
6888 I can install the perl you are about to compile also as /usr/bin/perl
6889 (in addition to $installbin/perl).
6890 EOM
6891         case "$installusrbinperl" in
6892         "$undef"|[nN]*) dflt='n';;
6893         *)              dflt='y';;
6894         esac
6895         rp="Do you want to install perl as /usr/bin/perl?"
6896         . ./myread
6897         case "$ans" in
6898         [yY]*)  val="$define";;
6899         *)      val="$undef" ;;
6900         esac
6901 else
6902         val="$undef"
6903 fi
6904 set installusrbinperl
6905 eval $setvar
6906
6907 : see if dld is available
6908 set dld.h i_dld
6909 eval $inhdr
6910
6911 : see if dlopen exists
6912 xxx_runnm="$runnm"
6913 runnm=false
6914 set dlopen d_dlopen
6915 eval $inlibc
6916 runnm="$xxx_runnm"
6917
6918 : determine which dynamic loading, if any, to compile in
6919 echo " "
6920 dldir="ext/DynaLoader"
6921 case "$usedl" in
6922 $define|y|true)
6923         dflt='y'
6924         usedl="$define"
6925         ;;
6926 $undef|n|false)
6927         dflt='n'
6928         usedl="$undef"
6929         ;;
6930 *) 
6931         dflt='n'
6932         case "$d_dlopen" in
6933             $define) dflt='y' ;;
6934         esac
6935         case "$i_dld" in
6936             $define) dflt='y' ;;
6937         esac
6938         : Does a dl_xxx.xs file exist for this operating system
6939         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
6940         ;;
6941 esac
6942 rp="Do you wish to use dynamic loading?"
6943 . ./myread
6944 usedl="$ans"
6945 case "$ans" in
6946 y*) usedl="$define"
6947         case "$dlsrc" in
6948         '')
6949                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
6950                         dflt="$dldir/dl_${osname}.xs"
6951                 elif $test "$d_dlopen" = "$define" ; then
6952                         dflt="$dldir/dl_dlopen.xs"
6953                 elif $test "$i_dld" = "$define" ; then
6954                         dflt="$dldir/dl_dld.xs"
6955                 else
6956                         dflt=''
6957                 fi
6958                 ;;
6959         *)      dflt="$dldir/$dlsrc"
6960                 ;;
6961         esac
6962     echo "The following dynamic loading files are available:"
6963         : Can not go over to $dldir because getfile has path hard-coded in.
6964         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
6965         rp="Source file to use for dynamic loading"
6966         fn="fne"
6967         gfpth="$src"
6968         . ./getfile
6969         usedl="$define"
6970         : emulate basename
6971         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
6972
6973         $cat << EOM
6974
6975 Some systems may require passing special flags to $cc -c to
6976 compile modules that will be used to create a shared library.
6977 To use no flags, say "none".
6978
6979 EOM
6980     case "$cccdlflags" in
6981     '') case "$gccversion" in
6982                 '') case "$osname" in
6983                         hpux)   dflt='+z' ;;
6984                         next)   dflt='none' ;;
6985                         irix*)  dflt='-KPIC' ;;
6986                         svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
6987                         sunos)  dflt='-pic' ;;
6988                         *)      dflt='none' ;;
6989                     esac
6990                         ;;
6991                 *)  case "$osname" in
6992                         svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
6993                         *)      dflt='-fpic' ;;
6994                     esac ;;
6995             esac ;;
6996         ' ') dflt='none' ;;
6997     *)  dflt="$cccdlflags" ;;
6998     esac
6999     rp="Any special flags to pass to $cc -c to compile shared library modules?"
7000     . ./myread
7001     case "$ans" in
7002     none) cccdlflags=' ' ;;
7003     *) cccdlflags="$ans" ;;
7004     esac
7005
7006     cat << EOM
7007
7008 Some systems use ld to create libraries that can be dynamically loaded,
7009 while other systems (such as those using ELF) use $cc.
7010
7011 EOM
7012         case "$ld" in
7013         '')     $cat >try.c <<'EOM'
7014 /* Test for whether ELF binaries are produced */
7015 #include <fcntl.h>
7016 #include <stdlib.h>
7017 int main() {
7018         char b[4];
7019         int i = open("a.out",O_RDONLY);
7020         if(i == -1) 
7021                 exit(1); /* fail */
7022         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
7023                 exit(0); /* succeed (yes, it's ELF) */
7024         else
7025                 exit(1); /* fail */
7026 }
7027 EOM
7028                 if $cc $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then
7029                         cat <<EOM
7030 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
7031 EOM
7032                         dflt="$cc"
7033                 else
7034                         echo "I'll use ld to build dynamic libraries."
7035                         dflt='ld'
7036                 fi
7037                 rm -f try.c a.out
7038                 ;;
7039         *)      dflt="$ld"
7040                 ;;
7041         esac
7042
7043     rp="What command should be used to create dynamic libraries?"
7044     . ./myread
7045         ld="$ans"
7046
7047     cat << EOM
7048
7049 Some systems may require passing special flags to $ld to create a
7050 library that can be dynamically loaded.  If your ld flags include
7051 -L/other/path options to locate libraries outside your loader's normal
7052 search path, you may need to specify those -L options here as well.  To
7053 use no flags, say "none".
7054
7055 EOM
7056     case "$lddlflags" in
7057     '') case "$osname" in
7058                         beos) dflt='-nostart' ;;
7059                         hpux) dflt='-b';
7060                               case "$gccversion" in
7061                               '') dflt="$dflt +vnocompatwarnings" ;;
7062                               esac
7063                               ;;        
7064                         linux|irix*)    dflt='-shared' ;;
7065                         next)  dflt='none' ;;
7066                         solaris) dflt='-G' ;;
7067                         sunos) dflt='-assert nodefinitions' ;;
7068                         svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
7069                 *)     dflt='none' ;;
7070                         esac
7071                         ;;
7072     *) dflt="$lddlflags" ;;
7073     esac
7074
7075         : Try to guess additional flags to pick up local libraries.
7076         : Be careful not to append to a plain 'none'
7077         case "$dflt" in
7078         none) dflt='' ;;
7079         esac
7080         for thisflag in $ldflags; do
7081                 case "$thisflag" in
7082                 -L*|-R*)
7083                         case " $dflt " in
7084                         *" $thisflag "*) ;;
7085                         *) dflt="$dflt $thisflag" ;;
7086                         esac
7087                         ;;
7088                 esac
7089         done
7090
7091         case "$dflt" in
7092         ''|' ') dflt='none' ;;
7093         esac
7094
7095     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
7096     . ./myread
7097     case "$ans" in
7098     none) lddlflags=' ' ;;
7099     *) lddlflags="$ans" ;;
7100     esac
7101
7102         cat <<EOM
7103
7104 Some systems may require passing special flags to $cc to indicate that
7105 the resulting executable will use dynamic linking.  To use no flags,
7106 say "none".
7107
7108 EOM
7109     case "$ccdlflags" in
7110     '') case "$osname" in
7111                 hpux)   dflt='-Wl,-E' ;;
7112                 linux)  dflt='-rdynamic' ;;
7113                 next)   dflt='none' ;;
7114                 sunos)  dflt='none' ;;
7115                 *)      dflt='none' ;;
7116             esac ;;
7117     ' ')  dflt='none' ;;
7118     *)  dflt="$ccdlflags" ;;
7119     esac
7120     rp="Any special flags to pass to $cc to use dynamic linking?"
7121     . ./myread
7122     case "$ans" in
7123     none) ccdlflags=' ' ;;
7124     *) ccdlflags="$ans" ;;
7125     esac
7126     ;;
7127 *)  usedl="$undef"
7128         ld='ld'
7129     dlsrc='dl_none.xs'
7130     lddlflags=''
7131     ccdlflags=''
7132     ;;
7133 esac
7134
7135 also=''
7136 case "$usedl" in
7137 $undef)
7138         # No dynamic loading being used, so don't bother even to prompt.
7139         useshrplib='false'
7140         ;;
7141 *)      case "$useshrplib" in
7142         '')     case "$osname" in
7143                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
7144                         dflt=y
7145                         also='Building a shared libperl is required for dynamic loading to work on your system.'
7146                         ;;
7147                 next*)
7148                         case "$osvers" in
7149                         4*)     dflt=y
7150                                 also='Building a shared libperl is needed for MAB support.'
7151                                 ;;
7152                         *)      dflt=n
7153                                 ;;
7154                         esac
7155                         ;;
7156                 *)      dflt=n
7157                         ;;
7158                 esac
7159                 ;;
7160         $define|true|[Yy]*)
7161                 dflt=y
7162                 ;;
7163         *)      dflt=n
7164                 ;;
7165         esac
7166         $cat << EOM
7167
7168 The perl executable is normally obtained by linking perlmain.c with
7169 libperl${_a}, any static extensions (usually just DynaLoader), and
7170 any other libraries needed on this system (such as -lm, etc.).  Since
7171 your system supports dynamic loading, it is probably possible to build
7172 a shared libperl.$so.  If you will have more than one executable linked
7173 to libperl.$so, this will significantly reduce the size of each
7174 executable, but it may have a noticeable affect on performance.  The
7175 default is probably sensible for your system.
7176 $also
7177
7178 EOM
7179         rp="Build a shared libperl.$so (y/n)"
7180         . ./myread
7181         case "$ans" in
7182         true|$define|[Yy]*)
7183                 useshrplib='true'  ;;
7184         *)      useshrplib='false' ;;
7185         esac
7186         ;;
7187 esac
7188
7189 case "$useshrplib" in
7190 true)
7191         case "$libperl" in
7192         '')
7193                 # Figure out a good name for libperl.so.  Since it gets stored in
7194                 # a version-specific architecture-dependent library, the version
7195                 # number isn't really that important, except for making cc/ld happy.
7196                 #
7197                 # A name such as libperl.so.3.1
7198                 majmin="libperl.$so.$patchlevel.$subversion"
7199                 # A name such as libperl.so.301
7200                 majonly=`echo $patchlevel $subversion |
7201                         $awk '{printf "%d%02d", $1, $2}'`
7202                 majonly=libperl.$so.$majonly
7203                 # I'd prefer to keep the os-specific stuff here to a minimum, and
7204                 # rely on figuring it out from the naming of libc.
7205                 case "${osname}${osvers}" in
7206                 next4*)
7207                         dflt=libperl.5.$so
7208                         # XXX How handle the --version stuff for MAB?
7209                         ;;
7210                 linux*)  # ld won't link with a bare -lperl otherwise.
7211                         dflt=libperl.$so
7212                         ;;
7213                 cygwin*) # include version
7214                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
7215                         ;;
7216                 *)      # Try to guess based on whether libc has major.minor.
7217                         case "$libc" in
7218                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
7219                         *libc.$so.[0-9]*) dflt=$majonly ;;
7220                         *)      dflt=libperl.$so ;;
7221                         esac
7222                         ;;
7223                 esac
7224                 ;;
7225         *)      dflt=$libperl
7226                 ;;
7227         esac
7228         cat << EOM
7229
7230 I need to select a good name for the shared libperl.  If your system uses
7231 library names with major and minor numbers, then you might want something
7232 like $majmin.  Alternatively, if your system uses a single version
7233 number for shared libraries, then you might want to use $majonly.
7234 Or, your system might be quite happy with a simple libperl.$so.
7235
7236 Since the shared libperl will get installed into a version-specific
7237 architecture-dependent directory, the version number of the shared perl
7238 library probably isn't important, so the default should be o.k.
7239
7240 EOM
7241         rp='What name do you want to give to the shared libperl?'
7242         . ./myread
7243         libperl=$ans
7244         echo "Ok, I'll use $libperl"
7245         ;;
7246 *)
7247         libperl="libperl${_a}"
7248         ;;
7249 esac
7250
7251 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
7252 case "$shrpdir" in
7253 '') ;;
7254 *)      $cat >&4 <<EOM
7255 WARNING:  Use of the shrpdir variable for the installation location of
7256 the shared $libperl is not supported.  It was never documented and
7257 will not work in this version.  Let me (perlbug@perl.org)
7258 know of any problems this may cause.
7259
7260 EOM
7261         case "$shrpdir" in
7262         "$archlibexp/CORE")
7263                 $cat >&4 <<EOM
7264 But your current setting of $shrpdir is
7265 the default anyway, so it's harmless.
7266 EOM
7267                 ;;
7268         *)
7269                 $cat >&4 <<EOM
7270 Further, your current attempted setting of $shrpdir
7271 conflicts with the value of $archlibexp/CORE
7272 that installperl will use.
7273 EOM
7274                 ;;
7275         esac
7276         ;;
7277 esac
7278
7279 # How will the perl executable find the installed shared $libperl?
7280 # Add $xxx to ccdlflags.
7281 # If we can't figure out a command-line option, use $shrpenv to
7282 # set env LD_RUN_PATH.  The main perl makefile uses this.
7283 shrpdir=$archlibexp/CORE
7284 xxx=''
7285 tmp_shrpenv=''
7286 if "$useshrplib"; then
7287     case "$osname" in 
7288         aix)
7289                 # We'll set it in Makefile.SH...
7290                 ;;
7291         solaris|netbsd)
7292                 xxx="-R $shrpdir"
7293                 ;;
7294         freebsd)
7295                 xxx="-Wl,-R$shrpdir"
7296                 ;;
7297         linux|irix*|dec_osf)
7298                 xxx="-Wl,-rpath,$shrpdir"
7299                 ;;
7300         next)
7301                 # next doesn't like the default...
7302                 ;;
7303         beos)
7304                 # beos doesn't like the default, either.
7305                 ;;
7306         hpux*)
7307                 # hpux doesn't like the default, either.
7308                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
7309                 ;;
7310         *)
7311                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
7312                 ;;
7313         esac
7314         case "$xxx" in
7315         '') ;;
7316         *)      
7317                 # Only add $xxx if it isn't already in ccdlflags.
7318                 case " $ccdlflags " in
7319                 *" $xxx "*)     ;;
7320                 *)      ccdlflags="$ccdlflags $xxx"
7321                         cat <<EOM >&4
7322
7323 Adding $xxx to the flags
7324 passed to $ld so that the perl executable will find the 
7325 installed shared $libperl.
7326
7327 EOM
7328                         ;;
7329                 esac
7330                 ;;
7331         esac
7332 fi
7333 # Fix ccdlflags in AIX for building external extensions.
7334 # (For building Perl itself bare -bE:perl.exp is needed,
7335 #  Makefile.SH takes care of this.)
7336 case "$osname" in
7337 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
7338 esac
7339 # Respect a hint or command-line value.
7340 case "$shrpenv" in
7341 '') shrpenv="$tmp_shrpenv" ;;
7342 esac
7343 case "$ldlibpthname" in
7344 '')     ldlibpthname=LD_LIBRARY_PATH ;;
7345 none)   ldlibpthname='' ;;
7346 esac
7347
7348 : determine where manual pages are on this system
7349 echo " "
7350 case "$sysman" in
7351 '') 
7352         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
7353         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
7354         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
7355         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
7356         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
7357         sysman=`./loc . /usr/man/man1 $syspath`
7358         ;;
7359 esac
7360 if $test -d "$sysman"; then
7361         echo "System manual is in $sysman." >&4
7362 else
7363         echo "Could not find manual pages in source form." >&4
7364 fi
7365
7366 : determine where manual pages go
7367 set man1dir man1dir none
7368 eval $prefixit
7369 $cat <<EOM
7370
7371 $spackage has manual pages available in source form.
7372 EOM
7373 case "$nroff" in
7374 nroff)
7375         echo "However, you don't have nroff, so they're probably useless to you."
7376         case "$man1dir" in
7377         '') man1dir="none";;
7378         esac;;
7379 esac
7380 echo "If you don't want the manual sources installed, answer 'none'."
7381 case "$man1dir" in
7382 ' ') dflt=none
7383         ;;
7384 '')
7385         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
7386         lookpath="$lookpath $prefixexp/man/p_man/man1"
7387         lookpath="$lookpath $prefixexp/man/u_man/man1"
7388         lookpath="$lookpath $prefixexp/man/man.1"
7389         case "$sysman" in
7390         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
7391         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
7392         esac
7393         set dflt
7394         eval $prefixup
7395         ;;
7396 *)  dflt="$man1dir"
7397         ;;
7398 esac
7399 echo " "
7400 fn=dn+~
7401 rp="Where do the main $spackage manual pages (source) go?"
7402 . ./getfile
7403 if $test "X$man1direxp" != "X$ansexp"; then
7404         installman1dir=''
7405 fi
7406 man1dir="$ans"
7407 man1direxp="$ansexp"
7408 case "$man1dir" in
7409 '')     man1dir=' '
7410         installman1dir='';;
7411 esac
7412
7413 : Change installation prefix, if necessary.
7414 if $test X"$prefix" != X"$installprefix"; then
7415         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
7416 else
7417         installman1dir="$man1direxp"
7418 fi
7419
7420 : What suffix to use on installed man pages
7421
7422 case "$man1dir" in
7423 ' ')
7424         man1ext='0'
7425         ;;
7426 *)
7427         rp="What suffix should be used for the main $spackage man pages?"
7428         case "$man1ext" in
7429         '')     case "$man1dir" in
7430                 *1)  dflt=1 ;;
7431                 *1p) dflt=1p ;;
7432                 *1pm) dflt=1pm ;;
7433                 *l) dflt=l;;
7434                 *n) dflt=n;;
7435                 *o) dflt=o;;
7436                 *p) dflt=p;;
7437                 *C) dflt=C;;
7438                 *L) dflt=L;;
7439                 *L1) dflt=L1;;
7440                 *) dflt=1;;
7441                 esac
7442                 ;;
7443         *)      dflt="$man1ext";;
7444         esac
7445         . ./myread
7446         man1ext="$ans"
7447         ;;
7448 esac
7449
7450 : see if we can have long filenames
7451 echo " "
7452 first=123456789abcdef
7453 $rm -f $first
7454 if (echo hi >$first) 2>/dev/null; then
7455         if $test -f 123456789abcde; then
7456                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
7457                 val="$undef"
7458         else
7459                 echo 'You can have filenames longer than 14 characters.'>&4
7460                 val="$define"
7461         fi
7462 else
7463         $cat <<'EOM'
7464 You can't have filenames longer than 14 chars.
7465 You can't even think about them!
7466 EOM
7467         val="$undef"
7468 fi 
7469 set d_flexfnam
7470 eval $setvar
7471 $rm -rf 123456789abcde*
7472
7473 : determine where library module manual pages go
7474 set man3dir man3dir none
7475 eval $prefixit
7476 $cat <<EOM
7477
7478 $spackage has manual pages for many of the library modules.
7479 EOM
7480
7481 case "$nroff" in
7482 nroff)
7483         $cat <<'EOM'
7484 However, you don't have nroff, so they're probably useless to you.
7485 EOM
7486         case "$man3dir" in
7487         '') man3dir="none";;
7488         esac;;
7489 esac
7490
7491 case "$d_flexfnam" in
7492 undef)
7493         $cat <<'EOM'
7494 However, your system can't handle the long file names like File::Basename.3. 
7495 EOM
7496         case "$man3dir" in
7497         '') man3dir="none";;
7498         esac;;
7499 esac
7500
7501 echo "If you don't want the manual sources installed, answer 'none'."
7502 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7503 case "$man3dir" in
7504 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
7505         if $test -d "$privlib/man/man3"; then
7506                 cat <<EOM >&4
7507
7508 WARNING:  Previous versions of perl installed man3 pages into
7509 $privlib/man/man3.  This version will suggest a 
7510 new default of $dflt.  
7511 EOM
7512                 tdflt=$dflt
7513                 dflt='n'
7514                 rp='Do you wish to preserve the old behavior?(y/n)'
7515                 . ./myread
7516                 case "$ans" in
7517                 y*) dflt="$privlib/man/man3" ;;
7518                 *)  dflt=$tdflt ;;
7519                 esac
7520     fi
7521         ;;
7522 *)      dflt="$man3dir" ;;
7523 esac
7524 case "$dflt" in
7525 ' ') dflt=none ;;
7526 esac
7527 echo " "
7528 fn=dn+~
7529 rp="Where do the $package library man pages (source) go?"
7530 . ./getfile
7531 man3dir="$ans"
7532 man3direxp="$ansexp"
7533 case "$man3dir" in
7534 '')     man3dir=' '
7535         installman3dir='';;
7536 esac
7537
7538 : Change installation prefix, if necessary.
7539 if $test X"$prefix" != X"$installprefix"; then
7540         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
7541 else
7542         installman3dir="$man3direxp"
7543 fi
7544
7545 : What suffix to use on installed man pages
7546 case "$man3dir" in
7547 ' ')
7548         man3ext='0'
7549         ;;
7550 *)
7551         rp="What suffix should be used for the $package library man pages?"
7552         case "$man3ext" in
7553         '')     case "$man3dir" in
7554                 *3)  dflt=3 ;;
7555                 *3p) dflt=3p ;;
7556                 *3pm) dflt=3pm ;;
7557                 *l) dflt=l;;
7558                 *n) dflt=n;;
7559                 *o) dflt=o;;
7560                 *p) dflt=p;;
7561                 *C) dflt=C;;
7562                 *L) dflt=L;;
7563                 *L3) dflt=L3;;
7564                 *) dflt=3;;
7565                 esac
7566                 ;;
7567         *)      dflt="$man3ext";;
7568         esac
7569         . ./myread
7570         man3ext="$ans"
7571         ;;
7572 esac
7573
7574 : see if we have to deal with yellow pages, now NIS.
7575 if $test -d /usr/etc/yp || $test -d /etc/yp; then
7576         if $test -f /usr/etc/nibindd; then
7577                 echo " "
7578                 echo "I'm fairly confident you're on a NeXT."
7579                 echo " "
7580                 rp='Do you get the hosts file via NetInfo?'
7581                 dflt=y
7582                 case "$hostcat" in
7583                 nidump*) ;;
7584                 '') ;;
7585                 *) dflt=n;;
7586                 esac
7587                 . ./myread
7588                 case "$ans" in
7589                 y*) hostcat='nidump hosts .';;
7590                 *)      case "$hostcat" in
7591                         nidump*) hostcat='';;
7592                         esac
7593                         ;;
7594                 esac
7595         fi
7596         case "$hostcat" in
7597         nidump*) ;;
7598         *)
7599                 case "$hostcat" in
7600                 *ypcat*) dflt=y;;
7601                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7602                                 dflt=y
7603                         else
7604                                 dflt=n
7605                         fi;;
7606                 *) dflt=n;;
7607                 esac
7608                 echo " "
7609                 rp='Are you getting the hosts file via yellow pages?'
7610                 . ./myread
7611                 case "$ans" in
7612                 y*) hostcat='ypcat hosts';;
7613                 *) hostcat='cat /etc/hosts';;
7614                 esac
7615                 ;;
7616         esac
7617 fi
7618 case "$hostcat" in
7619 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
7620 esac
7621 case "$groupcat" in
7622 '') test -f /etc/group && groupcat='cat /etc/group';;
7623 esac
7624 case "$passcat" in
7625 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
7626 esac
7627
7628 : now get the host name
7629 echo " "
7630 echo "Figuring out host name..." >&4
7631 case "$myhostname" in
7632 '') cont=true
7633         echo 'Maybe "hostname" will work...'
7634         if tans=`sh -c hostname 2>&1` ; then
7635                 myhostname=$tans
7636                 phostname=hostname
7637                 cont=''
7638         fi
7639         ;;
7640 *) cont='';;
7641 esac
7642 if $test "$cont"; then
7643         if ./xenix; then
7644                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
7645                 if tans=`cat /etc/systemid 2>&1` ; then
7646                         myhostname=$tans
7647                         phostname='cat /etc/systemid'
7648                         echo "Whadyaknow.  Xenix always was a bit strange..."
7649                         cont=''
7650                 fi
7651         elif $test -r /etc/systemid; then
7652                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
7653         fi
7654 fi
7655 if $test "$cont"; then
7656         echo 'No, maybe "uuname -l" will work...'
7657         if tans=`sh -c 'uuname -l' 2>&1` ; then
7658                 myhostname=$tans
7659                 phostname='uuname -l'
7660         else
7661                 echo 'Strange.  Maybe "uname -n" will work...'
7662                 if tans=`sh -c 'uname -n' 2>&1` ; then
7663                         myhostname=$tans
7664                         phostname='uname -n'
7665                 else
7666                         echo 'Oh well, maybe I can mine it out of whoami.h...'
7667                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
7668                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
7669                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
7670                         else
7671                                 case "$myhostname" in
7672                                 '') echo "Does this machine have an identity crisis or something?"
7673                                         phostname='';;
7674                                 *)
7675                                         echo "Well, you said $myhostname before..."
7676                                         phostname='echo $myhostname';;
7677                                 esac
7678                         fi
7679                 fi
7680         fi
7681 fi
7682 : you do not want to know about this
7683 set $myhostname
7684 myhostname=$1
7685
7686 : verify guess
7687 if $test "$myhostname" ; then
7688         dflt=y
7689         rp='Your host name appears to be "'$myhostname'".'" Right?"
7690         . ./myread
7691         case "$ans" in
7692         y*) ;;
7693         *) myhostname='';;
7694         esac
7695 fi
7696
7697 : bad guess or no guess
7698 while $test "X$myhostname" = X ; do
7699         dflt=''
7700         rp="Please type the (one word) name of your host:"
7701         . ./myread
7702         myhostname="$ans"
7703 done
7704
7705 : translate upper to lower if necessary
7706 case "$myhostname" in
7707 *[A-Z]*)
7708         echo "(Normalizing case in your host name)"
7709         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
7710         ;;
7711 esac
7712
7713 case "$myhostname" in
7714 *.*)
7715         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
7716         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
7717         echo "(Trimming domain name from host name--host name is now $myhostname)"
7718         ;;
7719 *) case "$mydomain" in
7720         '')
7721                 {
7722                         test "X$hostcat" = "Xypcat hosts" &&
7723                         ypmatch "$myhostname" hosts 2>/dev/null |\
7724                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
7725                         $test -s hosts
7726                 } || {
7727                         test "X$hostcat" != "X" &&
7728                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
7729                                         /[       ]$myhostname[  . ]/p" > hosts
7730                 }
7731                 tmp_re="[       . ]"
7732                 if $test -f hosts; then
7733                         $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
7734                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
7735                         dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
7736                                 hosts | $sort | $uniq | \
7737                                 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
7738                         case `$echo X$dflt` in
7739                         X*\ *)  echo "(Several hosts in the database matched hostname)"
7740                                 dflt=.
7741                                 ;;
7742                         X.) echo "(You do not have fully-qualified names in the hosts database)"
7743                                 ;;
7744                         esac
7745                 else
7746                         echo "(I cannot locate a hosts database anywhere)"
7747                         dflt=.
7748                 fi
7749                 case "$dflt" in
7750                 .)
7751                         tans=`./loc resolv.conf X /etc /usr/etc`
7752                         if $test -f "$tans"; then
7753                                 echo "(Attempting domain name extraction from $tans)"
7754                                 dflt=.`$sed -n -e 's/   / /g' \
7755                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
7756                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7757                                 case "$dflt" in
7758                                 .) dflt=.`$sed -n -e 's/        / /g' \
7759                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
7760                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7761                                         ;;
7762                                 esac
7763                         fi
7764                         ;;
7765                 esac
7766                 case "$dflt" in
7767                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
7768                         dflt=.`sh -c domainname 2>/dev/null`
7769                         case "$dflt" in
7770                         '') dflt='.';;
7771                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
7772                         esac
7773                         ;;
7774                 esac
7775                 case "$dflt$osname" in
7776                 .os390) echo "(Attempting domain name extraction from //'SYS1.TCPPARMS(TCPDATA)')"
7777                         dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "//'SYS1.TCPPARMS(TCPDATA)'" 2>/dev/null`
7778                         ;;
7779                 esac
7780                 case "$dflt" in
7781                 .) echo "(Lost all hope -- silly guess then)"
7782                         dflt='.uucp'
7783                         ;;
7784                 esac
7785                 $rm -f hosts
7786                 ;;
7787         *) dflt="$mydomain";;
7788         esac;;
7789 esac
7790 echo " "
7791 rp="What is your domain name?"
7792 . ./myread
7793 tans="$ans"
7794 case "$ans" in
7795 '') ;;
7796 .*) ;;
7797 *) tans=".$tans";;
7798 esac
7799 mydomain="$tans"
7800
7801 : translate upper to lower if necessary
7802 case "$mydomain" in
7803 *[A-Z]*)
7804         echo "(Normalizing case in your domain name)"
7805         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
7806         ;;
7807 esac
7808
7809 : a little sanity check here
7810 case "$phostname" in
7811 '') ;;
7812 *)
7813         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
7814         $myhostname$mydomain|$myhostname) ;;
7815         *)
7816                 case "$phostname" in
7817                 sed*)
7818                         echo "(That doesn't agree with your whoami.h file, by the way.)"
7819                         ;;
7820                 *)
7821                         echo "(That doesn't agree with your $phostname command, by the way.)"
7822                         ;;
7823                 esac
7824         ;;
7825         esac
7826         ;;
7827 esac
7828
7829 $cat <<EOM
7830
7831 I need to get your e-mail address in Internet format if possible, i.e.
7832 something like user@host.domain. Please answer accurately since I have
7833 no easy means to double check it. The default value provided below
7834 is most probably close to reality but may not be valid from outside
7835 your organization...
7836
7837 EOM
7838 cont=x
7839 while test "$cont"; do
7840         case "$cf_email" in
7841         '') dflt="$cf_by@$myhostname$mydomain";;
7842         *) dflt="$cf_email";;
7843         esac
7844         rp='What is your e-mail address?'
7845         . ./myread
7846         cf_email="$ans"
7847         case "$cf_email" in
7848         *@*.*) cont='' ;;
7849         *)
7850                 rp='Address does not look like an Internet one.  Use it anyway?'
7851                 case "$fastread" in
7852                 yes) dflt=y ;;
7853                 *) dflt=n ;;
7854                 esac
7855                 . ./myread
7856                 case "$ans" in
7857                 y*) cont='' ;;
7858                 *) echo " " ;;
7859                 esac
7860                 ;;
7861         esac
7862 done
7863
7864 $cat <<EOM
7865
7866 If you or somebody else will be maintaining perl at your site, please
7867 fill in the correct e-mail address here so that they may be contacted
7868 if necessary. Currently, the "perlbug" program included with perl
7869 will send mail to this address in addition to perlbug@perl.org. You may
7870 enter "none" for no administrator.
7871
7872 EOM
7873 case "$perladmin" in
7874 '') dflt="$cf_email";;
7875 *) dflt="$perladmin";;
7876 esac
7877 rp='Perl administrator e-mail address'
7878 . ./myread
7879 perladmin="$ans"
7880
7881 : determine whether to only install version-specific parts.
7882 echo " "
7883 $cat <<EOM
7884 Do you want to install only the version-specific parts of the perl
7885 distribution?  Usually you do *not* want to do this.
7886 EOM
7887 case "$versiononly" in
7888 "$define"|[Yy]*|true) dflt='y' ;;
7889 *) dflt='n';
7890 esac
7891 rp="Do you want to install only the version-specific parts of perl?"
7892 . ./myread
7893 case "$ans" in
7894 [yY]*)  val="$define";;
7895 *)      val="$undef" ;;
7896 esac
7897 set versiononly
7898 eval $setvar
7899
7900 : figure out how to guarantee perl startup
7901 case "$startperl" in
7902 '')
7903         case "$sharpbang" in
7904         *!)
7905                 $cat <<EOH
7906
7907 I can use the #! construct to start perl on your system. This will
7908 make startup of perl scripts faster, but may cause problems if you
7909 want to share those scripts and perl is not in a standard place
7910 ($binexp/perl) on all your platforms. The alternative is to force
7911 a shell by starting the script with a single ':' character.
7912
7913 EOH
7914                 case "$versiononly" in
7915                 "$define")      dflt="$binexp/perl$version";;  
7916                 *)              dflt="$binexp/perl";;
7917                 esac
7918                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
7919                 . ./myread
7920                 case "$ans" in
7921                 none)   startperl=": # use perl";;
7922                 *)      startperl="#!$ans"
7923                         if $test 30 -lt `echo "$ans" | wc -c`; then
7924                                 $cat >&4 <<EOM
7925
7926 WARNING:  Some systems limit the #! command to 32 characters.
7927 If you experience difficulty running Perl scripts with #!, try
7928 installing Perl in a directory with a shorter pathname.
7929
7930 EOM
7931                         fi ;;
7932                 esac
7933                 ;;
7934         *) startperl=": # use perl"
7935                 ;;
7936         esac
7937         ;;
7938 esac
7939 echo "I'll use $startperl to start perl scripts."
7940
7941 : figure best path for perl in scripts
7942 case "$perlpath" in
7943 '')
7944         perlpath="$binexp/perl"
7945         case "$startperl" in
7946         *!*) ;;
7947         *)
7948                 $cat <<EOH
7949
7950 I will use the "eval 'exec'" idiom to start Perl on your system.
7951 I can use the full path of your Perl binary for this purpose, but
7952 doing so may cause problems if you want to share those scripts and
7953 Perl is not always in a standard place ($binexp/perl).
7954
7955 EOH
7956                 dflt="$binexp/perl"
7957                 rp="What path shall I use in \"eval 'exec'\"?"
7958                 . ./myread
7959                 perlpath="$ans"
7960                 ;;
7961         esac
7962         ;;
7963 esac
7964 case "$startperl" in
7965 *!*)    ;;
7966 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
7967 esac
7968
7969 : determine where public executable scripts go
7970 set scriptdir scriptdir
7971 eval $prefixit
7972 case "$scriptdir" in
7973 '')
7974         dflt="$bin"
7975         : guess some guesses
7976         $test -d /usr/share/scripts && dflt=/usr/share/scripts
7977         $test -d /usr/share/bin     && dflt=/usr/share/bin
7978         $test -d /usr/local/script  && dflt=/usr/local/script
7979         $test -d /usr/local/scripts && dflt=/usr/local/scripts
7980         $test -d $prefixexp/script  && dflt=$prefixexp/script
7981         set dflt
7982         eval $prefixup
7983         ;;
7984 *)  dflt="$scriptdir"
7985         ;;
7986 esac
7987 $cat <<EOM
7988  
7989 Some installations have a separate directory just for executable scripts so
7990 that they can mount it across multiple architectures but keep the scripts in
7991 one spot.  You might, for example, have a subdirectory of /usr/share for this.
7992 Or you might just lump your scripts in with all your other executables.
7993  
7994 EOM
7995 fn=d~
7996 rp='Where do you keep publicly executable scripts?'
7997 . ./getfile
7998 if $test "X$ansexp" != "X$scriptdirexp"; then
7999         installscript=''
8000 fi
8001 scriptdir="$ans"
8002 scriptdirexp="$ansexp"
8003 : Change installation prefix, if necessary.
8004 if $test X"$prefix" != X"$installprefix"; then
8005         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
8006 else
8007         installscript="$scriptdirexp"
8008 fi
8009
8010 : determine where add-on public executables go
8011 case "$sitebin" in
8012 '')     dflt=$siteprefix/bin ;;
8013 *)      dflt=$sitebin ;;
8014 esac
8015 fn=d~
8016 rp='Pathname where the add-on public executables should be installed?'
8017 . ./getfile
8018 sitebin="$ans"
8019 sitebinexp="$ansexp"
8020 : Change installation prefix, if necessary.
8021 if $test X"$prefix" != X"$installprefix"; then
8022         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
8023 else
8024         installsitebin="$sitebinexp"
8025 fi
8026
8027 : define an is-a-typedef? function
8028 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8029 case "$inclist" in
8030 "") inclist="sys/types.h";;
8031 esac;
8032 eval "varval=\$$var";
8033 case "$varval" in
8034 "")
8035         $rm -f temp.c;
8036         for inc in $inclist; do
8037                 echo "#include <$inc>" >>temp.c;
8038         done;
8039         echo "#ifdef $type" >> temp.c;
8040         echo "printf(\"We have $type\");" >> temp.c;
8041         echo "#endif" >> temp.c;
8042         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8043         if $contains $type temp.E >/dev/null 2>&1; then
8044                 eval "$var=\$type";
8045         else
8046                 eval "$var=\$def";
8047         fi;
8048         $rm -f temp.?;;
8049 *) eval "$var=\$varval";;
8050 esac'
8051
8052 : define an is-a-typedef? function that prompts if the type is not available.
8053 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8054 case "$inclist" in
8055 "") inclist="sys/types.h";;
8056 esac;
8057 eval "varval=\$$var";
8058 case "$varval" in
8059 "")
8060         $rm -f temp.c;
8061         for inc in $inclist; do
8062                 echo "#include <$inc>" >>temp.c;
8063         done;
8064         echo "#ifdef $type" >> temp.c;
8065         echo "printf(\"We have $type\");" >> temp.c;
8066         echo "#endif" >> temp.c;
8067         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8068         echo " " ;
8069         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
8070         if $contains $type temp.E >/dev/null 2>&1; then
8071                 echo "$type found." >&4;
8072                 eval "$var=\$type";
8073         else
8074                 echo "$type NOT found." >&4;
8075                 dflt="$def";
8076                 . ./myread ;
8077                 eval "$var=\$ans";
8078         fi;
8079         $rm -f temp.?;;
8080 *) eval "$var=\$varval";;
8081 esac'
8082
8083 : see what type lseek is declared as in the kernel
8084 rp="What is the type used for lseek's offset on this system?"
8085 set off_t lseektype long stdio.h sys/types.h
8086 eval $typedef_ask
8087
8088 echo " "
8089 echo "Checking to see how big your file offsets are..." >&4
8090 $cat >try.c <<EOCP
8091 #include <sys/types.h>
8092 #include <stdio.h>
8093 int main()
8094 {
8095     printf("%d\n", (int)sizeof($lseektype));
8096     return(0); 
8097 }
8098 EOCP
8099 set try
8100 if eval $compile_ok; then
8101         lseeksize=`$run ./try`
8102         echo "Your file offsets are $lseeksize bytes long."
8103 else
8104         dflt=$longsize
8105         echo " "
8106         echo "(I can't seem to compile the test program.  Guessing...)"
8107         rp="What is the size of your file offsets (in bytes)?"
8108         . ./myread
8109         lseeksize="$ans"
8110 fi
8111 $rm -f try.c try
8112
8113 : see what type file positions are declared as in the library
8114 rp="What is the type for file position used by fsetpos()?"
8115 set fpos_t fpostype long stdio.h sys/types.h
8116 eval $typedef_ask
8117
8118 echo " "
8119 case "$fpostype" in
8120 *_t) zzz="$fpostype"    ;;
8121 *)   zzz="fpos_t"       ;;
8122 esac
8123 echo "Checking the size of $zzz..." >&4 
8124 cat > try.c <<EOCP
8125 #include <sys/types.h>
8126 #include <stdio.h>
8127 int main() {
8128     printf("%d\n", (int)sizeof($fpostype));
8129     exit(0);
8130 }
8131 EOCP
8132 set try
8133 if eval $compile_ok; then
8134         yyy=`$run ./try`
8135         case "$yyy" in
8136         '')     fpossize=4
8137                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8138                 ;;
8139         *)      fpossize=$yyy
8140                 echo "Your $zzz is $fpossize bytes long."
8141                 ;;
8142         esac
8143 else
8144         dflt="$longsize"
8145         echo " " >&4
8146         echo "(I can't compile the test program.  Guessing...)" >&4
8147         rp="What is the size of your file positions (in bytes)?"
8148         . ./myread
8149         fpossize="$ans"
8150 fi
8151
8152
8153
8154 # Backward compatibility (uselfs is deprecated).
8155 case "$uselfs" in
8156 "$define"|true|[yY]*)
8157         cat <<EOM >&4
8158
8159 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
8160 EOM
8161         uselargefiles="$define"
8162         ;;
8163 esac                          
8164
8165 case "$lseeksize:$fpossize" in
8166 8:8) cat <<EOM
8167
8168 You can have files larger than 2 gigabytes.
8169 EOM
8170    val="$define" ;;
8171 *)    case "$uselargefiles" in
8172    "$undef"|false|[nN]*) dflt='n' ;;
8173    *)   dflt='y' ;;
8174    esac
8175    cat <<EOM
8176
8177 Perl can be built to understand large files (files larger than 2 gigabytes)
8178 on some systems.  To do so, Configure can be run with -Duselargefiles.
8179
8180 If this doesn't make any sense to you, just accept the default '$dflt'.
8181 EOM
8182    rp='Try to understand large files, if available?'
8183    . ./myread
8184    case "$ans" in
8185    y|Y)         val="$define" ;;
8186    *)           val="$undef"  ;;
8187    esac
8188    ;;
8189 esac
8190 set uselargefiles
8191 eval $setvar
8192 case "$uselargefiles" in
8193 "$define")
8194 : Look for a hint-file generated 'call-back-unit'.  If the
8195 : user has specified that a large files perl is to be built,
8196 : we may need to set or change some other defaults.
8197         if $test -f uselargefiles.cbu; then
8198                 echo "Your platform has some specific hints for large file builds, using them..."
8199                 . ./uselargefiles.cbu
8200                 echo " "
8201                 echo "Rechecking to see how big your file offsets are..." >&4
8202                 $cat >try.c <<EOCP
8203 #include <sys/types.h>
8204 #include <stdio.h>
8205 int main()
8206 {
8207     printf("%d\n", (int)sizeof($lseektype));
8208     return(0); 
8209 }
8210 EOCP
8211                 set try
8212                 if eval $compile_ok; then
8213                         lseeksize=`$run ./try`
8214                         $echo "Your file offsets are now $lseeksize bytes long."
8215                 else
8216                         dflt="$lseeksize"
8217                         echo " "
8218                         echo "(I can't seem to compile the test program.  Guessing...)"
8219                         rp="What is the size of your file offsets (in bytes)?"
8220                         . ./myread
8221                         lseeksize="$ans"
8222                 fi
8223                 case "$fpostype" in
8224                 *_t) zzz="$fpostype"    ;;
8225                 *)   zzz="fpos_t"       ;;
8226                 esac
8227                 $echo $n "Rechecking the size of $zzz...$c" >&4 
8228                 $cat > try.c <<EOCP
8229 #include <sys/types.h>
8230 #include <stdio.h>
8231 int main() {
8232     printf("%d\n", (int)sizeof($fpostype));
8233     exit(0);
8234 }
8235 EOCP
8236                 set try
8237                 if eval $compile_ok; then
8238                         yyy=`$run ./try`
8239                         dflt="$lseeksize"
8240                         case "$yyy" in
8241                         '')     echo " "
8242                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8243                                 ;;
8244                         *)      fpossize=$yyy
8245                                 echo " $fpossize bytes." >&4
8246                                 ;;
8247                         esac
8248                 else
8249                         dflt="$fpossize"
8250                         echo " "
8251                         echo "(I can't compile the test program.  Guessing...)" >&4
8252                         rp="What is the size of your file positions (in bytes)?"
8253                         . ./myread
8254                         fpossize="$ans"
8255                 fi
8256                 $rm -f try.c try
8257         fi
8258         ;;
8259 esac
8260
8261 case "$vendorprefix" in
8262 '')     d_vendorbin="$undef"
8263         vendorbin=''
8264         vendorbinexp=''
8265         ;;
8266 *)      d_vendorbin="$define"
8267         : determine where vendor-supplied executables go.
8268         case "$vendorbin" in
8269         '') dflt=$vendorprefix/bin ;;
8270         *)      dflt="$vendorbin" ;;
8271         esac
8272         fn=d~+
8273         rp='Pathname for the vendor-supplied executables directory?'
8274         . ./getfile
8275         vendorbin="$ans"
8276         vendorbinexp="$ansexp"
8277         ;;
8278 esac
8279 : Change installation prefix, if necessary.
8280 if $test X"$prefix" != X"$installprefix"; then
8281         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
8282 else
8283         installvendorbin="$vendorbinexp"
8284 fi
8285
8286 : see if qgcvt exists
8287 set qgcvt d_qgcvt
8288 eval $inlibc
8289
8290 echo " "
8291
8292 if $test X"$d_longdbl" = X"$define"; then
8293
8294 echo "Checking how to print long doubles..." >&4
8295
8296 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
8297         $cat >try.c <<'EOCP'
8298 #include <sys/types.h>
8299 #include <stdio.h>
8300 int main() {
8301   double d = 123.456;
8302   printf("%.3f\n", d);
8303 }
8304 EOCP
8305         set try
8306         if eval $compile; then
8307                 yyy=`$run ./try`
8308                 case "$yyy" in
8309                 123.456)
8310                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
8311                         sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
8312                         echo "We will use %f."
8313                         ;;
8314                 esac
8315         fi
8316 fi
8317
8318 if $test X"$sPRIfldbl" = X; then
8319         $cat >try.c <<'EOCP'
8320 #include <sys/types.h>
8321 #include <stdio.h>
8322 int main() {
8323   long double d = 123.456;
8324   printf("%.3Lf\n", d);
8325 }
8326 EOCP
8327         set try
8328         if eval $compile; then
8329                 yyy=`$run ./try`
8330                 case "$yyy" in
8331                 123.456)
8332                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
8333                         sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
8334                         echo "We will use %Lf."
8335                         ;;
8336                 esac
8337         fi
8338 fi
8339
8340 if $test X"$sPRIfldbl" = X; then
8341         $cat >try.c <<'EOCP'
8342 #include <sys/types.h>
8343 #include <stdio.h>
8344 int main() {
8345   long double d = 123.456;
8346   printf("%.3llf\n", d);
8347 }
8348 EOCP
8349         set try
8350         if eval $compile; then
8351                 yyy=`$run ./try`
8352                 case "$yyy" in
8353                 123.456)
8354                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
8355                         sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
8356                         echo "We will use %llf."
8357                         ;;
8358                 esac
8359         fi
8360 fi
8361
8362 if $test X"$sPRIfldbl" = X; then
8363         $cat >try.c <<'EOCP'
8364 #include <sys/types.h>
8365 #include <stdio.h>
8366 int main() {
8367   long double d = 123.456;
8368   printf("%.3lf\n", d);
8369 }
8370 EOCP
8371         set try
8372         if eval $compile; then
8373                 yyy=`$run ./try`
8374                 case "$yyy" in
8375                 123.456)
8376                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
8377                         sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
8378                         echo "We will use %lf."
8379                         ;;
8380                 esac
8381         fi
8382 fi
8383
8384 if $test X"$sPRIfldbl" = X; then
8385         echo "Cannot figure out how to print long doubles." >&4
8386 else
8387         sSCNfldbl=$sPRIfldbl    # expect consistency
8388 fi
8389
8390 $rm -f try try.*
8391
8392 fi # d_longdbl
8393
8394 case "$sPRIfldbl" in
8395 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
8396         d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; 
8397         d_SCNfldbl="$undef";
8398         ;;
8399 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
8400         d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; 
8401         d_SCNfldbl="$define";
8402         ;;
8403 esac
8404
8405 : Check how to convert floats to strings.
8406 echo " "
8407 echo "Checking for an efficient way to convert floats to strings."
8408 echo " " > try.c
8409 case "$uselongdouble" in
8410 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
8411 esac
8412 case "$d_longdbl" in
8413 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
8414 esac
8415 case "$d_PRIgldbl" in
8416 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
8417 esac
8418 $cat >>try.c <<EOP
8419 #ifdef TRY_gconvert
8420 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
8421 char *myname = "gconvert";
8422 #endif
8423 #ifdef TRY_gcvt
8424 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
8425 char *myname = "gcvt";
8426 #endif
8427 #ifdef TRY_qgcvt
8428 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
8429 char *myname = "qgcvt";
8430 #define DOUBLETYPE long double
8431 #endif
8432 #ifdef TRY_sprintf
8433 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
8434 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
8435 #else
8436 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
8437 #endif
8438 char *myname = "sprintf";
8439 #endif
8440
8441 #ifndef DOUBLETYPE
8442 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
8443 #define DOUBLETYPE long double
8444 #else
8445 #define DOUBLETYPE double
8446 #endif
8447 #endif
8448
8449 #include <stdio.h>
8450
8451 #define I_STDLIB $i_stdlib
8452 #ifdef I_STDLIB
8453 #include <stdlib.h>
8454 #endif
8455
8456 int
8457 checkit(expect, got)
8458 char *expect;
8459 char *got;
8460 {
8461     if (strcmp(expect, got)) {
8462                 printf("%s oddity:  Expected %s, got %s\n",
8463                         myname, expect, got);
8464                 exit(1);
8465         }
8466 }
8467
8468 int main()
8469
8470         char buf[64]; 
8471         buf[63] = '\0';
8472
8473         /* This must be 1st test on (which?) platform */
8474         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
8475         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
8476         checkit("0.1", buf);
8477
8478         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
8479         checkit("1", buf);
8480
8481         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
8482         checkit("1.1", buf);
8483
8484         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
8485         checkit("1.01", buf);
8486
8487         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
8488         checkit("1.001", buf);
8489
8490         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
8491         checkit("1.0001", buf);
8492
8493         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
8494         checkit("1.00001", buf);
8495
8496         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
8497         checkit("1.000001", buf);
8498
8499         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
8500         checkit("0", buf);
8501
8502         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
8503         checkit("-1", buf);
8504
8505         /* Some Linux gcvt's give 1.e+5 here. */
8506         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
8507         checkit("100000", buf);
8508         
8509         /* Some Linux gcvt's give -1.e+5 here. */
8510         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
8511         checkit("-100000", buf);
8512
8513         Gconvert((DOUBLETYPE)123.456, 8, 0, buf); 
8514         checkit("123.456", buf);
8515
8516         /* Testing of 1e+129 in bigintpm.t must not get extra '.' here. */
8517         Gconvert((DOUBLETYPE)1e30, 8, 0, buf);
8518         if (strlen(buf) > 5)
8519             checkit("1e+030", buf); /* for Microsoft */
8520         else
8521             checkit("1e+30", buf);
8522
8523         exit(0);
8524 }
8525 EOP
8526 case "$d_Gconvert" in
8527 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
8528 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
8529 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
8530 *) xxx_list='gconvert gcvt sprintf' ;;
8531 esac
8532
8533 case "$d_longdbl$uselongdouble$d_PRIgldbl" in
8534 "$define$define$define")
8535     # for long doubles prefer first qgcvt, then sprintf
8536     xxx_list="`echo $xxx_list|sed s/sprintf//`" 
8537     xxx_list="sprintf $xxx_list"
8538     case "$d_qgcvt" in
8539     "$define") xxx_list="qgcvt $xxx_list" ;;
8540     esac
8541     ;;
8542 esac
8543
8544 for xxx_convert in $xxx_list; do
8545         echo "Trying $xxx_convert..."
8546         $rm -f try try$_o
8547         set try -DTRY_$xxx_convert
8548         if eval $compile; then
8549                 echo "$xxx_convert() found." >&4
8550                 if $run ./try; then
8551                         echo "I'll use $xxx_convert to convert floats into a string." >&4
8552                         break;
8553                 else
8554                         echo "...But $xxx_convert didn't work as I expected."
8555                 fi
8556         else
8557                 echo "$xxx_convert NOT found." >&4
8558         fi
8559 done
8560         
8561 case "$xxx_convert" in
8562 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
8563 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
8564 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
8565 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
8566    "$define$define$define")
8567       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
8568    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
8569    esac
8570    ;;  
8571 esac
8572
8573 : see if _fwalk exists
8574 set fwalk d__fwalk
8575 eval $inlibc
8576
8577 : Initialize h_fcntl
8578 h_fcntl=false
8579
8580 : Initialize h_sysfile
8581 h_sysfile=false
8582
8583 : access call always available on UNIX
8584 set access d_access
8585 eval $inlibc
8586
8587 : locate the flags for 'access()'
8588 case "$d_access" in
8589 "$define")
8590         echo " "
8591         $cat >access.c <<'EOCP'
8592 #include <sys/types.h>
8593 #ifdef I_FCNTL
8594 #include <fcntl.h>
8595 #endif
8596 #ifdef I_SYS_FILE
8597 #include <sys/file.h>
8598 #endif
8599 #ifdef I_UNISTD
8600 #include <unistd.h>
8601 #endif
8602 int main() {
8603         exit(R_OK);
8604 }
8605 EOCP
8606         : check sys/file.h first, no particular reason here
8607         if $test `./findhdr sys/file.h` && \
8608                 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
8609                 h_sysfile=true;
8610                 echo "<sys/file.h> defines the *_OK access constants." >&4
8611         elif $test `./findhdr fcntl.h` && \
8612                 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
8613                 h_fcntl=true;
8614                 echo "<fcntl.h> defines the *_OK access constants." >&4
8615         elif $test `./findhdr unistd.h` && \
8616                 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
8617                 echo "<unistd.h> defines the *_OK access constants." >&4
8618         else
8619                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
8620         fi
8621         ;;
8622 esac
8623 $rm -f access*
8624
8625 : see if accessx exists
8626 set accessx d_accessx
8627 eval $inlibc
8628
8629 : see if alarm exists
8630 set alarm d_alarm
8631 eval $inlibc
8632
8633 : see if atolf exists
8634 set atolf d_atolf
8635 eval $inlibc
8636
8637 : see if atoll exists
8638 set atoll d_atoll
8639 eval $inlibc
8640
8641 : Look for GNU-cc style attribute checking
8642 echo " "
8643 echo "Checking whether your compiler can handle __attribute__ ..." >&4
8644 $cat >attrib.c <<'EOCP'
8645 #include <stdio.h>
8646 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
8647 EOCP
8648 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
8649         if $contains 'warning' attrib.out >/dev/null 2>&1; then
8650                 echo "Your C compiler doesn't fully support __attribute__."
8651                 val="$undef"
8652         else
8653                 echo "Your C compiler supports __attribute__."
8654                 val="$define"
8655         fi
8656 else
8657         echo "Your C compiler doesn't seem to understand __attribute__ at all."
8658         val="$undef"
8659 fi
8660 set d_attribut
8661 eval $setvar
8662 $rm -f attrib*
8663
8664 : see if bcmp exists
8665 set bcmp d_bcmp
8666 eval $inlibc
8667
8668 : see if bcopy exists
8669 set bcopy d_bcopy
8670 eval $inlibc
8671
8672 : see if this is a unistd.h system
8673 set unistd.h i_unistd
8674 eval $inhdr
8675
8676 : see if getpgrp exists
8677 set getpgrp d_getpgrp
8678 eval $inlibc
8679
8680 case "$d_getpgrp" in
8681 "$define")
8682         echo " "
8683         echo "Checking to see which flavor of getpgrp is in use..."
8684         $cat >try.c <<EOP
8685 #$i_unistd I_UNISTD
8686 #include <sys/types.h>
8687 #ifdef I_UNISTD
8688 #  include <unistd.h>
8689 #endif
8690 int main()
8691 {
8692         if (getuid() == 0) {
8693                 printf("(I see you are running Configure as super-user...)\n");
8694                 setuid(1);
8695         }
8696 #ifdef TRY_BSD_PGRP
8697         if (getpgrp(1) == 0)
8698                 exit(0);
8699 #else
8700         if (getpgrp() > 0)
8701                 exit(0);
8702 #endif
8703         exit(1);
8704 }
8705 EOP
8706         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8707                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
8708                 val="$define"
8709         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8710                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
8711                 val="$undef"
8712         else
8713                 echo "I can't seem to compile and run the test program."
8714                 if ./usg; then
8715                         xxx="a USG one, i.e. you use getpgrp()."
8716                 else
8717                         # SVR4 systems can appear rather BSD-ish.
8718                         case "$i_unistd" in
8719                         $undef)
8720                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
8721                                 val="$define"
8722                                 ;;
8723                         $define)
8724                                 xxx="probably a USG one, i.e. you use getpgrp()."
8725                                 val="$undef"
8726                                 ;;
8727                         esac
8728                 fi
8729                 echo "Assuming your getpgrp is $xxx" >&4
8730         fi
8731         ;;
8732 *) val="$undef";;
8733 esac
8734 set d_bsdgetpgrp
8735 eval $setvar
8736 $rm -f try try.*
8737
8738 : see if setpgrp exists
8739 set setpgrp d_setpgrp
8740 eval $inlibc
8741
8742 case "$d_setpgrp" in
8743 "$define")
8744         echo " "
8745         echo "Checking to see which flavor of setpgrp is in use..."
8746         $cat >try.c <<EOP
8747 #$i_unistd I_UNISTD
8748 #include <sys/types.h>
8749 #ifdef I_UNISTD
8750 #  include <unistd.h>
8751 #endif
8752 int main()
8753 {
8754         if (getuid() == 0) {
8755                 printf("(I see you are running Configure as super-user...)\n");
8756                 setuid(1);
8757         }
8758 #ifdef TRY_BSD_PGRP
8759         if (-1 == setpgrp(1, 1))
8760                 exit(0);
8761 #else
8762         if (setpgrp() != -1)
8763                 exit(0);
8764 #endif
8765         exit(1);
8766 }
8767 EOP
8768         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8769                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
8770                 val="$define"
8771         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8772                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
8773                 val="$undef"
8774         else
8775                 echo "(I can't seem to compile and run the test program.)"
8776                 if ./usg; then
8777                         xxx="a USG one, i.e. you use setpgrp()."
8778                 else
8779                         # SVR4 systems can appear rather BSD-ish.
8780                         case "$i_unistd" in
8781                         $undef)
8782                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
8783                                 val="$define"
8784                                 ;;
8785                         $define)
8786                                 xxx="probably a USG one, i.e. you use setpgrp()."
8787                                 val="$undef"
8788                                 ;;
8789                         esac
8790                 fi
8791                 echo "Assuming your setpgrp is $xxx" >&4
8792         fi
8793         ;;
8794 *) val="$undef";;
8795 esac
8796 set d_bsdsetpgrp
8797 eval $setvar
8798 $rm -f try try.*
8799 : see if bzero exists
8800 set bzero d_bzero
8801 eval $inlibc
8802
8803 : see if signal is declared as pointer to function returning int or void
8804 echo " "
8805 xxx=`./findhdr signal.h`
8806 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
8807 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
8808         echo "You have int (*signal())() instead of void." >&4
8809         val="$undef"
8810 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
8811         echo "You have void (*signal())()." >&4
8812         val="$define"
8813 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
8814         echo "You have int (*signal())() instead of void." >&4
8815         val="$undef"
8816 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
8817         echo "You have void (*signal())()." >&4
8818         val="$define"
8819 else
8820         case "$d_voidsig" in
8821         '')
8822         echo "I can't determine whether signal handler returns void or int..." >&4
8823                 dflt=void
8824                 rp="What type does your signal handler return?"
8825                 . ./myread
8826                 case "$ans" in
8827                 v*) val="$define";;
8828                 *) val="$undef";;
8829                 esac;;
8830         "$define")
8831                 echo "As you already told me, signal handler returns void." >&4
8832                 val="$define"
8833                 ;;
8834         *)      echo "As you already told me, signal handler returns int." >&4
8835                 val="$undef"
8836                 ;;
8837         esac
8838 fi
8839 set d_voidsig
8840 eval $setvar
8841 case "$d_voidsig" in
8842 "$define") signal_t="void";;
8843 *) signal_t="int";;
8844 esac
8845 $rm -f $$.tmp
8846
8847 : check for ability to cast large floats to 32-bit ints.
8848 echo " "
8849 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
8850 if $test "$intsize" -ge 4; then
8851         xxx=int
8852 else
8853         xxx=long
8854 fi
8855 $cat >try.c <<EOCP
8856 #include <stdio.h>
8857 #include <sys/types.h>
8858 #include <signal.h>
8859 $signal_t blech(s) int s; { exit(3); }
8860 int main()
8861 {
8862         $xxx i32;
8863         double f, g;
8864         int result = 0;
8865         char str[16];
8866         signal(SIGFPE, blech);
8867
8868         /* Don't let compiler optimize the test away.  Store the number 
8869            in a writable string for gcc to pass to sscanf under HP/UX.
8870         */
8871         sprintf(str, "2147483647");
8872         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
8873         g = 10 * f;
8874         i32  = ($xxx) g;
8875
8876         /* x86 processors will probably give 0x8000 0000, which is a
8877        sign change.  We don't want that.  We want to mimic SPARC
8878            behavior here, which is to preserve the sign and give
8879            back 0x7fff ffff.
8880         */
8881         if (i32 != ($xxx) f)
8882                 result |= 1;
8883         exit(result);
8884 }
8885 EOCP
8886 set try
8887 if eval $compile_ok; then
8888         $run ./try
8889         yyy=$?
8890 else
8891         echo "(I can't seem to compile the test program--assuming it can't)"
8892         yyy=1
8893 fi
8894 case "$yyy" in
8895 0)      val="$define"
8896         echo "Yup, it can."
8897         ;;
8898 *)      val="$undef"
8899         echo "Nope, it can't."
8900         ;;
8901 esac
8902 set d_casti32
8903 eval $setvar
8904 $rm -f try try.*
8905
8906 : check for ability to cast negative floats to unsigned
8907 echo " "
8908 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
8909 $cat >try.c <<EOCP
8910 #include <stdio.h>
8911 #include <sys/types.h>
8912 #include <signal.h>
8913 $signal_t blech(s) int s; { exit(7); }
8914 $signal_t blech_in_list(s) int s; { exit(4); }
8915 unsigned long dummy_long(p) unsigned long p; { return p; }
8916 unsigned int dummy_int(p) unsigned int p; { return p; }
8917 unsigned short dummy_short(p) unsigned short p; { return p; }
8918 int main()
8919 {
8920         double f;
8921         unsigned long along;
8922         unsigned int aint;
8923         unsigned short ashort;
8924         int result = 0;
8925         char str[16];
8926         
8927         /* Frustrate gcc-2.7.2's optimizer which failed this test with
8928            a direct f = -123. assignment.  gcc-2.8.0 reportedly
8929            optimized the whole file away
8930         */
8931         /* Store the number in a writable string for gcc to pass to 
8932            sscanf under HP/UX.
8933         */
8934         sprintf(str, "-123");
8935         sscanf(str, "%lf", &f);  /* f = -123.; */
8936
8937         signal(SIGFPE, blech);
8938         along = (unsigned long)f;
8939         aint = (unsigned int)f;
8940         ashort = (unsigned short)f;
8941         if (along != (unsigned long)-123)
8942                 result |= 1;
8943         if (aint != (unsigned int)-123)
8944                 result |= 1;
8945         if (ashort != (unsigned short)-123)
8946                 result |= 1;
8947         sprintf(str, "1073741824.");
8948         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
8949         f = f + f;
8950         along = 0;
8951         along = (unsigned long)f;
8952         if (along != 0x80000000)
8953                 result |= 2;
8954         f -= 1.;
8955         along = 0;
8956         along = (unsigned long)f;
8957         if (along != 0x7fffffff)
8958                 result |= 1;
8959         f += 2.;
8960         along = 0;
8961         along = (unsigned long)f;
8962         if (along != 0x80000001)
8963                 result |= 2;
8964         if (result)
8965                 exit(result);
8966         signal(SIGFPE, blech_in_list);
8967         sprintf(str, "123.");
8968         sscanf(str, "%lf", &f);  /* f = 123.; */
8969         along = dummy_long((unsigned long)f);
8970         aint = dummy_int((unsigned int)f);
8971         ashort = dummy_short((unsigned short)f);
8972         if (along != (unsigned long)123)
8973                 result |= 4;
8974         if (aint != (unsigned int)123)
8975                 result |= 4;
8976         if (ashort != (unsigned short)123)
8977                 result |= 4;
8978         exit(result);
8979
8980 }
8981 EOCP
8982 set try
8983 if eval $compile_ok; then
8984         $run ./try
8985         castflags=$?
8986 else
8987         echo "(I can't seem to compile the test program--assuming it can't)"
8988         castflags=7
8989 fi
8990 case "$castflags" in
8991 0)      val="$define"
8992         echo "Yup, it can."
8993         ;;
8994 *)      val="$undef"
8995         echo "Nope, it can't."
8996         ;;
8997 esac
8998 set d_castneg
8999 eval $setvar
9000 $rm -f try.*
9001
9002 : see if vprintf exists
9003 echo " "
9004 if set vprintf val -f d_vprintf; eval $csym; $val; then
9005         echo 'vprintf() found.' >&4
9006         val="$define"
9007         $cat >try.c <<'EOF'
9008 #include <varargs.h>
9009
9010 int main() { xxx("foo"); }
9011
9012 xxx(va_alist)
9013 va_dcl
9014 {
9015         va_list args;
9016         char buf[10];
9017
9018         va_start(args);
9019         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
9020 }
9021 EOF
9022         set try
9023         if eval $compile && $run ./try; then
9024                 echo "Your vsprintf() returns (int)." >&4
9025                 val2="$undef"
9026         else
9027                 echo "Your vsprintf() returns (char*)." >&4
9028                 val2="$define"
9029         fi
9030 else
9031         echo 'vprintf() NOT found.' >&4
9032                 val="$undef"
9033                 val2="$undef"
9034 fi
9035 $rm -f try try.*
9036 set d_vprintf
9037 eval $setvar
9038 val=$val2
9039 set d_charvspr
9040 eval $setvar
9041
9042 : see if chown exists
9043 set chown d_chown
9044 eval $inlibc
9045
9046 : see if chroot exists
9047 set chroot d_chroot
9048 eval $inlibc
9049
9050 : see if chsize exists
9051 set chsize d_chsize
9052 eval $inlibc
9053
9054 hasstruct='varname=$1; struct=$2; shift; shift;
9055 while $test $# -ge 2; do
9056         case "$1" in
9057         $define) echo "#include <$2>";;
9058         esac ;
9059     shift 2;
9060 done > try.c;
9061 echo "int main () { struct $struct foo; }" >> try.c;
9062 set try;
9063 if eval $compile; then
9064         val="$define";
9065 else
9066         val="$undef";
9067 fi;
9068 set $varname;
9069 eval $setvar;
9070 $rm -f try.c try.o'
9071
9072 : see if sys/types.h has to be included
9073 set sys/types.h i_systypes
9074 eval $inhdr
9075
9076 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
9077 while $test $# -ge 2; do
9078         case "$1" in
9079         $define) echo "#include <$2>";;
9080         esac ;
9081     shift 2;
9082 done > try.c;
9083 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
9084 set try;
9085 if eval $compile; then
9086         val="$define";
9087 else
9088         val="$undef";
9089 fi;
9090 set $varname;
9091 eval $setvar;
9092 $rm -f try.c try.o'
9093
9094 socketlib=''
9095 sockethdr=''
9096 : see whether socket exists
9097 echo " "
9098 $echo $n "Hmm... $c" >&4
9099 if set socket val -f d_socket; eval $csym; $val; then
9100         echo "Looks like you have Berkeley networking support." >&4
9101         d_socket="$define"
9102         if set setsockopt val -f; eval $csym; $val; then
9103                 d_oldsock="$undef"
9104         else
9105                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
9106                 d_oldsock="$define"
9107         fi
9108 else
9109         if $contains socklib libc.list >/dev/null 2>&1; then
9110                 echo "Looks like you have Berkeley networking support." >&4
9111                 d_socket="$define"
9112                 : we will have to assume that it supports the 4.2 BSD interface
9113                 d_oldsock="$undef"
9114         else
9115                 echo "You don't have Berkeley networking in libc$_a..." >&4
9116                 if test "X$d_socket" = "X$define"; then
9117                    echo "...but you seem to believe that you have sockets." >&4
9118                 else
9119                         for net in net socket
9120                         do
9121                                 if test -f /usr/lib/lib$net$_a; then
9122                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
9123                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
9124                                         if $contains socket libc.list >/dev/null 2>&1; then
9125                                                 d_socket="$define"
9126                                                 socketlib="-l$net"
9127                                                 case "$net" in
9128                                                 net)
9129                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
9130                                                         sockethdr="-I/usr/netinclude"
9131                                                         ;;
9132                                                 esac
9133                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
9134                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
9135                                                         d_oldsock="$undef"
9136                                                 else
9137                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
9138                                                         d_oldsock="$define"
9139                                                 fi
9140                                                 break
9141                                         fi
9142                                 fi
9143                         done
9144                         if test "X$d_socket" != "X$define"; then
9145                            echo "or anywhere else I see." >&4
9146                            d_socket="$undef"
9147                            d_oldsock="$undef"
9148                         fi
9149                 fi
9150         fi
9151 fi
9152
9153 : see if socketpair exists
9154 set socketpair d_sockpair
9155 eval $inlibc
9156
9157
9158 echo " "
9159 echo "Checking the availability of certain socket constants..." >& 4
9160 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
9161         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
9162         $cat >try.c <<EOF
9163 #include <sys/types.h>
9164 #include <sys/socket.h>
9165 int main() {
9166     int i = $ENUM;
9167 }
9168 EOF
9169         val="$undef"
9170         set try; if eval $compile; then
9171                 val="$define"
9172         fi
9173         set d_${enum}; eval $setvar
9174         $rm -f try.c try
9175 done
9176
9177 : see if this is a sys/uio.h system
9178 set sys/uio.h i_sysuio
9179 eval $inhdr
9180
9181
9182 echo " "
9183 echo "Checking to see if your system supports struct cmsghdr..." >&4
9184 set d_cmsghdr_s cmsghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
9185 eval $hasstruct
9186 case "$d_cmsghdr_s" in
9187 "$define")      echo "Yes, it does."   ;;
9188 *)              echo "No, it doesn't." ;;
9189 esac
9190
9191
9192 : check for const keyword
9193 echo " "
9194 echo 'Checking to see if your C compiler knows about "const"...' >&4
9195 $cat >const.c <<'EOCP'
9196 typedef struct spug { int drokk; } spug;
9197 int main()
9198 {
9199         const char *foo;
9200         const spug y;
9201 }
9202 EOCP
9203 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
9204         val="$define"
9205         echo "Yup, it does."
9206 else
9207         val="$undef"
9208         echo "Nope, it doesn't."
9209 fi
9210 set d_const
9211 eval $setvar
9212
9213 : see if crypt exists
9214 echo " "
9215 if set crypt val -f d_crypt; eval $csym; $val; then
9216         echo 'crypt() found.' >&4
9217         val="$define"
9218         cryptlib=''
9219 else
9220         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
9221         if $test -z "$cryptlib"; then
9222                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
9223         else
9224                 cryptlib=-lcrypt
9225         fi
9226         if $test -z "$cryptlib"; then
9227                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
9228         else
9229                 cryptlib=-lcrypt
9230         fi
9231         if $test -z "$cryptlib"; then
9232                 cryptlib=`./loc libcrypt$_a "" $libpth`
9233         else
9234                 cryptlib=-lcrypt
9235         fi
9236         if $test -z "$cryptlib"; then
9237                 echo 'crypt() NOT found.' >&4
9238                 val="$undef"
9239         else
9240                 val="$define"
9241         fi
9242 fi
9243 set d_crypt
9244 eval $setvar
9245
9246 : get csh whereabouts
9247 case "$csh" in
9248 'csh') val="$undef" ;;
9249 *) val="$define" ;;
9250 esac
9251 set d_csh
9252 eval $setvar
9253 : Respect a hint or command line value for full_csh.
9254 case "$full_csh" in
9255 '') full_csh=$csh ;;
9256 esac
9257
9258 : see if cuserid exists
9259 set cuserid d_cuserid
9260 eval $inlibc
9261
9262 : see if this is a limits.h system
9263 set limits.h i_limits
9264 eval $inhdr
9265
9266 : see if this is a float.h system
9267 set float.h i_float
9268 eval $inhdr
9269
9270 : See if number of significant digits in a double precision number is known
9271 echo " "
9272 $cat >dbl_dig.c <<EOM
9273 #$i_limits I_LIMITS
9274 #$i_float I_FLOAT
9275 #ifdef I_LIMITS
9276 #include <limits.h>
9277 #endif
9278 #ifdef I_FLOAT
9279 #include <float.h>
9280 #endif
9281 #ifdef DBL_DIG
9282 printf("Contains DBL_DIG");
9283 #endif
9284 EOM
9285 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
9286 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
9287         echo "DBL_DIG found." >&4
9288         val="$define"
9289 else
9290         echo "DBL_DIG NOT found." >&4
9291         val="$undef"
9292 fi
9293 $rm -f dbl_dig.?
9294 set d_dbl_dig
9295 eval $setvar
9296
9297 hasproto='varname=$1; func=$2; shift; shift;
9298 while $test $# -ge 2; do
9299         case "$1" in
9300         $define) echo "#include <$2>";;
9301         esac ;
9302     shift 2;
9303 done > try.c;
9304 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
9305 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
9306         echo "$func() prototype found.";
9307         val="$define";
9308 else
9309         echo "$func() prototype NOT found.";
9310         val="$undef";
9311 fi;
9312 set $varname;
9313 eval $setvar;
9314 $rm -f try.c tryout.c'
9315
9316 : see if dbm.h is available
9317 : see if dbmclose exists
9318 set dbmclose d_dbmclose
9319 eval $inlibc
9320
9321 case "$d_dbmclose" in
9322 $define)
9323         set dbm.h i_dbm
9324         eval $inhdr
9325         case "$i_dbm" in
9326         $define)
9327                 val="$undef"
9328                 set i_rpcsvcdbm
9329                 eval $setvar
9330                 ;;
9331         *)      set rpcsvc/dbm.h i_rpcsvcdbm
9332                 eval $inhdr
9333                 ;;
9334         esac
9335         ;;
9336 *)      echo "We won't be including <dbm.h>"
9337         val="$undef"
9338         set i_dbm
9339         eval $setvar
9340         val="$undef"
9341         set i_rpcsvcdbm
9342         eval $setvar
9343         ;;
9344 esac
9345
9346 : see if prototype for dbminit is available
9347 echo " "
9348 set d_dbminitproto dbminit $i_dbm dbm.h
9349 eval $hasproto
9350
9351 : see if difftime exists
9352 set difftime d_difftime
9353 eval $inlibc
9354
9355 : see if this is a dirent system
9356 echo " "
9357 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
9358         val="$define"
9359         echo "<dirent.h> found." >&4
9360 else
9361         val="$undef"
9362         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
9363                 echo "<sys/dir.h> found." >&4
9364                 echo " "
9365         else
9366                 xinc=`./findhdr sys/ndir.h`
9367         fi
9368         echo "<dirent.h> NOT found." >&4
9369 fi
9370 set i_dirent
9371 eval $setvar
9372
9373 : Look for type of directory structure.
9374 echo " "
9375 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9376
9377 case "$direntrytype" in
9378 ''|' ')
9379         case "$i_dirent" in
9380         $define) guess1='struct dirent' ;;
9381         *) guess1='struct direct'  ;;
9382         esac
9383         ;;
9384 *)      guess1="$direntrytype"
9385         ;;
9386 esac
9387
9388 case "$guess1" in
9389 'struct dirent') guess2='struct direct' ;;
9390 *) guess2='struct dirent' ;;
9391 esac
9392                 
9393 if $contains "$guess1" try.c >/dev/null 2>&1; then
9394         direntrytype="$guess1"
9395         echo "Your directory entries are $direntrytype." >&4
9396 elif $contains "$guess2" try.c >/dev/null 2>&1; then
9397         direntrytype="$guess2"
9398         echo "Your directory entries seem to be $direntrytype." >&4
9399 else
9400         echo "I don't recognize your system's directory entries." >&4
9401         rp="What type is used for directory entries on this system?"
9402         dflt="$guess1"
9403         . ./myread
9404         direntrytype="$ans"
9405 fi
9406 $rm -f try.c
9407
9408
9409 : see if the directory entry stores field length
9410 echo " "
9411 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9412 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
9413         echo "Good, your directory entry keeps length information in d_namlen." >&4
9414         val="$define"
9415 else
9416         echo "Your directory entry does not know about the d_namlen field." >&4
9417         val="$undef"
9418 fi
9419 set d_dirnamlen
9420 eval $setvar
9421 $rm -f try.c
9422
9423 : see if dlerror exists
9424 xxx_runnm="$runnm"
9425 runnm=false
9426 set dlerror d_dlerror
9427 eval $inlibc
9428 runnm="$xxx_runnm"
9429
9430 : see if dlfcn is available
9431 set dlfcn.h i_dlfcn
9432 eval $inhdr
9433
9434 case "$usedl" in
9435 $define|y|true)
9436         $cat << EOM
9437
9438 On a few systems, the dynamically loaded modules that perl generates and uses
9439 will need a different extension than shared libs. The default will probably
9440 be appropriate.
9441
9442 EOM
9443         case "$dlext" in
9444         '')     dflt="$so" ;;
9445         *)      dflt="$dlext" ;;
9446         esac
9447         rp='What is the extension of dynamically loaded modules'
9448         . ./myread
9449         dlext="$ans"
9450         ;;
9451 *)
9452         dlext="none"
9453         ;;
9454 esac
9455
9456 : Check if dlsym need a leading underscore
9457 echo " "
9458 val="$undef"
9459
9460 case "$dlsrc" in
9461 dl_dlopen.xs)
9462         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
9463         $cat >dyna.c <<'EOM'
9464 fred () { }
9465 EOM
9466
9467 $cat >fred.c<<EOM
9468
9469 #include <stdio.h>
9470 #$i_dlfcn I_DLFCN
9471 #ifdef I_DLFCN
9472 #include <dlfcn.h>      /* the dynamic linker include file for SunOS/Solaris */
9473 #else
9474 #include <sys/types.h>
9475 #include <nlist.h>
9476 #include <link.h>
9477 #endif
9478
9479 extern int fred() ;
9480
9481 int main()
9482 {
9483     void * handle ;
9484     void * symbol ;
9485 #ifndef RTLD_LAZY
9486     int mode = 1 ;
9487 #else
9488     int mode = RTLD_LAZY ;
9489 #endif
9490     handle = dlopen("./dyna.$dlext", mode) ;
9491     if (handle == NULL) {
9492         printf ("1\n") ;
9493         fflush (stdout) ;
9494         exit(0);
9495     }
9496     symbol = dlsym(handle, "fred") ;
9497     if (symbol == NULL) {
9498         /* try putting a leading underscore */
9499         symbol = dlsym(handle, "_fred") ;
9500         if (symbol == NULL) {
9501             printf ("2\n") ;
9502             fflush (stdout) ;
9503             exit(0);
9504         }
9505         printf ("3\n") ;
9506     }
9507     else
9508         printf ("4\n") ;
9509     fflush (stdout) ;
9510     exit(0);
9511 }
9512 EOM
9513         : Call the object file tmp-dyna.o in case dlext=o.
9514         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
9515                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
9516                 $ld -o dyna.$dlext $ldflags $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && 
9517                 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1 && $to dyna.$dlext; then
9518                 xxx=`$run ./fred`
9519                 case $xxx in
9520                 1)      echo "Test program failed using dlopen." >&4
9521                         echo "Perhaps you should not use dynamic loading." >&4;;
9522                 2)      echo "Test program failed using dlsym." >&4
9523                         echo "Perhaps you should not use dynamic loading." >&4;;
9524                 3)      echo "dlsym needs a leading underscore" >&4
9525                         val="$define" ;;
9526                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
9527                 esac
9528         else
9529                 echo "I can't compile and run the test program." >&4
9530                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
9531         fi
9532         ;;
9533 esac
9534                 
9535 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
9536
9537 set d_dlsymun
9538 eval $setvar
9539
9540 : see if prototype for drand48 is available
9541 echo " "
9542 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
9543 eval $hasproto
9544
9545 : see if dup2 exists
9546 set dup2 d_dup2
9547 eval $inlibc
9548
9549 : see if eaccess exists
9550 set eaccess d_eaccess
9551 eval $inlibc
9552
9553 : see if endgrent exists
9554 set endgrent d_endgrent
9555 eval $inlibc
9556
9557 : see if endhostent exists
9558 set endhostent d_endhent
9559 eval $inlibc
9560
9561 : see if endnetent exists
9562 set endnetent d_endnent
9563 eval $inlibc
9564
9565 : see if endprotoent exists
9566 set endprotoent d_endpent
9567 eval $inlibc
9568
9569 : see if endpwent exists
9570 set endpwent d_endpwent
9571 eval $inlibc
9572
9573 : see if endservent exists
9574 set endservent d_endsent
9575 eval $inlibc
9576
9577 : Locate the flags for 'open()'
9578 echo " "
9579 $cat >try.c <<'EOCP'
9580 #include <sys/types.h>
9581 #ifdef I_FCNTL
9582 #include <fcntl.h>
9583 #endif
9584 #ifdef I_SYS_FILE
9585 #include <sys/file.h>
9586 #endif
9587 int main() {
9588         if(O_RDONLY);
9589 #ifdef O_TRUNC
9590         exit(0);
9591 #else
9592         exit(1);
9593 #endif
9594 }
9595 EOCP
9596 : check sys/file.h first to get FREAD on Sun
9597 if $test `./findhdr sys/file.h` && \
9598                 set try -DI_SYS_FILE && eval $compile; then
9599         h_sysfile=true;
9600         echo "<sys/file.h> defines the O_* constants..." >&4
9601         if $run ./try; then
9602                 echo "and you have the 3 argument form of open()." >&4
9603                 val="$define"
9604         else
9605                 echo "but not the 3 argument form of open().  Oh, well." >&4
9606                 val="$undef"
9607         fi
9608 elif $test `./findhdr fcntl.h` && \
9609                 set try -DI_FCNTL && eval $compile; then
9610         h_fcntl=true;
9611         echo "<fcntl.h> defines the O_* constants..." >&4
9612         if $run ./try; then
9613                 echo "and you have the 3 argument form of open()." >&4
9614                 val="$define"
9615         else
9616                 echo "but not the 3 argument form of open().  Oh, well." >&4
9617                 val="$undef"
9618         fi
9619 else
9620         val="$undef"
9621         echo "I can't find the O_* constant definitions!  You got problems." >&4
9622 fi
9623 set d_open3
9624 eval $setvar
9625 $rm -f try try.*
9626
9627 : see which of string.h or strings.h is needed
9628 echo " "
9629 strings=`./findhdr string.h`
9630 if $test "$strings" && $test -r "$strings"; then
9631         echo "Using <string.h> instead of <strings.h>." >&4
9632         val="$define"
9633 else
9634         val="$undef"
9635         strings=`./findhdr strings.h`
9636         if $test "$strings" && $test -r "$strings"; then
9637                 echo "Using <strings.h> instead of <string.h>." >&4
9638         else
9639                 echo "No string header found -- You'll surely have problems." >&4
9640         fi
9641 fi
9642 set i_string
9643 eval $setvar
9644 case "$i_string" in
9645 "$undef") strings=`./findhdr strings.h`;;
9646 *)        strings=`./findhdr string.h`;;
9647 esac
9648
9649 : check for non-blocking I/O stuff
9650 case "$h_sysfile" in
9651 true) echo "#include <sys/file.h>" > head.c;;
9652 *)
9653        case "$h_fcntl" in
9654        true) echo "#include <fcntl.h>" > head.c;;
9655        *) echo "#include <sys/fcntl.h>" > head.c;;
9656        esac
9657        ;;
9658 esac
9659 echo " "
9660 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
9661 case "$o_nonblock" in
9662 '')
9663         $cat head.c > try.c
9664         $cat >>try.c <<'EOCP'
9665 #include <stdio.h>
9666 int main() {
9667 #ifdef O_NONBLOCK
9668         printf("O_NONBLOCK\n");
9669         exit(0);
9670 #endif
9671 #ifdef O_NDELAY
9672         printf("O_NDELAY\n");
9673         exit(0);
9674 #endif
9675 #ifdef FNDELAY
9676         printf("FNDELAY\n");
9677         exit(0);
9678 #endif
9679         exit(0);
9680 }
9681 EOCP
9682         set try
9683         if eval $compile_ok; then
9684                 o_nonblock=`$run ./try`
9685                 case "$o_nonblock" in
9686                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
9687                 *) echo "Seems like we can use $o_nonblock.";;
9688                 esac
9689         else
9690                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
9691         fi
9692         ;;
9693 *) echo "Using $hint value $o_nonblock.";;
9694 esac
9695 $rm -f try try.* .out core
9696
9697 echo " "
9698 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
9699 case "$eagain" in
9700 '')
9701         $cat head.c > try.c
9702         $cat >>try.c <<EOCP
9703 #include <errno.h>
9704 #include <sys/types.h>
9705 #include <signal.h>
9706 #include <stdio.h> 
9707 #define MY_O_NONBLOCK $o_nonblock
9708 #ifndef errno  /* XXX need better Configure test */
9709 extern int errno;
9710 #endif
9711 #$i_unistd I_UNISTD
9712 #ifdef I_UNISTD
9713 #include <unistd.h>
9714 #endif
9715 #$i_string I_STRING
9716 #ifdef I_STRING
9717 #include <string.h>
9718 #else
9719 #include <strings.h>
9720 #endif
9721 $signal_t blech(x) int x; { exit(3); }
9722 EOCP
9723         $cat >> try.c <<'EOCP'
9724 int main()
9725 {
9726         int pd[2];
9727         int pu[2];
9728         char buf[1];
9729         char string[100];
9730
9731         pipe(pd);       /* Down: child -> parent */
9732         pipe(pu);       /* Up: parent -> child */
9733         if (0 != fork()) {
9734                 int ret;
9735                 close(pd[1]);   /* Parent reads from pd[0] */
9736                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
9737 #ifdef F_SETFL
9738                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
9739                         exit(1);
9740 #else
9741                 exit(4);
9742 #endif
9743                 signal(SIGALRM, blech);
9744                 alarm(5);
9745                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
9746                         exit(2);
9747                 sprintf(string, "%d\n", ret);
9748                 write(2, string, strlen(string));
9749                 alarm(0);
9750 #ifdef EAGAIN
9751                 if (errno == EAGAIN) {
9752                         printf("EAGAIN\n");
9753                         goto ok;
9754                 }
9755 #endif
9756 #ifdef EWOULDBLOCK
9757                 if (errno == EWOULDBLOCK)
9758                         printf("EWOULDBLOCK\n");
9759 #endif
9760         ok:
9761                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
9762                 sleep(2);                               /* Give it time to close our pipe */
9763                 alarm(5);
9764                 ret = read(pd[0], buf, 1);      /* Should read EOF */
9765                 alarm(0);
9766                 sprintf(string, "%d\n", ret);
9767                 write(3, string, strlen(string));
9768                 exit(0);
9769         }
9770
9771         close(pd[0]);                   /* We write to pd[1] */
9772         close(pu[1]);                   /* We read from pu[0] */
9773         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
9774         close(pd[1]);                   /* Pipe pd is now fully closed! */
9775         exit(0);                                /* Bye bye, thank you for playing! */
9776 }
9777 EOCP
9778         set try
9779         if eval $compile_ok; then
9780                 echo "$startsh" >mtry
9781                 echo "$run ./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
9782                 chmod +x mtry
9783                 ./mtry >/dev/null 2>&1
9784                 case $? in
9785                 0) eagain=`$cat try.out`;;
9786                 1) echo "Could not perform non-blocking setting!";;
9787                 2) echo "I did a successful read() for something that was not there!";;
9788                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
9789                 4) echo "Could not find F_SETFL!";;
9790                 *) echo "Something terribly wrong happened during testing.";;
9791                 esac
9792                 rd_nodata=`$cat try.ret`
9793                 echo "A read() system call with no data present returns $rd_nodata."
9794                 case "$rd_nodata" in
9795                 0|-1) ;;
9796                 *)
9797                         echo "(That's peculiar, fixing that to be -1.)"
9798                         rd_nodata=-1
9799                         ;;
9800                 esac
9801                 case "$eagain" in
9802                 '')
9803                         echo "Forcing errno EAGAIN on read() with no data available."
9804                         eagain=EAGAIN
9805                         ;;
9806                 *)
9807                         echo "Your read() sets errno to $eagain when no data is available."
9808                         ;;
9809                 esac
9810                 status=`$cat try.err`
9811                 case "$status" in
9812                 0) echo "And it correctly returns 0 to signal EOF.";;
9813                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
9814                 *) echo "However, your read() returns '$status' on EOF??";;
9815                 esac
9816                 val="$define"
9817                 if test "$status" = "$rd_nodata"; then
9818                         echo "WARNING: you can't distinguish between EOF and no data!"
9819                         val="$undef"
9820                 fi
9821         else
9822                 echo "I can't compile the test program--assuming errno EAGAIN will do."
9823                 eagain=EAGAIN
9824         fi
9825         set d_eofnblk
9826         eval $setvar
9827         ;;
9828 *)
9829         echo "Using $hint value $eagain."
9830         echo "Your read() returns $rd_nodata when no data is present."
9831         case "$d_eofnblk" in
9832         "$define") echo "And you can see EOF because read() returns 0.";;
9833         "$undef") echo "But you can't see EOF status from read() returned value.";;
9834         *)
9835                 echo "(Assuming you can't see EOF status from read anyway.)"
9836                 d_eofnblk=$undef
9837                 ;;
9838         esac
9839         ;;
9840 esac
9841 $rm -f try try.* .out core head.c mtry
9842
9843 : see if fchdir exists
9844 set fchdir d_fchdir
9845 eval $inlibc
9846
9847 : see if fchmod exists
9848 set fchmod d_fchmod
9849 eval $inlibc
9850
9851 : see if fchown exists
9852 set fchown d_fchown
9853 eval $inlibc
9854
9855 : see if this is an fcntl system
9856 set fcntl d_fcntl
9857 eval $inlibc
9858
9859 echo " "
9860 : See if fcntl-based locking works.
9861 $cat >try.c <<'EOCP'
9862 #include <stdlib.h>
9863 #include <unistd.h>
9864 #include <fcntl.h>
9865 int main() {
9866 #if defined(F_SETLK) && defined(F_SETLKW)
9867      struct flock flock;
9868      int retval, fd;
9869      fd = open("try.c", O_RDONLY);
9870      flock.l_type = F_RDLCK;
9871      flock.l_whence = SEEK_SET;
9872      flock.l_start = flock.l_len = 0;
9873      retval = fcntl(fd, F_SETLK, &flock);
9874      close(fd);
9875      (retval < 0 ? exit(2) : exit(0));
9876 #else
9877      exit(2);
9878 #endif
9879 }
9880 EOCP
9881 echo "Checking if fcntl-based file locking works... "
9882 case "$d_fcntl" in
9883 "$define")
9884         set try
9885         if eval $compile_ok; then
9886                 if $run ./try; then
9887                         echo "Yes, it seems to work."
9888                         val="$define"
9889                 else
9890                         echo "Nope, it didn't work."
9891                         val="$undef"
9892                 fi
9893         else
9894                 echo "I'm unable to compile the test program, so I'll assume not."
9895                 val="$undef"
9896         fi
9897         ;;
9898 *) val="$undef";
9899         echo "Nope, since you don't even have fcntl()."
9900         ;;
9901 esac
9902 set d_fcntl_can_lock
9903 eval $setvar
9904 $rm -f try*
9905
9906
9907 : see if sys/select.h has to be included
9908 set sys/select.h i_sysselct
9909 eval $inhdr
9910
9911 : see if we should include time.h, sys/time.h, or both
9912 echo " "
9913 if test "X$timeincl" = X; then
9914         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
9915         $echo $n "I'm now running the test program...$c"
9916         $cat >try.c <<'EOCP'
9917 #include <sys/types.h>
9918 #ifdef I_TIME
9919 #include <time.h>
9920 #endif
9921 #ifdef I_SYSTIME
9922 #ifdef SYSTIMEKERNEL
9923 #define KERNEL
9924 #endif
9925 #include <sys/time.h>
9926 #endif
9927 #ifdef I_SYSSELECT
9928 #include <sys/select.h>
9929 #endif
9930 int main()
9931 {
9932         struct tm foo;
9933 #ifdef S_TIMEVAL
9934         struct timeval bar;
9935 #endif
9936 #ifdef S_TIMEZONE
9937         struct timezone tzp;
9938 #endif
9939         if (foo.tm_sec == foo.tm_sec)
9940                 exit(0);
9941 #ifdef S_TIMEVAL
9942         if (bar.tv_sec == bar.tv_sec)
9943                 exit(0);
9944 #endif
9945         exit(1);
9946 }
9947 EOCP
9948         flags=''
9949         for s_timezone in '-DS_TIMEZONE' ''; do
9950         sysselect=''
9951         for s_timeval in '-DS_TIMEVAL' ''; do
9952         for i_systimek in '' '-DSYSTIMEKERNEL'; do
9953         for i_time in '' '-DI_TIME'; do
9954         for i_systime in '-DI_SYSTIME' ''; do
9955                 case "$flags" in
9956                 '') $echo $n ".$c"
9957                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
9958                         if eval $compile; then
9959                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
9960                                 shift
9961                                 flags="$*"
9962                                 echo " "
9963                                 $echo $n "Succeeded with $flags$c"
9964                         fi
9965                         ;;
9966                 esac
9967         done
9968         done
9969         done
9970         done
9971         done
9972         timeincl=''
9973         echo " "
9974         case "$flags" in
9975         *SYSTIMEKERNEL*) i_systimek="$define"
9976                 timeincl=`./findhdr sys/time.h`
9977                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
9978         *) i_systimek="$undef";;
9979         esac
9980         case "$flags" in
9981         *I_TIME*) i_time="$define"
9982                 timeincl=`./findhdr time.h`" $timeincl"
9983                 echo "We'll include <time.h>." >&4;;
9984         *) i_time="$undef";;
9985         esac
9986         case "$flags" in
9987         *I_SYSTIME*) i_systime="$define"
9988                 timeincl=`./findhdr sys/time.h`" $timeincl"
9989                 echo "We'll include <sys/time.h>." >&4;;
9990         *) i_systime="$undef";;
9991         esac
9992         $rm -f try.c try
9993 fi
9994
9995 : check for fd_set items
9996 $cat <<EOM
9997
9998 Checking to see how well your C compiler handles fd_set and friends ...
9999 EOM
10000 $cat >try.c <<EOCP
10001 #$i_systime I_SYS_TIME
10002 #$i_sysselct I_SYS_SELECT
10003 #$d_socket HAS_SOCKET
10004 #include <sys/types.h>
10005 #ifdef HAS_SOCKET
10006 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
10007 #endif
10008 #ifdef I_SYS_TIME
10009 #include <sys/time.h>
10010 #endif
10011 #ifdef I_SYS_SELECT
10012 #include <sys/select.h>
10013 #endif
10014 int main() {
10015         fd_set fds;
10016
10017 #ifdef TRYBITS
10018         if(fds.fds_bits);
10019 #endif
10020
10021 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
10022         exit(0);
10023 #else
10024         exit(1);
10025 #endif
10026 }
10027 EOCP
10028 set try -DTRYBITS
10029 if eval $compile; then
10030         d_fds_bits="$define"
10031         d_fd_set="$define"
10032         echo "Well, your system knows about the normal fd_set typedef..." >&4
10033         if $run ./try; then
10034                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
10035                 d_fd_macros="$define"
10036         else
10037                 $cat >&4 <<'EOM'
10038 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
10039 EOM
10040                 d_fd_macros="$undef"
10041         fi
10042 else
10043         $cat <<'EOM'
10044 Hmm, your compiler has some difficulty with fd_set.  Checking further...
10045 EOM
10046         set try
10047         if eval $compile; then
10048                 d_fds_bits="$undef"
10049                 d_fd_set="$define"
10050                 echo "Well, your system has some sort of fd_set available..." >&4
10051                 if $run ./try; then
10052                         echo "and you have the normal fd_set macros." >&4
10053                         d_fd_macros="$define"
10054                 else
10055                         $cat <<'EOM'
10056 but not the normal fd_set macros!  Gross!  More work for me...
10057 EOM
10058                         d_fd_macros="$undef"
10059                 fi
10060         else
10061         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
10062                 d_fd_set="$undef"
10063                 d_fds_bits="$undef"
10064                 d_fd_macros="$undef"
10065         fi
10066 fi
10067 $rm -f try try.*
10068
10069 : see if fgetpos exists
10070 set fgetpos d_fgetpos
10071 eval $inlibc
10072
10073 : see if flock exists
10074 set flock d_flock
10075 eval $inlibc
10076
10077 : see if this is a sys/file.h system
10078 val=''
10079 set sys/file.h val
10080 eval $inhdr
10081
10082 : do we need to include sys/file.h ?
10083 case "$val" in
10084 "$define")
10085         echo " "
10086         if $h_sysfile; then
10087                 val="$define"
10088                 echo "We'll be including <sys/file.h>." >&4
10089         else
10090                 val="$undef"
10091                 echo "We won't be including <sys/file.h>." >&4
10092         fi
10093         ;;
10094 *)
10095         h_sysfile=false
10096         ;;
10097 esac
10098 set i_sysfile
10099 eval $setvar
10100
10101 : see if prototype for flock is available
10102 echo " "
10103 set d_flockproto flock $i_sysfile sys/file.h
10104 eval $hasproto
10105
10106 : see if fork exists
10107 set fork d_fork
10108 eval $inlibc
10109
10110 : see if pathconf exists
10111 set pathconf d_pathconf
10112 eval $inlibc
10113
10114 : see if fpathconf exists
10115 set fpathconf d_fpathconf
10116 eval $inlibc
10117
10118
10119 : check for fpos64_t
10120 echo " "
10121 echo "Checking to see if you have fpos64_t..." >&4
10122 $cat >try.c <<EOCP
10123 #include <stdio.h>
10124 int main() { fpos64_t x = 7; }
10125 EOCP
10126 set try
10127 if eval $compile; then
10128         val="$define"
10129         echo "You have fpos64_t."
10130 else
10131         val="$undef"
10132         echo "You do not have fpos64_t."
10133         case "$fpossize" in
10134         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
10135         esac
10136 fi
10137 $rm -f try.* try
10138 set d_fpos64_t
10139 eval $setvar
10140
10141 : see if frexpl exists
10142 set frexpl d_frexpl
10143 eval $inlibc
10144
10145 : see if this is a sys/param system
10146 set sys/param.h i_sysparam
10147 eval $inhdr
10148
10149 : see if this is a sys/mount.h system
10150 set sys/mount.h i_sysmount
10151 eval $inhdr
10152
10153
10154 echo " "
10155 echo "Checking to see if your system supports struct fs_data..." >&4
10156 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
10157 eval $hasstruct
10158 case "$d_fs_data_s" in
10159 "$define")      echo "Yes, it does."   ;;
10160 *)              echo "No, it doesn't." ;;
10161 esac
10162
10163 : see if fseeko exists
10164 set fseeko d_fseeko
10165 eval $inlibc
10166 case "$longsize" in
10167 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
10168 esac
10169
10170 : see if fsetpos exists
10171 set fsetpos d_fsetpos
10172 eval $inlibc
10173
10174
10175 : see if fstatfs exists
10176 set fstatfs d_fstatfs
10177 eval $inlibc
10178
10179
10180 : see if statvfs exists
10181 set statvfs d_statvfs
10182 eval $inlibc
10183
10184 : see if fstatvfs exists
10185 set fstatvfs d_fstatvfs
10186 eval $inlibc
10187
10188
10189 : see if fsync exists
10190 set fsync d_fsync
10191 eval $inlibc
10192
10193 : see if ftello exists
10194 set ftello d_ftello
10195 eval $inlibc
10196 case "$longsize" in
10197 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
10198 esac
10199
10200 : see if getcwd exists
10201 set getcwd d_getcwd
10202 eval $inlibc
10203
10204 : see if getespwnam exists
10205 set getespwnam d_getespwnam
10206 eval $inlibc
10207
10208
10209 : see if getfsstat exists
10210 set getfsstat d_getfsstat
10211 eval $inlibc
10212
10213 : see if getgrent exists
10214 set getgrent d_getgrent
10215 eval $inlibc
10216
10217 : see if gethostbyaddr exists
10218 set gethostbyaddr d_gethbyaddr
10219 eval $inlibc
10220
10221 : see if gethostbyname exists
10222 set gethostbyname d_gethbyname
10223 eval $inlibc
10224
10225 : see if gethostent exists
10226 set gethostent d_gethent
10227 eval $inlibc
10228
10229 : see how we will look up host name
10230 echo " "
10231 call=''
10232 if set gethostname val -f d_gethname; eval $csym; $val; then
10233         echo 'gethostname() found.' >&4
10234         d_gethname="$define"
10235         call=gethostname
10236 fi
10237 if set uname val -f d_uname; eval $csym; $val; then
10238         if ./xenix; then
10239                 $cat <<'EOM'
10240 uname() was found, but you're running xenix, and older versions of xenix
10241 have a broken uname(). If you don't really know whether your xenix is old
10242 enough to have a broken system call, use the default answer.
10243
10244 EOM
10245                 dflt=y
10246                 case "$d_uname" in
10247                 "$define") dflt=n;;
10248                 esac
10249                 rp='Is your uname() broken?'
10250                 . ./myread
10251                 case "$ans" in
10252                 n*) d_uname="$define"; call=uname;;
10253                 esac
10254         else
10255                 echo 'uname() found.' >&4
10256                 d_uname="$define"
10257                 case "$call" in
10258                 '') call=uname ;;
10259                 esac
10260         fi
10261 fi
10262 case "$d_gethname" in
10263 '') d_gethname="$undef";;
10264 esac
10265 case "$d_uname" in
10266 '') d_uname="$undef";;
10267 esac
10268 case "$d_uname$d_gethname" in
10269 *define*)
10270         dflt=n
10271         cat <<EOM
10272  
10273 Every now and then someone has a $call() that lies about the hostname
10274 but can't be fixed for political or economic reasons.  If you wish, I can
10275 pretend $call() isn't there and maybe compute hostname at run-time
10276 thanks to the '$phostname' command.
10277
10278 EOM
10279         rp="Shall I ignore $call() from now on?"
10280         . ./myread
10281         case "$ans" in
10282         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
10283         esac;;
10284 esac
10285 case "$phostname" in
10286 '') aphostname='';;
10287 *) case "$aphostname" in
10288         /*) ;;
10289         *) set X $phostname
10290                 shift
10291                 file=$1
10292                 shift
10293                 file=`./loc $file $file $pth`
10294                 aphostname=`echo $file $*`
10295                 ;;
10296         esac
10297         ;;
10298 esac
10299 case "$d_uname$d_gethname" in
10300 *define*) ;;
10301 *)
10302         case "$phostname" in
10303         '')
10304                 echo "There will be no way for $package to get your hostname." >&4;;
10305         *)
10306         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
10307                 ;;
10308         esac;;
10309 esac
10310 case "$d_phostname" in
10311 '') d_phostname="$undef";;
10312 esac
10313
10314 : see if this is a netdb.h system
10315 set netdb.h i_netdb
10316 eval $inhdr
10317
10318 : see if prototypes for various gethostxxx netdb.h functions are available
10319 echo " "
10320 set d_gethostprotos gethostent $i_netdb netdb.h
10321 eval $hasproto
10322
10323 : see if getitimer exists
10324 set getitimer d_getitimer
10325 eval $inlibc
10326
10327 : see if getlogin exists
10328 set getlogin d_getlogin
10329 eval $inlibc
10330
10331 : see if getmnt exists
10332 set getmnt d_getmnt
10333 eval $inlibc
10334
10335 : see if getmntent exists
10336 set getmntent d_getmntent
10337 eval $inlibc
10338
10339 : see if getnetbyaddr exists
10340 set getnetbyaddr d_getnbyaddr
10341 eval $inlibc
10342
10343 : see if getnetbyname exists
10344 set getnetbyname d_getnbyname
10345 eval $inlibc
10346
10347 : see if getnetent exists
10348 set getnetent d_getnent
10349 eval $inlibc
10350
10351 : see if prototypes for various getnetxxx netdb.h functions are available
10352 echo " "
10353 set d_getnetprotos getnetent $i_netdb netdb.h
10354 eval $hasproto
10355
10356 : see if getpagesize exists
10357 set getpagesize d_getpagsz
10358 eval $inlibc
10359
10360
10361 : see if getprotobyname exists
10362 set getprotobyname d_getpbyname
10363 eval $inlibc
10364
10365 : see if getprotobynumber exists
10366 set getprotobynumber d_getpbynumber
10367 eval $inlibc
10368
10369 : see if getprotoent exists
10370 set getprotoent d_getpent
10371 eval $inlibc
10372
10373 : see if getpgid exists
10374 set getpgid d_getpgid
10375 eval $inlibc
10376
10377 : see if getpgrp2 exists
10378 set getpgrp2 d_getpgrp2
10379 eval $inlibc
10380
10381 : see if getppid exists
10382 set getppid d_getppid
10383 eval $inlibc
10384
10385 : see if getpriority exists
10386 set getpriority d_getprior
10387 eval $inlibc
10388
10389 : see if prototypes for various getprotoxxx netdb.h functions are available
10390 echo " "
10391 set d_getprotoprotos getprotoent $i_netdb netdb.h
10392 eval $hasproto
10393
10394 : see if getprpwnam exists
10395 set getprpwnam d_getprpwnam
10396 eval $inlibc
10397
10398 : see if getpwent exists
10399 set getpwent d_getpwent
10400 eval $inlibc
10401
10402
10403 : see if getservbyname exists
10404 set getservbyname d_getsbyname
10405 eval $inlibc
10406
10407 : see if getservbyport exists
10408 set getservbyport d_getsbyport
10409 eval $inlibc
10410
10411 : see if getservent exists
10412 set getservent d_getsent
10413 eval $inlibc
10414
10415 : see if prototypes for various getservxxx netdb.h functions are available
10416 echo " "
10417 set d_getservprotos getservent $i_netdb netdb.h
10418 eval $hasproto
10419
10420 : see if getspnam exists
10421 set getspnam d_getspnam
10422 eval $inlibc
10423
10424 : see if gettimeofday or ftime exists
10425 set gettimeofday d_gettimeod
10426 eval $inlibc
10427 case "$d_gettimeod" in
10428 "$undef")
10429         set ftime d_ftime 
10430         eval $inlibc
10431         ;;
10432 *)
10433         val="$undef"; set d_ftime; eval $setvar
10434         ;;
10435 esac
10436 case "$d_gettimeod$d_ftime" in
10437 "$undef$undef")
10438         echo " "
10439         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
10440         ;;
10441 esac
10442
10443 : see if this is an grp system
10444 set grp.h i_grp
10445 eval $inhdr
10446
10447 case "$i_grp" in
10448 $define)
10449         xxx=`./findhdr grp.h`
10450         $cppstdin $cppflags $cppminus < $xxx >$$.h
10451
10452         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
10453                 val="$define"
10454         else
10455                 val="$undef"
10456         fi
10457         set d_grpasswd
10458         eval $setvar
10459
10460         $rm -f $$.h
10461         ;;
10462 *)
10463         val="$undef";
10464         set d_grpasswd; eval $setvar
10465         ;;
10466 esac
10467
10468 : see if hasmntopt exists
10469 set hasmntopt d_hasmntopt
10470 eval $inlibc
10471
10472 : see if this is a netinet/in.h or sys/in.h system
10473 set netinet/in.h i_niin sys/in.h i_sysin
10474 eval $inhdr
10475
10476 : see if arpa/inet.h has to be included
10477 set arpa/inet.h i_arpainet
10478 eval $inhdr
10479
10480 : see if htonl --and friends-- exists
10481 val=''
10482 set htonl val
10483 eval $inlibc
10484
10485 : Maybe they are macros.
10486 case "$val" in
10487 $undef)
10488         $cat >htonl.c <<EOM
10489 #include <stdio.h>
10490 #include <sys/types.h>
10491 #$i_niin I_NETINET_IN
10492 #$i_sysin I_SYS_IN
10493 #$i_arpainet I_ARPA_INET
10494 #ifdef I_NETINET_IN
10495 #include <netinet/in.h>
10496 #endif
10497 #ifdef I_SYS_IN
10498 #include <sys/in.h>
10499 #endif
10500 #ifdef I_ARPA_INET
10501 #include <arpa/inet.h>
10502 #endif
10503 #ifdef htonl
10504 printf("Defined as a macro.");
10505 #endif
10506 EOM
10507         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
10508         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
10509                 val="$define"
10510                 echo "But it seems to be defined as a macro." >&4
10511         fi
10512         $rm -f htonl.?
10513         ;;
10514 esac
10515 set d_htonl
10516 eval $setvar
10517
10518 : see if iconv exists
10519 set iconv d_iconv
10520 eval $inlibc
10521
10522 : index or strchr
10523 echo " "
10524 if set index val -f; eval $csym; $val; then
10525         if set strchr val -f d_strchr; eval $csym; $val; then
10526                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
10527                         val="$define"
10528                         vali="$undef"
10529                         echo "strchr() found." >&4
10530                 else
10531                         val="$undef"
10532                         vali="$define"
10533                         echo "index() found." >&4
10534                 fi
10535         else
10536                 val="$undef"
10537                 vali="$define"
10538                 echo "index() found." >&4
10539         fi
10540 else
10541         if set strchr val -f d_strchr; eval $csym; $val; then
10542                 val="$define"
10543                 vali="$undef"
10544                 echo "strchr() found." >&4
10545         else
10546                 echo "No index() or strchr() found!" >&4
10547                 val="$undef"
10548                 vali="$undef"
10549         fi
10550 fi
10551 set d_strchr; eval $setvar
10552 val="$vali"
10553 set d_index; eval $setvar
10554
10555 : check whether inet_aton exists
10556 set inet_aton d_inetaton
10557 eval $inlibc
10558
10559 : Look for isascii
10560 echo " "
10561 $cat >isascii.c <<'EOCP'
10562 #include <stdio.h>
10563 #include <ctype.h>
10564 int main() {
10565         int c = 'A';
10566         if (isascii(c))
10567                 exit(0);
10568         else
10569                 exit(1);
10570 }
10571 EOCP
10572 set isascii
10573 if eval $compile; then
10574         echo "isascii() found." >&4
10575         val="$define"
10576 else
10577         echo "isascii() NOT found." >&4
10578         val="$undef"
10579 fi
10580 set d_isascii
10581 eval $setvar
10582 $rm -f isascii*
10583
10584 : see if isnan exists
10585 set isnan d_isnan
10586 eval $inlibc
10587
10588 : see if isnanl exists
10589 set isnanl d_isnanl
10590 eval $inlibc
10591
10592 : see if killpg exists
10593 set killpg d_killpg
10594 eval $inlibc
10595
10596 : see if lchown exists
10597 echo " "
10598 $cat > try.c <<'EOCP'
10599 /* System header to define __stub macros and hopefully few prototypes,
10600     which can conflict with char lchown(); below.  */
10601 #include <assert.h>
10602 /* Override any gcc2 internal prototype to avoid an error.  */
10603 /* We use char because int might match the return type of a gcc2
10604    builtin and then its argument prototype would still apply.  */
10605 char lchown();
10606 int main() {
10607     /*  The GNU C library defines this for functions which it implements
10608         to always fail with ENOSYS.  Some functions are actually named
10609         something starting with __ and the normal name is an alias.  */
10610 #if defined (__stub_lchown) || defined (__stub___lchown)
10611 choke me
10612 #else
10613 lchown();
10614 #endif
10615 ; return 0; }
10616 EOCP
10617 set try
10618 if eval $compile; then
10619     $echo "lchown() found." >&4
10620     val="$define"
10621 else
10622     $echo "lchown() NOT found." >&4
10623     val="$undef"
10624 fi
10625 set d_lchown
10626 eval $setvar
10627
10628 : See if number of significant digits in a double precision number is known
10629 echo " "
10630 $cat >ldbl_dig.c <<EOM
10631 #$i_limits I_LIMITS
10632 #$i_float I_FLOAT
10633 #ifdef I_LIMITS
10634 #include <limits.h>
10635 #endif
10636 #ifdef I_FLOAT
10637 #include <float.h>
10638 #endif
10639 #ifdef LDBL_DIG
10640 printf("Contains LDBL_DIG");
10641 #endif
10642 EOM
10643 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
10644 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
10645         echo "LDBL_DIG found." >&4
10646         val="$define"
10647 else
10648         echo "LDBL_DIG NOT found." >&4
10649         val="$undef"
10650 fi
10651 $rm -f ldbl_dig.?
10652 set d_ldbl_dig
10653 eval $setvar
10654
10655 : see if link exists
10656 set link d_link
10657 eval $inlibc
10658
10659 : see if localeconv exists
10660 set localeconv d_locconv
10661 eval $inlibc
10662
10663 : see if lockf exists
10664 set lockf d_lockf
10665 eval $inlibc
10666
10667 : see if prototype for lseek is available
10668 echo " "
10669 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
10670 eval $hasproto
10671
10672 : see if lstat exists
10673 set lstat d_lstat
10674 eval $inlibc
10675
10676 : see if madvise exists
10677 set madvise d_madvise
10678 eval $inlibc
10679
10680 : see if mblen exists
10681 set mblen d_mblen
10682 eval $inlibc
10683
10684 : see if mbstowcs exists
10685 set mbstowcs d_mbstowcs
10686 eval $inlibc
10687
10688 : see if mbtowc exists
10689 set mbtowc d_mbtowc
10690 eval $inlibc
10691
10692 : see if memchr exists
10693 set memchr d_memchr
10694 eval $inlibc
10695
10696 : see if memcmp exists
10697 set memcmp d_memcmp
10698 eval $inlibc
10699
10700 : see if memcpy exists
10701 set memcpy d_memcpy
10702 eval $inlibc
10703
10704 : see if memmove exists
10705 set memmove d_memmove
10706 eval $inlibc
10707
10708 : see if memset exists
10709 set memset d_memset
10710 eval $inlibc
10711
10712 : see if mkdir exists
10713 set mkdir d_mkdir
10714 eval $inlibc
10715
10716 : see if mkdtemp exists
10717 set mkdtemp d_mkdtemp
10718 eval $inlibc
10719
10720 : see if mkfifo exists
10721 set mkfifo d_mkfifo
10722 eval $inlibc
10723
10724 : see if mkstemp exists
10725 set mkstemp d_mkstemp
10726 eval $inlibc
10727
10728 : see if mkstemps exists
10729 set mkstemps d_mkstemps
10730 eval $inlibc
10731
10732 : see if mktime exists
10733 set mktime d_mktime
10734 eval $inlibc
10735
10736 : see if this is a sys/mman.h system
10737 set sys/mman.h i_sysmman
10738 eval $inhdr
10739
10740 : see if mmap exists
10741 set mmap d_mmap
10742 eval $inlibc
10743 : see what shmat returns
10744 : default to something harmless
10745 mmaptype='void *'
10746 case "$i_sysmman$d_mmap" in
10747 "$define$define")
10748         $cat >mmap.c <<'END'
10749 #include <sys/mman.h>
10750 void *mmap();
10751 END
10752         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
10753                 mmaptype='void *'
10754         else
10755                 mmaptype='caddr_t'
10756         fi
10757         echo "and it returns ($mmaptype)." >&4
10758         ;;
10759 esac
10760
10761
10762
10763 : see if modfl exists
10764 set modfl d_modfl
10765 eval $inlibc
10766
10767 d_modfl_pow32_bug="$undef"
10768
10769 case "$d_longdbl$d_modfl" in
10770 $define$define)
10771         $cat <<EOM
10772 Checking to see whether your modfl() is okay for large values...
10773 EOM
10774 $cat >try.c <<EOCP
10775 #include <math.h> 
10776 #include <stdio.h>
10777 int main() {
10778     long double nv = 4294967303.15;
10779     long double v, w;
10780     v = modfl(nv, &w);         
10781 #ifdef __GLIBC__
10782     printf("glibc");
10783 #endif
10784     printf(" %"$sPRIfldbl" %"$sPRIfldbl" %"$sPRIfldbl"\n", nv, v, w);
10785     return 0;
10786 }
10787 EOCP
10788         case "$osname:$gccversion" in
10789         aix:)   saveccflags="$ccflags"
10790                 ccflags="$ccflags -qlongdouble" ;; # to avoid core dump
10791         esac
10792         set try
10793         if eval $compile; then
10794                 foo=`$run ./try`
10795                 case "$foo" in
10796                 *" 4294967303.150000 1.150000 4294967302.000000")
10797                         echo >&4 "Your modfl() is broken for large values."
10798                         d_modfl_pow32_bug="$define"
10799                         case "$foo" in
10800                         glibc)  echo >&4 "You should upgrade your glibc to at least 2.2.2 to get a fixed modfl()."
10801                         ;;
10802                         esac
10803                         ;;
10804                 *" 4294967303.150000 0.150000 4294967303.000000")
10805                         echo >&4 "Your modfl() seems okay for large values."
10806                         ;;
10807                 *)      echo >&4 "I don't understand your modfl() at all."
10808                         d_modfl="$undef"
10809                         ;;
10810                 esac
10811                 $rm -f try.* try core core.try.*
10812         else
10813                 echo "I cannot figure out whether your modfl() is okay, assuming it isn't."
10814                 d_modfl="$undef"
10815         fi
10816         case "$osname:$gccversion" in
10817         aix:)   $ccflags="$saveccflags" ;; # restore
10818         esac
10819         ;;
10820 esac
10821
10822 : see if mprotect exists
10823 set mprotect d_mprotect
10824 eval $inlibc
10825
10826 : see if msgctl exists
10827 set msgctl d_msgctl
10828 eval $inlibc
10829
10830 : see if msgget exists
10831 set msgget d_msgget
10832 eval $inlibc
10833
10834 : see if msgsnd exists
10835 set msgsnd d_msgsnd
10836 eval $inlibc
10837
10838 : see if msgrcv exists
10839 set msgrcv d_msgrcv
10840 eval $inlibc
10841
10842 : see how much of the 'msg*(2)' library is present.
10843 h_msg=true
10844 echo " "
10845 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
10846 *"$undef"*) h_msg=false;;
10847 esac
10848 case "$osname" in
10849 freebsd)
10850     case "`ipcs 2>&1`" in
10851     "SVID messages"*"not configured"*)
10852         echo "Your $osname does not have the msg*(2) configured." >&4
10853         h_msg=false
10854         val="$undef"
10855         set msgctl d_msgctl
10856         eval $setvar
10857         set msgget d_msgget
10858         eval $setvar
10859         set msgsnd d_msgsnd
10860         eval $setvar
10861         set msgrcv d_msgrcv
10862         eval $setvar
10863         ;;
10864     esac
10865     ;;
10866 esac
10867 : we could also check for sys/ipc.h ...
10868 if $h_msg && $test `./findhdr sys/msg.h`; then
10869         echo "You have the full msg*(2) library." >&4
10870         val="$define"
10871 else
10872         echo "You don't have the full msg*(2) library." >&4
10873         val="$undef"
10874 fi
10875 set d_msg
10876 eval $setvar
10877
10878
10879 echo " "
10880 echo "Checking to see if your system supports struct msghdr..." >&4
10881 set d_msghdr_s msghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
10882 eval $hasstruct
10883 case "$d_msghdr_s" in
10884 "$define")      echo "Yes, it does."   ;;
10885 *)              echo "No, it doesn't." ;;
10886 esac
10887
10888
10889 : see if msync exists
10890 set msync d_msync
10891 eval $inlibc
10892
10893 : see if munmap exists
10894 set munmap d_munmap
10895 eval $inlibc
10896
10897 : see if nice exists
10898 set nice d_nice
10899 eval $inlibc
10900
10901 : check for length of character
10902 echo " "
10903 case "$charsize" in
10904 '')
10905         echo "Checking to see how big your characters are (hey, you never know)..." >&4
10906         $cat >try.c <<'EOCP'
10907 #include <stdio.h>
10908 int main()
10909 {
10910     printf("%d\n", (int)sizeof(char));
10911     exit(0);
10912 }
10913 EOCP
10914         set try
10915         if eval $compile_ok; then
10916                 dflt=`$run ./try`
10917         else
10918                 dflt='1'
10919                 echo "(I can't seem to compile the test program.  Guessing...)"
10920         fi
10921         ;;
10922 *)
10923         dflt="$charsize"
10924         ;;
10925 esac
10926 rp="What is the size of a character (in bytes)?"
10927 . ./myread
10928 charsize="$ans"
10929 $rm -f try.c try
10930
10931 : check for volatile keyword
10932 echo " "
10933 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10934 $cat >try.c <<'EOCP'
10935 int main()
10936 {
10937         typedef struct _goo_struct goo_struct;
10938         goo_struct * volatile goo = ((goo_struct *)0);
10939         struct _goo_struct {
10940                 long long_int;
10941                 int reg_int;
10942                 char char_var;
10943         };
10944         typedef unsigned short foo_t;
10945         char *volatile foo;
10946         volatile int bar;
10947         volatile foo_t blech;
10948         foo = foo;
10949 }
10950 EOCP
10951 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10952         val="$define"
10953         echo "Yup, it does."
10954 else
10955         val="$undef"
10956         echo "Nope, it doesn't."
10957 fi
10958 set d_volatile
10959 eval $setvar
10960 $rm -f try.*
10961
10962
10963 echo " "
10964 $echo "Choosing the C types to be used for Perl's internal types..." >&4
10965
10966 case "$use64bitint:$d_quad:$quadtype" in
10967 define:define:?*)
10968         ivtype="$quadtype"
10969         uvtype="$uquadtype"
10970         ivsize=8
10971         uvsize=8
10972         ;;
10973 *)      ivtype="long"
10974         uvtype="unsigned long"
10975         ivsize=$longsize
10976         uvsize=$longsize
10977         ;;
10978 esac
10979
10980 case "$uselongdouble:$d_longdbl" in
10981 define:define)
10982         nvtype="long double"
10983         nvsize=$longdblsize
10984         ;;
10985 *)      nvtype=double
10986         nvsize=$doublesize
10987         ;;
10988 esac
10989
10990 $echo "(IV will be "$ivtype", $ivsize bytes)"
10991 $echo "(UV will be "$uvtype", $uvsize bytes)"
10992 $echo "(NV will be "$nvtype", $nvsize bytes)"
10993
10994 $cat >try.c <<EOCP
10995 #$i_inttypes I_INTTYPES
10996 #ifdef I_INTTYPES
10997 #include <inttypes.h>
10998 #endif
10999 #include <stdio.h>
11000 int main() {
11001 #ifdef INT8
11002    int8_t i =  INT8_MAX;
11003   uint8_t u = UINT8_MAX;
11004   printf("int8_t\n");
11005 #endif
11006 #ifdef INT16
11007    int16_t i =  INT16_MAX;
11008   uint16_t i = UINT16_MAX;
11009   printf("int16_t\n");
11010 #endif
11011 #ifdef INT32
11012    int32_t i =  INT32_MAX;
11013   uint32_t u = UINT32_MAX;
11014   printf("int32_t\n");
11015 #endif
11016 }
11017 EOCP
11018
11019 case "$i8type" in
11020 '')     case "$charsize" in
11021         1)      i8type=char
11022                 u8type="unsigned char"
11023                 i8size=$charsize
11024                 u8size=$charsize
11025                 ;;
11026         esac
11027         ;;
11028 esac
11029 case "$i8type" in
11030 '')     set try -DINT8
11031         if eval $compile; then
11032                 case "`$run ./try`" in
11033                 int8_t) i8type=int8_t
11034                         u8type=uint8_t
11035                         i8size=1
11036                         u8size=1
11037                         ;;
11038                 esac
11039         fi
11040         ;;
11041 esac
11042 case "$i8type" in
11043 '')     if $test $charsize -ge 1; then
11044                 i8type=char
11045                 u8type="unsigned char"
11046                 i8size=$charsize
11047                 u8size=$charsize
11048         fi
11049         ;;
11050 esac
11051
11052 case "$i16type" in
11053 '')     case "$shortsize" in
11054         2)      i16type=short
11055                 u16type="unsigned short"
11056                 i16size=$shortsize
11057                 u16size=$shortsize
11058                 ;;
11059         esac
11060         ;;
11061 esac
11062 case "$i16type" in
11063 '')     set try -DINT16
11064         if eval $compile; then
11065                 case "`$run ./try`" in
11066                 int16_t)
11067                         i16type=int16_t
11068                         u16type=uint16_t
11069                         i16size=2
11070                         u16size=2
11071                         ;;
11072                 esac
11073         fi
11074         ;;
11075 esac
11076 case "$i16type" in
11077 '')     if $test $shortsize -ge 2; then
11078                 i16type=short
11079                 u16type="unsigned short"
11080                 i16size=$shortsize
11081                 u16size=$shortsize
11082         fi
11083         ;;
11084 esac
11085
11086 case "$i32type" in
11087 '')     case "$longsize" in
11088         4)      i32type=long
11089                 u32type="unsigned long"
11090                 i32size=$longsize
11091                 u32size=$longsize
11092                 ;;
11093         *)      case "$intsize" in
11094                 4)      i32type=int
11095                         u32type="unsigned int"
11096                         i32size=$intsize
11097                         u32size=$intsize
11098                         ;;
11099                 esac
11100                 ;;
11101         esac
11102         ;;
11103 esac
11104 case "$i32type" in
11105 '')     set try -DINT32
11106         if eval $compile; then
11107                 case "`$run ./try`" in
11108                 int32_t)
11109                         i32type=int32_t
11110                         u32type=uint32_t
11111                         i32size=4
11112                         u32size=4
11113                         ;;
11114                 esac
11115         fi
11116         ;;
11117 esac
11118 case "$i32type" in
11119 '')     if $test $intsize -ge 4; then
11120                 i32type=int
11121                 u32type="unsigned int"
11122                 i32size=$intsize
11123                 u32size=$intsize
11124         fi
11125         ;;
11126 esac
11127
11128 case "$i64type" in
11129 '')     case "$d_quad:$quadtype" in
11130         define:?*)
11131                 i64type="$quadtype"
11132                 u64type="$uquadtype"
11133                 i64size=8
11134                 u64size=8
11135                 ;;
11136         esac
11137         ;;
11138 esac
11139
11140 $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
11141 : volatile so that the compiler has to store it out to memory.
11142 if test X"$d_volatile" = X"$define"; then
11143         volatile=volatile
11144 fi
11145 $cat <<EOP >try.c
11146 #include <stdio.h>
11147 #include <sys/types.h>
11148 #include <signal.h>
11149 #ifdef SIGFPE
11150 $volatile int bletched = 0;
11151 $signal_t blech(s) int s; { bletched = 1; }
11152 #endif
11153 int main() {
11154     $uvtype u = 0;
11155     $nvtype d;
11156     int     n = 8 * $uvsize;
11157     int     i;
11158 #ifdef SIGFPE
11159     signal(SIGFPE, blech);
11160 #endif
11161
11162     for (i = 0; i < n; i++) {
11163       u = u << 1 | ($uvtype)1;
11164       d = ($nvtype)u;
11165       if (($uvtype)d != u)
11166         break;
11167       if (d <= 0)
11168         break;
11169       d = ($nvtype)(u - 1);
11170       if (($uvtype)d != (u - 1))
11171         break;
11172 #ifdef SIGFPE
11173       if (bletched) {
11174         break;
11175 #endif
11176       } 
11177     }
11178     printf("%d\n", ((i == n) ? -n : i));
11179     exit(0);
11180 }
11181 EOP
11182 set try
11183
11184 d_nv_preserves_uv="$undef"
11185 if eval $compile; then
11186         d_nv_preserves_uv_bits="`$run ./try`"
11187 fi
11188 case "$d_nv_preserves_uv_bits" in
11189 \-[1-9]*)       
11190         d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
11191         $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11192         d_nv_preserves_uv="$define"
11193         ;;
11194 [1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11195         d_nv_preserves_uv="$undef" ;;
11196 *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
11197         d_nv_preserves_uv_bits="$undef" ;;
11198 esac
11199
11200 $rm -f try.* try
11201
11202
11203 : check for off64_t
11204 echo " "
11205 echo "Checking to see if you have off64_t..." >&4
11206 $cat >try.c <<EOCP
11207 #include <sys/types.h>
11208 #include <unistd.h>
11209 int main() { off64_t x = 7; }
11210 EOCP
11211 set try
11212 if eval $compile; then
11213         val="$define"
11214         echo "You have off64_t."
11215 else
11216         val="$undef"
11217         echo "You do not have off64_t."
11218         case "$lseeksize" in
11219         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
11220         esac
11221 fi
11222 $rm -f try.* try
11223 set d_off64_t
11224 eval $setvar
11225
11226 : see if POSIX threads are available
11227 set pthread.h i_pthread
11228 eval $inhdr
11229
11230
11231
11232
11233 : how to create joinable pthreads
11234 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
11235         echo " "
11236         echo "Checking what constant to use for creating joinable pthreads..." >&4 
11237         $cat >try.c <<'EOCP'
11238 #include <pthread.h>
11239 int main() {
11240     int detachstate = JOINABLE;
11241 }
11242 EOCP
11243         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
11244         if eval $compile; then
11245                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
11246                 val="$undef" # Yes, undef.
11247                 set d_old_pthread_create_joinable
11248                 eval $setvar
11249                 val=""
11250                 set old_pthread_create_joinable
11251                 eval $setvar
11252         else
11253                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
11254                 if eval $compile; then
11255                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
11256                         val="$define"
11257                         set d_old_pthread_create_joinable
11258                         eval $setvar
11259                         val=PTHREAD_CREATE_UNDETACHED
11260                         set old_pthread_create_joinable
11261                         eval $setvar
11262                 else            
11263                         set try -DJOINABLE=__UNDETACHED
11264                         if eval $compile; then
11265                                 echo "You seem to use __UNDETACHED." >&4
11266                                 val="$define"
11267                                 set d_old_pthread_create_joinable
11268                                 eval $setvar
11269                                 val=__UNDETACHED
11270                                 set old_pthread_create_joinable
11271                                 eval $setvar
11272                         else
11273                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
11274                                 val="$define"
11275                                 set d_old_pthread_create_joinable
11276                                 eval $setvar
11277                                 val=0
11278                                 set old_pthread_create_joinable
11279                                 eval $setvar
11280                         fi
11281                 fi
11282         fi
11283         $rm -f try try.*
11284 else
11285     d_old_pthread_create_joinable="$undef"
11286     old_pthread_create_joinable=""
11287 fi
11288
11289 : see if pause exists
11290 set pause d_pause
11291 eval $inlibc
11292
11293 : see if pipe exists
11294 set pipe d_pipe
11295 eval $inlibc
11296
11297 : see if poll exists
11298 set poll d_poll
11299 eval $inlibc
11300
11301
11302 : see whether the various POSIXish _yields exist
11303 $cat >try.c <<EOP
11304 #include <pthread.h>
11305 #include <stdio.h>
11306 int main() {
11307 #ifdef SCHED_YIELD
11308         sched_yield();
11309 #else
11310 #ifdef PTHREAD_YIELD
11311         pthread_yield();
11312 #else
11313 #ifdef PTHREAD_YIELD_NULL
11314         pthread_yield(NULL);
11315 #endif
11316 #endif
11317 #endif
11318 }
11319 EOP
11320 : see if sched_yield exists
11321 set try -DSCHED_YIELD
11322 if eval $compile; then
11323     val="$define"
11324     sched_yield='sched_yield()'
11325 else
11326     val="$undef"
11327 fi
11328 case "$usethreads" in
11329 $define)
11330         case "$val" in
11331         $define) echo 'sched_yield() found.' >&4        ;;
11332         *)       echo 'sched_yield() NOT found.' >&4    ;;
11333         esac
11334 esac
11335 set d_sched_yield
11336 eval $setvar
11337
11338 : see if pthread_yield exists
11339 set try -DPTHREAD_YIELD
11340 if eval $compile; then
11341     val="$define"
11342     case "$sched_yield" in
11343     '') sched_yield='pthread_yield()' ;;
11344     esac
11345 else
11346     set try -DPTHREAD_YIELD_NULL
11347     if eval $compile; then
11348         val="$define"
11349         case "$sched_yield" in
11350         '') sched_yield='pthread_yield(NULL)' ;;
11351         esac
11352     else
11353         val="$undef"
11354     fi
11355 fi
11356 case "$usethreads" in
11357 $define)
11358         case "$val" in
11359         $define) echo 'pthread_yield() found.' >&4      ;;
11360         *)       echo 'pthread_yield() NOT found.' >&4  ;;
11361         esac
11362         ;;
11363 esac
11364 set d_pthread_yield
11365 eval $setvar
11366
11367 case "$sched_yield" in
11368 '') sched_yield=undef ;;
11369 esac
11370
11371 $rm -f try try.*
11372
11373 : see if this is a pwd.h system
11374 set pwd.h i_pwd
11375 eval $inhdr
11376
11377 case "$i_pwd" in
11378 $define)
11379         xxx=`./findhdr pwd.h`
11380         $cppstdin $cppflags $cppminus < $xxx >$$.h
11381
11382         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
11383                 val="$define"
11384         else
11385                 val="$undef"
11386         fi
11387         set d_pwquota
11388         eval $setvar
11389
11390         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
11391                 val="$define"
11392         else
11393                 val="$undef"
11394         fi
11395         set d_pwage
11396         eval $setvar
11397
11398         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
11399                 val="$define"
11400         else
11401                 val="$undef"
11402         fi
11403         set d_pwchange
11404         eval $setvar
11405
11406         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
11407                 val="$define"
11408         else
11409                 val="$undef"
11410         fi
11411         set d_pwclass
11412         eval $setvar
11413
11414         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
11415                 val="$define"
11416         else
11417                 val="$undef"
11418         fi
11419         set d_pwexpire
11420         eval $setvar
11421
11422         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
11423                 val="$define"
11424         else
11425                 val="$undef"
11426         fi
11427         set d_pwcomment
11428         eval $setvar
11429
11430         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
11431                 val="$define"
11432         else
11433                 val="$undef"
11434         fi
11435         set d_pwgecos
11436         eval $setvar
11437
11438         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
11439                 val="$define"
11440         else
11441                 val="$undef"
11442         fi
11443         set d_pwpasswd
11444         eval $setvar
11445
11446         $rm -f $$.h
11447         ;;
11448 *)
11449         val="$undef"; 
11450         set d_pwquota; eval $setvar
11451         set d_pwage; eval $setvar
11452         set d_pwchange; eval $setvar
11453         set d_pwclass; eval $setvar
11454         set d_pwexpire; eval $setvar
11455         set d_pwcomment; eval $setvar
11456         set d_pwgecos; eval $setvar
11457         set d_pwpasswd; eval $setvar
11458         ;;
11459 esac
11460
11461 : see if readdir and friends exist
11462 set readdir d_readdir
11463 eval $inlibc
11464 set seekdir d_seekdir
11465 eval $inlibc
11466 set telldir d_telldir
11467 eval $inlibc
11468 set rewinddir d_rewinddir
11469 eval $inlibc
11470
11471 : see if readlink exists
11472 set readlink d_readlink
11473 eval $inlibc
11474
11475 : see if readv exists
11476 set readv d_readv
11477 eval $inlibc
11478
11479 : see if recvmsg exists
11480 set recvmsg d_recvmsg
11481 eval $inlibc
11482
11483 : see if rename exists
11484 set rename d_rename
11485 eval $inlibc
11486
11487 : see if rmdir exists
11488 set rmdir d_rmdir
11489 eval $inlibc
11490
11491 : see if memory.h is available.
11492 val=''
11493 set memory.h val
11494 eval $inhdr
11495
11496 : See if it conflicts with string.h
11497 case "$val" in
11498 $define)
11499         case "$strings" in
11500         '') ;;
11501         *)
11502                 $cppstdin $cppflags $cppminus < $strings > mem.h
11503                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
11504                         echo " "
11505                         echo "We won't be including <memory.h>."
11506                         val="$undef"
11507                 fi
11508                 $rm -f mem.h
11509                 ;;
11510         esac
11511 esac
11512 set i_memory
11513 eval $setvar
11514
11515 : can bcopy handle overlapping blocks?
11516 echo " "
11517 val="$undef"
11518 case "$d_memmove" in
11519 "$define") echo "I'll use memmove() instead of bcopy() for overlapping copies." ;;
11520 *)      case "$d_bcopy" in
11521         "$define")
11522                 echo "Checking to see if bcopy() can do overlapping copies..." >&4
11523                 $cat >try.c <<EOCP
11524 #$i_memory I_MEMORY
11525 #$i_stdlib I_STDLIB
11526 #$i_string I_STRING
11527 #$i_unistd I_UNISTD
11528 EOCP
11529         $cat >>try.c <<'EOCP'
11530 #include <stdio.h>
11531 #ifdef I_MEMORY
11532 #  include <memory.h>
11533 #endif
11534 #ifdef I_STDLIB
11535 #  include <stdlib.h>
11536 #endif
11537 #ifdef I_STRING
11538 #  include <string.h>
11539 #else
11540 #  include <strings.h>
11541 #endif
11542 #ifdef I_UNISTD
11543 #  include <unistd.h>  /* Needed for NetBSD */
11544 #endif
11545 int main()
11546 {
11547 char buf[128], abc[128];
11548 char *b;
11549 int len;
11550 int off;
11551 int align;
11552
11553 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11554    try to store the string in read-only memory. */
11555 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
11556
11557 for (align = 7; align >= 0; align--) {
11558         for (len = 36; len; len--) {
11559                 b = buf+align;
11560                 bcopy(abc, b, len);
11561                 for (off = 1; off <= len; off++) {
11562                         bcopy(b, b+off, len);
11563                         bcopy(b+off, b, len);
11564                         if (bcmp(b, abc, len))
11565                                 exit(1);
11566                 }
11567         }
11568 }
11569 exit(0);
11570 }
11571 EOCP
11572                 set try
11573                 if eval $compile_ok; then
11574                         if ./try 2>/dev/null; then
11575                                 echo "Yes, it can."
11576                                 val="$define"
11577                         else
11578                                 echo "It can't, sorry."
11579                         fi
11580                 else
11581                         echo "(I can't compile the test program, so we'll assume not...)"
11582                 fi
11583                 ;;
11584         esac
11585         $rm -f try.* try core
11586         ;;
11587 esac
11588 set d_safebcpy
11589 eval $setvar
11590
11591 : can memcpy handle overlapping blocks?
11592 echo " "
11593 val="$undef"
11594 case "$d_memmove" in
11595 "$define") echo "I'll use memmove() instead of memcpy() for overlapping copies." ;;
11596 *)      case "$d_memcpy" in
11597         "$define")
11598                 echo "Checking to see if memcpy() can do overlapping copies..." >&4
11599                 $cat >try.c <<EOCP
11600 #$i_memory I_MEMORY
11601 #$i_stdlib I_STDLIB
11602 #$i_string I_STRING
11603 #$i_unistd I_UNISTD
11604 EOCP
11605         $cat >>try.c <<'EOCP'
11606 #include <stdio.h>
11607 #ifdef I_MEMORY
11608 #  include <memory.h>
11609 #endif
11610 #ifdef I_STDLIB
11611 #  include <stdlib.h>
11612 #endif
11613 #ifdef I_STRING
11614 #  include <string.h>
11615 #else
11616 #  include <strings.h>
11617 #endif
11618 #ifdef I_UNISTD
11619 #  include <unistd.h>  /* Needed for NetBSD */
11620 #endif
11621 int main()
11622 {
11623 char buf[128], abc[128];
11624 char *b;
11625 int len;
11626 int off;
11627 int align;
11628
11629 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11630    try to store the string in read-only memory. */
11631 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
11632
11633 for (align = 7; align >= 0; align--) {
11634         for (len = 36; len; len--) {
11635                 b = buf+align;
11636                 memcpy(b, abc, len);
11637                 for (off = 1; off <= len; off++) {
11638                         memcpy(b+off, b, len);
11639                         memcpy(b, b+off, len);
11640                         if (memcmp(b, abc, len))
11641                                 exit(1);
11642                 }
11643         }
11644 }
11645 exit(0);
11646 }
11647 EOCP
11648                 set try
11649                 if eval $compile_ok; then
11650                         if ./try 2>/dev/null; then
11651                                 echo "Yes, it can."
11652                                 val="$define"
11653                         else
11654                                 echo "It can't, sorry."
11655                         fi
11656                 else
11657                         echo "(I can't compile the test program, so we'll assume not...)"
11658                 fi
11659                 ;;
11660         esac
11661         $rm -f try.* try core
11662         ;;
11663 esac
11664 set d_safemcpy
11665 eval $setvar
11666
11667 : can memcmp be trusted to compare relative magnitude?
11668 val="$undef"
11669 case "$d_memcmp" in
11670 "$define")
11671         echo " "
11672         echo "Checking if your memcmp() can compare relative magnitude..." >&4
11673         $cat >try.c <<EOCP
11674 #$i_memory I_MEMORY
11675 #$i_stdlib I_STDLIB
11676 #$i_string I_STRING
11677 #$i_unistd I_UNISTD
11678 EOCP
11679         $cat >>try.c <<'EOCP'
11680 #include <stdio.h>
11681 #ifdef I_MEMORY
11682 #  include <memory.h>
11683 #endif
11684 #ifdef I_STDLIB
11685 #  include <stdlib.h>
11686 #endif
11687 #ifdef I_STRING
11688 #  include <string.h>
11689 #else
11690 #  include <strings.h>
11691 #endif
11692 #ifdef I_UNISTD
11693 #  include <unistd.h>  /* Needed for NetBSD */
11694 #endif
11695 int main()
11696 {
11697 char a = -1;
11698 char b = 0;
11699 if ((a < b) && memcmp(&a, &b, 1) < 0)
11700         exit(1);
11701 exit(0);
11702 }
11703 EOCP
11704         set try
11705         if eval $compile_ok; then
11706                 if $run ./try 2>/dev/null; then
11707                         echo "Yes, it can."
11708                         val="$define"
11709                 else
11710                         echo "No, it can't (it uses signed chars)."
11711                 fi
11712         else
11713                 echo "(I can't compile the test program, so we'll assume not...)"
11714         fi
11715         ;;
11716 esac
11717 $rm -f try.* try core
11718 set d_sanemcmp
11719 eval $setvar
11720
11721 : see if prototype for sbrk is available
11722 echo " "
11723 set d_sbrkproto sbrk $i_unistd unistd.h
11724 eval $hasproto
11725
11726 : see if select exists
11727 set select d_select
11728 eval $inlibc
11729
11730 : see if semctl exists
11731 set semctl d_semctl
11732 eval $inlibc
11733
11734 : see if semget exists
11735 set semget d_semget
11736 eval $inlibc
11737
11738 : see if semop exists
11739 set semop d_semop
11740 eval $inlibc
11741
11742 : see how much of the 'sem*(2)' library is present.
11743 h_sem=true
11744 echo " "
11745 case "$d_semctl$d_semget$d_semop" in
11746 *"$undef"*) h_sem=false;;
11747 esac
11748 case "$osname" in
11749 freebsd)
11750     case "`ipcs 2>&1`" in
11751     "SVID messages"*"not configured"*)
11752         echo "Your $osname does not have the sem*(2) configured." >&4
11753         h_sem=false
11754         val="$undef"
11755         set semctl d_semctl
11756         eval $setvar
11757         set semget d_semget
11758         eval $setvar
11759         set semop d_semop
11760         eval $setvar
11761         ;;
11762     esac
11763     ;;
11764 esac
11765 : we could also check for sys/ipc.h ...
11766 if $h_sem && $test `./findhdr sys/sem.h`; then
11767         echo "You have the full sem*(2) library." >&4
11768         val="$define"
11769 else
11770         echo "You don't have the full sem*(2) library." >&4
11771         val="$undef"
11772 fi
11773 set d_sem
11774 eval $setvar
11775
11776 : see whether sys/sem.h defines union semun
11777 echo " "
11778 $cat > try.c <<'END'
11779 #include <sys/types.h>
11780 #include <sys/ipc.h>
11781 #include <sys/sem.h>
11782 int main () { union semun semun; semun.buf = 0; }
11783 END
11784 set try
11785 if eval $compile; then
11786     echo "You have union semun in <sys/sem.h>." >&4
11787     val="$define"
11788 else
11789     echo "You do not have union semun in <sys/sem.h>." >&4
11790     val="$undef"
11791 fi
11792 $rm -f try try.c try.h
11793 set d_union_semun
11794 eval $setvar
11795
11796 : see how to do semctl IPC_STAT
11797 case "$d_sem" in
11798 $define)
11799     : see whether semctl IPC_STAT can use union semun
11800     echo " "
11801     $cat > try.h <<END
11802 #ifndef S_IRUSR
11803 #   ifdef S_IREAD
11804 #       define S_IRUSR S_IREAD
11805 #       define S_IWUSR S_IWRITE
11806 #       define S_IXUSR S_IEXEC
11807 #   else
11808 #       define S_IRUSR 0400
11809 #       define S_IWUSR 0200
11810 #       define S_IXUSR 0100
11811 #   endif
11812 #   define S_IRGRP (S_IRUSR>>3)
11813 #   define S_IWGRP (S_IWUSR>>3)
11814 #   define S_IXGRP (S_IXUSR>>3)
11815 #   define S_IROTH (S_IRUSR>>6)
11816 #   define S_IWOTH (S_IWUSR>>6)
11817 #   define S_IXOTH (S_IXUSR>>6)
11818 #endif
11819 #ifndef S_IRWXU
11820 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
11821 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
11822 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
11823 #endif
11824 END
11825
11826     $cat > try.c <<END
11827 #include <sys/types.h>
11828 #include <sys/ipc.h>
11829 #include <sys/sem.h>
11830 #include <sys/stat.h>
11831 #include <stdio.h>
11832 #include <errno.h>
11833 #include "try.h"
11834 #ifndef errno
11835 extern int errno;
11836 #endif
11837 #$d_union_semun HAS_UNION_SEMUN
11838 int main() {
11839     union semun
11840 #ifndef HAS_UNION_SEMUN
11841     {
11842         int val;
11843         struct semid_ds *buf;
11844         unsigned short *array;
11845     }
11846 #endif
11847     arg;
11848     int sem, st;
11849
11850 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
11851     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11852     if (sem > -1) {
11853         struct semid_ds argbuf;
11854         arg.buf = &argbuf;
11855 #       ifdef IPC_STAT
11856         st = semctl(sem, 0, IPC_STAT, arg);
11857         if (st == 0)
11858             printf("semun\n");
11859         else
11860 #       endif /* IPC_STAT */
11861             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11862 #       ifdef IPC_RMID
11863         if (semctl(sem, 0, IPC_RMID, arg) != 0)
11864 #       endif /* IPC_RMID */
11865             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11866     } else
11867 #endif /* IPC_PRIVATE && ... */
11868         printf("semget failed: errno = %d\n", errno);
11869   return 0;
11870 }
11871 END
11872     val="$undef"
11873     set try
11874     if eval $compile; then
11875         xxx=`$run ./try`
11876         case "$xxx" in
11877         semun) val="$define" ;;
11878         esac
11879     fi
11880     $rm -f try try.c
11881     set d_semctl_semun
11882     eval $setvar
11883     case "$d_semctl_semun" in
11884     $define)
11885         echo "You can use union semun for semctl IPC_STAT." >&4
11886         also='also'
11887         ;;
11888     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
11889         also=''
11890         ;;
11891     esac
11892
11893     : see whether semctl IPC_STAT can use struct semid_ds pointer
11894     $cat > try.c <<'END'
11895 #include <sys/types.h>
11896 #include <sys/ipc.h>
11897 #include <sys/sem.h>
11898 #include <sys/stat.h>
11899 #include "try.h"
11900 #include <stdio.h>
11901 #include <errno.h>
11902 #ifndef errno
11903 extern int errno;
11904 #endif
11905 int main() {
11906     struct semid_ds arg;
11907     int sem, st;
11908
11909 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
11910     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11911     if (sem > -1) {
11912 #       ifdef IPC_STAT
11913         st = semctl(sem, 0, IPC_STAT, &arg);
11914         if (st == 0)
11915             printf("semid_ds\n");
11916         else
11917 #       endif /* IPC_STAT */
11918             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11919 #       ifdef IPC_RMID
11920         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
11921 #       endif /* IPC_RMID */
11922             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11923     } else
11924 #endif /* IPC_PRIVATE && ... */
11925         printf("semget failed: errno = %d\n", errno);
11926
11927     return 0;
11928 }
11929 END
11930     val="$undef"
11931     set try
11932     if eval $compile; then
11933         xxx=`$run ./try`
11934         case "$xxx" in
11935         semid_ds) val="$define" ;;
11936         esac
11937     fi
11938     $rm -f try try.c
11939     set d_semctl_semid_ds
11940     eval $setvar
11941     case "$d_semctl_semid_ds" in
11942     $define)
11943         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
11944         ;;
11945     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
11946         ;;
11947     esac
11948     $rm -f try.h
11949     ;;
11950 *)  val="$undef"
11951
11952     # We do not have the full sem*(2) library, so assume we can not
11953     # use either.
11954
11955     set d_semctl_semun
11956     eval $setvar
11957
11958     set d_semctl_semid_ds
11959     eval $setvar
11960     ;;
11961 esac
11962
11963 : see if sendmsg exists
11964 set sendmsg d_sendmsg
11965 eval $inlibc
11966
11967 : see if setegid exists
11968 set setegid d_setegid
11969 eval $inlibc
11970
11971 : see if seteuid exists
11972 set seteuid d_seteuid
11973 eval $inlibc
11974
11975 : see if setgrent exists
11976 set setgrent d_setgrent
11977 eval $inlibc
11978
11979 : see if sethostent exists
11980 set sethostent d_sethent
11981 eval $inlibc
11982
11983 : see if setitimer exists
11984 set setitimer d_setitimer
11985 eval $inlibc
11986
11987 : see if setlinebuf exists
11988 set setlinebuf d_setlinebuf
11989 eval $inlibc
11990
11991 : see if setlocale exists
11992 set setlocale d_setlocale
11993 eval $inlibc
11994
11995 : see if setnetent exists
11996 set setnetent d_setnent
11997 eval $inlibc
11998
11999 : see if setprotoent exists
12000 set setprotoent d_setpent
12001 eval $inlibc
12002
12003 : see if setpgid exists
12004 set setpgid d_setpgid
12005 eval $inlibc
12006
12007 : see if setpgrp2 exists
12008 set setpgrp2 d_setpgrp2
12009 eval $inlibc
12010
12011 : see if setpriority exists
12012 set setpriority d_setprior
12013 eval $inlibc
12014
12015 : see if setproctitle exists
12016 set setproctitle d_setproctitle
12017 eval $inlibc
12018
12019 : see if setpwent exists
12020 set setpwent d_setpwent
12021 eval $inlibc
12022
12023 : see if setregid exists
12024 set setregid d_setregid
12025 eval $inlibc
12026 set setresgid d_setresgid
12027 eval $inlibc
12028
12029 : see if setreuid exists
12030 set setreuid d_setreuid
12031 eval $inlibc
12032 set setresuid d_setresuid
12033 eval $inlibc
12034
12035 : see if setrgid exists
12036 set setrgid d_setrgid
12037 eval $inlibc
12038
12039 : see if setruid exists
12040 set setruid d_setruid
12041 eval $inlibc
12042
12043 : see if setservent exists
12044 set setservent d_setsent
12045 eval $inlibc
12046
12047 : see if setsid exists
12048 set setsid d_setsid
12049 eval $inlibc
12050
12051 : see if setvbuf exists
12052 set setvbuf d_setvbuf
12053 eval $inlibc
12054
12055 : see if sfio.h is available
12056 set sfio.h i_sfio
12057 eval $inhdr
12058
12059
12060 : see if sfio library is available
12061 case "$i_sfio" in
12062 $define)
12063         val=''
12064         set sfreserve val
12065         eval $inlibc
12066         ;;
12067 *)
12068         val="$undef"
12069         ;;
12070 esac
12071 : Ok, but do we want to use it.
12072 case "$val" in
12073 $define)
12074         case "$usesfio" in
12075         true|$define|[yY]*) dflt='y';;
12076         *) dflt='n';;
12077         esac
12078         echo "$package can use the sfio library, but it is experimental."
12079         case "$useperlio" in
12080         "$undef")
12081             echo "For sfio also the PerlIO abstraction layer is needed."
12082             echo "Earlier you said you wouldn't want that."
12083             ;;
12084         esac
12085         rp="You seem to have sfio available, do you want to try using it?"
12086         . ./myread
12087         case "$ans" in
12088         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
12089                 useperlio="$define"
12090                 val="$define"
12091                 ;;
12092         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
12093                 val="$undef"
12094                 ;;
12095         esac
12096         ;;
12097 *)      case "$usesfio" in
12098         true|$define|[yY]*)
12099                 echo "Sorry, cannot find sfio on this machine." >&4
12100                 echo "Ignoring your setting of usesfio=$usesfio." >&4
12101                 val="$undef"
12102                 ;;
12103         esac
12104         ;;
12105 esac
12106 set d_sfio
12107 eval $setvar
12108 case "$d_sfio" in
12109 $define) usesfio='true';;
12110 *) usesfio='false';;
12111 esac
12112 case "$d_sfio" in
12113 $define) ;;
12114 *)      : Remove sfio from list of libraries to use
12115         case "$libs" in
12116         *-lsfio*)
12117                 echo "Removing unneeded -lsfio from library list" >&4
12118                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
12119                 shift
12120                 libs="$*"
12121                 echo "libs = $libs" >&4
12122                 ;;
12123         esac
12124 ;;
12125 esac
12126
12127
12128 : see if shmctl exists
12129 set shmctl d_shmctl
12130 eval $inlibc
12131
12132 : see if shmget exists
12133 set shmget d_shmget
12134 eval $inlibc
12135
12136 : see if shmat exists
12137 set shmat d_shmat
12138 eval $inlibc
12139 : see what shmat returns
12140 case "$d_shmat" in
12141 "$define")
12142         $cat >shmat.c <<'END'
12143 #include <sys/shm.h>
12144 void *shmat();
12145 END
12146         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
12147                 shmattype='void *'
12148         else
12149                 shmattype='char *'
12150         fi
12151         echo "and it returns ($shmattype)." >&4
12152         : see if a prototype for shmat is available
12153         xxx=`./findhdr sys/shm.h`
12154         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
12155         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
12156                 val="$define"
12157         else
12158                 val="$undef"
12159         fi
12160         $rm -f shmat.[co]
12161         ;;
12162 *)
12163         val="$undef"
12164         ;;
12165 esac
12166 set d_shmatprototype
12167 eval $setvar
12168
12169 : see if shmdt exists
12170 set shmdt d_shmdt
12171 eval $inlibc
12172
12173 : see how much of the 'shm*(2)' library is present.
12174 h_shm=true
12175 echo " "
12176 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
12177 *"$undef"*) h_shm=false;;
12178 esac
12179 case "$osname" in
12180 freebsd)
12181     case "`ipcs 2>&1`" in
12182     "SVID shared memory"*"not configured"*)
12183         echo "Your $osname does not have the shm*(2) configured." >&4
12184         h_shm=false
12185         val="$undef"
12186         set shmctl d_shmctl
12187         evat $setvar
12188         set shmget d_shmget
12189         evat $setvar
12190         set shmat d_shmat
12191         evat $setvar
12192         set shmdt d_shmdt
12193         evat $setvar
12194         ;;
12195     esac
12196     ;;
12197 esac
12198 : we could also check for sys/ipc.h ...
12199 if $h_shm && $test `./findhdr sys/shm.h`; then
12200         echo "You have the full shm*(2) library." >&4
12201         val="$define"
12202 else
12203         echo "You don't have the full shm*(2) library." >&4
12204         val="$undef"
12205 fi
12206 set d_shm
12207 eval $setvar
12208
12209 echo " "
12210 : see if we have sigaction
12211 if set sigaction val -f d_sigaction; eval $csym; $val; then
12212         echo 'sigaction() found.' >&4
12213         $cat > try.c <<'EOP'
12214 #include <stdio.h>
12215 #include <sys/types.h>
12216 #include <signal.h>
12217 int main()
12218 {
12219     struct sigaction act, oact;
12220     act.sa_flags = 0;
12221     oact.sa_handler = 0;
12222     /* so that act and oact are used */
12223     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
12224 }
12225 EOP
12226         set try
12227         if eval $compile_ok; then
12228                 val="$define"
12229         else
12230                 echo "But you don't seem to have a useable struct sigaction." >&4
12231                 val="$undef"
12232         fi
12233 else
12234         echo 'sigaction NOT found.' >&4
12235         val="$undef"
12236 fi
12237 set d_sigaction; eval $setvar
12238 $rm -f try try$_o try.c
12239
12240 : see if sigprocmask exists
12241 set sigprocmask d_sigprocmask
12242 eval $inlibc
12243
12244 : see if sigsetjmp exists
12245 echo " "
12246 case "$d_sigsetjmp" in
12247 '')
12248         $cat >try.c <<'EOP'
12249 #include <setjmp.h>
12250 sigjmp_buf env;
12251 int set = 1;
12252 int main()
12253 {
12254         if (sigsetjmp(env,1))
12255                 exit(set);
12256         set = 0;
12257         siglongjmp(env, 1);
12258         exit(1);
12259 }
12260 EOP
12261         set try
12262         if eval $compile; then
12263                 if $run ./try >/dev/null 2>&1; then
12264                         echo "POSIX sigsetjmp found." >&4
12265                         val="$define"
12266                 else
12267                         $cat >&4 <<EOM
12268 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
12269 I'll ignore them.
12270 EOM
12271                         val="$undef"
12272                 fi
12273         else
12274                 echo "sigsetjmp not found." >&4
12275                 val="$undef"
12276         fi
12277         ;;
12278 *) val="$d_sigsetjmp"
12279         case "$d_sigsetjmp" in
12280         $define) echo "POSIX sigsetjmp found." >&4;;
12281         $undef) echo "sigsetjmp not found." >&4;;
12282         esac
12283         ;;
12284 esac
12285 set d_sigsetjmp
12286 eval $setvar
12287 $rm -f try.c try
12288
12289 : see if sockatmark exists
12290 set sockatmark d_sockatmark
12291 eval $inlibc
12292
12293 : see if prototype for sockatmark is available
12294 echo " "
12295 set d_sockatmarkproto sockatmark $d_socket sys/socket.h
12296 eval $hasproto
12297
12298 : see if socks5_init exists
12299 set socks5_init d_socks5_init
12300 eval $inlibc
12301
12302 : see if prototype for setresgid is available
12303 echo " "
12304 set d_sresgproto setresgid $i_unistd unistd.h
12305 eval $hasproto
12306
12307 : see if prototype for setresuid is available
12308 echo " "
12309 set d_sresuproto setresuid $i_unistd unistd.h
12310 eval $hasproto
12311
12312 : see if sys/stat.h is available
12313 set sys/stat.h i_sysstat
12314 eval $inhdr
12315
12316
12317 : see if stat knows about block sizes
12318 echo " "
12319 echo "Checking to see if your struct stat has st_blocks field..." >&4
12320 set d_statblks stat st_blocks $i_sysstat sys/stat.h
12321 eval $hasfield
12322
12323
12324 : see if this is a sys/vfs.h system
12325 set sys/vfs.h i_sysvfs
12326 eval $inhdr
12327
12328
12329 : see if this is a sys/statfs.h system
12330 set sys/statfs.h i_sysstatfs
12331 eval $inhdr
12332
12333
12334 echo " "
12335 echo "Checking to see if your system supports struct statfs..." >&4
12336 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
12337 eval $hasstruct
12338 case "$d_statfs_s" in
12339 "$define")      echo "Yes, it does."   ;;
12340 *)              echo "No, it doesn't." ;;
12341 esac
12342
12343
12344
12345 : see if struct statfs knows about f_flags
12346 case "$d_statfs_s" in
12347 define) 
12348         echo " "
12349         echo "Checking to see if your struct statfs has f_flags field..." >&4
12350         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
12351         eval $hasfield
12352         ;;
12353 *)      val="$undef"
12354         set d_statfs_f_flags
12355         eval $setvar
12356         ;;
12357 esac
12358 case "$d_statfs_f_flags" in
12359 "$define")      echo "Yes, it does."   ;;
12360 *)              echo "No, it doesn't." ;;
12361 esac
12362
12363 : see if _ptr and _cnt from stdio act std
12364 echo " "
12365
12366 if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12367         echo "(Looks like you have stdio.h from BSD.)"
12368         case "$stdio_ptr" in
12369         '') stdio_ptr='((fp)->_p)'
12370                 ptr_lval=$define
12371                 ;;
12372         *)      ptr_lval=$d_stdio_ptr_lval;;
12373         esac
12374         case "$stdio_cnt" in
12375         '') stdio_cnt='((fp)->_r)'
12376                 cnt_lval=$define
12377                 ;;
12378         *)      cnt_lval=$d_stdio_cnt_lval;;
12379         esac
12380         case "$stdio_base" in
12381         '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
12382         esac
12383         case "$stdio_bufsiz" in
12384         '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
12385         esac
12386 elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
12387         echo "(Looks like you have stdio.h from Linux.)"
12388         case "$stdio_ptr" in
12389         '') stdio_ptr='((fp)->_IO_read_ptr)'
12390                 ptr_lval=$define
12391                 ;;
12392         *)      ptr_lval=$d_stdio_ptr_lval;;
12393         esac
12394         case "$stdio_cnt" in
12395         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
12396                 cnt_lval=$undef
12397                 ;;
12398         *)      cnt_lval=$d_stdio_cnt_lval;;
12399         esac
12400         case "$stdio_base" in
12401         '') stdio_base='((fp)->_IO_read_base)';;
12402         esac
12403         case "$stdio_bufsiz" in
12404         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
12405         esac
12406 else
12407         case "$stdio_ptr" in
12408         '') stdio_ptr='((fp)->_ptr)'
12409                 ptr_lval=$define
12410                 ;;
12411         *)      ptr_lval=$d_stdio_ptr_lval;;
12412         esac
12413         case "$stdio_cnt" in
12414         '') stdio_cnt='((fp)->_cnt)'
12415                 cnt_lval=$define
12416                 ;;
12417         *)      cnt_lval=$d_stdio_cnt_lval;;
12418         esac
12419         case "$stdio_base" in
12420         '') stdio_base='((fp)->_base)';;
12421         esac
12422         case "$stdio_bufsiz" in
12423         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
12424         esac
12425 fi
12426
12427 : test whether _ptr and _cnt really work
12428 echo "Checking how std your stdio is..." >&4
12429 $cat >try.c <<EOP
12430 #include <stdio.h>
12431 #define FILE_ptr(fp)    $stdio_ptr
12432 #define FILE_cnt(fp)    $stdio_cnt
12433 int main() {
12434         FILE *fp = fopen("try.c", "r");
12435         char c = getc(fp);
12436         if (
12437                 18 <= FILE_cnt(fp) &&
12438                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12439         )
12440                 exit(0);
12441         exit(1);
12442 }
12443 EOP
12444 val="$undef"
12445 set try
12446 if eval $compile && $to try.c; then
12447         if $run ./try; then
12448                 echo "Your stdio acts pretty std."
12449                 val="$define"
12450         else
12451                 echo "Your stdio isn't very std."
12452         fi
12453 else
12454         echo "Your stdio doesn't appear very std."
12455 fi
12456 $rm -f try.c try
12457 set d_stdstdio
12458 eval $setvar
12459
12460 : Can _ptr be used as an lvalue?
12461 case "$d_stdstdio$ptr_lval" in
12462 $define$define) val=$define ;;
12463 *) val=$undef ;;
12464 esac
12465 set d_stdio_ptr_lval
12466 eval $setvar
12467
12468 : Can _cnt be used as an lvalue?
12469 case "$d_stdstdio$cnt_lval" in
12470 $define$define) val=$define ;;
12471 *) val=$undef ;;
12472 esac
12473 set d_stdio_cnt_lval
12474 eval $setvar
12475
12476
12477 : test whether setting _ptr sets _cnt as a side effect
12478 d_stdio_ptr_lval_sets_cnt="$undef"
12479 d_stdio_ptr_lval_nochange_cnt="$undef"
12480 case "$d_stdio_ptr_lval$d_stdstdio" in
12481 $define$define)
12482         echo "Checking to see what happens if we set the stdio ptr..." >&4
12483 $cat >try.c <<EOP
12484 #include <stdio.h>
12485 /* Can we scream? */
12486 /* Eat dust sed :-) */
12487 /* In the buffer space, no one can hear you scream. */
12488 #define FILE_ptr(fp)    $stdio_ptr
12489 #define FILE_cnt(fp)    $stdio_cnt
12490 #include <sys/types.h>
12491 int main() {
12492         FILE *fp = fopen("try.c", "r");
12493         int c;
12494         char *ptr;
12495         size_t cnt;
12496         if (!fp) {
12497             puts("Fail even to read");
12498             exit(1);
12499         }
12500         c = getc(fp); /* Read away the first # */
12501         if (c == EOF) {
12502             puts("Fail even to read");
12503             exit(1);
12504         }
12505         if (!(
12506                 18 <= FILE_cnt(fp) &&
12507                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12508         )) {
12509                 puts("Fail even to read");
12510                 exit (1);
12511         }
12512         ptr = (char*) FILE_ptr(fp);
12513         cnt = (size_t)FILE_cnt(fp);
12514
12515         FILE_ptr(fp) += 42;
12516
12517         if ((char*)FILE_ptr(fp) != (ptr + 42)) {
12518                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
12519                 exit (1);
12520         }
12521         if (FILE_cnt(fp) <= 20) {
12522                 printf ("Fail (<20 chars to test)");
12523                 exit (1);
12524         }
12525         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
12526                 puts("Fail compare");
12527                 exit (1);
12528         }
12529         if (cnt == FILE_cnt(fp)) {
12530                 puts("Pass_unchanged");
12531                 exit (0);
12532         }       
12533         if (FILE_cnt(fp) == (cnt - 42)) {
12534                 puts("Pass_changed");
12535                 exit (0);
12536         }
12537         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
12538         return 1;
12539
12540 }
12541 EOP
12542         set try
12543         if eval $compile && $to try.c; then
12544                 case `$run ./try` in
12545                 Pass_changed)
12546                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
12547                         d_stdio_ptr_lval_sets_cnt="$define" ;;
12548                 Pass_unchanged)
12549                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
12550                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
12551                 Fail*)
12552                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
12553                 *)
12554                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
12555         esac
12556         else
12557                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
12558         fi
12559         $rm -f try.c try
12560         ;;
12561 esac
12562
12563 : see if _base is also standard
12564 val="$undef"
12565 case "$d_stdstdio" in
12566 $define)
12567         $cat >try.c <<EOP
12568 #include <stdio.h>
12569 #define FILE_base(fp)   $stdio_base
12570 #define FILE_bufsiz(fp) $stdio_bufsiz
12571 int main() {
12572         FILE *fp = fopen("try.c", "r");
12573         char c = getc(fp);
12574         if (
12575                 19 <= FILE_bufsiz(fp) &&
12576                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
12577         )
12578                 exit(0);
12579         exit(1);
12580 }
12581 EOP
12582         set try
12583         if eval $compile && $to try.c; then
12584                 if $run ./try; then
12585                         echo "And its _base field acts std."
12586                         val="$define"
12587                 else
12588                         echo "But its _base field isn't std."
12589                 fi
12590         else
12591                 echo "However, it seems to be lacking the _base field."
12592         fi
12593         $rm -f try.c try
12594         ;;
12595 esac
12596 set d_stdiobase
12597 eval $setvar
12598
12599 $cat >&4 <<EOM
12600 Checking how to access stdio streams by file descriptor number...
12601 EOM
12602 case "$stdio_stream_array" in
12603 '')     $cat >try.c <<EOCP
12604 #include <stdio.h>
12605 int main() {
12606   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
12607     printf("yes\n");
12608 }
12609 EOCP
12610         for s in _iob __iob __sF
12611         do
12612                 set try -DSTDIO_STREAM_ARRAY=$s
12613                 if eval $compile; then
12614                         case "`$run ./try`" in
12615                         yes)    stdio_stream_array=$s; break ;;
12616                         esac
12617                 fi
12618         done
12619         $rm -f try.* try$exe_ext
12620 esac
12621 case "$stdio_stream_array" in
12622 '')     $cat >&4 <<EOM
12623 I can't figure out how to access stdio streams by file descriptor number.
12624 EOM
12625         d_stdio_stream_array="$undef"
12626         ;;
12627 *)      $cat >&4 <<EOM
12628 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
12629 EOM
12630         d_stdio_stream_array="$define"
12631         ;;
12632 esac
12633
12634 : see if strcoll exists
12635 set strcoll d_strcoll
12636 eval $inlibc
12637
12638 : check for structure copying
12639 echo " "
12640 echo "Checking to see if your C compiler can copy structs..." >&4
12641 $cat >try.c <<'EOCP'
12642 int main()
12643 {
12644         struct blurfl {
12645                 int dyick;
12646         } foo, bar;
12647
12648         foo = bar;
12649 }
12650 EOCP
12651 if $cc -c try.c >/dev/null 2>&1 ; then
12652         val="$define"
12653         echo "Yup, it can."
12654 else
12655         val="$undef"
12656         echo "Nope, it can't."
12657 fi
12658 set d_strctcpy
12659 eval $setvar
12660 $rm -f try.*
12661
12662 : see if strerror and/or sys_errlist[] exist
12663 echo " "
12664 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
12665     if set strerror val -f d_strerror; eval $csym; $val; then
12666                 echo 'strerror() found.' >&4
12667                 d_strerror="$define"
12668                 d_strerrm='strerror(e)'
12669                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
12670                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
12671                         d_syserrlst="$define"
12672                 else
12673                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
12674                         d_syserrlst="$undef"
12675                 fi
12676     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
12677                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
12678                 echo 'strerror() found in string header.' >&4
12679                 d_strerror="$define"
12680                 d_strerrm='strerror(e)'
12681                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
12682                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
12683                                 d_syserrlst="$define"
12684                 else
12685                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
12686                         d_syserrlst="$undef"
12687                 fi
12688     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
12689                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
12690                 d_strerror="$undef"
12691                 d_syserrlst="$define"
12692                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
12693     else
12694                 echo 'strerror() and sys_errlist[] NOT found.' >&4
12695                 d_strerror="$undef"
12696                 d_syserrlst="$undef"
12697                 d_strerrm='"unknown"'
12698     fi
12699 fi
12700
12701 : see if strftime exists
12702 set strftime d_strftime
12703 eval $inlibc
12704
12705 : see if strtod exists
12706 set strtod d_strtod
12707 eval $inlibc
12708
12709 : see if strtol exists
12710 set strtol d_strtol
12711 eval $inlibc
12712
12713 : see if strtold exists
12714 set strtold d_strtold
12715 eval $inlibc
12716
12717 : see if strtoll exists
12718 set strtoll d_strtoll
12719 eval $inlibc
12720
12721 case "$d_longlong-$d_strtoll" in
12722 "$define-$define")
12723         $cat <<EOM
12724 Checking whether your strtoll() works okay...
12725 EOM
12726         $cat >try.c <<'EOCP'
12727 #include <errno.h>
12728 #ifdef __hpux
12729 #define strtoll __strtoll
12730 #endif
12731 #ifdef __EMX__
12732 #define strtoll _strtoll
12733 #endif
12734 #include <stdio.h>
12735 extern long long int strtoll(char *s, char **, int); 
12736 static int bad = 0;
12737 int check(char *s, long long ell, int een) {
12738         long long gll;
12739         errno = 0;
12740         gll = strtoll(s, 0, 10);
12741         if (!((gll == ell) && (errno == een)))
12742                 bad++;
12743 }
12744 int main() {
12745         check(" 1",                                      1LL, 0);
12746         check(" 0",                                      0LL, 0);
12747         check("-1",                                     -1LL, 0);
12748         check("-9223372036854775808", -9223372036854775808LL, 0);
12749         check("-9223372036854775808", -9223372036854775808LL, 0);
12750         check(" 9223372036854775807",  9223372036854775807LL, 0);
12751         check("-9223372036854775808", -9223372036854775808LL, 0);
12752         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
12753         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
12754         if (!bad)
12755                 printf("ok\n");
12756 }
12757 EOCP
12758         set try
12759         if eval $compile; then
12760                 yyy=`$run ./try`
12761                 case "$yyy" in
12762                 ok) echo "Your strtoll() seems to be working okay." ;;
12763                 *) cat <<EOM >&4
12764 Your strtoll() doesn't seem to be working okay.
12765 EOM
12766                    d_strtoll="$undef"
12767                    ;;
12768                 esac
12769         else
12770                 echo "(I can't seem to compile the test program--assuming it doesn't)"
12771                 d_strtoll="$undef"
12772         fi
12773         ;;
12774 esac
12775
12776 : see if strtoq exists
12777 set strtoq d_strtoq
12778 eval $inlibc
12779
12780 : see if strtoul exists
12781 set strtoul d_strtoul
12782 eval $inlibc
12783
12784 case "$d_strtoul" in
12785 "$define")
12786         $cat <<EOM
12787 Checking whether your strtoul() works okay...
12788 EOM
12789         $cat >try.c <<'EOCP'
12790 #include <errno.h>
12791 #include <stdio.h>
12792 extern unsigned long int strtoul(char *s, char **, int); 
12793 static int bad = 0;
12794 void check(char *s, unsigned long eul, int een) {
12795         unsigned long gul;
12796         errno = 0;
12797         gul = strtoul(s, 0, 10);
12798         if (!((gul == eul) && (errno == een)))
12799                 bad++;
12800 }
12801 int main() {
12802         check(" 1", 1L, 0);
12803         check(" 0", 0L, 0);
12804 EOCP
12805         case "$longsize" in
12806         8)
12807             $cat >>try.c <<'EOCP'
12808         check("18446744073709551615", 18446744073709551615UL, 0);
12809         check("18446744073709551616", 18446744073709551615UL, ERANGE);
12810 #if 0 /* strtoul() for /^-/ strings is undefined. */
12811         check("-1", 18446744073709551615UL, 0);
12812         check("-18446744073709551614", 2, 0);
12813         check("-18446744073709551615", 1, 0);
12814         check("-18446744073709551616", 18446744073709551615UL, ERANGE);
12815         check("-18446744073709551617", 18446744073709551615UL, ERANGE);
12816 #endif
12817 EOCP
12818                 ;;
12819         4)
12820                     $cat >>try.c <<'EOCP'
12821         check("4294967295", 4294967295UL, 0);
12822         check("4294967296", 4294967295UL, ERANGE);
12823 #if 0 /* strtoul() for /^-/ strings is undefined. */
12824         check("-1", 4294967295UL, 0);
12825         check("-4294967294", 2, 0);
12826         check("-4294967295", 1, 0);
12827         check("-4294967296", 4294967295UL, ERANGE);
12828         check("-4294967297", 4294967295UL, ERANGE);
12829 #endif
12830 EOCP
12831                 ;;
12832         *)
12833 : Should we write these tests to be more portable by sprintf-ing
12834 : ~0 and then manipulating that char string as input for strtol?
12835                 ;;
12836         esac
12837         $cat >>try.c <<'EOCP'
12838         if (!bad)
12839                 printf("ok\n");
12840         return 0;
12841 }
12842 EOCP
12843         set try
12844         if eval $compile; then
12845                 case "`$run ./try`" in
12846                 ok) echo "Your strtoul() seems to be working okay." ;;
12847                 *) cat <<EOM >&4
12848 Your strtoul() doesn't seem to be working okay.
12849 EOM
12850                    d_strtoul="$undef"
12851                    ;;
12852                 esac
12853         fi
12854         ;;
12855 esac
12856
12857 : see if strtoull exists
12858 set strtoull d_strtoull
12859 eval $inlibc
12860
12861 case "$d_longlong-$d_strtoull" in
12862 "$define-$define")
12863         $cat <<EOM
12864 Checking whether your strtoull() works okay...
12865 EOM
12866         $cat >try.c <<'EOCP'
12867 #include <errno.h>
12868 #ifdef __hpux
12869 #define strtoull __strtoull
12870 #endif
12871 #include <stdio.h>
12872 extern unsigned long long int strtoull(char *s, char **, int); 
12873 static int bad = 0;
12874 int check(char *s, long long eull, int een) {
12875         long long gull;
12876         errno = 0;
12877         gull = strtoull(s, 0, 10);
12878         if (!((gull == eull) && (errno == een)))
12879                 bad++;
12880 }
12881 int main() {
12882         check(" 1",                                        1LL, 0);
12883         check(" 0",                                        0LL, 0);
12884         check("18446744073709551615",  18446744073709551615ULL, 0);
12885         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
12886 #if 0 /* strtoull() for /^-/ strings is undefined. */
12887         check("-1",                    18446744073709551615ULL, 0);
12888         check("-18446744073709551614",                     2LL, 0);
12889         check("-18446744073709551615",                     1LL, 0);
12890         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
12891         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
12892 #endif
12893         if (!bad)
12894                 printf("ok\n");
12895 }
12896 EOCP
12897         set try
12898         if eval $compile; then
12899                 case "`$run ./try`" in
12900                 ok) echo "Your strtoull() seems to be working okay." ;;
12901                 *) cat <<EOM >&4
12902 Your strtoull() doesn't seem to be working okay.
12903 EOM
12904                    d_strtoull="$undef"
12905                    ;;
12906                 esac
12907         fi
12908         ;;
12909 esac
12910
12911 : see if strtouq exists
12912 set strtouq d_strtouq
12913 eval $inlibc
12914
12915 case "$d_strtouq" in
12916 "$define")
12917         $cat <<EOM
12918 Checking whether your strtouq() works okay...
12919 EOM
12920         $cat >try.c <<'EOCP'
12921 #include <errno.h>
12922 #include <stdio.h>
12923 extern unsigned long long int strtouq(char *s, char **, int); 
12924 static int bad = 0;
12925 void check(char *s, unsigned long long eull, int een) {
12926         unsigned long long gull;
12927         errno = 0;
12928         gull = strtouq(s, 0, 10);
12929         if (!((gull == eull) && (errno == een)))
12930                 bad++;
12931 }
12932 int main() {
12933         check(" 1",                                        1LL, 0);
12934         check(" 0",                                        0LL, 0);
12935         check("18446744073709551615",  18446744073709551615ULL, 0);
12936         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
12937 #if 0 /* strtouq() for /^-/ strings is undefined. */
12938         check("-1",                    18446744073709551615ULL, 0);
12939         check("-18446744073709551614",                     2LL, 0);
12940         check("-18446744073709551615",                     1LL, 0);
12941         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
12942         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
12943 #endif
12944         if (!bad)
12945                 printf("ok\n");
12946         return 0;
12947 }
12948 EOCP
12949         set try
12950         if eval $compile; then
12951                 case "`$run ./try`" in
12952                 ok) echo "Your strtouq() seems to be working okay." ;;
12953                 *) cat <<EOM >&4
12954 Your strtouq() doesn't seem to be working okay.
12955 EOM
12956                    d_strtouq="$undef"
12957                    ;;
12958                 esac
12959         fi
12960         ;;
12961 esac
12962
12963 : see if strxfrm exists
12964 set strxfrm d_strxfrm
12965 eval $inlibc
12966
12967 : see if symlink exists
12968 set symlink d_symlink
12969 eval $inlibc
12970
12971 : see if syscall exists
12972 set syscall d_syscall
12973 eval $inlibc
12974
12975 : see if prototype for syscall is available
12976 echo " "
12977 set d_syscallproto syscall $i_unistd unistd.h
12978 eval $hasproto
12979
12980 : see if sysconf exists
12981 set sysconf d_sysconf
12982 eval $inlibc
12983
12984 : see if system exists
12985 set system d_system
12986 eval $inlibc
12987
12988 : see if tcgetpgrp exists
12989 set tcgetpgrp d_tcgetpgrp
12990 eval $inlibc
12991
12992 : see if tcsetpgrp exists
12993 set tcsetpgrp d_tcsetpgrp
12994 eval $inlibc
12995
12996 : see if prototype for telldir is available
12997 echo " "
12998 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
12999 eval $hasproto
13000
13001 : see if this is a sys/times.h system
13002 set sys/times.h i_systimes
13003 eval $inhdr
13004
13005 : see if times exists
13006 echo " "
13007 if set times val -f d_times; eval $csym; $val; then
13008         echo 'times() found.' >&4
13009         d_times="$define"
13010         inc=''
13011         case "$i_systimes" in
13012         "$define") inc='sys/times.h';;
13013         esac
13014         rp="What is the type returned by times() on this system?"
13015         set clock_t clocktype long stdio.h sys/types.h $inc
13016         eval $typedef_ask
13017 else
13018         echo 'times() NOT found, hope that will do.' >&4
13019         d_times="$undef"
13020         clocktype='int'
13021 fi
13022
13023 : see if truncate exists
13024 set truncate d_truncate
13025 eval $inlibc
13026
13027 : see if tzname[] exists
13028 echo " "
13029 if set tzname val -a d_tzname; eval $csym; $val; then
13030         val="$define"
13031         echo 'tzname[] found.' >&4
13032 else
13033         val="$undef"
13034         echo 'tzname[] NOT found.' >&4
13035 fi
13036 set d_tzname
13037 eval $setvar
13038
13039 case "$osname" in
13040 next|rhapsody|darwin) multiarch="$define" ;;
13041 esac
13042 case "$multiarch" in
13043 ''|[nN]*) multiarch="$undef" ;;
13044 esac
13045
13046 : check for ordering of bytes in a long
13047 echo " "
13048 case "$usecrosscompile$multiarch" in
13049 *$define*)
13050         $cat <<EOM
13051 You seem to be either cross-compiling or doing a multiarchitecture build,
13052 skipping the byteorder check.
13053
13054 EOM
13055         byteorder='ffff'
13056         ;;
13057 *)
13058         case "$byteorder" in
13059         '')
13060                 $cat <<'EOM'
13061 In the following, larger digits indicate more significance.  A big-endian
13062 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
13063 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
13064 machines may have weird orders like 3412.  A Cray will report 87654321,
13065 an Alpha will report 12345678. If the test program works the default is
13066 probably right.
13067 I'm now running the test program...
13068 EOM
13069                 $cat >try.c <<'EOCP'
13070 #include <stdio.h>
13071 int main()
13072 {
13073         int i;
13074         union {
13075                 unsigned long l;
13076                 char c[sizeof(long)];
13077         } u;
13078
13079         if (sizeof(long) > 4)
13080                 u.l = (0x08070605L << 32) | 0x04030201L;
13081         else
13082                 u.l = 0x04030201L;
13083         for (i = 0; i < sizeof(long); i++)
13084                 printf("%c", u.c[i]+'0');
13085         printf("\n");
13086         exit(0);
13087 }
13088 EOCP
13089                 xxx_prompt=y
13090                 set try
13091                 if eval $compile && ./try > /dev/null; then
13092                         dflt=`$run ./try`
13093                         case "$dflt" in
13094                         [1-4][1-4][1-4][1-4]|12345678|87654321)
13095                                 echo "(The test program ran ok.)"
13096                                 echo "byteorder=$dflt"
13097                                 xxx_prompt=n
13098                         ;;
13099                         ????|????????) echo "(The test program ran ok.)" ;;
13100                         *) echo "(The test program didn't run right for some reason.)" ;;
13101                         esac
13102                 else
13103                         dflt='4321'
13104                         cat <<'EOM'
13105 (I can't seem to compile the test program.  Guessing big-endian...)
13106 EOM
13107                 fi
13108                 case "$xxx_prompt" in
13109                 y)
13110                         rp="What is the order of bytes in a long?"
13111                         . ./myread
13112                         byteorder="$ans"
13113                         ;;
13114                 *)      byteorder=$dflt
13115                         ;;
13116                 esac
13117                 ;;
13118         esac
13119         $rm -f try.c try
13120         ;;
13121 esac
13122
13123
13124 $cat <<EOM
13125
13126 Checking to see whether you can access character data unalignedly...
13127 EOM
13128 $cat >try.c <<EOCP
13129 #include <stdio.h>
13130 #define U32 $u32type
13131 #define BYTEORDER $byteorder
13132 int main() {
13133 #if BYTEORDER == 0x1234 || BYTEORDER == 0x4321
13134     U8 buf[] = "\0\0\0\1\0\0\0\0";
13135     U32 *up;
13136     int i;
13137
13138     if (sizeof(U32) != 4) {
13139         printf("sizeof(U32) is not 4, but %d\n", sizeof(U32));
13140         exit(1);
13141     }
13142
13143     fflush(stdout);
13144
13145     for (i = 0; i < 4; i++) {
13146         up = (U32*)(buf + i);
13147         if (! ((*up == 1 << (8*i)) ||   /* big-endian */
13148                (*up == 1 << (8*(3-i)))  /* little-endian */
13149               )
13150            )
13151         {
13152             printf("read failed (%x)\n", *up);
13153             exit(2);
13154         }
13155     }
13156
13157     /* write test */
13158     for (i = 0; i < 4; i++) {
13159         up = (U32*)(buf + i);
13160         *up = 0xBeef;
13161         if (*up != 0xBeef) {
13162             printf("write failed (%x)\n", *up);
13163             exit(3);
13164         }
13165     }
13166
13167     exit(0);
13168 #else
13169     printf("1\n");
13170     exit(1);
13171 #endif
13172     return 0;
13173 }
13174 EOCP
13175 set try
13176 if eval $compile_ok; then
13177         echo "(Testing for character data alignment may dump core.)" >&4
13178         $run ./try 2>&1 >/dev/null
13179         case "$?" in
13180         0)      cat >&4 <<EOM
13181 You can access character data pretty unalignedly.
13182 EOM
13183                 d_u32align="$undef"
13184                 ;;
13185         *)      cat >&4 <<EOM
13186 It seems that you must access character data in an aligned manner.
13187 EOM
13188                 d_u32align="$define"
13189                 ;;
13190         esac
13191         $rm -f core core.try.* try.core
13192 else
13193         rp='Can you access character data at unaligned addresses?'
13194         dflt='n'
13195         . ./myread
13196         case "$ans" in
13197         [yY]*)  d_u32align="$undef"  ;;
13198         *)      d_u32align="$define" ;;
13199         esac
13200 fi
13201
13202 : see if ualarm exists
13203 set ualarm d_ualarm
13204 eval $inlibc
13205
13206 : see if umask exists
13207 set umask d_umask
13208 eval $inlibc
13209
13210 : see if usleep exists
13211 set usleep d_usleep
13212 eval $inlibc
13213
13214 : see if prototype for usleep is available
13215 echo " "
13216 set d_usleepproto usleep $i_unistd unistd.h
13217 eval $hasproto
13218
13219 : see if ustat exists
13220 set ustat d_ustat
13221 eval $inlibc
13222
13223 : backward compatibility for d_hvfork
13224 if test X$d_hvfork != X; then
13225         d_vfork="$d_hvfork"
13226         d_hvfork=''
13227 fi
13228 : see if there is a vfork
13229 val=''
13230 set vfork val
13231 eval $inlibc
13232
13233 : Ok, but do we want to use it. vfork is reportedly unreliable in 
13234 : perl on Solaris 2.x, and probably elsewhere.
13235 case "$val" in
13236 $define)
13237         echo " "
13238         case "$usevfork" in
13239         false) dflt='n';;
13240         *) dflt='y';;
13241         esac
13242         cat <<'EOM'
13243  
13244 Perl can only use a vfork() that doesn't suffer from strict
13245 restrictions on calling functions or modifying global data in
13246 the child.  For example, glibc-2.1 contains such a vfork()
13247 that is unsuitable.  If your system provides a proper fork()
13248 call, chances are that you do NOT want perl to use vfork().
13249
13250 EOM
13251         rp="Do you still want to use vfork()?"
13252         . ./myread
13253         case "$ans" in
13254         y|Y) ;;
13255         *)
13256                 echo "Ok, we won't use vfork()."
13257                 val="$undef"
13258                 ;;
13259         esac
13260         ;;
13261 esac
13262 set d_vfork
13263 eval $setvar
13264 case "$d_vfork" in
13265 $define) usevfork='true';;
13266 *) usevfork='false';;
13267 esac
13268
13269 : see if this is an sysdir system
13270 set sys/dir.h i_sysdir
13271 eval $inhdr
13272
13273 : see if this is an sysndir system
13274 set sys/ndir.h i_sysndir
13275 eval $inhdr
13276
13277 : see if closedir exists
13278 set closedir d_closedir
13279 eval $inlibc
13280
13281 case "$d_closedir" in
13282 "$define")
13283         echo " "
13284         echo "Checking whether closedir() returns a status..." >&4
13285         cat > try.c <<EOM
13286 #$i_dirent I_DIRENT             /**/
13287 #$i_sysdir I_SYS_DIR            /**/
13288 #$i_sysndir I_SYS_NDIR          /**/
13289 #$i_systypes I_SYS_TYPES        /**/
13290
13291 #if defined(I_SYS_TYPES)
13292 #include <sys/types.h>
13293 #endif
13294 #if defined(I_DIRENT)
13295 #include <dirent.h>
13296 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
13297 #include <sys/dir.h>
13298 #endif
13299 #else
13300 #ifdef I_SYS_NDIR
13301 #include <sys/ndir.h>
13302 #else
13303 #ifdef I_SYS_DIR
13304 #ifdef hp9000s500
13305 #include <ndir.h>       /* may be wrong in the future */
13306 #else
13307 #include <sys/dir.h>
13308 #endif
13309 #endif
13310 #endif
13311 #endif 
13312 int main() { return closedir(opendir(".")); }
13313 EOM
13314         set try
13315         if eval $compile_ok; then
13316                 if $run ./try > /dev/null 2>&1 ; then
13317                         echo "Yes, it does."
13318                         val="$undef"
13319                 else
13320                         echo "No, it doesn't."
13321                         val="$define"
13322                 fi
13323         else
13324                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13325                 val="$define"
13326         fi
13327         ;;
13328 *)
13329         val="$undef";
13330         ;;
13331 esac
13332 set d_void_closedir
13333 eval $setvar
13334 $rm -f try try.*
13335 : see if there is a wait4
13336 set wait4 d_wait4
13337 eval $inlibc
13338
13339 : see if waitpid exists
13340 set waitpid d_waitpid
13341 eval $inlibc
13342
13343 : see if wcstombs exists
13344 set wcstombs d_wcstombs
13345 eval $inlibc
13346
13347 : see if wctomb exists
13348 set wctomb d_wctomb
13349 eval $inlibc
13350
13351 : see if writev exists
13352 set writev d_writev
13353 eval $inlibc
13354
13355 : preserve RCS keywords in files with variable substitution, grrr
13356 Date='$Date'
13357 Id='$Id'
13358 Log='$Log'
13359 RCSfile='$RCSfile'
13360 Revision='$Revision'
13361
13362 : check for alignment requirements
13363 echo " "
13364 case "$usecrosscompile$multiarch" in
13365 *$define*)
13366         $cat <<EOM
13367 You seem to be either cross-compiling or doing a multiarchitecture build,
13368 skipping the memory alignment check.
13369
13370 EOM
13371         case "$alignbytes" in
13372         '') alignbytes=8 ;;
13373         esac
13374         ;;
13375 *)
13376         case "$alignbytes" in
13377         '') echo "Checking alignment constraints..." >&4
13378                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
13379                         $cat >try.c <<'EOCP'
13380 typedef long double NV;
13381 EOCP
13382                 else
13383                         $cat >try.c <<'EOCP'
13384 typedef double NV;
13385 EOCP
13386                 fi
13387                 $cat >>try.c <<'EOCP'
13388 #include <stdio.h>
13389 struct foobar {
13390         char foo;
13391         NV bar;
13392 } try_algn;
13393 int main()
13394 {
13395     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
13396     return(0);
13397 }
13398 EOCP
13399                 set try
13400                 if eval $compile_ok; then
13401                         dflt=`$run ./try`
13402                 else
13403                         dflt='8'
13404                         echo "(I can't seem to compile the test program...)"
13405                 fi
13406                 ;;
13407         *) dflt="$alignbytes"
13408                 ;;
13409         esac
13410         rp="Doubles must be aligned on a how-many-byte boundary?"
13411         . ./myread
13412         alignbytes="$ans"
13413         $rm -f try.c try
13414         ;;
13415 esac
13416
13417
13418 : set the base revision
13419 baserev=5.0
13420
13421 : how do we catenate cpp tokens here?
13422 echo " "
13423 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
13424 $cat >cpp_stuff.c <<'EOCP'
13425 #define RCAT(a,b)a/**/b
13426 #define ACAT(a,b)a ## b
13427 RCAT(Rei,ser)
13428 ACAT(Cir,cus)
13429 EOCP
13430 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
13431 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
13432         echo "Oh!  Smells like ANSI's been here." >&4
13433         echo "We can catify or stringify, separately or together!"
13434         cpp_stuff=42
13435 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
13436         echo "Ah, yes!  The good old days!" >&4
13437         echo "However, in the good old days we don't know how to stringify and"
13438         echo "catify at the same time."
13439         cpp_stuff=1
13440 else
13441         $cat >&4 <<EOM
13442 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
13443 to have to edit the values of CAT[2-5] in config.h...
13444 EOM
13445         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
13446 fi
13447 $rm -f cpp_stuff.*
13448
13449 : see if this is a db.h system
13450 set db.h i_db
13451 eval $inhdr
13452
13453 case "$i_db" in
13454 $define)
13455         : Check db version.
13456         echo " "
13457         echo "Checking Berkeley DB version ..." >&4
13458         $cat >try.c <<EOCP
13459 #$d_const HASCONST
13460 #ifndef HASCONST
13461 #define const
13462 #endif
13463 #include <sys/types.h>
13464 #include <stdio.h>
13465 #include <db.h>
13466 int main(int argc, char *argv[])
13467 {
13468 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
13469     int Major, Minor, Patch ;
13470     unsigned long Version ;
13471     (void)db_version(&Major, &Minor, &Patch) ;
13472     if (argc == 2) {
13473         printf("%d %d %d %d %d %d\n",
13474                DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
13475                Major, Minor, Patch);
13476         exit(0);
13477     }
13478     printf("You have Berkeley DB Version 2 or greater.\n");
13479
13480     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
13481                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
13482     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
13483                 Major, Minor, Patch) ;
13484
13485     /* check that db.h & libdb are compatible */
13486     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
13487         printf("db.h and libdb are incompatible.\n") ;
13488         exit(3);        
13489     }
13490
13491     printf("db.h and libdb are compatible.\n") ;
13492
13493     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
13494                 + DB_VERSION_PATCH ;
13495
13496     /* needs to be >= 2.3.4 */
13497     if (Version < 2003004) {
13498     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
13499         printf("Perl needs Berkeley DB 2.3.4 or greater.\n") ;
13500         exit(2);        
13501     }
13502
13503     exit(0);
13504 #else
13505 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
13506     if (argc == 2) {
13507         printf("1 0 0\n");
13508         exit(0);
13509     }
13510     printf("You have Berkeley DB Version 1.\n");
13511     exit(0);    /* DB version < 2: the coast is clear. */
13512 #else
13513     exit(1);    /* <db.h> not Berkeley DB? */
13514 #endif
13515 #endif
13516 }
13517 EOCP
13518         set try
13519         if eval $compile_ok && $run ./try; then
13520                 echo 'Looks OK.' >&4
13521                 set `$run ./try 1`
13522                 db_version_major=$1
13523                 db_version_minor=$2
13524                 db_version_patch=$3
13525         else
13526                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
13527                 i_db=$undef
13528                 case " $libs " in
13529                 *"-ldb "*)
13530                         : Remove db from list of libraries to use
13531                         echo "Removing unusable -ldb from library list" >&4
13532                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
13533                         shift
13534                         libs="$*"
13535                         echo "libs = $libs" >&4
13536                         ;;
13537                 esac
13538         fi
13539         $rm -f try.*
13540         ;;
13541 esac
13542
13543 case "$i_db" in
13544 define)
13545         : Check the return type needed for hash 
13546         echo " "
13547         echo "Checking return type needed for hash for Berkeley DB ..." >&4
13548         $cat >try.c <<EOCP
13549 #$d_const HASCONST
13550 #ifndef HASCONST
13551 #define const
13552 #endif
13553 #include <sys/types.h>
13554 #include <db.h>
13555
13556 #ifndef DB_VERSION_MAJOR
13557 u_int32_t hash_cb (ptr, size)
13558 const void *ptr;
13559 size_t size;
13560 {
13561 }
13562 HASHINFO info;
13563 int main()
13564 {
13565         info.hash = hash_cb;
13566 }
13567 #endif
13568 EOCP
13569         if $cc $ccflags -c try.c >try.out 2>&1 ; then
13570                 if $contains warning try.out >>/dev/null 2>&1 ; then
13571                         db_hashtype='int'
13572                 else
13573                         db_hashtype='u_int32_t'
13574                 fi
13575         else
13576                 : XXX Maybe we should just give up here.
13577                 db_hashtype=u_int32_t
13578                 $cat try.out >&4
13579                 echo "Help:  I can't seem to compile the db test program." >&4
13580                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
13581         fi
13582         $rm -f try.*
13583         echo "Your version of Berkeley DB uses $db_hashtype for hash."
13584         ;;
13585 *)      db_hashtype=u_int32_t
13586         ;;
13587 esac
13588 case "$i_db" in
13589 define)
13590         : Check the return type needed for prefix 
13591         echo " "
13592         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
13593         cat >try.c <<EOCP
13594 #$d_const HASCONST
13595 #ifndef HASCONST
13596 #define const
13597 #endif
13598 #include <sys/types.h>
13599 #include <db.h>
13600
13601 #ifndef DB_VERSION_MAJOR
13602 size_t prefix_cb (key1, key2)
13603 const DBT *key1;
13604 const DBT *key2;
13605 {
13606 }
13607 BTREEINFO info;
13608 int main()
13609 {
13610         info.prefix = prefix_cb;
13611 }
13612 #endif
13613 EOCP
13614         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
13615                 if $contains warning try.out >>/dev/null 2>&1 ; then
13616                         db_prefixtype='int'
13617                 else
13618                         db_prefixtype='size_t'
13619                 fi
13620         else
13621                 db_prefixtype='size_t'
13622                 : XXX Maybe we should just give up here.
13623                 $cat try.out >&4
13624                 echo "Help:  I can't seem to compile the db test program." >&4
13625                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
13626         fi
13627         $rm -f try.*
13628         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
13629         ;;
13630 *)      db_prefixtype='size_t'
13631         ;;
13632 esac
13633
13634
13635 : How can we generate normalized random numbers ?
13636 echo " "
13637 echo "Looking for a random number function..." >&4
13638 case "$randfunc" in
13639 '')
13640         if set drand48 val -f; eval $csym; $val; then
13641                 dflt="drand48"
13642                 echo "Good, found drand48()." >&4
13643         elif set random val -f; eval $csym; $val; then
13644                 dflt="random"
13645                 echo "OK, found random()." >&4
13646         else
13647                 dflt="rand"
13648                 echo "Yick, looks like I have to use rand()." >&4
13649         fi
13650         echo " "
13651         ;;
13652 *)
13653         dflt="$randfunc"
13654         ;;
13655 esac
13656 cont=true
13657
13658 case "$ccflags" in
13659 *-Dmy_rand=*|*-Dmy_srand=*)
13660         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
13661         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
13662         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
13663         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
13664         ;;
13665 esac
13666
13667 while $test "$cont"; do
13668         rp="Use which function to generate random numbers?"
13669         . ./myread
13670         if $test "$ans" = "$dflt"; then
13671                 : null
13672         else
13673                 randbits=''
13674         fi
13675         randfunc="$ans"
13676         if set $ans val -f; eval $csym; $val; then
13677                 cont=''
13678         else
13679                 dflt=y
13680                 rp="I cannot find function $ans. Use that name anyway?"
13681                 . ./myread
13682                 dflt=rand
13683                 case "$ans" in
13684                         [yY]*) cont='';;
13685                 esac
13686         fi
13687         case "$cont" in
13688         '')
13689                 case "$randfunc" in
13690                 drand48)
13691                         drand01="drand48()"
13692                         seedfunc="srand48"
13693                         randbits=48
13694                         randseedtype=long
13695                         ;;
13696                 rand|random)
13697                         case "$randbits" in
13698                         '')
13699 echo "Checking to see how many bits your $randfunc() function produces..." >&4
13700                                 $cat >try.c <<EOCP
13701 #$i_unistd I_UNISTD
13702 #$i_stdlib I_STDLIB
13703 #include <stdio.h>
13704 #ifdef I_UNISTD
13705 #  include <unistd.h>
13706 #endif
13707 #ifdef I_STDLIB
13708 #  include <stdlib.h>
13709 #endif
13710 int main()
13711 {
13712         register int i;
13713         register unsigned long tmp;
13714         register unsigned long max = 0L;
13715
13716         for (i = 1000; i; i--) {
13717                 tmp = (unsigned long) $randfunc();
13718                 if (tmp > max) max = tmp;
13719         }
13720         for (i = 0; max; i++)
13721                 max /= 2;
13722         printf("%d\n",i);
13723 }
13724 EOCP
13725                                 set try
13726                                 if eval $compile_ok; then
13727                                         dflt=`try`
13728                                 else
13729                                         dflt='?'
13730                                         echo "(I can't seem to compile the test program...)"
13731                                 fi
13732                                 ;;
13733                         *)
13734                                 dflt="$randbits"
13735                                 ;;
13736                         esac
13737                         rp="How many bits does your $randfunc() function produce?"
13738                         . ./myread
13739                         randbits="$ans"
13740                         $rm -f try.c try
13741                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13742                         seedfunc="s$randfunc"
13743                         randseedtype=unsigned
13744                         ;;
13745                 *)
13746                         dflt="31"
13747                         rp="How many bits does your $randfunc() function produce?"
13748                         . ./myread
13749                         randbits="$ans"
13750                         seedfunc="s$randfunc"
13751                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13752                         if set $seedfunc val -f; eval $csym; $val; then
13753                                 echo "(Using $seedfunc() to seed random generator)"
13754                         else
13755                                 echo "(Warning: no $seedfunc() to seed random generator)"
13756                                 seedfunc=rand
13757                         fi
13758                         randseedtype=unsigned
13759                         ;;
13760                 esac
13761                 ;;
13762         esac
13763 done
13764
13765 echo " "
13766 echo "Determining whether or not we are on an EBCDIC system..." >&4
13767 $cat >try.c <<'EOM'
13768 int main()
13769 {
13770   if ('M'==0xd4) return 0;
13771   return 1;
13772 }
13773 EOM
13774
13775 val=$undef
13776 set try
13777 if eval $compile_ok; then
13778         if $run ./try; then
13779                 echo "You seem to speak EBCDIC." >&4
13780                 val="$define"
13781         else
13782                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4
13783         fi
13784 else
13785         echo "I'm unable to compile the test program." >&4
13786         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
13787 fi
13788 $rm -f try try.*
13789 set ebcdic
13790 eval $setvar
13791
13792 echo " "
13793 $cat >&4 <<EOM
13794 Checking how to flush all pending stdio output...
13795 EOM
13796 # I only know how to find the first 32 possibly open files on SunOS.
13797 # See also hints/sunos_4_1.sh and util.c  --AD
13798 case "$osname" in
13799 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
13800 esac
13801 $cat >>try.c <<EOCP
13802 #include <stdio.h>
13803 #$i_unistd I_UNISTD
13804 #ifdef I_UNISTD
13805 # include <unistd.h>
13806 #endif
13807 #$d_sysconf HAS_SYSCONF
13808 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
13809 #ifdef HAS_STDIO_STREAM_ARRAY
13810 # define STDIO_STREAM_ARRAY $stdio_stream_array
13811 #endif
13812 int main() {
13813   FILE* p;
13814   unlink("try.out");
13815   p = fopen("try.out", "w");
13816 #ifdef TRY_FPUTC
13817   fputc('x', p);
13818 #else
13819 # ifdef TRY_FPRINTF
13820   fprintf(p, "x");
13821 # endif
13822 #endif
13823 #ifdef TRY_FFLUSH_NULL
13824   fflush(NULL);
13825 #endif
13826 #ifdef TRY_FFLUSH_ALL
13827   {
13828     long open_max = -1;
13829 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
13830     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
13831 # else
13832 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
13833     open_max = sysconf(_SC_OPEN_MAX);
13834 #  else
13835 #   ifdef FOPEN_MAX
13836     open_max = FOPEN_MAX;
13837 #   else
13838 #    ifdef OPEN_MAX
13839     open_max = OPEN_MAX;
13840 #    else
13841 #     ifdef _NFILE
13842     open_max = _NFILE;
13843 #     endif
13844 #    endif
13845 #   endif
13846 #  endif
13847 # endif 
13848 # ifdef HAS_STDIO_STREAM_ARRAY
13849     if (open_max > 0) {
13850       long i;
13851       for (i = 0; i < open_max; i++)
13852             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
13853                 STDIO_STREAM_ARRAY[i]._file < open_max &&
13854                 STDIO_STREAM_ARRAY[i]._flag)
13855                 fflush(&STDIO_STREAM_ARRAY[i]);
13856     }   
13857   }
13858 # endif
13859 #endif
13860   _exit(42);
13861 }
13862 EOCP
13863 : first we have to find out how _not_ to flush
13864 $to try.c
13865 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
13866     output=''
13867     set try -DTRY_FPUTC
13868     if eval $compile; then
13869             $run ./try 2>/dev/null
13870             code="$?"
13871             $from try.out
13872             if $test ! -s try.out -a "X$code" = X42; then
13873                 output=-DTRY_FPUTC
13874             fi
13875     fi
13876     case "$output" in
13877     '')
13878             set try -DTRY_FPRINTF
13879             if eval $compile; then
13880                     $run ./try 2>/dev/null
13881                     code="$?"
13882                     $from try.out
13883                     if $test ! -s try.out -a "X$code" = X42; then
13884                         output=-DTRY_FPRINTF
13885                     fi
13886             fi
13887         ;;
13888     esac
13889 fi
13890 : check for fflush NULL behaviour
13891 case "$fflushNULL" in
13892 '')     set try -DTRY_FFLUSH_NULL $output
13893         if eval $compile; then
13894                 $run ./try 2>/dev/null
13895                 code="$?"
13896                 $from try.out
13897                 if $test -s try.out -a "X$code" = X42; then
13898                         fflushNULL="`$cat try.out`"
13899                 else
13900                         if $test "X$code" != X42; then
13901                                 $cat >&4 <<EOM
13902 (If this test failed, don't worry, we'll try another method shortly.)
13903 EOM
13904                         fi
13905                 fi
13906         fi
13907         $rm -f core try.core core.try.*
13908         case "$fflushNULL" in
13909         x)      $cat >&4 <<EOM
13910 Your fflush(NULL) works okay for output streams.
13911 Let's see if it clobbers input pipes...
13912 EOM
13913 # As of mid-March 2000 all versions of Solaris appear to have a stdio
13914 # bug that improperly flushes the input end of pipes.  So we avoid the
13915 # autoflush on fork/system/exec support for now. :-(
13916 $cat >tryp.c <<EOCP
13917 #include <stdio.h>
13918 int
13919 main(int argc, char **argv)
13920 {
13921     char buf[1024];
13922     int i;
13923     char *bp = buf;
13924     while (1) {
13925         while ((i = getc(stdin)) != -1
13926                && (*bp++ = i) != '\n'
13927                && bp < &buf[1024])
13928         /* DO NOTHING */ ;
13929         *bp = '\0';
13930         fprintf(stdout, "%s", buf);
13931         fflush(NULL);
13932         if (i == -1)
13933             return 0;
13934         bp = buf;
13935     }
13936 }
13937 EOCP
13938                 fflushNULL="$define"
13939                 set tryp
13940                 if eval $compile; then
13941                     $rm -f tryp.out
13942                     $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
13943                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
13944                        $cat >&4 <<EOM
13945 fflush(NULL) seems to behave okay with input streams.
13946 EOM
13947                         fflushNULL="$define"
13948                     else
13949                         $cat >&4 <<EOM
13950 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
13951 EOM
13952                         fflushNULL="$undef"
13953                     fi
13954                 fi
13955                 $rm -f core tryp.c tryp.core core.tryp.*
13956                 ;;
13957         '')     $cat >&4 <<EOM
13958 Your fflush(NULL) isn't working (contrary to ANSI C).
13959 EOM
13960                 fflushNULL="$undef"
13961                 ;;
13962         *)      $cat >&4 <<EOM
13963 Cannot figure out whether your fflush(NULL) works or not.
13964 I'm assuming it doesn't (contrary to ANSI C).
13965 EOM
13966                 fflushNULL="$undef"
13967                 ;;
13968         esac
13969         ;;
13970 $define|true|[yY]*)
13971         fflushNULL="$define"
13972         ;;
13973 *)
13974         fflushNULL="$undef"
13975         ;;
13976 esac
13977 : check explicit looping only if NULL did not work, and if the pipe
13978 : bug does not show up on an explicit flush too
13979 case "$fflushNULL" in
13980 "$undef")
13981         $cat >tryp.c <<EOCP
13982 #include <stdio.h>
13983 int
13984 main(int argc, char **argv)
13985 {
13986     char buf[1024];
13987     int i;
13988     char *bp = buf;
13989     while (1) {
13990         while ((i = getc(stdin)) != -1
13991                && (*bp++ = i) != '\n'
13992                && bp < &buf[1024])
13993         /* DO NOTHING */ ;
13994         *bp = '\0';
13995         fprintf(stdout, "%s", buf);
13996         fflush(stdin);
13997         if (i == -1)
13998             return 0;
13999         bp = buf;
14000     }
14001 }
14002 EOCP
14003         set tryp
14004         if eval $compile; then
14005             $rm -f tryp.out
14006             $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14007             if cmp tryp.c tryp.out >/dev/null 2>&1; then
14008                $cat >&4 <<EOM
14009 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
14010 EOM
14011                 : now check for fflushall behaviour
14012                 case "$fflushall" in
14013                 '')     set try -DTRY_FFLUSH_ALL $output
14014                         if eval $compile; then
14015                                 $cat >&4 <<EOM
14016 (Now testing the other method--but note that this also may fail.)
14017 EOM
14018                                 $run ./try 2>/dev/null
14019                                 code=$?
14020                                 $from try.out
14021                                 if $test -s try.out -a "X$code" = X42; then
14022                                         fflushall="`$cat try.out`"
14023                                 fi
14024                         fi
14025                         $rm -f core try.core core.try.*
14026                         case "$fflushall" in
14027                         x)      $cat >&4 <<EOM
14028 Whew. Flushing explicitly all the stdio streams works.
14029 EOM
14030                                 fflushall="$define"
14031                                 ;;
14032                         '')     $cat >&4 <<EOM
14033 Sigh. Flushing explicitly all the stdio streams doesn't work.
14034 EOM
14035                                 fflushall="$undef"
14036                                 ;;
14037                         *)      $cat >&4 <<EOM
14038 Cannot figure out whether flushing stdio streams explicitly works or not.
14039 I'm assuming it doesn't.
14040 EOM
14041                                 fflushall="$undef"
14042                                 ;;
14043                         esac
14044                         ;;
14045                 "$define"|true|[yY]*)
14046                         fflushall="$define"
14047                         ;;
14048                 *)
14049                         fflushall="$undef"
14050                         ;;
14051                 esac
14052             else
14053                 $cat >&4 <<EOM
14054 All is futile.  Even fflush(stdin) clobbers input pipes!
14055 EOM
14056                 fflushall="$undef"
14057             fi
14058         else
14059             fflushall="$undef"
14060         fi
14061         $rm -f core tryp.c tryp.core core.tryp.*
14062         ;;
14063 *)      fflushall="$undef"
14064         ;;
14065 esac
14066
14067 case "$fflushNULL$fflushall" in
14068 undefundef)
14069         $cat <<EOM
14070 OK, I give up.  I cannot figure out how to flush pending stdio output.
14071 We won't be flushing handles at all before fork/exec/popen.
14072 EOM
14073         ;;
14074 esac
14075 $rm -f try.* try$exe_ext
14076
14077 : Store the full pathname to the ar program for use in the C program
14078 : Respect a hint or command line value for full_ar.
14079 case "$full_ar" in
14080 '') full_ar=$ar ;;
14081 esac
14082
14083 : Store the full pathname to the sed program for use in the C program
14084 full_sed=$sed
14085
14086 : see what type gids are declared as in the kernel
14087 echo " "
14088 echo "Looking for the type for group ids returned by getgid()."
14089 set gid_t gidtype xxx stdio.h sys/types.h
14090 eval $typedef
14091 case "$gidtype" in
14092 xxx)
14093         xxx=`./findhdr sys/user.h`
14094         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
14095         case $1 in
14096         unsigned) dflt="$1 $2" ;;
14097         *) dflt="$1" ;;
14098         esac
14099         ;;
14100 *) dflt="$gidtype";;
14101 esac
14102 case "$gidtype" in
14103 gid_t) echo "gid_t found." ;;
14104 *)      rp="What is the type for group ids returned by getgid()?"
14105         . ./myread
14106         gidtype="$ans"
14107         ;;
14108 esac
14109
14110 echo " "
14111 case "$gidtype" in
14112 *_t) zzz="$gidtype"     ;;
14113 *)   zzz="gid"          ;;
14114 esac
14115 echo "Checking the size of $zzz..." >&4 
14116 cat > try.c <<EOCP
14117 #include <sys/types.h>
14118 #include <stdio.h>
14119 int main() {
14120     printf("%d\n", (int)sizeof($gidtype));
14121     exit(0);
14122 }
14123 EOCP
14124 set try
14125 if eval $compile_ok; then
14126         yyy=`$run ./try`
14127         case "$yyy" in
14128         '')     gidsize=4
14129                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
14130                 ;;
14131         *)      gidsize=$yyy
14132                 echo "Your $zzz is $gidsize bytes long."
14133                 ;;
14134         esac
14135 else
14136         gidsize=4
14137         echo "(I can't compile the test program--guessing $gidsize.)" >&4
14138 fi
14139
14140
14141 echo " "
14142 case "$gidtype" in
14143 *_t) zzz="$gidtype"     ;;
14144 *)   zzz="gid"          ;;
14145 esac
14146 echo "Checking the sign of $zzz..." >&4 
14147 cat > try.c <<EOCP
14148 #include <sys/types.h>
14149 #include <stdio.h>
14150 int main() {
14151         $gidtype foo = -1;
14152         if (foo < 0)
14153                 printf("-1\n");
14154         else
14155                 printf("1\n");
14156 }
14157 EOCP
14158 set try
14159 if eval $compile; then
14160         yyy=`$run ./try`
14161         case "$yyy" in
14162         '')     gidsign=1
14163                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14164                 ;;
14165         *)      gidsign=$yyy
14166                 case "$gidsign" in
14167                  1) echo "Your $zzz is unsigned." ;;
14168                 -1) echo "Your $zzz is signed."   ;;
14169                 esac
14170                 ;;
14171         esac
14172 else
14173         gidsign=1
14174         echo "(I can't compile the test program--guessing unsigned.)" >&4
14175 fi
14176
14177
14178 echo " "
14179
14180 if $test X"$quadtype" != X; then
14181
14182 echo "Checking how to print 64-bit integers..." >&4
14183
14184 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
14185         $cat >try.c <<'EOCP'
14186 #include <sys/types.h>
14187 #include <stdio.h>
14188 int main() {
14189   int q = 12345678901;
14190   printf("%ld\n", q);
14191 }
14192 EOCP
14193         set try
14194         if eval $compile; then
14195                 yyy=`$run ./try`
14196                 case "$yyy" in
14197                 12345678901)
14198                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
14199                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
14200                         echo "We will use %d."
14201                         ;;
14202                 esac
14203         fi
14204 fi
14205
14206 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
14207         $cat >try.c <<'EOCP'
14208 #include <sys/types.h>
14209 #include <stdio.h>
14210 int main() {
14211   long q = 12345678901;
14212   printf("%ld\n", q);
14213 }
14214 EOCP
14215         set try
14216         if eval $compile; then
14217                 yyy=`$run ./try`
14218                 case "$yyy" in
14219                 12345678901)
14220                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
14221                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
14222                         echo "We will use %ld."
14223                         ;;
14224                 esac
14225         fi
14226 fi
14227
14228 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
14229         $cat >try.c <<'EOCP'
14230 #include <sys/types.h>
14231 #include <inttypes.h>
14232 #include <stdio.h>
14233 int main() {
14234   int64_t q = 12345678901;
14235   printf("%" PRId64 "\n", q);
14236 }
14237 EOCP
14238         set try
14239         if eval $compile; then
14240                 yyy=`$run ./try`
14241                 case "$yyy" in
14242                 12345678901)
14243                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
14244                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
14245                         echo "We will use the C9X style."
14246                         ;;
14247                 esac
14248         fi
14249 fi
14250
14251 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14252         $cat >try.c <<EOCP
14253 #include <sys/types.h>
14254 #include <stdio.h>
14255 int main() {
14256   $quadtype q = 12345678901;
14257   printf("%Ld\n", q);
14258 }
14259 EOCP
14260         set try
14261         if eval $compile; then
14262                 yyy=`$run ./try`
14263                 case "$yyy" in
14264                 12345678901)
14265                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
14266                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
14267                         echo "We will use %Ld."
14268                         ;;
14269                 esac
14270         fi
14271 fi
14272
14273 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
14274         $cat >try.c <<'EOCP'
14275 #include <sys/types.h>
14276 #include <stdio.h>
14277 int main() {
14278   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
14279   printf("%lld\n", q);
14280 }
14281 EOCP
14282         set try
14283         if eval $compile; then
14284                 yyy=`$run ./try`
14285                 case "$yyy" in
14286                 12345678901)
14287                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
14288                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
14289                         echo "We will use the %lld style."
14290                         ;;
14291                 esac
14292         fi
14293 fi
14294
14295 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14296         $cat >try.c <<EOCP
14297 #include <sys/types.h>
14298 #include <stdio.h>
14299 int main() {
14300   $quadtype q = 12345678901;
14301   printf("%qd\n", q);
14302 }
14303 EOCP
14304         set try
14305         if eval $compile; then
14306                 yyy=`$run ./try`
14307                 case "$yyy" in
14308                 12345678901)
14309                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
14310                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
14311                         echo "We will use %qd."
14312                         ;;
14313                 esac
14314         fi
14315 fi
14316
14317 if $test X"$sPRId64" = X; then
14318         echo "Cannot figure out how to print 64-bit integers." >&4
14319 fi
14320
14321 $rm -f try try.*
14322
14323 fi
14324
14325 case "$sPRId64" in
14326 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
14327         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; 
14328         ;;
14329 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
14330         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; 
14331         ;;
14332 esac
14333
14334
14335 echo " "
14336 $echo "Checking the format strings to be used for Perl's internal types..." >&4
14337
14338 if $test X"$ivsize" = X8; then
14339         ivdformat="$sPRId64"
14340         uvuformat="$sPRIu64"
14341         uvoformat="$sPRIo64"
14342         uvxformat="$sPRIx64"
14343         uvXUformat="$sPRIXU64"
14344 else
14345         if $test X"$ivsize" = X"$longsize"; then
14346                 ivdformat='"ld"'
14347                 uvuformat='"lu"'
14348                 uvoformat='"lo"'
14349                 uvxformat='"lx"'
14350                 uvXUformat='"lX"'
14351         else
14352                 if $test X"$ivsize" = X"$intsize"; then
14353                         ivdformat='"d"'
14354                         uvuformat='"u"'
14355                         uvoformat='"o"'
14356                         uvxformat='"x"'
14357                         uvXUformat='"X"'
14358                 else
14359                         : far out
14360                         if $test X"$ivsize" = X"$shortsize"; then
14361                                 ivdformat='"hd"'
14362                                 uvuformat='"hu"'
14363                                 uvoformat='"ho"'
14364                                 uvxformat='"hx"'
14365                                 uvXUformat='"hX"'
14366                         fi
14367                 fi
14368         fi
14369 fi
14370
14371 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
14372         nveformat="$sPRIeldbl"
14373         nvfformat="$sPRIfldbl"
14374         nvgformat="$sPRIgldbl"
14375         nvEUformat="$sPRIEUldbl"
14376         nvFUformat="$sPRIFUldbl"
14377         nvGUformat="$sPRIGUldbl"
14378 else
14379         nveformat='"e"'
14380         nvfformat='"f"'
14381         nvgformat='"g"'
14382         nvEUformat='"E"'
14383         nvFUformat='"F"'
14384         nvGUformat='"G"'
14385 fi
14386
14387 case "$ivdformat" in
14388 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
14389     exit 1
14390     ;;
14391 esac
14392
14393
14394 echo " "
14395 $echo "Checking the format string to be used for gids..." >&4
14396
14397 case "$gidsign" in
14398 -1)     if $test X"$gidsize" = X"$ivsize"; then
14399                 gidformat="$ivdformat"
14400         else
14401                 if $test X"$gidsize" = X"$longsize"; then
14402                         gidformat='"ld"'
14403                 else
14404                         if $test X"$gidsize" = X"$intsize"; then
14405                                 gidformat='"d"'
14406                         else
14407                                 if $test X"$gidsize" = X"$shortsize"; then
14408                                         gidformat='"hd"'
14409                                 fi
14410                         fi
14411                 fi
14412         fi
14413         ;;
14414 *)      if $test X"$gidsize" = X"$uvsize"; then
14415                 gidformat="$uvuformat"
14416         else
14417                 if $test X"$gidsize" = X"$longsize"; then
14418                         gidformat='"lu"'
14419                 else
14420                         if $test X"$gidsize" = X"$intsize"; then
14421                                 gidformat='"u"'
14422                         else
14423                                 if $test X"$gidsize" = X"$shortsize"; then
14424                                         gidformat='"hu"'
14425                                 fi
14426                         fi
14427                 fi
14428         fi
14429         ;;
14430 esac
14431
14432 : see if getgroups exists
14433 set getgroups d_getgrps
14434 eval $inlibc
14435
14436 : see if setgroups exists
14437 set setgroups d_setgrps
14438 eval $inlibc
14439
14440
14441 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
14442 echo " "
14443 case "$d_getgrps$d_setgrps" in
14444 *define*)
14445         case "$groupstype" in
14446         '') dflt="$gidtype" ;;
14447         *)  dflt="$groupstype" ;;
14448         esac
14449         $cat <<EOM
14450 What type of pointer is the second argument to getgroups() and setgroups()?
14451 Usually this is the same as group ids, $gidtype, but not always.
14452
14453 EOM
14454         rp='What type pointer is the second argument to getgroups() and setgroups()?'
14455         . ./myread
14456         groupstype="$ans"
14457         ;;
14458 *)  groupstype="$gidtype";;
14459 esac
14460
14461 echo " "
14462 echo "Checking if your $make program sets \$(MAKE)..." >&4
14463 case "$make_set_make" in
14464 '')
14465         $sed 's/^X //' > testmake.mak << 'EOF'
14466 Xall:
14467 X       @echo 'maketemp="$(MAKE)"'
14468 EOF
14469         case "`$make -f testmake.mak 2>/dev/null`" in
14470         *maketemp=*) make_set_make='#' ;;
14471         *)      make_set_make="MAKE=$make" ;;
14472         esac
14473         $rm -f testmake.mak
14474         ;;
14475 esac
14476 case "$make_set_make" in
14477 '#') echo "Yup, it does.";;
14478 *) echo "Nope, it doesn't.";;
14479 esac
14480
14481 : see what type is used for mode_t
14482 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
14483 set mode_t modetype int stdio.h sys/types.h
14484 eval $typedef_ask
14485
14486 : see if stdarg is available
14487 echo " "
14488 if $test `./findhdr stdarg.h`; then
14489         echo "<stdarg.h> found." >&4
14490         valstd="$define"
14491 else
14492         echo "<stdarg.h> NOT found." >&4
14493         valstd="$undef"
14494 fi
14495
14496 : see if varags is available
14497 echo " "
14498 if $test `./findhdr varargs.h`; then
14499         echo "<varargs.h> found." >&4
14500 else
14501         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14502 fi
14503
14504 : set up the varargs testing programs
14505 $cat > varargs.c <<EOP
14506 #ifdef I_STDARG
14507 #include <stdarg.h>
14508 #endif
14509 #ifdef I_VARARGS
14510 #include <varargs.h>
14511 #endif
14512
14513 #ifdef I_STDARG
14514 int f(char *p, ...)
14515 #else
14516 int f(va_alist)
14517 va_dcl
14518 #endif
14519 {
14520         va_list ap;
14521 #ifndef I_STDARG
14522         char *p;
14523 #endif
14524 #ifdef I_STDARG
14525         va_start(ap,p);
14526 #else
14527         va_start(ap);
14528         p = va_arg(ap, char *);
14529 #endif
14530         va_end(ap);
14531 }
14532 EOP
14533 $cat > varargs <<EOP
14534 $startsh
14535 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14536         echo "true"
14537 else
14538         echo "false"
14539 fi
14540 $rm -f varargs$_o
14541 EOP
14542 chmod +x varargs
14543
14544 : now check which varargs header should be included
14545 echo " "
14546 i_varhdr=''
14547 case "$valstd" in
14548 "$define")
14549         if `./varargs I_STDARG`; then
14550                 val='stdarg.h'
14551         elif `./varargs I_VARARGS`; then
14552                 val='varargs.h'
14553         fi
14554         ;;
14555 *)
14556         if `./varargs I_VARARGS`; then
14557                 val='varargs.h'
14558         fi
14559         ;;
14560 esac
14561 case "$val" in
14562 '')
14563 echo "I could not find the definition for va_dcl... You have problems..." >&4
14564         val="$undef"; set i_stdarg; eval $setvar
14565         val="$undef"; set i_varargs; eval $setvar
14566         ;;
14567 *) 
14568         set i_varhdr
14569         eval $setvar
14570         case "$i_varhdr" in
14571         stdarg.h)
14572                 val="$define"; set i_stdarg; eval $setvar
14573                 val="$undef"; set i_varargs; eval $setvar
14574                 ;;
14575         varargs.h)
14576                 val="$undef"; set i_stdarg; eval $setvar
14577                 val="$define"; set i_varargs; eval $setvar
14578                 ;;
14579         esac
14580         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14581 esac
14582 $rm -f varargs*
14583
14584 : see if we need va_copy
14585 echo " "
14586 case "$i_stdarg" in
14587 "$define")
14588         $cat >try.c <<EOCP
14589 #include <stdarg.h>
14590 #include <stdio.h>
14591 #$i_stdlib I_STDLIB
14592 #ifdef I_STDLIB
14593 #include <stdlib.h>
14594 #endif
14595 #include <signal.h>
14596
14597 int
14598 ivfprintf(FILE *f, const char *fmt, va_list *valp)
14599 {
14600   return vfprintf(f, fmt, *valp);
14601 }
14602  
14603 int    
14604 myvfprintf(FILE *f, const  char *fmt, va_list val)
14605 {
14606   return ivfprintf(f, fmt, &val);
14607 }
14608       
14609 int
14610 myprintf(char *fmt, ...) 
14611 {
14612   va_list val;
14613   va_start(val, fmt);
14614   return myvfprintf(stdout, fmt, val); 
14615 }         
14616
14617 int
14618 main(int ac, char **av)
14619 {
14620   signal(SIGSEGV, exit);
14621
14622   myprintf("%s%cs all right, then\n", "that", '\'');                            
14623   exit(0);      
14624 }
14625 EOCP
14626         set try
14627         if eval $compile && $run ./try 2>&1 >/dev/null; then
14628                 case "`$run ./try`" in
14629                 "that's all right, then")
14630                         okay=yes
14631                         ;;
14632                 esac
14633         fi
14634         case "$okay" in
14635         yes)    echo "It seems that you don't need va_copy()." >&4
14636                 need_va_copy="$undef"
14637                 ;;
14638         *)      echo "It seems that va_copy() or similar will be needed." >&4
14639                 need_va_copy="$define"
14640                 ;;
14641         esac
14642         $rm -f try.* core core.* *.core *.core.*
14643         ;;
14644 *)      echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
14645         ;;
14646 esac
14647
14648 : define a fucntion to check prototypes
14649 $cat > protochk <<EOSH
14650 $startsh
14651 cc="$cc"
14652 optimize="$optimize"
14653 ccflags="$ccflags"
14654 prototype="$prototype"
14655 define="$define"
14656 rm=$rm
14657 EOSH
14658
14659 $cat >> protochk <<'EOSH'
14660
14661 $rm -f try.c
14662 foo="$1"
14663 shift
14664 while test $# -ge 2; do
14665         case "$1" in
14666                 $define) echo "#include <$2>" >> try.c ;;
14667                 literal) echo "$2" >> try.c ;;
14668         esac
14669     shift 2
14670 done
14671 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
14672 cat >> try.c <<'EOCP'
14673 #ifdef CAN_PROTOTYPE
14674 #define _(args) args
14675 #else
14676 #define _(args) ()
14677 #endif
14678 EOCP
14679 echo "$foo" >> try.c
14680 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
14681 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
14682 status=$?
14683 $rm -f try.[co]
14684 exit $status
14685 EOSH
14686 chmod +x protochk
14687 $eunicefix protochk
14688
14689 : see what type is used for size_t
14690 rp="What is the type used for the length parameter for string functions?"
14691 set size_t sizetype 'unsigned int' stdio.h sys/types.h
14692 eval $typedef_ask
14693
14694 : check for type of arguments to gethostbyaddr. 
14695 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
14696         case "$d_gethbyaddr" in
14697         $define)
14698                 $cat <<EOM
14699
14700 Checking to see what type of arguments are accepted by gethostbyaddr().
14701 EOM
14702                 hdrs="$define sys/types.h
14703                         $d_socket sys/socket.h 
14704                         $i_niin netinet/in.h 
14705                         $i_netdb netdb.h
14706                         $i_unistd unistd.h"
14707                 : The first arg can 'char *' or 'void *'
14708                 : The second arg is some of integral type
14709                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
14710                         for yyy in size_t long int; do
14711                                 case "$netdb_host_type" in
14712                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
14713                                         if ./protochk "$try" $hdrs; then
14714                                                 echo "Your system accepts $xxx for the first arg."
14715                                                 echo "...and $yyy for the second arg."
14716                                                 netdb_host_type="$xxx"
14717                                                 netdb_hlen_type="$yyy"
14718                                         fi
14719                                         ;;
14720                                 esac
14721                         done
14722                 done
14723                 : In case none of those worked, prompt the user.
14724                 case "$netdb_host_type" in
14725                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
14726                         dflt='char *'
14727                         . ./myread
14728                         netdb_host_type=$ans
14729                         rp='What is the type for the 2nd argument to gethostbyaddr?'
14730                         dflt="$sizetype"
14731                         . ./myread
14732                         netdb_hlen_type=$ans
14733                         ;;
14734                 esac
14735                 ;;
14736         *)      : no gethostbyaddr, so pick harmless defaults
14737                 netdb_host_type='char *'
14738                 netdb_hlen_type="$sizetype"
14739                 ;;
14740         esac
14741         # Remove the "const" if needed. -- but then we'll have a 
14742         # prototype clash!
14743         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
14744 fi
14745
14746 : check for type of argument to gethostbyname. 
14747 if test "X$netdb_name_type" = X ; then
14748         case "$d_gethbyname" in
14749         $define)
14750                 $cat <<EOM
14751
14752 Checking to see what type of argument is accepted by gethostbyname().
14753 EOM
14754                 hdrs="$define sys/types.h
14755                         $d_socket sys/socket.h 
14756                         $i_niin netinet/in.h 
14757                         $i_netdb netdb.h
14758                         $i_unistd unistd.h"
14759                 for xxx in "const char *" "char *"; do
14760                         case "$netdb_name_type" in
14761                         '')     try="extern struct hostent *gethostbyname($xxx);"
14762                                 if ./protochk "$try" $hdrs; then
14763                                         echo "Your system accepts $xxx."
14764                                         netdb_name_type="$xxx"
14765                                 fi
14766                                 ;;
14767                         esac
14768                 done
14769                 : In case none of those worked, prompt the user.
14770                 case "$netdb_name_type" in
14771                 '')     rp='What is the type for the 1st argument to gethostbyname?'
14772                         dflt='char *'
14773                         . ./myread
14774                         netdb_name_type=$ans
14775                         ;;
14776                 esac
14777                 ;;
14778         *)      : no gethostbyname, so pick harmless default
14779                 netdb_name_type='char *'
14780                 ;;
14781         esac
14782 fi
14783
14784 : check for type of 1st argument to getnetbyaddr. 
14785 if test "X$netdb_net_type" = X ; then
14786         case "$d_getnbyaddr" in
14787         $define)
14788                 $cat <<EOM
14789
14790 Checking to see what type of 1st argument is accepted by getnetbyaddr().
14791 EOM
14792                 hdrs="$define sys/types.h
14793                         $d_socket sys/socket.h 
14794                         $i_niin netinet/in.h 
14795                         $i_netdb netdb.h
14796                         $i_unistd unistd.h"
14797                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
14798                         case "$netdb_net_type" in
14799                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
14800                                 if ./protochk "$try" $hdrs; then
14801                                         echo "Your system accepts $xxx."
14802                                         netdb_net_type="$xxx"
14803                                 fi
14804                                 ;;
14805                         esac
14806                 done
14807                 : In case none of those worked, prompt the user.
14808                 case "$netdb_net_type" in
14809                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
14810                         dflt='long'
14811                         . ./myread
14812                         netdb_net_type=$ans
14813                         ;;
14814                 esac
14815                 ;;
14816         *)      : no getnetbyaddr, so pick harmless default
14817                 netdb_net_type='long'
14818                 ;;
14819         esac
14820 fi
14821 : locate the preferred pager for this system
14822 case "$pager" in
14823 '')
14824         dflt=''
14825         case "$pg" in
14826         /*) dflt=$pg;;
14827         [a-zA-Z]:/*) dflt=$pg;;
14828         esac
14829         case "$more" in
14830         /*) dflt=$more;;
14831         [a-zA-Z]:/*) dflt=$more;;
14832         esac
14833         case "$less" in
14834         /*) dflt=$less;;
14835         [a-zA-Z]:/*) dflt=$less;;
14836         esac
14837         case "$dflt" in
14838         '') dflt=/usr/ucb/more;;
14839         esac
14840         ;;
14841 *) dflt="$pager";;
14842 esac
14843 echo " "
14844 fn=f/
14845 rp='What pager is used on your system?'
14846 . ./getfile
14847 pager="$ans"
14848
14849 : see what type pids are declared as in the kernel
14850 rp="What is the type of process ids on this system?"
14851 set pid_t pidtype int stdio.h sys/types.h
14852 eval $typedef_ask
14853
14854 : Find earliest binary compatible site_perl subdirectory perl can use.
14855 case "$bincompat5005" in
14856 "$define") xs_apiversion='5.005' ;;
14857 *) xs_apiversion=$version ;;   # The current site_perl version.
14858 esac
14859 : Find earliest pure perl site_perl subdirectory perl can use.
14860 : The versioned directories started at 5.005.
14861 pm_apiversion='5.005'
14862
14863 : see if ar generates random libraries by itself
14864 echo " "
14865 echo "Checking how to generate random libraries on your machine..." >&4
14866 echo 'int bar1() { return bar2(); }' > bar1.c
14867 echo 'int bar2() { return 2; }' > bar2.c
14868 $cat > foo.c <<'EOP'
14869 int main() { printf("%d\n", bar1()); exit(0); }
14870 EOP
14871 $cc $ccflags -c bar1.c >/dev/null 2>&1
14872 $cc $ccflags -c bar2.c >/dev/null 2>&1
14873 $cc $ccflags -c foo.c >/dev/null 2>&1
14874 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
14875 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
14876         $run ./foobar >/dev/null 2>&1; then
14877         echo "$ar appears to generate random libraries itself."
14878         orderlib=false
14879         ranlib=":"
14880 elif $ar ts bar$_a >/dev/null 2>&1 &&
14881         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
14882         $run ./foobar >/dev/null 2>&1; then
14883                 echo "a table of contents needs to be added with '$ar ts'."
14884                 orderlib=false
14885                 ranlib="$ar ts"
14886 else
14887         case "$ranlib" in
14888         :) ranlib='';;
14889         '')
14890                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
14891                 $test -f $ranlib || ranlib=''
14892                 ;;
14893         esac
14894         if $test -n "$ranlib"; then
14895                 echo "your system has '$ranlib'; we'll use that."
14896                 orderlib=false
14897         else
14898                 echo "your system doesn't seem to support random libraries"
14899                 echo "so we'll use lorder and tsort to order the libraries."
14900                 orderlib=true
14901                 ranlib=":"
14902         fi
14903 fi
14904 $rm -f foo* bar* 
14905
14906 : check for type of arguments to select. 
14907 case "$selecttype" in
14908 '') case "$d_select" in
14909         $define)
14910                 echo " "
14911                 $cat <<EOM
14912 Checking to see what type of arguments are accepted by select().
14913 EOM
14914                 hdrs="$define sys/types.h
14915                         $i_systime sys/time.h 
14916                         $i_sysselct sys/select.h
14917                         $d_socket sys/socket.h"
14918                 : The first arg can be int, unsigned, or size_t
14919                 : The last arg may or may not be 'const'
14920                 val=''
14921                 : void pointer has been seen but using that
14922                 : breaks the selectminbits test
14923                 for xxx in 'fd_set *' 'int *'; do
14924                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
14925                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
14926                                         case "$val" in
14927                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
14928                                                 if ./protochk "$try" $hdrs; then
14929                                                         echo "Your system accepts $xxx."
14930                                                         val="$xxx"
14931                                                 fi
14932                                                 ;;
14933                                         esac
14934                                 done
14935                         done
14936                 done
14937                 case "$val" in
14938                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
14939                         case "$d_fd_set" in
14940                                 $define) dflt="fd_set *" ;;
14941                                 *)              dflt="int *" ;;
14942                         esac
14943                         . ./myread
14944                         val=$ans
14945                         ;;
14946                 esac
14947                 selecttype="$val"
14948                 ;;
14949         *)      : no select, so pick a harmless default
14950                 selecttype='int *'
14951                 ;;
14952         esac
14953         ;;
14954 esac
14955
14956 : check for the select 'width'
14957 case "$selectminbits" in
14958 '') case "$d_select" in
14959         $define)
14960                 $cat <<EOM
14961
14962 Checking to see on how many bits at a time your select() operates...
14963 EOM
14964                 $cat >try.c <<EOCP
14965 #include <sys/types.h>
14966 #$i_time I_TIME
14967 #$i_systime I_SYS_TIME
14968 #$i_systimek I_SYS_TIME_KERNEL
14969 #ifdef I_TIME
14970 #   include <time.h>
14971 #endif
14972 #ifdef I_SYS_TIME
14973 #   ifdef I_SYS_TIME_KERNEL
14974 #       define KERNEL
14975 #   endif
14976 #   include <sys/time.h>
14977 #   ifdef I_SYS_TIME_KERNEL
14978 #       undef KERNEL
14979 #   endif
14980 #endif
14981 #$i_sysselct I_SYS_SELECT
14982 #ifdef I_SYS_SELECT
14983 #include <sys/select.h>
14984 #endif
14985 #$d_socket HAS_SOCKET
14986 #ifdef HAS_SOCKET
14987 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
14988 #endif
14989 #include <stdio.h>
14990 $selecttype b;
14991 #define S sizeof(*(b))
14992 #define MINBITS 64
14993 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
14994 #define NBITS  (NBYTES * 8)
14995 int main() {
14996     char s[NBYTES];
14997     struct timeval t;
14998     int i;
14999     FILE* fp;
15000     int fd;
15001
15002     fclose(stdin);
15003     fp = fopen("try.c", "r");
15004     if (fp == 0)
15005       exit(1);
15006     fd = fileno(fp);
15007     if (fd < 0)
15008       exit(2);
15009     b = ($selecttype)s;
15010     for (i = 0; i < NBITS; i++)
15011         FD_SET(i, b);
15012     t.tv_sec  = 0;
15013     t.tv_usec = 0;
15014     select(fd + 1, b, 0, 0, &t);
15015     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
15016     printf("%d\n", i + 1);
15017     return 0;
15018 }
15019 EOCP
15020                 set try
15021                 if eval $compile_ok; then
15022                         selectminbits=`$run ./try`
15023                         case "$selectminbits" in
15024                         '')     cat >&4 <<EOM
15025 Cannot figure out on how many bits at a time your select() operates.
15026 I'll play safe and guess it is 32 bits.
15027 EOM
15028                                 selectminbits=32
15029                                 bits="32 bits"
15030                                 ;;
15031                         1)      bits="1 bit" ;;
15032                         *)      bits="$selectminbits bits" ;;
15033                         esac
15034                         echo "Your select() operates on $bits at a time." >&4
15035                 else
15036                         rp='What is the minimum number of bits your select() operates on?'
15037                         case "$byteorder" in
15038                         1234|12345678)  dflt=32 ;;
15039                         *)              dflt=1  ;;
15040                         esac
15041                         . ./myread
15042                         val=$ans
15043                         selectminbits="$val"
15044                 fi
15045                 $rm -f try.* try
15046                 ;;
15047         *)      : no select, so pick a harmless default
15048                 selectminbits='32'
15049                 ;;
15050         esac
15051         ;;
15052 esac
15053
15054 : Trace out the files included by signal.h, then look for SIGxxx names.
15055 : Remove SIGARRAYSIZE used by HPUX.
15056 : Remove SIGSTKSIZE used by Linux.
15057 : Remove SIGSTKSZ used by Posix.
15058 : Remove SIGTYP void lines used by OS2.
15059 : Some cpps, like os390, dont give the file name anywhere
15060 if [ "X$fieldn" = X ]; then
15061         : Just make some guesses.  We check them later.
15062         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
15063 else
15064         xxx=`echo '#include <signal.h>' |
15065         $cppstdin $cppminus $cppflags 2>/dev/null |
15066         $grep '^[       ]*#.*include' | 
15067         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sed 's!\\\\\\\\!/!g' | $sort | $uniq`
15068 fi
15069 : Check this list of files to be sure we have parsed the cpp output ok.
15070 : This will also avoid potentially non-existent files, such 
15071 : as ../foo/bar.h
15072 xxxfiles=''
15073 for xx in $xxx /dev/null ; do
15074         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
15075 done
15076 : If we have found no files, at least try signal.h
15077 case "$xxxfiles" in
15078 '')     xxxfiles=`./findhdr signal.h` ;;
15079 esac
15080 xxx=`awk '
15081 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
15082         print substr($2, 4, 20)
15083 }
15084 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
15085         print substr($3, 4, 20)
15086 }' $xxxfiles`
15087 : Append some common names just in case the awk scan failed.
15088 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
15089 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
15090 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
15091 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
15092 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
15093
15094 : generate a few handy files for later
15095 $cat > signal.c <<'EOCP'
15096 #include <sys/types.h>
15097 #include <signal.h>
15098 #include <stdio.h>
15099 int main() {
15100
15101 /* Strange style to avoid deeply-nested #if/#else/#endif */
15102 #ifndef NSIG
15103 #  ifdef _NSIG
15104 #    define NSIG (_NSIG)
15105 #  endif
15106 #endif
15107
15108 #ifndef NSIG
15109 #  ifdef SIGMAX
15110 #    define NSIG (SIGMAX+1)
15111 #  endif
15112 #endif
15113
15114 #ifndef NSIG
15115 #  ifdef SIG_MAX
15116 #    define NSIG (SIG_MAX+1)
15117 #  endif
15118 #endif
15119
15120 #ifndef NSIG
15121 #  ifdef MAXSIG
15122 #    define NSIG (MAXSIG+1)
15123 #  endif
15124 #endif
15125
15126 #ifndef NSIG
15127 #  ifdef MAX_SIG
15128 #    define NSIG (MAX_SIG+1)
15129 #  endif
15130 #endif
15131
15132 #ifndef NSIG
15133 #  ifdef SIGARRAYSIZE
15134 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
15135 #  endif
15136 #endif
15137
15138 #ifndef NSIG
15139 #  ifdef _sys_nsig
15140 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
15141 #  endif
15142 #endif
15143
15144 /* Default to some arbitrary number that's big enough to get most
15145    of the common signals.
15146 */
15147 #ifndef NSIG
15148 #    define NSIG 50
15149 #endif
15150
15151 printf("NSIG %d\n", NSIG);
15152
15153 #ifndef JUST_NSIG
15154
15155 EOCP
15156
15157 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
15158 {
15159         printf "#ifdef SIG"; printf $1; printf "\n"
15160         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
15161         printf $1; printf ");\n"
15162         printf "#endif\n"
15163 }
15164 END {
15165         printf "#endif /* JUST_NSIG */\n";
15166         printf "exit(0);\n}\n";
15167 }
15168 ' >>signal.c
15169 $cat >signal.awk <<'EOP'
15170 BEGIN { ndups = 0 }
15171 $1 ~ /^NSIG$/ { nsig = $2 }
15172 ($1 !~ /^NSIG$/) && (NF == 2) {
15173     if ($2 > maxsig) { maxsig = $2 }
15174     if (sig_name[$2]) {
15175         dup_name[ndups] = $1
15176         dup_num[ndups] = $2
15177         ndups++ 
15178     }
15179     else {
15180         sig_name[$2] = $1
15181         sig_num[$2] = $2
15182     }
15183 }
15184 END { 
15185     if (nsig == 0) {
15186         nsig = maxsig + 1
15187     }
15188     printf("NSIG %d\n", nsig);
15189     for (n = 1; n < nsig; n++) {
15190         if (sig_name[n]) {
15191             printf("%s %d\n", sig_name[n], sig_num[n])
15192         }
15193         else {
15194             printf("NUM%d %d\n", n, n) 
15195         }
15196     }
15197     for (n = 0; n < ndups; n++) {
15198         printf("%s %d\n", dup_name[n], dup_num[n])
15199     }
15200 }
15201 EOP
15202 $cat >signal_cmd <<EOS
15203 $startsh
15204 if $test -s signal.lst; then
15205     echo "Using your existing signal.lst file"
15206         exit 0
15207 fi
15208 xxx="$xxx"
15209 EOS
15210 $cat >>signal_cmd <<'EOS'
15211
15212 set signal
15213 if eval $compile_ok; then
15214         $run ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15215 else
15216         echo "(I can't seem be able to compile the whole test program)" >&4
15217         echo "(I'll try it in little pieces.)" >&4
15218         set signal -DJUST_NSIG
15219         if eval $compile_ok; then
15220                 $run ./signal$_exe > signal.nsg
15221                 $cat signal.nsg
15222         else
15223                 echo "I can't seem to figure out how many signals you have." >&4
15224                 echo "Guessing 50." >&4
15225                 echo 'NSIG 50' > signal.nsg
15226         fi
15227         : Now look at all the signal names, one at a time.
15228         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
15229                 $cat > signal.c <<EOCP
15230 #include <sys/types.h>
15231 #include <signal.h>
15232 #include <stdio.h>
15233 int main() {
15234 printf("$xx %d\n", SIG${xx});
15235 return 0;
15236 }
15237 EOCP
15238                 set signal
15239                 if eval $compile; then
15240                         echo "SIG${xx} found."
15241                         $run ./signal$_exe  >> signal.ls1
15242                 else
15243                         echo "SIG${xx} NOT found."
15244                 fi
15245         done
15246         if $test -s signal.ls1; then
15247                 $cat signal.nsg signal.ls1 |
15248                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15249         fi
15250
15251 fi
15252 if $test -s signal.lst; then
15253         :
15254 else
15255         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
15256         echo 'kill -l' >signal
15257         set X `csh -f <signal`
15258         $rm -f signal
15259         shift
15260         case $# in
15261         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
15262         esac
15263         echo $@ | $tr ' ' $trnl | \
15264             $awk '{ printf "%s %d\n", $1, ++s; }
15265                   END { printf "NSIG %d\n", ++s }' >signal.lst
15266 fi
15267 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
15268 EOS
15269 chmod a+x signal_cmd
15270 $eunicefix signal_cmd
15271
15272 : generate list of signal names
15273 echo " "
15274 case "$sig_name_init" in
15275 '') doinit=yes ;;
15276 *)  case "$sig_num_init" in
15277     ''|*,*) doinit=yes ;;
15278     esac ;;
15279 esac
15280 case "$doinit" in
15281 yes)
15282         echo "Generating a list of signal names and numbers..." >&4
15283         . ./signal_cmd
15284         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
15285         sig_name=`$awk 'BEGIN { printf "ZERO " }
15286                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
15287         sig_num=`$awk  'BEGIN { printf "0 " }
15288                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
15289         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
15290                              !/^NSIG/   { printf "\"%s\", ", $1 }
15291                              END        { printf "0\n" }' signal.lst`
15292         sig_num_init=`$awk  'BEGIN      { printf "0, " }
15293                              !/^NSIG/   { printf "%d, ", $2}
15294                              END        { printf "0\n"}' signal.lst`
15295         ;;
15296 esac
15297 echo "The following $sig_count signals are available:"
15298 echo " "
15299 echo $sig_name | $awk \
15300 'BEGIN { linelen = 0 }
15301 {
15302         for (i = 1; i <= NF; i++) {
15303                 name = "SIG" $i " "
15304                 linelen = linelen + length(name)
15305                 if (linelen > 70) {
15306                         printf "\n"
15307                         linelen = length(name)
15308                 }
15309                 printf "%s", name
15310         }
15311         printf "\n"
15312 }'
15313 sig_size=`echo $sig_name | awk '{print NF}'`
15314 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
15315
15316 echo " "
15317 case "$sizetype" in
15318 *_t) zzz="$sizetype"    ;;
15319 *)   zzz="filesize"     ;;
15320 esac
15321 echo "Checking the size of $zzz..." >&4 
15322 cat > try.c <<EOCP
15323 #include <sys/types.h>
15324 #include <stdio.h>
15325 int main() {
15326     printf("%d\n", (int)sizeof($sizetype));
15327     exit(0);
15328 }
15329 EOCP
15330 set try
15331 if eval $compile_ok; then
15332         yyy=`$run ./try`
15333         case "$yyy" in
15334         '')     sizesize=4
15335                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
15336                 ;;
15337         *)      sizesize=$yyy
15338                 echo "Your $zzz size is $sizesize bytes."
15339                 ;;
15340         esac
15341 else
15342         sizesize=4
15343         echo "(I can't compile the test program--guessing $sizesize.)" >&4
15344 fi
15345
15346
15347 : check for socklen_t
15348 echo " "
15349 echo "Checking to see if you have socklen_t..." >&4
15350 $cat >try.c <<EOCP
15351 #include <sys/types.h>
15352 #$d_socket HAS_SOCKET
15353 #ifdef HAS_SOCKET
15354 #include <sys/socket.h>
15355 #endif
15356 int main() { socklen_t x = 16; }
15357 EOCP
15358 set try
15359 if eval $compile; then
15360         val="$define"
15361         echo "You have socklen_t."
15362 else
15363         val="$undef"
15364         echo "You do not have socklen_t."
15365         case "$sizetype" in
15366         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
15367         esac
15368 fi
15369 $rm -f try try.*
15370 set d_socklen_t
15371 eval $setvar
15372
15373 : see if this is a socks.h system
15374 set socks.h i_socks
15375 eval $inhdr
15376
15377 : check for type of the size argument to socket calls
15378 case "$d_socket" in
15379 "$define")
15380         $cat <<EOM
15381
15382 Checking to see what type is the last argument of accept().
15383 EOM
15384         yyy=''
15385         case "$d_socklen_t" in
15386         "$define") yyy="$yyy socklen_t"
15387         esac
15388         yyy="$yyy $sizetype int long unsigned"
15389         for xxx in $yyy; do
15390                 case "$socksizetype" in
15391                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
15392                         case "$usesocks" in
15393                         "$define")
15394                                 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
15395                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15396                                         socksizetype="$xxx"
15397                                 fi
15398                                 ;;
15399                         *)      if ./protochk "$try"  $i_systypes sys/types.h $d_socket sys/socket.h; then
15400                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15401                                         socksizetype="$xxx"
15402                                 fi
15403                                 ;;
15404                         esac
15405                         ;;
15406                 esac
15407         done
15408 : In case none of those worked, prompt the user.
15409         case "$socksizetype" in
15410         '')     rp='What is the type for socket address structure sizes?'
15411                 dflt='int'
15412                 . ./myread
15413                 socksizetype=$ans
15414                 ;;
15415         esac
15416         ;;
15417 *)      : no sockets, so pick relatively harmless default
15418         socksizetype='int'
15419         ;;
15420 esac
15421
15422 : see what type is used for signed size_t
15423 set ssize_t ssizetype int stdio.h sys/types.h
15424 eval $typedef
15425 dflt="$ssizetype"
15426 $cat > try.c <<EOM
15427 #include <stdio.h>
15428 #include <sys/types.h>
15429 #define Size_t $sizetype
15430 #define SSize_t $dflt
15431 int main()
15432 {
15433         if (sizeof(Size_t) == sizeof(SSize_t))
15434                 printf("$dflt\n");
15435         else if (sizeof(Size_t) == sizeof(int))
15436                 printf("int\n");
15437         else 
15438                 printf("long\n");
15439         exit(0);
15440 }
15441 EOM
15442 echo " "
15443 set try
15444 if eval $compile_ok && $run ./try > /dev/null; then
15445         ssizetype=`$run ./try`
15446         echo "I'll be using $ssizetype for functions returning a byte count." >&4
15447 else
15448         $cat >&4 <<EOM
15449 Help! I can't compile and run the ssize_t test program: please enlighten me!
15450 (This is probably a misconfiguration in your system or libraries, and
15451 you really ought to fix it.  Still, I'll try anyway.)
15452
15453 I need a type that is the same size as $sizetype, but is guaranteed to
15454 be signed.  Common values are ssize_t, int and long.
15455
15456 EOM
15457         rp="What signed type is the same size as $sizetype?"
15458         . ./myread
15459         ssizetype="$ans"
15460 fi
15461 $rm -f try try.*
15462
15463 : see what type of char stdio uses.
15464 echo " "
15465 echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
15466 if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
15467         echo "Your stdio uses unsigned chars." >&4
15468         stdchar="unsigned char"
15469 else
15470         echo "Your stdio uses signed chars." >&4
15471         stdchar="char"
15472 fi
15473 $rm -f stdioh
15474
15475
15476
15477 : see if time exists
15478 echo " "
15479 if test "X$d_time" = X -o X"$timetype" = X; then
15480     if set time val -f d_time; eval $csym; $val; then
15481                 echo 'time() found.' >&4
15482                 val="$define"
15483                 rp="What is the type returned by time() on this system?"
15484                 set time_t timetype long stdio.h sys/types.h
15485                 eval $typedef_ask
15486     else
15487                 echo 'time() not found, hope that will do.' >&4
15488                 val="$undef"
15489                 timetype='int';
15490     fi
15491     set d_time
15492     eval $setvar
15493 fi
15494
15495 : see what type uids are declared as in the kernel
15496 echo " "
15497 echo "Looking for the type for user ids returned by getuid()."
15498 set uid_t uidtype xxx stdio.h sys/types.h
15499 eval $typedef
15500 case "$uidtype" in
15501 xxx)
15502         xxx=`./findhdr sys/user.h`
15503         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
15504         case $1 in
15505         unsigned) dflt="$1 $2" ;;
15506         *) dflt="$1" ;;
15507         esac
15508         ;;
15509 *) dflt="$uidtype";;
15510 esac
15511 case "$uidtype" in
15512 uid_t)  echo "uid_t found." ;;
15513 *)      rp="What is the type for user ids returned by getuid()?"
15514         . ./myread
15515         uidtype="$ans"
15516         ;;
15517 esac
15518
15519 echo " "
15520 case "$uidtype" in
15521 *_t) zzz="$uidtype"     ;;
15522 *)   zzz="uid"          ;;
15523 esac
15524 echo "Checking the size of $zzz..." >&4 
15525 cat > try.c <<EOCP
15526 #include <sys/types.h>
15527 #include <stdio.h>
15528 int main() {
15529     printf("%d\n", (int)sizeof($uidtype));
15530     exit(0);
15531 }
15532 EOCP
15533 set try
15534 if eval $compile_ok; then
15535         yyy=`$run ./try`
15536         case "$yyy" in
15537         '')     uidsize=4
15538                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
15539                 ;;
15540         *)      uidsize=$yyy
15541                 echo "Your $zzz is $uidsize bytes long."
15542                 ;;
15543         esac
15544 else
15545         uidsize=4
15546         echo "(I can't compile the test program--guessing $uidsize.)" >&4
15547 fi
15548
15549 echo " "
15550 case "$uidtype" in
15551 *_t) zzz="$uidtype"     ;;
15552 *)   zzz="uid"          ;;
15553 esac
15554 echo "Checking the sign of $zzz..." >&4
15555 cat > try.c <<EOCP
15556 #include <sys/types.h>
15557 #include <stdio.h>
15558 int main() {
15559         $uidtype foo = -1;
15560         if (foo < 0)
15561                 printf("-1\n");
15562         else
15563                 printf("1\n");
15564 }
15565 EOCP
15566 set try
15567 if eval $compile; then
15568         yyy=`$run ./try`
15569         case "$yyy" in
15570         '')     uidsign=1
15571                 echo "(I can't execute the test program--guessing unsigned.)" >&4
15572                 ;;
15573         *)      uidsign=$yyy
15574                 case "$uidsign" in
15575                  1) echo "Your $zzz is unsigned." ;;
15576                 -1) echo "Your $zzz is signed."   ;;
15577                 esac
15578                 ;;
15579         esac
15580 else
15581         uidsign=1
15582         echo "(I can't compile the test program--guessing unsigned.)" >&4
15583 fi
15584
15585
15586
15587 echo " "
15588 $echo "Checking the format string to be used for uids..." >&4
15589
15590 case "$uidsign" in
15591 -1)     if $test X"$uidsize" = X"$ivsize"; then
15592                 uidformat="$ivdformat"
15593         else
15594                 if $test X"$uidsize" = X"$longsize"; then
15595                         uidformat='"ld"'
15596                 else
15597                         if $test X"$uidsize" = X"$intsize"; then
15598                                 uidformat='"d"'
15599                         else
15600                                 if $test X"$uidsize" = X"$shortsize"; then
15601                                         uidformat='"hd"'
15602                                 fi
15603                         fi
15604                 fi
15605         fi
15606         ;;
15607 *)      if $test X"$uidsize" = X"$uvsize"; then
15608                 uidformat="$uvuformat"
15609         else
15610                 if $test X"$uidsize" = X"$longsize"; then
15611                         uidformat='"lu"'
15612                 else
15613                         if $test X"$uidsize" = X"$intsize"; then
15614                                 uidformat='"u"'
15615                         else
15616                                 if $test X"$uidsize" = X"$shortsize"; then
15617                                         uidformat='"hu"'
15618                                 fi
15619                         fi
15620                 fi
15621         fi
15622         ;;
15623 esac
15624
15625 : determine compiler compiler
15626 case "$yacc" in
15627 '')
15628         dflt=yacc;;
15629 *)
15630         dflt="$yacc";;
15631 esac
15632 echo " "
15633 comp='yacc'
15634 if $test -f "$byacc"; then
15635         dflt="$byacc"
15636         comp="byacc or $comp"
15637 fi
15638 if $test -f "$bison"; then
15639         comp="$comp or bison -y"
15640 fi
15641 rp="Which compiler compiler ($comp) shall I use?"
15642 . ./myread
15643 yacc="$ans"
15644 case "$yacc" in
15645 *bis*)
15646         case "$yacc" in
15647         *-y*) ;;
15648         *)
15649                 yacc="$yacc -y"
15650                 echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
15651                 ;;
15652         esac
15653         ;;
15654 esac
15655
15656 : see if fcntl.h is there
15657 val=''
15658 set fcntl.h val
15659 eval $inhdr
15660
15661 : see if we can include fcntl.h
15662 case "$val" in
15663 "$define")
15664         echo " "
15665         if $h_fcntl; then
15666                 val="$define"
15667                 echo "We'll be including <fcntl.h>." >&4
15668         else
15669                 val="$undef"
15670                 if $h_sysfile; then
15671         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
15672                 else
15673                         echo "We won't be including <fcntl.h>." >&4
15674                 fi
15675         fi
15676         ;;
15677 *)
15678         h_fcntl=false
15679         val="$undef"
15680         ;;
15681 esac
15682 set i_fcntl
15683 eval $setvar
15684
15685 : see if this is a iconv.h system
15686 set iconv.h i_iconv
15687 eval $inhdr
15688
15689 : see if this is a ieeefp.h system
15690 set ieeefp.h i_ieeefp
15691 eval $inhdr
15692
15693 : see if this is a libutil.h system
15694 set libutil.h i_libutil
15695 eval $inhdr
15696
15697 : see if locale.h is available
15698 set locale.h i_locale
15699 eval $inhdr
15700
15701 : see if mach cthreads are available
15702 if test "X$usethreads" = "X$define"; then
15703         set mach/cthreads.h i_machcthr
15704         eval $inhdr
15705 else
15706         i_machcthr="$undef"
15707 fi
15708
15709
15710
15711 : see if this is a math.h system
15712 set math.h i_math
15713 eval $inhdr
15714
15715 : see if this is a mntent.h system
15716 set mntent.h i_mntent
15717 eval $inhdr
15718
15719 : see if ndbm.h is available
15720 set ndbm.h t_ndbm
15721 eval $inhdr
15722 case "$t_ndbm" in
15723 $define)
15724         : see if dbm_open exists
15725         set dbm_open d_dbm_open
15726         eval $inlibc
15727         case "$d_dbm_open" in
15728         $undef)
15729                 t_ndbm="$undef"
15730                 echo "We won't be including <ndbm.h>"
15731                 ;;
15732         esac
15733         ;;
15734 esac
15735 val="$t_ndbm"
15736 set i_ndbm
15737 eval $setvar
15738
15739 : see if net/errno.h is available
15740 val=''
15741 set net/errno.h val
15742 eval $inhdr
15743
15744 : Unfortunately, it causes problems on some systems.  Arrgh.
15745 case "$val" in
15746 $define)
15747         cat > try.c <<'EOM'
15748 #include <stdio.h>
15749 #include <errno.h>
15750 #include <net/errno.h>
15751 int func()
15752 {
15753         return ENOTSOCK;
15754 }
15755 EOM
15756         if $cc $ccflags -c try.c >/dev/null 2>&1; then
15757                 echo "We'll be including <net/errno.h>." >&4
15758         else
15759                 echo "We won't be including <net/errno.h>." >&4
15760                 val="$undef"
15761         fi
15762         $rm -f try.* try
15763         ;;
15764 esac
15765 set i_neterrno
15766 eval $setvar
15767
15768 : see if netinet/tcp.h is available
15769 set netinet/tcp.h i_netinettcp
15770 eval $inhdr
15771
15772 : see if this is a poll.h system
15773 set poll.h i_poll
15774 eval $inhdr
15775
15776 : see if this is a prot.h system
15777 set prot.h i_prot
15778 eval $inhdr
15779
15780 echo " "
15781 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
15782 $cat <<'EOSH' > Cppsym.know
15783 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
15784 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
15785 alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
15786 ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
15787 BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
15788 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
15789 bull c cadmus clipper CMU COFF COMPILER_VERSION
15790 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
15791 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
15792 Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
15793 FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
15794 GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
15795 H3050R H3050RX hbullx20 hcx host_mips
15796 hp200 hp300 hp700 HP700 hp800 hp9000
15797 hp9000s200 hp9000s300 hp9000s400 hp9000s500
15798 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
15799 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
15800 IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
15801 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
15802 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
15803 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
15804 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
15805 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
15806 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
15807 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
15808 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
15809 MATH_HAS_NO_SIDE_EFFECTS
15810 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
15811 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
15812 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
15813 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
15814 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
15815 NetBSD news1500 news1700 news1800 news1900 news3700
15816 news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
15817 ns32016 ns32332 ns32k nsc32000
15818 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
15819 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
15820 pc532 pdp11 PGC PIC plexus PORTAR posix
15821 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
15822 POSIX_C_SOURCE POSIX_SOURCE POWER
15823 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
15824 riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
15825 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
15826 sony sony_news sonyrisc sparc sparclite spectrum
15827 stardent stdc STDC_EXT stratos sun sun3 sun386
15828 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
15829 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
15830 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
15831 sysV68 sysV88 Tek4132 Tek4300 titan
15832 TM3200 TM5400 TM5600
15833 tower tower32 tower32_200 tower32_600 tower32_700
15834 tower32_800 tower32_850 tss
15835 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
15836 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
15837 unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
15838 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
15839 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
15840 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
15841 z8000
15842 EOSH
15843 # Maybe put other stuff here too.
15844 cat <<EOSH >>Cppsym.know
15845 $osname
15846 EOSH
15847 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
15848 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
15849 $cat Cppsym.know > Cppsym.c
15850 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
15851 $rm -f Cppsym.a Cppsym.b Cppsym.c
15852 cat <<EOSH > Cppsym
15853 $startsh
15854 if $test \$# -gt 0; then
15855     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
15856     if $test -s Cppsym.got; then
15857         $rm -f Cppsym.got
15858         exit 0
15859     fi
15860     $rm -f Cppsym.got
15861     exit 1
15862 else
15863     $tr " " "$trnl" | ./Cppsym.try
15864     exit 0
15865 fi
15866 EOSH
15867 chmod +x Cppsym
15868 $eunicefix Cppsym
15869 cat <<EOSH > Cppsym.try
15870 $startsh
15871 cat <<'EOCP' > try.c
15872 #include <stdio.h>
15873 int main() {
15874 EOCP
15875 $awk \\
15876 EOSH
15877 cat <<'EOSH' >> Cppsym.try
15878 'length($1) > 0 {
15879     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
15880     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
15881     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
15882     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
15883 }'       >> try.c
15884 echo 'return 0;}' >> try.c
15885 EOSH
15886 cat <<EOSH >> Cppsym.try
15887 ccflags="$ccflags"
15888 case "$osname-$gccversion" in
15889 irix-) ccflags="\$ccflags -woff 1178" ;;
15890 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
15891 esac
15892 $cc -o try $optimize \$ccflags $ldflags try.c $libs && $run ./try
15893 EOSH
15894 chmod +x Cppsym.try
15895 $eunicefix Cppsym.try
15896 ./Cppsym < Cppsym.know > Cppsym.true
15897 : now check the C compiler for additional symbols
15898 postprocess_cc_v=''
15899 case "$osname" in
15900 aix) postprocess_cc_v="|$tr , ' '" ;;
15901 esac
15902 $cat >ccsym <<EOS
15903 $startsh
15904 $cat >tmp.c <<EOF
15905 extern int foo;
15906 EOF
15907 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
15908 do
15909         case "\$i" in
15910         -D*) echo "\$i" | $sed 's/^-D//';;
15911         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
15912         esac
15913 done
15914 $rm -f try.c
15915 EOS
15916 postprocess_cc_v=''
15917 chmod +x ccsym
15918 $eunicefix ccsym
15919 ./ccsym > ccsym1.raw
15920 if $test -s ccsym1.raw; then
15921        $sort ccsym1.raw | $uniq >ccsym.raw
15922 else
15923        mv ccsym1.raw ccsym.raw
15924 fi
15925
15926 $awk '/\=/ { print $0; next }
15927         { print $0"=1" }' ccsym.raw >ccsym.list
15928 $awk '/\=/ { print $0; next }
15929         { print $0"=1" }' Cppsym.true >ccsym.true
15930 $comm -13 ccsym.true ccsym.list >ccsym.own
15931 $comm -12 ccsym.true ccsym.list >ccsym.com
15932 $comm -23 ccsym.true ccsym.list >ccsym.cpp
15933 also=''
15934 if $test -z ccsym.raw; then
15935         echo "Your C compiler doesn't seem to define any symbols!" >&4
15936         echo " "
15937         echo "However, your C preprocessor defines the following symbols:"
15938         $cat Cppsym.true
15939         ccsymbols=''
15940         cppsymbols=`$cat Cppsym.true`
15941         cppsymbols=`echo $cppsymbols`
15942         cppccsymbols="$cppsymbols"
15943 else
15944         if $test -s ccsym.com; then
15945                 echo "Your C compiler and pre-processor define these symbols:"
15946                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
15947                 also='also '
15948                 symbols='ones'
15949                 cppccsymbols=`$cat ccsym.com`
15950                 cppccsymbols=`echo $cppccsymbols`
15951                 $test "$silent" || sleep 1
15952         fi
15953         if $test -s ccsym.cpp; then
15954                 $test "$also" && echo " "
15955                 echo "Your C pre-processor ${also}defines the following symbols:"
15956                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
15957                 also='further '
15958                 cppsymbols=`$cat ccsym.cpp`
15959                 cppsymbols=`echo $cppsymbols`
15960                 $test "$silent" || sleep 1
15961         fi
15962         if $test -s ccsym.own; then
15963                 $test "$also" && echo " "
15964                 echo "Your C compiler ${also}defines the following cpp symbols:"
15965                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
15966                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
15967                 ccsymbols=`$cat ccsym.own`
15968                 ccsymbols=`echo $ccsymbols`
15969                 $test "$silent" || sleep 1
15970         fi
15971 fi
15972
15973 : see if this is a termio system
15974 val="$undef"
15975 val2="$undef"
15976 val3="$undef"
15977 if $test `./findhdr termios.h`; then
15978         set tcsetattr i_termios
15979         eval $inlibc
15980         val3="$i_termios"
15981 fi
15982 echo " "
15983 case "$val3" in
15984 "$define") echo "You have POSIX termios.h... good!" >&4;;
15985 *) if ./Cppsym pyr; then
15986                 case "`/bin/universe`" in
15987                 ucb) if $test `./findhdr sgtty.h`; then
15988                                 val2="$define"
15989                                 echo "<sgtty.h> found." >&4
15990                         else
15991                                 echo "System is pyramid with BSD universe."
15992                                 echo "<sgtty.h> not found--you could have problems." >&4
15993                         fi;;
15994                 *) if $test `./findhdr termio.h`; then
15995                                 val="$define"
15996                                 echo "<termio.h> found." >&4
15997                         else
15998                                 echo "System is pyramid with USG universe."
15999                                 echo "<termio.h> not found--you could have problems." >&4
16000                         fi;;
16001                 esac
16002         elif ./usg; then
16003                 if $test `./findhdr termio.h`; then
16004                         echo "<termio.h> found." >&4
16005                         val="$define"
16006                 elif $test `./findhdr sgtty.h`; then
16007                         echo "<sgtty.h> found." >&4
16008                         val2="$define"
16009                 else
16010 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
16011                 fi
16012         else
16013                 if $test `./findhdr sgtty.h`; then
16014                         echo "<sgtty.h> found." >&4
16015                         val2="$define"
16016                 elif $test `./findhdr termio.h`; then
16017                         echo "<termio.h> found." >&4
16018                         val="$define"
16019                 else
16020 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
16021                 fi
16022         fi;;
16023 esac
16024 set i_termio; eval $setvar
16025 val=$val2; set i_sgtty; eval $setvar
16026 val=$val3; set i_termios; eval $setvar
16027
16028 : see if this is a shadow.h system
16029 set shadow.h i_shadow
16030 eval $inhdr
16031
16032 : see if stddef is available
16033 set stddef.h i_stddef
16034 eval $inhdr
16035
16036 : see if this is a sunmath.h system
16037 set sunmath.h i_sunmath
16038 eval $inhdr
16039
16040 : see if sys/access.h is available
16041 set sys/access.h i_sysaccess
16042 eval $inhdr
16043
16044 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
16045 set sys/filio.h i_sysfilio
16046 eval $inhdr
16047 echo " "
16048 if $test `./findhdr sys/ioctl.h`; then
16049         val="$define"
16050         echo '<sys/ioctl.h> found.' >&4
16051 else
16052         val="$undef"
16053         if $test $i_sysfilio = "$define"; then
16054             echo '<sys/ioctl.h> NOT found.' >&4
16055         else
16056                 $test $i_sgtty = "$define" && xxx="sgtty.h"
16057                 $test $i_termio = "$define" && xxx="termio.h"
16058                 $test $i_termios = "$define" && xxx="termios.h"
16059 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
16060         fi
16061 fi
16062 set i_sysioctl
16063 eval $setvar
16064
16065 : see if socket ioctl defs are in sys/sockio.h
16066 echo " "
16067 xxx=`./findhdr sys/sockio.h`
16068 if $test "$xxx"; then
16069         if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
16070                 val="$define"
16071                 echo "You have socket ioctls defined in <sys/sockio.h>." >&4
16072         else
16073                 val="$undef"
16074                 echo "No socket ioctls found in <sys/sockio.h>." >&4
16075         fi
16076 else
16077         val="$undef"
16078         $cat <<EOM
16079 <sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
16080 EOM
16081 fi
16082 set i_syssockio
16083 eval $setvar
16084
16085
16086 : see if this is a syslog.h system
16087 set syslog.h i_syslog
16088 eval $inhdr
16089
16090
16091 : see if this is a sys/mode.h system
16092 set sys/mode.h i_sysmode
16093 eval $inhdr
16094
16095 : see if sys/resource.h has to be included
16096 set sys/resource.h i_sysresrc
16097 eval $inhdr
16098
16099 : see if sys/security.h is available
16100 set sys/security.h i_syssecrt
16101 eval $inhdr
16102
16103 : see if this is a sys/statvfs.h system
16104 set sys/statvfs.h i_sysstatvfs
16105 eval $inhdr
16106
16107 : see if this is a sys/un.h system
16108 set sys/un.h i_sysun
16109 eval $inhdr
16110
16111
16112 : see if this is a sys/utsname.h system
16113 set sys/utsname.h i_sysutsname
16114 eval $inhdr
16115
16116 : see if this is a syswait system
16117 set sys/wait.h i_syswait
16118 eval $inhdr
16119
16120 : see if this is a ustat.h system
16121 set ustat.h i_ustat
16122 eval $inhdr
16123
16124 : see if this is an utime system
16125 set utime.h i_utime
16126 eval $inhdr
16127
16128 : see if this is a values.h system
16129 set values.h i_values
16130 eval $inhdr
16131
16132 : see if this is a vfork system
16133 case "$d_vfork" in
16134 "$define")
16135         set vfork.h i_vfork
16136         eval $inhdr
16137         ;;
16138 *)
16139         i_vfork="$undef"
16140         ;;
16141 esac
16142
16143 : see if gdbm.h is available
16144 set gdbm.h t_gdbm
16145 eval $inhdr
16146 case "$t_gdbm" in
16147 $define)
16148         : see if gdbm_open exists
16149         set gdbm_open d_gdbm_open
16150         eval $inlibc
16151         case "$d_gdbm_open" in
16152         $undef)
16153                 t_gdbm="$undef"
16154                 echo "We won't be including <gdbm.h>"
16155                 ;;
16156         esac
16157         ;;
16158 esac
16159 val="$t_gdbm"
16160 set i_gdbm
16161 eval $setvar
16162
16163 echo " "
16164 echo "Looking for extensions..." >&4
16165 : If we are using the old config.sh, known_extensions may contain
16166 : old or inaccurate or duplicate values.
16167 known_extensions=''
16168 nonxs_extensions=''
16169 : We do not use find because it might not be available.
16170 : We do not just use MANIFEST because the user may have dropped
16171 : some additional extensions into the source tree and expect them
16172 : to be built.
16173
16174 : Function to recursively find available extensions, ignoring DynaLoader
16175 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
16176 find_extensions='
16177     for xxx in *; do
16178        case "$xxx" in
16179            DynaLoader|dynaload) ;;
16180            *)
16181            if $test -f $xxx/$xxx.xs; then
16182                known_extensions="$known_extensions $1$xxx";
16183            elif $test -f $xxx/Makefile.PL; then
16184                nonxs_extensions="$nonxs_extensions $1$xxx";
16185            else
16186                if $test -d $xxx -a $# -lt 10; then
16187                    set $1$xxx/ $*;
16188                    cd $xxx;
16189                    eval $find_extensions;
16190                    cd ..;
16191                    shift;
16192                fi;
16193            fi
16194            ;;
16195        esac;
16196     done'
16197 tdir=`pwd`
16198 cd $rsrc/ext
16199 set X
16200 shift
16201 eval $find_extensions
16202 set X $nonxs_extensions
16203 shift
16204 nonxs_extensions="$*"
16205 set X $known_extensions
16206 shift
16207 known_extensions="$*"
16208 cd $tdir
16209
16210 : Now see which are supported on this system.
16211 avail_ext=''
16212 for xxx in $known_extensions ; do
16213         case "$xxx" in
16214         DB_File|db_file)
16215                 case "$i_db" in
16216                 $define) avail_ext="$avail_ext $xxx" ;;
16217                 esac
16218                 ;;
16219         GDBM_File|gdbm_fil)
16220                 case "$i_gdbm" in 
16221                 $define) avail_ext="$avail_ext $xxx" ;;
16222                 esac
16223                 ;;
16224         NDBM_File|ndbm_fil)
16225                 case "$i_ndbm" in
16226                 $define)
16227                     case "$osname-$use64bitint" in
16228                     cygwin-*|hpux-define)
16229                         case "$libs" in
16230                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
16231                         esac
16232                         ;;
16233                     *) avail_ext="$avail_ext $xxx" ;;
16234                     esac
16235                     ;;
16236                 esac
16237                 ;;
16238         ODBM_File|odbm_fil) 
16239                 case "${i_dbm}${i_rpcsvcdbm}" in
16240                 *"${define}"*)
16241                     case "$osname-$use64bitint" in
16242                     cygwin-*|hpux-define)
16243                         case "$libs" in
16244                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
16245                         esac
16246                         ;;
16247                     *) avail_ext="$avail_ext $xxx" ;;
16248                     esac
16249                     ;;
16250                 esac
16251                 ;;
16252         POSIX|posix)
16253                 case "$useposix" in
16254                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16255                 esac
16256                 ;;
16257         Opcode|opcode)
16258                 case "$useopcode" in
16259                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16260                 esac
16261                 ;;
16262         Socket|socket)
16263                 case "$d_socket" in 
16264                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16265                 esac
16266                 ;;
16267         Sys/Syslog|sys/syslog)
16268                 : XXX syslog requires socket
16269                 case "$d_socket" in 
16270                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16271                 esac
16272                 ;;
16273         Thread|thread)
16274                 case "$usethreads" in
16275                 true|$define|y)
16276                         case "$useithreads" in
16277                         $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;;
16278                         esac
16279                 esac
16280                 ;;
16281         IPC/SysV|ipc/sysv)
16282                 : XXX Do we need a useipcsysv variable here
16283                 case "${d_msg}${d_sem}${d_shm}" in 
16284                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
16285                 esac
16286                 ;;
16287         *)      avail_ext="$avail_ext $xxx"
16288                 ;;
16289         esac
16290 done
16291
16292 set X $avail_ext
16293 shift
16294 avail_ext="$*"
16295
16296 : Now see which nonxs extensions are supported on this system.
16297 : For now assume all are.
16298 nonxs_ext=''
16299 for xxx in $nonxs_extensions ; do
16300         case "$xxx" in
16301         *)      nonxs_ext="$nonxs_ext $xxx"
16302                 ;;
16303         esac
16304 done
16305
16306 set X $nonxs_ext
16307 shift
16308 nonxs_ext="$*"
16309
16310 case $usedl in
16311 $define)
16312         $cat <<EOM
16313 A number of extensions are supplied with $package.  You may choose to
16314 compile these extensions for dynamic loading (the default), compile
16315 them into the $package executable (static loading), or not include
16316 them at all.  Answer "none" to include no extensions.
16317 Note that DynaLoader is always built and need not be mentioned here.
16318
16319 EOM
16320         case "$dynamic_ext" in
16321         '') dflt="$avail_ext" ;;
16322         *)      dflt="$dynamic_ext"
16323                 # Perhaps we are reusing an old out-of-date config.sh.
16324                 case "$hint" in
16325                 previous)
16326                         if test X"$dynamic_ext" != X"$avail_ext"; then
16327                                 $cat <<EOM
16328 NOTICE:  Your previous config.sh list may be incorrect. 
16329 The extensions now available to you are 
16330         ${avail_ext}
16331 but the default list from your previous config.sh is
16332         ${dynamic_ext} 
16333
16334 EOM
16335                         fi
16336                         ;;
16337                 esac
16338                 ;;
16339         esac
16340         case "$dflt" in
16341         '')     dflt=none;;
16342         esac
16343         rp="What extensions do you wish to load dynamically?"
16344         . ./myread
16345         case "$ans" in
16346         none) dynamic_ext=' ' ;;
16347         *) dynamic_ext="$ans" ;;
16348         esac
16349
16350         case "$static_ext" in
16351         '')
16352                 : Exclude those already listed in dynamic linking
16353                 dflt=''
16354                 for xxx in $avail_ext; do
16355                         case " $dynamic_ext " in
16356                         *" $xxx "*) ;;
16357                         *) dflt="$dflt $xxx" ;;
16358                         esac
16359                 done
16360                 set X $dflt
16361                 shift
16362                 dflt="$*"
16363                 ;;
16364         *)  dflt="$static_ext" 
16365                 ;;
16366         esac
16367
16368         case "$dflt" in
16369         '')     dflt=none;;
16370         esac
16371         rp="What extensions do you wish to load statically?"
16372         . ./myread
16373         case "$ans" in
16374         none) static_ext=' ' ;;
16375         *) static_ext="$ans" ;;
16376         esac
16377         ;;
16378 *)
16379         $cat <<EOM
16380 A number of extensions are supplied with $package.  Answer "none" 
16381 to include no extensions. 
16382 Note that DynaLoader is always built and need not be mentioned here.
16383
16384 EOM
16385         case "$static_ext" in
16386         '') dflt="$avail_ext" ;;
16387         *)      dflt="$static_ext"
16388                 # Perhaps we are reusing an old out-of-date config.sh.
16389                 case "$hint" in
16390                 previous)
16391                         if test X"$static_ext" != X"$avail_ext"; then
16392                                 $cat <<EOM
16393 NOTICE:  Your previous config.sh list may be incorrect. 
16394 The extensions now available to you are 
16395         ${avail_ext}
16396 but the default list from your previous config.sh is
16397         ${static_ext} 
16398
16399 EOM
16400                         fi
16401                         ;;
16402                 esac
16403                 ;;
16404         esac
16405         : Exclude those that are not xs extensions
16406         case "$dflt" in
16407         '')     dflt=none;;
16408         esac
16409         rp="What extensions do you wish to include?"
16410         . ./myread
16411         case "$ans" in
16412         none) static_ext=' ' ;;
16413         *) static_ext="$ans" ;;
16414         esac
16415         ;;
16416 esac
16417
16418 set X $dynamic_ext $static_ext $nonxs_ext
16419 shift
16420 extensions="$*"
16421
16422 : Remove libraries needed only for extensions
16423 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
16424 : The exception is SunOS 4.x, which needs them.
16425 case "${osname}X${osvers}" in
16426 sunos*X4*)
16427     perllibs="$libs"
16428     ;;
16429 *) case "$usedl" in
16430     $define|true|[yY]*)
16431             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'` 
16432             shift
16433             perllibs="$*"
16434             ;;
16435     *)  perllibs="$libs"
16436             ;;
16437     esac
16438     ;;
16439 esac
16440
16441 : Remove build directory name from cppstdin so it can be used from
16442 : either the present location or the final installed location.
16443 echo " "
16444 : Get out of the UU directory to get correct path name.
16445 cd ..
16446 case "$cppstdin" in
16447 `pwd`/cppstdin)
16448         echo "Stripping down cppstdin path name"
16449         cppstdin=cppstdin
16450         ;;
16451 esac
16452 cd UU
16453
16454 : end of configuration questions
16455 echo " "
16456 echo "End of configuration questions."
16457 echo " "
16458
16459 : back to where it started
16460 if test -d ../UU; then
16461         cd ..
16462 fi
16463
16464 : configuration may be patched via a 'config.over' file
16465 if $test -f config.over; then
16466         echo " "
16467         dflt=y
16468         rp='I see a config.over file.  Do you wish to load it?'
16469         . UU/myread
16470         case "$ans" in
16471         n*) echo "OK, I'll ignore it.";;
16472         *)      . ./config.over
16473                 echo "Configuration override changes have been loaded."
16474                 ;;
16475         esac
16476 fi
16477
16478 : in case they want portability, strip down executable paths
16479 case "$d_portable" in
16480 "$define")
16481         echo " "
16482         echo "Stripping down executable paths..." >&4
16483         for file in $loclist $trylist; do
16484                 eval temp=\$$file
16485                 eval $file=`basename $temp`
16486         done
16487         ;;
16488 esac
16489
16490 : create config.sh file
16491 echo " "
16492 echo "Creating config.sh..." >&4
16493 $spitshell <<EOT >config.sh
16494 $startsh
16495 #
16496 # This file was produced by running the Configure script. It holds all the
16497 # definitions figured out by Configure. Should you modify one of these values,
16498 # do not forget to propagate your changes by running "Configure -der". You may
16499 # instead choose to run each of the .SH files by yourself, or "Configure -S".
16500 #
16501
16502 # Package name      : $package
16503 # Source directory  : $src
16504 # Configuration time: $cf_time
16505 # Configured by     : $cf_by
16506 # Target system     : $myuname
16507
16508 Author='$Author'
16509 Date='$Date'
16510 Header='$Header'
16511 Id='$Id'
16512 Locker='$Locker'
16513 Log='$Log'
16514 Mcc='$Mcc'
16515 RCSfile='$RCSfile'
16516 Revision='$Revision'
16517 Source='$Source'
16518 State='$State'
16519 _a='$_a'
16520 _exe='$_exe'
16521 _o='$_o'
16522 afs='$afs'
16523 afsroot='$afsroot'
16524 alignbytes='$alignbytes'
16525 ansi2knr='$ansi2knr'
16526 aphostname='$aphostname'
16527 api_revision='$api_revision'
16528 api_subversion='$api_subversion'
16529 api_version='$api_version'
16530 api_versionstring='$api_versionstring'
16531 ar='$ar'
16532 archlib='$archlib'
16533 archlibexp='$archlibexp'
16534 archname64='$archname64'
16535 archname='$archname'
16536 archobjs='$archobjs'
16537 awk='$awk'
16538 baserev='$baserev'
16539 bash='$bash'
16540 bin='$bin'
16541 bincompat5005='$bincompat5005'
16542 binexp='$binexp'
16543 bison='$bison'
16544 byacc='$byacc'
16545 byteorder='$byteorder'
16546 c='$c'
16547 castflags='$castflags'
16548 cat='$cat'
16549 cc='$cc'
16550 cccdlflags='$cccdlflags'
16551 ccdlflags='$ccdlflags'
16552 ccflags='$ccflags'
16553 ccflags_uselargefiles='$ccflags_uselargefiles'
16554 ccname='$ccname'
16555 ccsymbols='$ccsymbols'
16556 ccversion='$ccversion'
16557 cf_by='$cf_by'
16558 cf_email='$cf_email'
16559 cf_time='$cf_time'
16560 charsize='$charsize'
16561 chgrp='$chgrp'
16562 chmod='$chmod'
16563 chown='$chown'
16564 clocktype='$clocktype'
16565 comm='$comm'
16566 compress='$compress'
16567 contains='$contains'
16568 cp='$cp'
16569 cpio='$cpio'
16570 cpp='$cpp'
16571 cpp_stuff='$cpp_stuff'
16572 cppccsymbols='$cppccsymbols'
16573 cppflags='$cppflags'
16574 cpplast='$cpplast'
16575 cppminus='$cppminus'
16576 cpprun='$cpprun'
16577 cppstdin='$cppstdin'
16578 cppsymbols='$cppsymbols'
16579 cryptlib='$cryptlib'
16580 csh='$csh'
16581 d_Gconvert='$d_Gconvert'
16582 d_PRIEUldbl='$d_PRIEUldbl'
16583 d_PRIFUldbl='$d_PRIFUldbl'
16584 d_PRIGUldbl='$d_PRIGUldbl'
16585 d_PRIXU64='$d_PRIXU64'
16586 d_PRId64='$d_PRId64'
16587 d_PRIeldbl='$d_PRIeldbl'
16588 d_PRIfldbl='$d_PRIfldbl'
16589 d_PRIgldbl='$d_PRIgldbl'
16590 d_PRIi64='$d_PRIi64'
16591 d_PRIo64='$d_PRIo64'
16592 d_PRIu64='$d_PRIu64'
16593 d_PRIx64='$d_PRIx64'
16594 d_SCNfldbl='$d_SCNfldbl'
16595 d__fwalk='$d__fwalk'
16596 d_access='$d_access'
16597 d_accessx='$d_accessx'
16598 d_alarm='$d_alarm'
16599 d_archlib='$d_archlib'
16600 d_atolf='$d_atolf'
16601 d_atoll='$d_atoll'
16602 d_attribut='$d_attribut'
16603 d_bcmp='$d_bcmp'
16604 d_bcopy='$d_bcopy'
16605 d_bincompat5005='$d_bincompat5005'
16606 d_bsd='$d_bsd'
16607 d_bsdgetpgrp='$d_bsdgetpgrp'
16608 d_bsdsetpgrp='$d_bsdsetpgrp'
16609 d_bzero='$d_bzero'
16610 d_casti32='$d_casti32'
16611 d_castneg='$d_castneg'
16612 d_charvspr='$d_charvspr'
16613 d_chown='$d_chown'
16614 d_chroot='$d_chroot'
16615 d_chsize='$d_chsize'
16616 d_closedir='$d_closedir'
16617 d_cmsghdr_s='$d_cmsghdr_s'
16618 d_const='$d_const'
16619 d_crypt='$d_crypt'
16620 d_csh='$d_csh'
16621 d_cuserid='$d_cuserid'
16622 d_dbl_dig='$d_dbl_dig'
16623 d_dbminitproto='$d_dbminitproto'
16624 d_difftime='$d_difftime'
16625 d_dirnamlen='$d_dirnamlen'
16626 d_dlerror='$d_dlerror'
16627 d_dlopen='$d_dlopen'
16628 d_dlsymun='$d_dlsymun'
16629 d_dosuid='$d_dosuid'
16630 d_drand48proto='$d_drand48proto'
16631 d_dup2='$d_dup2'
16632 d_eaccess='$d_eaccess'
16633 d_endgrent='$d_endgrent'
16634 d_endhent='$d_endhent'
16635 d_endnent='$d_endnent'
16636 d_endpent='$d_endpent'
16637 d_endpwent='$d_endpwent'
16638 d_endsent='$d_endsent'
16639 d_eofnblk='$d_eofnblk'
16640 d_eunice='$d_eunice'
16641 d_fchdir='$d_fchdir'
16642 d_fchmod='$d_fchmod'
16643 d_fchown='$d_fchown'
16644 d_fcntl='$d_fcntl'
16645 d_fcntl_can_lock='$d_fcntl_can_lock'
16646 d_fd_macros='$d_fd_macros'
16647 d_fd_set='$d_fd_set'
16648 d_fds_bits='$d_fds_bits'
16649 d_fgetpos='$d_fgetpos'
16650 d_flexfnam='$d_flexfnam'
16651 d_flock='$d_flock'
16652 d_flockproto='$d_flockproto'
16653 d_fork='$d_fork'
16654 d_fpathconf='$d_fpathconf'
16655 d_fpos64_t='$d_fpos64_t'
16656 d_frexpl='$d_frexpl'
16657 d_fs_data_s='$d_fs_data_s'
16658 d_fseeko='$d_fseeko'
16659 d_fsetpos='$d_fsetpos'
16660 d_fstatfs='$d_fstatfs'
16661 d_fstatvfs='$d_fstatvfs'
16662 d_fsync='$d_fsync'
16663 d_ftello='$d_ftello'
16664 d_ftime='$d_ftime'
16665 d_getcwd='$d_getcwd'
16666 d_getespwnam='$d_getespwnam'
16667 d_getfsstat='$d_getfsstat'
16668 d_getgrent='$d_getgrent'
16669 d_getgrps='$d_getgrps'
16670 d_gethbyaddr='$d_gethbyaddr'
16671 d_gethbyname='$d_gethbyname'
16672 d_gethent='$d_gethent'
16673 d_gethname='$d_gethname'
16674 d_gethostprotos='$d_gethostprotos'
16675 d_getitimer='$d_getitimer'
16676 d_getlogin='$d_getlogin'
16677 d_getmnt='$d_getmnt'
16678 d_getmntent='$d_getmntent'
16679 d_getnbyaddr='$d_getnbyaddr'
16680 d_getnbyname='$d_getnbyname'
16681 d_getnent='$d_getnent'
16682 d_getnetprotos='$d_getnetprotos'
16683 d_getpagsz='$d_getpagsz'
16684 d_getpbyname='$d_getpbyname'
16685 d_getpbynumber='$d_getpbynumber'
16686 d_getpent='$d_getpent'
16687 d_getpgid='$d_getpgid'
16688 d_getpgrp2='$d_getpgrp2'
16689 d_getpgrp='$d_getpgrp'
16690 d_getppid='$d_getppid'
16691 d_getprior='$d_getprior'
16692 d_getprotoprotos='$d_getprotoprotos'
16693 d_getprpwnam='$d_getprpwnam'
16694 d_getpwent='$d_getpwent'
16695 d_getsbyname='$d_getsbyname'
16696 d_getsbyport='$d_getsbyport'
16697 d_getsent='$d_getsent'
16698 d_getservprotos='$d_getservprotos'
16699 d_getspnam='$d_getspnam'
16700 d_gettimeod='$d_gettimeod'
16701 d_gnulibc='$d_gnulibc'
16702 d_grpasswd='$d_grpasswd'
16703 d_hasmntopt='$d_hasmntopt'
16704 d_htonl='$d_htonl'
16705 d_iconv='$d_iconv'
16706 d_index='$d_index'
16707 d_inetaton='$d_inetaton'
16708 d_int64_t='$d_int64_t'
16709 d_isascii='$d_isascii'
16710 d_isnan='$d_isnan'
16711 d_isnanl='$d_isnanl'
16712 d_killpg='$d_killpg'
16713 d_lchown='$d_lchown'
16714 d_ldbl_dig='$d_ldbl_dig'
16715 d_link='$d_link'
16716 d_locconv='$d_locconv'
16717 d_lockf='$d_lockf'
16718 d_longdbl='$d_longdbl'
16719 d_longlong='$d_longlong'
16720 d_lseekproto='$d_lseekproto'
16721 d_lstat='$d_lstat'
16722 d_madvise='$d_madvise'
16723 d_mblen='$d_mblen'
16724 d_mbstowcs='$d_mbstowcs'
16725 d_mbtowc='$d_mbtowc'
16726 d_memchr='$d_memchr'
16727 d_memcmp='$d_memcmp'
16728 d_memcpy='$d_memcpy'
16729 d_memmove='$d_memmove'
16730 d_memset='$d_memset'
16731 d_mkdir='$d_mkdir'
16732 d_mkdtemp='$d_mkdtemp'
16733 d_mkfifo='$d_mkfifo'
16734 d_mkstemp='$d_mkstemp'
16735 d_mkstemps='$d_mkstemps'
16736 d_mktime='$d_mktime'
16737 d_mmap='$d_mmap'
16738 d_modfl='$d_modfl'
16739 d_modfl_pow32_bug='$d_modfl_pow32_bug'
16740 d_mprotect='$d_mprotect'
16741 d_msg='$d_msg'
16742 d_msg_ctrunc='$d_msg_ctrunc'
16743 d_msg_dontroute='$d_msg_dontroute'
16744 d_msg_oob='$d_msg_oob'
16745 d_msg_peek='$d_msg_peek'
16746 d_msg_proxy='$d_msg_proxy'
16747 d_msgctl='$d_msgctl'
16748 d_msgget='$d_msgget'
16749 d_msghdr_s='$d_msghdr_s'
16750 d_msgrcv='$d_msgrcv'
16751 d_msgsnd='$d_msgsnd'
16752 d_msync='$d_msync'
16753 d_munmap='$d_munmap'
16754 d_mymalloc='$d_mymalloc'
16755 d_nice='$d_nice'
16756 d_nv_preserves_uv='$d_nv_preserves_uv'
16757 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
16758 d_off64_t='$d_off64_t'
16759 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
16760 d_oldpthreads='$d_oldpthreads'
16761 d_oldsock='$d_oldsock'
16762 d_open3='$d_open3'
16763 d_pathconf='$d_pathconf'
16764 d_pause='$d_pause'
16765 d_perl_otherlibdirs='$d_perl_otherlibdirs'
16766 d_phostname='$d_phostname'
16767 d_pipe='$d_pipe'
16768 d_poll='$d_poll'
16769 d_portable='$d_portable'
16770 d_pthread_yield='$d_pthread_yield'
16771 d_pwage='$d_pwage'
16772 d_pwchange='$d_pwchange'
16773 d_pwclass='$d_pwclass'
16774 d_pwcomment='$d_pwcomment'
16775 d_pwexpire='$d_pwexpire'
16776 d_pwgecos='$d_pwgecos'
16777 d_pwpasswd='$d_pwpasswd'
16778 d_pwquota='$d_pwquota'
16779 d_qgcvt='$d_qgcvt'
16780 d_quad='$d_quad'
16781 d_readdir='$d_readdir'
16782 d_readlink='$d_readlink'
16783 d_readv='$d_readv'
16784 d_recvmsg='$d_recvmsg'
16785 d_rename='$d_rename'
16786 d_rewinddir='$d_rewinddir'
16787 d_rmdir='$d_rmdir'
16788 d_safebcpy='$d_safebcpy'
16789 d_safemcpy='$d_safemcpy'
16790 d_sanemcmp='$d_sanemcmp'
16791 d_sbrkproto='$d_sbrkproto'
16792 d_sched_yield='$d_sched_yield'
16793 d_scm_rights='$d_scm_rights'
16794 d_seekdir='$d_seekdir'
16795 d_select='$d_select'
16796 d_sem='$d_sem'
16797 d_semctl='$d_semctl'
16798 d_semctl_semid_ds='$d_semctl_semid_ds'
16799 d_semctl_semun='$d_semctl_semun'
16800 d_semget='$d_semget'
16801 d_semop='$d_semop'
16802 d_sendmsg='$d_sendmsg'
16803 d_setegid='$d_setegid'
16804 d_seteuid='$d_seteuid'
16805 d_setgrent='$d_setgrent'
16806 d_setgrps='$d_setgrps'
16807 d_sethent='$d_sethent'
16808 d_setitimer='$d_setitimer'
16809 d_setlinebuf='$d_setlinebuf'
16810 d_setlocale='$d_setlocale'
16811 d_setnent='$d_setnent'
16812 d_setpent='$d_setpent'
16813 d_setpgid='$d_setpgid'
16814 d_setpgrp2='$d_setpgrp2'
16815 d_setpgrp='$d_setpgrp'
16816 d_setprior='$d_setprior'
16817 d_setproctitle='$d_setproctitle'
16818 d_setpwent='$d_setpwent'
16819 d_setregid='$d_setregid'
16820 d_setresgid='$d_setresgid'
16821 d_setresuid='$d_setresuid'
16822 d_setreuid='$d_setreuid'
16823 d_setrgid='$d_setrgid'
16824 d_setruid='$d_setruid'
16825 d_setsent='$d_setsent'
16826 d_setsid='$d_setsid'
16827 d_setvbuf='$d_setvbuf'
16828 d_sfio='$d_sfio'
16829 d_shm='$d_shm'
16830 d_shmat='$d_shmat'
16831 d_shmatprototype='$d_shmatprototype'
16832 d_shmctl='$d_shmctl'
16833 d_shmdt='$d_shmdt'
16834 d_shmget='$d_shmget'
16835 d_sigaction='$d_sigaction'
16836 d_sigprocmask='$d_sigprocmask'
16837 d_sigsetjmp='$d_sigsetjmp'
16838 d_sockatmark='$d_sockatmark'
16839 d_sockatmarkproto='$d_sockatmarkproto'
16840 d_socket='$d_socket'
16841 d_socklen_t='$d_socklen_t'
16842 d_sockpair='$d_sockpair'
16843 d_socks5_init='$d_socks5_init'
16844 d_sqrtl='$d_sqrtl'
16845 d_sresgproto='$d_sresgproto'
16846 d_sresuproto='$d_sresuproto'
16847 d_statblks='$d_statblks'
16848 d_statfs_f_flags='$d_statfs_f_flags'
16849 d_statfs_s='$d_statfs_s'
16850 d_statvfs='$d_statvfs'
16851 d_stdio_cnt_lval='$d_stdio_cnt_lval'
16852 d_stdio_ptr_lval='$d_stdio_ptr_lval'
16853 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
16854 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
16855 d_stdio_stream_array='$d_stdio_stream_array'
16856 d_stdiobase='$d_stdiobase'
16857 d_stdstdio='$d_stdstdio'
16858 d_strchr='$d_strchr'
16859 d_strcoll='$d_strcoll'
16860 d_strctcpy='$d_strctcpy'
16861 d_strerrm='$d_strerrm'
16862 d_strerror='$d_strerror'
16863 d_strftime='$d_strftime'
16864 d_strtod='$d_strtod'
16865 d_strtol='$d_strtol'
16866 d_strtold='$d_strtold'
16867 d_strtoll='$d_strtoll'
16868 d_strtoq='$d_strtoq'
16869 d_strtoul='$d_strtoul'
16870 d_strtoull='$d_strtoull'
16871 d_strtouq='$d_strtouq'
16872 d_strxfrm='$d_strxfrm'
16873 d_suidsafe='$d_suidsafe'
16874 d_symlink='$d_symlink'
16875 d_syscall='$d_syscall'
16876 d_syscallproto='$d_syscallproto'
16877 d_sysconf='$d_sysconf'
16878 d_sysernlst='$d_sysernlst'
16879 d_syserrlst='$d_syserrlst'
16880 d_system='$d_system'
16881 d_tcgetpgrp='$d_tcgetpgrp'
16882 d_tcsetpgrp='$d_tcsetpgrp'
16883 d_telldir='$d_telldir'
16884 d_telldirproto='$d_telldirproto'
16885 d_time='$d_time'
16886 d_times='$d_times'
16887 d_truncate='$d_truncate'
16888 d_tzname='$d_tzname'
16889 d_u32align='$d_u32align'
16890 d_ualarm='$d_ualarm'
16891 d_umask='$d_umask'
16892 d_uname='$d_uname'
16893 d_union_semun='$d_union_semun'
16894 d_usleep='$d_usleep'
16895 d_usleepproto='$d_usleepproto'
16896 d_ustat='$d_ustat'
16897 d_vendorarch='$d_vendorarch'
16898 d_vendorbin='$d_vendorbin'
16899 d_vendorlib='$d_vendorlib'
16900 d_vfork='$d_vfork'
16901 d_void_closedir='$d_void_closedir'
16902 d_voidsig='$d_voidsig'
16903 d_voidtty='$d_voidtty'
16904 d_volatile='$d_volatile'
16905 d_vprintf='$d_vprintf'
16906 d_wait4='$d_wait4'
16907 d_waitpid='$d_waitpid'
16908 d_wcstombs='$d_wcstombs'
16909 d_wctomb='$d_wctomb'
16910 d_writev='$d_writev'
16911 d_xenix='$d_xenix'
16912 date='$date'
16913 db_hashtype='$db_hashtype'
16914 db_prefixtype='$db_prefixtype'
16915 db_version_major='$db_version_major'
16916 db_version_minor='$db_version_minor'
16917 db_version_patch='$db_version_patch'
16918 defvoidused='$defvoidused'
16919 direntrytype='$direntrytype'
16920 dlext='$dlext'
16921 dlsrc='$dlsrc'
16922 doublesize='$doublesize'
16923 drand01='$drand01'
16924 dynamic_ext='$dynamic_ext'
16925 eagain='$eagain'
16926 ebcdic='$ebcdic'
16927 echo='$echo'
16928 egrep='$egrep'
16929 emacs='$emacs'
16930 eunicefix='$eunicefix'
16931 exe_ext='$exe_ext'
16932 expr='$expr'
16933 extensions='$extensions'
16934 fflushNULL='$fflushNULL'
16935 fflushall='$fflushall'
16936 find='$find'
16937 firstmakefile='$firstmakefile'
16938 flex='$flex'
16939 fpossize='$fpossize'
16940 fpostype='$fpostype'
16941 freetype='$freetype'
16942 from='$from'
16943 full_ar='$full_ar'
16944 full_csh='$full_csh'
16945 full_sed='$full_sed'
16946 gccosandvers='$gccosandvers'
16947 gccversion='$gccversion'
16948 gidformat='$gidformat'
16949 gidsign='$gidsign'
16950 gidsize='$gidsize'
16951 gidtype='$gidtype'
16952 glibpth='$glibpth'
16953 grep='$grep'
16954 groupcat='$groupcat'
16955 groupstype='$groupstype'
16956 gzip='$gzip'
16957 h_fcntl='$h_fcntl'
16958 h_sysfile='$h_sysfile'
16959 hint='$hint'
16960 hostcat='$hostcat'
16961 i16size='$i16size'
16962 i16type='$i16type'
16963 i32size='$i32size'
16964 i32type='$i32type'
16965 i64size='$i64size'
16966 i64type='$i64type'
16967 i8size='$i8size'
16968 i8type='$i8type'
16969 i_arpainet='$i_arpainet'
16970 i_bsdioctl='$i_bsdioctl'
16971 i_db='$i_db'
16972 i_dbm='$i_dbm'
16973 i_dirent='$i_dirent'
16974 i_dld='$i_dld'
16975 i_dlfcn='$i_dlfcn'
16976 i_fcntl='$i_fcntl'
16977 i_float='$i_float'
16978 i_gdbm='$i_gdbm'
16979 i_grp='$i_grp'
16980 i_iconv='$i_iconv'
16981 i_ieeefp='$i_ieeefp'
16982 i_inttypes='$i_inttypes'
16983 i_libutil='$i_libutil'
16984 i_limits='$i_limits'
16985 i_locale='$i_locale'
16986 i_machcthr='$i_machcthr'
16987 i_malloc='$i_malloc'
16988 i_math='$i_math'
16989 i_memory='$i_memory'
16990 i_mntent='$i_mntent'
16991 i_ndbm='$i_ndbm'
16992 i_netdb='$i_netdb'
16993 i_neterrno='$i_neterrno'
16994 i_netinettcp='$i_netinettcp'
16995 i_niin='$i_niin'
16996 i_poll='$i_poll'
16997 i_prot='$i_prot'
16998 i_pthread='$i_pthread'
16999 i_pwd='$i_pwd'
17000 i_rpcsvcdbm='$i_rpcsvcdbm'
17001 i_sfio='$i_sfio'
17002 i_sgtty='$i_sgtty'
17003 i_shadow='$i_shadow'
17004 i_socks='$i_socks'
17005 i_stdarg='$i_stdarg'
17006 i_stddef='$i_stddef'
17007 i_stdlib='$i_stdlib'
17008 i_string='$i_string'
17009 i_sunmath='$i_sunmath'
17010 i_sysaccess='$i_sysaccess'
17011 i_sysdir='$i_sysdir'
17012 i_sysfile='$i_sysfile'
17013 i_sysfilio='$i_sysfilio'
17014 i_sysin='$i_sysin'
17015 i_sysioctl='$i_sysioctl'
17016 i_syslog='$i_syslog'
17017 i_sysmman='$i_sysmman'
17018 i_sysmode='$i_sysmode'
17019 i_sysmount='$i_sysmount'
17020 i_sysndir='$i_sysndir'
17021 i_sysparam='$i_sysparam'
17022 i_sysresrc='$i_sysresrc'
17023 i_syssecrt='$i_syssecrt'
17024 i_sysselct='$i_sysselct'
17025 i_syssockio='$i_syssockio'
17026 i_sysstat='$i_sysstat'
17027 i_sysstatfs='$i_sysstatfs'
17028 i_sysstatvfs='$i_sysstatvfs'
17029 i_systime='$i_systime'
17030 i_systimek='$i_systimek'
17031 i_systimes='$i_systimes'
17032 i_systypes='$i_systypes'
17033 i_sysuio='$i_sysuio'
17034 i_sysun='$i_sysun'
17035 i_sysutsname='$i_sysutsname'
17036 i_sysvfs='$i_sysvfs'
17037 i_syswait='$i_syswait'
17038 i_termio='$i_termio'
17039 i_termios='$i_termios'
17040 i_time='$i_time'
17041 i_unistd='$i_unistd'
17042 i_ustat='$i_ustat'
17043 i_utime='$i_utime'
17044 i_values='$i_values'
17045 i_varargs='$i_varargs'
17046 i_varhdr='$i_varhdr'
17047 i_vfork='$i_vfork'
17048 ignore_versioned_solibs='$ignore_versioned_solibs'
17049 inc_version_list='$inc_version_list'
17050 inc_version_list_init='$inc_version_list_init'
17051 incpath='$incpath'
17052 inews='$inews'
17053 installarchlib='$installarchlib'
17054 installbin='$installbin'
17055 installman1dir='$installman1dir'
17056 installman3dir='$installman3dir'
17057 installprefix='$installprefix'
17058 installprefixexp='$installprefixexp'
17059 installprivlib='$installprivlib'
17060 installscript='$installscript'
17061 installsitearch='$installsitearch'
17062 installsitebin='$installsitebin'
17063 installsitelib='$installsitelib'
17064 installstyle='$installstyle'
17065 installusrbinperl='$installusrbinperl'
17066 installvendorarch='$installvendorarch'
17067 installvendorbin='$installvendorbin'
17068 installvendorlib='$installvendorlib'
17069 intsize='$intsize'
17070 issymlink='$issymlink'
17071 ivdformat='$ivdformat'
17072 ivsize='$ivsize'
17073 ivtype='$ivtype'
17074 known_extensions='$known_extensions'
17075 ksh='$ksh'
17076 ld='$ld'
17077 lddlflags='$lddlflags'
17078 ldflags='$ldflags'
17079 ldflags_uselargefiles='$ldflags_uselargefiles'
17080 ldlibpthname='$ldlibpthname'
17081 less='$less'
17082 lib_ext='$lib_ext'
17083 libc='$libc'
17084 libperl='$libperl'
17085 libpth='$libpth'
17086 libs='$libs'
17087 libsdirs='$libsdirs'
17088 libsfiles='$libsfiles'
17089 libsfound='$libsfound'
17090 libspath='$libspath'
17091 libswanted='$libswanted'
17092 libswanted_uselargefiles='$libswanted_uselargefiles'
17093 line='$line'
17094 lint='$lint'
17095 lkflags='$lkflags'
17096 ln='$ln'
17097 lns='$lns'
17098 locincpth='$locincpth'
17099 loclibpth='$loclibpth'
17100 longdblsize='$longdblsize'
17101 longlongsize='$longlongsize'
17102 longsize='$longsize'
17103 lp='$lp'
17104 lpr='$lpr'
17105 ls='$ls'
17106 lseeksize='$lseeksize'
17107 lseektype='$lseektype'
17108 mail='$mail'
17109 mailx='$mailx'
17110 make='$make'
17111 make_set_make='$make_set_make'
17112 mallocobj='$mallocobj'
17113 mallocsrc='$mallocsrc'
17114 malloctype='$malloctype'
17115 man1dir='$man1dir'
17116 man1direxp='$man1direxp'
17117 man1ext='$man1ext'
17118 man3dir='$man3dir'
17119 man3direxp='$man3direxp'
17120 man3ext='$man3ext'
17121 mips_type='$mips_type'
17122 mkdir='$mkdir'
17123 mmaptype='$mmaptype'
17124 modetype='$modetype'
17125 more='$more'
17126 multiarch='$multiarch'
17127 mv='$mv'
17128 myarchname='$myarchname'
17129 mydomain='$mydomain'
17130 myhostname='$myhostname'
17131 myuname='$myuname'
17132 n='$n'
17133 need_va_copy='$need_va_copy'
17134 netdb_hlen_type='$netdb_hlen_type'
17135 netdb_host_type='$netdb_host_type'
17136 netdb_name_type='$netdb_name_type'
17137 netdb_net_type='$netdb_net_type'
17138 nm='$nm'
17139 nm_opt='$nm_opt'
17140 nm_so_opt='$nm_so_opt'
17141 nonxs_ext='$nonxs_ext'
17142 nroff='$nroff'
17143 nvEUformat='$nvEUformat'
17144 nvFUformat='$nvFUformat'
17145 nvGUformat='$nvGUformat'
17146 nveformat='$nveformat'
17147 nvfformat='$nvfformat'
17148 nvgformat='$nvgformat'
17149 nvsize='$nvsize'
17150 nvtype='$nvtype'
17151 o_nonblock='$o_nonblock'
17152 obj_ext='$obj_ext'
17153 old_pthread_create_joinable='$old_pthread_create_joinable'
17154 optimize='$optimize'
17155 orderlib='$orderlib'
17156 osname='$osname'
17157 osvers='$osvers'
17158 otherlibdirs='$otherlibdirs'
17159 package='$package'
17160 pager='$pager'
17161 passcat='$passcat'
17162 patchlevel='$patchlevel'
17163 path_sep='$path_sep'
17164 perl5='$perl5'
17165 perl='$perl'
17166 perl_patchlevel='$perl_patchlevel'
17167 perladmin='$perladmin'
17168 perllibs='$perllibs'
17169 perlpath='$perlpath'
17170 pg='$pg'
17171 phostname='$phostname'
17172 pidtype='$pidtype'
17173 plibpth='$plibpth'
17174 pm_apiversion='$pm_apiversion'
17175 pmake='$pmake'
17176 pr='$pr'
17177 prefix='$prefix'
17178 prefixexp='$prefixexp'
17179 privlib='$privlib'
17180 privlibexp='$privlibexp'
17181 prototype='$prototype'
17182 ptrsize='$ptrsize'
17183 quadkind='$quadkind'
17184 quadtype='$quadtype'
17185 randbits='$randbits'
17186 randfunc='$randfunc'
17187 randseedtype='$randseedtype'
17188 ranlib='$ranlib'
17189 rd_nodata='$rd_nodata'
17190 revision='$revision'
17191 rm='$rm'
17192 rmail='$rmail'
17193 run='$run'
17194 runnm='$runnm'
17195 sPRIEUldbl='$sPRIEUldbl'
17196 sPRIFUldbl='$sPRIFUldbl'
17197 sPRIGUldbl='$sPRIGUldbl'
17198 sPRIXU64='$sPRIXU64'
17199 sPRId64='$sPRId64'
17200 sPRIeldbl='$sPRIeldbl'
17201 sPRIfldbl='$sPRIfldbl'
17202 sPRIgldbl='$sPRIgldbl'
17203 sPRIi64='$sPRIi64'
17204 sPRIo64='$sPRIo64'
17205 sPRIu64='$sPRIu64'
17206 sPRIx64='$sPRIx64'
17207 sSCNfldbl='$sSCNfldbl'
17208 sched_yield='$sched_yield'
17209 scriptdir='$scriptdir'
17210 scriptdirexp='$scriptdirexp'
17211 sed='$sed'
17212 seedfunc='$seedfunc'
17213 selectminbits='$selectminbits'
17214 selecttype='$selecttype'
17215 sendmail='$sendmail'
17216 sh='$sh'
17217 shar='$shar'
17218 sharpbang='$sharpbang'
17219 shmattype='$shmattype'
17220 shortsize='$shortsize'
17221 shrpenv='$shrpenv'
17222 shsharp='$shsharp'
17223 sig_count='$sig_count'
17224 sig_name='$sig_name'
17225 sig_name_init='$sig_name_init'
17226 sig_num='$sig_num'
17227 sig_num_init='$sig_num_init'
17228 sig_size='$sig_size'
17229 signal_t='$signal_t'
17230 sitearch='$sitearch'
17231 sitearchexp='$sitearchexp'
17232 sitebin='$sitebin'
17233 sitebinexp='$sitebinexp'
17234 sitelib='$sitelib'
17235 sitelib_stem='$sitelib_stem'
17236 sitelibexp='$sitelibexp'
17237 siteprefix='$siteprefix'
17238 siteprefixexp='$siteprefixexp'
17239 sizesize='$sizesize'
17240 sizetype='$sizetype'
17241 sleep='$sleep'
17242 smail='$smail'
17243 so='$so'
17244 sockethdr='$sockethdr'
17245 socketlib='$socketlib'
17246 socksizetype='$socksizetype'
17247 sort='$sort'
17248 spackage='$spackage'
17249 spitshell='$spitshell'
17250 src='$src'
17251 ssizetype='$ssizetype'
17252 startperl='$startperl'
17253 startsh='$startsh'
17254 static_ext='$static_ext'
17255 stdchar='$stdchar'
17256 stdio_base='$stdio_base'
17257 stdio_bufsiz='$stdio_bufsiz'
17258 stdio_cnt='$stdio_cnt'
17259 stdio_filbuf='$stdio_filbuf'
17260 stdio_ptr='$stdio_ptr'
17261 stdio_stream_array='$stdio_stream_array'
17262 strings='$strings'
17263 submit='$submit'
17264 subversion='$subversion'
17265 sysman='$sysman'
17266 tail='$tail'
17267 tar='$tar'
17268 targetarch='$targetarch'
17269 tbl='$tbl'
17270 tee='$tee'
17271 test='$test'
17272 timeincl='$timeincl'
17273 timetype='$timetype'
17274 to='$to'
17275 touch='$touch'
17276 tr='$tr'
17277 trnl='$trnl'
17278 troff='$troff'
17279 u16size='$u16size'
17280 u16type='$u16type'
17281 u32size='$u32size'
17282 u32type='$u32type'
17283 u64size='$u64size'
17284 u64type='$u64type'
17285 u8size='$u8size'
17286 u8type='$u8type'
17287 uidformat='$uidformat'
17288 uidsign='$uidsign'
17289 uidsize='$uidsize'
17290 uidtype='$uidtype'
17291 uname='$uname'
17292 uniq='$uniq'
17293 uquadtype='$uquadtype'
17294 use5005threads='$use5005threads'
17295 use64bitall='$use64bitall'
17296 use64bitint='$use64bitint'
17297 usecrosscompile='$usecrosscompile'
17298 usedl='$usedl'
17299 useithreads='$useithreads'
17300 uselargefiles='$uselargefiles'
17301 uselongdouble='$uselongdouble'
17302 usemorebits='$usemorebits'
17303 usemultiplicity='$usemultiplicity'
17304 usemymalloc='$usemymalloc'
17305 usenm='$usenm'
17306 useopcode='$useopcode'
17307 useperlio='$useperlio'
17308 useposix='$useposix'
17309 usereentrant='$usereentrant'
17310 usesfio='$usesfio'
17311 useshrplib='$useshrplib'
17312 usesocks='$usesocks'
17313 usethreads='$usethreads'
17314 usevendorprefix='$usevendorprefix'
17315 usevfork='$usevfork'
17316 usrinc='$usrinc'
17317 uuname='$uuname'
17318 uvXUformat='$uvXUformat'
17319 uvoformat='$uvoformat'
17320 uvsize='$uvsize'
17321 uvtype='$uvtype'
17322 uvuformat='$uvuformat'
17323 uvxformat='$uvxformat'
17324 vendorarch='$vendorarch'
17325 vendorarchexp='$vendorarchexp'
17326 vendorbin='$vendorbin'
17327 vendorbinexp='$vendorbinexp'
17328 vendorlib='$vendorlib'
17329 vendorlib_stem='$vendorlib_stem'
17330 vendorlibexp='$vendorlibexp'
17331 vendorprefix='$vendorprefix'
17332 vendorprefixexp='$vendorprefixexp'
17333 version='$version'
17334 versiononly='$versiononly'
17335 vi='$vi'
17336 voidflags='$voidflags'
17337 xlibpth='$xlibpth'
17338 xs_apiversion='$xs_apiversion'
17339 yacc='$yacc'
17340 yaccflags='$yaccflags'
17341 zcat='$zcat'
17342 zip='$zip'
17343 EOT
17344
17345 : Add in command line options if available
17346 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
17347
17348 : add special variables
17349 $test -f $src/patchlevel.h && \
17350 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
17351 echo "PERL_PATCHLEVEL=$perl_patchlevel" >>config.sh
17352 echo "PERL_CONFIG_SH=true" >>config.sh
17353
17354 : propagate old symbols
17355 if $test -f UU/config.sh; then
17356         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
17357         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
17358         $sort | $uniq -u >UU/oldsyms
17359         set X `cat UU/oldsyms`
17360         shift
17361         case $# in
17362         0) ;;
17363         *)
17364                 cat <<EOM
17365 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
17366 EOM
17367                 echo "# Variables propagated from previous config.sh file." >>config.sh
17368                 for sym in `cat UU/oldsyms`; do
17369                         echo "    Propagating $hint variable "'$'"$sym..."
17370                         eval 'tmp="$'"${sym}"'"'
17371                         echo "$tmp" | \
17372                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
17373                 done
17374                 ;;
17375         esac
17376 fi
17377
17378 : Finish up by extracting the .SH files
17379 case "$alldone" in
17380 exit)
17381         $rm -rf UU
17382         echo "Extraction done."
17383         exit 0
17384         ;;
17385 cont)
17386         ;;
17387 '')
17388         dflt=''
17389         nostick=true
17390         $cat <<EOM
17391
17392 If you'd like to make any changes to the config.sh file before I begin
17393 to configure things, do it as a shell escape now (e.g. !vi config.sh).
17394
17395 EOM
17396         rp="Press return or use a shell escape to edit config.sh:"
17397         . UU/myread
17398         nostick=''
17399         case "$ans" in
17400         '') ;;
17401         *) : in case they cannot read
17402                 sh 1>&4 -c "$ans";;
17403         esac
17404         ;;
17405 esac
17406
17407 : if this fails, just run all the .SH files by hand
17408 . ./config.sh
17409
17410 echo " "
17411 exec 1>&4
17412 pwd=`pwd`
17413 . ./UU/extract
17414 cd $pwd
17415
17416 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
17417         dflt=y
17418         case "$silent" in
17419         true) ;;
17420         *)
17421                 $cat <<EOM
17422
17423 Now you need to generate make dependencies by running "$make depend".
17424 You might prefer to run it in background: "$make depend > makedepend.out &"
17425 It can take a while, so you might not want to run it right now.
17426
17427 EOM
17428                 ;;
17429         esac
17430         rp="Run $make depend now?"
17431         . UU/myread
17432         case "$ans" in
17433         y*)
17434                 $make depend && echo "Now you must run '$make'."
17435                 ;;
17436         *)
17437                 echo "You must run '$make depend' then '$make'."
17438                 ;;
17439         esac
17440 elif test -f [Mm]akefile; then
17441         echo " "
17442         echo "Now you must run a $make."
17443 else
17444         echo "Configure done."
17445 fi
17446
17447 if $test -f Policy.sh; then
17448     $cat <<EOM
17449
17450 If you compile $package on a different machine or from a different object
17451 directory, copy the Policy.sh file from this object directory to the
17452 new one before you run Configure -- this will help you with most of
17453 the policy defaults.
17454
17455 EOM
17456 fi
17457 if $test -f config.msg; then
17458     echo "Hmm.  I also noted the following information while running:"
17459     echo " "
17460     $cat config.msg >&4
17461     $rm -f config.msg
17462 fi
17463 $rm -f kit*isdone ark*isdone
17464 $rm -rf UU
17465
17466 : End of Configure
17467