completion and docs for dynamic loading on OS/390
[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 Tue Jan 23 16:39:46 EET 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 perllibs=''
169 dynamic_ext=''
170 extensions=''
171 known_extensions=''
172 nonxs_ext=''
173 static_ext=''
174 useopcode=''
175 useposix=''
176 d_bsd=''
177 d_eunice=''
178 d_xenix=''
179 eunicefix=''
180 Mcc=''
181 ar=''
182 awk=''
183 bash=''
184 bison=''
185 byacc=''
186 cat=''
187 chgrp=''
188 chmod=''
189 chown=''
190 comm=''
191 compress=''
192 cp=''
193 cpio=''
194 cpp=''
195 csh=''
196 date=''
197 echo=''
198 egrep=''
199 emacs=''
200 expr=''
201 find=''
202 flex=''
203 grep=''
204 gzip=''
205 inews=''
206 ksh=''
207 less=''
208 line=''
209 lint=''
210 ln=''
211 lp=''
212 lpr=''
213 ls=''
214 mail=''
215 mailx=''
216 make=''
217 mkdir=''
218 more=''
219 mv=''
220 nm=''
221 nroff=''
222 perl=''
223 pg=''
224 pmake=''
225 pr=''
226 rm=''
227 rmail=''
228 sed=''
229 sendmail=''
230 shar=''
231 sleep=''
232 smail=''
233 sort=''
234 submit=''
235 tail=''
236 tar=''
237 tbl=''
238 tee=''
239 test=''
240 touch=''
241 tr=''
242 troff=''
243 uname=''
244 uniq=''
245 uuname=''
246 vi=''
247 zcat=''
248 zip=''
249 full_ar=''
250 full_sed=''
251 libswanted=''
252 hint=''
253 myuname=''
254 osname=''
255 osvers=''
256 Author=''
257 Date=''
258 Header=''
259 Id=''
260 Locker=''
261 Log=''
262 RCSfile=''
263 Revision=''
264 Source=''
265 State=''
266 _a=''
267 _exe=''
268 _o=''
269 archobjs=''
270 exe_ext=''
271 firstmakefile=''
272 lib_ext=''
273 obj_ext=''
274 path_sep=''
275 afs=''
276 alignbytes=''
277 ansi2knr=''
278 archlib=''
279 archlibexp=''
280 d_archlib=''
281 installarchlib=''
282 archname=''
283 myarchname=''
284 d_atolf=''
285 d_atoll=''
286 baserev=''
287 bin=''
288 binexp=''
289 installbin=''
290 bincompat5005=''
291 d_bincompat5005=''
292 byteorder=''
293 cc=''
294 ccflags=''
295 cppflags=''
296 ldflags=''
297 lkflags=''
298 locincpth=''
299 optimize=''
300 cf_email=''
301 cf_by=''
302 cf_time=''
303 charsize=''
304 contains=''
305 cpp_stuff=''
306 cpplast=''
307 cppminus=''
308 cpprun=''
309 cppstdin=''
310 crosscompile=''
311 d__fwalk=''
312 d_access=''
313 d_accessx=''
314 d_alarm=''
315 d_attribut=''
316 d_bcmp=''
317 d_bcopy=''
318 d_bzero=''
319 d_casti32=''
320 castflags=''
321 d_castneg=''
322 d_chown=''
323 d_chroot=''
324 d_chsize=''
325 d_closedir=''
326 d_void_closedir=''
327 d_const=''
328 cryptlib=''
329 d_crypt=''
330 d_csh=''
331 full_csh=''
332 d_cuserid=''
333 d_dbl_dig=''
334 d_difftime=''
335 d_dlerror=''
336 d_dlopen=''
337 d_dlsymun=''
338 d_dosuid=''
339 d_suidsafe=''
340 d_drand48proto=''
341 d_dup2=''
342 d_eaccess=''
343 d_endgrent=''
344 d_endhent=''
345 d_endnent=''
346 d_endpent=''
347 d_endpwent=''
348 d_endsent=''
349 d_fchmod=''
350 d_fchown=''
351 d_fcntl=''
352 d_fcntl_can_lock=''
353 d_fd_macros=''
354 d_fd_set=''
355 d_fds_bits=''
356 d_fgetpos=''
357 d_flexfnam=''
358 d_flock=''
359 d_fork=''
360 d_fpos64_t=''
361 d_frexpl=''
362 d_fs_data_s=''
363 d_fseeko=''
364 d_fsetpos=''
365 d_fstatfs=''
366 d_fsync=''
367 d_ftello=''
368 d_ftime=''
369 d_gettimeod=''
370 d_Gconvert=''
371 d_getcwd=''
372 d_getespwnam=''
373 d_getfsstat=''
374 d_getgrent=''
375 d_getgrps=''
376 d_gethbyaddr=''
377 d_gethbyname=''
378 d_gethent=''
379 aphostname=''
380 d_gethname=''
381 d_phostname=''
382 d_uname=''
383 d_gethostprotos=''
384 d_getlogin=''
385 d_getmnt=''
386 d_getmntent=''
387 d_getnbyaddr=''
388 d_getnbyname=''
389 d_getnent=''
390 d_getnetprotos=''
391 d_getpagsz=''
392 d_getpent=''
393 d_getpgid=''
394 d_getpgrp2=''
395 d_bsdgetpgrp=''
396 d_getpgrp=''
397 d_getppid=''
398 d_getprior=''
399 d_getpbyname=''
400 d_getpbynumber=''
401 d_getprotoprotos=''
402 d_getprpwnam=''
403 d_getpwent=''
404 d_getsent=''
405 d_getservprotos=''
406 d_getspnam=''
407 d_getsbyname=''
408 d_getsbyport=''
409 d_gnulibc=''
410 d_hasmntopt=''
411 d_htonl=''
412 d_iconv=''
413 d_inetaton=''
414 d_int64_t=''
415 d_isascii=''
416 d_isnan=''
417 d_isnanl=''
418 d_killpg=''
419 d_lchown=''
420 d_ldbl_dig=''
421 d_link=''
422 d_locconv=''
423 d_lockf=''
424 d_longdbl=''
425 longdblsize=''
426 d_longlong=''
427 longlongsize=''
428 d_lseekproto=''
429 d_lstat=''
430 d_madvise=''
431 d_mblen=''
432 d_mbstowcs=''
433 d_mbtowc=''
434 d_memchr=''
435 d_memcmp=''
436 d_memcpy=''
437 d_memmove=''
438 d_memset=''
439 d_mkdir=''
440 d_mkdtemp=''
441 d_mkfifo=''
442 d_mkstemp=''
443 d_mkstemps=''
444 d_mktime=''
445 d_mmap=''
446 mmaptype=''
447 d_modfl=''
448 d_mprotect=''
449 d_msg=''
450 d_msgctl=''
451 d_msgget=''
452 d_msgrcv=''
453 d_msgsnd=''
454 d_msync=''
455 d_munmap=''
456 d_nice=''
457 d_off64_t=''
458 d_open3=''
459 d_fpathconf=''
460 d_pathconf=''
461 d_pause=''
462 d_pipe=''
463 d_poll=''
464 d_portable=''
465 d_old_pthread_create_joinable=''
466 old_pthread_create_joinable=''
467 d_pthread_yield=''
468 d_sched_yield=''
469 sched_yield=''
470 d_qgcvt=''
471 d_readdir=''
472 d_rewinddir=''
473 d_seekdir=''
474 d_telldir=''
475 d_readlink=''
476 d_rename=''
477 d_rmdir=''
478 d_safebcpy=''
479 d_safemcpy=''
480 d_sanemcmp=''
481 d_sbrkproto=''
482 d_select=''
483 d_sem=''
484 d_semctl=''
485 d_semget=''
486 d_semop=''
487 d_setegid=''
488 d_seteuid=''
489 d_setgrent=''
490 d_setgrps=''
491 d_sethent=''
492 d_setlinebuf=''
493 d_setlocale=''
494 d_setnent=''
495 d_setpent=''
496 d_setpgid=''
497 d_setpgrp2=''
498 d_bsdsetpgrp=''
499 d_setpgrp=''
500 d_setprior=''
501 d_setproctitle=''
502 d_setpwent=''
503 d_setregid=''
504 d_setresgid=''
505 d_setresuid=''
506 d_setreuid=''
507 d_setrgid=''
508 d_setruid=''
509 d_setsent=''
510 d_setsid=''
511 d_setvbuf=''
512 d_sfio=''
513 usesfio=''
514 d_shm=''
515 d_shmat=''
516 d_shmatprototype=''
517 shmattype=''
518 d_shmctl=''
519 d_shmdt=''
520 d_shmget=''
521 d_sigaction=''
522 d_sigprocmask=''
523 d_sigsetjmp=''
524 d_msg_ctrunc=''
525 d_msg_dontroute=''
526 d_msg_oob=''
527 d_msg_peek=''
528 d_msg_proxy=''
529 d_oldsock=''
530 d_scm_rights=''
531 d_socket=''
532 d_sockpair=''
533 sockethdr=''
534 socketlib=''
535 d_socklen_t=''
536 d_socks5_init=''
537 d_sqrtl=''
538 d_statblks=''
539 d_statfs_f_flags=''
540 d_statfs_s=''
541 d_fstatvfs=''
542 d_statvfs=''
543 d_stdio_cnt_lval=''
544 d_stdio_ptr_lval=''
545 d_stdio_ptr_lval_nochange_cnt=''
546 d_stdio_ptr_lval_sets_cnt=''
547 d_stdiobase=''
548 d_stdstdio=''
549 stdio_base=''
550 stdio_bufsiz=''
551 stdio_cnt=''
552 stdio_filbuf=''
553 stdio_ptr=''
554 d_index=''
555 d_strchr=''
556 d_strcoll=''
557 d_strctcpy=''
558 d_strerrm=''
559 d_strerror=''
560 d_sysernlst=''
561 d_syserrlst=''
562 d_strtod=''
563 d_strtol=''
564 d_strtold=''
565 d_strtoll=''
566 d_strtoq=''
567 d_strtoul=''
568 d_strtoull=''
569 d_strtouq=''
570 d_strxfrm=''
571 d_symlink=''
572 d_syscall=''
573 d_sysconf=''
574 d_system=''
575 d_tcgetpgrp=''
576 d_tcsetpgrp=''
577 d_telldirproto=''
578 d_time=''
579 timetype=''
580 clocktype=''
581 d_times=''
582 d_truncate=''
583 d_tzname=''
584 d_umask=''
585 d_semctl_semid_ds=''
586 d_semctl_semun=''
587 d_union_semun=''
588 d_ustat=''
589 d_vfork=''
590 usevfork=''
591 d_voidsig=''
592 signal_t=''
593 d_volatile=''
594 d_charvspr=''
595 d_vprintf=''
596 d_wait4=''
597 d_waitpid=''
598 d_wcstombs=''
599 d_wctomb=''
600 dlext=''
601 cccdlflags=''
602 ccdlflags=''
603 dlsrc=''
604 ld=''
605 lddlflags=''
606 usedl=''
607 doublesize=''
608 ebcdic=''
609 fflushNULL=''
610 fflushall=''
611 fpossize=''
612 fpostype=''
613 gccosandvers=''
614 gccversion=''
615 gidformat=''
616 gidsign=''
617 gidsize=''
618 gidtype=''
619 groupstype=''
620 h_fcntl=''
621 h_sysfile=''
622 i_arpainet=''
623 db_hashtype=''
624 db_prefixtype=''
625 i_db=''
626 i_dbm=''
627 i_rpcsvcdbm=''
628 d_dirnamlen=''
629 direntrytype=''
630 i_dirent=''
631 i_dld=''
632 i_dlfcn=''
633 i_fcntl=''
634 i_float=''
635 i_gdbm=''
636 d_grpasswd=''
637 i_grp=''
638 i_iconv=''
639 i_ieeefp=''
640 i_inttypes=''
641 i_libutil=''
642 i_limits=''
643 i_locale=''
644 i_machcthr=''
645 i_malloc=''
646 i_math=''
647 i_memory=''
648 i_mntent=''
649 i_ndbm=''
650 i_netdb=''
651 i_neterrno=''
652 i_netinettcp=''
653 i_niin=''
654 i_sysin=''
655 i_poll=''
656 i_prot=''
657 i_pthread=''
658 d_pwage=''
659 d_pwchange=''
660 d_pwclass=''
661 d_pwcomment=''
662 d_pwexpire=''
663 d_pwgecos=''
664 d_pwpasswd=''
665 d_pwquota=''
666 i_pwd=''
667 i_sfio=''
668 i_shadow=''
669 i_socks=''
670 i_stddef=''
671 i_stdlib=''
672 i_string=''
673 strings=''
674 i_sunmath=''
675 i_sysaccess=''
676 i_sysdir=''
677 i_sysfile=''
678 d_voidtty=''
679 i_bsdioctl=''
680 i_sysfilio=''
681 i_sysioctl=''
682 i_syssockio=''
683 i_syslog=''
684 i_sysmman=''
685 i_sysmode=''
686 i_sysmount=''
687 i_sysndir=''
688 i_sysparam=''
689 i_sysresrc=''
690 i_syssecrt=''
691 i_sysselct=''
692 i_sysstat=''
693 i_sysstatfs=''
694 i_sysstatvfs=''
695 i_systimes=''
696 i_systypes=''
697 i_sysuio=''
698 i_sysun=''
699 i_sysutsname=''
700 i_sysvfs=''
701 i_syswait=''
702 i_sgtty=''
703 i_termio=''
704 i_termios=''
705 i_systime=''
706 i_systimek=''
707 i_time=''
708 timeincl=''
709 i_unistd=''
710 i_ustat=''
711 i_utime=''
712 i_values=''
713 i_stdarg=''
714 i_varargs=''
715 i_varhdr=''
716 i_vfork=''
717 inc_version_list=''
718 inc_version_list_init=''
719 installprefix=''
720 installprefixexp=''
721 installstyle=''
722 installusrbinperl=''
723 intsize=''
724 longsize=''
725 shortsize=''
726 issymlink=''
727 libc=''
728 ldlibpthname=''
729 libperl=''
730 shrpenv=''
731 useshrplib=''
732 glibpth=''
733 libpth=''
734 loclibpth=''
735 plibpth=''
736 xlibpth=''
737 ignore_versioned_solibs=''
738 libs=''
739 libsdirs=''
740 libsfiles=''
741 libsfound=''
742 libspath=''
743 lns=''
744 d_PRIEUldbl=''
745 d_PRIFUldbl=''
746 d_PRIGUldbl=''
747 d_PRIeldbl=''
748 d_PRIfldbl=''
749 d_PRIgldbl=''
750 d_SCNfldbl=''
751 sPRIEUldbl=''
752 sPRIFUldbl=''
753 sPRIGUldbl=''
754 sPRIeldbl=''
755 sPRIfldbl=''
756 sPRIgldbl=''
757 sSCNfldbl=''
758 lseeksize=''
759 lseektype=''
760 make_set_make=''
761 d_mymalloc=''
762 freetype=''
763 mallocobj=''
764 mallocsrc=''
765 malloctype=''
766 usemymalloc=''
767 installman1dir=''
768 man1dir=''
769 man1direxp=''
770 man1ext=''
771 installman3dir=''
772 man3dir=''
773 man3direxp=''
774 man3ext=''
775 modetype=''
776 multiarch=''
777 mydomain=''
778 myhostname=''
779 phostname=''
780 c=''
781 n=''
782 d_eofnblk=''
783 eagain=''
784 o_nonblock=''
785 rd_nodata=''
786 need_va_copy=''
787 netdb_hlen_type=''
788 netdb_host_type=''
789 netdb_name_type=''
790 netdb_net_type=''
791 groupcat=''
792 hostcat=''
793 passcat=''
794 orderlib=''
795 ranlib=''
796 d_perl_otherlibdirs=''
797 otherlibdirs=''
798 package=''
799 spackage=''
800 pager=''
801 api_revision=''
802 api_subversion=''
803 api_version=''
804 api_versionstring=''
805 patchlevel=''
806 revision=''
807 subversion=''
808 version=''
809 perl5=''
810 perladmin=''
811 perlpath=''
812 d_nv_preserves_uv=''
813 d_nv_preserves_uv_bits=''
814 i16size=''
815 i16type=''
816 i32size=''
817 i32type=''
818 i64size=''
819 i64type=''
820 i8size=''
821 i8type=''
822 ivsize=''
823 ivtype=''
824 nvsize=''
825 nvtype=''
826 u16size=''
827 u16type=''
828 u32size=''
829 u32type=''
830 u64size=''
831 u64type=''
832 u8size=''
833 u8type=''
834 uvsize=''
835 uvtype=''
836 ivdformat=''
837 nvEUformat=''
838 nvFUformat=''
839 nvGUformat=''
840 nveformat=''
841 nvfformat=''
842 nvgformat=''
843 uvXUformat=''
844 uvoformat=''
845 uvuformat=''
846 uvxformat=''
847 pidtype=''
848 prefix=''
849 prefixexp=''
850 installprivlib=''
851 privlib=''
852 privlibexp=''
853 prototype=''
854 ptrsize=''
855 d_PRIXU64=''
856 d_PRId64=''
857 d_PRIi64=''
858 d_PRIo64=''
859 d_PRIu64=''
860 d_PRIx64=''
861 sPRIXU64=''
862 sPRId64=''
863 sPRIi64=''
864 sPRIo64=''
865 sPRIu64=''
866 sPRIx64=''
867 d_quad=''
868 quadkind=''
869 quadtype=''
870 uquadtype=''
871 drand01=''
872 randbits=''
873 randfunc=''
874 randseedtype=''
875 seedfunc=''
876 installscript=''
877 scriptdir=''
878 scriptdirexp=''
879 selectminbits=''
880 selecttype=''
881 sh=''
882 sig_count=''
883 sig_name=''
884 sig_name_init=''
885 sig_num=''
886 sig_num_init=''
887 sig_size=''
888 installsitearch=''
889 sitearch=''
890 sitearchexp=''
891 installsitebin=''
892 sitebin=''
893 sitebinexp=''
894 installsitelib=''
895 sitelib=''
896 sitelib_stem=''
897 sitelibexp=''
898 siteprefix=''
899 siteprefixexp=''
900 sizesize=''
901 sizetype=''
902 so=''
903 socksizetype=''
904 sharpbang=''
905 shsharp=''
906 spitshell=''
907 src=''
908 ssizetype=''
909 startperl=''
910 startsh=''
911 stdchar=''
912 d_stdio_stream_array=''
913 stdio_stream_array=''
914 sysman=''
915 trnl=''
916 uidformat=''
917 uidsign=''
918 uidsize=''
919 uidtype=''
920 archname64=''
921 use64bitall=''
922 use64bitint=''
923 ccflags_uselargefiles=''
924 ldflags_uselargefiles=''
925 libswanted_uselargefiles=''
926 uselargefiles=''
927 uselongdouble=''
928 usemorebits=''
929 usemultiplicity=''
930 nm_opt=''
931 nm_so_opt=''
932 runnm=''
933 usenm=''
934 useperlio=''
935 usesocks=''
936 d_oldpthreads=''
937 use5005threads=''
938 useithreads=''
939 usethreads=''
940 incpath=''
941 mips_type=''
942 usrinc=''
943 d_vendorarch=''
944 installvendorarch=''
945 vendorarch=''
946 vendorarchexp=''
947 d_vendorbin=''
948 installvendorbin=''
949 vendorbin=''
950 vendorbinexp=''
951 d_vendorlib=''
952 installvendorlib=''
953 vendorlib=''
954 vendorlib_stem=''
955 vendorlibexp=''
956 usevendorprefix=''
957 vendorprefix=''
958 vendorprefixexp=''
959 versiononly=''
960 defvoidused=''
961 voidflags=''
962 pm_apiversion=''
963 xs_apiversion=''
964 CONFIG=''
965
966 define='define'
967 undef='undef'
968 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
969 rmlist=''
970
971 : We must find out about Eunice early
972 eunicefix=':'
973 if test -f /etc/unixtovms; then
974         eunicefix=/etc/unixtovms
975 fi
976 if test -f /etc/unixtovms.exe; then
977         eunicefix=/etc/unixtovms.exe
978 fi
979
980 i_whoami=''
981 ccname=''
982 ccversion=''
983 perllibs=''
984 : set useposix=false in your hint file to disable the POSIX extension.
985 useposix=true
986 : set useopcode=false in your hint file to disable the Opcode extension.
987 useopcode=true
988 : Trailing extension.  Override this in a hint file, if needed.
989 _exe=''
990 : Extra object files, if any, needed on this platform.
991 archobjs=''
992 archname=''
993 : Possible local include directories to search.
994 : Set locincpth to "" in a hint file to defeat local include searches.
995 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
996 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
997 :
998 : no include file wanted by default
999 inclwanted=''
1000
1001 groupstype=''
1002 : change the next line if compiling for Xenix/286 on Xenix/386
1003 xlibpth='/usr/lib/386 /lib/386'
1004 : Possible local library directories to search.
1005 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1006 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1007
1008 : general looking path for locating libraries
1009 glibpth="/lib /usr/lib $xlibpth"
1010 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1011 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1012 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1013
1014 : Private path used by Configure to find libraries.  Its value
1015 : is prepended to libpth. This variable takes care of special
1016 : machines, like the mips.  Usually, it should be empty.
1017 plibpth=''
1018
1019 : default library list
1020 libswanted=''
1021 : some systems want to use only the non-versioned libso:s
1022 ignore_versioned_solibs=''
1023 archname64=''
1024 ccflags_uselargefiles=''
1025 ldflags_uselargefiles=''
1026 libswanted_uselargefiles=''
1027 : set usemultiplicity on the Configure command line to enable multiplicity.
1028 : set usesocks on the Configure command line to enable socks.
1029 : set usethreads on the Configure command line to enable threads.
1030 : full support for void wanted by default
1031 defvoidused=15
1032
1033 : List of libraries we want.
1034 : If anyone needs -lnet, put it in a hint file.
1035 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1036 libswanted="$libswanted dld ld sun m c cposix posix"
1037 libswanted="$libswanted ndir dir crypt sec"
1038 libswanted="$libswanted ucb bsd BSD PW x iconv util"
1039 : We probably want to search /usr/shlib before most other libraries.
1040 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1041 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1042 glibpth="/usr/shlib $glibpth"
1043 : Do not use vfork unless overridden by a hint file.
1044 usevfork=false
1045
1046 : Find the basic shell for Bourne shell scripts
1047 case "$sh" in
1048 '')
1049         case "$SYSTYPE" in
1050         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1051         *) xxx='/bin/sh';;
1052         esac
1053         if test -f "$xxx"; then
1054                 sh="$xxx"
1055         else
1056                 : Build up a list and do a single loop so we can 'break' out.
1057                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1058                 for xxx in sh bash ksh pdksh ash; do
1059                         for p in $pth; do
1060                                 try="$try ${p}/${xxx}"
1061                         done
1062                 done
1063                 for xxx in $try; do
1064                         if test -f "$xxx"; then
1065                                 sh="$xxx";
1066                                 break
1067                         elif test -f "$xxx.exe"; then
1068                                 sh="$xxx";
1069                                 break
1070                         fi
1071                 done
1072         fi
1073         ;;
1074 esac
1075
1076 case "$sh" in
1077 '')     cat <<EOM >&2
1078 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1079
1080 Usually it's in /bin/sh.  How did you even get this far?
1081 Please contact me (Perl Maintainers) at perlbug@perl.org and 
1082 we'll try to straighten this all out.
1083 EOM
1084         exit 1
1085         ;;
1086 esac
1087
1088 : see if sh knows # comments
1089 if `$sh -c '#' >/dev/null 2>&1`; then
1090         shsharp=true
1091         spitshell=cat
1092         xcat=/bin/cat
1093         test -f $xcat || xcat=/usr/bin/cat
1094         echo "#!$xcat" >try
1095         $eunicefix try
1096         chmod +x try
1097         ./try > today
1098         if test -s today; then
1099                 sharpbang='#!'
1100         else
1101                 echo "#! $xcat" > try
1102                 $eunicefix try
1103                 chmod +x try
1104                 ./try > today
1105                 if test -s today; then
1106                         sharpbang='#! '
1107                 else
1108                         sharpbang=': use '
1109                 fi
1110         fi
1111 else
1112         echo " "
1113         echo "Your $sh doesn't grok # comments--I will strip them later on."
1114         shsharp=false
1115         cd ..
1116         echo "exec grep -v '^[  ]*#'" >spitshell
1117         chmod +x spitshell
1118         $eunicefix spitshell
1119         spitshell=`pwd`/spitshell
1120         cd UU
1121         echo "I presume that if # doesn't work, #! won't work either!"
1122         sharpbang=': use '
1123 fi
1124 rm -f try today
1125
1126 : figure out how to guarantee sh startup
1127 case "$startsh" in
1128 '') startsh=${sharpbang}${sh} ;;
1129 *)
1130 esac
1131 cat >try <<EOSS
1132 $startsh
1133 set abc
1134 test "$?abc" != 1
1135 EOSS
1136
1137 chmod +x try
1138 $eunicefix try
1139 if ./try; then
1140         : echo "Yup, it does."
1141 else
1142         echo "Hmm... '$startsh' does not guarantee sh startup..."
1143         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1144 fi
1145 rm -f try
1146
1147
1148 : Save command line options in file UU/cmdline.opt for later use in
1149 : generating config.sh.
1150 cat > cmdline.opt <<EOSH
1151 # Configure command line arguments.
1152 config_arg0='$0'
1153 config_args='$*'
1154 config_argc=$#
1155 EOSH
1156 argn=1
1157 for arg in "$@"; do
1158         cat >>cmdline.opt <<EOSH
1159 config_arg$argn='$arg'
1160 EOSH
1161         argn=`expr $argn + 1`
1162 done
1163
1164 : produce awk script to parse command line options
1165 cat >options.awk <<'EOF'
1166 BEGIN {
1167         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1168
1169         len = length(optstr);
1170         for (i = 1; i <= len; i++) {
1171                 c = substr(optstr, i, 1);
1172                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1173                 if (a == ":") {
1174                         arg[c] = 1;
1175                         i++;
1176                 }
1177                 opt[c] = 1;
1178         }
1179 }
1180 {
1181         expect = 0;
1182         str = $0;
1183         if (substr(str, 1, 1) != "-") {
1184                 printf("'%s'\n", str);
1185                 next;
1186         }
1187         len = length($0);
1188         for (i = 2; i <= len; i++) {
1189                 c = substr(str, i, 1);
1190                 if (!opt[c]) {
1191                         printf("-%s\n", substr(str, i));
1192                         next;
1193                 }
1194                 printf("-%s\n", c);
1195                 if (arg[c]) {
1196                         if (i < len)
1197                                 printf("'%s'\n", substr(str, i + 1));
1198                         else
1199                                 expect = 1;
1200                         next;
1201                 }
1202         }
1203 }
1204 END {
1205         if (expect)
1206                 print "?";
1207 }
1208 EOF
1209
1210 : process the command line options
1211 set X `for arg in "$@"; do echo "X$arg"; done |
1212         sed -e s/X// | awk -f options.awk`
1213 eval "set $*"
1214 shift
1215 rm -f options.awk
1216
1217 : set up default values
1218 fastread=''
1219 reuseval=false
1220 config_sh=''
1221 alldone=''
1222 error=''
1223 silent=''
1224 extractsh=''
1225 override=''
1226 knowitall=''
1227 rm -f optdef.sh posthint.sh
1228 cat >optdef.sh <<EOS
1229 $startsh
1230 EOS
1231
1232
1233 : option parsing
1234 while test $# -gt 0; do
1235         case "$1" in
1236         -d) shift; fastread=yes;;
1237         -e) shift; alldone=cont;;
1238         -f)
1239                 shift
1240                 cd ..
1241                 if test -r "$1"; then
1242                         config_sh="$1"
1243                 else
1244                         echo "$me: cannot read config file $1." >&2
1245                         error=true
1246                 fi
1247                 cd UU
1248                 shift;;
1249         -h) shift; error=true;;
1250         -r) shift; reuseval=true;;
1251         -s) shift; silent=true; realsilent=true;;
1252         -E) shift; alldone=exit;;
1253         -K) shift; knowitall=true;;
1254         -O) shift; override=true;;
1255         -S) shift; silent=true; extractsh=true;;
1256         -D)
1257                 shift
1258                 case "$1" in
1259                 *=)
1260                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1261                         echo "$me: ignoring -D $1" >&2
1262                         ;;
1263                 *=*) echo "$1" | \
1264                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1265                 *) echo "$1='define'" >> optdef.sh;;
1266                 esac
1267                 shift
1268                 ;;
1269         -U)
1270                 shift
1271                 case "$1" in
1272                 *=) echo "$1" >> optdef.sh;;
1273                 *=*)
1274                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1275                         echo "$me: ignoring -U $1" >&2
1276                         ;;
1277                 *) echo "$1='undef'" >> optdef.sh;;
1278                 esac
1279                 shift
1280                 ;;
1281         -A)
1282             shift
1283             xxx=''
1284             yyy="$1"
1285             zzz=''
1286             uuu=undef
1287             case "$yyy" in
1288             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1289                  case "$zzz" in
1290                  *:*) zzz='' ;;
1291                  *)   xxx=append
1292                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1293                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1294                  esac
1295                  ;;
1296             esac
1297             case "$xxx" in
1298             '')  case "$yyy" in
1299                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1300                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1301                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1302                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1303                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1304                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1305                  esac
1306                  ;;       
1307             esac
1308             case "$xxx" in
1309             append)
1310                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1311             clear)
1312                 echo "$yyy=''"                  >> posthint.sh ;;
1313             define)
1314                 case "$zzz" in
1315                 '') zzz=define ;;
1316                 esac
1317                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1318             eval)
1319                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1320             prepend)
1321                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1322             undef)
1323                 case "$zzz" in
1324                 '') zzz="$uuu" ;;
1325                 esac
1326                 echo "$yyy=$zzz"                >> posthint.sh ;;
1327             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1328             esac
1329             shift
1330             ;;
1331         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1332             exit 0;;
1333         --) break;;
1334         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1335         *) break;;
1336         esac
1337 done
1338
1339 case "$error" in
1340 true)
1341         cat >&2 <<EOM
1342 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1343                  [-U symbol] [-U symbol=] [-A command:symbol...]
1344   -d : use defaults for all answers.
1345   -e : go on without questioning past the production of config.sh.
1346   -f : specify an alternate default configuration file.
1347   -h : print this help message and exit (with an error status).
1348   -r : reuse C symbols value if possible (skips costly nm extraction).
1349   -s : silent mode, only echoes questions and essential information.
1350   -D : define symbol to have some value:
1351          -D symbol         symbol gets the value 'define'
1352          -D symbol=value   symbol gets the value 'value'
1353   -E : stop at the end of questions, after having produced config.sh.
1354   -K : do not use unless you know what you are doing.
1355   -O : let -D and -U override definitions from loaded configuration file.
1356   -S : perform variable substitutions on all .SH files (can mix with -f)
1357   -U : undefine symbol:
1358          -U symbol    symbol gets the value 'undef'
1359          -U symbol=   symbol gets completely empty
1360   -A : manipulate symbol after the platform specific hints have been applied:
1361          -A symbol=value                append " "value to symbol
1362          -A append:symbol=value         append value to symbol
1363          -A define:symbol=value         define symbol to have value
1364          -A clear:symbol                define symbol to be ''
1365          -A define:symbol               define symbol to be 'define'
1366          -A eval:symbol=value           define symbol to be eval of value
1367          -A prepend:symbol=value        prepend value to symbol
1368          -A undef:symbol                define symbol to be 'undef'
1369          -A undef:symbol=               define symbol to be ''
1370   -V : print version number and exit (with a zero status).
1371 EOM
1372         exit 1
1373         ;;
1374 esac
1375
1376 : Sanity checks
1377 case "$fastread$alldone" in
1378 yescont|yesexit) ;;
1379 *)
1380         case "$extractsh" in
1381         true) ;;
1382         *)
1383                 if test ! -t 0; then
1384                         echo "Say 'sh Configure', not 'sh <Configure'"
1385                         exit 1
1386                 fi
1387                 ;;
1388         esac
1389         ;;
1390 esac
1391
1392 exec 4>&1
1393 case "$silent" in
1394 true) exec 1>/dev/null;;
1395 esac
1396
1397 : run the defines and the undefines, if any, but leave the file out there...
1398 touch optdef.sh
1399 . ./optdef.sh
1400 : create the posthint manipulation script and leave the file out there...
1401 touch posthint.sh
1402
1403 : set package name
1404 package=perl5
1405 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1406 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1407 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1408 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1409 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1410 esac
1411
1412 : Some greps do not return status, grrr.
1413 echo "grimblepritz" >grimble
1414 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1415         contains=contains
1416 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1417         contains=grep
1418 else
1419         contains=contains
1420 fi
1421 rm -f grimble
1422 : the following should work in any shell
1423 case "$contains" in
1424 contains*)
1425         echo " "
1426         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1427         cat >contains <<'EOSS'
1428 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1429 EOSS
1430 chmod +x contains
1431 esac
1432
1433 : Find the path to the source tree
1434 case "$src" in
1435 '') case "$0" in
1436     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1437          case "$src" in
1438          /*)    ;;
1439          .)     ;;
1440          *)     src=`cd ../$src && pwd` ;;
1441          esac
1442          ;;
1443     *)   src='.';;
1444     esac;;
1445 esac
1446 case "$src" in
1447 '')     src=/
1448         rsrc=/
1449         ;;
1450 /*) rsrc="$src";;
1451 *) rsrc="../$src";;
1452 esac
1453 if test -f $rsrc/Configure && \
1454         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1455 then
1456    : found it, so we are ok.
1457 else
1458         rsrc=''
1459         for src in . .. ../.. ../../.. ../../../..; do
1460                 if test -f ../$src/Configure && \
1461                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1462                 then
1463                         rsrc=../$src
1464                         break
1465                 fi
1466         done
1467 fi
1468 case "$rsrc" in
1469 '')
1470         cat <<EOM >&4
1471
1472 Sorry, I can't seem to locate the source dir for $package.  Please start
1473 Configure with an explicit path -- i.e. /some/path/Configure.
1474
1475 EOM
1476         exit 1
1477         ;;
1478 ../.)   rsrc='..';;
1479 *)
1480         echo " "
1481         echo "Sources for $package found in \"$src\"." >&4
1482         ;;
1483 esac
1484
1485 : script used to extract .SH files with variable substitutions
1486 cat >extract <<'EOS'
1487 CONFIGDOTSH=true
1488 echo "Doing variable substitutions on .SH files..."
1489 if test -f $src/MANIFEST; then
1490         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1491 else
1492         echo "(Looking for .SH files under the source directory.)"
1493         set x `(cd $src; find . -name "*.SH" -print)`
1494 fi
1495 shift
1496 case $# in
1497 0) set x `(cd $src; echo *.SH)`; shift;;
1498 esac
1499 if test ! -f $src/$1; then
1500         shift
1501 fi
1502 mkdir_p='
1503 name=$1;
1504 create="";
1505 while test $name; do
1506         if test ! -d "$name"; then
1507                 create="$name $create";
1508                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1509                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1510         else
1511                 name="";
1512         fi;
1513 done;
1514 for file in $create; do
1515         mkdir $file;
1516 done
1517 '
1518 for file in $*; do
1519         case "$src" in
1520         ".")
1521                 case "$file" in
1522                 */*)
1523                         dir=`expr X$file : 'X\(.*\)/'`
1524                         file=`expr X$file : 'X.*/\(.*\)'`
1525                         (cd $dir && . ./$file)
1526                         ;;
1527                 *)
1528                         . ./$file
1529                         ;;
1530                 esac
1531                 ;;
1532         *)
1533                 case "$file" in
1534                 */*)
1535                         dir=`expr X$file : 'X\(.*\)/'`
1536                         file=`expr X$file : 'X.*/\(.*\)'`
1537                         (set x $dir; shift; eval $mkdir_p)
1538                         sh <$src/$dir/$file
1539                         ;;
1540                 *)
1541                         sh <$src/$file
1542                         ;;
1543                 esac
1544                 ;;
1545         esac
1546 done
1547 if test -f $src/config_h.SH; then
1548         if test ! -f config.h; then
1549         : oops, they left it out of MANIFEST, probably, so do it anyway.
1550         . $src/config_h.SH
1551         fi
1552 fi
1553 EOS
1554
1555 : extract files and exit if asked to do so
1556 case "$extractsh" in
1557 true)
1558         case "$realsilent" in
1559         true) ;;
1560         *) exec 1>&4;;
1561         esac
1562         case "$config_sh" in
1563         '') config_sh='config.sh';;
1564         esac
1565         echo " "
1566         echo "Fetching answers from $config_sh..."
1567         cd ..
1568         . $config_sh
1569         test "$override" && . ./optdef.sh
1570         echo " "
1571         . UU/extract
1572         rm -rf UU
1573         echo "Done."
1574         exit 0
1575         ;;
1576 esac
1577
1578 : Eunice requires " " instead of "", can you believe it
1579 echo " "
1580 : Here we go...
1581 echo "Beginning of configuration questions for $package."
1582
1583 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1584
1585 : first determine how to suppress newline on echo command
1586 echo " "
1587 echo "Checking echo to see how to suppress newlines..."
1588 (echo "hi there\c" ; echo " ") >.echotmp
1589 if $contains c .echotmp >/dev/null 2>&1 ; then
1590         echo "...using -n."
1591         n='-n'
1592         c=''
1593 else
1594         cat <<'EOM'
1595 ...using \c
1596 EOM
1597         n=''
1598         c='\c'
1599 fi
1600 echo $n "The star should be here-->$c"
1601 echo '*'
1602 rm -f .echotmp
1603
1604 : Now test for existence of everything in MANIFEST
1605 echo " "
1606 if test -f $rsrc/MANIFEST; then
1607         echo "First let's make sure your kit is complete.  Checking..." >&4
1608         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1609         rm -f missing
1610         tmppwd=`pwd`
1611         for filelist in x??; do
1612                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1613         done
1614         if test -s missing; then
1615                 cat missing >&4
1616                 cat >&4 <<'EOM'
1617
1618 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1619
1620 You have the option of continuing the configuration process, despite the
1621 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1622 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1623 and contact the author (perlbug@perl.org).
1624
1625 EOM
1626                 echo $n "Continue? [n] $c" >&4
1627                 read ans
1628                 case "$ans" in
1629                 y*)
1630                         echo "Continuing..." >&4
1631                         rm -f missing
1632                         ;;
1633                 *)
1634                         echo "ABORTING..." >&4
1635                         kill $$
1636                         ;;
1637                 esac
1638         else
1639                 echo "Looks good..."
1640         fi
1641 else
1642         echo "There is no MANIFEST file.  I hope your kit is complete !"
1643 fi
1644 rm -f missing x??
1645
1646 echo " "
1647 : Find the appropriate value for a newline for tr
1648 if test -n "$DJGPP"; then
1649        trnl='\012'
1650 fi
1651 if test X"$trnl" = X; then
1652         case "`echo foo|tr '\n' x 2>/dev/null`" in
1653         foox) trnl='\n' ;;
1654         esac
1655 fi
1656 if test X"$trnl" = X; then
1657         case "`echo foo|tr '\012' x 2>/dev/null`" in
1658         foox) trnl='\012' ;;
1659         esac
1660 fi
1661 if test X"$trnl" = X; then
1662         cat <<EOM >&2
1663
1664 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1665
1666 EOM
1667         exit 1
1668 fi
1669
1670 : compute the number of columns on the terminal for proper question formatting
1671 case "$COLUMNS" in
1672 '') COLUMNS='80';;
1673 esac
1674
1675 : set up the echo used in my read
1676 myecho="case \"\$xxxm\" in
1677 '') echo $n \"\$rp $c\" >&4;;
1678 *) case \"\$rp\" in
1679         '') echo $n \"[\$xxxm] $c\";;
1680         *)
1681                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1682                         echo \"\$rp\" >&4
1683                         echo $n \"[\$xxxm] $c\" >&4
1684                 else
1685                         echo $n \"\$rp [\$xxxm] $c\" >&4
1686                 fi
1687                 ;;
1688         esac;;
1689 esac"
1690
1691 : now set up to do reads with possible shell escape and default assignment
1692 cat <<EOSC >myread
1693 $startsh
1694 xxxm=\$dflt
1695 $myecho
1696 ans='!'
1697 case "\$fastread" in
1698 yes) case "\$dflt" in
1699         '') ;;
1700         *) ans='';
1701                 case "\$silent-\$rp" in
1702                 true-) ;;
1703                 *) echo " " >&4;;
1704                 esac;;
1705         esac;;
1706 *) case "\$silent" in
1707         true) case "\$rp" in
1708                 '') ans='';;
1709                 esac;;
1710         esac;;
1711 esac
1712 while expr "X\$ans" : "X!" >/dev/null; do
1713         read answ
1714         set x \$xxxm
1715         shift
1716         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1717         case  "\$answ" in
1718         "!")
1719                 sh 1>&4
1720                 echo " "
1721                 $myecho
1722                 ;;
1723         !*)
1724                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1725                 shift
1726                 sh 1>&4 -c "\$*"
1727                 echo " "
1728                 $myecho
1729                 ;;
1730         "\$ans")
1731                 case "\$ans" in
1732                 \\&*)
1733                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1734                         shift
1735                         case "\$1" in
1736                         -d)
1737                                 fastread=yes
1738                                 echo "(OK, I'll run with -d after this question.)" >&4
1739                                 ;;
1740                         -*)
1741                                 echo "*** Sorry, \$1 not supported yet." >&4
1742                                 ;;
1743                         esac
1744                         $myecho
1745                         ans=!
1746                         ;;
1747                 esac;;
1748         *)
1749                 case "\$aok" in
1750                 y)
1751                         echo "*** Substitution done -- please confirm."
1752                         xxxm="\$ans"
1753                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1754                         xxxm="\$ans"
1755                         ans=!
1756                         ;;
1757                 *)
1758                         echo "*** Error -- try again."
1759                         ans=!
1760                         ;;
1761                 esac
1762                 $myecho
1763                 ;;
1764         esac
1765         case "\$ans\$xxxm\$nostick" in
1766         '')
1767                 ans=!
1768                 $myecho
1769                 ;;
1770         esac
1771 done
1772 case "\$ans" in
1773 '') ans="\$xxxm";;
1774 esac
1775 EOSC
1776
1777 : create .config dir to save info across Configure sessions
1778 test -d ../.config || mkdir ../.config
1779 cat >../.config/README <<EOF
1780 This directory created by Configure to save information that should
1781 persist across sessions for $package.
1782
1783 You may safely delete it if you wish.
1784 EOF
1785
1786 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
1787 case "$usedevel" in
1788 $define|true|[yY]*) ;;
1789 *) case "$xversion" in
1790    *[13579])
1791         cat >&4 <<EOH
1792 *** WHOA THERE!!! ***
1793
1794     This is an UNSTABLE DEVELOPMENT release.
1795     The version of this $package distribution is $xversion, that is, odd,
1796     (as opposed to even) and that signifies a development release.
1797     If you want a maintenance release, you want an even-numbered version.
1798
1799     Do ***NOT*** install this into production use.
1800     Data corruption and crashes are possible.
1801
1802     It is most seriously suggested that you do not continue any further
1803     unless you want to help in developing and debugging Perl.
1804
1805 EOH
1806         rp='Do you really want to continue?'
1807         dflt='n'
1808         . ./myread
1809         case "$ans" in
1810         [yY]) echo >&4 "Okay, continuing." ;;
1811         *) echo >&4 "Okay, bye."
1812            exit 1
1813            ;;
1814         esac
1815         ;;
1816     esac
1817     ;;
1818 esac
1819
1820 : general instructions
1821 needman=true
1822 firsttime=true
1823 user=`(logname) 2>/dev/null`
1824 case "$user" in
1825 '') user=`whoami 2>&1`;;
1826 esac
1827 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1828         firsttime=false
1829         echo " "
1830         rp='Would you like to see the instructions?'
1831         dflt=n
1832         . ./myread
1833         case "$ans" in
1834         [yY]*) ;;
1835         *) needman=false;;
1836         esac
1837 fi
1838 if $needman; then
1839         cat <<EOH
1840
1841 This installation shell script will examine your system and ask you questions
1842 to determine how the perl5 package should be installed. If you get
1843 stuck on a question, you may use a ! shell escape to start a subshell or
1844 execute a command.  Many of the questions will have default answers in square
1845 brackets; typing carriage return will give you the default.
1846
1847 On some of the questions which ask for file or directory names you are allowed
1848 to use the ~name construct to specify the login directory belonging to "name",
1849 even if you don't have a shell which knows about that.  Questions where this is
1850 allowed will be marked "(~name ok)".
1851
1852 EOH
1853         rp=''
1854         dflt='Type carriage return to continue'
1855         . ./myread
1856         cat <<'EOH'
1857
1858 The prompter used in this script allows you to use shell variables and
1859 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1860 in the default answer, as if the default line was a set of arguments given to a
1861 script shell.  This means you may also use $* to repeat the whole default line,
1862 so you do not have to re-type everything to add something to the default.
1863
1864 Everytime there is a substitution, you will have to confirm.  If there is an
1865 error (e.g. an unmatched backtick), the default answer will remain unchanged
1866 and you will be prompted again.
1867
1868 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1869 the questions and use the computed defaults (or the previous answers if there
1870 was already a config.sh file). Type 'Configure -h' for a list of options.
1871 You may also start interactively and then answer '& -d' at any prompt to turn
1872 on the non-interactive behaviour for the remainder of the execution.
1873
1874 EOH
1875         . ./myread
1876         cat <<EOH
1877
1878 Much effort has been expended to ensure that this shell script will run on any
1879 Unix system.  If despite that it blows up on yours, your best bet is to edit
1880 Configure and run it again.  If you can't run Configure for some reason,
1881 you'll have to generate a config.sh file by hand.  Whatever problems you
1882 have, let me (perlbug@perl.org) know how I blew it.
1883
1884 This installation script affects things in two ways:
1885
1886 1) it may do direct variable substitutions on some of the files included
1887    in this kit.
1888 2) it builds a config.h file for inclusion in C programs.  You may edit
1889    any of these files as the need arises after running this script.
1890
1891 If you make a mistake on a question, there is no easy way to back up to it
1892 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1893 files.  Configure will offer to let you do this before it runs the SH files.
1894
1895 EOH
1896         dflt='Type carriage return to continue'
1897         . ./myread
1898         case "$firsttime" in
1899         true) echo $user >>../.config/instruct;;
1900         esac
1901 fi
1902
1903 : find out where common programs are
1904 echo " "
1905 echo "Locating common programs..." >&4
1906 cat <<EOSC >loc
1907 $startsh
1908 case \$# in
1909 0) exit 1;;
1910 esac
1911 thing=\$1
1912 shift
1913 dflt=\$1
1914 shift
1915 for dir in \$*; do
1916         case "\$thing" in
1917         .)
1918         if test -d \$dir/\$thing; then
1919                 echo \$dir
1920                 exit 0
1921         fi
1922         ;;
1923         *)
1924         for thisthing in \$dir/\$thing; do
1925                 : just loop through to pick last item
1926         done
1927         if test -f \$thisthing; then
1928                 echo \$thisthing
1929                 exit 0
1930         elif test -f \$dir/\$thing.exe; then
1931                 if test -n "$DJGPP"; then
1932                         echo \$dir/\$thing.exe
1933                 else
1934                         : on Eunice apparently
1935                         echo \$dir/\$thing
1936                 fi
1937                 exit 0
1938         fi
1939         ;;
1940         esac
1941 done
1942 echo \$dflt
1943 exit 1
1944 EOSC
1945 chmod +x loc
1946 $eunicefix loc
1947 loclist="
1948 awk
1949 cat
1950 comm
1951 cp
1952 echo
1953 expr
1954 grep
1955 ls
1956 make
1957 mkdir
1958 rm
1959 sed
1960 sort
1961 touch
1962 tr
1963 uniq
1964 "
1965 trylist="
1966 Mcc
1967 ar
1968 byacc
1969 cpp
1970 csh
1971 date
1972 egrep
1973 gzip
1974 less
1975 ln
1976 more
1977 nm
1978 nroff
1979 pg
1980 test
1981 uname
1982 zip
1983 "
1984 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1985 pth="$pth /lib /usr/lib"
1986 for file in $loclist; do
1987         eval xxx=\$$file
1988         case "$xxx" in
1989         /*|?:[\\/]*)
1990                 if test -f "$xxx"; then
1991                         : ok
1992                 else
1993                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1994                         xxx=`./loc $file $file $pth`
1995                 fi
1996                 ;;
1997         '') xxx=`./loc $file $file $pth`;;
1998         *) xxx=`./loc $xxx $xxx $pth`;;
1999         esac
2000         eval $file=$xxx
2001         eval _$file=$xxx
2002         case "$xxx" in
2003         /*)
2004                 echo $file is in $xxx.
2005                 ;;
2006         ?:[\\/]*)
2007                 echo $file is in $xxx.
2008                 ;;
2009         *)
2010                 echo "I don't know where '$file' is, and my life depends on it." >&4
2011                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2012                 exit 1
2013                 ;;
2014         esac
2015 done
2016 echo " "
2017 echo "Don't worry if any of the following aren't found..."
2018 say=offhand
2019 for file in $trylist; do
2020         eval xxx=\$$file
2021         case "$xxx" in
2022         /*|?:[\\/]*)
2023                 if test -f "$xxx"; then
2024                         : ok
2025                 else
2026                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2027                         xxx=`./loc $file $file $pth`
2028                 fi
2029                 ;;
2030         '') xxx=`./loc $file $file $pth`;;
2031         *) xxx=`./loc $xxx $xxx $pth`;;
2032         esac
2033         eval $file=$xxx
2034         eval _$file=$xxx
2035         case "$xxx" in
2036         /*)
2037                 echo $file is in $xxx.
2038                 ;;
2039         ?:[\\/]*)
2040                 echo $file is in $xxx.
2041                 ;;
2042         *)
2043                 echo "I don't see $file out there, $say."
2044                 say=either
2045                 ;;
2046         esac
2047 done
2048 case "$egrep" in
2049 egrep)
2050         echo "Substituting grep for egrep."
2051         egrep=$grep
2052         ;;
2053 esac
2054 case "$ln" in
2055 ln)
2056         echo "Substituting cp for ln."
2057         ln=$cp
2058         ;;
2059 esac
2060 case "$test" in
2061 test)
2062         echo "Hopefully test is built into your sh."
2063         ;;
2064 *)
2065         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2066                 echo "Using the test built into your sh."
2067                 test=test
2068                 _test=test
2069         fi
2070         ;;
2071 esac
2072 case "$echo" in
2073 echo)
2074         echo "Hopefully echo is built into your sh."
2075         ;;
2076 '') ;;
2077 *)
2078         echo " "
2079 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2080         $echo $n "hi there$c" >foo1
2081         echo $n "hi there$c" >foo2
2082         if cmp foo1 foo2 >/dev/null 2>&1; then
2083                 echo "They are compatible.  In fact, they may be identical."
2084         else
2085                 case "$n" in
2086                 '-n') n='' c='\c';;
2087                 *) n='-n' c='';;
2088                 esac
2089                 cat <<FOO
2090 They are not compatible!  You are probably running ksh on a non-USG system.
2091 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2092 have echo built in and we may have to run some Bourne shell scripts.  That
2093 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2094
2095 FOO
2096                 $echo $n "The star should be here-->$c"
2097                 $echo "*"
2098         fi
2099         $rm -f foo1 foo2
2100         ;;
2101 esac
2102
2103 cat <<EOS >checkcc
2104 $startsh
2105 EOS
2106 cat <<'EOSC' >>checkcc
2107 case "$cc" in
2108 '') ;;
2109 *)  $rm -f try try.*
2110     $cat >try.c <<EOM
2111 int main(int argc, char *argv[]) {
2112   return 0;
2113 }
2114 EOM
2115     if $cc -o try $ccflags try.c; then
2116        :
2117     else
2118         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2119         despair=yes
2120         trygcc=yes
2121         case "$cc" in
2122         *gcc*) trygcc=no ;;
2123         esac
2124         case "`$cc -v -c try.c 2>&1`" in
2125         *gcc*) trygcc=no ;;
2126         esac
2127         if $test X"$trygcc" = Xyes; then
2128             if gcc -o try -c try.c; then
2129                 echo " "
2130                 echo "You seem to have a working gcc, though." >&4
2131                 rp="Would you like to use it?"
2132                 dflt=y
2133                 if $test -f myread; then
2134                     . ./myread
2135                 else
2136                     if $test -f UU/myread; then
2137                         . ./UU/myread
2138                     else
2139                         echo "Cannot find myread, sorry.  Aborting." >&2
2140                         exit 1
2141                     fi
2142                 fi  
2143                 case "$ans" in
2144                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2145                 esac
2146             fi
2147         fi
2148         if $test X"$despair" = Xyes; then
2149             $cat >&4 <<EOM
2150 You need to find a working C compiler.
2151 Either (purchase and) install the C compiler supplied by your OS vendor,
2152 or for a free C compiler try http://gcc.gnu.org/
2153 I cannot continue any further, aborting.
2154 EOM
2155             exit 1
2156         fi
2157     fi
2158     $rm -f try try.*
2159     ;;
2160 esac
2161 EOSC
2162
2163 : determine whether symbolic links are supported
2164 echo " "
2165 $touch blurfl
2166 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2167         echo "Symbolic links are supported." >&4
2168         lns="$ln -s"
2169 else
2170         echo "Symbolic links are NOT supported." >&4
2171         lns="$ln"
2172 fi
2173 $rm -f blurfl sym
2174
2175 : determine whether symbolic links are supported
2176 echo " "
2177 case "$lns" in
2178 *"ln -s")
2179         echo "Checking how to test for symbolic links..." >&4
2180         $lns blurfl sym
2181         if $test "X$issymlink" = X; then
2182                 sh -c "PATH= test -h sym" >/dev/null 2>&1
2183                 if test $? = 0; then
2184                         issymlink="test -h"
2185                 fi              
2186         fi
2187         if $test "X$issymlink" = X; then
2188                 if  $test -h >/dev/null 2>&1; then
2189                         issymlink="$test -h"
2190                         echo "Your builtin 'test -h' may be broken, I'm using external '$test -h'." >&4
2191                 fi              
2192         fi
2193         if $test "X$issymlink" = X; then
2194                 if $test -L sym 2>/dev/null; then
2195                         issymlink="$test -L"
2196                 fi
2197         fi
2198         if $test "X$issymlink" != X; then
2199                 echo "You can test for symbolic links with '$issymlink'." >&4
2200         else
2201                 echo "I do not know how you can test for symbolic links." >&4
2202         fi
2203         $rm -f blurfl sym
2204         ;;
2205 *)      echo "No symbolic links, so not testing for their testing..." >&4
2206         ;;
2207 esac
2208 echo " "
2209
2210
2211 case "$mksymlinks" in
2212 $define|true|[yY]*)
2213         case "$src" in
2214         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2215                 exit 1
2216                 ;;
2217         *)      case "$lns:$issymlink" in
2218                 *"ln -s:"*"test -"?)
2219                         echo "Creating the symbolic links..." >&4
2220                         echo "(First creating the subdirectories...)" >&4
2221                         cd ..
2222                         awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | sort -u | while true; do
2223                                 read directory
2224                                 test -z "$directory" && break
2225                                 mkdir -p $directory
2226                         done
2227                         # Sanity check 1.
2228                         if test ! -d t/base; then
2229                                 echo "Failed to create the subdirectories.  Aborting." >&4
2230                                 exit 1
2231                         fi
2232                         echo "(Then creating the symlinks...)" >&4
2233                         awk '{print $1}' $src/MANIFEST | while true; do
2234                                 read filename
2235                                 test -z "$filename" && break
2236                                 if test -f $filename; then
2237                                         if $issymlink $filename; then
2238                                                 rm -f $filename
2239                                         fi
2240                                 fi
2241                                 if test -f $filename; then
2242                                         echo "$filename already exists, not symlinking."
2243                                 else
2244                                         ln -s $src/$filename $filename
2245                                 fi
2246                         done
2247                         # Sanity check 2.
2248                         if test ! -f t/base/commonsense.t; then
2249                                 echo "Failed to create the symlinks.  Aborting." >&4
2250                                 exit 1
2251                         fi
2252                         cd UU
2253                         ;;
2254                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2255                         ;;
2256                 esac
2257                 ;;
2258         esac
2259         ;;
2260 esac
2261
2262 : see whether [:lower:] and [:upper:] are supported character classes
2263 echo " "
2264 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2265 ABYZ)
2266         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2267         up='[:upper:]'
2268         low='[:lower:]'
2269         ;;
2270 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2271         # (0xc9 and 0xd1), therefore that is a nice testing point.
2272         if test "X$up" = X -o "X$low" = X; then
2273             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2274             ij) up='[A-Z]'
2275                 low='[a-z]'
2276                 ;;
2277             esac
2278         fi
2279         if test "X$up" = X -o "X$low" = X; then
2280             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2281             ij) up='A-Z'
2282                 low='a-z'
2283                 ;;
2284             esac
2285         fi
2286         if test "X$up" = X -o "X$low" = X; then
2287             case "`echo IJ | od -x 2>/dev/null`" in
2288             *C9D1*|*c9d1*)
2289                 echo "Hey, this might be EBCDIC." >&4
2290                 if test "X$up" = X -o "X$low" = X; then
2291                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2292                     ij) up='[A-IJ-RS-Z]'
2293                         low='[a-ij-rs-z]'
2294                         ;;
2295                     esac
2296                 fi
2297                 if test "X$up" = X -o "X$low" = X; then
2298                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2299                     ij) up='A-IJ-RS-Z'
2300                         low='a-ij-rs-z'
2301                         ;;
2302                     esac
2303                 fi
2304                 ;;
2305             esac
2306         fi
2307 esac
2308 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2309 ij)
2310     echo "Using $up and $low to convert case." >&4
2311     ;;
2312 *)
2313     echo "I don't know how to translate letters from upper to lower case." >&4
2314     echo "Your tr is not acting any way I know of." >&4
2315     exit 1
2316     ;;
2317 esac
2318 : set up the translation script tr, must be called with ./tr of course
2319 cat >tr <<EOSC
2320 $startsh
2321 case "\$1\$2" in
2322 '[A-Z][a-z]') exec $tr '$up' '$low';;
2323 '[a-z][A-Z]') exec $tr '$low' '$up';;
2324 esac
2325 exec $tr "\$@"
2326 EOSC
2327 chmod +x tr
2328 $eunicefix tr
2329
2330 : Try to determine whether config.sh was made on this system
2331 case "$config_sh" in
2332 '')
2333 myuname=`$uname -a 2>/dev/null`
2334 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2335 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2336 # because the A-Z/a-z are not consecutive.
2337 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2338         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2339 newmyuname="$myuname"
2340 dflt=n
2341 case "$knowitall" in
2342 '')
2343         if test -f ../config.sh; then
2344                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2345                         eval "`grep myuname= ../config.sh`"
2346                 fi
2347                 if test "X$myuname" = "X$newmyuname"; then
2348                         dflt=y
2349                 fi
2350         fi
2351         ;;
2352 *) dflt=y;;
2353 esac
2354
2355 : Get old answers from old config file if Configure was run on the
2356 : same system, otherwise use the hints.
2357 hint=default
2358 cd ..
2359 if test -f config.sh; then
2360         echo " "
2361         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2362         . UU/myread
2363         case "$ans" in
2364         n*|N*) echo "OK, I'll ignore it."
2365                 mv config.sh config.sh.old
2366                 myuname="$newmyuname"
2367                 ;;
2368         *)  echo "Fetching default answers from your old config.sh file..." >&4
2369                 tmp_n="$n"
2370                 tmp_c="$c"
2371                 tmp_sh="$sh"
2372                 . ./config.sh
2373                 cp config.sh UU
2374                 n="$tmp_n"
2375                 c="$tmp_c"
2376                 : Older versions did not always set $sh.  Catch re-use of such
2377                 : an old config.sh.
2378                 case "$sh" in
2379                 '') sh="$tmp_sh" ;;
2380                 esac
2381                 hint=previous
2382                 ;;
2383         esac
2384 fi
2385 . ./UU/checkcc
2386 if test ! -f config.sh; then
2387         $cat <<EOM
2388
2389 First time through, eh?  I have some defaults handy for some systems
2390 that need some extra help getting the Configure answers right:
2391
2392 EOM
2393         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2394         dflt=''
2395         : Half the following guesses are probably wrong... If you have better
2396         : tests or hints, please send them to perlbug@perl.org
2397         : The metaconfig authors would also appreciate a copy...
2398         $test -f /irix && osname=irix
2399         $test -f /xenix && osname=sco_xenix
2400         $test -f /dynix && osname=dynix
2401         $test -f /dnix && osname=dnix
2402         $test -f /lynx.os && osname=lynxos
2403         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2404         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2405         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2406         $test -f /bin/mips && /bin/mips && osname=mips
2407         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2408                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2409         $test -d /usr/apollo/bin && osname=apollo
2410         $test -f /etc/saf/_sactab && osname=svr4
2411         $test -d /usr/include/minix && osname=minix
2412         if $test -d /MachTen -o -d /MachTen_Folder; then
2413                 osname=machten
2414                 if $test -x /sbin/version; then
2415                         osvers=`/sbin/version | $awk '{print $2}' |
2416                         $sed -e 's/[A-Za-z]$//'`
2417                 elif $test -x /usr/etc/version; then
2418                         osvers=`/usr/etc/version | $awk '{print $2}' |
2419                         $sed -e 's/[A-Za-z]$//'`
2420                 else
2421                         osvers="$2.$3"
2422                 fi
2423         fi
2424
2425         $test -f /sys/posix.dll &&
2426                 $test -f /usr/bin/what &&
2427                 set X `/usr/bin/what /sys/posix.dll` &&
2428                 $test "$3" = UWIN &&
2429                 osname=uwin &&
2430                 osvers="$5"
2431
2432         if $test -f $uname; then
2433                 set X $myuname
2434                 shift
2435
2436                 case "$5" in
2437                 fps*) osname=fps ;;
2438                 mips*)
2439                         case "$4" in
2440                         umips) osname=umips ;;
2441                         *) osname=mips ;;
2442                         esac;;
2443                 [23]100) osname=mips ;;
2444                 next*) osname=next ;;
2445                 i386*)
2446                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2447                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2448                                 osname='sco'
2449                                 osvers=$tmp
2450                         elif $test -f /etc/kconfig; then
2451                                 osname=isc
2452                                 if test "$lns" = "$ln -s"; then
2453                                         osvers=4
2454                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2455                                         osvers=3
2456                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2457                                         osvers=2
2458                                 fi
2459                         fi
2460                         tmp=''
2461                         ;;
2462                 pc*)
2463                         if test -n "$DJGPP"; then
2464                                 osname=dos
2465                                 osvers=djgpp
2466                         fi
2467                         ;;
2468                 esac
2469
2470                 case "$1" in
2471                 aix) osname=aix
2472                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2473                         case "$tmp" in
2474                         'not found') osvers="$4"."$3" ;;
2475                         '<3240'|'<>3240') osvers=3.2.0 ;;
2476                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2477                         '=3250'|'>3250') osvers=3.2.5 ;;
2478                         *) osvers=$tmp;;
2479                         esac
2480                         ;;
2481                 bsd386) osname=bsd386
2482                         osvers=`$uname -r`
2483                         ;;
2484                 cygwin*) osname=cygwin
2485                         osvers="$3"
2486                         ;;
2487                 *dc.osx) osname=dcosx
2488                         osvers="$3"
2489                         ;;
2490                 dnix) osname=dnix
2491                         osvers="$3"
2492                         ;;
2493                 domainos) osname=apollo
2494                         osvers="$3"
2495                         ;;
2496                 dgux) osname=dgux 
2497                         osvers="$3"
2498                         ;;
2499                 dynixptx*) osname=dynixptx
2500                         osvers=`echo "$4"|sed 's/^v//'`
2501                         ;;
2502                 freebsd) osname=freebsd 
2503                         osvers="$3" ;;
2504                 genix) osname=genix ;;
2505                 hp*) osname=hpux 
2506                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2507                         ;;
2508                 irix*) osname=irix
2509                         case "$3" in
2510                         4*) osvers=4 ;;
2511                         5*) osvers=5 ;;
2512                         *)      osvers="$3" ;;
2513                         esac
2514                         ;;
2515                 linux) osname=linux
2516                         case "$3" in
2517                         *)      osvers="$3" ;;
2518                         esac
2519                         ;;
2520                 MiNT) osname=mint
2521                         ;;
2522                 netbsd*) osname=netbsd
2523                         osvers="$3"
2524                         ;;
2525                 news-os) osvers="$3"
2526                         case "$3" in
2527                         4*) osname=newsos4 ;;
2528                         *) osname=newsos ;;
2529                         esac
2530                         ;;
2531                 next*) osname=next ;;
2532                 nonstop-ux) osname=nonstopux ;;
2533                 POSIX-BC | posix-bc ) osname=posix-bc
2534                         osvers="$3"
2535                         ;;
2536                 powerux | power_ux | powermax_os | powermaxos | \
2537                 powerunix | power_unix) osname=powerux
2538                         osvers="$3"
2539                         ;;
2540                 qnx) osname=qnx
2541                         osvers="$4"
2542                         ;;
2543                 solaris) osname=solaris
2544                         case "$3" in
2545                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2546                         *)      osvers="$3" ;;
2547                         esac
2548                         ;;
2549                 sunos) osname=sunos
2550                         case "$3" in
2551                         5*) osname=solaris
2552                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2553                         *)      osvers="$3" ;;
2554                         esac
2555                         ;;
2556                 titanos) osname=titanos
2557                         case "$3" in
2558                         1*) osvers=1 ;;
2559                         2*) osvers=2 ;;
2560                         3*) osvers=3 ;;
2561                         4*) osvers=4 ;;
2562                         *)      osvers="$3" ;;
2563                         esac
2564                         ;;
2565                 ultrix) osname=ultrix
2566                         osvers="$3"
2567                         ;;
2568                 osf1|mls+)      case "$5" in
2569                                 alpha)
2570                                         osname=dec_osf
2571                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
2572                                         case "$osvers" in
2573                                         [1-9].[0-9]*) ;;
2574                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
2575                                         esac
2576                                         ;;
2577                         hp*)    osname=hp_osf1  ;;
2578                         mips)   osname=mips_osf1 ;;
2579                         esac
2580                         ;;
2581                 unixware) osname=svr5
2582                         osvers="$4"
2583                         ;;
2584                 uts) osname=uts
2585                         osvers="$3"
2586                         ;;
2587                 $2) case "$osname" in
2588                         *isc*) ;;
2589                         *freebsd*) ;;
2590                         svr*)
2591                                 : svr4.x or possibly later
2592                                 case "svr$3" in 
2593                                 ${osname}*)
2594                                         osname=svr$3
2595                                         osvers=$4
2596                                         ;;
2597                                 esac
2598                                 case "$osname" in
2599                                 svr4.0)
2600                                         : Check for ESIX
2601                                         if test -f /stand/boot ; then
2602                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2603                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2604                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2605                                                         if test -n "$isesix"; then
2606                                                                 osname=esix4
2607                                                         fi
2608                                                 fi
2609                                         fi
2610                                         ;;
2611                                 esac
2612                                 ;;
2613                         *)      if test -f /etc/systemid; then
2614                                         osname=sco
2615                                         set `echo $3 | $sed 's/\./ /g'` $4
2616                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2617                                                 osvers=$1.$2.$3
2618                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2619                                                 osvers=$1.$2
2620                                         elif $test -f $src/hints/sco_$1.sh; then
2621                                                 osvers=$1
2622                                         fi
2623                                 else
2624                                         case "$osname" in
2625                                         '') : Still unknown.  Probably a generic Sys V.
2626                                                 osname="sysv"
2627                                                 osvers="$3"
2628                                                 ;;
2629                                         esac
2630                                 fi
2631                                 ;;
2632                         esac
2633                         ;;
2634                 *)      case "$osname" in
2635                         '') : Still unknown.  Probably a generic BSD.
2636                                 osname="$1"
2637                                 osvers="$3"
2638                                 ;;
2639                         esac
2640                         ;;
2641                 esac
2642         else
2643                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2644                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2645                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2646                                 osname=news_os
2647                         fi
2648                         $rm -f UU/kernel.what
2649                 elif test -d c:/.; then
2650                         set X $myuname
2651                         osname=os2
2652                         osvers="$5"
2653                 fi
2654         fi
2655         
2656         : Now look for a hint file osname_osvers, unless one has been
2657         : specified already.
2658         case "$hintfile" in
2659         ''|' ')
2660                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
2661                 : Also try without trailing minor version numbers.
2662                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
2663                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
2664                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
2665                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
2666                 case "$file" in
2667                 '') dflt=none ;;
2668                 *)  case "$osvers" in
2669                         '') dflt=$file
2670                                 ;;
2671                         *)  if $test -f $src/hints/$file.sh ; then
2672                                         dflt=$file
2673                                 elif $test -f $src/hints/$xfile.sh ; then
2674                                         dflt=$xfile
2675                                 elif $test -f $src/hints/$xxfile.sh ; then
2676                                         dflt=$xxfile
2677                                 elif $test -f $src/hints/$xxxfile.sh ; then
2678                                         dflt=$xxxfile
2679                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2680                                         dflt=$xxxxfile
2681                                 elif $test -f "$src/hints/${osname}.sh" ; then
2682                                         dflt="${osname}"
2683                                 else
2684                                         dflt=none
2685                                 fi
2686                                 ;;
2687                         esac
2688                         ;;
2689                 esac
2690                 if $test -f Policy.sh ; then
2691                         case "$dflt" in
2692                         *Policy*) ;;
2693                         none) dflt="Policy" ;;
2694                         *) dflt="Policy $dflt" ;;
2695                         esac
2696                 fi
2697                 ;;
2698         *)
2699                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2700                 ;;
2701         esac
2702
2703         if $test -f Policy.sh ; then
2704                 $cat <<EOM
2705
2706 There's also a Policy hint file available, which should make the
2707 site-specific (policy) questions easier to answer.
2708 EOM
2709
2710         fi
2711
2712         $cat <<EOM
2713
2714 You may give one or more space-separated answers, or "none" if appropriate.
2715 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2716 is a good thing.  DO NOT give a wrong version or a wrong OS.
2717
2718 EOM
2719
2720         rp="Which of these apply, if any?"
2721         . UU/myread
2722         tans=$ans
2723         for file in $tans; do
2724                 if $test X$file = XPolicy -a -f Policy.sh; then
2725                         . Policy.sh
2726                         $cat Policy.sh >> UU/config.sh
2727                 elif $test -f $src/hints/$file.sh; then
2728                         . $src/hints/$file.sh
2729                         $cat $src/hints/$file.sh >> UU/config.sh
2730                 elif $test X$tans = X -o X$tans = Xnone ; then
2731                         : nothing
2732                 else
2733                         : Give one chance to correct a possible typo.
2734                         echo "$file.sh does not exist"
2735                         dflt=$file
2736                         rp="hint to use instead?"
2737                         . UU/myread
2738                         for file in $ans; do
2739                                 if $test -f "$src/hints/$file.sh"; then
2740                                         . $src/hints/$file.sh
2741                                         $cat $src/hints/$file.sh >> UU/config.sh
2742                                 elif $test X$ans = X -o X$ans = Xnone ; then
2743                                         : nothing
2744                                 else
2745                                         echo "$file.sh does not exist -- ignored."
2746                                 fi
2747                         done
2748                 fi
2749         done
2750
2751         hint=recommended
2752         : Remember our hint file for later.
2753         if $test -f "$src/hints/$file.sh" ; then
2754                 hintfile="$file"
2755         else
2756                 hintfile=''
2757         fi
2758 fi
2759 cd UU
2760 ;;
2761 *)
2762         echo " "
2763         echo "Fetching default answers from $config_sh..." >&4
2764         tmp_n="$n"
2765         tmp_c="$c"
2766         cd ..
2767         cp $config_sh config.sh 2>/dev/null
2768         chmod +w config.sh
2769         . ./config.sh
2770         cd UU
2771         cp ../config.sh .
2772         n="$tmp_n"
2773         c="$tmp_c"
2774         hint=previous
2775         ;;
2776 esac
2777 test "$override" && . ./optdef.sh
2778
2779 : Restore computed paths
2780 for file in $loclist $trylist; do
2781         eval $file="\$_$file"
2782 done
2783
2784 cat << EOM
2785
2786 Configure uses the operating system name and version to set some defaults.
2787 The default value is probably right if the name rings a bell. Otherwise,
2788 since spelling matters for me, either accept the default or answer "none"
2789 to leave it blank.
2790
2791 EOM
2792 case "$osname" in
2793         ''|' ')
2794                 case "$hintfile" in
2795                 ''|' '|none) dflt=none ;;
2796                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2797                 esac
2798                 ;;
2799         *) dflt="$osname" ;;
2800 esac
2801 rp="Operating system name?"
2802 . ./myread
2803 case "$ans" in
2804 none)  osname='' ;;
2805 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2806 esac
2807 echo " "
2808 case "$osvers" in
2809         ''|' ')
2810                 case "$hintfile" in
2811                 ''|' '|none) dflt=none ;;
2812                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2813                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2814                         case "$dflt" in
2815                         ''|' ') dflt=none ;;
2816                         esac
2817                         ;;
2818                 esac
2819                 ;;
2820         *) dflt="$osvers" ;;
2821 esac
2822 rp="Operating system version?"
2823 . ./myread
2824 case "$ans" in
2825 none)  osvers='' ;;
2826 *) osvers="$ans" ;;
2827 esac
2828
2829
2830 . ./posthint.sh
2831
2832 : who configured the system
2833 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2834 cf_by=`(logname) 2>/dev/null`
2835 case "$cf_by" in
2836 "")
2837         cf_by=`(whoami) 2>/dev/null`
2838         case "$cf_by" in
2839         "") cf_by=unknown ;;
2840         esac ;;
2841 esac
2842
2843 : set up the script used to warn in case of inconsistency
2844 cat <<EOS >whoa
2845 $startsh
2846 EOS
2847 cat <<'EOSC' >>whoa
2848 dflt=y
2849 echo " "
2850 echo "*** WHOA THERE!!! ***" >&4
2851 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2852 rp="    Keep the $hint value?"
2853 . ./myread
2854 case "$ans" in
2855 y) td=$was; tu=$was;;
2856 esac
2857 EOSC
2858
2859 : function used to set $1 to $val
2860 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2861 case "$val$was" in
2862 $define$undef) . ./whoa; eval "$var=\$td";;
2863 $undef$define) . ./whoa; eval "$var=\$tu";;
2864 *) eval "$var=$val";;
2865 esac'
2866
2867 case "$usethreads" in
2868 $define|true|[yY]*)     dflt='y';;
2869 *) dflt='n';;
2870 esac
2871 cat <<EOM
2872
2873 Perl can be built to take advantage of threads on some systems.
2874 To do so, Configure can be run with -Dusethreads.
2875
2876 Note that threading is a highly experimental feature, and
2877 some known race conditions still remain.  If you choose to try
2878 it, be very sure to not actually deploy it for production
2879 purposes.  README.threads has more details, and is required
2880 reading if you enable threads.
2881
2882 If this doesn't make any sense to you, just accept the default '$dflt'.
2883 EOM
2884 rp='Build a threading Perl?'
2885 . ./myread
2886 case "$ans" in
2887 y|Y)    val="$define" ;;
2888 *)      val="$undef" ;;
2889 esac
2890 set usethreads
2891 eval $setvar
2892
2893 case "$usethreads" in
2894 $define)
2895         $cat <<EOM
2896
2897 As of 5.5.640, Perl has two different internal threading implementations,
2898 the 5.005 version (5005threads) and an interpreter-based version
2899 (ithreads) that has one interpreter per thread.  Both are very 
2900 experimental.  This arrangement exists to help developers work out
2901 which one is better.
2902
2903 If you're a casual user, you probably don't want interpreter-threads
2904 at this time.  There doesn't yet exist a way to create threads from
2905 within Perl in this model, i.e., "use Thread;" will NOT work.
2906 EOM
2907         : Default to ithreads unless overridden on command line or with
2908         : old config.sh
2909         dflt='y'
2910         case "$use5005threads" in
2911                 $define|true|[yY]*) dflt='n';;
2912         esac
2913         case "$useithreads" in
2914                 $undef|false|[nN]*) dflt='n';;
2915         esac
2916         rp='Use interpreter-based ithreads?'
2917         . ./myread
2918         case "$ans" in
2919         y|Y)    val="$define" ;;
2920         *)      val="$undef" ;;
2921         esac
2922         set useithreads
2923         eval $setvar
2924         : Now set use5005threads to the opposite value.
2925         case "$useithreads" in
2926         $define) val="$undef" ;;
2927         *) val="$define" ;;
2928         esac
2929         set use5005threads
2930         eval $setvar
2931         ;;
2932 *)
2933         useithreads="$undef"
2934         use5005threads="$undef"
2935         ;;
2936 esac
2937
2938 case "$useithreads$use5005threads" in
2939 "$define$define")
2940         $cat >&4 <<EOM
2941
2942 You cannot have both the ithreads and the 5.005 threads enabled
2943 at the same time.  Disabling the 5.005 threads since they are
2944 much less stable than the ithreads.
2945
2946 EOM
2947         use5005threads="$undef"
2948         ;;
2949 esac
2950
2951 case "$d_oldpthreads" in
2952 '')     : Configure tests would be welcome here.  For now, assume undef.
2953         val="$undef" ;;
2954 *)      val="$d_oldpthreads" ;;
2955 esac
2956 set d_oldpthreads
2957 eval $setvar
2958
2959
2960 case "$usethreads" in
2961 "$define"|true|[yY]*)
2962 : Look for a hint-file generated 'call-back-unit'.  If the
2963 : user has specified that a threading perl is to be built,
2964 : we may need to set or change some other defaults.
2965         if $test -f usethreads.cbu; then
2966                 echo "Your platform has some specific hints for threaded builds, using them..."
2967                 . ./usethreads.cbu
2968         else
2969                 $cat <<EOM
2970 (Your platform doesn't have any specific hints for threaded builds.
2971  Assuming POSIX threads, then.)
2972 EOM
2973         fi
2974         ;;
2975 esac
2976
2977 cat <<EOM
2978
2979 Perl can be built so that multiple Perl interpreters can coexist
2980 within the same Perl executable.
2981 EOM
2982
2983 case "$useithreads" in
2984 $define)
2985         cat <<EOM
2986 This multiple interpreter support is required for interpreter-based threads.
2987 EOM
2988         val="$define"
2989         ;;
2990 *)      case "$usemultiplicity" in
2991         $define|true|[yY]*)     dflt='y';;
2992         *) dflt='n';;
2993         esac
2994         echo " "
2995         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
2996         rp='Build Perl for multiplicity?'
2997         . ./myread
2998         case "$ans" in
2999         y|Y)    val="$define" ;;
3000         *)      val="$undef" ;;
3001         esac
3002         ;;
3003 esac
3004 set usemultiplicity
3005 eval $setvar
3006
3007 : make some quick guesses about what we are up against
3008 echo " "
3009 $echo $n "Hmm...  $c"
3010 echo exit 1 >bsd
3011 echo exit 1 >usg
3012 echo exit 1 >v7
3013 echo exit 1 >osf1
3014 echo exit 1 >eunice
3015 echo exit 1 >xenix
3016 echo exit 1 >venix
3017 echo exit 1 >os2
3018 d_bsd="$undef"
3019 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3020 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3021 then
3022         echo "Looks kind of like an OSF/1 system, but we'll see..."
3023         echo exit 0 >osf1
3024 elif test `echo abc | $tr a-z A-Z` = Abc ; then
3025         xxx=`./loc addbib blurfl $pth`
3026         if $test -f $xxx; then
3027         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3028                 echo exit 0 >bsd
3029                 echo exit 0 >usg
3030         else
3031                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3032                         echo "Looks kind of like an extended USG system, but we'll see..."
3033                 else
3034                         echo "Looks kind of like a USG system, but we'll see..."
3035                 fi
3036                 echo exit 0 >usg
3037         fi
3038 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3039         echo "Looks kind of like a BSD system, but we'll see..."
3040         d_bsd="$define"
3041         echo exit 0 >bsd
3042 else
3043         echo "Looks kind of like a Version 7 system, but we'll see..."
3044         echo exit 0 >v7
3045 fi
3046 case "$eunicefix" in
3047 *unixtovms*)
3048         $cat <<'EOI'
3049 There is, however, a strange, musty smell in the air that reminds me of
3050 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3051 EOI
3052         echo exit 0 >eunice
3053         d_eunice="$define"
3054 : it so happens the Eunice I know will not run shell scripts in Unix format
3055         ;;
3056 *)
3057         echo " "
3058         echo "Congratulations.  You aren't running Eunice."
3059         d_eunice="$undef"
3060         ;;
3061 esac
3062 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3063 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
3064 : semicolon as a patch separator
3065 case "$p_" in
3066 :) ;;
3067 *)
3068         $cat <<'EOI'
3069 I have the feeling something is not exactly right, however...don't tell me...
3070 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3071 (Or you may be running DOS with DJGPP.)
3072 EOI
3073         echo exit 0 >os2
3074         ;;
3075 esac
3076 if test -f /xenix; then
3077         echo "Actually, this looks more like a XENIX system..."
3078         echo exit 0 >xenix
3079         d_xenix="$define"
3080 else
3081         echo " "
3082         echo "It's not Xenix..."
3083         d_xenix="$undef"
3084 fi
3085 chmod +x xenix
3086 $eunicefix xenix
3087 if test -f /venix; then
3088         echo "Actually, this looks more like a VENIX system..."
3089         echo exit 0 >venix
3090 else
3091         echo " "
3092         if ./xenix; then
3093                 : null
3094         else
3095                 echo "Nor is it Venix..."
3096         fi
3097 fi
3098 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3099 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3100 $rm -f foo
3101
3102 case "$cc" in
3103 '') dflt=cc;;
3104 *) dflt="$cc";;
3105 esac
3106 rp="Use which C compiler?"
3107 . ./myread
3108 cc="$ans"
3109 : Look for a hint-file generated 'call-back-unit'.  Now that the
3110 : user has specified the compiler, we may need to set or change some
3111 : other defaults.
3112 if $test -f cc.cbu; then
3113     . ./cc.cbu
3114 fi
3115 . ./checkcc
3116
3117 echo " "
3118 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3119 $cat >gccvers.c <<EOM
3120 #include <stdio.h>
3121 int main() {
3122 #ifdef __GNUC__
3123 #ifdef __VERSION__
3124         printf("%s\n", __VERSION__);
3125 #else
3126         printf("%s\n", "1");
3127 #endif
3128 #endif
3129         exit(0);
3130 }
3131 EOM
3132 if $cc -o gccvers $ldflags gccvers.c; then
3133         gccversion=`./gccvers`
3134         case "$gccversion" in
3135         '') echo "You are not using GNU cc." ;;
3136         *)  echo "You are using GNU cc $gccversion."
3137             ccname=gcc  
3138             ;;
3139         esac
3140 else
3141         echo " "
3142         echo "*** WHOA THERE!!! ***" >&4
3143         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3144         case "$knowitall" in
3145         '')
3146         echo "    You'd better start hunting for one and let me know about it." >&4
3147                 exit 1
3148                 ;;
3149         esac
3150 fi
3151 $rm -f gccvers*
3152 case "$gccversion" in
3153 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3154 esac
3155 case "$gccversion" in
3156 '') gccosandvers='' ;;
3157 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3158    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3159    gccshortvers=''
3160    case "$gccosandvers" in
3161    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3162    $osname$osvers) ;; # looking good
3163    $osname*) cat <<EOM >&4
3164
3165 *** WHOA THERE!!! ***
3166
3167     Your gcc has not been compiled for the exact release of
3168     your operating system ($gccosandvers versus $osname$osvers).
3169
3170     In general it is a good idea to keep gcc synchronized with
3171     the operating system because otherwise serious problems
3172     may ensue when trying to compile software, like Perl.
3173
3174     I'm trying to be optimistic here, though, and will continue.
3175     If later during the configuration and build icky compilation
3176     problems appear (headerfile conflicts being the most common
3177     manifestation), I suggest reinstalling the gcc to match
3178     your operating system release.
3179
3180 EOM
3181       ;;
3182    *) gccosandvers='' ;; # failed to parse, better be silent
3183    esac
3184    ;;
3185 esac
3186 case "$ccname" in
3187 '') ccname="$cc" ;;
3188 esac
3189
3190 : see how we invoke the C preprocessor
3191 echo " "
3192 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3193 cat <<'EOT' >testcpp.c
3194 #define ABC abc
3195 #define XYZ xyz
3196 ABC.XYZ
3197 EOT
3198 cd ..
3199 if test ! -f cppstdin; then
3200         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3201                 # AIX cc -E doesn't show the absolute headerfile
3202                 # locations but we'll cheat by using the -M flag.
3203                 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
3204         else
3205                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3206         fi
3207 else
3208         echo "Keeping your $hint cppstdin wrapper."
3209 fi
3210 chmod 755 cppstdin
3211 wrapper=`pwd`/cppstdin
3212 ok='false'
3213 cd UU
3214
3215 if $test "X$cppstdin" != "X" && \
3216         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3217         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3218 then
3219         echo "You used to use $cppstdin $cppminus so we'll use that again."
3220         case "$cpprun" in
3221         '') echo "But let's see if we can live without a wrapper..." ;;
3222         *)
3223                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3224                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3225                 then
3226                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3227                         ok='true'
3228                 else
3229                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3230                 fi
3231                 ;;
3232         esac
3233 else
3234         case "$cppstdin" in
3235         '') ;;
3236         *)
3237                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3238                 ;;
3239         esac
3240 fi
3241
3242 if $ok; then
3243         : nothing
3244 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3245         $cc -E <testcpp.c >testcpp.out 2>&1; \
3246         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3247         echo "Yup, it does."
3248         x_cpp="$cc -E"
3249         x_minus='';
3250 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3251         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3252         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3253         echo "Yup, it does."
3254         x_cpp="$cc -E"
3255         x_minus='-';
3256 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3257         $cc -P <testcpp.c >testcpp.out 2>&1; \
3258         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3259         echo "Yipee, that works!"
3260         x_cpp="$cc -P"
3261         x_minus='';
3262 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3263         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3264         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3265         echo "At long last!"
3266         x_cpp="$cc -P"
3267         x_minus='-';
3268 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3269         $cpp <testcpp.c >testcpp.out 2>&1; \
3270         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3271         echo "It works!"
3272         x_cpp="$cpp"
3273         x_minus='';
3274 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3275         $cpp - <testcpp.c >testcpp.out 2>&1; \
3276         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3277         echo "Hooray, it works!  I was beginning to wonder."
3278         x_cpp="$cpp"
3279         x_minus='-';
3280 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3281         $wrapper <testcpp.c >testcpp.out 2>&1; \
3282         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3283         x_cpp="$wrapper"
3284         x_minus=''
3285         echo "Eureka!"
3286 else
3287         dflt=''
3288         rp="No dice.  I can't find a C preprocessor.  Name one:"
3289         . ./myread
3290         x_cpp="$ans"
3291         x_minus=''
3292         $x_cpp <testcpp.c >testcpp.out 2>&1
3293         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3294                 echo "OK, that will do." >&4
3295         else
3296 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3297                 exit 1
3298         fi
3299 fi
3300
3301 case "$ok" in
3302 false)
3303         cppstdin="$x_cpp"
3304         cppminus="$x_minus"
3305         cpprun="$x_cpp"
3306         cpplast="$x_minus"
3307         set X $x_cpp
3308         shift
3309         case "$1" in
3310         "$cpp")
3311                 echo "Perhaps can we force $cc -E using a wrapper..."
3312                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3313                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3314                 then
3315                         echo "Yup, we can."
3316                         cppstdin="$wrapper"
3317                         cppminus='';
3318                 else
3319                         echo "Nope, we'll have to live without it..."
3320                 fi
3321                 ;;
3322         esac
3323         case "$cpprun" in
3324         "$wrapper")
3325                 cpprun=''
3326                 cpplast=''
3327                 ;;
3328         esac
3329         ;;
3330 esac
3331
3332 case "$cppstdin" in
3333 "$wrapper"|'cppstdin') ;;
3334 *) $rm -f $wrapper;;
3335 esac
3336 $rm -f testcpp.c testcpp.out
3337
3338 : decide how portable to be.  Allow command line overrides.
3339 case "$d_portable" in
3340 "$undef") ;;
3341 *)      d_portable="$define" ;;
3342 esac
3343
3344 : set up shell script to do ~ expansion
3345 cat >filexp <<EOSS
3346 $startsh
3347 : expand filename
3348 case "\$1" in
3349  ~/*|~)
3350         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3351         ;;
3352  ~*)
3353         if $test -f /bin/csh; then
3354                 /bin/csh -f -c "glob \$1"
3355                 failed=\$?
3356                 echo ""
3357                 exit \$failed
3358         else
3359                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3360                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3361                 if $test ! -d "\$dir"; then
3362                         me=\`basename \$0\`
3363                         echo "\$me: can't locate home directory for: \$name" >&2
3364                         exit 1
3365                 fi
3366                 case "\$1" in
3367                 */*)
3368                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3369                         ;;
3370                 *)
3371                         echo \$dir
3372                         ;;
3373                 esac
3374         fi
3375         ;;
3376 *)
3377         echo \$1
3378         ;;
3379 esac
3380 EOSS
3381 chmod +x filexp
3382 $eunicefix filexp
3383
3384 : now set up to get a file name
3385 cat <<EOS >getfile
3386 $startsh
3387 EOS
3388 cat <<'EOSC' >>getfile
3389 tilde=''
3390 fullpath=''
3391 already=''
3392 skip=''
3393 none_ok=''
3394 exp_file=''
3395 nopath_ok=''
3396 orig_rp="$rp"
3397 orig_dflt="$dflt"
3398 case "$gfpth" in
3399 '') gfpth='.' ;;
3400 esac
3401
3402 case "$fn" in
3403 *\(*)
3404         expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3405         fn=`echo $fn | sed 's/(.*)//'`
3406         ;;
3407 esac
3408
3409 case "$fn" in
3410 *:*)
3411         loc_file=`expr $fn : '.*:\(.*\)'`
3412         fn=`expr $fn : '\(.*\):.*'`
3413         ;;
3414 esac
3415
3416 case "$fn" in
3417 *~*) tilde=true;;
3418 esac
3419 case "$fn" in
3420 */*) fullpath=true;;
3421 esac
3422 case "$fn" in
3423 *+*) skip=true;;
3424 esac
3425 case "$fn" in
3426 *n*) none_ok=true;;
3427 esac
3428 case "$fn" in
3429 *e*) exp_file=true;;
3430 esac
3431 case "$fn" in
3432 *p*) nopath_ok=true;;
3433 esac
3434
3435 case "$fn" in
3436 *f*) type='File';;
3437 *d*) type='Directory';;
3438 *l*) type='Locate';;
3439 esac
3440
3441 what="$type"
3442 case "$what" in
3443 Locate) what='File';;
3444 esac
3445
3446 case "$exp_file" in
3447 '')
3448         case "$d_portable" in
3449         "$define") ;;
3450         *) exp_file=true;;
3451         esac
3452         ;;
3453 esac
3454
3455 cd ..
3456 while test "$type"; do
3457         redo=''
3458         rp="$orig_rp"
3459         dflt="$orig_dflt"
3460         case "$tilde" in
3461         true) rp="$rp (~name ok)";;
3462         esac
3463         . UU/myread
3464         if test -f UU/getfile.ok && \
3465                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3466         then
3467                 value="$ans"
3468                 ansexp="$ans"
3469                 break
3470         fi
3471         case "$ans" in
3472         none)
3473                 value=''
3474                 ansexp=''
3475                 case "$none_ok" in
3476                 true) type='';;
3477                 esac
3478                 ;;
3479         *)
3480                 case "$tilde" in
3481                 '') value="$ans"
3482                         ansexp="$ans";;
3483                 *)
3484                         value=`UU/filexp $ans`
3485                         case $? in
3486                         0)
3487                                 if test "$ans" != "$value"; then
3488                                         echo "(That expands to $value on this system.)"
3489                                 fi
3490                                 ;;
3491                         *) value="$ans";;
3492                         esac
3493                         ansexp="$value"
3494                         case "$exp_file" in
3495                         '') value="$ans";;
3496                         esac
3497                         ;;
3498                 esac
3499                 case "$fullpath" in
3500                 true)
3501                         case "$ansexp" in
3502                         /*) value="$ansexp" ;;
3503                         [a-zA-Z]:/*) value="$ansexp" ;;
3504                         *)
3505                                 redo=true
3506                                 case "$already" in
3507                                 true)
3508                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3509                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3510                                         ;;
3511                                 *)
3512                                 echo "Please give a full path name, starting with slash." >&4
3513                                         case "$tilde" in
3514                                         true)
3515                                 echo "Note that using ~name is ok provided it expands well." >&4
3516                                                 already=true
3517                                                 ;;
3518                                         esac
3519                                 esac
3520                                 ;;
3521                         esac
3522                         ;;
3523                 esac
3524                 case "$redo" in
3525                 '')
3526                         case "$type" in
3527                         File)
3528                                 for fp in $gfpth; do
3529                                         if test "X$fp" = X.; then
3530                                             pf="$ansexp"
3531                                         else    
3532                                             pf="$fp/$ansexp"
3533                                         fi
3534                                         if test -f "$pf"; then
3535                                                 type=''
3536                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3537                                         then
3538                                                 echo "($value is not a plain file, but that's ok.)"
3539                                                 type=''
3540                                         fi
3541                                         if test X"$type" = X; then
3542                                             value="$pf"
3543                                             break
3544                                         fi
3545                                 done
3546                                 ;;
3547                         Directory)
3548                                 for fp in $gfpth; do
3549                                         if test "X$fp" = X.; then
3550                                             dir="$ans"
3551                                             direxp="$ansexp"
3552                                         else    
3553                                             dir="$fp/$ansexp"
3554                                             direxp="$fp/$ansexp"
3555                                         fi
3556                                         if test -d "$direxp"; then
3557                                                 type=''
3558                                                 value="$dir"
3559                                                 break
3560                                         fi
3561                                 done
3562                                 ;;
3563                         Locate)
3564                                 if test -d "$ansexp"; then
3565                                         echo "(Looking for $loc_file in directory $value.)"
3566                                         value="$value/$loc_file"
3567                                         ansexp="$ansexp/$loc_file"
3568                                 fi
3569                                 if test -f "$ansexp"; then
3570                                         type=''
3571                                 fi
3572                                 case "$nopath_ok" in
3573                                 true)   case "$value" in
3574                                         */*) ;;
3575                                         *)      echo "Assuming $value will be in people's path."
3576                                                 type=''
3577                                                 ;;
3578                                         esac
3579                                         ;;
3580                                 esac
3581                                 ;;
3582                         esac
3583
3584                         case "$skip" in
3585                         true) type='';
3586                         esac
3587
3588                         case "$type" in
3589                         '') ;;
3590                         *)
3591                                 if test "$fastread" = yes; then
3592                                         dflt=y
3593                                 else
3594                                         dflt=n
3595                                 fi
3596                                 rp="$what $value doesn't exist.  Use that name anyway?"
3597                                 . UU/myread
3598                                 dflt=''
3599                                 case "$ans" in
3600                                 y*) type='';;
3601                                 *) echo " ";;
3602                                 esac
3603                                 ;;
3604                         esac
3605                         ;;
3606                 esac
3607                 ;;
3608         esac
3609 done
3610 cd UU
3611 ans="$value"
3612 rp="$orig_rp"
3613 dflt="$orig_dflt"
3614 rm -f getfile.ok
3615 test "X$gfpthkeep" != Xy && gfpth=""
3616 EOSC
3617
3618 : What should the include directory be ?
3619 echo " "
3620 $echo $n "Hmm...  $c"
3621 dflt='/usr/include'
3622 incpath=''
3623 mips_type=''
3624 if $test -f /bin/mips && /bin/mips; then
3625         echo "Looks like a MIPS system..."
3626         $cat >usr.c <<'EOCP'
3627 #ifdef SYSTYPE_BSD43
3628 /bsd43
3629 #endif
3630 EOCP
3631         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3632                 dflt='/bsd43/usr/include'
3633                 incpath='/bsd43'
3634                 mips_type='BSD 4.3'
3635         else
3636                 mips_type='System V'
3637         fi
3638         $rm -f usr.c usr.out
3639         echo "and you're compiling with the $mips_type compiler and libraries."
3640         xxx_prompt=y
3641         echo "exit 0" >mips
3642 else
3643         echo "Doesn't look like a MIPS system."
3644         xxx_prompt=n
3645         echo "exit 1" >mips
3646 fi
3647 chmod +x mips
3648 $eunicefix mips
3649 case "$usrinc" in
3650 '') ;;
3651 *) dflt="$usrinc";;
3652 esac
3653 case "$xxx_prompt" in
3654 y)      fn=d/
3655         echo " "
3656         rp='Where are the include files you want to use?'
3657         . ./getfile
3658         usrinc="$ans"
3659         ;;
3660 *)      usrinc="$dflt"
3661         ;;
3662 esac
3663
3664 : Set private lib path
3665 case "$plibpth" in
3666 '') if ./mips; then
3667                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3668         fi;;
3669 esac
3670 case "$libpth" in
3671 ' ') dlist='';;
3672 '') dlist="$loclibpth $plibpth $glibpth";;
3673 *) dlist="$libpth";;
3674 esac
3675
3676 : Now check and see which directories actually exist, avoiding duplicates
3677 libpth=''
3678 for xxx in $dlist
3679 do
3680     if $test -d $xxx; then
3681                 case " $libpth " in
3682                 *" $xxx "*) ;;
3683                 *) libpth="$libpth $xxx";;
3684                 esac
3685     fi
3686 done
3687 $cat <<'EOM'
3688
3689 Some systems have incompatible or broken versions of libraries.  Among
3690 the directories listed in the question below, please remove any you
3691 know not to be holding relevant libraries, and add any that are needed.
3692 Say "none" for none.
3693
3694 EOM
3695 case "$libpth" in
3696 '') dflt='none';;
3697 *)
3698         set X $libpth
3699         shift
3700         dflt=${1+"$@"}
3701         ;;
3702 esac
3703 rp="Directories to use for library searches?"
3704 . ./myread
3705 case "$ans" in
3706 none) libpth=' ';;
3707 *) libpth="$ans";;
3708 esac
3709
3710 : compute shared library extension
3711 case "$so" in
3712 '')
3713         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3714                 dflt='sl'
3715         else
3716                 dflt='so'
3717         fi
3718         ;;
3719 *) dflt="$so";;
3720 esac
3721 $cat <<EOM
3722
3723 On some systems, shared libraries may be available.  Answer 'none' if
3724 you want to suppress searching of shared libraries for the remainder
3725 of this configuration.
3726
3727 EOM
3728 rp='What is the file extension used for shared libraries?'
3729 . ./myread
3730 so="$ans"
3731
3732 : Define several unixisms.
3733 : Hints files or command line option can be used to override them.
3734 : The convoluted testing is in case hints files set either the old
3735 : or the new name.
3736 case "$_exe" in
3737 '')     case "$exe_ext" in
3738     '') ;;
3739         *)      _exe="$exe_ext" ;;
3740         esac
3741         ;;
3742 esac
3743 case "$_a" in
3744 '')     case "$lib_ext" in
3745     '') _a='.a';;
3746         *)      _a="$lib_ext" ;;
3747         esac
3748         ;;
3749 esac
3750 case "$_o" in
3751 '') case "$obj_ext" in
3752         '')     _o='.o';;
3753         *)      _o="$obj_ext";;
3754         esac
3755         ;;
3756 esac
3757 case "$p_" in
3758 '') case "$path_sep" in
3759         '')     p_=':';;
3760         *)      p_="$path_sep";;
3761         esac
3762         ;;
3763 esac
3764 exe_ext=$_exe
3765 lib_ext=$_a
3766 obj_ext=$_o
3767 path_sep=$p_
3768
3769 : Which makefile gets called first.  This is used by make depend.
3770 case "$firstmakefile" in
3771 '') firstmakefile='makefile';;
3772 esac
3773
3774 case "$usesocks" in
3775 $define|true|[yY]*)     dflt='y';;
3776 *) dflt='n';;
3777 esac
3778 cat <<EOM
3779
3780 Perl can be built to use the SOCKS proxy protocol library.  To do so,
3781 Configure must be run with -Dusesocks.  If you use SOCKS you also need
3782 to use the PerlIO abstraction layer, this will be implicitly selected.
3783
3784 If this doesn't make any sense to you, just accept the default '$dflt'.
3785 EOM
3786 rp='Build Perl for SOCKS?'
3787 . ./myread
3788 case "$ans" in
3789 y|Y)    val="$define" ;;     
3790 *)      val="$undef" ;;
3791 esac
3792 set usesocks
3793 eval $setvar
3794
3795 case "$usesocks" in
3796 $define|true|[yY]*) useperlio="$define";;
3797 esac
3798
3799 : Looking for optional libraries
3800 echo " "
3801 echo "Checking for optional libraries..." >&4
3802 case "$libs" in
3803 ' '|'') dflt='';;
3804 *) dflt="$libs";;
3805 esac
3806 case "$libswanted" in
3807 '') libswanted='c_s';;
3808 esac
3809 case "$usesocks" in
3810 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
3811 esac
3812 libsfound=''
3813 libsfiles=''
3814 libsdirs=''
3815 libspath=''
3816 for thisdir in $libpth $xlibpth; do
3817   test -d $thisdir && libspath="$libspath $thisdir"
3818 done
3819 for thislib in $libswanted; do
3820         for thisdir in $libspath; do
3821             xxx=''
3822             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3823                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
3824                 $test -f "$xxx" && eval $libscheck
3825                 $test -f "$xxx" && libstyle=shared
3826             fi
3827             if test ! -f "$xxx"; then
3828                 xxx=$thisdir/lib$thislib.$so
3829                 $test -f "$xxx" && eval $libscheck
3830                 $test -f "$xxx" && libstyle=shared
3831             fi  
3832             if test ! -f "$xxx"; then
3833                 xxx=$thisdir/lib$thislib$_a
3834                 $test -f "$xxx" && eval $libscheck
3835                 $test -f "$xxx" && libstyle=static
3836             fi
3837             if test ! -f "$xxx"; then
3838                 xxx=$thisdir/$thislib$_a
3839                 $test -f "$xxx" && eval $libscheck
3840                 $test -f "$xxx" && libstyle=static
3841             fi
3842             if test ! -f "$xxx"; then
3843                 xxx=$thisdir/lib${thislib}_s$_a
3844                 $test -f "$xxx" && eval $libscheck
3845                 $test -f "$xxx" && libstyle=static
3846                 $test -f "$xxx" && thislib=${thislib}_s
3847             fi
3848             if test ! -f "$xxx"; then
3849                 xxx=$thisdir/Slib$thislib$_a
3850                 $test -f "$xxx" && eval $libscheck
3851                 $test -f "$xxx" && libstyle=static
3852             fi
3853             if $test -f "$xxx"; then
3854                 case "$libstyle" in
3855                 shared) echo "Found -l$thislib (shared)." ;;
3856                 static) echo "Found -l$thislib." ;;
3857                 *)      echo "Found -l$thislib ($libstyle)." ;;
3858                 esac
3859                 case " $dflt " in
3860                 *"-l$thislib "*);;
3861                 *) dflt="$dflt -l$thislib"
3862                    libsfound="$libsfound $xxx"
3863                    yyy=`basename $xxx`
3864                    libsfiles="$libsfiles $yyy"
3865                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
3866                    case " $libsdirs " in
3867                    *" $yyy "*) ;;
3868                    *) libsdirs="$libsdirs $yyy" ;;
3869                    esac
3870                    ;;
3871                 esac
3872                 break
3873             fi  
3874         done
3875         if $test ! -f "$xxx"; then
3876             echo "No -l$thislib."
3877         fi
3878 done
3879 set X $dflt
3880 shift
3881 dflt="$*"
3882 case "$libs" in
3883 '') dflt="$dflt";;
3884 *) dflt="$libs";;
3885 esac
3886 case "$dflt" in
3887 ' '|'') dflt='none';;
3888 esac
3889
3890 $cat <<EOM
3891
3892 In order to compile $package on your machine, a number of libraries
3893 are usually needed.  Include any other special libraries here as well.
3894 Say "none" for none.  The default list is almost always right.
3895 EOM
3896
3897 echo " "
3898 rp="What libraries to use?"
3899 . ./myread
3900 case "$ans" in
3901 none) libs=' ';;
3902 *) libs="$ans";;
3903 esac
3904
3905 : determine optimization, if desired, or use for debug flag also
3906 case "$optimize" in
3907 ' '|$undef) dflt='none';;
3908 '') dflt='-O';;
3909 *) dflt="$optimize";;
3910 esac
3911 $cat <<EOH
3912
3913 By default, $package compiles with the -O flag to use the optimizer.
3914 Alternately, you might want to use the symbolic debugger, which uses
3915 the -g flag (on traditional Unix systems).  Either flag can be
3916 specified here.  To use neither flag, specify the word "none".
3917
3918 EOH
3919 rp="What optimizer/debugger flag should be used?"
3920 . ./myread
3921 optimize="$ans"
3922 case "$optimize" in
3923 'none') optimize=" ";;
3924 esac
3925
3926 dflt=''
3927 : We will not override a previous value, but we might want to
3928 : augment a hint file
3929 case "$hint" in
3930 default|recommended)
3931         case "$gccversion" in
3932         1*) dflt='-fpcc-struct-return' ;;
3933         esac
3934         case "$optimize" in
3935         *-g*) dflt="$dflt -DDEBUGGING";;
3936         esac
3937         case "$gccversion" in
3938         2*) if test -d /etc/conf/kconfig.d &&
3939                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
3940                 then
3941                         dflt="$dflt -posix"
3942                 fi
3943                 ;;
3944         esac
3945         case "$gccversion" in
3946         1*) ;;
3947         2.[0-8]*) ;;
3948         ?*)     echo " "
3949                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
3950                 echo 'int main(void) { return 0; }' > gcctest.c
3951                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
3952                         echo "Yes, it does." 2>&1
3953                         case "$ccflags" in
3954                         *strict-aliasing*) 
3955                                 echo "Leaving current flags $ccflags alone." 2>&1
3956                                 ;;
3957                         *) dflt="$dflt -fno-strict-aliasing" ;;
3958                         esac
3959                 else
3960                         echo "Nope, it doesn't, but that's ok." 2>&1
3961                 fi
3962                 ;;
3963         esac
3964         ;;
3965 esac
3966
3967 case "$mips_type" in
3968 *BSD*|'') inclwanted="$locincpth $usrinc";;
3969 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
3970 esac
3971 for thisincl in $inclwanted; do
3972         if $test -d $thisincl; then
3973                 if $test x$thisincl != x$usrinc; then
3974                         case "$dflt" in
3975                         *" -I$thisincl "*);;
3976                         *) dflt="$dflt -I$thisincl ";;
3977                         esac
3978                 fi
3979         fi
3980 done
3981
3982 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
3983         xxx=true;
3984 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
3985         xxx=true;
3986 else
3987         xxx=false;
3988 fi;
3989 if $xxx; then
3990         case "$dflt" in
3991         *$2*);;
3992         *) dflt="$dflt -D$2";;
3993         esac;
3994 fi'
3995
3996 set signal.h LANGUAGE_C; eval $inctest
3997
3998 case "$usesocks" in
3999 $define)
4000         ccflags="$ccflags -DSOCKS"
4001         ;;
4002 esac
4003
4004 case "$hint" in
4005 default|recommended) dflt="$ccflags $dflt" ;;
4006 *) dflt="$ccflags";;
4007 esac
4008
4009 case "$dflt" in
4010 ''|' ') dflt=none;;
4011 esac
4012
4013 $cat <<EOH
4014
4015 Your C compiler may want other flags.  For this question you should include
4016 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4017 but you should NOT include libraries or ld flags like -lwhatever.  If you
4018 want $package to honor its debug switch, you should include -DDEBUGGING here.
4019 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4020
4021 To use no flags, specify the word "none".
4022
4023 EOH
4024 set X $dflt
4025 shift
4026 dflt=${1+"$@"}
4027 rp="Any additional cc flags?"
4028 . ./myread
4029 case "$ans" in
4030 none) ccflags='';;
4031 *) ccflags="$ans";;
4032 esac
4033
4034 : the following weeds options from ccflags that are of no interest to cpp
4035 cppflags="$ccflags"
4036 case "$gccversion" in
4037 1*) cppflags="$cppflags -D__GNUC__"
4038 esac
4039 case "$mips_type" in
4040 '');;
4041 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4042 esac
4043 case "$cppflags" in
4044 '');;
4045 *)
4046         echo " "
4047         echo "Let me guess what the preprocessor flags are..." >&4
4048         set X $cppflags
4049         shift
4050         cppflags=''
4051         $cat >cpp.c <<'EOM'
4052 #define BLURFL foo
4053
4054 BLURFL xx LFRULB
4055 EOM
4056         previous=''
4057         for flag in $*
4058         do
4059                 case "$flag" in
4060                 -*) ftry="$flag";;
4061                 *) ftry="$previous $flag";;
4062                 esac
4063                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4064                         >cpp1.out 2>/dev/null && \
4065                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4066                         >cpp2.out 2>/dev/null && \
4067                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4068                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4069                 then
4070                         cppflags="$cppflags $ftry"
4071                         previous=''
4072                 else
4073                         previous="$flag"
4074                 fi
4075         done
4076         set X $cppflags
4077         shift
4078         cppflags=${1+"$@"}
4079         case "$cppflags" in
4080         *-*)  echo "They appear to be: $cppflags";;
4081         esac
4082         $rm -f cpp.c cpp?.out
4083         ;;
4084 esac
4085
4086 : flags used in final linking phase
4087 case "$ldflags" in
4088 '') if ./venix; then
4089                 dflt='-i -z'
4090         else
4091                 dflt=''
4092         fi
4093         case "$ccflags" in
4094         *-posix*) dflt="$dflt -posix" ;;
4095         esac
4096         ;;
4097 *) dflt="$ldflags";;
4098 esac
4099
4100 : Try to guess additional flags to pick up local libraries.
4101 for thislibdir in $libpth; do
4102         case " $loclibpth " in
4103         *" $thislibdir "*)
4104                 case "$dflt " in 
4105                 *"-L$thislibdir "*) ;;
4106                 *)  dflt="$dflt -L$thislibdir" ;;
4107                 esac
4108                 ;;
4109         esac
4110 done
4111
4112 case "$dflt" in
4113 '') dflt='none' ;;
4114 esac
4115
4116 $cat <<EOH
4117
4118 Your C linker may need flags.  For this question you should
4119 include -L/whatever and any other flags used by the C linker, but you
4120 should NOT include libraries like -lwhatever.
4121
4122 Make sure you include the appropriate -L/path flags if your C linker
4123 does not normally search all of the directories you specified above,
4124 namely
4125         $libpth
4126 To use no flags, specify the word "none".
4127
4128 EOH
4129
4130 rp="Any additional ld flags (NOT including libraries)?"
4131 . ./myread
4132 case "$ans" in
4133 none) ldflags='';;
4134 *) ldflags="$ans";;
4135 esac
4136 rmlist="$rmlist pdp11"
4137
4138 : coherency check
4139 echo " "
4140 echo "Checking your choice of C compiler and flags for coherency..." >&4
4141 $cat > try.c <<'EOF'
4142 #include <stdio.h>
4143 int main() { printf("Ok\n"); exit(0); }
4144 EOF
4145 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
4146 shift
4147 $cat >try.msg <<'EOM'
4148 I've tried to compile and run the following simple program:
4149
4150 EOM
4151 $cat try.c >> try.msg
4152
4153 $cat >> try.msg <<EOM
4154
4155 I used the command:
4156
4157         $*
4158         ./try
4159
4160 and I got the following output:
4161
4162 EOM
4163 dflt=y
4164 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
4165         if $sh -c './try' >>try.msg 2>&1; then
4166                 xxx=`./try`
4167                 case "$xxx" in
4168                 "Ok") dflt=n ;;
4169                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4170                         case " $libs " in
4171                         *" -lsfio "*)
4172                                 cat >> try.msg <<'EOQS'
4173 If $libs contains -lsfio, and sfio is mis-configured, then it
4174 sometimes (apparently) runs and exits with a 0 status, but with no
4175 output!  It may have to do with sfio's use of _exit vs. exit.
4176
4177 EOQS
4178                                 rp="You have a big problem.  Shall I abort Configure"
4179                                 dflt=y
4180                                 ;;
4181                         esac
4182                         ;;
4183                 esac
4184         else
4185                 echo "The program compiled OK, but exited with status $?." >>try.msg
4186                 rp="You have a problem.  Shall I abort Configure"
4187                 dflt=y
4188         fi
4189 else
4190         echo "I can't compile the test program." >>try.msg
4191         rp="You have a BIG problem.  Shall I abort Configure"
4192         dflt=y
4193 fi
4194 case "$dflt" in
4195 y)
4196         $cat try.msg >&4
4197         case "$knowitall" in
4198         '')
4199                 echo "(The supplied flags or libraries might be incorrect.)"
4200                 ;;
4201         *) dflt=n;;
4202         esac
4203         echo " "
4204         . ./myread
4205         case "$ans" in
4206         n*|N*) ;;
4207         *)      echo "Ok.  Stopping Configure." >&4
4208                 exit 1
4209                 ;;
4210         esac
4211         ;;
4212 n) echo "OK, that should do.";;
4213 esac
4214 $rm -f try try.* core
4215
4216 : define an is-a-typedef? function
4217 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4218 case "$inclist" in
4219 "") inclist="sys/types.h";;
4220 esac;
4221 eval "varval=\$$var";
4222 case "$varval" in
4223 "")
4224         $rm -f temp.c;
4225         for inc in $inclist; do
4226                 echo "#include <$inc>" >>temp.c;
4227         done;
4228         echo "#ifdef $type" >> temp.c;
4229         echo "printf(\"We have $type\");" >> temp.c;
4230         echo "#endif" >> temp.c;
4231         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4232         if $contains $type temp.E >/dev/null 2>&1; then
4233                 eval "$var=\$type";
4234         else
4235                 eval "$var=\$def";
4236         fi;
4237         $rm -f temp.?;;
4238 *) eval "$var=\$varval";;
4239 esac'
4240
4241 : define an is-a-typedef? function that prompts if the type is not available.
4242 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4243 case "$inclist" in
4244 "") inclist="sys/types.h";;
4245 esac;
4246 eval "varval=\$$var";
4247 case "$varval" in
4248 "")
4249         $rm -f temp.c;
4250         for inc in $inclist; do
4251                 echo "#include <$inc>" >>temp.c;
4252         done;
4253         echo "#ifdef $type" >> temp.c;
4254         echo "printf(\"We have $type\");" >> temp.c;
4255         echo "#endif" >> temp.c;
4256         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4257         echo " " ;
4258         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
4259         if $contains $type temp.E >/dev/null 2>&1; then
4260                 echo "$type found." >&4;
4261                 eval "$var=\$type";
4262         else
4263                 echo "$type NOT found." >&4;
4264                 dflt="$def";
4265                 . ./myread ;
4266                 eval "$var=\$ans";
4267         fi;
4268         $rm -f temp.?;;
4269 *) eval "$var=\$varval";;
4270 esac'
4271
4272 : define a shorthand compile call
4273 compile='
4274 mc_file=$1;
4275 shift;
4276 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
4277 : define a shorthand compile call for compilations that should be ok.
4278 compile_ok='
4279 mc_file=$1;
4280 shift;
4281 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
4282
4283 : check for lengths of integral types
4284 echo " "
4285 case "$intsize" in
4286 '')
4287         echo "Checking to see how big your integers are..." >&4
4288         $cat >intsize.c <<'EOCP'
4289 #include <stdio.h>
4290 int main()
4291 {
4292         printf("intsize=%d;\n", (int)sizeof(int));
4293         printf("longsize=%d;\n", (int)sizeof(long));
4294         printf("shortsize=%d;\n", (int)sizeof(short));
4295         exit(0);
4296 }
4297 EOCP
4298         set intsize
4299         if eval $compile_ok && ./intsize > /dev/null; then
4300                 eval `./intsize`
4301                 echo "Your integers are $intsize bytes long."
4302                 echo "Your long integers are $longsize bytes long."
4303                 echo "Your short integers are $shortsize bytes long."
4304         else
4305                 $cat >&4 <<EOM
4306 !
4307 Help! I can't compile and run the intsize test program: please enlighten me!
4308 (This is probably a misconfiguration in your system or libraries, and
4309 you really ought to fix it.  Still, I'll try anyway.)
4310 !
4311 EOM
4312                 dflt=4
4313                 rp="What is the size of an integer (in bytes)?"
4314                 . ./myread
4315                 intsize="$ans"
4316                 dflt=$intsize
4317                 rp="What is the size of a long integer (in bytes)?"
4318                 . ./myread
4319                 longsize="$ans"
4320                 dflt=2
4321                 rp="What is the size of a short integer (in bytes)?"
4322                 . ./myread
4323                 shortsize="$ans"
4324         fi
4325         ;;
4326 esac
4327 $rm -f intsize intsize.*
4328
4329 : see what type lseek is declared as in the kernel
4330 rp="What is the type used for lseek's offset on this system?"
4331 set off_t lseektype long stdio.h sys/types.h
4332 eval $typedef_ask
4333
4334 echo " "
4335 echo "Checking to see how big your file offsets are..." >&4
4336 $cat >try.c <<EOCP
4337 #include <sys/types.h>
4338 #include <stdio.h>
4339 int main()
4340 {
4341     printf("%d\n", (int)sizeof($lseektype));
4342     return(0); 
4343 }
4344 EOCP
4345 set try
4346 if eval $compile_ok; then
4347         lseeksize=`./try`
4348         echo "Your file offsets are $lseeksize bytes long."
4349 else
4350         dflt=$longsize
4351         echo " "
4352         echo "(I can't seem to compile the test program.  Guessing...)"
4353         rp="What is the size of your file offsets (in bytes)?"
4354         . ./myread
4355         lseeksize="$ans"
4356 fi
4357 $rm -f try.c try
4358
4359 : see what type file positions are declared as in the library
4360 rp="What is the type for file position used by fsetpos()?"
4361 set fpos_t fpostype long stdio.h sys/types.h
4362 eval $typedef_ask
4363
4364 echo " "
4365 case "$fpostype" in
4366 *_t) zzz="$fpostype"    ;;
4367 *)   zzz="fpos_t"       ;;
4368 esac
4369 echo "Checking the size of $zzz..." >&4 
4370 cat > try.c <<EOCP
4371 #include <sys/types.h>
4372 #include <stdio.h>
4373 int main() {
4374     printf("%d\n", (int)sizeof($fpostype));
4375     exit(0);
4376 }
4377 EOCP
4378 set try
4379 if eval $compile_ok; then
4380         yyy=`./try`
4381         case "$yyy" in
4382         '')     fpossize=4
4383                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4384                 ;;
4385         *)      fpossize=$yyy
4386                 echo "Your $zzz is $fpossize bytes long."
4387                 ;;
4388         esac
4389 else
4390         dflt="$longsize"
4391         echo " " >&4
4392         echo "(I can't compile the test program.  Guessing...)" >&4
4393         rp="What is the size of your file positions (in bytes)?"
4394         . ./myread
4395         fpossize="$ans"
4396 fi
4397
4398
4399
4400 # Backward compatibility (uselfs is deprecated).
4401 case "$uselfs" in
4402 "$define"|true|[yY]*)
4403         cat <<EOM >&4
4404
4405 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
4406 EOM
4407         uselargefiles="$define"
4408         ;;
4409 esac                          
4410
4411 case "$lseeksize:$fpossize" in
4412 8:8) cat <<EOM
4413
4414 You can have files larger than 2 gigabytes.
4415 EOM
4416    val="$define" ;;
4417 *)    case "$uselargefiles" in
4418    "$undef"|false|[nN]*) dflt='n' ;;
4419    *)   dflt='y' ;;
4420    esac
4421    cat <<EOM
4422
4423 Perl can be built to understand large files (files larger than 2 gigabytes)
4424 on some systems.  To do so, Configure can be run with -Duselargefiles.
4425
4426 If this doesn't make any sense to you, just accept the default '$dflt'.
4427 EOM
4428    rp='Try to understand large files, if available?'
4429    . ./myread
4430    case "$ans" in
4431    y|Y)         val="$define" ;;
4432    *)           val="$undef"  ;;
4433    esac
4434    ;;
4435 esac
4436 set uselargefiles
4437 eval $setvar
4438 case "$uselargefiles" in
4439 "$define")
4440 : Look for a hint-file generated 'call-back-unit'.  If the
4441 : user has specified that a large files perl is to be built,
4442 : we may need to set or change some other defaults.
4443         if $test -f uselargefiles.cbu; then
4444                 echo "Your platform has some specific hints for large file builds, using them..."
4445                 . ./uselargefiles.cbu
4446                 echo " "
4447                 echo "Rechecking to see how big your file offsets are..." >&4
4448                 $cat >try.c <<EOCP
4449 #include <sys/types.h>
4450 #include <stdio.h>
4451 int main()
4452 {
4453     printf("%d\n", (int)sizeof($lseektype));
4454     return(0); 
4455 }
4456 EOCP
4457                 set try
4458                 if eval $compile_ok; then
4459                         lseeksize=`./try`
4460                         $echo "Your file offsets are now $lseeksize bytes long."
4461                 else
4462                         dflt="$lseeksize"
4463                         echo " "
4464                         echo "(I can't seem to compile the test program.  Guessing...)"
4465                         rp="What is the size of your file offsets (in bytes)?"
4466                         . ./myread
4467                         lseeksize="$ans"
4468                 fi
4469                 case "$fpostype" in
4470                 *_t) zzz="$fpostype"    ;;
4471                 *)   zzz="fpos_t"       ;;
4472                 esac
4473                 $echo $n "Rechecking the size of $zzz...$c" >&4 
4474                 $cat > try.c <<EOCP
4475 #include <sys/types.h>
4476 #include <stdio.h>
4477 int main() {
4478     printf("%d\n", (int)sizeof($fpostype));
4479     exit(0);
4480 }
4481 EOCP
4482                 set try
4483                 if eval $compile_ok; then
4484                         yyy=`./try`
4485                         dflt="$lseeksize"
4486                         case "$yyy" in
4487                         '')     echo " "
4488                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4489                                 ;;
4490                         *)      fpossize=$yyy
4491                                 echo " $fpossize bytes." >&4
4492                                 ;;
4493                         esac
4494                 else
4495                         dflt="$fpossize"
4496                         echo " "
4497                         echo "(I can't compile the test program.  Guessing...)" >&4
4498                         rp="What is the size of your file positions (in bytes)?"
4499                         . ./myread
4500                         fpossize="$ans"
4501                 fi
4502                 $rm -f try.c try
4503         fi
4504         ;;
4505 esac
4506
4507
4508 case "$usemorebits" in
4509 "$define"|true|[yY]*)
4510         use64bitint="$define"
4511         uselongdouble="$define"
4512         usemorebits="$define"
4513         ;;
4514 *)      usemorebits="$undef"
4515         ;;
4516 esac
4517
4518
4519 case "$uselonglong" in
4520 "$define"|true|[yY]*)
4521         cat <<EOM >&4
4522
4523 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
4524 EOM
4525         use64bitint="$define"
4526         ;;
4527 esac                          
4528 case "$use64bits" in
4529 "$define"|true|[yY]*)
4530         cat <<EOM >&4
4531
4532 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
4533 EOM
4534         use64bitint="$define"
4535         ;;
4536 esac                          
4537 case "$use64bitints" in
4538 "$define"|true|[yY]*)
4539         cat <<EOM >&4
4540
4541 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
4542 EOM
4543         use64bitint="$define"
4544         ;;
4545 esac                          
4546 case "$use64bitsint" in
4547 "$define"|true|[yY]*)
4548         cat <<EOM >&4
4549
4550 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
4551 EOM
4552         use64bitint="$define"
4553         ;;
4554 esac                          
4555 case "$uselonglongs" in
4556 "$define"|true|[yY]*)
4557         cat <<EOM >&4
4558
4559 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
4560 EOM
4561         use64bitint="$define"
4562         ;;
4563 esac                          
4564 case "$use64bitsall" in
4565 "$define"|true|[yY]*)
4566         cat <<EOM >&4
4567
4568 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
4569 EOM
4570         use64bitall="$define"
4571         ;;
4572 esac                          
4573
4574 case "$ccflags" in
4575 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
4576 esac
4577 case "$use64bitall" in
4578 "$define"|true|[yY]*) use64bitint="$define" ;;
4579 esac
4580
4581 case "$longsize" in
4582 8) cat <<EOM
4583
4584 You have natively 64-bit long integers.
4585 EOM
4586    val="$define"
4587    ;;
4588 *) case "$use64bitint" in
4589    "$define"|true|[yY]*) dflt='y';;
4590    *) dflt='n';;
4591    esac
4592    cat <<EOM
4593
4594 Perl can be built to take advantage of 64-bit integer types
4595 on some systems.  To do so, Configure can be run with -Duse64bitint.
4596 Choosing this option will most probably introduce binary incompatibilities.
4597
4598 If this doesn't make any sense to you, just accept the default '$dflt'.
4599 EOM
4600    rp='Try to use 64-bit integers, if available?'
4601    . ./myread
4602    case "$ans" in
4603    [yY]*) val="$define" ;;
4604    *)     val="$undef"  ;;
4605    esac
4606    ;;
4607 esac
4608 set use64bitint
4609 eval $setvar
4610
4611 case "$use64bitall" in
4612 "$define"|true|[yY]*) dflt='y' ;;
4613 *) case "$longsize" in
4614    8) dflt='y' ;;
4615    *) dflt='n' ;;
4616    esac
4617    ;;
4618 esac    
4619 cat <<EOM
4620
4621 You may also choose to try maximal 64-bitness.  It means using as much
4622 64-bitness as possible on the platform.  This in turn means even more
4623 binary incompatibilities.  On the other hand, your platform may not
4624 have any more 64-bitness available than what you already have chosen.
4625
4626 If this doesn't make any sense to you, just accept the default '$dflt'.
4627 EOM
4628 rp='Try to use maximal 64-bit support, if available?'
4629 . ./myread
4630 case "$ans" in
4631 [yY]*) val="$define" ;;
4632 *)     val="$undef"  ;;
4633 esac
4634 set use64bitall
4635 eval $setvar
4636 case "$use64bitall" in
4637 "$define")
4638         case "$use64bitint" in
4639         "$undef")
4640                 cat <<EOM
4641
4642 Since you have chosen a maximally 64-bit build, I'm also turning on
4643 the use of 64-bit integers.
4644 EOM
4645                 use64bitint="$define" ;;
4646         esac
4647         ;;
4648 esac
4649
4650 case "$use64bitint" in
4651 "$define"|true|[yY]*)
4652 : Look for a hint-file generated 'call-back-unit'.  If the
4653 : user has specified that a 64-bit perl is to be built,
4654 : we may need to set or change some other defaults.
4655         if $test -f use64bitint.cbu; then
4656                 echo "Your platform has some specific hints for 64-bit integers, using them..."
4657                 . ./use64bitint.cbu
4658         fi
4659         case "$longsize" in
4660         4) case "$archname64" in
4661            '') archname64=64int ;;
4662            esac
4663            ;;
4664         esac
4665         ;;
4666 esac
4667
4668 case "$use64bitall" in
4669 "$define"|true|[yY]*)
4670 : Look for a hint-file generated 'call-back-unit'.  If the
4671 : user has specified that a maximally 64-bit perl is to be built,
4672 : we may need to set or change some other defaults.
4673         if $test -f use64bitall.cbu; then
4674                 echo "Your platform has some specific hints for 64-bit builds, using them..."
4675                 . ./use64bitall.cbu
4676         fi
4677         case "$longsize" in
4678         4) case "$archname64" in
4679            ''|64int) archname64=64all ;;
4680            esac
4681            ;;
4682         esac
4683         ;;
4684 esac
4685
4686 echo " "
4687 echo "Checking for GNU C Library..." >&4
4688 cat >gnulibc.c <<EOM
4689 #include <stdio.h>
4690 int main()
4691 {
4692 #ifdef __GLIBC__
4693     exit(0);
4694 #else
4695     exit(1);
4696 #endif
4697 }
4698 EOM
4699 set gnulibc
4700 if eval $compile_ok && ./gnulibc; then
4701         val="$define"
4702         echo "You are using the GNU C Library"
4703 else
4704         val="$undef"
4705         echo "You are not using the GNU C Library"
4706 fi
4707 $rm -f gnulibc*
4708 set d_gnulibc
4709 eval $setvar
4710
4711 : see if nm is to be used to determine whether a symbol is defined or not
4712 case "$usenm" in
4713 '')
4714         dflt=''
4715         case "$d_gnulibc" in
4716         "$define")
4717                 echo " "
4718                 echo "nm probably won't work on the GNU C Library." >&4
4719                 dflt=n
4720                 ;;
4721         esac
4722         case "$dflt" in
4723         '') 
4724                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4725                         echo " "
4726                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4727                         echo "'nm' won't be sufficient on this sytem." >&4
4728                         dflt=n
4729                 fi
4730                 ;;
4731         esac
4732         case "$dflt" in
4733         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4734                 if $test $dflt -gt 20; then
4735                         dflt=y
4736                 else
4737                         dflt=n
4738                 fi
4739                 ;;
4740         esac
4741         ;;
4742 *)
4743         case "$usenm" in
4744         true|$define) dflt=y;;
4745         *) dflt=n;;
4746         esac
4747         ;;
4748 esac
4749 $cat <<EOM
4750
4751 I can use $nm to extract the symbols from your C libraries. This
4752 is a time consuming task which may generate huge output on the disk (up
4753 to 3 megabytes) but that should make the symbols extraction faster. The
4754 alternative is to skip the 'nm' extraction part and to compile a small
4755 test program instead to determine whether each symbol is present. If
4756 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4757 this may be the best solution.
4758
4759 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4760
4761 EOM
4762 rp="Shall I use $nm to extract C symbols from the libraries?"
4763 . ./myread
4764 case "$ans" in
4765 [Nn]*) usenm=false;;
4766 *) usenm=true;;
4767 esac
4768
4769 runnm=$usenm
4770 case "$reuseval" in
4771 true) runnm=false;;
4772 esac
4773
4774 : nm options which may be necessary
4775 case "$nm_opt" in
4776 '') if $test -f /mach_boot; then
4777                 nm_opt=''       # Mach
4778         elif $test -d /usr/ccs/lib; then
4779                 nm_opt='-p'     # Solaris (and SunOS?)
4780         elif $test -f /dgux; then
4781                 nm_opt='-p'     # DG-UX
4782         elif $test -f /lib64/rld; then
4783                 nm_opt='-p'     # 64-bit Irix
4784         else
4785                 nm_opt=''
4786         fi;;
4787 esac
4788
4789 : nm options which may be necessary for shared libraries but illegal
4790 : for archive libraries.  Thank you, Linux.
4791 case "$nm_so_opt" in
4792 '')     case "$myuname" in
4793         *linux*)
4794                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4795                         nm_so_opt='--dynamic'
4796                 fi
4797                 ;;
4798         esac
4799         ;;
4800 esac
4801
4802 case "$runnm" in
4803 true)
4804 : get list of predefined functions in a handy place
4805 echo " "
4806 case "$libc" in
4807 '') libc=unknown
4808         case "$libs" in
4809         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4810         esac
4811         ;;
4812 esac
4813 libnames='';
4814 case "$libs" in
4815 '') ;;
4816 *)  for thislib in $libs; do
4817         case "$thislib" in
4818         -lc|-lc_s)
4819                 : Handle C library specially below.
4820                 ;;
4821         -l*)
4822                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4823                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4824                         :
4825                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4826                         :
4827                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4828                         :
4829                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4830                         :
4831                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4832                         :
4833                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4834                         :
4835                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4836                         :
4837                 else
4838                         try=''
4839                 fi
4840                 libnames="$libnames $try"
4841                 ;;
4842         *) libnames="$libnames $thislib" ;;
4843         esac
4844         done
4845         ;;
4846 esac
4847 xxx=normal
4848 case "$libc" in
4849 unknown)
4850         set /lib/libc.$so
4851         for xxx in $libpth; do
4852                 $test -r $1 || set $xxx/libc.$so
4853                 : The messy sed command sorts on library version numbers.
4854                 $test -r $1 || \
4855                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4856                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4857                                 h
4858                                 s/[0-9][0-9]*/0000&/g
4859                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4860                                 G
4861                                 s/\n/ /' | \
4862                          $sort | $sed -e 's/^.* //'`
4863                 eval set \$$#
4864         done
4865         $test -r $1 || set /usr/ccs/lib/libc.$so
4866         $test -r $1 || set /lib/libsys_s$_a
4867         ;;
4868 *)
4869         set blurfl
4870         ;;
4871 esac
4872 if $test -r "$1"; then
4873         echo "Your (shared) C library seems to be in $1."
4874         libc="$1"
4875 elif $test -r /lib/libc && $test -r /lib/clib; then
4876         echo "Your C library seems to be in both /lib/clib and /lib/libc."
4877         xxx=apollo
4878         libc='/lib/clib /lib/libc'
4879         if $test -r /lib/syslib; then
4880                 echo "(Your math library is in /lib/syslib.)"
4881                 libc="$libc /lib/syslib"
4882         fi
4883 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4884         echo "Your C library seems to be in $libc, as you said before."
4885 elif $test -r $incpath/usr/lib/libc$_a; then
4886         libc=$incpath/usr/lib/libc$_a;
4887         echo "Your C library seems to be in $libc.  That's fine."
4888 elif $test -r /lib/libc$_a; then
4889         libc=/lib/libc$_a;
4890         echo "Your C library seems to be in $libc.  You're normal."
4891 else
4892         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
4893                 :
4894         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4895                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4896         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4897                 :
4898         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4899                 :
4900         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4901                 :
4902         else
4903                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4904         fi
4905         if $test -r "$tans"; then
4906                 echo "Your C library seems to be in $tans, of all places."
4907                 libc=$tans
4908         else
4909                 libc='blurfl'
4910         fi
4911 fi
4912 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4913         dflt="$libc"
4914         cat <<EOM
4915
4916 If the guess above is wrong (which it might be if you're using a strange
4917 compiler, or your machine supports multiple models), you can override it here.
4918
4919 EOM
4920 else
4921         dflt=''
4922         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
4923         cat >&4 <<EOM
4924 I can't seem to find your C library.  I've looked in the following places:
4925
4926 EOM
4927         $sed 's/^/      /' libpath
4928         cat <<EOM
4929
4930 None of these seems to contain your C library. I need to get its name...
4931
4932 EOM
4933 fi
4934 fn=f
4935 rp='Where is your C library?'
4936 . ./getfile
4937 libc="$ans"
4938
4939 echo " "
4940 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
4941 set X `cat libnames`
4942 shift
4943 xxx=files
4944 case $# in 1) xxx=file; esac
4945 echo "Extracting names from the following $xxx for later perusal:" >&4
4946 echo " "
4947 $sed 's/^/      /' libnames >&4
4948 echo " "
4949 $echo $n "This may take a while...$c" >&4
4950
4951 for file in $*; do
4952         case $file in
4953         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
4954         *) $nm $nm_opt $file 2>/dev/null;;
4955         esac
4956 done >libc.tmp
4957
4958 $echo $n ".$c"
4959 $grep fprintf libc.tmp > libc.ptf
4960 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
4961 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
4962 xxx='[ADTSIW]'
4963 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
4964         eval $xscan;\
4965         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4966                 eval $xrun
4967 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
4968         eval $xscan;\
4969         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4970                 eval $xrun
4971 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
4972         eval $xscan;\
4973         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4974                 eval $xrun
4975 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
4976         eval $xscan;\
4977         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4978                 eval $xrun
4979 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
4980         eval $xscan;\
4981         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4982                 eval $xrun
4983 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
4984         eval $xscan;\
4985         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4986                 eval $xrun
4987 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
4988                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
4989         eval $xscan;\
4990         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4991                 eval $xrun
4992 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
4993         eval $xscan;\
4994         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4995                 eval $xrun
4996 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
4997         eval $xscan;\
4998         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4999                 eval $xrun
5000 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5001         eval $xscan;\
5002         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5003                 eval $xrun
5004 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5005         eval $xscan;\
5006         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5007                 eval $xrun
5008 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5009         eval $xscan;\
5010         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5011                 eval $xrun
5012 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5013         eval $xscan;\
5014         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5015                 eval $xrun
5016 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5017         eval $xscan;\
5018         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5019                 eval $xrun
5020 else
5021         $nm -p $* 2>/dev/null >libc.tmp
5022         $grep fprintf libc.tmp > libc.ptf
5023         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5024                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5025         then
5026                 nm_opt='-p'
5027                 eval $xrun
5028         else
5029                 echo " "
5030                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5031                 com=''
5032                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5033                         for thisname in $libnames $libc; do
5034                                 $ar t $thisname >>libc.tmp
5035                         done
5036                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5037                         echo "Ok." >&4
5038                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5039                         # Repeat libc to extract forwarders to DLL entries too
5040                         for thisname in $libnames $libc; do
5041                                 $ar tv $thisname >>libc.tmp
5042                                 # Revision 50 of EMX has bug in $ar.
5043                                 # it will not extract forwarders to DLL entries
5044                                 # Use emximp which will extract exactly them.
5045                                 emximp -o tmp.imp $thisname \
5046                                     2>/dev/null && \
5047                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5048                                     < tmp.imp >>libc.tmp
5049                                 $rm tmp.imp
5050                         done
5051                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5052                         echo "Ok." >&4
5053                 else
5054                         echo "$ar didn't seem to work right." >&4
5055                         echo "Maybe this is a Cray...trying bld instead..." >&4
5056                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5057                         then
5058                                 for thisname in $libnames; do
5059                                         bld t $libnames | \
5060                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5061                                         $ar t $thisname >>libc.tmp
5062                                 done
5063                                 echo "Ok." >&4
5064                         else
5065                                 echo "That didn't work either.  Giving up." >&4
5066                                 exit 1
5067                         fi
5068                 fi
5069         fi
5070 fi
5071 nm_extract="$com"
5072 if $test -f /lib/syscalls.exp; then
5073         echo " "
5074         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5075         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
5076 fi
5077 ;;
5078 esac
5079 $rm -f libnames libpath
5080
5081 : is a C symbol defined?
5082 csym='tlook=$1;
5083 case "$3" in
5084 -v) tf=libc.tmp; tc=""; tdc="";;
5085 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5086 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5087 esac;
5088 tx=yes;
5089 case "$reuseval-$4" in
5090 true-) ;;
5091 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5092 esac;
5093 case "$tx" in
5094 yes)
5095         case "$runnm" in
5096         true)
5097                 if $contains $tlook $tf >/dev/null 2>&1;
5098                 then tval=true;
5099                 else tval=false;
5100                 fi;;
5101         *)
5102                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5103                 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
5104                 then tval=true;
5105                 else tval=false;
5106                 fi;
5107                 $rm -f t t.c;;
5108         esac;;
5109 *)
5110         case "$tval" in
5111         $define) tval=true;;
5112         *) tval=false;;
5113         esac;;
5114 esac;
5115 eval "$2=$tval"'
5116
5117 : define an is-in-libc? function
5118 inlibc='echo " "; td=$define; tu=$undef;
5119 sym=$1; var=$2; eval "was=\$$2";
5120 tx=yes;
5121 case "$reuseval$was" in
5122 true) ;;
5123 true*) tx=no;;
5124 esac;
5125 case "$tx" in
5126 yes)
5127         set $sym tres -f;
5128         eval $csym;
5129         case "$tres" in
5130         true)
5131                 echo "$sym() found." >&4;
5132                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5133         *)
5134                 echo "$sym() NOT found." >&4;
5135                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5136         esac;;
5137 *)
5138         case "$was" in
5139         $define) echo "$sym() found." >&4;;
5140         *) echo "$sym() NOT found." >&4;;
5141         esac;;
5142 esac'
5143
5144 : see if sqrtl exists
5145 set sqrtl d_sqrtl
5146 eval $inlibc
5147
5148 case "$ccflags" in
5149 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
5150 esac
5151
5152 case "$uselongdouble" in
5153 $define|true|[yY]*)     dflt='y';;
5154 *) dflt='n';;
5155 esac
5156 cat <<EOM
5157
5158 Perl can be built to take advantage of long doubles which
5159 (if available) may give more accuracy and range for floating point numbers.
5160
5161 If this doesn't make any sense to you, just accept the default '$dflt'.
5162 EOM
5163 rp='Try to use long doubles if available?'
5164 . ./myread
5165 case "$ans" in
5166 y|Y)    val="$define"   ;;
5167 *)      val="$undef"    ;;
5168 esac
5169 set uselongdouble
5170 eval $setvar
5171
5172 case "$uselongdouble" in
5173 true|[yY]*) uselongdouble="$define" ;;
5174 esac
5175
5176 case "$uselongdouble" in
5177 $define)
5178 : Look for a hint-file generated 'call-back-unit'.  If the
5179 : user has specified that long doubles should be used,
5180 : we may need to set or change some other defaults.
5181         if $test -f uselongdouble.cbu; then
5182                 echo "Your platform has some specific hints for long doubles, using them..."
5183                 . ./uselongdouble.cbu
5184         else
5185                 $cat <<EOM
5186 (Your platform doesn't have any specific hints for long doubles.)
5187 EOM
5188         fi
5189         ;;
5190 esac
5191
5192 case "$uselongdouble:$d_sqrtl" in
5193 $define:$undef)
5194                 $cat <<EOM >&4
5195
5196 *** You requested the use of long doubles but you do not seem to have
5197 *** the mathematic functions for long doubles.  I'm disabling the use
5198 *** of long doubles.
5199
5200 EOM
5201         uselongdouble=$undef
5202         ;;
5203 esac
5204
5205 : check for length of double
5206 echo " "
5207 case "$doublesize" in
5208 '')
5209         echo "Checking to see how big your double precision numbers are..." >&4
5210         $cat >try.c <<'EOCP'
5211 #include <stdio.h>
5212 int main()
5213 {
5214     printf("%d\n", (int)sizeof(double));
5215     exit(0);
5216 }
5217 EOCP
5218         set try
5219         if eval $compile_ok; then
5220                 doublesize=`./try`
5221                 echo "Your double is $doublesize bytes long."
5222         else
5223                 dflt='8'
5224                 echo "(I can't seem to compile the test program.  Guessing...)"
5225                 rp="What is the size of a double precision number (in bytes)?"
5226                 . ./myread
5227                 doublesize="$ans"
5228         fi
5229         ;;
5230 esac
5231 $rm -f try.c try
5232
5233 : check for long doubles
5234 echo " "
5235 echo "Checking to see if you have long double..." >&4
5236 echo 'int main() { long double x = 7.0; }' > try.c
5237 set try
5238 if eval $compile; then
5239         val="$define"
5240         echo "You have long double."
5241 else
5242         val="$undef"
5243         echo "You do not have long double."
5244 fi
5245 $rm try.*
5246 set d_longdbl
5247 eval $setvar
5248
5249 : check for length of long double
5250 case "${d_longdbl}${longdblsize}" in
5251 $define)
5252         echo " "
5253         echo "Checking to see how big your long doubles are..." >&4
5254         $cat >try.c <<'EOCP'
5255 #include <stdio.h>
5256 int main()
5257 {
5258         printf("%d\n", sizeof(long double));
5259 }
5260 EOCP
5261         set try
5262         set try
5263         if eval $compile; then
5264                 longdblsize=`./try$exe_ext`
5265                 echo "Your long doubles are $longdblsize bytes long."
5266         else
5267                 dflt='8'
5268                 echo " "
5269                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
5270                 rp="What is the size of a long double (in bytes)?"
5271                 . ./myread
5272                 longdblsize="$ans"
5273         fi
5274         if $test "X$doublesize" = "X$longdblsize"; then
5275                 echo "(That isn't any different from an ordinary double.)"
5276         fi      
5277         ;;
5278 esac
5279 $rm -f try.* try
5280
5281 case "$useperlio" in
5282 $define|true|[yY]*)     dflt='y';;
5283 *) dflt='n';;
5284 esac
5285 cat <<EOM
5286
5287 Previous version of $package used the standard IO mechanisms as
5288 defined in <stdio.h>.  Versions 5.003_02 and later of perl allow
5289 alternate IO mechanisms via the PerlIO abstraction layer, but the
5290 stdio mechanism is still the default.  This abstraction layer can
5291 use AT&T's sfio (if you already have sfio installed) or regular stdio.
5292 Using PerlIO with sfio may cause problems with some extension modules.
5293
5294 If this doesn't make any sense to you, just accept the default '$dflt'.
5295 EOM
5296 rp='Use the experimental PerlIO abstraction layer?'
5297 . ./myread
5298 case "$ans" in
5299 y|Y) 
5300         val="$define"
5301         ;;     
5302 *)      
5303         echo "Ok, doing things the stdio way."
5304         val="$undef"
5305         ;;
5306 esac
5307 set useperlio
5308 eval $setvar 
5309
5310 case "$usesocks" in
5311 $define|true|[yY]*)
5312         case "$useperlio" in
5313         $define|true|[yY]*) ;;
5314         *)      cat >&4 <<EOM
5315
5316 You are using the SOCKS proxy protocol library which means that you
5317 should also use the PerlIO layer.  You may be headed for trouble.
5318
5319 EOM
5320                 ;;
5321         esac
5322         ;;
5323 esac
5324
5325         
5326 : determine the architecture name
5327 echo " "
5328 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
5329         tarch=`arch`"-$osname"
5330 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
5331         if uname -m > tmparch 2>&1 ; then
5332                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
5333                         -e 's/$/'"-$osname/" tmparch`
5334         else
5335                 tarch="$osname"
5336         fi
5337         $rm -f tmparch
5338 else
5339         tarch="$osname"
5340 fi
5341 case "$myarchname" in
5342 ''|"$tarch") ;;
5343 *)
5344         echo "(Your architecture name used to be $myarchname.)"
5345         archname=''
5346         ;;
5347 esac
5348 myarchname="$tarch"
5349 case "$archname" in
5350 '') dflt="$tarch";;
5351 *) dflt="$archname";;
5352 esac
5353 rp='What is your architecture name'
5354 . ./myread
5355 archname="$ans"
5356 case "$usethreads" in
5357 $define)
5358         echo "Threads selected." >&4
5359         case "$archname" in
5360         *-thread*) echo "...and architecture name already has -thread." >&4
5361                 ;;
5362         *)      archname="$archname-thread"
5363                 echo "...setting architecture name to $archname." >&4
5364                 ;;
5365         esac
5366         ;;
5367 esac
5368 case "$usemultiplicity" in
5369 $define)
5370         echo "Multiplicity selected." >&4
5371         case "$archname" in
5372         *-multi*) echo "...and architecture name already has -multi." >&4
5373                 ;;
5374         *)      archname="$archname-multi"
5375                 echo "...setting architecture name to $archname." >&4
5376                 ;;
5377         esac
5378         ;;
5379 esac
5380 case "$use64bitint$use64bitall" in
5381 *"$define"*)
5382         case "$archname64" in
5383         '')
5384                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
5385                 ;;
5386         *)
5387                 case "$use64bitint" in
5388                 "$define") echo "64 bit integers selected." >&4 ;;
5389                 esac
5390                 case "$use64bitall" in
5391                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
5392                 esac
5393                 case "$archname" in
5394                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
5395                         ;;
5396                 *)      archname="$archname-$archname64"
5397                         echo "...setting architecture name to $archname." >&4
5398                         ;;
5399                 esac
5400                 ;;
5401         esac
5402 esac
5403 case "$uselongdouble" in
5404 $define)
5405         echo "Long doubles selected." >&4
5406         case "$longdblsize" in
5407         $doublesize)
5408                 "...but long doubles are equal to doubles, not changing architecture name." >&4
5409                 ;;
5410         *)
5411                 case "$archname" in
5412                 *-ld*) echo "...and architecture name already has -ld." >&4
5413                         ;;
5414                 *)      archname="$archname-ld"
5415                         echo "...setting architecture name to $archname." >&4
5416                         ;;
5417                 esac
5418                 ;;
5419         esac
5420         ;;
5421 esac
5422 case "$useperlio" in
5423 $define)
5424         echo "Perlio selected." >&4
5425         case "$archname" in
5426         *-perlio*) echo "...and architecture name already has -perlio." >&4
5427                 ;;
5428         *)      archname="$archname-perlio"
5429                 echo "...setting architecture name to $archname." >&4
5430                 ;;
5431         esac
5432         ;;
5433 esac
5434
5435 : determine root of directory hierarchy where package will be installed.
5436 case "$prefix" in
5437 '')
5438         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
5439         ;;
5440 *)
5441         dflt="$prefix"
5442         ;;
5443 esac
5444 $cat <<EOM
5445
5446 By default, $package will be installed in $dflt/bin, manual pages
5447 under $dflt/man, etc..., i.e. with $dflt as prefix for all
5448 installation directories. Typically this is something like /usr/local.
5449 If you wish to have binaries under /usr/bin but other parts of the
5450 installation under /usr/local, that's ok: you will be prompted
5451 separately for each of the installation directories, the prefix being
5452 only used to set the defaults.
5453
5454 EOM
5455 fn=d~
5456 rp='Installation prefix to use?'
5457 . ./getfile
5458 oldprefix=''
5459 case "$prefix" in
5460 '') ;;
5461 *)
5462         case "$ans" in
5463         "$prefix") ;;
5464         *) oldprefix="$prefix";;
5465         esac
5466         ;;
5467 esac
5468 prefix="$ans"
5469 prefixexp="$ansexp"
5470
5471 : is AFS running?
5472 echo " "
5473 case "$afs" in
5474 $define|true)   afs=true ;;
5475 $undef|false)   afs=false ;;
5476 *)      if test -d /afs; then
5477                 afs=true
5478         else
5479                 afs=false
5480         fi
5481         ;;
5482 esac
5483 if $afs; then
5484         echo "AFS may be running... I'll be extra cautious then..." >&4
5485 else
5486         echo "AFS does not seem to be running..." >&4
5487 fi
5488
5489 : determine installation prefix for where package is to be installed.
5490 if $afs; then 
5491 $cat <<EOM
5492
5493 Since you are running AFS, I need to distinguish the directory in which
5494 files will reside from the directory in which they are installed (and from
5495 which they are presumably copied to the former directory by occult means).
5496
5497 EOM
5498         case "$installprefix" in
5499         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
5500         *) dflt="$installprefix";;
5501         esac
5502 else
5503 $cat <<EOM
5504
5505 In some special cases, particularly when building $package for distribution,
5506 it is convenient to distinguish between the directory in which files should 
5507 be installed from the directory ($prefix) in which they 
5508 will eventually reside.  For most users, these two directories are the same.
5509
5510 EOM
5511         case "$installprefix" in
5512         '') dflt=$prefix ;;
5513         *) dflt=$installprefix;;
5514         esac
5515 fi
5516 fn=d~
5517 rp='What installation prefix should I use for installing files?'
5518 . ./getfile
5519 installprefix="$ans"
5520 installprefixexp="$ansexp"
5521
5522 : set the prefixit variable, to compute a suitable default value
5523 prefixit='case "$3" in
5524 ""|none)
5525         case "$oldprefix" in
5526         "") eval "$1=\"\$$2\"";;
5527         *)
5528                 case "$3" in
5529                 "") eval "$1=";;
5530                 none)
5531                         eval "tp=\"\$$2\"";
5532                         case "$tp" in
5533                         ""|" ") eval "$1=\"\$$2\"";;
5534                         *) eval "$1=";;
5535                         esac;;
5536                 esac;;
5537         esac;;
5538 *)
5539         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
5540         case "$tp" in
5541         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
5542         /*-$oldprefix/*|\~*-$oldprefix/*)
5543                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
5544         *) eval "$1=\"\$$2\"";;
5545         esac;;
5546 esac'
5547
5548
5549 : get the patchlevel
5550 echo " "
5551 echo "Getting the current patchlevel..." >&4
5552 if $test -r $rsrc/patchlevel.h;then
5553         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
5554         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
5555         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
5556         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
5557         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
5558         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
5559 else
5560         revision=0
5561         patchlevel=0
5562         subversion=0
5563         api_revision=0
5564         api_version=0
5565         api_subversion=0
5566 fi
5567 $echo "(You have $package version $patchlevel subversion $subversion.)"
5568 case "$osname" in
5569 dos|vms)
5570         : XXX Should be a Configure test for double-dots in filenames.
5571         version=`echo $revision $patchlevel $subversion | \
5572                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
5573         api_versionstring=`echo $api_revision $api_version $api_subversion | \
5574                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
5575         ;;
5576 *)
5577         version=`echo $revision $patchlevel $subversion | \
5578                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
5579         api_versionstring=`echo $api_revision $api_version $api_subversion | \
5580                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
5581         ;;
5582 esac
5583 : Special case the 5.005_xx maintenance series, which used 5.005
5584 : without any subversion label as a subdirectory in $sitelib
5585 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
5586         api_versionstring='5.005'
5587 fi
5588
5589 : determine installation style
5590 : For now, try to deduce it from prefix unless it is already set.
5591 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
5592 case "$installstyle" in
5593 '')     case "$prefix" in
5594                 *perl*) dflt='lib';;
5595                 *) dflt='lib/perl5' ;;
5596         esac
5597         ;;
5598 *)      dflt="$installstyle" ;;
5599 esac
5600 : Probably not worth prompting for this since we prompt for all
5601 : the directories individually, and the prompt would be too long and
5602 : confusing anyway.
5603 installstyle=$dflt
5604
5605 : determine where private library files go
5606 : Usual default is /usr/local/lib/perl5/$version.
5607 : Also allow things like /opt/perl/lib/$version, since 
5608 : /opt/perl/lib/perl5... would be redundant.
5609 : The default "style" setting is made in installstyle.U
5610 case "$installstyle" in
5611 *lib/perl5*) set dflt privlib lib/$package/$version ;;
5612 *)       set dflt privlib lib/$version ;;
5613 esac
5614 eval $prefixit
5615 $cat <<EOM
5616
5617 There are some auxiliary files for $package that need to be put into a
5618 private library directory that is accessible by everyone.
5619
5620 EOM
5621 fn=d~+
5622 rp='Pathname where the private library files will reside?'
5623 . ./getfile
5624 privlib="$ans"
5625 privlibexp="$ansexp"
5626 : Change installation prefix, if necessary.
5627 if $test X"$prefix" != X"$installprefix"; then
5628         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
5629 else
5630         installprivlib="$privlibexp"
5631 fi
5632
5633 : set the prefixup variable, to restore leading tilda escape
5634 prefixup='case "$prefixexp" in
5635 "$prefix") ;;
5636 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
5637 esac'
5638
5639 : determine where public architecture dependent libraries go
5640 set archlib archlib
5641 eval $prefixit
5642 : privlib default is /usr/local/lib/$package/$version
5643 : archlib default is /usr/local/lib/$package/$version/$archname
5644 : privlib may have an optional trailing /share.
5645 tdflt=`echo $privlib | $sed 's,/share$,,'`
5646 tdflt=$tdflt/$archname
5647 case "$archlib" in
5648 '')     dflt=$tdflt
5649         ;;
5650 *)      dflt="$archlib"
5651     ;;
5652 esac
5653 $cat <<EOM
5654
5655 $spackage contains architecture-dependent library files.  If you are
5656 sharing libraries in a heterogeneous environment, you might store
5657 these files in a separate location.  Otherwise, you can just include
5658 them with the rest of the public library files.
5659
5660 EOM
5661 fn=d+~
5662 rp='Where do you want to put the public architecture-dependent libraries?'
5663 . ./getfile
5664 archlib="$ans"
5665 archlibexp="$ansexp"
5666 if $test X"$archlib" = X"$privlib"; then
5667         d_archlib="$undef"
5668 else
5669         d_archlib="$define"
5670 fi
5671 : Change installation prefix, if necessary.
5672 if $test X"$prefix" != X"$installprefix"; then
5673         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
5674 else
5675         installarchlib="$archlibexp"
5676 fi
5677
5678
5679 : Binary compatibility with 5.005 is not possible for builds
5680 : with advanced features
5681 case "$usethreads$usemultiplicity" in
5682 *define*)
5683         bincompat5005="$undef"
5684         d_bincompat5005="$undef"
5685         ;;
5686 *)      $cat <<EOM
5687
5688 This version of Perl can be compiled for binary compatibility with 5.005.
5689 If you decide to do so, you will be able to continue using most of the
5690 extensions that were compiled for Perl 5.005.
5691
5692 EOM
5693         case "$bincompat5005$d_bincompat5005" in
5694         *"$undef"*) dflt=n ;;
5695         *) dflt=y ;;
5696         esac
5697         rp='Binary compatibility with Perl 5.005?'
5698         . ./myread
5699         case "$ans" in
5700         y*) val="$define" ;;
5701         *)  val="$undef" ;;
5702         esac
5703         set d_bincompat5005
5704         eval $setvar
5705         case "$d_bincompat5005" in
5706         "$define")
5707                 bincompat5005="$define"
5708                 ;;
5709         *)      bincompat5005="$undef"
5710                 d_bincompat5005="$undef"
5711                 ;;
5712         esac
5713         ;;
5714 esac
5715
5716
5717 : see if setuid scripts can be secure
5718 $cat <<EOM
5719
5720 Some kernels have a bug that prevents setuid #! scripts from being
5721 secure.  Some sites have disabled setuid #! scripts because of this.
5722
5723 First let's decide if your kernel supports secure setuid #! scripts.
5724 (If setuid #! scripts would be secure but have been disabled anyway,
5725 don't say that they are secure if asked.)
5726
5727 EOM
5728
5729 val="$undef"
5730 if $test -d /dev/fd; then
5731         echo "#!$ls" >reflect
5732         chmod +x,u+s reflect
5733         ./reflect >flect 2>&1
5734         if $contains "/dev/fd" flect >/dev/null; then
5735                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
5736                 val="$define"
5737         else
5738                 $cat <<EOM
5739 If you are not sure if they are secure, I can check but I'll need a
5740 username and password different from the one you are using right now.
5741 If you don't have such a username or don't want me to test, simply
5742 enter 'none'.
5743
5744 EOM
5745                 rp='Other username to test security of setuid scripts with?'
5746                 dflt='none'
5747                 . ./myread
5748                 case "$ans" in
5749                 n|none)
5750                         case "$d_suidsafe" in
5751                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
5752                                 dflt=n;;
5753                         "$undef")
5754                                 echo "Well, the $hint value is *not* secure." >&4
5755                                 dflt=n;;
5756                         *)      echo "Well, the $hint value *is* secure." >&4
5757                                 dflt=y;;
5758                         esac
5759                         ;;
5760                 *)
5761                         $rm -f reflect flect
5762                         echo "#!$ls" >reflect
5763                         chmod +x,u+s reflect
5764                         echo >flect
5765                         chmod a+w flect
5766                         echo '"su" will (probably) prompt you for '"$ans's password."
5767                         su $ans -c './reflect >flect'
5768                         if $contains "/dev/fd" flect >/dev/null; then
5769                                 echo "Okay, it looks like setuid scripts are secure." >&4
5770                                 dflt=y
5771                         else
5772                                 echo "I don't think setuid scripts are secure." >&4
5773                                 dflt=n
5774                         fi
5775                         ;;
5776                 esac
5777                 rp='Does your kernel have *secure* setuid scripts?'
5778                 . ./myread
5779                 case "$ans" in
5780                 [yY]*)  val="$define";;
5781                 *)      val="$undef";;
5782                 esac
5783         fi
5784 else
5785         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
5786         echo "(That's for file descriptors, not floppy disks.)"
5787         val="$undef"
5788 fi
5789 set d_suidsafe
5790 eval $setvar
5791
5792 $rm -f reflect flect
5793
5794 : now see if they want to do setuid emulation
5795 echo " "
5796 val="$undef"
5797 case "$d_suidsafe" in
5798 "$define")
5799         val="$undef"
5800         echo "No need to emulate SUID scripts since they are secure here." >& 4
5801         ;;
5802 *)
5803         $cat <<EOM
5804 Some systems have disabled setuid scripts, especially systems where
5805 setuid scripts cannot be secure.  On systems where setuid scripts have
5806 been disabled, the setuid/setgid bits on scripts are currently
5807 useless.  It is possible for $package to detect those bits and emulate
5808 setuid/setgid in a secure fashion.  This emulation will only work if
5809 setuid scripts have been disabled in your kernel.
5810
5811 EOM
5812         case "$d_dosuid" in
5813         "$define") dflt=y ;;
5814         *) dflt=n ;;
5815         esac
5816         rp="Do you want to do setuid/setgid emulation?"
5817         . ./myread
5818         case "$ans" in
5819         [yY]*)  val="$define";;
5820         *)      val="$undef";;
5821         esac
5822         ;;
5823 esac
5824 set d_dosuid
5825 eval $setvar
5826
5827 : determine filename position in cpp output
5828 echo " "
5829 echo "Computing filename position in cpp output for #include directives..." >&4
5830 echo '#include <stdio.h>' > foo.c
5831 $cat >fieldn <<EOF
5832 $startsh
5833 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
5834 $grep '^[       ]*#.*stdio\.h' | \
5835 while read cline; do
5836         pos=1
5837         set \$cline
5838         while $test \$# -gt 0; do
5839                 if $test -r \`echo \$1 | $tr -d '"'\`; then
5840                         echo "\$pos"
5841                         exit 0
5842                 fi
5843                 shift
5844                 pos=\`expr \$pos + 1\`
5845         done
5846 done
5847 EOF
5848 chmod +x fieldn
5849 fieldn=`./fieldn`
5850 $rm -f foo.c fieldn
5851 case $fieldn in
5852 '') pos='???';;
5853 1) pos=first;;
5854 2) pos=second;;
5855 3) pos=third;;
5856 *) pos="${fieldn}th";;
5857 esac
5858 echo "Your cpp writes the filename in the $pos field of the line."
5859
5860 : locate header file
5861 $cat >findhdr <<EOF
5862 $startsh
5863 wanted=\$1
5864 name=''
5865 for usrincdir in $usrinc
5866 do
5867         if test -f \$usrincdir/\$wanted; then
5868                 echo "\$usrincdir/\$wanted"
5869                 exit 0
5870         fi
5871 done
5872 awkprg='{ print \$$fieldn }'
5873 echo "#include <\$wanted>" > foo\$\$.c
5874 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
5875 $grep "^[       ]*#.*\$wanted" | \
5876 while read cline; do
5877         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
5878         case "\$name" in
5879         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
5880         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
5881         *) exit 2;;
5882         esac;
5883 done;
5884 #
5885 # status = 0: grep returned 0 lines, case statement not executed
5886 # status = 1: headerfile found
5887 # status = 2: while loop executed, no headerfile found
5888 #
5889 status=\$?
5890 $rm -f foo\$\$.c;
5891 if test \$status -eq 1; then
5892         exit 0;
5893 fi
5894 exit 1
5895 EOF
5896 chmod +x findhdr
5897
5898 : define an alternate in-header-list? function
5899 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
5900 cont=true; xxf="echo \"<\$1> found.\" >&4";
5901 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
5902 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
5903 esac;
5904 case $# in 4) instead=instead;; *) instead="at last";; esac;
5905 while $test "$cont"; do
5906         xxx=`./findhdr $1`
5907         var=$2; eval "was=\$$2";
5908         if $test "$xxx" && $test -r "$xxx";
5909         then eval $xxf;
5910         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5911                 cont="";
5912         else eval $xxnf;
5913         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5914         set $yyy; shift; shift; yyy=$@;
5915         case $# in 0) cont="";;
5916         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5917                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5918         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5919                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5920         esac;
5921 done;
5922 while $test "$yyy";
5923 do set $yyy; var=$2; eval "was=\$$2";
5924         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5925         set $yyy; shift; shift; yyy=$@;
5926 done'
5927
5928 : see if this is a malloc.h system
5929 set malloc.h i_malloc
5930 eval $inhdr
5931
5932 : see if stdlib is available
5933 set stdlib.h i_stdlib
5934 eval $inhdr
5935
5936 : determine which malloc to compile in
5937 echo " "
5938 case "$usemymalloc" in
5939 ''|[yY]*|true|$define)  dflt='y' ;;
5940 *)      dflt='n' ;;
5941 esac
5942 rp="Do you wish to attempt to use the malloc that comes with $package?"
5943 . ./myread
5944 usemymalloc="$ans"
5945 case "$ans" in
5946 y*|true)
5947         usemymalloc='y'
5948         mallocsrc='malloc.c'
5949         mallocobj="malloc$_o"
5950         d_mymalloc="$define"
5951         case "$libs" in
5952         *-lmalloc*)
5953                 : Remove malloc from list of libraries to use
5954                 echo "Removing unneeded -lmalloc from library list" >&4
5955                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
5956                 shift
5957                 libs="$*"
5958                 echo "libs = $libs" >&4
5959                 ;;
5960         esac
5961         ;;
5962 *)
5963         usemymalloc='n'
5964         mallocsrc=''
5965         mallocobj=''
5966         d_mymalloc="$undef"
5967         ;;
5968 esac
5969
5970 : compute the return types of malloc and free
5971 echo " "
5972 $cat >malloc.c <<END
5973 #$i_malloc I_MALLOC
5974 #$i_stdlib I_STDLIB
5975 #include <stdio.h>
5976 #include <sys/types.h>
5977 #ifdef I_MALLOC
5978 #include <malloc.h>
5979 #endif
5980 #ifdef I_STDLIB
5981 #include <stdlib.h>
5982 #endif
5983 #ifdef TRY_MALLOC
5984 void *malloc();
5985 #endif
5986 #ifdef TRY_FREE
5987 void free();
5988 #endif
5989 END
5990 case "$malloctype" in
5991 '')
5992         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
5993                 malloctype='void *'
5994         else
5995                 malloctype='char *'
5996         fi
5997         ;;
5998 esac
5999 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6000
6001 case "$freetype" in
6002 '')
6003         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6004                 freetype='void'
6005         else
6006                 freetype='int'
6007         fi
6008         ;;
6009 esac
6010 echo "Your system uses $freetype free(), it would seem." >&4
6011 $rm -f malloc.[co]
6012 $cat <<EOM
6013
6014 After $package is installed, you may wish to install various
6015 add-on modules and utilities.  Typically, these add-ons will
6016 be installed under $prefix with the rest
6017 of this package.  However, you may wish to install such add-ons
6018 elsewhere under a different prefix.
6019
6020 If you do not wish to put everything under a single prefix, that's
6021 ok.  You will be prompted for the individual locations; this siteprefix
6022 is only used to suggest the defaults.
6023
6024 The default should be fine for most people.
6025
6026 EOM
6027 fn=d~+
6028 rp='Installation prefix to use for add-on modules and utilities?'
6029 : XXX Here might be another good place for an installstyle setting.
6030 case "$siteprefix" in
6031 '') dflt=$prefix ;;
6032 *)  dflt=$siteprefix ;;
6033 esac
6034 . ./getfile
6035 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6036 oldsiteprefix=''
6037 case "$siteprefix" in
6038 '') ;;
6039 *)      case "$ans" in
6040         "$prefix") ;;
6041         *) oldsiteprefix="$prefix";;
6042         esac
6043         ;;
6044 esac
6045 siteprefix="$ans"
6046 siteprefixexp="$ansexp"
6047
6048 : determine where site specific libraries go.
6049 : Usual default is /usr/local/lib/perl5/site_perl/$version
6050 : The default "style" setting is made in installstyle.U
6051 : XXX No longer works with Prefixit stuff.
6052 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6053 case "$sitelib" in
6054 '') case "$installstyle" in
6055         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
6056         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
6057         esac
6058         ;;
6059 *)      dflt="$sitelib"
6060         ;;
6061 esac
6062 $cat <<EOM
6063
6064 The installation process will create a directory for
6065 site-specific extensions and modules.  Most users find it convenient
6066 to place all site-specific files in this directory rather than in the
6067 main distribution directory.
6068
6069 EOM
6070 fn=d~+
6071 rp='Pathname for the site-specific library files?'
6072 . ./getfile
6073 sitelib="$ans"
6074 sitelibexp="$ansexp"
6075 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
6076 : Change installation prefix, if necessary.
6077 if $test X"$prefix" != X"$installprefix"; then
6078         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
6079 else
6080         installsitelib="$sitelibexp"
6081 fi
6082
6083 : determine where site specific architecture-dependent libraries go.
6084 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
6085 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6086 : sitelib may have an optional trailing /share.
6087 case "$sitearch" in
6088 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
6089         dflt="$dflt/$archname"
6090         ;;
6091 *)      dflt="$sitearch"
6092         ;;
6093 esac
6094 set sitearch sitearch none
6095 eval $prefixit
6096 $cat <<EOM
6097
6098 The installation process will also create a directory for
6099 architecture-dependent site-specific extensions and modules.
6100
6101 EOM
6102 fn=d~+
6103 rp='Pathname for the site-specific architecture-dependent library files?'
6104 . ./getfile
6105 sitearch="$ans"
6106 sitearchexp="$ansexp"
6107 : Change installation prefix, if necessary.
6108 if $test X"$prefix" != X"$installprefix"; then
6109         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6110 else
6111         installsitearch="$sitearchexp"
6112 fi
6113
6114 $cat <<EOM
6115
6116 The installation process will also create a directory for
6117 vendor-supplied add-ons.  Vendors who supply perl with their system
6118 may find it convenient to place all vendor-supplied files in this
6119 directory rather than in the main distribution directory.  This will
6120 ease upgrades between binary-compatible maintenance versions of perl.
6121
6122 Of course you may also use these directories in whatever way you see
6123 fit.  For example, you might use them to access modules shared over a
6124 company-wide network.
6125
6126 The default answer should be fine for most people.
6127 This causes further questions about vendor add-ons to be skipped
6128 and no vendor-specific directories will be configured for perl.
6129
6130 EOM
6131 rp='Do you want to configure vendor-specific add-on directories?'
6132 case "$usevendorprefix" in
6133 define|true|[yY]*) dflt=y ;;
6134 *)      : User may have set vendorprefix directly on Configure command line.
6135         case "$vendorprefix" in
6136         ''|' ') dflt=n ;;
6137         *)      dflt=y ;;
6138         esac
6139         ;;
6140 esac
6141 . ./myread
6142 case "$ans" in
6143 [yY]*)  fn=d~+
6144         rp='Installation prefix to use for vendor-supplied add-ons?'
6145         case "$vendorprefix" in
6146         '') dflt='' ;;
6147         *)  dflt=$vendorprefix ;;
6148         esac
6149         . ./getfile
6150         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6151         oldvendorprefix=''
6152         case "$vendorprefix" in
6153         '') ;;
6154         *)      case "$ans" in
6155                 "$prefix") ;;
6156                 *) oldvendorprefix="$prefix";;
6157                 esac
6158                 ;;
6159         esac
6160         usevendorprefix="$define"
6161         vendorprefix="$ans"
6162         vendorprefixexp="$ansexp"
6163         ;;
6164 *)      usevendorprefix="$undef"
6165         vendorprefix=''
6166         vendorprefixexp=''
6167         ;;
6168 esac
6169
6170 case "$vendorprefix" in
6171 '')     d_vendorlib="$undef"
6172         vendorlib=''
6173         vendorlibexp=''
6174         ;;
6175 *)      d_vendorlib="$define"
6176         : determine where vendor-supplied modules go.
6177         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6178         case "$vendorlib" in
6179         '')
6180                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6181                 case "$installstyle" in
6182                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6183                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6184                 esac
6185                 ;;
6186         *)      dflt="$vendorlib"
6187                 ;;
6188         esac
6189         fn=d~+
6190         rp='Pathname for the vendor-supplied library files?'
6191         . ./getfile
6192         vendorlib="$ans"
6193         vendorlibexp="$ansexp"
6194         ;;
6195 esac
6196 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6197 : Change installation prefix, if necessary.
6198 if $test X"$prefix" != X"$installprefix"; then
6199         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6200 else
6201         installvendorlib="$vendorlibexp"
6202 fi
6203
6204 case "$vendorprefix" in
6205 '')     d_vendorarch="$undef"
6206         vendorarch=''
6207         vendorarchexp=''
6208         ;;
6209 *)      d_vendorarch="$define"
6210         : determine where vendor-supplied architecture-dependent libraries go.
6211         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
6212         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6213         : vendorlib may have an optional trailing /share.
6214         case "$vendorarch" in
6215         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
6216                 dflt="$dflt/$archname"
6217                 ;;
6218         *)      dflt="$vendorarch" ;;
6219         esac
6220         fn=d~+
6221         rp='Pathname for vendor-supplied architecture-dependent files?'
6222         . ./getfile
6223         vendorarch="$ans"
6224         vendorarchexp="$ansexp"
6225         ;;
6226 esac
6227 : Change installation prefix, if necessary.
6228 if $test X"$prefix" != X"$installprefix"; then
6229         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6230 else
6231         installvendorarch="$vendorarchexp"
6232 fi
6233
6234 : Final catch-all directories to search
6235 $cat <<EOM
6236
6237 Lastly, you can have perl look in other directories for extensions and
6238 modules in addition to those already specified.
6239 These directories will be searched after 
6240         $sitearch 
6241         $sitelib 
6242 EOM
6243 test X"$vendorlib" != "X" && echo '     ' $vendorlib
6244 test X"$vendorarch" != "X" && echo '    ' $vendorarch
6245 echo ' '
6246 case "$otherlibdirs" in
6247 ''|' ') dflt='none' ;;
6248 *)      dflt="$otherlibdirs" ;;
6249 esac
6250 $cat <<EOM
6251 Enter a colon-separated set of extra paths to include in perl's @INC
6252 search path, or enter 'none' for no extra paths.
6253
6254 EOM
6255
6256 rp='Colon-separated list of additional directories for perl to search?'
6257 . ./myread
6258 case "$ans" in
6259 ' '|''|none)    otherlibdirs=' ' ;;     
6260 *)      otherlibdirs="$ans" ;;
6261 esac
6262 case "$otherlibdirs" in
6263 ' ') val=$undef ;;
6264 *)      val=$define ;;
6265 esac
6266 set d_perl_otherlibdirs
6267 eval $setvar
6268
6269 : Cruising for prototypes
6270 echo " "
6271 echo "Checking out function prototypes..." >&4
6272 $cat >prototype.c <<'EOCP'
6273 int main(int argc, char *argv[]) {
6274         exit(0);}
6275 EOCP
6276 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
6277         echo "Your C compiler appears to support function prototypes."
6278         val="$define"
6279 else
6280         echo "Your C compiler doesn't seem to understand function prototypes."
6281         val="$undef"
6282 fi
6283 set prototype
6284 eval $setvar
6285 $rm -f prototype*
6286
6287 case "$prototype" in
6288 "$define") ;;
6289 *)      ansi2knr='ansi2knr'
6290         echo " "
6291         cat <<EOM >&4
6292
6293 $me:  FATAL ERROR:
6294 This version of $package can only be compiled by a compiler that 
6295 understands function prototypes.  Unfortunately, your C compiler 
6296         $cc $ccflags
6297 doesn't seem to understand them.  Sorry about that.
6298
6299 If GNU cc is available for your system, perhaps you could try that instead.  
6300
6301 Eventually, we hope to support building Perl with pre-ANSI compilers.
6302 If you would like to help in that effort, please contact <perlbug@perl.org>.
6303
6304 Aborting Configure now.
6305 EOM
6306         exit 2
6307         ;;
6308 esac
6309
6310 : determine where public executables go
6311 echo " "
6312 set dflt bin bin
6313 eval $prefixit
6314 fn=d~
6315 rp='Pathname where the public executables will reside?'
6316 . ./getfile
6317 if $test "X$ansexp" != "X$binexp"; then
6318         installbin=''
6319 fi
6320 bin="$ans"
6321 binexp="$ansexp"
6322 : Change installation prefix, if necessary.
6323 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
6324 if $test X"$prefix" != X"$installprefix"; then
6325         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
6326 else
6327         installbin="$binexp"
6328 fi
6329
6330 : Find perl5.005 or later.
6331 echo "Looking for a previously installed perl5.005 or later... "
6332 case "$perl5" in
6333 '')     for tdir in `echo "$binexp:$PATH" | $sed "s/$path_sep/ /g"`; do
6334                 : Check if this perl is recent and can load a simple module
6335                 if $test -x $tdir/perl && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6336                         perl5=$tdir/perl
6337                         break;
6338                 elif $test -x $tdir/perl5 && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6339                         perl5=$tdir/perl
6340                         break;
6341                 fi
6342         done
6343         ;;
6344 *)      perl5="$perl5"
6345         ;;
6346 esac
6347 case "$perl5" in
6348 '')     echo "None found.  That's ok.";;
6349 *)      echo "Using $perl5." ;;
6350 esac
6351
6352 : Determine list of previous versions to include in @INC
6353 $cat > getverlist <<EOPL
6354 #!$perl5 -w
6355 use File::Basename;
6356 \$api_versionstring = "$api_versionstring";
6357 \$version = "$version";
6358 \$stem = "$sitelib_stem";
6359 \$archname = "$archname";
6360 EOPL
6361         $cat >> getverlist <<'EOPL'
6362 # Can't have leading @ because metaconfig interprets it as a command!
6363 ;@inc_version_list=();
6364 # XXX Redo to do opendir/readdir? 
6365 if (-d $stem) {
6366     chdir($stem);
6367     ;@candidates = glob("5.*");
6368 }
6369 else {
6370     ;@candidates = ();
6371 }
6372
6373 # XXX ToDo:  These comparisons must be reworked when two-digit
6374 # subversions come along, so that 5.7.10 compares as greater than
6375 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
6376 # widespread that we can use the built-in version vectors rather
6377 # than reinventing them here.  For 5.6.0, however, we must
6378 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
6379 foreach $d (@candidates) {
6380     if ($d lt $version) {
6381         if ($d ge $api_versionstring) {
6382             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
6383         }
6384         elsif ($d ge "5.005") {
6385             unshift(@inc_version_list, grep { -d } $d);
6386         }
6387     }
6388     else {
6389         # Skip newer version.  I.e. don't look in
6390         # 5.7.0 if we're installing 5.6.1.
6391     }
6392 }
6393
6394 if (@inc_version_list) {
6395     print join(' ', @inc_version_list);
6396 }
6397 else {
6398     # Blank space to preserve value for next Configure run.
6399     print " ";
6400 }
6401 EOPL
6402 chmod +x getverlist
6403 case "$inc_version_list" in
6404 '')     if test -x "$perl5"; then
6405                 dflt=`$perl5 getverlist`
6406         else
6407                 dflt='none'
6408         fi
6409         ;;
6410 $undef) dflt='none' ;;
6411 *)  dflt="$inc_version_list" ;;
6412 esac
6413 case "$dflt" in
6414 ''|' ') dflt=none ;;
6415 esac
6416 case "$dflt" in
6417 5.005) case "$bincompat5005" in
6418        $define|true|[yY]*) ;;
6419        *) dflt=none ;;
6420        esac
6421        ;;
6422 esac
6423 $cat <<'EOM'
6424
6425 In order to ease the process of upgrading, this version of perl 
6426 can be configured to use modules built and installed with earlier 
6427 versions of perl that were installed under $prefix.  Specify here
6428 the list of earlier versions that this version of perl should check.
6429 If Configure detected no earlier versions of perl installed under
6430 $prefix, then the list will be empty.  Answer 'none' to tell perl
6431 to not search earlier versions.
6432
6433 The default should almost always be sensible, so if you're not sure,
6434 just accept the default.
6435 EOM
6436
6437 rp='List of earlier versions to include in @INC?'
6438 . ./myread
6439 case "$ans" in
6440 [Nn]one|''|' ') inc_version_list=' ' ;;
6441 *) inc_version_list="$ans" ;;
6442 esac
6443 case "$inc_version_list" in
6444 ''|' ') 
6445         inc_version_list_init='0';;
6446 *)      inc_version_list_init=`echo $inc_version_list |
6447                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
6448         ;;
6449 esac
6450 $rm -f getverlist
6451
6452 : determine whether to install perl also as /usr/bin/perl
6453
6454 echo " "
6455 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
6456         $cat <<EOM
6457 Many scripts expect perl to be installed as /usr/bin/perl.
6458 I can install the perl you are about to compile also as /usr/bin/perl
6459 (in addition to $installbin/perl).
6460 EOM
6461         case "$installusrbinperl" in
6462         "$undef"|[nN]*) dflt='n';;
6463         *)              dflt='y';;
6464         esac
6465         rp="Do you want to install perl as /usr/bin/perl?"
6466         . ./myread
6467         case "$ans" in
6468         [yY]*)  val="$define";;
6469         *)      val="$undef" ;;
6470         esac
6471 else
6472         val="$undef"
6473 fi
6474 set installusrbinperl
6475 eval $setvar
6476
6477 : see if dld is available
6478 set dld.h i_dld
6479 eval $inhdr
6480
6481 : see if dlopen exists
6482 xxx_runnm="$runnm"
6483 runnm=false
6484 set dlopen d_dlopen
6485 eval $inlibc
6486 runnm="$xxx_runnm"
6487
6488 : determine which dynamic loading, if any, to compile in
6489 echo " "
6490 dldir="ext/DynaLoader"
6491 case "$usedl" in
6492 $define|y|true)
6493         dflt='y'
6494         usedl="$define"
6495         ;;
6496 $undef|n|false)
6497         dflt='n'
6498         usedl="$undef"
6499         ;;
6500 *) 
6501         dflt='n'
6502         case "$d_dlopen" in
6503             $define) dflt='y' ;;
6504         esac
6505         case "$i_dld" in
6506             $define) dflt='y' ;;
6507         esac
6508         : Does a dl_xxx.xs file exist for this operating system
6509         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
6510         ;;
6511 esac
6512 rp="Do you wish to use dynamic loading?"
6513 . ./myread
6514 usedl="$ans"
6515 case "$ans" in
6516 y*) usedl="$define"
6517         case "$dlsrc" in
6518         '')
6519                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
6520                         dflt="$dldir/dl_${osname}.xs"
6521                 elif $test "$d_dlopen" = "$define" ; then
6522                         dflt="$dldir/dl_dlopen.xs"
6523                 elif $test "$i_dld" = "$define" ; then
6524                         dflt="$dldir/dl_dld.xs"
6525                 else
6526                         dflt=''
6527                 fi
6528                 ;;
6529         *)      dflt="$dldir/$dlsrc"
6530                 ;;
6531         esac
6532     echo "The following dynamic loading files are available:"
6533         : Can not go over to $dldir because getfile has path hard-coded in.
6534         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
6535         rp="Source file to use for dynamic loading"
6536         fn="fne"
6537         gfpth="$src"
6538         . ./getfile
6539         usedl="$define"
6540         : emulate basename
6541         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
6542
6543         $cat << EOM
6544
6545 Some systems may require passing special flags to $cc -c to
6546 compile modules that will be used to create a shared library.
6547 To use no flags, say "none".
6548
6549 EOM
6550     case "$cccdlflags" in
6551     '') case "$gccversion" in
6552                 '') case "$osname" in
6553                         hpux)   dflt='+z' ;;
6554                         next)   dflt='none' ;;
6555                         irix*)  dflt='-KPIC' ;;
6556                         svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
6557                         sunos)  dflt='-pic' ;;
6558                         *)      dflt='none' ;;
6559                     esac
6560                         ;;
6561                 *)  case "$osname" in
6562                         svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
6563                         *)      dflt='-fpic' ;;
6564                     esac ;;
6565             esac ;;
6566         ' ') dflt='none' ;;
6567     *)  dflt="$cccdlflags" ;;
6568     esac
6569     rp="Any special flags to pass to $cc -c to compile shared library modules?"
6570     . ./myread
6571     case "$ans" in
6572     none) cccdlflags=' ' ;;
6573     *) cccdlflags="$ans" ;;
6574     esac
6575
6576     cat << EOM
6577
6578 Some systems use ld to create libraries that can be dynamically loaded,
6579 while other systems (such as those using ELF) use $cc.
6580
6581 EOM
6582         case "$ld" in
6583         '')     $cat >try.c <<'EOM'
6584 /* Test for whether ELF binaries are produced */
6585 #include <fcntl.h>
6586 #include <stdlib.h>
6587 int main() {
6588         char b[4];
6589         int i = open("a.out",O_RDONLY);
6590         if(i == -1) 
6591                 exit(1); /* fail */
6592         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
6593                 exit(0); /* succeed (yes, it's ELF) */
6594         else
6595                 exit(1); /* fail */
6596 }
6597 EOM
6598                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
6599                         cat <<EOM
6600 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
6601 EOM
6602                         dflt="$cc"
6603                 else
6604                         echo "I'll use ld to build dynamic libraries."
6605                         dflt='ld'
6606                 fi
6607                 rm -f try.c a.out
6608                 ;;
6609         *)      dflt="$ld"
6610                 ;;
6611         esac
6612
6613     rp="What command should be used to create dynamic libraries?"
6614     . ./myread
6615         ld="$ans"
6616
6617     cat << EOM
6618
6619 Some systems may require passing special flags to $ld to create a
6620 library that can be dynamically loaded.  If your ld flags include
6621 -L/other/path options to locate libraries outside your loader's normal
6622 search path, you may need to specify those -L options here as well.  To
6623 use no flags, say "none".
6624
6625 EOM
6626     case "$lddlflags" in
6627     '') case "$osname" in
6628                         beos) dflt='-nostart' ;;
6629                         hpux) dflt='-b';
6630                               case "$gccversion" in
6631                               '') dflt="$dflt +vnocompatwarnings" ;;
6632                               esac
6633                               ;;        
6634                         linux|irix*)    dflt='-shared' ;;
6635                         next)  dflt='none' ;;
6636                         solaris) dflt='-G' ;;
6637                         sunos) dflt='-assert nodefinitions' ;;
6638                         svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
6639                 *)     dflt='none' ;;
6640                         esac
6641                         ;;
6642     *) dflt="$lddlflags" ;;
6643     esac
6644
6645         : Try to guess additional flags to pick up local libraries.
6646         : Be careful not to append to a plain 'none'
6647         case "$dflt" in
6648         none) dflt='' ;;
6649         esac
6650         for thisflag in $ldflags; do
6651                 case "$thisflag" in
6652                 -L*|-R*)
6653                         case " $dflt " in
6654                         *" $thisflag "*) ;;
6655                         *) dflt="$dflt $thisflag" ;;
6656                         esac
6657                         ;;
6658                 esac
6659         done
6660
6661         case "$dflt" in
6662         ''|' ') dflt='none' ;;
6663         esac
6664
6665     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
6666     . ./myread
6667     case "$ans" in
6668     none) lddlflags=' ' ;;
6669     *) lddlflags="$ans" ;;
6670     esac
6671
6672         cat <<EOM
6673
6674 Some systems may require passing special flags to $cc to indicate that
6675 the resulting executable will use dynamic linking.  To use no flags,
6676 say "none".
6677
6678 EOM
6679     case "$ccdlflags" in
6680     '') case "$osname" in
6681                 hpux)   dflt='-Wl,-E' ;;
6682                 linux)  dflt='-rdynamic' ;;
6683                 next)   dflt='none' ;;
6684                 sunos)  dflt='none' ;;
6685                 *)      dflt='none' ;;
6686             esac ;;
6687     ' ')  dflt='none' ;;
6688     *)  dflt="$ccdlflags" ;;
6689     esac
6690     rp="Any special flags to pass to $cc to use dynamic linking?"
6691     . ./myread
6692     case "$ans" in
6693     none) ccdlflags=' ' ;;
6694     *) ccdlflags="$ans" ;;
6695     esac
6696     ;;
6697 *)  usedl="$undef"
6698         ld='ld'
6699     dlsrc='dl_none.xs'
6700     lddlflags=''
6701     ccdlflags=''
6702     ;;
6703 esac
6704
6705 also=''
6706 case "$usedl" in
6707 $undef)
6708         # No dynamic loading being used, so don't bother even to prompt.
6709         useshrplib='false'
6710         ;;
6711 *)      case "$useshrplib" in
6712         '')     case "$osname" in
6713                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
6714                         dflt=y
6715                         also='Building a shared libperl is required for dynamic loading to work on your system.'
6716                         ;;
6717                 next*)
6718                         case "$osvers" in
6719                         4*)     dflt=y
6720                                 also='Building a shared libperl is needed for MAB support.'
6721                                 ;;
6722                         *)      dflt=n
6723                                 ;;
6724                         esac
6725                         ;;
6726                 *)      dflt=n
6727                         ;;
6728                 esac
6729                 ;;
6730         $define|true|[Yy]*)
6731                 dflt=y
6732                 ;;
6733         *)      dflt=n
6734                 ;;
6735         esac
6736         $cat << EOM
6737
6738 The perl executable is normally obtained by linking perlmain.c with
6739 libperl${_a}, any static extensions (usually just DynaLoader), and
6740 any other libraries needed on this system (such as -lm, etc.).  Since
6741 your system supports dynamic loading, it is probably possible to build
6742 a shared libperl.$so.  If you will have more than one executable linked
6743 to libperl.$so, this will significantly reduce the size of each
6744 executable, but it may have a noticeable affect on performance.  The
6745 default is probably sensible for your system.
6746 $also
6747
6748 EOM
6749         rp="Build a shared libperl.$so (y/n)"
6750         . ./myread
6751         case "$ans" in
6752         true|$define|[Yy]*)
6753                 useshrplib='true'  ;;
6754         *)      useshrplib='false' ;;
6755         esac
6756         ;;
6757 esac
6758
6759 case "$useshrplib" in
6760 true)
6761         case "$libperl" in
6762         '')
6763                 # Figure out a good name for libperl.so.  Since it gets stored in
6764                 # a version-specific architecture-dependent library, the version
6765                 # number isn't really that important, except for making cc/ld happy.
6766                 #
6767                 # A name such as libperl.so.3.1
6768                 majmin="libperl.$so.$patchlevel.$subversion"
6769                 # A name such as libperl.so.301
6770                 majonly=`echo $patchlevel $subversion |
6771                         $awk '{printf "%d%02d", $1, $2}'`
6772                 majonly=libperl.$so.$majonly
6773                 # I'd prefer to keep the os-specific stuff here to a minimum, and
6774                 # rely on figuring it out from the naming of libc.
6775                 case "${osname}${osvers}" in
6776                 next4*)
6777                         dflt=libperl.5.$so
6778                         # XXX How handle the --version stuff for MAB?
6779                         ;;
6780                 linux*)  # ld won't link with a bare -lperl otherwise.
6781                         dflt=libperl.$so
6782                         ;;
6783                 cygwin*) # include version
6784                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
6785                         ;;
6786                 *)      # Try to guess based on whether libc has major.minor.
6787                         case "$libc" in
6788                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
6789                         *libc.$so.[0-9]*) dflt=$majonly ;;
6790                         *)      dflt=libperl.$so ;;
6791                         esac
6792                         ;;
6793                 esac
6794                 ;;
6795         *)      dflt=$libperl
6796                 ;;
6797         esac
6798         cat << EOM
6799
6800 I need to select a good name for the shared libperl.  If your system uses
6801 library names with major and minor numbers, then you might want something
6802 like $majmin.  Alternatively, if your system uses a single version
6803 number for shared libraries, then you might want to use $majonly.
6804 Or, your system might be quite happy with a simple libperl.$so.
6805
6806 Since the shared libperl will get installed into a version-specific
6807 architecture-dependent directory, the version number of the shared perl
6808 library probably isn't important, so the default should be o.k.
6809
6810 EOM
6811         rp='What name do you want to give to the shared libperl?'
6812         . ./myread
6813         libperl=$ans
6814         echo "Ok, I'll use $libperl"
6815         ;;
6816 *)
6817         libperl="libperl${_a}"
6818         ;;
6819 esac
6820
6821 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
6822 case "$shrpdir" in
6823 '') ;;
6824 *)      $cat >&4 <<EOM
6825 WARNING:  Use of the shrpdir variable for the installation location of
6826 the shared $libperl is not supported.  It was never documented and
6827 will not work in this version.  Let me (perlbug@perl.org)
6828 know of any problems this may cause.
6829
6830 EOM
6831         case "$shrpdir" in
6832         "$archlibexp/CORE")
6833                 $cat >&4 <<EOM
6834 But your current setting of $shrpdir is
6835 the default anyway, so it's harmless.
6836 EOM
6837                 ;;
6838         *)
6839                 $cat >&4 <<EOM
6840 Further, your current attempted setting of $shrpdir
6841 conflicts with the value of $archlibexp/CORE
6842 that installperl will use.
6843 EOM
6844                 ;;
6845         esac
6846         ;;
6847 esac
6848
6849 # How will the perl executable find the installed shared $libperl?
6850 # Add $xxx to ccdlflags.
6851 # If we can't figure out a command-line option, use $shrpenv to
6852 # set env LD_RUN_PATH.  The main perl makefile uses this.
6853 shrpdir=$archlibexp/CORE
6854 xxx=''
6855 tmp_shrpenv=''
6856 if "$useshrplib"; then
6857     case "$osname" in 
6858         aix)
6859                 # We'll set it in Makefile.SH...
6860                 ;;
6861         solaris|netbsd)
6862                 xxx="-R $shrpdir"
6863                 ;;
6864         freebsd)
6865                 xxx="-Wl,-R$shrpdir"
6866                 ;;
6867         linux|irix*|dec_osf)
6868                 xxx="-Wl,-rpath,$shrpdir"
6869                 ;;
6870         next)
6871                 # next doesn't like the default...
6872                 ;;
6873         beos)
6874                 # beos doesn't like the default, either.
6875                 ;;
6876         hpux*)
6877                 # hpux doesn't like the default, either.
6878                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
6879                 ;;
6880         *)
6881                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
6882                 ;;
6883         esac
6884         case "$xxx" in
6885         '') ;;
6886         *)      
6887                 # Only add $xxx if it isn't already in ccdlflags.
6888                 case " $ccdlflags " in
6889                 *" $xxx "*)     ;;
6890                 *)      ccdlflags="$ccdlflags $xxx"
6891                         cat <<EOM >&4
6892
6893 Adding $xxx to the flags
6894 passed to $ld so that the perl executable will find the 
6895 installed shared $libperl.
6896
6897 EOM
6898                         ;;
6899                 esac
6900                 ;;
6901         esac
6902 fi
6903 # Fix ccdlflags in AIX for building external extensions.
6904 # (For building Perl itself bare -bE:perl.exp is needed,
6905 #  Makefile.SH takes care of this.)
6906 case "$osname" in
6907 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
6908 esac
6909 # Respect a hint or command-line value.
6910 case "$shrpenv" in
6911 '') shrpenv="$tmp_shrpenv" ;;
6912 esac
6913 case "$ldlibpthname" in
6914 '')     ldlibpthname=LD_LIBRARY_PATH ;;
6915 none)   ldlibpthname='' ;;
6916 esac
6917
6918 : determine where manual pages are on this system
6919 echo " "
6920 case "$sysman" in
6921 '') 
6922         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
6923         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
6924         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
6925         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
6926         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
6927         sysman=`./loc . /usr/man/man1 $syspath`
6928         ;;
6929 esac
6930 if $test -d "$sysman"; then
6931         echo "System manual is in $sysman." >&4
6932 else
6933         echo "Could not find manual pages in source form." >&4
6934 fi
6935
6936 : determine where manual pages go
6937 set man1dir man1dir none
6938 eval $prefixit
6939 $cat <<EOM
6940
6941 $spackage has manual pages available in source form.
6942 EOM
6943 case "$nroff" in
6944 nroff)
6945         echo "However, you don't have nroff, so they're probably useless to you."
6946         case "$man1dir" in
6947         '') man1dir="none";;
6948         esac;;
6949 esac
6950 echo "If you don't want the manual sources installed, answer 'none'."
6951 case "$man1dir" in
6952 ' ') dflt=none
6953         ;;
6954 '')
6955         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
6956         lookpath="$lookpath $prefixexp/man/p_man/man1"
6957         lookpath="$lookpath $prefixexp/man/u_man/man1"
6958         lookpath="$lookpath $prefixexp/man/man.1"
6959         case "$sysman" in
6960         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
6961         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
6962         esac
6963         set dflt
6964         eval $prefixup
6965         ;;
6966 *)  dflt="$man1dir"
6967         ;;
6968 esac
6969 echo " "
6970 fn=dn+~
6971 rp="Where do the main $spackage manual pages (source) go?"
6972 . ./getfile
6973 if $test "X$man1direxp" != "X$ansexp"; then
6974         installman1dir=''
6975 fi
6976 man1dir="$ans"
6977 man1direxp="$ansexp"
6978 case "$man1dir" in
6979 '')     man1dir=' '
6980         installman1dir='';;
6981 esac
6982
6983 : Change installation prefix, if necessary.
6984 if $test X"$prefix" != X"$installprefix"; then
6985         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
6986 else
6987         installman1dir="$man1direxp"
6988 fi
6989
6990 : What suffix to use on installed man pages
6991
6992 case "$man1dir" in
6993 ' ')
6994         man1ext='0'
6995         ;;
6996 *)
6997         rp="What suffix should be used for the main $spackage man pages?"
6998         case "$man1ext" in
6999         '')     case "$man1dir" in
7000                 *1)  dflt=1 ;;
7001                 *1p) dflt=1p ;;
7002                 *1pm) dflt=1pm ;;
7003                 *l) dflt=l;;
7004                 *n) dflt=n;;
7005                 *o) dflt=o;;
7006                 *p) dflt=p;;
7007                 *C) dflt=C;;
7008                 *L) dflt=L;;
7009                 *L1) dflt=L1;;
7010                 *) dflt=1;;
7011                 esac
7012                 ;;
7013         *)      dflt="$man1ext";;
7014         esac
7015         . ./myread
7016         man1ext="$ans"
7017         ;;
7018 esac
7019
7020 : see if we can have long filenames
7021 echo " "
7022 first=123456789abcdef
7023 $rm -f $first
7024 if (echo hi >$first) 2>/dev/null; then
7025         if $test -f 123456789abcde; then
7026                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
7027                 val="$undef"
7028         else
7029                 echo 'You can have filenames longer than 14 characters.'>&4
7030                 val="$define"
7031         fi
7032 else
7033         $cat <<'EOM'
7034 You can't have filenames longer than 14 chars.
7035 You can't even think about them!
7036 EOM
7037         val="$undef"
7038 fi 
7039 set d_flexfnam
7040 eval $setvar
7041 $rm -rf 123456789abcde*
7042
7043 : determine where library module manual pages go
7044 set man3dir man3dir none
7045 eval $prefixit
7046 $cat <<EOM
7047
7048 $spackage has manual pages for many of the library modules.
7049 EOM
7050
7051 case "$nroff" in
7052 nroff)
7053         $cat <<'EOM'
7054 However, you don't have nroff, so they're probably useless to you.
7055 EOM
7056         case "$man3dir" in
7057         '') man3dir="none";;
7058         esac;;
7059 esac
7060
7061 case "$d_flexfnam" in
7062 undef)
7063         $cat <<'EOM'
7064 However, your system can't handle the long file names like File::Basename.3. 
7065 EOM
7066         case "$man3dir" in
7067         '') man3dir="none";;
7068         esac;;
7069 esac
7070
7071 echo "If you don't want the manual sources installed, answer 'none'."
7072 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7073 case "$man3dir" in
7074 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
7075         if $test -d "$privlib/man/man3"; then
7076                 cat <<EOM >&4
7077
7078 WARNING:  Previous versions of perl installed man3 pages into
7079 $privlib/man/man3.  This version will suggest a 
7080 new default of $dflt.  
7081 EOM
7082                 tdflt=$dflt
7083                 dflt='n'
7084                 rp='Do you wish to preserve the old behavior?(y/n)'
7085                 . ./myread
7086                 case "$ans" in
7087                 y*) dflt="$privlib/man/man3" ;;
7088                 *)  dflt=$tdflt ;;
7089                 esac
7090     fi
7091         ;;
7092 *)      dflt="$man3dir" ;;
7093 esac
7094 case "$dflt" in
7095 ' ') dflt=none ;;
7096 esac
7097 echo " "
7098 fn=dn+~
7099 rp="Where do the $package library man pages (source) go?"
7100 . ./getfile
7101 man3dir="$ans"
7102 man3direxp="$ansexp"
7103 case "$man3dir" in
7104 '')     man3dir=' '
7105         installman3dir='';;
7106 esac
7107
7108 : Change installation prefix, if necessary.
7109 if $test X"$prefix" != X"$installprefix"; then
7110         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
7111 else
7112         installman3dir="$man3direxp"
7113 fi
7114
7115 : What suffix to use on installed man pages
7116 case "$man3dir" in
7117 ' ')
7118         man3ext='0'
7119         ;;
7120 *)
7121         rp="What suffix should be used for the $package library man pages?"
7122         case "$man3ext" in
7123         '')     case "$man3dir" in
7124                 *3)  dflt=3 ;;
7125                 *3p) dflt=3p ;;
7126                 *3pm) dflt=3pm ;;
7127                 *l) dflt=l;;
7128                 *n) dflt=n;;
7129                 *o) dflt=o;;
7130                 *p) dflt=p;;
7131                 *C) dflt=C;;
7132                 *L) dflt=L;;
7133                 *L3) dflt=L3;;
7134                 *) dflt=3;;
7135                 esac
7136                 ;;
7137         *)      dflt="$man3ext";;
7138         esac
7139         . ./myread
7140         man3ext="$ans"
7141         ;;
7142 esac
7143
7144 : see if we have to deal with yellow pages, now NIS.
7145 if $test -d /usr/etc/yp || $test -d /etc/yp; then
7146         if $test -f /usr/etc/nibindd; then
7147                 echo " "
7148                 echo "I'm fairly confident you're on a NeXT."
7149                 echo " "
7150                 rp='Do you get the hosts file via NetInfo?'
7151                 dflt=y
7152                 case "$hostcat" in
7153                 nidump*) ;;
7154                 '') ;;
7155                 *) dflt=n;;
7156                 esac
7157                 . ./myread
7158                 case "$ans" in
7159                 y*) hostcat='nidump hosts .';;
7160                 *)      case "$hostcat" in
7161                         nidump*) hostcat='';;
7162                         esac
7163                         ;;
7164                 esac
7165         fi
7166         case "$hostcat" in
7167         nidump*) ;;
7168         *)
7169                 case "$hostcat" in
7170                 *ypcat*) dflt=y;;
7171                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7172                                 dflt=y
7173                         else
7174                                 dflt=n
7175                         fi;;
7176                 *) dflt=n;;
7177                 esac
7178                 echo " "
7179                 rp='Are you getting the hosts file via yellow pages?'
7180                 . ./myread
7181                 case "$ans" in
7182                 y*) hostcat='ypcat hosts';;
7183                 *) hostcat='cat /etc/hosts';;
7184                 esac
7185                 ;;
7186         esac
7187 fi
7188 case "$hostcat" in
7189 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
7190 esac
7191 case "$groupcat" in
7192 '') test -f /etc/group && groupcat='cat /etc/group';;
7193 esac
7194 case "$passcat" in
7195 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
7196 esac
7197
7198 : now get the host name
7199 echo " "
7200 echo "Figuring out host name..." >&4
7201 case "$myhostname" in
7202 '') cont=true
7203         echo 'Maybe "hostname" will work...'
7204         if tans=`sh -c hostname 2>&1` ; then
7205                 myhostname=$tans
7206                 phostname=hostname
7207                 cont=''
7208         fi
7209         ;;
7210 *) cont='';;
7211 esac
7212 if $test "$cont"; then
7213         if ./xenix; then
7214                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
7215                 if tans=`cat /etc/systemid 2>&1` ; then
7216                         myhostname=$tans
7217                         phostname='cat /etc/systemid'
7218                         echo "Whadyaknow.  Xenix always was a bit strange..."
7219                         cont=''
7220                 fi
7221         elif $test -r /etc/systemid; then
7222                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
7223         fi
7224 fi
7225 if $test "$cont"; then
7226         echo 'No, maybe "uuname -l" will work...'
7227         if tans=`sh -c 'uuname -l' 2>&1` ; then
7228                 myhostname=$tans
7229                 phostname='uuname -l'
7230         else
7231                 echo 'Strange.  Maybe "uname -n" will work...'
7232                 if tans=`sh -c 'uname -n' 2>&1` ; then
7233                         myhostname=$tans
7234                         phostname='uname -n'
7235                 else
7236                         echo 'Oh well, maybe I can mine it out of whoami.h...'
7237                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
7238                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
7239                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
7240                         else
7241                                 case "$myhostname" in
7242                                 '') echo "Does this machine have an identity crisis or something?"
7243                                         phostname='';;
7244                                 *)
7245                                         echo "Well, you said $myhostname before..."
7246                                         phostname='echo $myhostname';;
7247                                 esac
7248                         fi
7249                 fi
7250         fi
7251 fi
7252 : you do not want to know about this
7253 set $myhostname
7254 myhostname=$1
7255
7256 : verify guess
7257 if $test "$myhostname" ; then
7258         dflt=y
7259         rp='Your host name appears to be "'$myhostname'".'" Right?"
7260         . ./myread
7261         case "$ans" in
7262         y*) ;;
7263         *) myhostname='';;
7264         esac
7265 fi
7266
7267 : bad guess or no guess
7268 while $test "X$myhostname" = X ; do
7269         dflt=''
7270         rp="Please type the (one word) name of your host:"
7271         . ./myread
7272         myhostname="$ans"
7273 done
7274
7275 : translate upper to lower if necessary
7276 case "$myhostname" in
7277 *[A-Z]*)
7278         echo "(Normalizing case in your host name)"
7279         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
7280         ;;
7281 esac
7282
7283 case "$myhostname" in
7284 *.*)
7285         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
7286         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
7287         echo "(Trimming domain name from host name--host name is now $myhostname)"
7288         ;;
7289 *) case "$mydomain" in
7290         '')
7291                 {
7292                         test "X$hostcat" = "Xypcat hosts" &&
7293                         ypmatch "$myhostname" hosts 2>/dev/null |\
7294                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
7295                         $test -s hosts
7296                 } || {
7297                         test "X$hostcat" != "X" &&
7298                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
7299                                         /[       ]$myhostname[  . ]/p" > hosts
7300                 }
7301                 tmp_re="[       . ]"
7302                 if $test -f hosts; then
7303                         $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
7304                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
7305                         dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
7306                                 hosts | $sort | $uniq | \
7307                                 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
7308                         case `$echo X$dflt` in
7309                         X*\ *)  echo "(Several hosts in the database matched hostname)"
7310                                 dflt=.
7311                                 ;;
7312                         X.) echo "(You do not have fully-qualified names in the hosts database)"
7313                                 ;;
7314                         esac
7315                 else
7316                         echo "(I cannot locate a hosts database anywhere)"
7317                         dflt=.
7318                 fi
7319                 case "$dflt" in
7320                 .)
7321                         tans=`./loc resolv.conf X /etc /usr/etc`
7322                         if $test -f "$tans"; then
7323                                 echo "(Attempting domain name extraction from $tans)"
7324                                 dflt=.`$sed -n -e 's/   / /g' \
7325                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
7326                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7327                                 case "$dflt" in
7328                                 .) dflt=.`$sed -n -e 's/        / /g' \
7329                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
7330                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7331                                         ;;
7332                                 esac
7333                         fi
7334                         ;;
7335                 esac
7336                 case "$dflt" in
7337                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
7338                         dflt=.`sh -c domainname 2>/dev/null`
7339                         case "$dflt" in
7340                         '') dflt='.';;
7341                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
7342                         esac
7343                         ;;
7344                 esac
7345                 case "$dflt" in
7346                 .) echo "(Lost all hope -- silly guess then)"
7347                         dflt='.uucp'
7348                         ;;
7349                 esac
7350                 $rm -f hosts
7351                 ;;
7352         *) dflt="$mydomain";;
7353         esac;;
7354 esac
7355 echo " "
7356 rp="What is your domain name?"
7357 . ./myread
7358 tans="$ans"
7359 case "$ans" in
7360 '') ;;
7361 .*) ;;
7362 *) tans=".$tans";;
7363 esac
7364 mydomain="$tans"
7365
7366 : translate upper to lower if necessary
7367 case "$mydomain" in
7368 *[A-Z]*)
7369         echo "(Normalizing case in your domain name)"
7370         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
7371         ;;
7372 esac
7373
7374 : a little sanity check here
7375 case "$phostname" in
7376 '') ;;
7377 *)
7378         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
7379         $myhostname$mydomain|$myhostname) ;;
7380         *)
7381                 case "$phostname" in
7382                 sed*)
7383                         echo "(That doesn't agree with your whoami.h file, by the way.)"
7384                         ;;
7385                 *)
7386                         echo "(That doesn't agree with your $phostname command, by the way.)"
7387                         ;;
7388                 esac
7389         ;;
7390         esac
7391         ;;
7392 esac
7393
7394 $cat <<EOM
7395
7396 I need to get your e-mail address in Internet format if possible, i.e.
7397 something like user@host.domain. Please answer accurately since I have
7398 no easy means to double check it. The default value provided below
7399 is most probably close to reality but may not be valid from outside
7400 your organization...
7401
7402 EOM
7403 cont=x
7404 while test "$cont"; do
7405         case "$cf_email" in
7406         '') dflt="$cf_by@$myhostname$mydomain";;
7407         *) dflt="$cf_email";;
7408         esac
7409         rp='What is your e-mail address?'
7410         . ./myread
7411         cf_email="$ans"
7412         case "$cf_email" in
7413         *@*.*) cont='' ;;
7414         *)
7415                 rp='Address does not look like an Internet one.  Use it anyway?'
7416                 case "$fastread" in
7417                 yes) dflt=y ;;
7418                 *) dflt=n ;;
7419                 esac
7420                 . ./myread
7421                 case "$ans" in
7422                 y*) cont='' ;;
7423                 *) echo " " ;;
7424                 esac
7425                 ;;
7426         esac
7427 done
7428
7429 $cat <<EOM
7430
7431 If you or somebody else will be maintaining perl at your site, please
7432 fill in the correct e-mail address here so that they may be contacted
7433 if necessary. Currently, the "perlbug" program included with perl
7434 will send mail to this address in addition to perlbug@perl.org. You may
7435 enter "none" for no administrator.
7436
7437 EOM
7438 case "$perladmin" in
7439 '') dflt="$cf_email";;
7440 *) dflt="$perladmin";;
7441 esac
7442 rp='Perl administrator e-mail address'
7443 . ./myread
7444 perladmin="$ans"
7445
7446 : determine whether to only install version-specific parts.
7447 echo " "
7448 $cat <<EOM
7449 Do you want to install only the version-specific parts of the perl
7450 distribution?  Usually you do *not* want to do this.
7451 EOM
7452 case "$versiononly" in
7453 "$define"|[Yy]*|true) dflt='y' ;;
7454 *) dflt='n';
7455 esac
7456 rp="Do you want to install only the version-specific parts of perl?"
7457 . ./myread
7458 case "$ans" in
7459 [yY]*)  val="$define";;
7460 *)      val="$undef" ;;
7461 esac
7462 set versiononly
7463 eval $setvar
7464
7465 : figure out how to guarantee perl startup
7466 case "$startperl" in
7467 '')
7468         case "$sharpbang" in
7469         *!)
7470                 $cat <<EOH
7471
7472 I can use the #! construct to start perl on your system. This will
7473 make startup of perl scripts faster, but may cause problems if you
7474 want to share those scripts and perl is not in a standard place
7475 ($binexp/perl) on all your platforms. The alternative is to force
7476 a shell by starting the script with a single ':' character.
7477
7478 EOH
7479                 case "$versiononly" in
7480                 "$define")      dflt="$binexp/perl$version";;  
7481                 *)              dflt="$binexp/perl";;
7482                 esac
7483                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
7484                 . ./myread
7485                 case "$ans" in
7486                 none)   startperl=": # use perl";;
7487                 *)      startperl="#!$ans"
7488                         if $test 30 -lt `echo "$ans" | wc -c`; then
7489                                 $cat >&4 <<EOM
7490
7491 WARNING:  Some systems limit the #! command to 32 characters.
7492 If you experience difficulty running Perl scripts with #!, try
7493 installing Perl in a directory with a shorter pathname.
7494
7495 EOM
7496                         fi ;;
7497                 esac
7498                 ;;
7499         *) startperl=": # use perl"
7500                 ;;
7501         esac
7502         ;;
7503 esac
7504 echo "I'll use $startperl to start perl scripts."
7505
7506 : figure best path for perl in scripts
7507 case "$perlpath" in
7508 '')
7509         perlpath="$binexp/perl"
7510         case "$startperl" in
7511         *!*) ;;
7512         *)
7513                 $cat <<EOH
7514
7515 I will use the "eval 'exec'" idiom to start Perl on your system.
7516 I can use the full path of your Perl binary for this purpose, but
7517 doing so may cause problems if you want to share those scripts and
7518 Perl is not always in a standard place ($binexp/perl).
7519
7520 EOH
7521                 dflt="$binexp/perl"
7522                 rp="What path shall I use in \"eval 'exec'\"?"
7523                 . ./myread
7524                 perlpath="$ans"
7525                 ;;
7526         esac
7527         ;;
7528 esac
7529 case "$startperl" in
7530 *!*)    ;;
7531 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
7532 esac
7533
7534 : determine where public executable scripts go
7535 set scriptdir scriptdir
7536 eval $prefixit
7537 case "$scriptdir" in
7538 '')
7539         dflt="$bin"
7540         : guess some guesses
7541         $test -d /usr/share/scripts && dflt=/usr/share/scripts
7542         $test -d /usr/share/bin     && dflt=/usr/share/bin
7543         $test -d /usr/local/script  && dflt=/usr/local/script
7544         $test -d /usr/local/scripts && dflt=/usr/local/scripts
7545         $test -d $prefixexp/script  && dflt=$prefixexp/script
7546         set dflt
7547         eval $prefixup
7548         ;;
7549 *)  dflt="$scriptdir"
7550         ;;
7551 esac
7552 $cat <<EOM
7553  
7554 Some installations have a separate directory just for executable scripts so
7555 that they can mount it across multiple architectures but keep the scripts in
7556 one spot.  You might, for example, have a subdirectory of /usr/share for this.
7557 Or you might just lump your scripts in with all your other executables.
7558  
7559 EOM
7560 fn=d~
7561 rp='Where do you keep publicly executable scripts?'
7562 . ./getfile
7563 if $test "X$ansexp" != "X$scriptdirexp"; then
7564         installscript=''
7565 fi
7566 scriptdir="$ans"
7567 scriptdirexp="$ansexp"
7568 : Change installation prefix, if necessary.
7569 if $test X"$prefix" != X"$installprefix"; then
7570         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
7571 else
7572         installscript="$scriptdirexp"
7573 fi
7574
7575 : determine where add-on public executables go
7576 case "$sitebin" in
7577 '')     dflt=$siteprefix/bin ;;
7578 *)      dflt=$sitebin ;;
7579 esac
7580 fn=d~
7581 rp='Pathname where the add-on public executables should be installed?'
7582 . ./getfile
7583 sitebin="$ans"
7584 sitebinexp="$ansexp"
7585 : Change installation prefix, if necessary.
7586 if $test X"$prefix" != X"$installprefix"; then
7587         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
7588 else
7589         installsitebin="$sitebinexp"
7590 fi
7591
7592 case "$vendorprefix" in
7593 '')     d_vendorbin="$undef"
7594         vendorbin=''
7595         vendorbinexp=''
7596         ;;
7597 *)      d_vendorbin="$define"
7598         : determine where vendor-supplied executables go.
7599         case "$vendorbin" in
7600         '') dflt=$vendorprefix/bin ;;
7601         *)      dflt="$vendorbin" ;;
7602         esac
7603         fn=d~+
7604         rp='Pathname for the vendor-supplied executables directory?'
7605         . ./getfile
7606         vendorbin="$ans"
7607         vendorbinexp="$ansexp"
7608         ;;
7609 esac
7610 : Change installation prefix, if necessary.
7611 if $test X"$prefix" != X"$installprefix"; then
7612         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
7613 else
7614         installvendorbin="$vendorbinexp"
7615 fi
7616
7617 : see if qgcvt exists
7618 set qgcvt d_qgcvt
7619 eval $inlibc
7620
7621 echo " "
7622
7623 if $test X"$d_longdbl" = X"$define"; then
7624
7625 echo "Checking how to print long doubles..." >&4
7626
7627 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
7628         $cat >try.c <<'EOCP'
7629 #include <sys/types.h>
7630 #include <stdio.h>
7631 int main() {
7632   double d = 123.456;
7633   printf("%.3f\n", d);
7634 }
7635 EOCP
7636         set try
7637         if eval $compile; then
7638                 yyy=`./try$exe_ext`
7639                 case "$yyy" in
7640                 123.456)
7641                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
7642                         sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
7643                         echo "We will use %f."
7644                         ;;
7645                 esac
7646         fi
7647 fi
7648
7649 if $test X"$sPRIfldbl" = X; then
7650         $cat >try.c <<'EOCP'
7651 #include <sys/types.h>
7652 #include <stdio.h>
7653 int main() {
7654   long double d = 123.456;
7655   printf("%.3llf\n", d);
7656 }
7657 EOCP
7658         set try
7659         if eval $compile; then
7660                 yyy=`./try$exe_ext`
7661                 case "$yyy" in
7662                 123.456)
7663                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
7664                         sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
7665                         echo "We will use %llf."
7666                         ;;
7667                 esac
7668         fi
7669 fi
7670
7671 if $test X"$sPRIfldbl" = X; then
7672         $cat >try.c <<'EOCP'
7673 #include <sys/types.h>
7674 #include <stdio.h>
7675 int main() {
7676   long double d = 123.456;
7677   printf("%.3Lf\n", d);
7678 }
7679 EOCP
7680         set try
7681         if eval $compile; then
7682                 yyy=`./try$exe_ext`
7683                 case "$yyy" in
7684                 123.456)
7685                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
7686                         sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
7687                         echo "We will use %Lf."
7688                         ;;
7689                 esac
7690         fi
7691 fi
7692
7693 if $test X"$sPRIfldbl" = X; then
7694         $cat >try.c <<'EOCP'
7695 #include <sys/types.h>
7696 #include <stdio.h>
7697 int main() {
7698   long double d = 123.456;
7699   printf("%.3lf\n", d);
7700 }
7701 EOCP
7702         set try
7703         if eval $compile; then
7704                 yyy=`./try$exe_ext`
7705                 case "$yyy" in
7706                 123.456)
7707                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
7708                         sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
7709                         echo "We will use %lf."
7710                         ;;
7711                 esac
7712         fi
7713 fi
7714
7715 if $test X"$sPRIfldbl" = X; then
7716         echo "Cannot figure out how to print long doubles." >&4
7717 else
7718         sSCNfldbl=$sPRIfldbl    # expect consistency
7719 fi
7720
7721 $rm -f try try.*
7722
7723 fi # d_longdbl
7724
7725 case "$sPRIfldbl" in
7726 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
7727         d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; 
7728         d_SCNfldbl="$undef";
7729         ;;
7730 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
7731         d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; 
7732         d_SCNfldbl="$define";
7733         ;;
7734 esac
7735
7736 : Check how to convert floats to strings.
7737 echo " "
7738 echo "Checking for an efficient way to convert floats to strings."
7739 echo " " > try.c
7740 case "$uselongdouble" in
7741 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
7742 esac
7743 case "$d_longdbl" in
7744 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
7745 esac
7746 case "$d_PRIgldbl" in
7747 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
7748 esac
7749 $cat >>try.c <<EOP
7750 #ifdef TRY_gconvert
7751 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
7752 char *myname = "gconvert";
7753 #endif
7754 #ifdef TRY_gcvt
7755 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
7756 char *myname = "gcvt";
7757 #endif
7758 #ifdef TRY_qgcvt
7759 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
7760 char *myname = "qgcvt";
7761 #define DOUBLETYPE long double
7762 #endif
7763 #ifdef TRY_sprintf
7764 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
7765 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
7766 #else
7767 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
7768 #endif
7769 char *myname = "sprintf";
7770 #endif
7771
7772 #ifndef DOUBLETYPE
7773 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
7774 #define DOUBLETYPE long double
7775 #else
7776 #define DOUBLETYPE double
7777 #endif
7778 #endif
7779
7780 #include <stdio.h>
7781
7782 #define I_STDLIB $i_stdlib
7783 #ifdef I_STDLIB
7784 #include <stdlib.h>
7785 #endif
7786
7787 int
7788 checkit(expect, got)
7789 char *expect;
7790 char *got;
7791 {
7792     if (strcmp(expect, got)) {
7793                 printf("%s oddity:  Expected %s, got %s\n",
7794                         myname, expect, got);
7795                 exit(1);
7796         }
7797 }
7798
7799 int main()
7800
7801         char buf[64]; 
7802         buf[63] = '\0';
7803
7804         /* This must be 1st test on (which?) platform */
7805         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
7806         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
7807         checkit("0.1", buf);
7808
7809         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
7810         checkit("1", buf);
7811
7812         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
7813         checkit("1.1", buf);
7814
7815         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
7816         checkit("1.01", buf);
7817
7818         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
7819         checkit("1.001", buf);
7820
7821         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
7822         checkit("1.0001", buf);
7823
7824         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
7825         checkit("1.00001", buf);
7826
7827         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
7828         checkit("1.000001", buf);
7829
7830         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
7831         checkit("0", buf);
7832
7833         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
7834         checkit("-1", buf);
7835
7836         /* Some Linux gcvt's give 1.e+5 here. */
7837         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
7838         checkit("100000", buf);
7839         
7840         /* Some Linux gcvt's give -1.e+5 here. */
7841         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
7842         checkit("-100000", buf);
7843
7844         Gconvert((DOUBLETYPE)123.456, 8, 0, buf); 
7845         checkit("123.456", buf);
7846
7847         exit(0);
7848 }
7849 EOP
7850 case "$d_Gconvert" in
7851 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
7852 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
7853 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
7854 *) xxx_list='gconvert gcvt sprintf' ;;
7855 esac
7856
7857 case "$d_longdbl$uselongdouble$d_PRIgldbl" in
7858 "$define$define$define")
7859     # for long doubles prefer first qgcvt, then sprintf
7860     xxx_list="`echo $xxx_list|sed s/sprintf//`" 
7861     xxx_list="sprintf $xxx_list"
7862     case "$d_qgcvt" in
7863     "$define") xxx_list="qgcvt $xxx_list" ;;
7864     esac
7865     ;;
7866 esac
7867
7868 for xxx_convert in $xxx_list; do
7869         echo "Trying $xxx_convert..."
7870         $rm -f try try$_o
7871         set try -DTRY_$xxx_convert
7872         if eval $compile; then
7873                 echo "$xxx_convert() found." >&4
7874                 if ./try; then
7875                         echo "I'll use $xxx_convert to convert floats into a string." >&4
7876                         break;
7877                 else
7878                         echo "...But $xxx_convert didn't work as I expected."
7879                 fi
7880         else
7881                 echo "$xxx_convert NOT found." >&4
7882         fi
7883 done
7884         
7885 case "$xxx_convert" in
7886 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
7887 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
7888 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
7889 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
7890    "$define$define$define")
7891       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
7892    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
7893    esac
7894    ;;  
7895 esac
7896
7897 : see if _fwalk exists
7898 set fwalk d__fwalk
7899 eval $inlibc
7900
7901 : Initialize h_fcntl
7902 h_fcntl=false
7903
7904 : Initialize h_sysfile
7905 h_sysfile=false
7906
7907 : access call always available on UNIX
7908 set access d_access
7909 eval $inlibc
7910
7911 : locate the flags for 'access()'
7912 case "$d_access" in
7913 "$define")
7914         echo " "
7915         $cat >access.c <<'EOCP'
7916 #include <sys/types.h>
7917 #ifdef I_FCNTL
7918 #include <fcntl.h>
7919 #endif
7920 #ifdef I_SYS_FILE
7921 #include <sys/file.h>
7922 #endif
7923 #ifdef I_UNISTD
7924 #include <unistd.h>
7925 #endif
7926 int main() {
7927         exit(R_OK);
7928 }
7929 EOCP
7930         : check sys/file.h first, no particular reason here
7931         if $test `./findhdr sys/file.h` && \
7932                 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
7933                 h_sysfile=true;
7934                 echo "<sys/file.h> defines the *_OK access constants." >&4
7935         elif $test `./findhdr fcntl.h` && \
7936                 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
7937                 h_fcntl=true;
7938                 echo "<fcntl.h> defines the *_OK access constants." >&4
7939         elif $test `./findhdr unistd.h` && \
7940                 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
7941                 echo "<unistd.h> defines the *_OK access constants." >&4
7942         else
7943                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
7944         fi
7945         ;;
7946 esac
7947 $rm -f access*
7948
7949 : see if accessx exists
7950 set accessx d_accessx
7951 eval $inlibc
7952
7953 : see if alarm exists
7954 set alarm d_alarm
7955 eval $inlibc
7956
7957 : see if atolf exists
7958 set atolf d_atolf
7959 eval $inlibc
7960
7961 : see if atoll exists
7962 set atoll d_atoll
7963 eval $inlibc
7964
7965 : Look for GNU-cc style attribute checking
7966 echo " "
7967 echo "Checking whether your compiler can handle __attribute__ ..." >&4
7968 $cat >attrib.c <<'EOCP'
7969 #include <stdio.h>
7970 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
7971 EOCP
7972 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
7973         if $contains 'warning' attrib.out >/dev/null 2>&1; then
7974                 echo "Your C compiler doesn't fully support __attribute__."
7975                 val="$undef"
7976         else
7977                 echo "Your C compiler supports __attribute__."
7978                 val="$define"
7979         fi
7980 else
7981         echo "Your C compiler doesn't seem to understand __attribute__ at all."
7982         val="$undef"
7983 fi
7984 set d_attribut
7985 eval $setvar
7986 $rm -f attrib*
7987
7988 : see if bcmp exists
7989 set bcmp d_bcmp
7990 eval $inlibc
7991
7992 : see if bcopy exists
7993 set bcopy d_bcopy
7994 eval $inlibc
7995
7996 : see if this is a unistd.h system
7997 set unistd.h i_unistd
7998 eval $inhdr
7999
8000 : see if getpgrp exists
8001 set getpgrp d_getpgrp
8002 eval $inlibc
8003
8004 case "$d_getpgrp" in
8005 "$define")
8006         echo " "
8007         echo "Checking to see which flavor of getpgrp is in use..."
8008         $cat >set.c <<EOP
8009 #$i_unistd I_UNISTD
8010 #include <sys/types.h>
8011 #ifdef I_UNISTD
8012 #  include <unistd.h>
8013 #endif
8014 int main()
8015 {
8016         if (getuid() == 0) {
8017                 printf("(I see you are running Configure as super-user...)\n");
8018                 setuid(1);
8019         }
8020 #ifdef TRY_BSD_PGRP
8021         if (getpgrp(1) == 0)
8022                 exit(0);
8023 #else
8024         if (getpgrp() > 0)
8025                 exit(0);
8026 #endif
8027         exit(1);
8028 }
8029 EOP
8030         if $cc -o set -DTRY_BSD_PGRP $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
8031                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
8032                 val="$define"
8033         elif $cc -o set $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
8034                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
8035                 val="$undef"
8036         else
8037                 echo "I can't seem to compile and run the test program."
8038                 if ./usg; then
8039                         xxx="a USG one, i.e. you use getpgrp()."
8040                 else
8041                         # SVR4 systems can appear rather BSD-ish.
8042                         case "$i_unistd" in
8043                         $undef)
8044                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
8045                                 val="$define"
8046                                 ;;
8047                         $define)
8048                                 xxx="probably a USG one, i.e. you use getpgrp()."
8049                                 val="$undef"
8050                                 ;;
8051                         esac
8052                 fi
8053                 echo "Assuming your getpgrp is $xxx" >&4
8054         fi
8055         ;;
8056 *) val="$undef";;
8057 esac
8058 set d_bsdgetpgrp
8059 eval $setvar
8060 $rm -f set set.c
8061
8062 : see if setpgrp exists
8063 set setpgrp d_setpgrp
8064 eval $inlibc
8065
8066 case "$d_setpgrp" in
8067 "$define")
8068         echo " "
8069         echo "Checking to see which flavor of setpgrp is in use..."
8070         $cat >set.c <<EOP
8071 #$i_unistd I_UNISTD
8072 #include <sys/types.h>
8073 #ifdef I_UNISTD
8074 #  include <unistd.h>
8075 #endif
8076 int main()
8077 {
8078         if (getuid() == 0) {
8079                 printf("(I see you are running Configure as super-user...)\n");
8080                 setuid(1);
8081         }
8082 #ifdef TRY_BSD_PGRP
8083         if (-1 == setpgrp(1, 1))
8084                 exit(0);
8085 #else
8086         if (setpgrp() != -1)
8087                 exit(0);
8088 #endif
8089         exit(1);
8090 }
8091 EOP
8092         if $cc -o set -DTRY_BSD_PGRP $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
8093                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
8094                 val="$define"
8095         elif $cc -o set $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
8096                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
8097                 val="$undef"
8098         else
8099                 echo "(I can't seem to compile and run the test program.)"
8100                 if ./usg; then
8101                         xxx="a USG one, i.e. you use setpgrp()."
8102                 else
8103                         # SVR4 systems can appear rather BSD-ish.
8104                         case "$i_unistd" in
8105                         $undef)
8106                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
8107                                 val="$define"
8108                                 ;;
8109                         $define)
8110                                 xxx="probably a USG one, i.e. you use setpgrp()."
8111                                 val="$undef"
8112                                 ;;
8113                         esac
8114                 fi
8115                 echo "Assuming your setpgrp is $xxx" >&4
8116         fi
8117         ;;
8118 *) val="$undef";;
8119 esac
8120 set d_bsdsetpgrp
8121 eval $setvar
8122 $rm -f set set.c
8123 : see if bzero exists
8124 set bzero d_bzero
8125 eval $inlibc
8126
8127 : see if signal is declared as pointer to function returning int or void
8128 echo " "
8129 xxx=`./findhdr signal.h`
8130 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
8131 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
8132         echo "You have int (*signal())() instead of void." >&4
8133         val="$undef"
8134 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
8135         echo "You have void (*signal())()." >&4
8136         val="$define"
8137 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
8138         echo "You have int (*signal())() instead of void." >&4
8139         val="$undef"
8140 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
8141         echo "You have void (*signal())()." >&4
8142         val="$define"
8143 else
8144         case "$d_voidsig" in
8145         '')
8146         echo "I can't determine whether signal handler returns void or int..." >&4
8147                 dflt=void
8148                 rp="What type does your signal handler return?"
8149                 . ./myread
8150                 case "$ans" in
8151                 v*) val="$define";;
8152                 *) val="$undef";;
8153                 esac;;
8154         "$define")
8155                 echo "As you already told me, signal handler returns void." >&4
8156                 val="$define"
8157                 ;;
8158         *)      echo "As you already told me, signal handler returns int." >&4
8159                 val="$undef"
8160                 ;;
8161         esac
8162 fi
8163 set d_voidsig
8164 eval $setvar
8165 case "$d_voidsig" in
8166 "$define") signal_t="void";;
8167 *) signal_t="int";;
8168 esac
8169 $rm -f $$.tmp
8170
8171 : check for ability to cast large floats to 32-bit ints.
8172 echo " "
8173 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
8174 if $test "$intsize" -ge 4; then
8175         xxx=int
8176 else
8177         xxx=long
8178 fi
8179 $cat >try.c <<EOCP
8180 #include <stdio.h>
8181 #include <sys/types.h>
8182 #include <signal.h>
8183 $signal_t blech(s) int s; { exit(3); }
8184 int main()
8185 {
8186         $xxx i32;
8187         double f, g;
8188         int result = 0;
8189         char str[16];
8190         signal(SIGFPE, blech);
8191
8192         /* Don't let compiler optimize the test away.  Store the number 
8193            in a writable string for gcc to pass to sscanf under HP/UX.
8194         */
8195         sprintf(str, "2147483647");
8196         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
8197         g = 10 * f;
8198         i32  = ($xxx) g;
8199
8200         /* x86 processors will probably give 0x8000 0000, which is a
8201        sign change.  We don't want that.  We want to mimic SPARC
8202            behavior here, which is to preserve the sign and give
8203            back 0x7fff ffff.
8204         */
8205         if (i32 != ($xxx) f)
8206                 result |= 1;
8207         exit(result);
8208 }
8209 EOCP
8210 set try
8211 if eval $compile_ok; then
8212         ./try
8213         yyy=$?
8214 else
8215         echo "(I can't seem to compile the test program--assuming it can't)"
8216         yyy=1
8217 fi
8218 case "$yyy" in
8219 0)      val="$define"
8220         echo "Yup, it can."
8221         ;;
8222 *)      val="$undef"
8223         echo "Nope, it can't."
8224         ;;
8225 esac
8226 set d_casti32
8227 eval $setvar
8228 $rm -f try try.*
8229
8230 : check for ability to cast negative floats to unsigned
8231 echo " "
8232 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
8233 $cat >try.c <<EOCP
8234 #include <stdio.h>
8235 #include <sys/types.h>
8236 #include <signal.h>
8237 $signal_t blech(s) int s; { exit(7); }
8238 $signal_t blech_in_list(s) int s; { exit(4); }
8239 unsigned long dummy_long(p) unsigned long p; { return p; }
8240 unsigned int dummy_int(p) unsigned int p; { return p; }
8241 unsigned short dummy_short(p) unsigned short p; { return p; }
8242 int main()
8243 {
8244         double f;
8245         unsigned long along;
8246         unsigned int aint;
8247         unsigned short ashort;
8248         int result = 0;
8249         char str[16];
8250         
8251         /* Frustrate gcc-2.7.2's optimizer which failed this test with
8252            a direct f = -123. assignment.  gcc-2.8.0 reportedly
8253            optimized the whole file away
8254         */
8255         /* Store the number in a writable string for gcc to pass to 
8256            sscanf under HP/UX.
8257         */
8258         sprintf(str, "-123");
8259         sscanf(str, "%lf", &f);  /* f = -123.; */
8260
8261         signal(SIGFPE, blech);
8262         along = (unsigned long)f;
8263         aint = (unsigned int)f;
8264         ashort = (unsigned short)f;
8265         if (along != (unsigned long)-123)
8266                 result |= 1;
8267         if (aint != (unsigned int)-123)
8268                 result |= 1;
8269         if (ashort != (unsigned short)-123)
8270                 result |= 1;
8271         sprintf(str, "1073741824.");
8272         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
8273         f = f + f;
8274         along = 0;
8275         along = (unsigned long)f;
8276         if (along != 0x80000000)
8277                 result |= 2;
8278         f -= 1.;
8279         along = 0;
8280         along = (unsigned long)f;
8281         if (along != 0x7fffffff)
8282                 result |= 1;
8283         f += 2.;
8284         along = 0;
8285         along = (unsigned long)f;
8286         if (along != 0x80000001)
8287                 result |= 2;
8288         if (result)
8289                 exit(result);
8290         signal(SIGFPE, blech_in_list);
8291         sprintf(str, "123.");
8292         sscanf(str, "%lf", &f);  /* f = 123.; */
8293         along = dummy_long((unsigned long)f);
8294         aint = dummy_int((unsigned int)f);
8295         ashort = dummy_short((unsigned short)f);
8296         if (along != (unsigned long)123)
8297                 result |= 4;
8298         if (aint != (unsigned int)123)
8299                 result |= 4;
8300         if (ashort != (unsigned short)123)
8301                 result |= 4;
8302         exit(result);
8303
8304 }
8305 EOCP
8306 set try
8307 if eval $compile_ok; then
8308         ./try
8309         castflags=$?
8310 else
8311         echo "(I can't seem to compile the test program--assuming it can't)"
8312         castflags=7
8313 fi
8314 case "$castflags" in
8315 0)      val="$define"
8316         echo "Yup, it can."
8317         ;;
8318 *)      val="$undef"
8319         echo "Nope, it can't."
8320         ;;
8321 esac
8322 set d_castneg
8323 eval $setvar
8324 $rm -f try.*
8325
8326 : see if vprintf exists
8327 echo " "
8328 if set vprintf val -f d_vprintf; eval $csym; $val; then
8329         echo 'vprintf() found.' >&4
8330         val="$define"
8331         $cat >vprintf.c <<'EOF'
8332 #include <varargs.h>
8333
8334 int main() { xxx("foo"); }
8335
8336 xxx(va_alist)
8337 va_dcl
8338 {
8339         va_list args;
8340         char buf[10];
8341
8342         va_start(args);
8343         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
8344 }
8345 EOF
8346         set vprintf
8347         if eval $compile && ./vprintf; then
8348                 echo "Your vsprintf() returns (int)." >&4
8349                 val2="$undef"
8350         else
8351                 echo "Your vsprintf() returns (char*)." >&4
8352                 val2="$define"
8353         fi
8354 else
8355         echo 'vprintf() NOT found.' >&4
8356                 val="$undef"
8357                 val2="$undef"
8358 fi
8359 set d_vprintf
8360 eval $setvar
8361 val=$val2
8362 set d_charvspr
8363 eval $setvar
8364
8365 : see if chown exists
8366 set chown d_chown
8367 eval $inlibc
8368
8369 : see if chroot exists
8370 set chroot d_chroot
8371 eval $inlibc
8372
8373 : see if chsize exists
8374 set chsize d_chsize
8375 eval $inlibc
8376
8377 : check for const keyword
8378 echo " "
8379 echo 'Checking to see if your C compiler knows about "const"...' >&4
8380 $cat >const.c <<'EOCP'
8381 typedef struct spug { int drokk; } spug;
8382 int main()
8383 {
8384         const char *foo;
8385         const spug y;
8386 }
8387 EOCP
8388 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
8389         val="$define"
8390         echo "Yup, it does."
8391 else
8392         val="$undef"
8393         echo "Nope, it doesn't."
8394 fi
8395 set d_const
8396 eval $setvar
8397
8398 : see if crypt exists
8399 echo " "
8400 if set crypt val -f d_crypt; eval $csym; $val; then
8401         echo 'crypt() found.' >&4
8402         val="$define"
8403         cryptlib=''
8404 else
8405         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
8406         if $test -z "$cryptlib"; then
8407                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
8408         else
8409                 cryptlib=-lcrypt
8410         fi
8411         if $test -z "$cryptlib"; then
8412                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
8413         else
8414                 cryptlib=-lcrypt
8415         fi
8416         if $test -z "$cryptlib"; then
8417                 cryptlib=`./loc libcrypt$_a "" $libpth`
8418         else
8419                 cryptlib=-lcrypt
8420         fi
8421         if $test -z "$cryptlib"; then
8422                 echo 'crypt() NOT found.' >&4
8423                 val="$undef"
8424         else
8425                 val="$define"
8426         fi
8427 fi
8428 set d_crypt
8429 eval $setvar
8430
8431 : get csh whereabouts
8432 case "$csh" in
8433 'csh') val="$undef" ;;
8434 *) val="$define" ;;
8435 esac
8436 set d_csh
8437 eval $setvar
8438 : Respect a hint or command line value for full_csh.
8439 case "$full_csh" in
8440 '') full_csh=$csh ;;
8441 esac
8442
8443 : see if cuserid exists
8444 set cuserid d_cuserid
8445 eval $inlibc
8446
8447 : see if this is a limits.h system
8448 set limits.h i_limits
8449 eval $inhdr
8450
8451 : see if this is a float.h system
8452 set float.h i_float
8453 eval $inhdr
8454
8455 : See if number of significant digits in a double precision number is known
8456 echo " "
8457 $cat >dbl_dig.c <<EOM
8458 #$i_limits I_LIMITS
8459 #$i_float I_FLOAT
8460 #ifdef I_LIMITS
8461 #include <limits.h>
8462 #endif
8463 #ifdef I_FLOAT
8464 #include <float.h>
8465 #endif
8466 #ifdef DBL_DIG
8467 printf("Contains DBL_DIG");
8468 #endif
8469 EOM
8470 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
8471 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
8472         echo "DBL_DIG found." >&4
8473         val="$define"
8474 else
8475         echo "DBL_DIG NOT found." >&4
8476         val="$undef"
8477 fi
8478 $rm -f dbl_dig.?
8479 set d_dbl_dig
8480 eval $setvar
8481
8482 : see if difftime exists
8483 set difftime d_difftime
8484 eval $inlibc
8485
8486 : see if this is a dirent system
8487 echo " "
8488 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
8489         val="$define"
8490         echo "<dirent.h> found." >&4
8491 else
8492         val="$undef"
8493         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
8494                 echo "<sys/dir.h> found." >&4
8495                 echo " "
8496         else
8497                 xinc=`./findhdr sys/ndir.h`
8498         fi
8499         echo "<dirent.h> NOT found." >&4
8500 fi
8501 set i_dirent
8502 eval $setvar
8503
8504 : Look for type of directory structure.
8505 echo " "
8506 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8507
8508 case "$direntrytype" in
8509 ''|' ')
8510         case "$i_dirent" in
8511         $define) guess1='struct dirent' ;;
8512         *) guess1='struct direct'  ;;
8513         esac
8514         ;;
8515 *)      guess1="$direntrytype"
8516         ;;
8517 esac
8518
8519 case "$guess1" in
8520 'struct dirent') guess2='struct direct' ;;
8521 *) guess2='struct dirent' ;;
8522 esac
8523                 
8524 if $contains "$guess1" try.c >/dev/null 2>&1; then
8525         direntrytype="$guess1"
8526         echo "Your directory entries are $direntrytype." >&4
8527 elif $contains "$guess2" try.c >/dev/null 2>&1; then
8528         direntrytype="$guess2"
8529         echo "Your directory entries seem to be $direntrytype." >&4
8530 else
8531         echo "I don't recognize your system's directory entries." >&4
8532         rp="What type is used for directory entries on this system?"
8533         dflt="$guess1"
8534         . ./myread
8535         direntrytype="$ans"
8536 fi
8537 $rm -f try.c
8538
8539
8540 : see if the directory entry stores field length
8541 echo " "
8542 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8543 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
8544         echo "Good, your directory entry keeps length information in d_namlen." >&4
8545         val="$define"
8546 else
8547         echo "Your directory entry does not know about the d_namlen field." >&4
8548         val="$undef"
8549 fi
8550 set d_dirnamlen
8551 eval $setvar
8552 $rm -f try.c
8553
8554 : see if dlerror exists
8555 xxx_runnm="$runnm"
8556 runnm=false
8557 set dlerror d_dlerror
8558 eval $inlibc
8559 runnm="$xxx_runnm"
8560
8561 : see if dlfcn is available
8562 set dlfcn.h i_dlfcn
8563 eval $inhdr
8564
8565 case "$usedl" in
8566 $define|y|true)
8567         $cat << EOM
8568
8569 On a few systems, the dynamically loaded modules that perl generates and uses
8570 will need a different extension than shared libs. The default will probably
8571 be appropriate.
8572
8573 EOM
8574         case "$dlext" in
8575         '')     dflt="$so" ;;
8576         *)      dflt="$dlext" ;;
8577         esac
8578         rp='What is the extension of dynamically loaded modules'
8579         . ./myread
8580         dlext="$ans"
8581         ;;
8582 *)
8583         dlext="none"
8584         ;;
8585 esac
8586
8587 : Check if dlsym need a leading underscore
8588 echo " "
8589 val="$undef"
8590
8591 case "$dlsrc" in
8592 dl_dlopen.xs)
8593         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
8594         $cat >dyna.c <<'EOM'
8595 fred () { }
8596 EOM
8597
8598 $cat >fred.c<<EOM
8599
8600 #include <stdio.h>
8601 #$i_dlfcn I_DLFCN
8602 #ifdef I_DLFCN
8603 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
8604 #else
8605 #include <sys/types.h>
8606 #include <nlist.h>
8607 #include <link.h>
8608 #endif
8609
8610 extern int fred() ;
8611
8612 int main()
8613 {
8614     void * handle ;
8615     void * symbol ;
8616 #ifndef RTLD_LAZY
8617     int mode = 1 ;
8618 #else
8619     int mode = RTLD_LAZY ;
8620 #endif
8621     handle = dlopen("./dyna.$dlext", mode) ;
8622     if (handle == NULL) {
8623         printf ("1\n") ;
8624         fflush (stdout) ;
8625         exit(0);
8626     }
8627     symbol = dlsym(handle, "fred") ;
8628     if (symbol == NULL) {
8629         /* try putting a leading underscore */
8630         symbol = dlsym(handle, "_fred") ;
8631         if (symbol == NULL) {
8632             printf ("2\n") ;
8633             fflush (stdout) ;
8634             exit(0);
8635         }
8636         printf ("3\n") ;
8637     }
8638     else
8639         printf ("4\n") ;
8640     fflush (stdout) ;
8641     exit(0);
8642 }
8643 EOM
8644         : Call the object file tmp-dyna.o in case dlext=o.
8645         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
8646                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
8647                 $ld -o dyna.$dlext $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && 
8648                 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
8649                 xxx=`./fred`
8650                 case $xxx in
8651                 1)      echo "Test program failed using dlopen." >&4
8652                         echo "Perhaps you should not use dynamic loading." >&4;;
8653                 2)      echo "Test program failed using dlsym." >&4
8654                         echo "Perhaps you should not use dynamic loading." >&4;;
8655                 3)      echo "dlsym needs a leading underscore" >&4
8656                         val="$define" ;;
8657                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
8658                 esac
8659         else
8660                 echo "I can't compile and run the test program." >&4
8661                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
8662         fi
8663         ;;
8664 esac
8665                 
8666 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
8667
8668 set d_dlsymun
8669 eval $setvar
8670
8671 hasproto='varname=$1; func=$2; shift; shift;
8672 while $test $# -ge 2; do
8673         case "$1" in
8674         $define) echo "#include <$2>";;
8675         esac ;
8676     shift 2;
8677 done > try.c;
8678 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
8679 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
8680         echo "$func() prototype found.";
8681         val="$define";
8682 else
8683         echo "$func() prototype NOT found.";
8684         val="$undef";
8685 fi;
8686 set $varname;
8687 eval $setvar;
8688 $rm -f try.c tryout.c'
8689
8690 : see if prototype for drand48 is available
8691 echo " "
8692 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
8693 eval $hasproto
8694
8695 : see if dup2 exists
8696 set dup2 d_dup2
8697 eval $inlibc
8698
8699 : see if eaccess exists
8700 set eaccess d_eaccess
8701 eval $inlibc
8702
8703 : see if endgrent exists
8704 set endgrent d_endgrent
8705 eval $inlibc
8706
8707 : see if endhostent exists
8708 set endhostent d_endhent
8709 eval $inlibc
8710
8711 : see if endnetent exists
8712 set endnetent d_endnent
8713 eval $inlibc
8714
8715 : see if endprotoent exists
8716 set endprotoent d_endpent
8717 eval $inlibc
8718
8719 : see if endpwent exists
8720 set endpwent d_endpwent
8721 eval $inlibc
8722
8723 : see if endservent exists
8724 set endservent d_endsent
8725 eval $inlibc
8726
8727 : Locate the flags for 'open()'
8728 echo " "
8729 $cat >open3.c <<'EOCP'
8730 #include <sys/types.h>
8731 #ifdef I_FCNTL
8732 #include <fcntl.h>
8733 #endif
8734 #ifdef I_SYS_FILE
8735 #include <sys/file.h>
8736 #endif
8737 int main() {
8738         if(O_RDONLY);
8739 #ifdef O_TRUNC
8740         exit(0);
8741 #else
8742         exit(1);
8743 #endif
8744 }
8745 EOCP
8746 : check sys/file.h first to get FREAD on Sun
8747 if $test `./findhdr sys/file.h` && \
8748                 set open3 -DI_SYS_FILE && eval $compile; then
8749         h_sysfile=true;
8750         echo "<sys/file.h> defines the O_* constants..." >&4
8751         if ./open3; then
8752                 echo "and you have the 3 argument form of open()." >&4
8753                 val="$define"
8754         else
8755                 echo "but not the 3 argument form of open().  Oh, well." >&4
8756                 val="$undef"
8757         fi
8758 elif $test `./findhdr fcntl.h` && \
8759                 set open3 -DI_FCNTL && eval $compile; then
8760         h_fcntl=true;
8761         echo "<fcntl.h> defines the O_* constants..." >&4
8762         if ./open3; then
8763                 echo "and you have the 3 argument form of open()." >&4
8764                 val="$define"
8765         else
8766                 echo "but not the 3 argument form of open().  Oh, well." >&4
8767                 val="$undef"
8768         fi
8769 else
8770         val="$undef"
8771         echo "I can't find the O_* constant definitions!  You got problems." >&4
8772 fi
8773 set d_open3
8774 eval $setvar
8775 $rm -f open3*
8776
8777 : see which of string.h or strings.h is needed
8778 echo " "
8779 strings=`./findhdr string.h`
8780 if $test "$strings" && $test -r "$strings"; then
8781         echo "Using <string.h> instead of <strings.h>." >&4
8782         val="$define"
8783 else
8784         val="$undef"
8785         strings=`./findhdr strings.h`
8786         if $test "$strings" && $test -r "$strings"; then
8787                 echo "Using <strings.h> instead of <string.h>." >&4
8788         else
8789                 echo "No string header found -- You'll surely have problems." >&4
8790         fi
8791 fi
8792 set i_string
8793 eval $setvar
8794 case "$i_string" in
8795 "$undef") strings=`./findhdr strings.h`;;
8796 *)        strings=`./findhdr string.h`;;
8797 esac
8798
8799 : check for non-blocking I/O stuff
8800 case "$h_sysfile" in
8801 true) echo "#include <sys/file.h>" > head.c;;
8802 *)
8803         case "$h_fcntl" in
8804         true) echo "#include <fcntl.h>" > head.c;;
8805         *) echo "#include <sys/fcntl.h>" > head.c;;
8806         esac
8807         ;;
8808 esac
8809 echo " "
8810 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
8811 case "$o_nonblock" in
8812 '')
8813         $cat head.c > try.c
8814         $cat >>try.c <<'EOCP'
8815 #include <stdio.h>
8816 int main() {
8817 #ifdef O_NONBLOCK
8818         printf("O_NONBLOCK\n");
8819         exit(0);
8820 #endif
8821 #ifdef O_NDELAY
8822         printf("O_NDELAY\n");
8823         exit(0);
8824 #endif
8825 #ifdef FNDELAY
8826         printf("FNDELAY\n");
8827         exit(0);
8828 #endif
8829         exit(0);
8830 }
8831 EOCP
8832         set try
8833         if eval $compile_ok; then
8834                 o_nonblock=`./try`
8835                 case "$o_nonblock" in
8836                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
8837                 *) echo "Seems like we can use $o_nonblock.";;
8838                 esac
8839         else
8840                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
8841         fi
8842         ;;
8843 *) echo "Using $hint value $o_nonblock.";;
8844 esac
8845 $rm -f try try.* .out core
8846
8847 echo " "
8848 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
8849 case "$eagain" in
8850 '')
8851         $cat head.c > try.c
8852         $cat >>try.c <<EOCP
8853 #include <errno.h>
8854 #include <sys/types.h>
8855 #include <signal.h>
8856 #include <stdio.h> 
8857 #define MY_O_NONBLOCK $o_nonblock
8858 #ifndef errno  /* XXX need better Configure test */
8859 extern int errno;
8860 #endif
8861 #$i_unistd I_UNISTD
8862 #ifdef I_UNISTD
8863 #include <unistd.h>
8864 #endif
8865 #$i_string I_STRING
8866 #ifdef I_STRING
8867 #include <string.h>
8868 #else
8869 #include <strings.h>
8870 #endif
8871 $signal_t blech(x) int x; { exit(3); }
8872 EOCP
8873         $cat >> try.c <<'EOCP'
8874 int main()
8875 {
8876         int pd[2];
8877         int pu[2];
8878         char buf[1];
8879         char string[100];
8880
8881         pipe(pd);       /* Down: child -> parent */
8882         pipe(pu);       /* Up: parent -> child */
8883         if (0 != fork()) {
8884                 int ret;
8885                 close(pd[1]);   /* Parent reads from pd[0] */
8886                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
8887                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
8888                         exit(1);
8889                 signal(SIGALRM, blech);
8890                 alarm(5);
8891                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
8892                         exit(2);
8893                 sprintf(string, "%d\n", ret);
8894                 write(2, string, strlen(string));
8895                 alarm(0);
8896 #ifdef EAGAIN
8897                 if (errno == EAGAIN) {
8898                         printf("EAGAIN\n");
8899                         goto ok;
8900                 }
8901 #endif
8902 #ifdef EWOULDBLOCK
8903                 if (errno == EWOULDBLOCK)
8904                         printf("EWOULDBLOCK\n");
8905 #endif
8906         ok:
8907                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
8908                 sleep(2);                               /* Give it time to close our pipe */
8909                 alarm(5);
8910                 ret = read(pd[0], buf, 1);      /* Should read EOF */
8911                 alarm(0);
8912                 sprintf(string, "%d\n", ret);
8913                 write(3, string, strlen(string));
8914                 exit(0);
8915         }
8916
8917         close(pd[0]);                   /* We write to pd[1] */
8918         close(pu[1]);                   /* We read from pu[0] */
8919         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
8920         close(pd[1]);                   /* Pipe pd is now fully closed! */
8921         exit(0);                                /* Bye bye, thank you for playing! */
8922 }
8923 EOCP
8924         set try
8925         if eval $compile_ok; then
8926                 echo "$startsh" >mtry
8927                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
8928                 chmod +x mtry
8929                 ./mtry >/dev/null 2>&1
8930                 case $? in
8931                 0) eagain=`$cat try.out`;;
8932                 1) echo "Could not perform non-blocking setting!";;
8933                 2) echo "I did a successful read() for something that was not there!";;
8934                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
8935                 *) echo "Something terribly wrong happened during testing.";;
8936                 esac
8937                 rd_nodata=`$cat try.ret`
8938                 echo "A read() system call with no data present returns $rd_nodata."
8939                 case "$rd_nodata" in
8940                 0|-1) ;;
8941                 *)
8942                         echo "(That's peculiar, fixing that to be -1.)"
8943                         rd_nodata=-1
8944                         ;;
8945                 esac
8946                 case "$eagain" in
8947                 '')
8948                         echo "Forcing errno EAGAIN on read() with no data available."
8949                         eagain=EAGAIN
8950                         ;;
8951                 *)
8952                         echo "Your read() sets errno to $eagain when no data is available."
8953                         ;;
8954                 esac
8955                 status=`$cat try.err`
8956                 case "$status" in
8957                 0) echo "And it correctly returns 0 to signal EOF.";;
8958                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
8959                 *) echo "However, your read() returns '$status' on EOF??";;
8960                 esac
8961                 val="$define"
8962                 if test "$status" = "$rd_nodata"; then
8963                         echo "WARNING: you can't distinguish between EOF and no data!"
8964                         val="$undef"
8965                 fi
8966         else
8967                 echo "I can't compile the test program--assuming errno EAGAIN will do."
8968                 eagain=EAGAIN
8969         fi
8970         set d_eofnblk
8971         eval $setvar
8972         ;;
8973 *)
8974         echo "Using $hint value $eagain."
8975         echo "Your read() returns $rd_nodata when no data is present."
8976         case "$d_eofnblk" in
8977         "$define") echo "And you can see EOF because read() returns 0.";;
8978         "$undef") echo "But you can't see EOF status from read() returned value.";;
8979         *)
8980                 echo "(Assuming you can't see EOF status from read anyway.)"
8981                 d_eofnblk=$undef
8982                 ;;
8983         esac
8984         ;;
8985 esac
8986 $rm -f try try.* .out core head.c mtry
8987
8988 : see if fchmod exists
8989 set fchmod d_fchmod
8990 eval $inlibc
8991
8992 : see if fchown exists
8993 set fchown d_fchown
8994 eval $inlibc
8995
8996 : see if this is an fcntl system
8997 set fcntl d_fcntl
8998 eval $inlibc
8999
9000 echo " "
9001 : See if fcntl-based locking works.
9002 $cat >try.c <<'EOCP'
9003 #include <stdlib.h>
9004 #include <unistd.h>
9005 #include <fcntl.h>
9006 int main() {
9007 #if defined(F_SETLK) && defined(F_SETLKW)
9008      struct flock flock;
9009      int retval, fd;
9010      fd = open("try.c", O_RDONLY);
9011      flock.l_type = F_RDLCK;
9012      flock.l_whence = SEEK_SET;
9013      flock.l_start = flock.l_len = 0;
9014      retval = fcntl(fd, F_SETLK, &flock);
9015      close(fd);
9016      (retval < 0 ? exit(2) : exit(0));
9017 #else
9018      exit(2);
9019 #endif
9020 }
9021 EOCP
9022 echo "Checking if fcntl-based file locking works... "
9023 case "$d_fcntl" in
9024 "$define")
9025         set try
9026         if eval $compile_ok; then
9027                 if ./try; then
9028                         echo "Yes, it seems to work."
9029                         val="$define"
9030                 else
9031                         echo "Nope, it didn't work."
9032                         val="$undef"
9033                 fi
9034         else
9035                 echo "I'm unable to compile the test program, so I'll assume not."
9036                 val="$undef"
9037         fi
9038         ;;
9039 *) val="$undef";
9040         echo "Nope, since you don't even have fcntl()."
9041         ;;
9042 esac
9043 set d_fcntl_can_lock
9044 eval $setvar
9045 $rm -f try*
9046
9047
9048 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
9049 while $test $# -ge 2; do
9050         case "$1" in
9051         $define) echo "#include <$2>";;
9052         esac ;
9053     shift 2;
9054 done > try.c;
9055 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
9056 set try;
9057 if eval $compile; then
9058         val="$define";
9059 else
9060         val="$undef";
9061 fi;
9062 set $varname;
9063 eval $setvar;
9064 $rm -f try.c try.o'
9065
9066 socketlib=''
9067 sockethdr=''
9068 : see whether socket exists
9069 echo " "
9070 $echo $n "Hmm... $c" >&4
9071 if set socket val -f d_socket; eval $csym; $val; then
9072         echo "Looks like you have Berkeley networking support." >&4
9073         d_socket="$define"
9074         if set setsockopt val -f; eval $csym; $val; then
9075                 d_oldsock="$undef"
9076         else
9077                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
9078                 d_oldsock="$define"
9079         fi
9080 else
9081         if $contains socklib libc.list >/dev/null 2>&1; then
9082                 echo "Looks like you have Berkeley networking support." >&4
9083                 d_socket="$define"
9084                 : we will have to assume that it supports the 4.2 BSD interface
9085                 d_oldsock="$undef"
9086         else
9087                 echo "You don't have Berkeley networking in libc$_a..." >&4
9088                 if test "X$d_socket" = "X$define"; then
9089                    echo "...but you seem to believe that you have sockets." >&4
9090                 else
9091                         for net in net socket
9092                         do
9093                                 if test -f /usr/lib/lib$net$_a; then
9094                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
9095                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
9096                                         if $contains socket libc.list >/dev/null 2>&1; then
9097                                                 d_socket="$define"
9098                                                 socketlib="-l$net"
9099                                                 case "$net" in
9100                                                 net)
9101                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
9102                                                         sockethdr="-I/usr/netinclude"
9103                                                         ;;
9104                                                 esac
9105                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
9106                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
9107                                                         d_oldsock="$undef"
9108                                                 else
9109                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
9110                                                         d_oldsock="$define"
9111                                                 fi
9112                                                 break
9113                                         fi
9114                                 fi
9115                         done
9116                         if test "X$d_socket" != "X$define"; then
9117                            echo "or anywhere else I see." >&4
9118                            d_socket="$undef"
9119                            d_oldsock="$undef"
9120                         fi
9121                 fi
9122         fi
9123 fi
9124
9125 : see if socketpair exists
9126 set socketpair d_sockpair
9127 eval $inlibc
9128
9129
9130 echo " "
9131 echo "Checking the availability of certain socket constants..." >& 4
9132 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
9133         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
9134         $cat >try.c <<EOF
9135 #include <sys/types.h>
9136 #include <sys/socket.h>
9137 int main() {
9138     int i = $ENUM;
9139 }
9140 EOF
9141         val="$undef"
9142         set try; if eval $compile; then
9143                 val="$define"
9144         fi
9145         set d_${enum}; eval $setvar
9146         $rm -f try.c try
9147 done
9148
9149 : see if sys/select.h has to be included
9150 set sys/select.h i_sysselct
9151 eval $inhdr
9152
9153 : see if we should include time.h, sys/time.h, or both
9154 echo " "
9155 if test "X$timeincl" = X; then
9156         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
9157         $echo $n "I'm now running the test program...$c"
9158         $cat >try.c <<'EOCP'
9159 #include <sys/types.h>
9160 #ifdef I_TIME
9161 #include <time.h>
9162 #endif
9163 #ifdef I_SYSTIME
9164 #ifdef SYSTIMEKERNEL
9165 #define KERNEL
9166 #endif
9167 #include <sys/time.h>
9168 #endif
9169 #ifdef I_SYSSELECT
9170 #include <sys/select.h>
9171 #endif
9172 int main()
9173 {
9174         struct tm foo;
9175 #ifdef S_TIMEVAL
9176         struct timeval bar;
9177 #endif
9178 #ifdef S_TIMEZONE
9179         struct timezone tzp;
9180 #endif
9181         if (foo.tm_sec == foo.tm_sec)
9182                 exit(0);
9183 #ifdef S_TIMEVAL
9184         if (bar.tv_sec == bar.tv_sec)
9185                 exit(0);
9186 #endif
9187         exit(1);
9188 }
9189 EOCP
9190         flags=''
9191         for s_timezone in '-DS_TIMEZONE' ''; do
9192         sysselect=''
9193         for s_timeval in '-DS_TIMEVAL' ''; do
9194         for i_systimek in '' '-DSYSTIMEKERNEL'; do
9195         for i_time in '' '-DI_TIME'; do
9196         for i_systime in '-DI_SYSTIME' ''; do
9197                 case "$flags" in
9198                 '') $echo $n ".$c"
9199                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
9200                         if eval $compile; then
9201                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
9202                                 shift
9203                                 flags="$*"
9204                                 echo " "
9205                                 $echo $n "Succeeded with $flags$c"
9206                         fi
9207                         ;;
9208                 esac
9209         done
9210         done
9211         done
9212         done
9213         done
9214         timeincl=''
9215         echo " "
9216         case "$flags" in
9217         *SYSTIMEKERNEL*) i_systimek="$define"
9218                 timeincl=`./findhdr sys/time.h`
9219                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
9220         *) i_systimek="$undef";;
9221         esac
9222         case "$flags" in
9223         *I_TIME*) i_time="$define"
9224                 timeincl=`./findhdr time.h`" $timeincl"
9225                 echo "We'll include <time.h>." >&4;;
9226         *) i_time="$undef";;
9227         esac
9228         case "$flags" in
9229         *I_SYSTIME*) i_systime="$define"
9230                 timeincl=`./findhdr sys/time.h`" $timeincl"
9231                 echo "We'll include <sys/time.h>." >&4;;
9232         *) i_systime="$undef";;
9233         esac
9234         $rm -f try.c try
9235 fi
9236
9237 : check for fd_set items
9238 $cat <<EOM
9239
9240 Checking to see how well your C compiler handles fd_set and friends ...
9241 EOM
9242 $cat >fd_set.c <<EOCP
9243 #$i_systime I_SYS_TIME
9244 #$i_sysselct I_SYS_SELECT
9245 #$d_socket HAS_SOCKET
9246 #include <sys/types.h>
9247 #ifdef HAS_SOCKET
9248 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
9249 #endif
9250 #ifdef I_SYS_TIME
9251 #include <sys/time.h>
9252 #endif
9253 #ifdef I_SYS_SELECT
9254 #include <sys/select.h>
9255 #endif
9256 int main() {
9257         fd_set fds;
9258
9259 #ifdef TRYBITS
9260         if(fds.fds_bits);
9261 #endif
9262
9263 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
9264         exit(0);
9265 #else
9266         exit(1);
9267 #endif
9268 }
9269 EOCP
9270 set fd_set -DTRYBITS
9271 if eval $compile; then
9272         d_fds_bits="$define"
9273         d_fd_set="$define"
9274         echo "Well, your system knows about the normal fd_set typedef..." >&4
9275         if ./fd_set; then
9276                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
9277                 d_fd_macros="$define"
9278         else
9279                 $cat >&4 <<'EOM'
9280 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
9281 EOM
9282                 d_fd_macros="$undef"
9283         fi
9284 else
9285         $cat <<'EOM'
9286 Hmm, your compiler has some difficulty with fd_set.  Checking further...
9287 EOM
9288         set fd_set
9289         if eval $compile; then
9290                 d_fds_bits="$undef"
9291                 d_fd_set="$define"
9292                 echo "Well, your system has some sort of fd_set available..." >&4
9293                 if ./fd_set; then
9294                         echo "and you have the normal fd_set macros." >&4
9295                         d_fd_macros="$define"
9296                 else
9297                         $cat <<'EOM'
9298 but not the normal fd_set macros!  Gross!  More work for me...
9299 EOM
9300                         d_fd_macros="$undef"
9301                 fi
9302         else
9303         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
9304                 d_fd_set="$undef"
9305                 d_fds_bits="$undef"
9306                 d_fd_macros="$undef"
9307         fi
9308 fi
9309 $rm -f fd_set*
9310
9311 : see if fgetpos exists
9312 set fgetpos d_fgetpos
9313 eval $inlibc
9314
9315 : see if flock exists
9316 set flock d_flock
9317 eval $inlibc
9318
9319 : see if fork exists
9320 set fork d_fork
9321 eval $inlibc
9322
9323 : see if pathconf exists
9324 set pathconf d_pathconf
9325 eval $inlibc
9326
9327 : see if fpathconf exists
9328 set fpathconf d_fpathconf
9329 eval $inlibc
9330
9331
9332 : check for fpos64_t
9333 echo " "
9334 echo "Checking to see if you have fpos64_t..." >&4
9335 $cat >try.c <<EOCP
9336 #include <stdio.h>
9337 int main() { fpos64_t x = 7; }
9338 EOCP
9339 set try
9340 if eval $compile; then
9341         val="$define"
9342         echo "You have fpos64_t."
9343 else
9344         val="$undef"
9345         echo "You do not have fpos64_t."
9346         case "$fpossize" in
9347         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
9348         esac
9349 fi
9350 $rm -f try.* try
9351 set d_fpos64_t
9352 eval $setvar
9353
9354 : see if frexpl exists
9355 set frexpl d_frexpl
9356 eval $inlibc
9357
9358 hasstruct='varname=$1; struct=$2; shift; shift;
9359 while $test $# -ge 2; do
9360         case "$1" in
9361         $define) echo "#include <$2>";;
9362         esac ;
9363     shift 2;
9364 done > try.c;
9365 echo "int main () { struct $struct foo; }" >> try.c;
9366 set try;
9367 if eval $compile; then
9368         val="$define";
9369 else
9370         val="$undef";
9371 fi;
9372 set $varname;
9373 eval $setvar;
9374 $rm -f try.c try.o'
9375
9376 : see if this is a sys/param system
9377 set sys/param.h i_sysparam
9378 eval $inhdr
9379
9380 : see if this is a sys/mount.h system
9381 set sys/mount.h i_sysmount
9382 eval $inhdr
9383
9384 : see if sys/types.h has to be included
9385 set sys/types.h i_systypes
9386 eval $inhdr
9387
9388
9389 echo " "
9390 echo "Checking to see if your system supports struct fs_data..." >&4
9391 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
9392 eval $hasstruct
9393 case "$d_fs_data_s" in
9394 "$define")      echo "Yes, it does."   ;;
9395 *)              echo "No, it doesn't." ;;
9396 esac
9397
9398 : see if fseeko exists
9399 set fseeko d_fseeko
9400 eval $inlibc
9401 case "$longsize" in
9402 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
9403 esac
9404
9405 : see if fsetpos exists
9406 set fsetpos d_fsetpos
9407 eval $inlibc
9408
9409
9410 : see if fstatfs exists
9411 set fstatfs d_fstatfs
9412 eval $inlibc
9413
9414
9415 : see if statvfs exists
9416 set statvfs d_statvfs
9417 eval $inlibc
9418
9419 : see if fstatvfs exists
9420 set fstatvfs d_fstatvfs
9421 eval $inlibc
9422
9423
9424 : see if fsync exists
9425 set fsync d_fsync
9426 eval $inlibc
9427
9428 : see if ftello exists
9429 set ftello d_ftello
9430 eval $inlibc
9431 case "$longsize" in
9432 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
9433 esac
9434
9435 : see if getcwd exists
9436 set getcwd d_getcwd
9437 eval $inlibc
9438
9439 : see if getespwnam exists
9440 set getespwnam d_getespwnam
9441 eval $inlibc
9442
9443
9444 : see if getfsstat exists
9445 set getfsstat d_getfsstat
9446 eval $inlibc
9447
9448 : see if getgrent exists
9449 set getgrent d_getgrent
9450 eval $inlibc
9451
9452 : see if gethostbyaddr exists
9453 set gethostbyaddr d_gethbyaddr
9454 eval $inlibc
9455
9456 : see if gethostbyname exists
9457 set gethostbyname d_gethbyname
9458 eval $inlibc
9459
9460 : see if gethostent exists
9461 set gethostent d_gethent
9462 eval $inlibc
9463
9464 : see how we will look up host name
9465 echo " "
9466 call=''
9467 if set gethostname val -f d_gethname; eval $csym; $val; then
9468         echo 'gethostname() found.' >&4
9469         d_gethname="$define"
9470         call=gethostname
9471 fi
9472 if set uname val -f d_uname; eval $csym; $val; then
9473         if ./xenix; then
9474                 $cat <<'EOM'
9475 uname() was found, but you're running xenix, and older versions of xenix
9476 have a broken uname(). If you don't really know whether your xenix is old
9477 enough to have a broken system call, use the default answer.
9478
9479 EOM
9480                 dflt=y
9481                 case "$d_uname" in
9482                 "$define") dflt=n;;
9483                 esac
9484                 rp='Is your uname() broken?'
9485                 . ./myread
9486                 case "$ans" in
9487                 n*) d_uname="$define"; call=uname;;
9488                 esac
9489         else
9490                 echo 'uname() found.' >&4
9491                 d_uname="$define"
9492                 case "$call" in
9493                 '') call=uname ;;
9494                 esac
9495         fi
9496 fi
9497 case "$d_gethname" in
9498 '') d_gethname="$undef";;
9499 esac
9500 case "$d_uname" in
9501 '') d_uname="$undef";;
9502 esac
9503 case "$d_uname$d_gethname" in
9504 *define*)
9505         dflt=n
9506         cat <<EOM
9507  
9508 Every now and then someone has a $call() that lies about the hostname
9509 but can't be fixed for political or economic reasons.  If you wish, I can
9510 pretend $call() isn't there and maybe compute hostname at run-time
9511 thanks to the '$phostname' command.
9512
9513 EOM
9514         rp="Shall I ignore $call() from now on?"
9515         . ./myread
9516         case "$ans" in
9517         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
9518         esac;;
9519 esac
9520 case "$phostname" in
9521 '') aphostname='';;
9522 *) case "$aphostname" in
9523         /*) ;;
9524         *) set X $phostname
9525                 shift
9526                 file=$1
9527                 shift
9528                 file=`./loc $file $file $pth`
9529                 aphostname=`echo $file $*`
9530                 ;;
9531         esac
9532         ;;
9533 esac
9534 case "$d_uname$d_gethname" in
9535 *define*) ;;
9536 *)
9537         case "$phostname" in
9538         '')
9539                 echo "There will be no way for $package to get your hostname." >&4;;
9540         *)
9541         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
9542                 ;;
9543         esac;;
9544 esac
9545 case "$d_phostname" in
9546 '') d_phostname="$undef";;
9547 esac
9548
9549 : see if this is a netdb.h system
9550 set netdb.h i_netdb
9551 eval $inhdr
9552
9553 : see if prototypes for various gethostxxx netdb.h functions are available
9554 echo " "
9555 set d_gethostprotos gethostent $i_netdb netdb.h
9556 eval $hasproto
9557
9558 : see if getlogin exists
9559 set getlogin d_getlogin
9560 eval $inlibc
9561
9562 : see if getmnt exists
9563 set getmnt d_getmnt
9564 eval $inlibc
9565
9566 : see if getmntent exists
9567 set getmntent d_getmntent
9568 eval $inlibc
9569
9570 : see if getnetbyaddr exists
9571 set getnetbyaddr d_getnbyaddr
9572 eval $inlibc
9573
9574 : see if getnetbyname exists
9575 set getnetbyname d_getnbyname
9576 eval $inlibc
9577
9578 : see if getnetent exists
9579 set getnetent d_getnent
9580 eval $inlibc
9581
9582 : see if prototypes for various getnetxxx netdb.h functions are available
9583 echo " "
9584 set d_getnetprotos getnetent $i_netdb netdb.h
9585 eval $hasproto
9586
9587 : see if getpagesize exists
9588 set getpagesize d_getpagsz
9589 eval $inlibc
9590
9591
9592 : see if getprotobyname exists
9593 set getprotobyname d_getpbyname
9594 eval $inlibc
9595
9596 : see if getprotobynumber exists
9597 set getprotobynumber d_getpbynumber
9598 eval $inlibc
9599
9600 : see if getprotoent exists
9601 set getprotoent d_getpent
9602 eval $inlibc
9603
9604 : see if getpgid exists
9605 set getpgid d_getpgid
9606 eval $inlibc
9607
9608 : see if getpgrp2 exists
9609 set getpgrp2 d_getpgrp2
9610 eval $inlibc
9611
9612 : see if getppid exists
9613 set getppid d_getppid
9614 eval $inlibc
9615
9616 : see if getpriority exists
9617 set getpriority d_getprior
9618 eval $inlibc
9619
9620 : see if prototypes for various getprotoxxx netdb.h functions are available
9621 echo " "
9622 set d_getprotoprotos getprotoent $i_netdb netdb.h
9623 eval $hasproto
9624
9625 : see if getprpwnam exists
9626 set getprpwnam d_getprpwnam
9627 eval $inlibc
9628
9629 : see if getpwent exists
9630 set getpwent d_getpwent
9631 eval $inlibc
9632
9633
9634 : see if getservbyname exists
9635 set getservbyname d_getsbyname
9636 eval $inlibc
9637
9638 : see if getservbyport exists
9639 set getservbyport d_getsbyport
9640 eval $inlibc
9641
9642 : see if getservent exists
9643 set getservent d_getsent
9644 eval $inlibc
9645
9646 : see if prototypes for various getservxxx netdb.h functions are available
9647 echo " "
9648 set d_getservprotos getservent $i_netdb netdb.h
9649 eval $hasproto
9650
9651 : see if getspnam exists
9652 set getspnam d_getspnam
9653 eval $inlibc
9654
9655 : see if gettimeofday or ftime exists
9656 set gettimeofday d_gettimeod
9657 eval $inlibc
9658 case "$d_gettimeod" in
9659 "$undef")
9660         set ftime d_ftime 
9661         eval $inlibc
9662         ;;
9663 *)
9664         val="$undef"; set d_ftime; eval $setvar
9665         ;;
9666 esac
9667 case "$d_gettimeod$d_ftime" in
9668 "$undef$undef")
9669         echo " "
9670         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
9671         ;;
9672 esac
9673
9674 : see if this is an grp system
9675 set grp.h i_grp
9676 eval $inhdr
9677
9678 case "$i_grp" in
9679 $define)
9680         xxx=`./findhdr grp.h`
9681         $cppstdin $cppflags $cppminus < $xxx >$$.h
9682
9683         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
9684                 val="$define"
9685         else
9686                 val="$undef"
9687         fi
9688         set d_grpasswd
9689         eval $setvar
9690
9691         $rm -f $$.h
9692         ;;
9693 *)
9694         val="$undef";
9695         set d_grpasswd; eval $setvar
9696         ;;
9697 esac
9698
9699 : see if hasmntopt exists
9700 set hasmntopt d_hasmntopt
9701 eval $inlibc
9702
9703 : see if this is a netinet/in.h or sys/in.h system
9704 set netinet/in.h i_niin sys/in.h i_sysin
9705 eval $inhdr
9706
9707 : see if arpa/inet.h has to be included
9708 set arpa/inet.h i_arpainet
9709 eval $inhdr
9710
9711 : see if htonl --and friends-- exists
9712 val=''
9713 set htonl val
9714 eval $inlibc
9715
9716 : Maybe they are macros.
9717 case "$val" in
9718 $undef)
9719         $cat >htonl.c <<EOM
9720 #include <stdio.h>
9721 #include <sys/types.h>
9722 #$i_niin I_NETINET_IN
9723 #$i_sysin I_SYS_IN
9724 #$i_arpainet I_ARPA_INET
9725 #ifdef I_NETINET_IN
9726 #include <netinet/in.h>
9727 #endif
9728 #ifdef I_SYS_IN
9729 #include <sys/in.h>
9730 #endif
9731 #ifdef I_ARPA_INET
9732 #include <arpa/inet.h>
9733 #endif
9734 #ifdef htonl
9735 printf("Defined as a macro.");
9736 #endif
9737 EOM
9738         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
9739         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
9740                 val="$define"
9741                 echo "But it seems to be defined as a macro." >&4
9742         fi
9743         $rm -f htonl.?
9744         ;;
9745 esac
9746 set d_htonl
9747 eval $setvar
9748
9749 : see if iconv exists
9750 set iconv d_iconv
9751 eval $inlibc
9752
9753 : index or strchr
9754 echo " "
9755 if set index val -f; eval $csym; $val; then
9756         if set strchr val -f d_strchr; eval $csym; $val; then
9757                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
9758                         val="$define"
9759                         vali="$undef"
9760                         echo "strchr() found." >&4
9761                 else
9762                         val="$undef"
9763                         vali="$define"
9764                         echo "index() found." >&4
9765                 fi
9766         else
9767                 val="$undef"
9768                 vali="$define"
9769                 echo "index() found." >&4
9770         fi
9771 else
9772         if set strchr val -f d_strchr; eval $csym; $val; then
9773                 val="$define"
9774                 vali="$undef"
9775                 echo "strchr() found." >&4
9776         else
9777                 echo "No index() or strchr() found!" >&4
9778                 val="$undef"
9779                 vali="$undef"
9780         fi
9781 fi
9782 set d_strchr; eval $setvar
9783 val="$vali"
9784 set d_index; eval $setvar
9785
9786 : check whether inet_aton exists
9787 set inet_aton d_inetaton
9788 eval $inlibc
9789
9790 : see if inttypes.h is available
9791 : we want a real compile instead of Inhdr because some systems
9792 : have an inttypes.h which includes non-existent headers
9793 echo " "
9794 $cat >try.c <<EOCP
9795 #include <inttypes.h>
9796 int main() {
9797         static int32_t foo32 = 0x12345678;
9798 }
9799 EOCP
9800 set try
9801 if eval $compile; then
9802         echo "<inttypes.h> found." >&4
9803         val="$define"
9804 else
9805         echo "<inttypes.h> NOT found." >&4
9806         val="$undef"
9807 fi
9808 $rm -f try.c try
9809 set i_inttypes
9810 eval $setvar
9811
9812 : check for int64_t
9813 echo " "
9814 echo "Checking to see if you have int64_t..." >&4
9815 $cat >try.c <<EOCP
9816 #include <sys/types.h>
9817 #$i_inttypes I_INTTYPES
9818 #ifdef I_INTTYPES
9819 #include <inttypes.h>
9820 #endif
9821 int main() { int64_t x = 7; }
9822 EOCP
9823 set try
9824 if eval $compile; then
9825         val="$define"
9826         echo "You have int64_t."
9827 else
9828         val="$undef"
9829         echo "You do not have int64_t."
9830 fi
9831 $rm -f try try.*
9832 set d_int64_t
9833 eval $setvar
9834
9835 : Look for isascii
9836 echo " "
9837 $cat >isascii.c <<'EOCP'
9838 #include <stdio.h>
9839 #include <ctype.h>
9840 int main() {
9841         int c = 'A';
9842         if (isascii(c))
9843                 exit(0);
9844         else
9845                 exit(1);
9846 }
9847 EOCP
9848 set isascii
9849 if eval $compile; then
9850         echo "isascii() found." >&4
9851         val="$define"
9852 else
9853         echo "isascii() NOT found." >&4
9854         val="$undef"
9855 fi
9856 set d_isascii
9857 eval $setvar
9858 $rm -f isascii*
9859
9860 : see if isnan exists
9861 set isnan d_isnan
9862 eval $inlibc
9863
9864 : see if isnanl exists
9865 set isnanl d_isnanl
9866 eval $inlibc
9867
9868 : see if killpg exists
9869 set killpg d_killpg
9870 eval $inlibc
9871
9872 : see if lchown exists
9873 echo " "
9874 $cat > try.c <<'EOCP'
9875 /* System header to define __stub macros and hopefully few prototypes,
9876     which can conflict with char lchown(); below.  */
9877 #include <assert.h>
9878 /* Override any gcc2 internal prototype to avoid an error.  */
9879 /* We use char because int might match the return type of a gcc2
9880    builtin and then its argument prototype would still apply.  */
9881 char lchown();
9882 int main() {
9883     /*  The GNU C library defines this for functions which it implements
9884         to always fail with ENOSYS.  Some functions are actually named
9885         something starting with __ and the normal name is an alias.  */
9886 #if defined (__stub_lchown) || defined (__stub___lchown)
9887 choke me
9888 #else
9889 lchown();
9890 #endif
9891 ; return 0; }
9892 EOCP
9893 set try
9894 if eval $compile; then
9895     $echo "lchown() found." >&4
9896     val="$define"
9897 else
9898     $echo "lchown() NOT found." >&4
9899     val="$undef"
9900 fi
9901 set d_lchown
9902 eval $setvar
9903
9904 : See if number of significant digits in a double precision number is known
9905 echo " "
9906 $cat >ldbl_dig.c <<EOM
9907 #$i_limits I_LIMITS
9908 #$i_float I_FLOAT
9909 #ifdef I_LIMITS
9910 #include <limits.h>
9911 #endif
9912 #ifdef I_FLOAT
9913 #include <float.h>
9914 #endif
9915 #ifdef LDBL_DIG
9916 printf("Contains LDBL_DIG");
9917 #endif
9918 EOM
9919 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
9920 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
9921         echo "LDBL_DIG found." >&4
9922         val="$define"
9923 else
9924         echo "LDBL_DIG NOT found." >&4
9925         val="$undef"
9926 fi
9927 $rm -f ldbl_dig.?
9928 set d_ldbl_dig
9929 eval $setvar
9930
9931 : see if link exists
9932 set link d_link
9933 eval $inlibc
9934
9935 : see if localeconv exists
9936 set localeconv d_locconv
9937 eval $inlibc
9938
9939 : see if lockf exists
9940 set lockf d_lockf
9941 eval $inlibc
9942
9943 : check for long long
9944 echo " "
9945 echo "Checking to see if you have long long..." >&4
9946 echo 'int main() { long long x = 7; return 0; }' > try.c
9947 set try
9948 if eval $compile; then
9949         val="$define"
9950         echo "You have long long."
9951 else
9952         val="$undef"
9953         echo "You do not have long long."
9954 fi
9955 $rm try.*
9956 set d_longlong
9957 eval $setvar
9958
9959 : check for length of long long
9960 case "${d_longlong}${longlongsize}" in
9961 $define)
9962         echo " "
9963         echo "Checking to see how big your long longs are..." >&4
9964         $cat >try.c <<'EOCP'
9965 #include <stdio.h>
9966 int main()
9967 {
9968     printf("%d\n", (int)sizeof(long long));
9969     return(0);
9970 }
9971 EOCP
9972         set try
9973         if eval $compile_ok; then
9974                 longlongsize=`./try$exe_ext`
9975                 echo "Your long longs are $longlongsize bytes long."
9976         else
9977                 dflt='8'
9978                 echo " "
9979                 echo "(I can't seem to compile the test program.  Guessing...)"
9980                 rp="What is the size of a long long (in bytes)?"
9981                 . ./myread
9982                 longlongsize="$ans"
9983         fi
9984         if $test "X$longsize" = "X$longlongsize"; then
9985                 echo "(That isn't any different from an ordinary long.)"
9986         fi      
9987         ;;
9988 esac
9989 $rm -f try.* try
9990
9991 : see if prototype for lseek is available
9992 echo " "
9993 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
9994 eval $hasproto
9995
9996 : see if lstat exists
9997 set lstat d_lstat
9998 eval $inlibc
9999
10000 : see if madvise exists
10001 set madvise d_madvise
10002 eval $inlibc
10003
10004 : see if mblen exists
10005 set mblen d_mblen
10006 eval $inlibc
10007
10008 : see if mbstowcs exists
10009 set mbstowcs d_mbstowcs
10010 eval $inlibc
10011
10012 : see if mbtowc exists
10013 set mbtowc d_mbtowc
10014 eval $inlibc
10015
10016 : see if memchr exists
10017 set memchr d_memchr
10018 eval $inlibc
10019
10020 : see if memcmp exists
10021 set memcmp d_memcmp
10022 eval $inlibc
10023
10024 : see if memcpy exists
10025 set memcpy d_memcpy
10026 eval $inlibc
10027
10028 : see if memmove exists
10029 set memmove d_memmove
10030 eval $inlibc
10031
10032 : see if memset exists
10033 set memset d_memset
10034 eval $inlibc
10035
10036 : see if mkdir exists
10037 set mkdir d_mkdir
10038 eval $inlibc
10039
10040 : see if mkdtemp exists
10041 set mkdtemp d_mkdtemp
10042 eval $inlibc
10043
10044 : see if mkfifo exists
10045 set mkfifo d_mkfifo
10046 eval $inlibc
10047
10048 : see if mkstemp exists
10049 set mkstemp d_mkstemp
10050 eval $inlibc
10051
10052 : see if mkstemps exists
10053 set mkstemps d_mkstemps
10054 eval $inlibc
10055
10056 : see if mktime exists
10057 set mktime d_mktime
10058 eval $inlibc
10059
10060 : see if this is a sys/mman.h system
10061 set sys/mman.h i_sysmman
10062 eval $inhdr
10063
10064 : see if mmap exists
10065 set mmap d_mmap
10066 eval $inlibc
10067 : see what shmat returns
10068 : default to something harmless
10069 mmaptype='void *'
10070 case "$i_sysmman$d_mmap" in
10071 "$define$define")
10072         $cat >mmap.c <<'END'
10073 #include <sys/mman.h>
10074 void *mmap();
10075 END
10076         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
10077                 mmaptype='void *'
10078         else
10079                 mmaptype='caddr_t'
10080         fi
10081         echo "and it returns ($mmaptype)." >&4
10082         ;;
10083 esac
10084
10085
10086
10087 : see if modfl exists
10088 set modfl d_modfl
10089 eval $inlibc
10090
10091 : see if mprotect exists
10092 set mprotect d_mprotect
10093 eval $inlibc
10094
10095 : see if msgctl exists
10096 set msgctl d_msgctl
10097 eval $inlibc
10098
10099 : see if msgget exists
10100 set msgget d_msgget
10101 eval $inlibc
10102
10103 : see if msgsnd exists
10104 set msgsnd d_msgsnd
10105 eval $inlibc
10106
10107 : see if msgrcv exists
10108 set msgrcv d_msgrcv
10109 eval $inlibc
10110
10111 : see how much of the 'msg*(2)' library is present.
10112 h_msg=true
10113 echo " "
10114 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
10115 *"$undef"*) h_msg=false;;
10116 esac
10117 case "$osname" in
10118 freebsd)
10119     case "`ipcs 2>&1`" in
10120     "SVID messages"*"not configured"*)
10121         echo "Your $osname does not have the msg*(2) configured." >&4
10122         h_msg=false
10123         val="$undef"
10124         set msgctl d_msgctl
10125         eval $setvar
10126         set msgget d_msgget
10127         eval $setvar
10128         set msgsnd d_msgsnd
10129         eval $setvar
10130         set msgrcv d_msgrcv
10131         eval $setvar
10132         ;;
10133     esac
10134     ;;
10135 esac
10136 : we could also check for sys/ipc.h ...
10137 if $h_msg && $test `./findhdr sys/msg.h`; then
10138         echo "You have the full msg*(2) library." >&4
10139         val="$define"
10140 else
10141         echo "You don't have the full msg*(2) library." >&4
10142         val="$undef"
10143 fi
10144 set d_msg
10145 eval $setvar
10146
10147 : see if msync exists
10148 set msync d_msync
10149 eval $inlibc
10150
10151 : see if munmap exists
10152 set munmap d_munmap
10153 eval $inlibc
10154
10155 : see if nice exists
10156 set nice d_nice
10157 eval $inlibc
10158
10159
10160 echo " "
10161 echo "Checking which 64-bit integer type we could use..." >&4
10162
10163 case "$intsize" in
10164 8) val=int
10165    set quadtype
10166    eval $setvar
10167    val='"unsigned int"'
10168    set uquadtype
10169    eval $setvar
10170    quadkind=1
10171    ;;
10172 *) case "$longsize" in
10173    8) val=long
10174       set quadtype
10175       eval $setvar
10176       val='"unsigned long"'
10177       set uquadtype
10178       eval $setvar
10179       quadkind=2
10180       ;;
10181    *) case "$d_longlong:$longlongsize" in
10182       define:8)
10183         val='"long long"'
10184         set quadtype
10185         eval $setvar
10186         val='"unsigned long long"'
10187         set uquadtype
10188         eval $setvar
10189         quadkind=3
10190         ;;
10191       *) case "$d_int64_t" in
10192          define)
10193            val=int64_t
10194            set quadtype
10195            eval $setvar
10196            val=uint64_t
10197            set uquadtype
10198            eval $setvar
10199            quadkind=4
10200            ;;
10201          esac
10202          ;;
10203       esac
10204       ;;
10205    esac
10206    ;;
10207 esac
10208
10209 case "$quadtype" in
10210 '')     echo "Alas, no 64-bit integer types in sight." >&4
10211         d_quad="$undef"
10212         ;;
10213 *)      if test X"$use64bitint" = Xdefine -o X"$longsize" = X8; then
10214             verb="will"
10215         else
10216             verb="could"
10217         fi
10218         echo "We $verb use '$quadtype' for 64-bit integers." >&4
10219         d_quad="$define"
10220         ;;
10221 esac
10222
10223 : check for length of character
10224 echo " "
10225 case "$charsize" in
10226 '')
10227         echo "Checking to see how big your characters are (hey, you never know)..." >&4
10228         $cat >try.c <<'EOCP'
10229 #include <stdio.h>
10230 int main()
10231 {
10232     printf("%d\n", (int)sizeof(char));
10233     exit(0);
10234 }
10235 EOCP
10236         set try
10237         if eval $compile_ok; then
10238                 dflt=`./try`
10239         else
10240                 dflt='1'
10241                 echo "(I can't seem to compile the test program.  Guessing...)"
10242         fi
10243         ;;
10244 *)
10245         dflt="$charsize"
10246         ;;
10247 esac
10248 rp="What is the size of a character (in bytes)?"
10249 . ./myread
10250 charsize="$ans"
10251 $rm -f try.c try
10252
10253 : check for volatile keyword
10254 echo " "
10255 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10256 $cat >try.c <<'EOCP'
10257 int main()
10258 {
10259         typedef struct _goo_struct goo_struct;
10260         goo_struct * volatile goo = ((goo_struct *)0);
10261         struct _goo_struct {
10262                 long long_int;
10263                 int reg_int;
10264                 char char_var;
10265         };
10266         typedef unsigned short foo_t;
10267         char *volatile foo;
10268         volatile int bar;
10269         volatile foo_t blech;
10270         foo = foo;
10271 }
10272 EOCP
10273 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10274         val="$define"
10275         echo "Yup, it does."
10276 else
10277         val="$undef"
10278         echo "Nope, it doesn't."
10279 fi
10280 set d_volatile
10281 eval $setvar
10282 $rm -f try.*
10283
10284
10285 echo " "
10286 $echo "Choosing the C types to be used for Perl's internal types..." >&4
10287
10288 case "$use64bitint:$d_quad:$quadtype" in
10289 define:define:?*)
10290         ivtype="$quadtype"
10291         uvtype="$uquadtype"
10292         ivsize=8
10293         uvsize=8
10294         ;;
10295 *)      ivtype="long"
10296         uvtype="unsigned long"
10297         ivsize=$longsize
10298         uvsize=$longsize
10299         ;;
10300 esac
10301
10302 case "$uselongdouble:$d_longdbl" in
10303 define:define)
10304         nvtype="long double"
10305         nvsize=$longdblsize
10306         ;;
10307 *)      nvtype=double
10308         nvsize=$doublesize
10309         ;;
10310 esac
10311
10312 $echo "(IV will be "$ivtype", $ivsize bytes)"
10313 $echo "(UV will be "$uvtype", $uvsize bytes)"
10314 $echo "(NV will be "$nvtype", $nvsize bytes)"
10315
10316 $cat >try.c <<EOCP
10317 #$i_inttypes I_INTTYPES
10318 #ifdef I_INTTYPES
10319 #include <inttypes.h>
10320 #endif
10321 #include <stdio.h>
10322 int main() {
10323 #ifdef INT8
10324    int8_t i =  INT8_MAX;
10325   uint8_t u = UINT8_MAX;
10326   printf("int8_t\n");
10327 #endif
10328 #ifdef INT16
10329    int16_t i =  INT16_MAX;
10330   uint16_t i = UINT16_MAX;
10331   printf("int16_t\n");
10332 #endif
10333 #ifdef INT32
10334    int32_t i =  INT32_MAX;
10335   uint32_t u = UINT32_MAX;
10336   printf("int32_t\n");
10337 #endif
10338 }
10339 EOCP
10340
10341 case "$i8type" in
10342 '')     case "$charsize" in
10343         1)      i8type=char
10344                 u8type="unsigned char"
10345                 i8size=$charsize
10346                 u8size=$charsize
10347                 ;;
10348         esac
10349         ;;
10350 esac
10351 case "$i8type" in
10352 '')     set try -DINT8
10353         if eval $compile; then
10354                 case "`./try$exe_ext`" in
10355                 int8_t) i8type=int8_t
10356                         u8type=uint8_t
10357                         i8size=1
10358                         u8size=1
10359                         ;;
10360                 esac
10361         fi
10362         ;;
10363 esac
10364 case "$i8type" in
10365 '')     if $test $charsize -ge 1; then
10366                 i8type=char
10367                 u8type="unsigned char"
10368                 i8size=$charsize
10369                 u8size=$charsize
10370         fi
10371         ;;
10372 esac
10373
10374 case "$i16type" in
10375 '')     case "$shortsize" in
10376         2)      i16type=short
10377                 u16type="unsigned short"
10378                 i16size=$shortsize
10379                 u16size=$shortsize
10380                 ;;
10381         esac
10382         ;;
10383 esac
10384 case "$i16type" in
10385 '')     set try -DINT16
10386         if eval $compile; then
10387                 case "`./try$exe_ext`" in
10388                 int16_t)
10389                         i16type=int16_t
10390                         u16type=uint16_t
10391                         i16size=2
10392                         u16size=2
10393                         ;;
10394                 esac
10395         fi
10396         ;;
10397 esac
10398 case "$i16type" in
10399 '')     if $test $shortsize -ge 2; then
10400                 i16type=short
10401                 u16type="unsigned short"
10402                 i16size=$shortsize
10403                 u16size=$shortsize
10404         fi
10405         ;;
10406 esac
10407
10408 case "$i32type" in
10409 '')     case "$longsize" in
10410         4)      i32type=long
10411                 u32type="unsigned long"
10412                 i32size=$longsize
10413                 u32size=$longsize
10414                 ;;
10415         *)      case "$intsize" in
10416                 4)      i32type=int
10417                         u32type="unsigned int"
10418                         i32size=$intsize
10419                         u32size=$intsize
10420                         ;;
10421                 esac
10422                 ;;
10423         esac
10424         ;;
10425 esac
10426 case "$i32type" in
10427 '')     set try -DINT32
10428         if eval $compile; then
10429                 case "`./try$exe_ext`" in
10430                 int32_t)
10431                         i32type=int32_t
10432                         u32type=uint32_t
10433                         i32size=4
10434                         u32size=4
10435                         ;;
10436                 esac
10437         fi
10438         ;;
10439 esac
10440 case "$i32type" in
10441 '')     if $test $intsize -ge 4; then
10442                 i32type=int
10443                 u32type="unsigned int"
10444                 i32size=$intsize
10445                 u32size=$intsize
10446         fi
10447         ;;
10448 esac
10449
10450 case "$i64type" in
10451 '')     case "$d_quad:$quadtype" in
10452         define:?*)
10453                 i64type="$quadtype"
10454                 u64type="$uquadtype"
10455                 i64size=8
10456                 u64size=8
10457                 ;;
10458         esac
10459         ;;
10460 esac
10461
10462 $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
10463 : volatile so that the compiler has to store it out to memory.
10464 if test X"$d_volatile" = X"$define"; then
10465         volatile=volatile
10466 fi
10467 $cat <<EOP >try.c
10468 #include <stdio.h>
10469 #include <sys/types.h>
10470 #include <signal.h>
10471 #ifdef SIGFPE
10472 $volatile int bletched = 0;
10473 $signal_t blech(s) int s; { bletched = 1; }
10474 #endif
10475 int main() {
10476     $uvtype u = 0;
10477     $nvtype d;
10478     int     n = 8 * $uvsize;
10479     int     i;
10480 #ifdef SIGFPE
10481     signal(SIGFPE, blech);
10482 #endif
10483
10484     for (i = 0; i < n; i++) {
10485       u = u << 1 | ($uvtype)1;
10486       d = ($nvtype)u;
10487       if (($uvtype)d != u)
10488         break;
10489       if (d <= 0)
10490         break;
10491       d = ($nvtype)(u - 1);
10492       if (($uvtype)d != (u - 1))
10493         break;
10494 #ifdef SIGFPE
10495       if (bletched) {
10496         break;
10497 #endif
10498       } 
10499     }
10500     printf("%d\n", ((i == n) ? -n : i));
10501     exit(0);
10502 }
10503 EOP
10504 set try
10505
10506 d_nv_preserves_uv="$undef"
10507 if eval $compile; then
10508         d_nv_preserves_uv_bits="`./try$exe_ext`"
10509 fi
10510 case "$d_nv_preserves_uv_bits" in
10511 \-[1-9]*)       
10512         d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
10513         $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs."  2>&1
10514         d_nv_preserves_uv="$define"
10515         ;;
10516 [1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs."  2>&1
10517         d_nv_preserves_uv="$undef" ;;
10518 *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
10519         d_nv_preserves_uv_bits="$undef" ;;
10520 esac
10521
10522 $rm -f try.* try
10523
10524
10525 : check for off64_t
10526 echo " "
10527 echo "Checking to see if you have off64_t..." >&4
10528 $cat >try.c <<EOCP
10529 #include <sys/types.h>
10530 #include <unistd.h>
10531 int main() { off64_t x = 7; }
10532 EOCP
10533 set try
10534 if eval $compile; then
10535         val="$define"
10536         echo "You have off64_t."
10537 else
10538         val="$undef"
10539         echo "You do not have off64_t."
10540         case "$lseeksize" in
10541         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
10542         esac
10543 fi
10544 $rm -f try.* try
10545 set d_off64_t
10546 eval $setvar
10547
10548 : see if POSIX threads are available
10549 set pthread.h i_pthread
10550 eval $inhdr
10551
10552
10553
10554
10555 : how to create joinable pthreads
10556 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
10557         echo " "
10558         echo "Checking what constant to use for creating joinable pthreads..." >&4 
10559         $cat >try.c <<'EOCP'
10560 #include <pthread.h>
10561 int main() {
10562     int detachstate = JOINABLE;
10563 }
10564 EOCP
10565         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
10566         if eval $compile; then
10567                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
10568                 val="$undef" # Yes, undef.
10569                 set d_old_pthread_create_joinable
10570                 eval $setvar
10571                 val=""
10572                 set old_pthread_create_joinable
10573                 eval $setvar
10574         else
10575                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
10576                 if eval $compile; then
10577                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
10578                         val="$define"
10579                         set d_old_pthread_create_joinable
10580                         eval $setvar
10581                         val=PTHREAD_CREATE_UNDETACHED
10582                         set old_pthread_create_joinable
10583                         eval $setvar
10584                 else            
10585                         set try -DJOINABLE=__UNDETACHED
10586                         if eval $compile; then
10587                                 echo "You seem to use __UNDETACHED." >&4
10588                                 val="$define"
10589                                 set d_old_pthread_create_joinable
10590                                 eval $setvar
10591                                 val=__UNDETACHED
10592                                 set old_pthread_create_joinable
10593                                 eval $setvar
10594                         else
10595                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
10596                                 val="$define"
10597                                 set d_old_pthread_create_joinable
10598                                 eval $setvar
10599                                 val=0
10600                                 set old_pthread_create_joinable
10601                                 eval $setvar
10602                         fi
10603                 fi
10604         fi
10605         $rm -f try try.*
10606 else
10607     d_old_pthread_create_joinable="$undef"
10608     old_pthread_create_joinable=""
10609 fi
10610
10611 : see if pause exists
10612 set pause d_pause
10613 eval $inlibc
10614
10615 : see if pipe exists
10616 set pipe d_pipe
10617 eval $inlibc
10618
10619 : see if poll exists
10620 set poll d_poll
10621 eval $inlibc
10622
10623
10624 : see whether the various POSIXish _yields exist
10625 $cat >try.c <<EOP
10626 #include <pthread.h>
10627 #include <stdio.h>
10628 int main() {
10629 #ifdef SCHED_YIELD
10630         sched_yield();
10631 #else
10632 #ifdef PTHREAD_YIELD
10633         pthread_yield();
10634 #else
10635 #ifdef PTHREAD_YIELD_NULL
10636         pthread_yield(NULL);
10637 #endif
10638 #endif
10639 #endif
10640 }
10641 EOP
10642 : see if sched_yield exists
10643 set try -DSCHED_YIELD
10644 if eval $compile; then
10645     val="$define"
10646     sched_yield='sched_yield()'
10647 else
10648     val="$undef"
10649 fi
10650 case "$usethreads" in
10651 $define)
10652         case "$val" in
10653         $define) echo 'sched_yield() found.' >&4        ;;
10654         *)       echo 'sched_yield() NOT found.' >&4    ;;
10655         esac
10656 esac
10657 set d_sched_yield
10658 eval $setvar
10659
10660 : see if pthread_yield exists
10661 set try -DPTHREAD_YIELD
10662 if eval $compile; then
10663     val="$define"
10664     case "$sched_yield" in
10665     '') sched_yield='pthread_yield()' ;;
10666     esac
10667 else
10668     set try -DPTHREAD_YIELD_NULL
10669     if eval $compile; then
10670         val="$define"
10671         case "$sched_yield" in
10672         '') sched_yield='pthread_yield(NULL)' ;;
10673         esac
10674     else
10675         val="$undef"
10676     fi
10677 fi
10678 case "$usethreads" in
10679 $define)
10680         case "$val" in
10681         $define) echo 'pthread_yield() found.' >&4      ;;
10682         *)       echo 'pthread_yield() NOT found.' >&4  ;;
10683         esac
10684         ;;
10685 esac
10686 set d_pthread_yield
10687 eval $setvar
10688
10689 case "$sched_yield" in
10690 '') sched_yield=undef ;;
10691 esac
10692
10693 $rm -f try try.*
10694
10695 : see if this is a pwd.h system
10696 set pwd.h i_pwd
10697 eval $inhdr
10698
10699 case "$i_pwd" in
10700 $define)
10701         xxx=`./findhdr pwd.h`
10702         $cppstdin $cppflags $cppminus < $xxx >$$.h
10703
10704         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
10705                 val="$define"
10706         else
10707                 val="$undef"
10708         fi
10709         set d_pwquota
10710         eval $setvar
10711
10712         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
10713                 val="$define"
10714         else
10715                 val="$undef"
10716         fi
10717         set d_pwage
10718         eval $setvar
10719
10720         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
10721                 val="$define"
10722         else
10723                 val="$undef"
10724         fi
10725         set d_pwchange
10726         eval $setvar
10727
10728         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
10729                 val="$define"
10730         else
10731                 val="$undef"
10732         fi
10733         set d_pwclass
10734         eval $setvar
10735
10736         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
10737                 val="$define"
10738         else
10739                 val="$undef"
10740         fi
10741         set d_pwexpire
10742         eval $setvar
10743
10744         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
10745                 val="$define"
10746         else
10747                 val="$undef"
10748         fi
10749         set d_pwcomment
10750         eval $setvar
10751
10752         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
10753                 val="$define"
10754         else
10755                 val="$undef"
10756         fi
10757         set d_pwgecos
10758         eval $setvar
10759
10760         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
10761                 val="$define"
10762         else
10763                 val="$undef"
10764         fi
10765         set d_pwpasswd
10766         eval $setvar
10767
10768         $rm -f $$.h
10769         ;;
10770 *)
10771         val="$undef"; 
10772         set d_pwquota; eval $setvar
10773         set d_pwage; eval $setvar
10774         set d_pwchange; eval $setvar
10775         set d_pwclass; eval $setvar
10776         set d_pwexpire; eval $setvar
10777         set d_pwcomment; eval $setvar
10778         set d_pwgecos; eval $setvar
10779         set d_pwpasswd; eval $setvar
10780         ;;
10781 esac
10782
10783 : see if readdir and friends exist
10784 set readdir d_readdir
10785 eval $inlibc
10786 set seekdir d_seekdir
10787 eval $inlibc
10788 set telldir d_telldir
10789 eval $inlibc
10790 set rewinddir d_rewinddir
10791 eval $inlibc
10792
10793 : see if readlink exists
10794 set readlink d_readlink
10795 eval $inlibc
10796
10797 : see if rename exists
10798 set rename d_rename
10799 eval $inlibc
10800
10801 : see if rmdir exists
10802 set rmdir d_rmdir
10803 eval $inlibc
10804
10805 : see if memory.h is available.
10806 val=''
10807 set memory.h val
10808 eval $inhdr
10809
10810 : See if it conflicts with string.h
10811 case "$val" in
10812 $define)
10813         case "$strings" in
10814         '') ;;
10815         *)
10816                 $cppstdin $cppflags $cppminus < $strings > mem.h
10817                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
10818                         echo " "
10819                         echo "We won't be including <memory.h>."
10820                         val="$undef"
10821                 fi
10822                 $rm -f mem.h
10823                 ;;
10824         esac
10825 esac
10826 set i_memory
10827 eval $setvar
10828
10829 : can bcopy handle overlapping blocks?
10830 val="$undef"
10831 case "$d_bcopy" in
10832 "$define")
10833         echo " "
10834         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
10835         $cat >try.c <<EOCP
10836 #$i_memory I_MEMORY
10837 #$i_stdlib I_STDLIB
10838 #$i_string I_STRING
10839 #$i_unistd I_UNISTD
10840 EOCP
10841         $cat >>try.c <<'EOCP'
10842 #include <stdio.h>
10843 #ifdef I_MEMORY
10844 #  include <memory.h>
10845 #endif
10846 #ifdef I_STDLIB
10847 #  include <stdlib.h>
10848 #endif
10849 #ifdef I_STRING
10850 #  include <string.h>
10851 #else
10852 #  include <strings.h>
10853 #endif
10854 #ifdef I_UNISTD
10855 #  include <unistd.h>  /* Needed for NetBSD */
10856 #endif
10857 int main()
10858 {
10859 char buf[128], abc[128];
10860 char *b;
10861 int len;
10862 int off;
10863 int align;
10864
10865 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
10866
10867 for (align = 7; align >= 0; align--) {
10868         for (len = 36; len; len--) {
10869                 b = buf+align;
10870                 bcopy(abc, b, len);
10871                 for (off = 1; off <= len; off++) {
10872                         bcopy(b, b+off, len);
10873                         bcopy(b+off, b, len);
10874                         if (bcmp(b, abc, len))
10875                                 exit(1);
10876                 }
10877         }
10878 }
10879 exit(0);
10880 }
10881 EOCP
10882         set try
10883         if eval $compile_ok; then
10884                 if ./try 2>/dev/null; then
10885                         echo "Yes, it can."
10886                         val="$define"
10887                 else
10888                         echo "It can't, sorry."
10889                         case "$d_memmove" in
10890                         "$define") echo "But that's Ok since you have memmove()." ;;
10891                         esac
10892                 fi
10893         else
10894                 echo "(I can't compile the test program, so we'll assume not...)"
10895                 case "$d_memmove" in
10896                 "$define") echo "But that's Ok since you have memmove()." ;;
10897                 esac
10898         fi
10899         ;;
10900 esac
10901 $rm -f try.* try core
10902 set d_safebcpy
10903 eval $setvar
10904
10905 : can memcpy handle overlapping blocks?
10906 val="$undef"
10907 case "$d_memcpy" in
10908 "$define")
10909         echo " "
10910         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
10911         $cat >try.c <<EOCP
10912 #$i_memory I_MEMORY
10913 #$i_stdlib I_STDLIB
10914 #$i_string I_STRING
10915 #$i_unistd I_UNISTD
10916 EOCP
10917         $cat >>try.c <<'EOCP'
10918 #include <stdio.h>
10919 #ifdef I_MEMORY
10920 #  include <memory.h>
10921 #endif
10922 #ifdef I_STDLIB
10923 #  include <stdlib.h>
10924 #endif
10925 #ifdef I_STRING
10926 #  include <string.h>
10927 #else
10928 #  include <strings.h>
10929 #endif
10930 #ifdef I_UNISTD
10931 #  include <unistd.h>  /* Needed for NetBSD */
10932 #endif
10933 int main()
10934 {
10935 char buf[128], abc[128];
10936 char *b;
10937 int len;
10938 int off;
10939 int align;
10940
10941 /* Copy "abcde..." string to char abc[] so that gcc doesn't
10942    try to store the string in read-only memory. */
10943 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
10944
10945 for (align = 7; align >= 0; align--) {
10946         for (len = 36; len; len--) {
10947                 b = buf+align;
10948                 memcpy(b, abc, len);
10949                 for (off = 1; off <= len; off++) {
10950                         memcpy(b+off, b, len);
10951                         memcpy(b, b+off, len);
10952                         if (memcmp(b, abc, len))
10953                                 exit(1);
10954                 }
10955         }
10956 }
10957 exit(0);
10958 }
10959 EOCP
10960         set try
10961         if eval $compile_ok; then
10962                 if ./try 2>/dev/null; then
10963                         echo "Yes, it can."
10964                         val="$define"
10965                 else
10966                         echo "It can't, sorry."
10967                         case "$d_memmove" in
10968                         "$define") echo "But that's Ok since you have memmove()." ;;
10969                         esac
10970                 fi
10971         else
10972                 echo "(I can't compile the test program, so we'll assume not...)"
10973                 case "$d_memmove" in
10974                 "$define") echo "But that's Ok since you have memmove()." ;;
10975                 esac
10976         fi
10977         ;;
10978 esac
10979 $rm -f try.* try core
10980 set d_safemcpy
10981 eval $setvar
10982
10983 : can memcmp be trusted to compare relative magnitude?
10984 val="$undef"
10985 case "$d_memcmp" in
10986 "$define")
10987         echo " "
10988         echo "Checking if your memcmp() can compare relative magnitude..." >&4
10989         $cat >try.c <<EOCP
10990 #$i_memory I_MEMORY
10991 #$i_stdlib I_STDLIB
10992 #$i_string I_STRING
10993 #$i_unistd I_UNISTD
10994 EOCP
10995         $cat >>try.c <<'EOCP'
10996 #include <stdio.h>
10997 #ifdef I_MEMORY
10998 #  include <memory.h>
10999 #endif
11000 #ifdef I_STDLIB
11001 #  include <stdlib.h>
11002 #endif
11003 #ifdef I_STRING
11004 #  include <string.h>
11005 #else
11006 #  include <strings.h>
11007 #endif
11008 #ifdef I_UNISTD
11009 #  include <unistd.h>  /* Needed for NetBSD */
11010 #endif
11011 int main()
11012 {
11013 char a = -1;
11014 char b = 0;
11015 if ((a < b) && memcmp(&a, &b, 1) < 0)
11016         exit(1);
11017 exit(0);
11018 }
11019 EOCP
11020         set try
11021         if eval $compile_ok; then
11022                 if ./try 2>/dev/null; then
11023                         echo "Yes, it can."
11024                         val="$define"
11025                 else
11026                         echo "No, it can't (it uses signed chars)."
11027                 fi
11028         else
11029                 echo "(I can't compile the test program, so we'll assume not...)"
11030         fi
11031         ;;
11032 esac
11033 $rm -f try.* try core
11034 set d_sanemcmp
11035 eval $setvar
11036
11037 : see if prototype for sbrk is available
11038 echo " "
11039 set d_sbrkproto sbrk $i_unistd unistd.h
11040 eval $hasproto
11041
11042 : see if select exists
11043 set select d_select
11044 eval $inlibc
11045
11046 : see if semctl exists
11047 set semctl d_semctl
11048 eval $inlibc
11049
11050 : see if semget exists
11051 set semget d_semget
11052 eval $inlibc
11053
11054 : see if semop exists
11055 set semop d_semop
11056 eval $inlibc
11057
11058 : see how much of the 'sem*(2)' library is present.
11059 h_sem=true
11060 echo " "
11061 case "$d_semctl$d_semget$d_semop" in
11062 *"$undef"*) h_sem=false;;
11063 esac
11064 case "$osname" in
11065 freebsd)
11066     case "`ipcs 2>&1`" in
11067     "SVID messages"*"not configured"*)
11068         echo "Your $osname does not have the sem*(2) configured." >&4
11069         h_sem=false
11070         val="$undef"
11071         set semctl d_semctl
11072         eval $setvar
11073         set semget d_semget
11074         eval $setvar
11075         set semop d_semop
11076         eval $setvar
11077         ;;
11078     esac
11079     ;;
11080 esac
11081 : we could also check for sys/ipc.h ...
11082 if $h_sem && $test `./findhdr sys/sem.h`; then
11083         echo "You have the full sem*(2) library." >&4
11084         val="$define"
11085 else
11086         echo "You don't have the full sem*(2) library." >&4
11087         val="$undef"
11088 fi
11089 set d_sem
11090 eval $setvar
11091
11092 : see whether sys/sem.h defines union semun
11093 echo " "
11094 $cat > try.c <<'END'
11095 #include <sys/types.h>
11096 #include <sys/ipc.h>
11097 #include <sys/sem.h>
11098 int main () { union semun semun; semun.buf = 0; }
11099 END
11100 set try
11101 if eval $compile; then
11102     echo "You have union semun in <sys/sem.h>." >&4
11103     val="$define"
11104 else
11105     echo "You do not have union semun in <sys/sem.h>." >&4
11106     val="$undef"
11107 fi
11108 $rm -f try try.c try.h
11109 set d_union_semun
11110 eval $setvar
11111
11112 : see how to do semctl IPC_STAT
11113 case "$d_sem" in
11114 $define)
11115     : see whether semctl IPC_STAT can use union semun
11116     echo " "
11117     $cat > try.h <<END
11118 #ifndef S_IRUSR
11119 #   ifdef S_IREAD
11120 #       define S_IRUSR S_IREAD
11121 #       define S_IWUSR S_IWRITE
11122 #       define S_IXUSR S_IEXEC
11123 #   else
11124 #       define S_IRUSR 0400
11125 #       define S_IWUSR 0200
11126 #       define S_IXUSR 0100
11127 #   endif
11128 #   define S_IRGRP (S_IRUSR>>3)
11129 #   define S_IWGRP (S_IWUSR>>3)
11130 #   define S_IXGRP (S_IXUSR>>3)
11131 #   define S_IROTH (S_IRUSR>>6)
11132 #   define S_IWOTH (S_IWUSR>>6)
11133 #   define S_IXOTH (S_IXUSR>>6)
11134 #endif
11135 #ifndef S_IRWXU
11136 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
11137 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
11138 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
11139 #endif
11140 END
11141
11142     $cat > try.c <<END
11143 #include <sys/types.h>
11144 #include <sys/ipc.h>
11145 #include <sys/sem.h>
11146 #include <sys/stat.h>
11147 #include <stdio.h>
11148 #include <errno.h>
11149 #include "try.h"
11150 #ifndef errno
11151 extern int errno;
11152 #endif
11153 #$d_union_semun HAS_UNION_SEMUN
11154 int main() {
11155     union semun
11156 #ifndef HAS_UNION_SEMUN
11157     {
11158         int val;
11159         struct semid_ds *buf;
11160         unsigned short *array;
11161     }
11162 #endif
11163     arg;
11164     int sem, st;
11165
11166 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
11167     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11168     if (sem > -1) {
11169         struct semid_ds argbuf;
11170         arg.buf = &argbuf;
11171 #       ifdef IPC_STAT
11172         st = semctl(sem, 0, IPC_STAT, arg);
11173         if (st == 0)
11174             printf("semun\n");
11175         else
11176 #       endif /* IPC_STAT */
11177             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11178 #       ifdef IPC_RMID
11179         if (semctl(sem, 0, IPC_RMID, arg) != 0)
11180 #       endif /* IPC_RMID */
11181             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11182     } else
11183 #endif /* IPC_PRIVATE && ... */
11184         printf("semget failed: errno = %d\n", errno);
11185   return 0;
11186 }
11187 END
11188     val="$undef"
11189     set try
11190     if eval $compile; then
11191         xxx=`./try`
11192         case "$xxx" in
11193         semun) val="$define" ;;
11194         esac
11195     fi
11196     $rm -f try try.c
11197     set d_semctl_semun
11198     eval $setvar
11199     case "$d_semctl_semun" in
11200     $define)
11201         echo "You can use union semun for semctl IPC_STAT." >&4
11202         also='also'
11203         ;;
11204     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
11205         also=''
11206         ;;
11207     esac
11208
11209     : see whether semctl IPC_STAT can use struct semid_ds pointer
11210     $cat > try.c <<'END'
11211 #include <sys/types.h>
11212 #include <sys/ipc.h>
11213 #include <sys/sem.h>
11214 #include <sys/stat.h>
11215 #include "try.h"
11216 #include <stdio.h>
11217 #include <errno.h>
11218 #ifndef errno
11219 extern int errno;
11220 #endif
11221 int main() {
11222     struct semid_ds arg;
11223     int sem, st;
11224
11225 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
11226     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11227     if (sem > -1) {
11228 #       ifdef IPC_STAT
11229         st = semctl(sem, 0, IPC_STAT, &arg);
11230         if (st == 0)
11231             printf("semid_ds\n");
11232         else
11233 #       endif /* IPC_STAT */
11234             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11235 #       ifdef IPC_RMID
11236         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
11237 #       endif /* IPC_RMID */
11238             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11239     } else
11240 #endif /* IPC_PRIVATE && ... */
11241         printf("semget failed: errno = %d\n", errno);
11242
11243     return 0;
11244 }
11245 END
11246     val="$undef"
11247     set try
11248     if eval $compile; then
11249         xxx=`./try`
11250         case "$xxx" in
11251         semid_ds) val="$define" ;;
11252         esac
11253     fi
11254     $rm -f try try.c
11255     set d_semctl_semid_ds
11256     eval $setvar
11257     case "$d_semctl_semid_ds" in
11258     $define)
11259         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
11260         ;;
11261     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
11262         ;;
11263     esac
11264     $rm -f try.h
11265     ;;
11266 *)  val="$undef"
11267
11268     # We do not have the full sem*(2) library, so assume we can not
11269     # use either.
11270
11271     set d_semctl_semun
11272     eval $setvar
11273
11274     set d_semctl_semid_ds
11275     eval $setvar
11276     ;;
11277 esac
11278
11279 : see if setegid exists
11280 set setegid d_setegid
11281 eval $inlibc
11282
11283 : see if seteuid exists
11284 set seteuid d_seteuid
11285 eval $inlibc
11286
11287 : see if setgrent exists
11288 set setgrent d_setgrent
11289 eval $inlibc
11290
11291 : see if sethostent exists
11292 set sethostent d_sethent
11293 eval $inlibc
11294
11295 : see if setlinebuf exists
11296 set setlinebuf d_setlinebuf
11297 eval $inlibc
11298
11299 : see if setlocale exists
11300 set setlocale d_setlocale
11301 eval $inlibc
11302
11303 : see if setnetent exists
11304 set setnetent d_setnent
11305 eval $inlibc
11306
11307 : see if setprotoent exists
11308 set setprotoent d_setpent
11309 eval $inlibc
11310
11311 : see if setpgid exists
11312 set setpgid d_setpgid
11313 eval $inlibc
11314
11315 : see if setpgrp2 exists
11316 set setpgrp2 d_setpgrp2
11317 eval $inlibc
11318
11319 : see if setpriority exists
11320 set setpriority d_setprior
11321 eval $inlibc
11322
11323 : see if setproctitle exists
11324 set setproctitle d_setproctitle
11325 eval $inlibc
11326
11327 : see if setpwent exists
11328 set setpwent d_setpwent
11329 eval $inlibc
11330
11331 : see if setregid exists
11332 set setregid d_setregid
11333 eval $inlibc
11334 set setresgid d_setresgid
11335 eval $inlibc
11336
11337 : see if setreuid exists
11338 set setreuid d_setreuid
11339 eval $inlibc
11340 set setresuid d_setresuid
11341 eval $inlibc
11342
11343 : see if setrgid exists
11344 set setrgid d_setrgid
11345 eval $inlibc
11346
11347 : see if setruid exists
11348 set setruid d_setruid
11349 eval $inlibc
11350
11351 : see if setservent exists
11352 set setservent d_setsent
11353 eval $inlibc
11354
11355 : see if setsid exists
11356 set setsid d_setsid
11357 eval $inlibc
11358
11359 : see if setvbuf exists
11360 set setvbuf d_setvbuf
11361 eval $inlibc
11362
11363 : see if sfio.h is available
11364 set sfio.h i_sfio
11365 eval $inhdr
11366
11367
11368 : see if sfio library is available
11369 case "$i_sfio" in
11370 $define)
11371         val=''
11372         set sfreserve val
11373         eval $inlibc
11374         ;;
11375 *)
11376         val="$undef"
11377         ;;
11378 esac
11379 : Ok, but do we want to use it.
11380 case "$val" in
11381 $define)
11382         case "$usesfio" in
11383         true|$define|[yY]*) dflt='y';;
11384         *) dflt='n';;
11385         esac
11386         echo "$package can use the sfio library, but it is experimental."
11387         case "$useperlio" in
11388         "$undef")
11389             echo "For sfio also the PerlIO abstraction layer is needed."
11390             echo "Earlier you said you wouldn't want that."
11391             ;;
11392         esac
11393         rp="You seem to have sfio available, do you want to try using it?"
11394         . ./myread
11395         case "$ans" in
11396         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
11397                 useperlio="$define"
11398                 val="$define"
11399                 ;;
11400         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
11401                 val="$undef"
11402                 : Remove sfio from list of libraries to use
11403                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
11404                 shift
11405                 libs="$*"
11406                 echo "libs = $libs" >&4
11407                 ;;
11408         esac
11409         ;;
11410 *)      case "$usesfio" in
11411         true|$define|[yY]*)
11412                 echo "Sorry, cannot find sfio on this machine." >&4
11413                 echo "Ignoring your setting of usesfio=$usesfio." >&4
11414                 val="$undef"
11415                 ;;
11416         esac
11417         ;;
11418 esac
11419 set d_sfio
11420 eval $setvar
11421 case "$d_sfio" in
11422 $define) usesfio='true';;
11423 *) usesfio='false';;
11424 esac
11425
11426 : see if shmctl exists
11427 set shmctl d_shmctl
11428 eval $inlibc
11429
11430 : see if shmget exists
11431 set shmget d_shmget
11432 eval $inlibc
11433
11434 : see if shmat exists
11435 set shmat d_shmat
11436 eval $inlibc
11437 : see what shmat returns
11438 case "$d_shmat" in
11439 "$define")
11440         $cat >shmat.c <<'END'
11441 #include <sys/shm.h>
11442 void *shmat();
11443 END
11444         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
11445                 shmattype='void *'
11446         else
11447                 shmattype='char *'
11448         fi
11449         echo "and it returns ($shmattype)." >&4
11450         : see if a prototype for shmat is available
11451         xxx=`./findhdr sys/shm.h`
11452         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
11453         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
11454                 val="$define"
11455         else
11456                 val="$undef"
11457         fi
11458         $rm -f shmat.[co]
11459         ;;
11460 *)
11461         val="$undef"
11462         ;;
11463 esac
11464 set d_shmatprototype
11465 eval $setvar
11466
11467 : see if shmdt exists
11468 set shmdt d_shmdt
11469 eval $inlibc
11470
11471 : see how much of the 'shm*(2)' library is present.
11472 h_shm=true
11473 echo " "
11474 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
11475 *"$undef"*) h_shm=false;;
11476 esac
11477 case "$osname" in
11478 freebsd)
11479     case "`ipcs 2>&1`" in
11480     "SVID shared memory"*"not configured"*)
11481         echo "Your $osname does not have the shm*(2) configured." >&4
11482         h_shm=false
11483         val="$undef"
11484         set shmctl d_shmctl
11485         evat $setvar
11486         set shmget d_shmget
11487         evat $setvar
11488         set shmat d_shmat
11489         evat $setvar
11490         set shmdt d_shmdt
11491         evat $setvar
11492         ;;
11493     esac
11494     ;;
11495 esac
11496 : we could also check for sys/ipc.h ...
11497 if $h_shm && $test `./findhdr sys/shm.h`; then
11498         echo "You have the full shm*(2) library." >&4
11499         val="$define"
11500 else
11501         echo "You don't have the full shm*(2) library." >&4
11502         val="$undef"
11503 fi
11504 set d_shm
11505 eval $setvar
11506
11507 echo " "
11508 : see if we have sigaction
11509 if set sigaction val -f d_sigaction; eval $csym; $val; then
11510         echo 'sigaction() found.' >&4
11511         $cat > try.c <<'EOP'
11512 #include <stdio.h>
11513 #include <sys/types.h>
11514 #include <signal.h>
11515 int main()
11516 {
11517     struct sigaction act, oact;
11518     act.sa_flags = 0;
11519     oact.sa_handler = 0;
11520     /* so that act and oact are used */
11521     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
11522 }
11523 EOP
11524         set try
11525         if eval $compile_ok; then
11526                 val="$define"
11527         else
11528                 echo "But you don't seem to have a useable struct sigaction." >&4
11529                 val="$undef"
11530         fi
11531 else
11532         echo 'sigaction NOT found.' >&4
11533         val="$undef"
11534 fi
11535 set d_sigaction; eval $setvar
11536 $rm -f try try$_o try.c
11537
11538 : see if sigprocmask exists
11539 set sigprocmask d_sigprocmask
11540 eval $inlibc
11541
11542 : see if sigsetjmp exists
11543 echo " "
11544 case "$d_sigsetjmp" in
11545 '')
11546         $cat >try.c <<'EOP'
11547 #include <setjmp.h>
11548 sigjmp_buf env;
11549 int set = 1;
11550 int main()
11551 {
11552         if (sigsetjmp(env,1))
11553                 exit(set);
11554         set = 0;
11555         siglongjmp(env, 1);
11556         exit(1);
11557 }
11558 EOP
11559         set try
11560         if eval $compile; then
11561                 if ./try >/dev/null 2>&1; then
11562                         echo "POSIX sigsetjmp found." >&4
11563                         val="$define"
11564                 else
11565                         $cat >&4 <<EOM
11566 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
11567 I'll ignore them.
11568 EOM
11569                         val="$undef"
11570                 fi
11571         else
11572                 echo "sigsetjmp not found." >&4
11573                 val="$undef"
11574         fi
11575         ;;
11576 *) val="$d_sigsetjmp"
11577         case "$d_sigsetjmp" in
11578         $define) echo "POSIX sigsetjmp found." >&4;;
11579         $undef) echo "sigsetjmp not found." >&4;;
11580         esac
11581         ;;
11582 esac
11583 set d_sigsetjmp
11584 eval $setvar
11585 $rm -f try.c try
11586
11587 : see if socks5_init exists
11588 set socks5_init d_socks5_init
11589 eval $inlibc
11590
11591 : see if sys/stat.h is available
11592 set sys/stat.h i_sysstat
11593 eval $inhdr
11594
11595
11596 : see if stat knows about block sizes
11597 echo " "
11598 echo "Checking to see if your struct stat has st_blocks field..." >&4
11599 set d_statblks stat st_blocks $i_sysstat sys/stat.h
11600 eval $hasfield
11601
11602
11603 : see if this is a sys/vfs.h system
11604 set sys/vfs.h i_sysvfs
11605 eval $inhdr
11606
11607
11608 : see if this is a sys/statfs.h system
11609 set sys/statfs.h i_sysstatfs
11610 eval $inhdr
11611
11612
11613 echo " "
11614 echo "Checking to see if your system supports struct statfs..." >&4
11615 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
11616 eval $hasstruct
11617 case "$d_statfs_s" in
11618 "$define")      echo "Yes, it does."   ;;
11619 *)              echo "No, it doesn't." ;;
11620 esac
11621
11622
11623
11624 : see if struct statfs knows about f_flags
11625 case "$d_statfs_s" in
11626 define) 
11627         echo " "
11628         echo "Checking to see if your struct statfs has f_flags field..." >&4
11629         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
11630         eval $hasfield
11631         ;;
11632 *)      val="$undef"
11633         set d_statfs_f_flags
11634         eval $setvar
11635         ;;
11636 esac
11637 case "$d_statfs_f_flags" in
11638 "$define")      echo "Yes, it does."   ;;
11639 *)              echo "No, it doesn't." ;;
11640 esac
11641
11642 : see if _ptr and _cnt from stdio act std
11643 echo " "
11644
11645 if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
11646         echo "(Looks like you have stdio.h from BSD.)"
11647         case "$stdio_ptr" in
11648         '') stdio_ptr='((fp)->_p)'
11649                 ptr_lval=$define
11650                 ;;
11651         *)      ptr_lval=$d_stdio_ptr_lval;;
11652         esac
11653         case "$stdio_cnt" in
11654         '') stdio_cnt='((fp)->_r)'
11655                 cnt_lval=$define
11656                 ;;
11657         *)      cnt_lval=$d_stdio_cnt_lval;;
11658         esac
11659         case "$stdio_base" in
11660         '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
11661         esac
11662         case "$stdio_bufsiz" in
11663         '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
11664         esac
11665 elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
11666         echo "(Looks like you have stdio.h from Linux.)"
11667         case "$stdio_ptr" in
11668         '') stdio_ptr='((fp)->_IO_read_ptr)'
11669                 ptr_lval=$define
11670                 ;;
11671         *)      ptr_lval=$d_stdio_ptr_lval;;
11672         esac
11673         case "$stdio_cnt" in
11674         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
11675                 cnt_lval=$undef
11676                 ;;
11677         *)      cnt_lval=$d_stdio_cnt_lval;;
11678         esac
11679         case "$stdio_base" in
11680         '') stdio_base='((fp)->_IO_read_base)';;
11681         esac
11682         case "$stdio_bufsiz" in
11683         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
11684         esac
11685 else
11686         case "$stdio_ptr" in
11687         '') stdio_ptr='((fp)->_ptr)'
11688                 ptr_lval=$define
11689                 ;;
11690         *)      ptr_lval=$d_stdio_ptr_lval;;
11691         esac
11692         case "$stdio_cnt" in
11693         '') stdio_cnt='((fp)->_cnt)'
11694                 cnt_lval=$define
11695                 ;;
11696         *)      cnt_lval=$d_stdio_cnt_lval;;
11697         esac
11698         case "$stdio_base" in
11699         '') stdio_base='((fp)->_base)';;
11700         esac
11701         case "$stdio_bufsiz" in
11702         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
11703         esac
11704 fi
11705
11706 : test whether _ptr and _cnt really work
11707 echo "Checking how std your stdio is..." >&4
11708 $cat >try.c <<EOP
11709 #include <stdio.h>
11710 #define FILE_ptr(fp)    $stdio_ptr
11711 #define FILE_cnt(fp)    $stdio_cnt
11712 int main() {
11713         FILE *fp = fopen("try.c", "r");
11714         char c = getc(fp);
11715         if (
11716                 18 <= FILE_cnt(fp) &&
11717                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
11718         )
11719                 exit(0);
11720         exit(1);
11721 }
11722 EOP
11723 val="$undef"
11724 set try
11725 if eval $compile; then
11726         if ./try; then
11727                 echo "Your stdio acts pretty std."
11728                 val="$define"
11729         else
11730                 echo "Your stdio isn't very std."
11731         fi
11732 else
11733         echo "Your stdio doesn't appear very std."
11734 fi
11735 $rm -f try.c try
11736 set d_stdstdio
11737 eval $setvar
11738
11739 : Can _ptr be used as an lvalue?
11740 case "$d_stdstdio$ptr_lval" in
11741 $define$define) val=$define ;;
11742 *) val=$undef ;;
11743 esac
11744 set d_stdio_ptr_lval
11745 eval $setvar
11746
11747 : Can _cnt be used as an lvalue?
11748 case "$d_stdstdio$cnt_lval" in
11749 $define$define) val=$define ;;
11750 *) val=$undef ;;
11751 esac
11752 set d_stdio_cnt_lval
11753 eval $setvar
11754
11755
11756 : test whether setting _ptr sets _cnt as a side effect
11757 d_stdio_ptr_lval_sets_cnt="$undef"
11758 d_stdio_ptr_lval_nochange_cnt="$undef"
11759 case "$d_stdio_ptr_lval$d_stdstdio" in
11760 $define$define)
11761         echo "Checking to see what happens if we set the stdio ptr..." >&4
11762 $cat >try.c <<EOP
11763 #include <stdio.h>
11764 /* Can we scream? */
11765 /* Eat dust sed :-) */
11766 /* In the buffer space, no one can hear you scream. */
11767 #define FILE_ptr(fp)    $stdio_ptr
11768 #define FILE_cnt(fp)    $stdio_cnt
11769 #include <sys/types.h>
11770 int main() {
11771         FILE *fp = fopen("try.c", "r");
11772         int c;
11773         char *ptr;
11774         size_t cnt;
11775         if (!fp) {
11776             puts("Fail even to read");
11777             exit(1);
11778         }
11779         c = getc(fp); /* Read away the first # */
11780         if (c == EOF) {
11781             puts("Fail even to read");
11782             exit(1);
11783         }
11784         if (!(
11785                 18 <= FILE_cnt(fp) &&
11786                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
11787         )) {
11788                 puts("Fail even to read");
11789                 exit (1);
11790         }
11791         ptr = (char*) FILE_ptr(fp);
11792         cnt = (size_t)FILE_cnt(fp);
11793
11794         FILE_ptr(fp) += 42;
11795
11796         if ((char*)FILE_ptr(fp) != (ptr + 42)) {
11797                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
11798                 exit (1);
11799         }
11800         if (FILE_cnt(fp) <= 20) {
11801                 printf ("Fail (<20 chars to test)");
11802                 exit (1);
11803         }
11804         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
11805                 puts("Fail compare");
11806                 exit (1);
11807         }
11808         if (cnt == FILE_cnt(fp)) {
11809                 puts("Pass_unchanged");
11810                 exit (0);
11811         }       
11812         if (FILE_cnt(fp) == (cnt - 42)) {
11813                 puts("Pass_changed");
11814                 exit (0);
11815         }
11816         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
11817         return 1;
11818
11819 }
11820 EOP
11821         set try
11822         if eval $compile; then
11823                 case `./try$exe_ext` in
11824                 Pass_changed)
11825                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
11826                         d_stdio_ptr_lval_sets_cnt="$define" ;;
11827                 Pass_unchanged)
11828                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
11829                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
11830                 Fail*)
11831                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
11832                 *)
11833                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
11834         esac
11835         else
11836                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
11837         fi
11838         $rm -f try.c try
11839         ;;
11840 esac
11841
11842 : see if _base is also standard
11843 val="$undef"
11844 case "$d_stdstdio" in
11845 $define)
11846         $cat >try.c <<EOP
11847 #include <stdio.h>
11848 #define FILE_base(fp)   $stdio_base
11849 #define FILE_bufsiz(fp) $stdio_bufsiz
11850 int main() {
11851         FILE *fp = fopen("try.c", "r");
11852         char c = getc(fp);
11853         if (
11854                 19 <= FILE_bufsiz(fp) &&
11855                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
11856         )
11857                 exit(0);
11858         exit(1);
11859 }
11860 EOP
11861         set try
11862         if eval $compile; then
11863                 if ./try; then
11864                         echo "And its _base field acts std."
11865                         val="$define"
11866                 else
11867                         echo "But its _base field isn't std."
11868                 fi
11869         else
11870                 echo "However, it seems to be lacking the _base field."
11871         fi
11872         $rm -f try.c try
11873         ;;
11874 esac
11875 set d_stdiobase
11876 eval $setvar
11877
11878 $cat >&4 <<EOM
11879 Checking how to access stdio streams by file descriptor number...
11880 EOM
11881 case "$stdio_stream_array" in
11882 '')     $cat >try.c <<EOCP
11883 #include <stdio.h>
11884 int main() {
11885   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
11886     printf("yes\n");
11887 }
11888 EOCP
11889         for s in _iob __iob __sF
11890         do
11891                 set try -DSTDIO_STREAM_ARRAY=$s
11892                 if eval $compile; then
11893                         case "`./try$exe_ext`" in
11894                         yes)    stdio_stream_array=$s; break ;;
11895                         esac
11896                 fi
11897         done
11898         $rm -f try.* try$exe_ext
11899 esac
11900 case "$stdio_stream_array" in
11901 '')     $cat >&4 <<EOM
11902 I can't figure out how to access stdio streams by file descriptor number.
11903 EOM
11904         d_stdio_stream_array="$undef"
11905         ;;
11906 *)      $cat >&4 <<EOM
11907 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
11908 EOM
11909         d_stdio_stream_array="$define"
11910         ;;
11911 esac
11912
11913 : see if strcoll exists
11914 set strcoll d_strcoll
11915 eval $inlibc
11916
11917 : check for structure copying
11918 echo " "
11919 echo "Checking to see if your C compiler can copy structs..." >&4
11920 $cat >try.c <<'EOCP'
11921 int main()
11922 {
11923         struct blurfl {
11924                 int dyick;
11925         } foo, bar;
11926
11927         foo = bar;
11928 }
11929 EOCP
11930 if $cc -c try.c >/dev/null 2>&1 ; then
11931         val="$define"
11932         echo "Yup, it can."
11933 else
11934         val="$undef"
11935         echo "Nope, it can't."
11936 fi
11937 set d_strctcpy
11938 eval $setvar
11939 $rm -f try.*
11940
11941 : see if strerror and/or sys_errlist[] exist
11942 echo " "
11943 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
11944     if set strerror val -f d_strerror; eval $csym; $val; then
11945                 echo 'strerror() found.' >&4
11946                 d_strerror="$define"
11947                 d_strerrm='strerror(e)'
11948                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11949                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
11950                         d_syserrlst="$define"
11951                 else
11952                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
11953                         d_syserrlst="$undef"
11954                 fi
11955     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
11956                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
11957                 echo 'strerror() found in string header.' >&4
11958                 d_strerror="$define"
11959                 d_strerrm='strerror(e)'
11960                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11961                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
11962                                 d_syserrlst="$define"
11963                 else
11964                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
11965                         d_syserrlst="$undef"
11966                 fi
11967     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
11968                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
11969                 d_strerror="$undef"
11970                 d_syserrlst="$define"
11971                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
11972     else
11973                 echo 'strerror() and sys_errlist[] NOT found.' >&4
11974                 d_strerror="$undef"
11975                 d_syserrlst="$undef"
11976                 d_strerrm='"unknown"'
11977     fi
11978 fi
11979
11980 : see if strtod exists
11981 set strtod d_strtod
11982 eval $inlibc
11983
11984 : see if strtol exists
11985 set strtol d_strtol
11986 eval $inlibc
11987
11988 : see if strtold exists
11989 set strtold d_strtold
11990 eval $inlibc
11991
11992 : see if strtoll exists
11993 set strtoll d_strtoll
11994 eval $inlibc
11995
11996 case "$d_longlong-$d_strtoll" in
11997 "$define-$define")
11998         $cat <<EOM
11999 Checking whether your strtoll() works okay...
12000 EOM
12001         $cat >try.c <<'EOCP'
12002 #include <errno.h>
12003 #ifdef __hpux
12004 #define strtoll __strtoll
12005 #endif
12006 #ifdef __EMX__
12007 #define strtoll _strtoll
12008 #endif
12009 #include <stdio.h>
12010 extern long long int strtoll(char *s, char **, int); 
12011 static int bad = 0;
12012 int check(char *s, long long ell, int een) {
12013         long long gll;
12014         errno = 0;
12015         gll = strtoll(s, 0, 10);
12016         if (!((gll == ell) && (errno == een)))
12017                 bad++;
12018 }
12019 int main() {
12020         check(" 1",                                      1LL, 0);
12021         check(" 0",                                      0LL, 0);
12022         check("-1",                                     -1LL, 0);
12023         check("-9223372036854775808", -9223372036854775808LL, 0);
12024         check("-9223372036854775808", -9223372036854775808LL, 0);
12025         check(" 9223372036854775807",  9223372036854775807LL, 0);
12026         check("-9223372036854775808", -9223372036854775808LL, 0);
12027         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
12028         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
12029         if (!bad)
12030                 printf("ok\n");
12031 }
12032 EOCP
12033         set try
12034         if eval $compile; then
12035                 yyy=`./try`
12036                 case "$yyy" in
12037                 ok) echo "Your strtoll() seems to be working okay." ;;
12038                 *) cat <<EOM >&4
12039 Your strtoll() doesn't seem to be working okay.
12040 EOM
12041                    d_strtoll="$undef"
12042                    ;;
12043                 esac
12044         else
12045                 echo "(I can't seem to compile the test program--assuming it doesn't)"
12046                 d_strtoll="$undef"
12047         fi
12048         ;;
12049 esac
12050
12051 : see if strtoq exists
12052 set strtoq d_strtoq
12053 eval $inlibc
12054
12055 : see if strtoul exists
12056 set strtoul d_strtoul
12057 eval $inlibc
12058
12059 case "$d_strtoul" in
12060 "$define")
12061         $cat <<EOM
12062 Checking whether your strtoul() works okay...
12063 EOM
12064         $cat >try.c <<'EOCP'
12065 #include <errno.h>
12066 #include <stdio.h>
12067 extern unsigned long int strtoul(char *s, char **, int); 
12068 static int bad = 0;
12069 void check(char *s, unsigned long eul, int een) {
12070         unsigned long gul;
12071         errno = 0;
12072         gul = strtoul(s, 0, 10);
12073         if (!((gul == eul) && (errno == een)))
12074                 bad++;
12075 }
12076 int main() {
12077         check(" 1", 1L, 0);
12078         check(" 0", 0L, 0);
12079 EOCP
12080         case "$longsize" in
12081         8)
12082             $cat >>try.c <<'EOCP'
12083         check("18446744073709551615", 18446744073709551615UL, 0);
12084         check("18446744073709551616", 18446744073709551615UL, ERANGE);
12085 #if 0 /* strtoul() for /^-/ strings is undefined. */
12086         check("-1", 18446744073709551615UL, 0);
12087         check("-18446744073709551614", 2, 0);
12088         check("-18446744073709551615", 1, 0);
12089         check("-18446744073709551616", 18446744073709551615UL, ERANGE);
12090         check("-18446744073709551617", 18446744073709551615UL, ERANGE);
12091 #endif
12092 EOCP
12093                 ;;
12094         4)
12095                     $cat >>try.c <<'EOCP'
12096         check("4294967295", 4294967295UL, 0);
12097         check("4294967296", 4294967295UL, ERANGE);
12098 #if 0 /* strtoul() for /^-/ strings is undefined. */
12099         check("-1", 4294967295UL, 0);
12100         check("-4294967294", 2, 0);
12101         check("-4294967295", 1, 0);
12102         check("-4294967296", 4294967295UL, ERANGE);
12103         check("-4294967297", 4294967295UL, ERANGE);
12104 #endif
12105 EOCP
12106                 ;;
12107         *)
12108 : Should we write these tests to be more portable by sprintf-ing
12109 : ~0 and then manipulating that char string as input for strtol?
12110                 ;;
12111         esac
12112         $cat >>try.c <<'EOCP'
12113         if (!bad)
12114                 printf("ok\n");
12115         return 0;
12116 }
12117 EOCP
12118         set try
12119         if eval $compile; then
12120                 case "`./try`" in
12121                 ok) echo "Your strtoul() seems to be working okay." ;;
12122                 *) cat <<EOM >&4
12123 Your strtoul() doesn't seem to be working okay.
12124 EOM
12125                    d_strtoul="$undef"
12126                    ;;
12127                 esac
12128         fi
12129         ;;
12130 esac
12131
12132 : see if strtoull exists
12133 set strtoull d_strtoull
12134 eval $inlibc
12135
12136 case "$d_longlong-$d_strtoull" in
12137 "$define-$define")
12138         $cat <<EOM
12139 Checking whether your strtoull() works okay...
12140 EOM
12141         $cat >try.c <<'EOCP'
12142 #include <errno.h>
12143 #ifdef __hpux
12144 #define strtoull __strtoull
12145 #endif
12146 #include <stdio.h>
12147 extern unsigned long long int strtoull(char *s, char **, int); 
12148 static int bad = 0;
12149 int check(char *s, long long eull, int een) {
12150         long long gull;
12151         errno = 0;
12152         gull = strtoull(s, 0, 10);
12153         if (!((gull == eull) && (errno == een)))
12154                 bad++;
12155 }
12156 int main() {
12157         check(" 1",                                        1LL, 0);
12158         check(" 0",                                        0LL, 0);
12159         check("18446744073709551615",  18446744073709551615ULL, 0);
12160         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
12161 #if 0 /* strtoull() for /^-/ strings is undefined. */
12162         check("-1",                    18446744073709551615ULL, 0);
12163         check("-18446744073709551614",                     2LL, 0);
12164         check("-18446744073709551615",                     1LL, 0);
12165         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
12166         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
12167 #endif
12168         if (!bad)
12169                 printf("ok\n");
12170 }
12171 EOCP
12172         set try
12173         if eval $compile; then
12174                 case "`./try`" in
12175                 ok) echo "Your strtoull() seems to be working okay." ;;
12176                 *) cat <<EOM >&4
12177 Your strtoull() doesn't seem to be working okay.
12178 EOM
12179                    d_strtoull="$undef"
12180                    ;;
12181                 esac
12182         fi
12183         ;;
12184 esac
12185
12186 : see if strtouq exists
12187 set strtouq d_strtouq
12188 eval $inlibc
12189
12190 case "$d_strtouq" in
12191 "$define")
12192         $cat <<EOM
12193 Checking whether your strtouq() works okay...
12194 EOM
12195         $cat >try.c <<'EOCP'
12196 #include <errno.h>
12197 #include <stdio.h>
12198 extern unsigned long long int strtouq(char *s, char **, int); 
12199 static int bad = 0;
12200 void check(char *s, unsigned long long eull, int een) {
12201         unsigned long long gull;
12202         errno = 0;
12203         gull = strtouq(s, 0, 10);
12204         if (!((gull == eull) && (errno == een)))
12205                 bad++;
12206 }
12207 int main() {
12208         check(" 1",                                        1LL, 0);
12209         check(" 0",                                        0LL, 0);
12210         check("18446744073709551615",  18446744073709551615ULL, 0);
12211         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
12212 #if 0 /* strtouq() for /^-/ strings is undefined. */
12213         check("-1",                    18446744073709551615ULL, 0);
12214         check("-18446744073709551614",                     2LL, 0);
12215         check("-18446744073709551615",                     1LL, 0);
12216         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
12217         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
12218 #endif
12219         if (!bad)
12220                 printf("ok\n");
12221         return 0;
12222 }
12223 EOCP
12224         set try
12225         if eval $compile; then
12226                 case "`./try`" in
12227                 ok) echo "Your strtouq() seems to be working okay." ;;
12228                 *) cat <<EOM >&4
12229 Your strtouq() doesn't seem to be working okay.
12230 EOM
12231                    d_strtouq="$undef"
12232                    ;;
12233                 esac
12234         fi
12235         ;;
12236 esac
12237
12238 : see if strxfrm exists
12239 set strxfrm d_strxfrm
12240 eval $inlibc
12241
12242 : see if symlink exists
12243 set symlink d_symlink
12244 eval $inlibc
12245
12246 : see if syscall exists
12247 set syscall d_syscall
12248 eval $inlibc
12249
12250 : see if sysconf exists
12251 set sysconf d_sysconf
12252 eval $inlibc
12253
12254 : see if system exists
12255 set system d_system
12256 eval $inlibc
12257
12258 : see if tcgetpgrp exists
12259 set tcgetpgrp d_tcgetpgrp
12260 eval $inlibc
12261
12262 : see if tcsetpgrp exists
12263 set tcsetpgrp d_tcsetpgrp
12264 eval $inlibc
12265
12266 : see if prototype for telldir is available
12267 echo " "
12268 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
12269 eval $hasproto
12270
12271 : see if this is a sys/times.h system
12272 set sys/times.h i_systimes
12273 eval $inhdr
12274
12275 : see if times exists
12276 echo " "
12277 if set times val -f d_times; eval $csym; $val; then
12278         echo 'times() found.' >&4
12279         d_times="$define"
12280         inc=''
12281         case "$i_systimes" in
12282         "$define") inc='sys/times.h';;
12283         esac
12284         rp="What is the type returned by times() on this system?"
12285         set clock_t clocktype long stdio.h sys/types.h $inc
12286         eval $typedef_ask
12287 else
12288         echo 'times() NOT found, hope that will do.' >&4
12289         d_times="$undef"
12290         clocktype='int'
12291 fi
12292
12293 : see if truncate exists
12294 set truncate d_truncate
12295 eval $inlibc
12296
12297 : see if tzname[] exists
12298 echo " "
12299 if set tzname val -a d_tzname; eval $csym; $val; then
12300         val="$define"
12301         echo 'tzname[] found.' >&4
12302 else
12303         val="$undef"
12304         echo 'tzname[] NOT found.' >&4
12305 fi
12306 set d_tzname
12307 eval $setvar
12308
12309 : see if umask exists
12310 set umask d_umask
12311 eval $inlibc
12312
12313 : see if ustat exists
12314 set ustat d_ustat
12315 eval $inlibc
12316
12317 : backward compatibility for d_hvfork
12318 if test X$d_hvfork != X; then
12319         d_vfork="$d_hvfork"
12320         d_hvfork=''
12321 fi
12322 : see if there is a vfork
12323 val=''
12324 set vfork val
12325 eval $inlibc
12326
12327 : Ok, but do we want to use it. vfork is reportedly unreliable in 
12328 : perl on Solaris 2.x, and probably elsewhere.
12329 case "$val" in
12330 $define)
12331         echo " "
12332         case "$usevfork" in
12333         false) dflt='n';;
12334         *) dflt='y';;
12335         esac
12336         cat <<'EOM'
12337  
12338 Perl can only use a vfork() that doesn't suffer from strict
12339 restrictions on calling functions or modifying global data in
12340 the child.  For example, glibc-2.1 contains such a vfork()
12341 that is unsuitable.  If your system provides a proper fork()
12342 call, chances are that you do NOT want perl to use vfork().
12343
12344 EOM
12345         rp="Do you still want to use vfork()?"
12346         . ./myread
12347         case "$ans" in
12348         y|Y) ;;
12349         *)
12350                 echo "Ok, we won't use vfork()."
12351                 val="$undef"
12352                 ;;
12353         esac
12354         ;;
12355 esac
12356 set d_vfork
12357 eval $setvar
12358 case "$d_vfork" in
12359 $define) usevfork='true';;
12360 *) usevfork='false';;
12361 esac
12362
12363 : see if this is an sysdir system
12364 set sys/dir.h i_sysdir
12365 eval $inhdr
12366
12367 : see if this is an sysndir system
12368 set sys/ndir.h i_sysndir
12369 eval $inhdr
12370
12371 : see if closedir exists
12372 set closedir d_closedir
12373 eval $inlibc
12374
12375 case "$d_closedir" in
12376 "$define")
12377         echo " "
12378         echo "Checking whether closedir() returns a status..." >&4
12379         cat > closedir.c <<EOM
12380 #$i_dirent I_DIRENT             /**/
12381 #$i_sysdir I_SYS_DIR            /**/
12382 #$i_sysndir I_SYS_NDIR          /**/
12383 #$i_systypes I_SYS_TYPES        /**/
12384
12385 #if defined(I_SYS_TYPES)
12386 #include <sys/types.h>
12387 #endif
12388 #if defined(I_DIRENT)
12389 #include <dirent.h>
12390 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
12391 #include <sys/dir.h>
12392 #endif
12393 #else
12394 #ifdef I_SYS_NDIR
12395 #include <sys/ndir.h>
12396 #else
12397 #ifdef I_SYS_DIR
12398 #ifdef hp9000s500
12399 #include <ndir.h>       /* may be wrong in the future */
12400 #else
12401 #include <sys/dir.h>
12402 #endif
12403 #endif
12404 #endif
12405 #endif 
12406 int main() { return closedir(opendir(".")); }
12407 EOM
12408         set closedir
12409         if eval $compile_ok; then
12410                 if ./closedir > /dev/null 2>&1 ; then
12411                         echo "Yes, it does."
12412                         val="$undef"
12413                 else
12414                         echo "No, it doesn't."
12415                         val="$define"
12416                 fi
12417         else
12418                 echo "(I can't seem to compile the test program--assuming it doesn't)"
12419                 val="$define"
12420         fi
12421         ;;
12422 *)
12423         val="$undef";
12424         ;;
12425 esac
12426 set d_void_closedir
12427 eval $setvar
12428 $rm -f closedir*
12429 : see if there is a wait4
12430 set wait4 d_wait4
12431 eval $inlibc
12432
12433 : see if waitpid exists
12434 set waitpid d_waitpid
12435 eval $inlibc
12436
12437 : see if wcstombs exists
12438 set wcstombs d_wcstombs
12439 eval $inlibc
12440
12441 : see if wctomb exists
12442 set wctomb d_wctomb
12443 eval $inlibc
12444
12445 : preserve RCS keywords in files with variable substitution, grrr
12446 Date='$Date'
12447 Id='$Id'
12448 Log='$Log'
12449 RCSfile='$RCSfile'
12450 Revision='$Revision'
12451
12452 case "$crosscompile" in
12453 ''|[nN]*) crosscompile="$undef" ;;
12454 esac
12455
12456 case "$osname" in
12457 next|rhapsody|darwin) multiarch="$define" ;;
12458 esac
12459 case "$multiarch" in
12460 ''|[nN]*) multiarch="$undef" ;;
12461 esac
12462
12463 : check for alignment requirements
12464 echo " "
12465 case "$crosscompile$multiarch" in
12466 *$define*)
12467         $cat <<EOM
12468 You seem to be either cross-compiling or doing a multiarchitecture build,
12469 skipping the memory alignment check.
12470
12471 EOM
12472         case "$alignbytes" in
12473         '') alignbytes=8 ;;
12474         esac
12475         ;;
12476 *)
12477         case "$alignbytes" in
12478         '') echo "Checking alignment constraints..." >&4
12479                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
12480                         $cat >try.c <<'EOCP'
12481 typedef long double NV;
12482 EOCP
12483                 else
12484                         $cat >try.c <<'EOCP'
12485 typedef double NV;
12486 EOCP
12487                 fi
12488                 $cat >>try.c <<'EOCP'
12489 #include <stdio.h>
12490 struct foobar {
12491         char foo;
12492         NV bar;
12493 } try_algn;
12494 int main()
12495 {
12496     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
12497     return(0);
12498 }
12499 EOCP
12500                 set try
12501                 if eval $compile_ok; then
12502                         dflt=`./try`
12503                 else
12504                         dflt='8'
12505                         echo "(I can't seem to compile the test program...)"
12506                 fi
12507                 ;;
12508         *) dflt="$alignbytes"
12509                 ;;
12510         esac
12511         rp="Doubles must be aligned on a how-many-byte boundary?"
12512         . ./myread
12513         alignbytes="$ans"
12514         $rm -f try.c try
12515         ;;
12516 esac
12517
12518
12519 : set the base revision
12520 baserev=5.0
12521
12522 : check for ordering of bytes in a long
12523 echo " "
12524 case "$crosscompile$multiarch" in
12525 *$define*)
12526         $cat <<EOM
12527 You seem to be either cross-compiling or doing a multiarchitecture build,
12528 skipping the byteorder check.
12529
12530 EOM
12531         byteorder='0xffff'
12532         ;;
12533 *)
12534         case "$byteorder" in
12535         '')
12536                 $cat <<'EOM'
12537 In the following, larger digits indicate more significance.  A big-endian
12538 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
12539 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
12540 machines may have weird orders like 3412.  A Cray will report 87654321,
12541 an Alpha will report 12345678. If the test program works the default is
12542 probably right.
12543 I'm now running the test program...
12544 EOM
12545                 $cat >try.c <<'EOCP'
12546 #include <stdio.h>
12547 int main()
12548 {
12549         int i;
12550         union {
12551                 unsigned long l;
12552                 char c[sizeof(long)];
12553         } u;
12554
12555         if (sizeof(long) > 4)
12556                 u.l = (0x08070605L << 32) | 0x04030201L;
12557         else
12558                 u.l = 0x04030201L;
12559         for (i = 0; i < sizeof(long); i++)
12560                 printf("%c", u.c[i]+'0');
12561         printf("\n");
12562         exit(0);
12563 }
12564 EOCP
12565                 xxx_prompt=y
12566                 set try
12567                 if eval $compile && ./try > /dev/null; then
12568                         dflt=`./try`
12569                         case "$dflt" in
12570                         [1-4][1-4][1-4][1-4]|12345678|87654321)
12571                                 echo "(The test program ran ok.)"
12572                                 echo "byteorder=$dflt"
12573                                 xxx_prompt=n
12574                         ;;
12575                         ????|????????) echo "(The test program ran ok.)" ;;
12576                         *) echo "(The test program didn't run right for some reason.)" ;;
12577                         esac
12578                 else
12579                         dflt='4321'
12580                         cat <<'EOM'
12581 (I can't seem to compile the test program.  Guessing big-endian...)
12582 EOM
12583                 fi
12584                 case "$xxx_prompt" in
12585                 y)
12586                         rp="What is the order of bytes in a long?"
12587                         . ./myread
12588                         byteorder="$ans"
12589                         ;;
12590                 *)      byteorder=$dflt
12591                         ;;
12592                 esac
12593                 ;;
12594         esac
12595         $rm -f try.c try
12596         ;;
12597 esac
12598
12599
12600 : how do we catenate cpp tokens here?
12601 echo " "
12602 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
12603 $cat >cpp_stuff.c <<'EOCP'
12604 #define RCAT(a,b)a/**/b
12605 #define ACAT(a,b)a ## b
12606 RCAT(Rei,ser)
12607 ACAT(Cir,cus)
12608 EOCP
12609 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
12610 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
12611         echo "Oh!  Smells like ANSI's been here." >&4
12612         echo "We can catify or stringify, separately or together!"
12613         cpp_stuff=42
12614 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
12615         echo "Ah, yes!  The good old days!" >&4
12616         echo "However, in the good old days we don't know how to stringify and"
12617         echo "catify at the same time."
12618         cpp_stuff=1
12619 else
12620         $cat >&4 <<EOM
12621 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
12622 to have to edit the values of CAT[2-5] in config.h...
12623 EOM
12624         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
12625 fi
12626 $rm -f cpp_stuff.*
12627
12628 : see if this is a db.h system
12629 set db.h i_db
12630 eval $inhdr
12631
12632 case "$i_db" in
12633 $define)
12634         : Check db version.
12635         echo " "
12636         echo "Checking Berkeley DB version ..." >&4
12637         $cat >try.c <<EOCP
12638 #$d_const HASCONST
12639 #ifndef HASCONST
12640 #define const
12641 #endif
12642 #include <sys/types.h>
12643 #include <stdio.h>
12644 #include <db.h>
12645 int main()
12646 {
12647 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
12648     int Major, Minor, Patch ;
12649     unsigned long Version ;
12650     (void)db_version(&Major, &Minor, &Patch) ;
12651     printf("You have Berkeley DB Version 2 or greater\n");
12652
12653     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
12654                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
12655     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
12656                 Major, Minor, Patch) ;
12657
12658     /* check that db.h & libdb are compatible */
12659     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
12660         printf("db.h and libdb are incompatible\n") ;
12661         exit(3);        
12662     }
12663
12664     printf("db.h and libdb are compatible\n") ;
12665
12666     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
12667                 + DB_VERSION_PATCH ;
12668
12669     /* needs to be >= 2.3.4 */
12670     if (Version < 2003004) {
12671     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
12672         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
12673         exit(2);        
12674     }
12675
12676     exit(0);
12677 #else
12678 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
12679     printf("You have Berkeley DB Version 1\n");
12680     exit(0);    /* DB version < 2: the coast is clear. */
12681 #else
12682     exit(1);    /* <db.h> not Berkeley DB? */
12683 #endif
12684 #endif
12685 }
12686 EOCP
12687         set try
12688         if eval $compile_ok && ./try; then
12689                 echo 'Looks OK.' >&4
12690         else
12691                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
12692                 i_db=$undef
12693                 case " $libs " in
12694                 *"-ldb "*)
12695                         : Remove db from list of libraries to use
12696                         echo "Removing unusable -ldb from library list" >&4
12697                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
12698                         shift
12699                         libs="$*"
12700                         echo "libs = $libs" >&4
12701                         ;;
12702                 esac
12703         fi
12704         $rm -f try.*
12705         ;;
12706 esac
12707
12708 case "$i_db" in
12709 define)
12710         : Check the return type needed for hash 
12711         echo " "
12712         echo "Checking return type needed for hash for Berkeley DB ..." >&4
12713         $cat >try.c <<EOCP
12714 #$d_const HASCONST
12715 #ifndef HASCONST
12716 #define const
12717 #endif
12718 #include <sys/types.h>
12719 #include <db.h>
12720
12721 #ifndef DB_VERSION_MAJOR
12722 u_int32_t hash_cb (ptr, size)
12723 const void *ptr;
12724 size_t size;
12725 {
12726 }
12727 HASHINFO info;
12728 int main()
12729 {
12730         info.hash = hash_cb;
12731 }
12732 #endif
12733 EOCP
12734         if $cc $ccflags -c try.c >try.out 2>&1 ; then
12735                 if $contains warning try.out >>/dev/null 2>&1 ; then
12736                         db_hashtype='int'
12737                 else
12738                         db_hashtype='u_int32_t'
12739                 fi
12740         else
12741                 : XXX Maybe we should just give up here.
12742                 db_hashtype=u_int32_t
12743                 $cat try.out >&4
12744                 echo "Help:  I can't seem to compile the db test program." >&4
12745                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
12746         fi
12747         $rm -f try.*
12748         echo "Your version of Berkeley DB uses $db_hashtype for hash."
12749         ;;
12750 *)      db_hashtype=u_int32_t
12751         ;;
12752 esac
12753 case "$i_db" in
12754 define)
12755         : Check the return type needed for prefix 
12756         echo " "
12757         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
12758         cat >try.c <<EOCP
12759 #$d_const HASCONST
12760 #ifndef HASCONST
12761 #define const
12762 #endif
12763 #include <sys/types.h>
12764 #include <db.h>
12765
12766 #ifndef DB_VERSION_MAJOR
12767 size_t prefix_cb (key1, key2)
12768 const DBT *key1;
12769 const DBT *key2;
12770 {
12771 }
12772 BTREEINFO info;
12773 int main()
12774 {
12775         info.prefix = prefix_cb;
12776 }
12777 #endif
12778 EOCP
12779         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
12780                 if $contains warning try.out >>/dev/null 2>&1 ; then
12781                         db_prefixtype='int'
12782                 else
12783                         db_prefixtype='size_t'
12784                 fi
12785         else
12786                 db_prefixtype='size_t'
12787                 : XXX Maybe we should just give up here.
12788                 $cat try.out >&4
12789                 echo "Help:  I can't seem to compile the db test program." >&4
12790                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
12791         fi
12792         $rm -f try.*
12793         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
12794         ;;
12795 *)      db_prefixtype='size_t'
12796         ;;
12797 esac
12798
12799 : check for void type
12800 echo " "
12801 echo "Checking to see how well your C compiler groks the void type..." >&4
12802 case "$voidflags" in
12803 '')
12804         $cat >try.c <<'EOCP'
12805 #if TRY & 1
12806 void sub() {
12807 #else
12808 sub() {
12809 #endif
12810         extern void moo();      /* function returning void */
12811         void (*goo)();          /* ptr to func returning void */
12812 #if TRY & 8
12813         void *hue;              /* generic ptr */
12814 #endif
12815 #if TRY & 2
12816         void (*foo[10])();
12817 #endif
12818
12819 #if TRY & 4
12820         if(goo == moo) {
12821                 exit(0);
12822         }
12823 #endif
12824         exit(0);
12825 }
12826 int main() { sub(); }
12827 EOCP
12828         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
12829                 voidflags=$defvoidused
12830         echo "Good.  It appears to support void to the level $package wants.">&4
12831                 if $contains warning .out >/dev/null 2>&1; then
12832                         echo "However, you might get some warnings that look like this:"
12833                         $cat .out
12834                 fi
12835         else
12836 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
12837                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
12838                         echo "It supports 1..."
12839                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
12840                                 echo "It also supports 2..."
12841                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
12842                                         voidflags=7
12843                                         echo "And it supports 4 but not 8 definitely."
12844                                 else
12845                                         echo "It doesn't support 4..."
12846                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
12847                                                 voidflags=11
12848                                                 echo "But it supports 8."
12849                                         else
12850                                                 voidflags=3
12851                                                 echo "Neither does it support 8."
12852                                         fi
12853                                 fi
12854                         else
12855                                 echo "It does not support 2..."
12856                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
12857                                         voidflags=13
12858                                         echo "But it supports 4 and 8."
12859                                 else
12860                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
12861                                                 voidflags=5
12862                                                 echo "And it supports 4 but has not heard about 8."
12863                                         else
12864                                                 echo "However it supports 8 but not 4."
12865                                         fi
12866                                 fi
12867                         fi
12868                 else
12869                         echo "There is no support at all for void."
12870                         voidflags=0
12871                 fi
12872         fi
12873 esac
12874 case "$voidflags" in
12875 "$defvoidused") ;;
12876 *)      $cat >&4 <<'EOM'
12877   Support flag bits are:
12878     1: basic void declarations.
12879     2: arrays of pointers to functions returning void.
12880     4: operations between pointers to and addresses of void functions.
12881     8: generic void pointers.
12882 EOM
12883         dflt="$voidflags";
12884         rp="Your void support flags add up to what?"
12885         . ./myread
12886         voidflags="$ans"
12887         ;;
12888 esac
12889 $rm -f try.* .out
12890
12891
12892 : How can we generate normalized random numbers ?
12893 echo " "
12894 echo "Looking for a random number function..." >&4
12895 case "$randfunc" in
12896 '')
12897         if set drand48 val -f; eval $csym; $val; then
12898                 dflt="drand48"
12899                 echo "Good, found drand48()." >&4
12900         elif set random val -f; eval $csym; $val; then
12901                 dflt="random"
12902                 echo "OK, found random()." >&4
12903         else
12904                 dflt="rand"
12905                 echo "Yick, looks like I have to use rand()." >&4
12906         fi
12907         echo " "
12908         ;;
12909 *)
12910         dflt="$randfunc"
12911         ;;
12912 esac
12913 cont=true
12914
12915 case "$ccflags" in
12916 *-Dmy_rand=*|*-Dmy_srand=*)
12917         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
12918         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
12919         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
12920         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
12921         ;;
12922 esac
12923
12924 while $test "$cont"; do
12925         rp="Use which function to generate random numbers?"
12926         . ./myread
12927         if $test "$ans" = "$dflt"; then
12928                 : null
12929         else
12930                 randbits=''
12931         fi
12932         randfunc="$ans"
12933         if set $ans val -f; eval $csym; $val; then
12934                 cont=''
12935         else
12936                 dflt=y
12937                 rp="I cannot find function $ans. Use that name anyway?"
12938                 . ./myread
12939                 dflt=rand
12940                 case "$ans" in
12941                         [yY]*) cont='';;
12942                 esac
12943         fi
12944         case "$cont" in
12945         '')
12946                 case "$randfunc" in
12947                 drand48)
12948                         drand01="drand48()"
12949                         seedfunc="srand48"
12950                         randbits=48
12951                         randseedtype=long
12952                         ;;
12953                 rand|random)
12954                         case "$randbits" in
12955                         '')
12956 echo "Checking to see how many bits your $randfunc() function produces..." >&4
12957                                 $cat >try.c <<EOCP
12958 #$i_unistd I_UNISTD
12959 #$i_stdlib I_STDLIB
12960 #include <stdio.h>
12961 #ifdef I_UNISTD
12962 #  include <unistd.h>
12963 #endif
12964 #ifdef I_STDLIB
12965 #  include <stdlib.h>
12966 #endif
12967 int main()
12968 {
12969         register int i;
12970         register unsigned long tmp;
12971         register unsigned long max = 0L;
12972
12973         for (i = 1000; i; i--) {
12974                 tmp = (unsigned long) $randfunc();
12975                 if (tmp > max) max = tmp;
12976         }
12977         for (i = 0; max; i++)
12978                 max /= 2;
12979         printf("%d\n",i);
12980 }
12981 EOCP
12982                                 set try
12983                                 if eval $compile_ok; then
12984                                         dflt=`try`
12985                                 else
12986                                         dflt='?'
12987                                         echo "(I can't seem to compile the test program...)"
12988                                 fi
12989                                 ;;
12990                         *)
12991                                 dflt="$randbits"
12992                                 ;;
12993                         esac
12994                         rp="How many bits does your $randfunc() function produce?"
12995                         . ./myread
12996                         randbits="$ans"
12997                         $rm -f try.c try
12998                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12999                         seedfunc="s$randfunc"
13000                         randseedtype=unsigned
13001                         ;;
13002                 *)
13003                         dflt="31"
13004                         rp="How many bits does your $randfunc() function produce?"
13005                         . ./myread
13006                         randbits="$ans"
13007                         seedfunc="s$randfunc"
13008                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13009                         if set $seedfunc val -f; eval $csym; $val; then
13010                                 echo "(Using $seedfunc() to seed random generator)"
13011                         else
13012                                 echo "(Warning: no $seedfunc() to seed random generator)"
13013                                 seedfunc=rand
13014                         fi
13015                         randseedtype=unsigned
13016                         ;;
13017                 esac
13018                 ;;
13019         esac
13020 done
13021
13022 echo " "
13023 echo "Determining whether or not we are on an EBCDIC system..." >&4
13024 $cat >tebcdic.c <<'EOM'
13025 int main()
13026 {
13027   if ('M'==0xd4) return 0;
13028   return 1;
13029 }
13030 EOM
13031
13032 val=$undef
13033 set tebcdic
13034 if eval $compile_ok; then
13035         if ./tebcdic; then
13036                 echo "You seem to speak EBCDIC." >&4
13037                 val="$define"
13038         else
13039                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF8." >&4
13040         fi
13041 else
13042         echo "I'm unable to compile the test program." >&4
13043         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
13044 fi
13045 $rm -f tebcdic.c tebcdic
13046 set ebcdic
13047 eval $setvar
13048
13049 echo " "
13050 $cat >&4 <<EOM
13051 Checking how to flush all pending stdio output...
13052 EOM
13053 # I only know how to find the first 32 possibly open files on SunOS.
13054 # See also hints/sunos_4_1.sh and util.c  --AD
13055 case "$osname" in
13056 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
13057 esac
13058 $cat >>try.c <<EOCP
13059 #include <stdio.h>
13060 #$i_unistd I_UNISTD
13061 #ifdef I_UNISTD
13062 # include <unistd.h>
13063 #endif
13064 #$d_sysconf HAS_SYSCONF
13065 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
13066 #ifdef HAS_STDIO_STREAM_ARRAY
13067 # define STDIO_STREAM_ARRAY $stdio_stream_array
13068 #endif
13069 int main() {
13070   FILE* p = fopen("try.out", "w");
13071 #ifdef TRY_FPUTC
13072   fputc('x', p);
13073 #else
13074 # ifdef TRY_FPRINTF
13075   fprintf(p, "x");
13076 # endif
13077 #endif
13078 #ifdef TRY_FFLUSH_NULL
13079   fflush(NULL);
13080 #endif
13081 #ifdef TRY_FFLUSH_ALL
13082   {
13083     long open_max = -1;
13084 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
13085     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
13086 # else
13087 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
13088     open_max = sysconf(_SC_OPEN_MAX);
13089 #  else
13090 #   ifdef FOPEN_MAX
13091     open_max = FOPEN_MAX;
13092 #   else
13093 #    ifdef OPEN_MAX
13094     open_max = OPEN_MAX;
13095 #    else
13096 #     ifdef _NFILE
13097     open_max = _NFILE;
13098 #     endif
13099 #    endif
13100 #   endif
13101 #  endif
13102 # endif 
13103 # ifdef HAS_STDIO_STREAM_ARRAY
13104     if (open_max > 0) {
13105       long i;
13106       for (i = 0; i < open_max; i++)
13107             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
13108                 STDIO_STREAM_ARRAY[i]._file < open_max &&
13109                 STDIO_STREAM_ARRAY[i]._flag)
13110                 fflush(&STDIO_STREAM_ARRAY[i]);
13111     }   
13112   }
13113 # endif
13114 #endif
13115   _exit(42);
13116 }
13117 EOCP
13118 : first we have to find out how _not_ to flush
13119 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
13120     output=''
13121     set try -DTRY_FPUTC
13122     if eval $compile; then
13123             $rm -f try.out
13124             ./try$exe_ext 2>/dev/null
13125             if $test ! -s try.out -a "X$?" = X42; then
13126                 output=-DTRY_FPUTC
13127             fi
13128     fi
13129     case "$output" in
13130     '')
13131             set try -DTRY_FPRINTF
13132             $rm -f try.out
13133             if eval $compile; then
13134                     $rm -f try.out
13135                     ./try$exe_ext 2>/dev/null
13136                     if $test ! -s try.out -a "X$?" = X42; then
13137                         output=-DTRY_FPRINTF
13138                     fi
13139             fi
13140         ;;
13141     esac
13142 fi
13143 : check for fflush NULL behaviour
13144 case "$fflushNULL" in
13145 '')     set try -DTRY_FFLUSH_NULL $output
13146         if eval $compile; then
13147                 $rm -f try.out
13148                 ./try$exe_ext 2>/dev/null
13149                 code="$?"
13150                 if $test -s try.out -a "X$code" = X42; then
13151                         fflushNULL="`$cat try.out`"
13152                 else
13153                         if $test "X$code" != X42; then
13154                                 $cat >&4 <<EOM
13155 (If this test failed, don't worry, we'll try another method shortly.)
13156 EOM
13157                         fi
13158                 fi
13159         fi
13160         $rm -f core try.core core.try.*
13161         case "$fflushNULL" in
13162         x)      $cat >&4 <<EOM
13163 Your fflush(NULL) works okay for output streams.
13164 Let's see if it clobbers input pipes...
13165 EOM
13166 # As of mid-March 2000 all versions of Solaris appear to have a stdio
13167 # bug that improperly flushes the input end of pipes.  So we avoid the
13168 # autoflush on fork/system/exec support for now. :-(
13169 $cat >tryp.c <<EOCP
13170 #include <stdio.h>
13171 int
13172 main(int argc, char **argv)
13173 {
13174     char buf[1024];
13175     int i;
13176     char *bp = buf;
13177     while (1) {
13178         while ((i = getc(stdin)) != -1
13179                && (*bp++ = i) != '\n'
13180                && bp < &buf[1024])
13181         /* DO NOTHING */ ;
13182         *bp = '\0';
13183         fprintf(stdout, "%s", buf);
13184         fflush(NULL);
13185         if (i == -1)
13186             return 0;
13187         bp = buf;
13188     }
13189 }
13190 EOCP
13191                 fflushNULL="$define"
13192                 set tryp
13193                 if eval $compile; then
13194                     $rm -f tryp.out
13195                     $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
13196                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
13197                        $cat >&4 <<EOM
13198 fflush(NULL) seems to behave okay with input streams.
13199 EOM
13200                         fflushNULL="$define"
13201                     else
13202                         $cat >&4 <<EOM
13203 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
13204 EOM
13205                         fflushNULL="$undef"
13206                     fi
13207                 fi
13208                 $rm -f core tryp.c tryp.core core.tryp.*
13209                 ;;
13210         '')     $cat >&4 <<EOM
13211 Your fflush(NULL) isn't working (contrary to ANSI C).
13212 EOM
13213                 fflushNULL="$undef"
13214                 ;;
13215         *)      $cat >&4 <<EOM
13216 Cannot figure out whether your fflush(NULL) works or not.
13217 I'm assuming it doesn't (contrary to ANSI C).
13218 EOM
13219                 fflushNULL="$undef"
13220                 ;;
13221         esac
13222         ;;
13223 $define|true|[yY]*)
13224         fflushNULL="$define"
13225         ;;
13226 *)
13227         fflushNULL="$undef"
13228         ;;
13229 esac
13230 : check explicit looping only if NULL did not work, and if the pipe
13231 : bug does not show up on an explicit flush too
13232 case "$fflushNULL" in
13233 "$undef")
13234         $cat >tryp.c <<EOCP
13235 #include <stdio.h>
13236 int
13237 main(int argc, char **argv)
13238 {
13239     char buf[1024];
13240     int i;
13241     char *bp = buf;
13242     while (1) {
13243         while ((i = getc(stdin)) != -1
13244                && (*bp++ = i) != '\n'
13245                && bp < &buf[1024])
13246         /* DO NOTHING */ ;
13247         *bp = '\0';
13248         fprintf(stdout, "%s", buf);
13249         fflush(stdin);
13250         if (i == -1)
13251             return 0;
13252         bp = buf;
13253     }
13254 }
13255 EOCP
13256         set tryp
13257         if eval $compile; then
13258             $rm -f tryp.out
13259             $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
13260             if cmp tryp.c tryp.out >/dev/null 2>&1; then
13261                $cat >&4 <<EOM
13262 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
13263 EOM
13264                 : now check for fflushall behaviour
13265                 case "$fflushall" in
13266                 '')     set try -DTRY_FFLUSH_ALL $output
13267                         if eval $compile; then
13268                                 $cat >&4 <<EOM
13269 (Now testing the other method--but note that this also may fail.)
13270 EOM
13271                                 $rm -f try.out
13272                                 ./try$exe_ext 2>/dev/null
13273                                 if $test -s try.out -a "X$?" = X42; then
13274                                         fflushall="`$cat try.out`"
13275                                 fi
13276                         fi
13277                         $rm -f core try.core core.try.*
13278                         case "$fflushall" in
13279                         x)      $cat >&4 <<EOM
13280 Whew. Flushing explicitly all the stdio streams works.
13281 EOM
13282                                 fflushall="$define"
13283                                 ;;
13284                         '')     $cat >&4 <<EOM
13285 Sigh. Flushing explicitly all the stdio streams doesn't work.
13286 EOM
13287                                 fflushall="$undef"
13288                                 ;;
13289                         *)      $cat >&4 <<EOM
13290 Cannot figure out whether flushing stdio streams explicitly works or not.
13291 I'm assuming it doesn't.
13292 EOM
13293                                 fflushall="$undef"
13294                                 ;;
13295                         esac
13296                         ;;
13297                 "$define"|true|[yY]*)
13298                         fflushall="$define"
13299                         ;;
13300                 *)
13301                         fflushall="$undef"
13302                         ;;
13303                 esac
13304             else
13305                 $cat >&4 <<EOM
13306 All is futile.  Even fflush(stdin) clobbers input pipes!
13307 EOM
13308                 fflushall="$undef"
13309             fi
13310         else
13311             fflushall="$undef"
13312         fi
13313         $rm -f core tryp.c tryp.core core.tryp.*
13314         ;;
13315 *)      fflushall="$undef"
13316         ;;
13317 esac
13318
13319 case "$fflushNULL$fflushall" in
13320 undefundef)
13321         $cat <<EOM
13322 OK, I give up.  I cannot figure out how to flush pending stdio output.
13323 We won't be flushing handles at all before fork/exec/popen.
13324 EOM
13325         ;;
13326 esac
13327 $rm -f try.* try$exe_ext
13328
13329 : Store the full pathname to the ar program for use in the C program
13330 : Respect a hint or command line value for full_ar.
13331 case "$full_ar" in
13332 '') full_ar=$ar ;;
13333 esac
13334
13335 : Store the full pathname to the sed program for use in the C program
13336 full_sed=$sed
13337
13338 : see what type gids are declared as in the kernel
13339 echo " "
13340 echo "Looking for the type for group ids returned by getgid()."
13341 set gid_t gidtype xxx stdio.h sys/types.h
13342 eval $typedef
13343 case "$gidtype" in
13344 xxx)
13345         xxx=`./findhdr sys/user.h`
13346         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
13347         case $1 in
13348         unsigned) dflt="$1 $2" ;;
13349         *) dflt="$1" ;;
13350         esac
13351         ;;
13352 *) dflt="$gidtype";;
13353 esac
13354 case "$gidtype" in
13355 gid_t) echo "gid_t found." ;;
13356 *)      rp="What is the type for group ids returned by getgid()?"
13357         . ./myread
13358         gidtype="$ans"
13359         ;;
13360 esac
13361
13362 echo " "
13363 case "$gidtype" in
13364 *_t) zzz="$gidtype"     ;;
13365 *)   zzz="gid"          ;;
13366 esac
13367 echo "Checking the size of $zzz..." >&4 
13368 cat > try.c <<EOCP
13369 #include <sys/types.h>
13370 #include <stdio.h>
13371 int main() {
13372     printf("%d\n", (int)sizeof($gidtype));
13373     exit(0);
13374 }
13375 EOCP
13376 set try
13377 if eval $compile_ok; then
13378         yyy=`./try`
13379         case "$yyy" in
13380         '')     gidsize=4
13381                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
13382                 ;;
13383         *)      gidsize=$yyy
13384                 echo "Your $zzz is $gidsize bytes long."
13385                 ;;
13386         esac
13387 else
13388         gidsize=4
13389         echo "(I can't compile the test program--guessing $gidsize.)" >&4
13390 fi
13391
13392
13393 echo " "
13394 case "$gidtype" in
13395 *_t) zzz="$gidtype"     ;;
13396 *)   zzz="gid"          ;;
13397 esac
13398 echo "Checking the sign of $zzz..." >&4 
13399 cat > try.c <<EOCP
13400 #include <sys/types.h>
13401 #include <stdio.h>
13402 int main() {
13403         $gidtype foo = -1;
13404         if (foo < 0)
13405                 printf("-1\n");
13406         else
13407                 printf("1\n");
13408 }
13409 EOCP
13410 set try
13411 if eval $compile; then
13412         yyy=`./try`
13413         case "$yyy" in
13414         '')     gidsign=1
13415                 echo "(I can't execute the test program--guessing unsigned.)" >&4
13416                 ;;
13417         *)      gidsign=$yyy
13418                 case "$gidsign" in
13419                  1) echo "Your $zzz is unsigned." ;;
13420                 -1) echo "Your $zzz is signed."   ;;
13421                 esac
13422                 ;;
13423         esac
13424 else
13425         gidsign=1
13426         echo "(I can't compile the test program--guessing unsigned.)" >&4
13427 fi
13428
13429
13430 echo " "
13431
13432 if $test X"$quadtype" != X; then
13433
13434 echo "Checking how to print 64-bit integers..." >&4
13435
13436 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
13437         $cat >try.c <<'EOCP'
13438 #include <sys/types.h>
13439 #include <stdio.h>
13440 int main() {
13441   int q = 12345678901;
13442   printf("%ld\n", q);
13443 }
13444 EOCP
13445         set try
13446         if eval $compile; then
13447                 yyy=`./try$exe_ext`
13448                 case "$yyy" in
13449                 12345678901)
13450                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
13451                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
13452                         echo "We will use %d."
13453                         ;;
13454                 esac
13455         fi
13456 fi
13457
13458 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
13459         $cat >try.c <<'EOCP'
13460 #include <sys/types.h>
13461 #include <stdio.h>
13462 int main() {
13463   long q = 12345678901;
13464   printf("%ld\n", q);
13465 }
13466 EOCP
13467         set try
13468         if eval $compile; then
13469                 yyy=`./try$exe_ext`
13470                 case "$yyy" in
13471                 12345678901)
13472                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
13473                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
13474                         echo "We will use %ld."
13475                         ;;
13476                 esac
13477         fi
13478 fi
13479
13480 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
13481         $cat >try.c <<'EOCP'
13482 #include <sys/types.h>
13483 #include <inttypes.h>
13484 #include <stdio.h>
13485 int main() {
13486   int64_t q = 12345678901;
13487   printf("%" PRId64 "\n", q);
13488 }
13489 EOCP
13490         set try
13491         if eval $compile; then
13492                 yyy=`./try$exe_ext`
13493                 case "$yyy" in
13494                 12345678901)
13495                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
13496                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
13497                         echo "We will use the C9X style."
13498                         ;;
13499                 esac
13500         fi
13501 fi
13502
13503 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
13504         $cat >try.c <<'EOCP'
13505 #include <sys/types.h>
13506 #include <stdio.h>
13507 int main() {
13508   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
13509   printf("%lld\n", q);
13510 }
13511 EOCP
13512         set try
13513         if eval $compile; then
13514                 yyy=`./try$exe_ext`
13515                 case "$yyy" in
13516                 12345678901)
13517                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
13518                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
13519                         echo "We will use the %lld style."
13520                         ;;
13521                 esac
13522         fi
13523 fi
13524
13525 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
13526         $cat >try.c <<EOCP
13527 #include <sys/types.h>
13528 #include <stdio.h>
13529 int main() {
13530   $quadtype q = 12345678901;
13531   printf("%Ld\n", q);
13532 }
13533 EOCP
13534         set try
13535         if eval $compile; then
13536                 yyy=`./try$exe_ext`
13537                 case "$yyy" in
13538                 12345678901)
13539                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
13540                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
13541                         echo "We will use %Ld."
13542                         ;;
13543                 esac
13544         fi
13545 fi
13546
13547 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
13548         $cat >try.c <<EOCP
13549 #include <sys/types.h>
13550 #include <stdio.h>
13551 int main() {
13552   $quadtype q = 12345678901;
13553   printf("%qd\n", q);
13554 }
13555 EOCP
13556         set try
13557         if eval $compile; then
13558                 yyy=`./try$exe_ext`
13559                 case "$yyy" in
13560                 12345678901)
13561                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
13562                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
13563                         echo "We will use %qd."
13564                         ;;
13565                 esac
13566         fi
13567 fi
13568
13569 if $test X"$sPRId64" = X; then
13570         echo "Cannot figure out how to print 64-bit integers." >&4
13571 fi
13572
13573 $rm -f try try.*
13574
13575 fi
13576
13577 case "$sPRId64" in
13578 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
13579         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; 
13580         ;;
13581 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
13582         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; 
13583         ;;
13584 esac
13585
13586
13587 echo " "
13588 $echo "Checking the format strings to be used for Perl's internal types..." >&4
13589
13590 if $test X"$ivsize" = X8; then
13591         ivdformat="$sPRId64"
13592         uvuformat="$sPRIu64"
13593         uvoformat="$sPRIo64"
13594         uvxformat="$sPRIx64"
13595         uvXUformat="$sPRIXU64"
13596 else
13597         if $test X"$ivsize" = X"$longsize"; then
13598                 ivdformat='"ld"'
13599                 uvuformat='"lu"'
13600                 uvoformat='"lo"'
13601                 uvxformat='"lx"'
13602                 uvXUformat='"lX"'
13603         else
13604                 if $test X"$ivsize" = X"$intsize"; then
13605                         ivdformat='"d"'
13606                         uvuformat='"u"'
13607                         uvoformat='"o"'
13608                         uvxformat='"x"'
13609                         uvXUformat='"X"'
13610                 else
13611                         : far out
13612                         if $test X"$ivsize" = X"$shortsize"; then
13613                                 ivdformat='"hd"'
13614                                 uvuformat='"hu"'
13615                                 uvoformat='"ho"'
13616                                 uvxformat='"hx"'
13617                                 uvXUformat='"hX"'
13618                         fi
13619                 fi
13620         fi
13621 fi
13622
13623 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
13624         nveformat="$sPRIeldbl"
13625         nvfformat="$sPRIfldbl"
13626         nvgformat="$sPRIgldbl"
13627         nvEUformat="$sPRIEUldbl"
13628         nvFUformat="$sPRIFUldbl"
13629         nvGUformat="$sPRIGUldbl"
13630 else
13631         nveformat='"e"'
13632         nvfformat='"f"'
13633         nvgformat='"g"'
13634         nvEUformat='"E"'
13635         nvFUformat='"F"'
13636         nvGUformat='"G"'
13637 fi
13638
13639 case "$ivdformat" in
13640 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
13641     exit 1
13642     ;;
13643 esac
13644
13645
13646 echo " "
13647 $echo "Checking the format string to be used for gids..." >&4
13648
13649 case "$gidsign" in
13650 -1)     if $test X"$gidsize" = X"$ivsize"; then
13651                 gidformat="$ivdformat"
13652         else
13653                 if $test X"$gidsize" = X"$longsize"; then
13654                         gidformat='"ld"'
13655                 else
13656                         if $test X"$gidsize" = X"$intsize"; then
13657                                 gidformat='"d"'
13658                         else
13659                                 if $test X"$gidsize" = X"$shortsize"; then
13660                                         gidformat='"hd"'
13661                                 fi
13662                         fi
13663                 fi
13664         fi
13665         ;;
13666 *)      if $test X"$gidsize" = X"$uvsize"; then
13667                 gidformat="$uvuformat"
13668         else
13669                 if $test X"$gidsize" = X"$longsize"; then
13670                         gidformat='"lu"'
13671                 else
13672                         if $test X"$gidsize" = X"$intsize"; then
13673                                 gidformat='"u"'
13674                         else
13675                                 if $test X"$gidsize" = X"$shortsize"; then
13676                                         gidformat='"hu"'
13677                                 fi
13678                         fi
13679                 fi
13680         fi
13681         ;;
13682 esac
13683
13684 : see if getgroups exists
13685 set getgroups d_getgrps
13686 eval $inlibc
13687
13688 : see if setgroups exists
13689 set setgroups d_setgrps
13690 eval $inlibc
13691
13692
13693 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
13694 echo " "
13695 case "$d_getgrps$d_setgrps" in
13696 *define*)
13697         case "$groupstype" in
13698         '') dflt="$gidtype" ;;
13699         *)  dflt="$groupstype" ;;
13700         esac
13701         $cat <<EOM
13702 What type of pointer is the second argument to getgroups() and setgroups()?
13703 Usually this is the same as group ids, $gidtype, but not always.
13704
13705 EOM
13706         rp='What type pointer is the second argument to getgroups() and setgroups()?'
13707         . ./myread
13708         groupstype="$ans"
13709         ;;
13710 *)  groupstype="$gidtype";;
13711 esac
13712
13713 echo " "
13714 echo "Checking if your $make program sets \$(MAKE)..." >&4
13715 case "$make_set_make" in
13716 '')
13717         $sed 's/^X //' > testmake.mak << 'EOF'
13718 Xall:
13719 X       @echo 'maketemp="$(MAKE)"'
13720 EOF
13721         case "`$make -f testmake.mak 2>/dev/null`" in
13722         *maketemp=*) make_set_make='#' ;;
13723         *)      make_set_make="MAKE=$make" ;;
13724         esac
13725         $rm -f testmake.mak
13726         ;;
13727 esac
13728 case "$make_set_make" in
13729 '#') echo "Yup, it does.";;
13730 *) echo "Nope, it doesn't.";;
13731 esac
13732
13733 : see what type is used for mode_t
13734 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
13735 set mode_t modetype int stdio.h sys/types.h
13736 eval $typedef_ask
13737
13738 : see if stdarg is available
13739 echo " "
13740 if $test `./findhdr stdarg.h`; then
13741         echo "<stdarg.h> found." >&4
13742         valstd="$define"
13743 else
13744         echo "<stdarg.h> NOT found." >&4
13745         valstd="$undef"
13746 fi
13747
13748 : see if varags is available
13749 echo " "
13750 if $test `./findhdr varargs.h`; then
13751         echo "<varargs.h> found." >&4
13752 else
13753         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
13754 fi
13755
13756 : set up the varargs testing programs
13757 $cat > varargs.c <<EOP
13758 #ifdef I_STDARG
13759 #include <stdarg.h>
13760 #endif
13761 #ifdef I_VARARGS
13762 #include <varargs.h>
13763 #endif
13764
13765 #ifdef I_STDARG
13766 int f(char *p, ...)
13767 #else
13768 int f(va_alist)
13769 va_dcl
13770 #endif
13771 {
13772         va_list ap;
13773 #ifndef I_STDARG
13774         char *p;
13775 #endif
13776 #ifdef I_STDARG
13777         va_start(ap,p);
13778 #else
13779         va_start(ap);
13780         p = va_arg(ap, char *);
13781 #endif
13782         va_end(ap);
13783 }
13784 EOP
13785 $cat > varargs <<EOP
13786 $startsh
13787 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
13788         echo "true"
13789 else
13790         echo "false"
13791 fi
13792 $rm -f varargs$_o
13793 EOP
13794 chmod +x varargs
13795
13796 : now check which varargs header should be included
13797 echo " "
13798 i_varhdr=''
13799 case "$valstd" in
13800 "$define")
13801         if `./varargs I_STDARG`; then
13802                 val='stdarg.h'
13803         elif `./varargs I_VARARGS`; then
13804                 val='varargs.h'
13805         fi
13806         ;;
13807 *)
13808         if `./varargs I_VARARGS`; then
13809                 val='varargs.h'
13810         fi
13811         ;;
13812 esac
13813 case "$val" in
13814 '')
13815 echo "I could not find the definition for va_dcl... You have problems..." >&4
13816         val="$undef"; set i_stdarg; eval $setvar
13817         val="$undef"; set i_varargs; eval $setvar
13818         ;;
13819 *) 
13820         set i_varhdr
13821         eval $setvar
13822         case "$i_varhdr" in
13823         stdarg.h)
13824                 val="$define"; set i_stdarg; eval $setvar
13825                 val="$undef"; set i_varargs; eval $setvar
13826                 ;;
13827         varargs.h)
13828                 val="$undef"; set i_stdarg; eval $setvar
13829                 val="$define"; set i_varargs; eval $setvar
13830                 ;;
13831         esac
13832         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
13833 esac
13834 $rm -f varargs*
13835
13836 : see if we need va_copy
13837 echo " "
13838 case "$i_stdarg" in
13839 "$define")
13840         $cat >try.c <<EOCP
13841 #include <stdarg.h>
13842 #include <stdio.h>
13843 #$i_stdlib I_STDLIB
13844 #ifdef I_STDLIB
13845 #include <stdlib.h>
13846 #endif
13847 #include <signal.h>
13848
13849 int
13850 ivfprintf(FILE *f, const char *fmt, va_list *valp)
13851 {
13852   return vfprintf(f, fmt, *valp);
13853 }
13854  
13855 int    
13856 myvfprintf(FILE *f, const  char *fmt, va_list val)
13857 {
13858   return ivfprintf(f, fmt, &val);
13859 }
13860       
13861 int
13862 myprintf(char *fmt, ...) 
13863 {
13864   va_list val;
13865   va_start(val, fmt);
13866   return myvfprintf(stdout, fmt, val); 
13867 }         
13868
13869 int
13870 main(int ac, char **av)
13871 {
13872   signal(SIGSEGV, exit);
13873
13874   myprintf("%s%cs all right, then\n", "that", '\'');                            
13875   exit(0);      
13876 }
13877 EOCP
13878         set try
13879         if eval $compile && ./try 2>&1 >/dev/null; then
13880                 case "`./try`" in
13881                 "that's all right, then")
13882                         okay=yes
13883                         ;;
13884                 esac
13885         fi
13886         case "$okay" in
13887         yes)    echo "It seems that you don't need va_copy()." >&4
13888                 need_va_copy="$undef"
13889                 ;;
13890         *)      echo "It seems that va_copy() or similar will be needed." >&4
13891                 need_va_copy="$define"
13892                 ;;
13893         esac
13894         $rm -f try.* core core.* *.core *.core.*
13895         ;;
13896 *)      echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
13897         ;;
13898 esac
13899
13900 : define a fucntion to check prototypes
13901 $cat > protochk <<EOSH
13902 $startsh
13903 cc="$cc"
13904 optimize="$optimize"
13905 ccflags="$ccflags"
13906 prototype="$prototype"
13907 define="$define"
13908 rm=$rm
13909 EOSH
13910
13911 $cat >> protochk <<'EOSH'
13912
13913 $rm -f try.c
13914 foo="$1"
13915 shift
13916 while test $# -ge 2; do
13917         case "$1" in
13918                 $define) echo "#include <$2>" >> try.c ;;
13919                 literal) echo "$2" >> try.c ;;
13920         esac
13921     shift 2
13922 done
13923 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
13924 cat >> try.c <<'EOCP'
13925 #ifdef CAN_PROTOTYPE
13926 #define _(args) args
13927 #else
13928 #define _(args) ()
13929 #endif
13930 EOCP
13931 echo "$foo" >> try.c
13932 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
13933 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
13934 status=$?
13935 $rm -f try.[co]
13936 exit $status
13937 EOSH
13938 chmod +x protochk
13939 $eunicefix protochk
13940
13941 : see what type is used for size_t
13942 rp="What is the type used for the length parameter for string functions?"
13943 set size_t sizetype 'unsigned int' stdio.h sys/types.h
13944 eval $typedef_ask
13945
13946 : check for type of arguments to gethostbyaddr. 
13947 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
13948         case "$d_gethbyaddr" in
13949         $define)
13950                 $cat <<EOM
13951
13952 Checking to see what type of arguments are accepted by gethostbyaddr().
13953 EOM
13954                 hdrs="$define sys/types.h
13955                         $d_socket sys/socket.h 
13956                         $i_niin netinet/in.h 
13957                         $i_netdb netdb.h
13958                         $i_unistd unistd.h"
13959                 : The first arg can 'char *' or 'void *'
13960                 : The second arg is some of integral type
13961                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
13962                         for yyy in size_t long int; do
13963                                 case "$netdb_host_type" in
13964                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
13965                                         if ./protochk "$try" $hdrs; then
13966                                                 echo "Your system accepts $xxx for the first arg."
13967                                                 echo "...and $yyy for the second arg."
13968                                                 netdb_host_type="$xxx"
13969                                                 netdb_hlen_type="$yyy"
13970                                         fi
13971                                         ;;
13972                                 esac
13973                         done
13974                 done
13975                 : In case none of those worked, prompt the user.
13976                 case "$netdb_host_type" in
13977                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
13978                         dflt='char *'
13979                         . ./myread
13980                         netdb_host_type=$ans
13981                         rp='What is the type for the 2nd argument to gethostbyaddr?'
13982                         dflt="$sizetype"
13983                         . ./myread
13984                         netdb_hlen_type=$ans
13985                         ;;
13986                 esac
13987                 ;;
13988         *)      : no gethostbyaddr, so pick harmless defaults
13989                 netdb_host_type='char *'
13990                 netdb_hlen_type="$sizetype"
13991                 ;;
13992         esac
13993         # Remove the "const" if needed. -- but then we'll have a 
13994         # prototype clash!
13995         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
13996 fi
13997
13998 : check for type of argument to gethostbyname. 
13999 if test "X$netdb_name_type" = X ; then
14000         case "$d_gethbyname" in
14001         $define)
14002                 $cat <<EOM
14003
14004 Checking to see what type of argument is accepted by gethostbyname().
14005 EOM
14006                 hdrs="$define sys/types.h
14007                         $d_socket sys/socket.h 
14008                         $i_niin netinet/in.h 
14009                         $i_netdb netdb.h
14010                         $i_unistd unistd.h"
14011                 for xxx in "const char *" "char *"; do
14012                         case "$netdb_name_type" in
14013                         '')     try="extern struct hostent *gethostbyname($xxx);"
14014                                 if ./protochk "$try" $hdrs; then
14015                                         echo "Your system accepts $xxx."
14016                                         netdb_name_type="$xxx"
14017                                 fi
14018                                 ;;
14019                         esac
14020                 done
14021                 : In case none of those worked, prompt the user.
14022                 case "$netdb_name_type" in
14023                 '')     rp='What is the type for the 1st argument to gethostbyname?'
14024                         dflt='char *'
14025                         . ./myread
14026                         netdb_name_type=$ans
14027                         ;;
14028                 esac
14029                 ;;
14030         *)      : no gethostbyname, so pick harmless default
14031                 netdb_name_type='char *'
14032                 ;;
14033         esac
14034 fi
14035
14036 : check for type of 1st argument to getnetbyaddr. 
14037 if test "X$netdb_net_type" = X ; then
14038         case "$d_getnbyaddr" in
14039         $define)
14040                 $cat <<EOM
14041
14042 Checking to see what type of 1st argument is accepted by getnetbyaddr().
14043 EOM
14044                 hdrs="$define sys/types.h
14045                         $d_socket sys/socket.h 
14046                         $i_niin netinet/in.h 
14047                         $i_netdb netdb.h
14048                         $i_unistd unistd.h"
14049                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
14050                         case "$netdb_net_type" in
14051                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
14052                                 if ./protochk "$try" $hdrs; then
14053                                         echo "Your system accepts $xxx."
14054                                         netdb_net_type="$xxx"
14055                                 fi
14056                                 ;;
14057                         esac
14058                 done
14059                 : In case none of those worked, prompt the user.
14060                 case "$netdb_net_type" in
14061                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
14062                         dflt='long'
14063                         . ./myread
14064                         netdb_net_type=$ans
14065                         ;;
14066                 esac
14067                 ;;
14068         *)      : no getnetbyaddr, so pick harmless default
14069                 netdb_net_type='long'
14070                 ;;
14071         esac
14072 fi
14073 : locate the preferred pager for this system
14074 case "$pager" in
14075 '')
14076         dflt=''
14077         case "$pg" in
14078         /*) dflt=$pg;;
14079         [a-zA-Z]:/*) dflt=$pg;;
14080         esac
14081         case "$more" in
14082         /*) dflt=$more;;
14083         [a-zA-Z]:/*) dflt=$more;;
14084         esac
14085         case "$less" in
14086         /*) dflt=$less;;
14087         [a-zA-Z]:/*) dflt=$less;;
14088         esac
14089         case "$dflt" in
14090         '') dflt=/usr/ucb/more;;
14091         esac
14092         ;;
14093 *) dflt="$pager";;
14094 esac
14095 echo " "
14096 fn=f/
14097 rp='What pager is used on your system?'
14098 . ./getfile
14099 pager="$ans"
14100
14101 : see what type pids are declared as in the kernel
14102 rp="What is the type of process ids on this system?"
14103 set pid_t pidtype int stdio.h sys/types.h
14104 eval $typedef_ask
14105
14106 : Find earliest binary compatible site_perl subdirectory perl can use.
14107 case "$bincompat5005" in
14108 "$define") xs_apiversion='5.005' ;;
14109 *) xs_apiversion=$version ;;   # The current site_perl version.
14110 esac
14111 : Find earliest pure perl site_perl subdirectory perl can use.
14112 : The versioned directories started at 5.005.
14113 pm_apiversion='5.005'
14114
14115 : check for length of pointer
14116 echo " "
14117 case "$ptrsize" in
14118 '')
14119         echo "Checking to see how big your pointers are..." >&4
14120         if test "$voidflags" -gt 7; then
14121                 echo '#define VOID_PTR char *' > try.c
14122         else
14123                 echo '#define VOID_PTR void *' > try.c
14124         fi
14125         $cat >>try.c <<'EOCP'
14126 #include <stdio.h>
14127 int main()
14128 {
14129     printf("%d\n", (int)sizeof(VOID_PTR));
14130     exit(0);
14131 }
14132 EOCP
14133         set try
14134         if eval $compile_ok; then
14135                 ptrsize=`./try`
14136                 echo "Your pointers are $ptrsize bytes long."
14137         else
14138                 dflt='4'
14139                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
14140                 rp="What is the size of a pointer (in bytes)?"
14141                 . ./myread
14142                 ptrsize="$ans"
14143         fi
14144         ;;
14145 esac
14146 $rm -f try.c try
14147
14148 : see if ar generates random libraries by itself
14149 echo " "
14150 echo "Checking how to generate random libraries on your machine..." >&4
14151 echo 'int bar1() { return bar2(); }' > bar1.c
14152 echo 'int bar2() { return 2; }' > bar2.c
14153 $cat > foo.c <<'EOP'
14154 int main() { printf("%d\n", bar1()); exit(0); }
14155 EOP
14156 $cc $ccflags -c bar1.c >/dev/null 2>&1
14157 $cc $ccflags -c bar2.c >/dev/null 2>&1
14158 $cc $ccflags -c foo.c >/dev/null 2>&1
14159 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
14160 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
14161         ./foobar >/dev/null 2>&1; then
14162         echo "$ar appears to generate random libraries itself."
14163         orderlib=false
14164         ranlib=":"
14165 elif $ar ts bar$_a >/dev/null 2>&1 &&
14166         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
14167         ./foobar >/dev/null 2>&1; then
14168                 echo "a table of contents needs to be added with '$ar ts'."
14169                 orderlib=false
14170                 ranlib="$ar ts"
14171 else
14172         case "$ranlib" in
14173         :) ranlib='';;
14174         '')
14175                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
14176                 $test -f $ranlib || ranlib=''
14177                 ;;
14178         esac
14179         if $test -n "$ranlib"; then
14180                 echo "your system has '$ranlib'; we'll use that."
14181                 orderlib=false
14182         else
14183                 echo "your system doesn't seem to support random libraries"
14184                 echo "so we'll use lorder and tsort to order the libraries."
14185                 orderlib=true
14186                 ranlib=":"
14187         fi
14188 fi
14189 $rm -f foo* bar* 
14190
14191 : check for type of arguments to select. 
14192 case "$selecttype" in
14193 '') case "$d_select" in
14194         $define)
14195                 echo " "
14196                 $cat <<EOM
14197 Checking to see what type of arguments are accepted by select().
14198 EOM
14199                 hdrs="$define sys/types.h
14200                         $i_systime sys/time.h 
14201                         $i_sysselct sys/select.h
14202                         $d_socket sys/socket.h"
14203                 : The first arg can be int, unsigned, or size_t
14204                 : The last arg may or may not be 'const'
14205                 val=''
14206                 : void pointer has been seen but using that
14207                 : breaks the selectminbits test
14208                 for xxx in 'fd_set *' 'int *'; do
14209                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
14210                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
14211                                         case "$val" in
14212                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
14213                                                 if ./protochk "$try" $hdrs; then
14214                                                         echo "Your system accepts $xxx."
14215                                                         val="$xxx"
14216                                                 fi
14217                                                 ;;
14218                                         esac
14219                                 done
14220                         done
14221                 done
14222                 case "$val" in
14223                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
14224                         case "$d_fd_set" in
14225                                 $define) dflt="fd_set *" ;;
14226                                 *)              dflt="int *" ;;
14227                         esac
14228                         . ./myread
14229                         val=$ans
14230                         ;;
14231                 esac
14232                 selecttype="$val"
14233                 ;;
14234         *)      : no select, so pick a harmless default
14235                 selecttype='int *'
14236                 ;;
14237         esac
14238         ;;
14239 esac
14240
14241 : check for the select 'width'
14242 case "$selectminbits" in
14243 '') case "$d_select" in
14244         $define)
14245                 $cat <<EOM
14246
14247 Checking to see on how many bits at a time your select() operates...
14248 EOM
14249                 $cat >try.c <<EOCP
14250 #include <sys/types.h>
14251 #$i_time I_TIME
14252 #$i_systime I_SYS_TIME
14253 #$i_systimek I_SYS_TIME_KERNEL
14254 #ifdef I_TIME
14255 #   include <time.h>
14256 #endif
14257 #ifdef I_SYS_TIME
14258 #   ifdef I_SYS_TIME_KERNEL
14259 #       define KERNEL
14260 #   endif
14261 #   include <sys/time.h>
14262 #   ifdef I_SYS_TIME_KERNEL
14263 #       undef KERNEL
14264 #   endif
14265 #endif
14266 #$i_sysselct I_SYS_SELECT
14267 #ifdef I_SYS_SELECT
14268 #include <sys/select.h>
14269 #endif
14270 #$d_socket HAS_SOCKET
14271 #ifdef HAS_SOCKET
14272 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
14273 #endif
14274 #include <stdio.h>
14275 $selecttype b;
14276 #define S sizeof(*(b))
14277 #define MINBITS 64
14278 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
14279 #define NBITS  (NBYTES * 8)
14280 int main() {
14281     char s[NBYTES];
14282     struct timeval t;
14283     int i;
14284     FILE* fp;
14285     int fd;
14286
14287     fclose(stdin);
14288     fp = fopen("try.c", "r");
14289     if (fp == 0)
14290       exit(1);
14291     fd = fileno(fp);
14292     if (fd < 0)
14293       exit(2);
14294     b = ($selecttype)s;
14295     for (i = 0; i < NBITS; i++)
14296         FD_SET(i, b);
14297     t.tv_sec  = 0;
14298     t.tv_usec = 0;
14299     select(fd + 1, b, 0, 0, &t);
14300     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
14301     printf("%d\n", i + 1);
14302     return 0;
14303 }
14304 EOCP
14305                 set try
14306                 if eval $compile_ok; then
14307                         selectminbits=`./try`
14308                         case "$selectminbits" in
14309                         '')     cat >&4 <<EOM
14310 Cannot figure out on how many bits at a time your select() operates.
14311 I'll play safe and guess it is 32 bits.
14312 EOM
14313                                 selectminbits=32
14314                                 bits="32 bits"
14315                                 ;;
14316                         1)      bits="1 bit" ;;
14317                         *)      bits="$selectminbits bits" ;;
14318                         esac
14319                         echo "Your select() operates on $bits at a time." >&4
14320                 else
14321                         rp='What is the minimum number of bits your select() operates on?'
14322                         case "$byteorder" in
14323                         1234|12345678)  dflt=32 ;;
14324                         *)              dflt=1  ;;
14325                         esac
14326                         . ./myread
14327                         val=$ans
14328                         selectminbits="$val"
14329                 fi
14330                 $rm -f try.* try
14331                 ;;
14332         *)      : no select, so pick a harmless default
14333                 selectminbits='32'
14334                 ;;
14335         esac
14336         ;;
14337 esac
14338
14339 : Trace out the files included by signal.h, then look for SIGxxx names.
14340 : Remove SIGARRAYSIZE used by HPUX.
14341 : Remove SIGSTKSIZE used by Linux.
14342 : Remove SIGSTKSZ used by Posix.
14343 : Remove SIGTYP void lines used by OS2.
14344 : Some cpps, like os390, dont give the file name anywhere
14345 if [ "X$fieldn" = X ]; then
14346         : Just make some guesses.  We check them later.
14347         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
14348 else
14349         xxx=`echo '#include <signal.h>' |
14350         $cppstdin $cppminus $cppflags 2>/dev/null |
14351         $grep '^[       ]*#.*include' | 
14352         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
14353 fi
14354 : Check this list of files to be sure we have parsed the cpp output ok.
14355 : This will also avoid potentially non-existent files, such 
14356 : as ../foo/bar.h
14357 xxxfiles=''
14358 for xx in $xxx /dev/null ; do
14359         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
14360 done
14361 : If we have found no files, at least try signal.h
14362 case "$xxxfiles" in
14363 '')     xxxfiles=`./findhdr signal.h` ;;
14364 esac
14365 xxx=`awk '
14366 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
14367         print substr($2, 4, 20)
14368 }
14369 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
14370         print substr($3, 4, 20)
14371 }' $xxxfiles`
14372 : Append some common names just in case the awk scan failed.
14373 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
14374 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
14375 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
14376 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
14377 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
14378
14379 : generate a few handy files for later
14380 $cat > signal.c <<'EOCP'
14381 #include <sys/types.h>
14382 #include <signal.h>
14383 #include <stdio.h>
14384 int main() {
14385
14386 /* Strange style to avoid deeply-nested #if/#else/#endif */
14387 #ifndef NSIG
14388 #  ifdef _NSIG
14389 #    define NSIG (_NSIG)
14390 #  endif
14391 #endif
14392
14393 #ifndef NSIG
14394 #  ifdef SIGMAX
14395 #    define NSIG (SIGMAX+1)
14396 #  endif
14397 #endif
14398
14399 #ifndef NSIG
14400 #  ifdef SIG_MAX
14401 #    define NSIG (SIG_MAX+1)
14402 #  endif
14403 #endif
14404
14405 #ifndef NSIG
14406 #  ifdef MAXSIG
14407 #    define NSIG (MAXSIG+1)
14408 #  endif
14409 #endif
14410
14411 #ifndef NSIG
14412 #  ifdef MAX_SIG
14413 #    define NSIG (MAX_SIG+1)
14414 #  endif
14415 #endif
14416
14417 #ifndef NSIG
14418 #  ifdef SIGARRAYSIZE
14419 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
14420 #  endif
14421 #endif
14422
14423 #ifndef NSIG
14424 #  ifdef _sys_nsig
14425 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
14426 #  endif
14427 #endif
14428
14429 /* Default to some arbitrary number that's big enough to get most
14430    of the common signals.
14431 */
14432 #ifndef NSIG
14433 #    define NSIG 50
14434 #endif
14435
14436 printf("NSIG %d\n", NSIG);
14437
14438 #ifndef JUST_NSIG
14439
14440 EOCP
14441
14442 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
14443 {
14444         printf "#ifdef SIG"; printf $1; printf "\n"
14445         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
14446         printf $1; printf ");\n"
14447         printf "#endif\n"
14448 }
14449 END {
14450         printf "#endif /* JUST_NSIG */\n";
14451         printf "exit(0);\n}\n";
14452 }
14453 ' >>signal.c
14454 $cat >signal.awk <<'EOP'
14455 BEGIN { ndups = 0 }
14456 $1 ~ /^NSIG$/ { nsig = $2 }
14457 ($1 !~ /^NSIG$/) && (NF == 2) {
14458     if ($2 > maxsig) { maxsig = $2 }
14459     if (sig_name[$2]) {
14460         dup_name[ndups] = $1
14461         dup_num[ndups] = $2
14462         ndups++ 
14463     }
14464     else {
14465         sig_name[$2] = $1
14466         sig_num[$2] = $2
14467     }
14468 }
14469 END { 
14470     if (nsig == 0) {
14471         nsig = maxsig + 1
14472     }
14473     printf("NSIG %d\n", nsig);
14474     for (n = 1; n < nsig; n++) {
14475         if (sig_name[n]) {
14476             printf("%s %d\n", sig_name[n], sig_num[n])
14477         }
14478         else {
14479             printf("NUM%d %d\n", n, n) 
14480         }
14481     }
14482     for (n = 0; n < ndups; n++) {
14483         printf("%s %d\n", dup_name[n], dup_num[n])
14484     }
14485 }
14486 EOP
14487 $cat >signal_cmd <<EOS
14488 $startsh
14489 if $test -s signal.lst; then
14490     echo "Using your existing signal.lst file"
14491         exit 0
14492 fi
14493 xxx="$xxx"
14494 EOS
14495 $cat >>signal_cmd <<'EOS'
14496
14497 set signal
14498 if eval $compile_ok; then
14499         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
14500 else
14501         echo "(I can't seem be able to compile the whole test program)" >&4
14502         echo "(I'll try it in little pieces.)" >&4
14503         set signal -DJUST_NSIG
14504         if eval $compile_ok; then
14505                 ./signal$_exe > signal.nsg
14506                 $cat signal.nsg
14507         else
14508                 echo "I can't seem to figure out how many signals you have." >&4
14509                 echo "Guessing 50." >&4
14510                 echo 'NSIG 50' > signal.nsg
14511         fi
14512         : Now look at all the signal names, one at a time.
14513         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
14514                 $cat > signal.c <<EOCP
14515 #include <sys/types.h>
14516 #include <signal.h>
14517 #include <stdio.h>
14518 int main() {
14519 printf("$xx %d\n", SIG${xx});
14520 return 0;
14521 }
14522 EOCP
14523                 set signal
14524                 if eval $compile; then
14525                         echo "SIG${xx} found."
14526                         ./signal$_exe  >> signal.ls1
14527                 else
14528                         echo "SIG${xx} NOT found."
14529                 fi
14530         done
14531         if $test -s signal.ls1; then
14532                 $cat signal.nsg signal.ls1 |
14533                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
14534         fi
14535
14536 fi
14537 if $test -s signal.lst; then
14538         :
14539 else
14540         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
14541         echo 'kill -l' >signal
14542         set X `csh -f <signal`
14543         $rm -f signal
14544         shift
14545         case $# in
14546         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
14547         esac
14548         echo $@ | $tr ' ' $trnl | \
14549             $awk '{ printf "%s %d\n", $1, ++s; }
14550                   END { printf "NSIG %d\n", ++s }' >signal.lst
14551 fi
14552 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
14553 EOS
14554 chmod a+x signal_cmd
14555 $eunicefix signal_cmd
14556
14557 : generate list of signal names
14558 echo " "
14559 case "$sig_name_init" in
14560 '') doinit=yes ;;
14561 *)  case "$sig_num_init" in
14562     ''|*,*) doinit=yes ;;
14563     esac ;;
14564 esac
14565 case "$doinit" in
14566 yes)
14567         echo "Generating a list of signal names and numbers..." >&4
14568         . ./signal_cmd
14569         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
14570         sig_name=`$awk 'BEGIN { printf "ZERO " }
14571                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
14572         sig_num=`$awk  'BEGIN { printf "0 " }
14573                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
14574         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
14575                              !/^NSIG/   { printf "\"%s\", ", $1 }
14576                              END        { printf "0\n" }' signal.lst`
14577         sig_num_init=`$awk  'BEGIN      { printf "0, " }
14578                              !/^NSIG/   { printf "%d, ", $2}
14579                              END        { printf "0\n"}' signal.lst`
14580         ;;
14581 esac
14582 echo "The following $sig_count signals are available:"
14583 echo " "
14584 echo $sig_name | $awk \
14585 'BEGIN { linelen = 0 }
14586 {
14587         for (i = 1; i <= NF; i++) {
14588                 name = "SIG" $i " "
14589                 linelen = linelen + length(name)
14590                 if (linelen > 70) {
14591                         printf "\n"
14592                         linelen = length(name)
14593                 }
14594                 printf "%s", name
14595         }
14596         printf "\n"
14597 }'
14598 sig_size=`echo $sig_name | awk '{print NF}'`
14599 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
14600
14601 echo " "
14602 case "$sizetype" in
14603 *_t) zzz="$sizetype"    ;;
14604 *)   zzz="filesize"     ;;
14605 esac
14606 echo "Checking the size of $zzz..." >&4 
14607 cat > try.c <<EOCP
14608 #include <sys/types.h>
14609 #include <stdio.h>
14610 int main() {
14611     printf("%d\n", (int)sizeof($sizetype));
14612     exit(0);
14613 }
14614 EOCP
14615 set try
14616 if eval $compile_ok; then
14617         yyy=`./try`
14618         case "$yyy" in
14619         '')     sizesize=4
14620                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
14621                 ;;
14622         *)      sizesize=$yyy
14623                 echo "Your $zzz size is $sizesize bytes."
14624                 ;;
14625         esac
14626 else
14627         sizesize=4
14628         echo "(I can't compile the test program--guessing $sizesize.)" >&4
14629 fi
14630
14631
14632 : check for socklen_t
14633 echo " "
14634 echo "Checking to see if you have socklen_t..." >&4
14635 $cat >try.c <<EOCP
14636 #include <sys/types.h>
14637 #$d_socket HAS_SOCKET
14638 #ifdef HAS_SOCKET
14639 #include <sys/socket.h>
14640 #endif
14641 int main() { socklen_t x = 16; }
14642 EOCP
14643 set try
14644 if eval $compile; then
14645         val="$define"
14646         echo "You have socklen_t."
14647 else
14648         val="$undef"
14649         echo "You do not have socklen_t."
14650         case "$sizetype" in
14651         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
14652         esac
14653 fi
14654 $rm -f try try.*
14655 set d_socklen_t
14656 eval $setvar
14657
14658 : see if this is a socks.h system
14659 set socks.h i_socks
14660 eval $inhdr
14661
14662 : check for type of the size argument to socket calls
14663 case "$d_socket" in
14664 "$define")
14665         $cat <<EOM
14666
14667 Checking to see what type is the last argument of accept().
14668 EOM
14669         yyy=''
14670         case "$d_socklen_t" in
14671         "$define") yyy="$yyy socklen_t"
14672         esac
14673         yyy="$yyy $sizetype int long unsigned"
14674         for xxx in $yyy; do
14675                 case "$socksizetype" in
14676                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
14677                         case "$usesocks" in
14678                         "$define")
14679                                 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
14680                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
14681                                         socksizetype="$xxx"
14682                                 fi
14683                                 ;;
14684                         *)      if ./protochk "$try"  $i_systypes sys/types.h $d_socket sys/socket.h; then
14685                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
14686                                         socksizetype="$xxx"
14687                                 fi
14688                                 ;;
14689                         esac
14690                         ;;
14691                 esac
14692         done
14693 : In case none of those worked, prompt the user.
14694         case "$socksizetype" in
14695         '')     rp='What is the type for socket address structure sizes?'
14696                 dflt='int'
14697                 . ./myread
14698                 socksizetype=$ans
14699                 ;;
14700         esac
14701         ;;
14702 *)      : no sockets, so pick relatively harmless default
14703         socksizetype='int'
14704         ;;
14705 esac
14706
14707 : see what type is used for signed size_t
14708 set ssize_t ssizetype int stdio.h sys/types.h
14709 eval $typedef
14710 dflt="$ssizetype"
14711 $cat > ssize.c <<EOM
14712 #include <stdio.h>
14713 #include <sys/types.h>
14714 #define Size_t $sizetype
14715 #define SSize_t $dflt
14716 int main()
14717 {
14718         if (sizeof(Size_t) == sizeof(SSize_t))
14719                 printf("$dflt\n");
14720         else if (sizeof(Size_t) == sizeof(int))
14721                 printf("int\n");
14722         else 
14723                 printf("long\n");
14724         exit(0);
14725 }
14726 EOM
14727 echo " "
14728 set ssize
14729 if eval $compile_ok && ./ssize > /dev/null; then
14730         ssizetype=`./ssize`
14731         echo "I'll be using $ssizetype for functions returning a byte count." >&4
14732 else
14733         $cat >&4 <<EOM
14734 Help! I can't compile and run the ssize_t test program: please enlighten me!
14735 (This is probably a misconfiguration in your system or libraries, and
14736 you really ought to fix it.  Still, I'll try anyway.)
14737
14738 I need a type that is the same size as $sizetype, but is guaranteed to
14739 be signed.  Common values are ssize_t, int and long.
14740
14741 EOM
14742         rp="What signed type is the same size as $sizetype?"
14743         . ./myread
14744         ssizetype="$ans"
14745 fi
14746 $rm -f ssize ssize.*
14747
14748 : see what type of char stdio uses.
14749 echo " "
14750 echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
14751 if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
14752         echo "Your stdio uses unsigned chars." >&4
14753         stdchar="unsigned char"
14754 else
14755         echo "Your stdio uses signed chars." >&4
14756         stdchar="char"
14757 fi
14758 $rm -f stdioh
14759
14760
14761
14762 : see if time exists
14763 echo " "
14764 if test "X$d_time" = X -o X"$timetype" = X; then
14765     if set time val -f d_time; eval $csym; $val; then
14766                 echo 'time() found.' >&4
14767                 val="$define"
14768                 rp="What is the type returned by time() on this system?"
14769                 set time_t timetype long stdio.h sys/types.h
14770                 eval $typedef_ask
14771     else
14772                 echo 'time() not found, hope that will do.' >&4
14773                 val="$undef"
14774                 timetype='int';
14775     fi
14776     set d_time
14777     eval $setvar
14778 fi
14779
14780 : see what type uids are declared as in the kernel
14781 echo " "
14782 echo "Looking for the type for user ids returned by getuid()."
14783 set uid_t uidtype xxx stdio.h sys/types.h
14784 eval $typedef
14785 case "$uidtype" in
14786 xxx)
14787         xxx=`./findhdr sys/user.h`
14788         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
14789         case $1 in
14790         unsigned) dflt="$1 $2" ;;
14791         *) dflt="$1" ;;
14792         esac
14793         ;;
14794 *) dflt="$uidtype";;
14795 esac
14796 case "$uidtype" in
14797 uid_t)  echo "uid_t found." ;;
14798 *)      rp="What is the type for user ids returned by getuid()?"
14799         . ./myread
14800         uidtype="$ans"
14801         ;;
14802 esac
14803
14804 echo " "
14805 case "$uidtype" in
14806 *_t) zzz="$uidtype"     ;;
14807 *)   zzz="uid"          ;;
14808 esac
14809 echo "Checking the size of $zzz..." >&4 
14810 cat > try.c <<EOCP
14811 #include <sys/types.h>
14812 #include <stdio.h>
14813 int main() {
14814     printf("%d\n", (int)sizeof($uidtype));
14815     exit(0);
14816 }
14817 EOCP
14818 set try
14819 if eval $compile_ok; then
14820         yyy=`./try`
14821         case "$yyy" in
14822         '')     uidsize=4
14823                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
14824                 ;;
14825         *)      uidsize=$yyy
14826                 echo "Your $zzz is $uidsize bytes long."
14827                 ;;
14828         esac
14829 else
14830         uidsize=4
14831         echo "(I can't compile the test program--guessing $uidsize.)" >&4
14832 fi
14833
14834 echo " "
14835 case "$uidtype" in
14836 *_t) zzz="$uidtype"     ;;
14837 *)   zzz="uid"          ;;
14838 esac
14839 echo "Checking the sign of $zzz..." >&4
14840 cat > try.c <<EOCP
14841 #include <sys/types.h>
14842 #include <stdio.h>
14843 int main() {
14844         $uidtype foo = -1;
14845         if (foo < 0)
14846                 printf("-1\n");
14847         else
14848                 printf("1\n");
14849 }
14850 EOCP
14851 set try
14852 if eval $compile; then
14853         yyy=`./try`
14854         case "$yyy" in
14855         '')     uidsign=1
14856                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14857                 ;;
14858         *)      uidsign=$yyy
14859                 case "$uidsign" in
14860                  1) echo "Your $zzz is unsigned." ;;
14861                 -1) echo "Your $zzz is signed."   ;;
14862                 esac
14863                 ;;
14864         esac
14865 else
14866         uidsign=1
14867         echo "(I can't compile the test program--guessing unsigned.)" >&4
14868 fi
14869
14870
14871
14872 echo " "
14873 $echo "Checking the format string to be used for uids..." >&4
14874
14875 case "$uidsign" in
14876 -1)     if $test X"$uidsize" = X"$ivsize"; then
14877                 uidformat="$ivdformat"
14878         else
14879                 if $test X"$uidsize" = X"$longsize"; then
14880                         uidformat='"ld"'
14881                 else
14882                         if $test X"$uidsize" = X"$intsize"; then
14883                                 uidformat='"d"'
14884                         else
14885                                 if $test X"$uidsize" = X"$shortsize"; then
14886                                         uidformat='"hd"'
14887                                 fi
14888                         fi
14889                 fi
14890         fi
14891         ;;
14892 *)      if $test X"$uidsize" = X"$uvsize"; then
14893                 uidformat="$uvuformat"
14894         else
14895                 if $test X"$uidsize" = X"$longsize"; then
14896                         uidformat='"lu"'
14897                 else
14898                         if $test X"$uidsize" = X"$intsize"; then
14899                                 uidformat='"u"'
14900                         else
14901                                 if $test X"$uidsize" = X"$shortsize"; then
14902                                         uidformat='"hu"'
14903                                 fi
14904                         fi
14905                 fi
14906         fi
14907         ;;
14908 esac
14909
14910 : see if dbm.h is available
14911 : see if dbmclose exists
14912 set dbmclose d_dbmclose
14913 eval $inlibc
14914
14915 case "$d_dbmclose" in
14916 $define)
14917         set dbm.h i_dbm
14918         eval $inhdr
14919         case "$i_dbm" in
14920         $define)
14921                 val="$undef"
14922                 set i_rpcsvcdbm
14923                 eval $setvar
14924                 ;;
14925         *)      set rpcsvc/dbm.h i_rpcsvcdbm
14926                 eval $inhdr
14927                 ;;
14928         esac
14929         ;;
14930 *)      echo "We won't be including <dbm.h>"
14931         val="$undef"
14932         set i_dbm
14933         eval $setvar
14934         val="$undef"
14935         set i_rpcsvcdbm
14936         eval $setvar
14937         ;;
14938 esac
14939
14940 : see if this is a sys/file.h system
14941 val=''
14942 set sys/file.h val
14943 eval $inhdr
14944
14945 : do we need to include sys/file.h ?
14946 case "$val" in
14947 "$define")
14948         echo " "
14949         if $h_sysfile; then
14950                 val="$define"
14951                 echo "We'll be including <sys/file.h>." >&4
14952         else
14953                 val="$undef"
14954                 echo "We won't be including <sys/file.h>." >&4
14955         fi
14956         ;;
14957 *)
14958         h_sysfile=false
14959         ;;
14960 esac
14961 set i_sysfile
14962 eval $setvar
14963
14964 : see if fcntl.h is there
14965 val=''
14966 set fcntl.h val
14967 eval $inhdr
14968
14969 : see if we can include fcntl.h
14970 case "$val" in
14971 "$define")
14972         echo " "
14973         if $h_fcntl; then
14974                 val="$define"
14975                 echo "We'll be including <fcntl.h>." >&4
14976         else
14977                 val="$undef"
14978                 if $h_sysfile; then
14979         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
14980                 else
14981                         echo "We won't be including <fcntl.h>." >&4
14982                 fi
14983         fi
14984         ;;
14985 *)
14986         h_fcntl=false
14987         val="$undef"
14988         ;;
14989 esac
14990 set i_fcntl
14991 eval $setvar
14992
14993 : see if this is a iconv.h system
14994 set iconv.h i_iconv
14995 eval $inhdr
14996
14997 : see if this is a ieeefp.h system
14998 set ieeefp.h i_ieeefp
14999 eval $inhdr
15000
15001 : see if this is a libutil.h system
15002 set libutil.h i_libutil
15003 eval $inhdr
15004
15005 : see if locale.h is available
15006 set locale.h i_locale
15007 eval $inhdr
15008
15009 : see if mach cthreads are available
15010 if test "X$usethreads" = "X$define"; then
15011         set mach/cthreads.h i_machcthr
15012         eval $inhdr
15013 else
15014         i_machcthr="$undef"
15015 fi
15016
15017
15018
15019 : see if this is a math.h system
15020 set math.h i_math
15021 eval $inhdr
15022
15023 : see if this is a mntent.h system
15024 set mntent.h i_mntent
15025 eval $inhdr
15026
15027 : see if ndbm.h is available
15028 set ndbm.h t_ndbm
15029 eval $inhdr
15030 case "$t_ndbm" in
15031 $define)
15032         : see if dbm_open exists
15033         set dbm_open d_dbm_open
15034         eval $inlibc
15035         case "$d_dbm_open" in
15036         $undef)
15037                 t_ndbm="$undef"
15038                 echo "We won't be including <ndbm.h>"
15039                 ;;
15040         esac
15041         ;;
15042 esac
15043 val="$t_ndbm"
15044 set i_ndbm
15045 eval $setvar
15046
15047 : see if net/errno.h is available
15048 val=''
15049 set net/errno.h val
15050 eval $inhdr
15051
15052 : Unfortunately, it causes problems on some systems.  Arrgh.
15053 case "$val" in
15054 $define)
15055         cat > try.c <<'EOM'
15056 #include <stdio.h>
15057 #include <errno.h>
15058 #include <net/errno.h>
15059 int func()
15060 {
15061         return ENOTSOCK;
15062 }
15063 EOM
15064         if $cc $ccflags -c try.c >/dev/null 2>&1; then
15065                 echo "We'll be including <net/errno.h>." >&4
15066         else
15067                 echo "We won't be including <net/errno.h>." >&4
15068                 val="$undef"
15069         fi
15070         $rm -f try.* try
15071         ;;
15072 esac
15073 set i_neterrno
15074 eval $setvar
15075
15076 : see if netinet/tcp.h is available
15077 set netinet/tcp.h i_netinettcp
15078 eval $inhdr
15079
15080 : see if this is a poll.h system
15081 set poll.h i_poll
15082 eval $inhdr
15083
15084 : see if this is a prot.h system
15085 set prot.h i_prot
15086 eval $inhdr
15087
15088 echo " "
15089 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
15090 $cat <<'EOSH' > Cppsym.know
15091 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
15092 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
15093 alliant alpha am29000 AM29000 amiga AMIGAOS AMIX
15094 ansi ANSI_C_SOURCE apollo ardent atarist att386 att3b BeOS
15095 BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
15096 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
15097 bull c cadmus clipper CMU COFF COMPILER_VERSION
15098 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
15099 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
15100 Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
15101 FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
15102 GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
15103 H3050R H3050RX hbullx20 hcx host_mips
15104 hp200 hp300 hp700 HP700 hp800 hp9000
15105 hp9000s200 hp9000s300 hp9000s400 hp9000s500
15106 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
15107 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
15108 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
15109 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
15110 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
15111 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
15112 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
15113 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
15114 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
15115 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
15116 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
15117 MATH_HAS_NO_SIDE_EFFECTS
15118 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
15119 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
15120 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
15121 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
15122 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
15123 NetBSD news1500 news1700 news1800 news1900 news3700
15124 news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
15125 ns32016 ns32332 ns32k nsc32000
15126 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
15127 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
15128 pc532 pdp11 PGC PIC plexus PORTAR posix
15129 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
15130 POSIX_C_SOURCE POSIX_SOURCE POWER
15131 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
15132 riscix riscos RT scs SCO sequent sgi SGI_SOURCE sinix
15133 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
15134 sony sony_news sonyrisc sparc sparclite spectrum
15135 stardent stdc STDC_EXT stratos sun sun3 sun386
15136 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
15137 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
15138 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
15139 sysV68 sysV88 Tek4132 Tek4300 titan
15140 tower tower32 tower32_200 tower32_600 tower32_700
15141 tower32_800 tower32_850 tss
15142 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
15143 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
15144 unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
15145 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
15146 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
15147 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
15148 z8000
15149 EOSH
15150 # Maybe put other stuff here too.
15151 cat <<EOSH >>Cppsym.know
15152 $osname
15153 EOSH
15154 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
15155 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
15156 $cat Cppsym.know > Cppsym.c
15157 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
15158 $rm -f Cppsym.a Cppsym.b Cppsym.c
15159 cat <<EOSH > Cppsym
15160 $startsh
15161 if $test \$# -gt 0; then
15162     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
15163     if $test -s Cppsym.got; then
15164         $rm -f Cppsym.got
15165         exit 0
15166     fi
15167     $rm -f Cppsym.got
15168     exit 1
15169 else
15170     $tr " " "$trnl" | ./Cppsym.try
15171     exit 0
15172 fi
15173 EOSH
15174 chmod +x Cppsym
15175 $eunicefix Cppsym
15176 cat <<EOSH > Cppsym.try
15177 $startsh
15178 cat <<'EOCP' > try.c
15179 #include <stdio.h>
15180 int main() {
15181 EOCP
15182 $awk \\
15183 EOSH
15184 cat <<'EOSH' >> Cppsym.try
15185 'length($1) > 0 {
15186     printf "#ifdef %s\n#if %s+0\nprintf(\"%s=%%ld\\n\", %s);\n#else\nprintf(\"%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
15187     printf "#ifdef _%s\n#if _%s+0\nprintf(\"_%s=%%ld\\n\", _%s);\n#else\nprintf(\"_%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
15188     printf "#ifdef __%s\n#if __%s+0\nprintf(\"__%s=%%ld\\n\", __%s);\n#else\nprintf(\"__%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
15189     printf "#ifdef __%s__\n#if __%s__+0\nprintf(\"__%s__=%%ld\\n\", __%s__);\n#else\nprintf(\"__%s__\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
15190 }'       >> try.c
15191 echo '}' >> try.c
15192 EOSH
15193 cat <<EOSH >> Cppsym.try
15194 ccflags="$ccflags"
15195 case "$osname-$gccversion" in
15196 irix-) ccflags="\$ccflags -woff 1178" ;;
15197 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
15198 esac
15199 $cc -o try $optimize \$ccflags $ldflags try.c $libs && ./try$exe_ext
15200 EOSH
15201 chmod +x Cppsym.try
15202 $eunicefix Cppsym.try
15203 ./Cppsym < Cppsym.know > Cppsym.true
15204 : now check the C compiler for additional symbols
15205 postprocess_cc_v=''
15206 case "$osname" in
15207 aix) postprocess_cc_v="|$tr , ' '" ;;
15208 esac
15209 $cat >ccsym <<EOS
15210 $startsh
15211 $cat >tmp.c <<EOF
15212 extern int foo;
15213 EOF
15214 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
15215 do
15216         case "\$i" in
15217         -D*) echo "\$i" | $sed 's/^-D//';;
15218         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
15219         esac
15220 done
15221 $rm -f try.c
15222 EOS
15223 postprocess_cc_v=''
15224 chmod +x ccsym
15225 $eunicefix ccsym
15226 ./ccsym > ccsym1.raw
15227 if $test -s ccsym1.raw; then
15228        $sort ccsym1.raw | $uniq >ccsym.raw
15229 else
15230        mv ccsym1.raw ccsym.raw
15231 fi
15232
15233 $awk '/\=/ { print $0; next }
15234         { print $0"=1" }' ccsym.raw >ccsym.list
15235 $awk '/\=/ { print $0; next }
15236         { print $0"=1" }' Cppsym.true >ccsym.true
15237 $comm -13 ccsym.true ccsym.list >ccsym.own
15238 $comm -12 ccsym.true ccsym.list >ccsym.com
15239 $comm -23 ccsym.true ccsym.list >ccsym.cpp
15240 also=''
15241 if $test -z ccsym.raw; then
15242         echo "Your C compiler doesn't seem to define any symbols!" >&4
15243         echo " "
15244         echo "However, your C preprocessor defines the following symbols:"
15245         $cat Cppsym.true
15246         ccsymbols=''
15247         cppsymbols=`$cat Cppsym.true`
15248         cppsymbols=`echo $cppsymbols`
15249         cppccsymbols="$cppsymbols"
15250 else
15251         if $test -s ccsym.com; then
15252                 echo "Your C compiler and pre-processor define these symbols:"
15253                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
15254                 also='also '
15255                 symbols='ones'
15256                 cppccsymbols=`$cat ccsym.com`
15257                 cppccsymbols=`echo $cppccsymbols`
15258                 $test "$silent" || sleep 1
15259         fi
15260         if $test -s ccsym.cpp; then
15261                 $test "$also" && echo " "
15262                 echo "Your C pre-processor ${also}defines the following symbols:"
15263                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
15264                 also='further '
15265                 cppsymbols=`$cat ccsym.cpp`
15266                 cppsymbols=`echo $cppsymbols`
15267                 $test "$silent" || sleep 1
15268         fi
15269         if $test -s ccsym.own; then
15270                 $test "$also" && echo " "
15271                 echo "Your C compiler ${also}defines the following cpp symbols:"
15272                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
15273                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
15274                 ccsymbols=`$cat ccsym.own`
15275                 ccsymbols=`echo $ccsymbols`
15276                 $test "$silent" || sleep 1
15277         fi
15278 fi
15279 $rm -f ccsym* Cppsym.*
15280
15281 : see if this is a termio system
15282 val="$undef"
15283 val2="$undef"
15284 val3="$undef"
15285 if $test `./findhdr termios.h`; then
15286         set tcsetattr i_termios
15287         eval $inlibc
15288         val3="$i_termios"
15289 fi
15290 echo " "
15291 case "$val3" in
15292 "$define") echo "You have POSIX termios.h... good!" >&4;;
15293 *) if ./Cppsym pyr; then
15294                 case "`/bin/universe`" in
15295                 ucb) if $test `./findhdr sgtty.h`; then
15296                                 val2="$define"
15297                                 echo "<sgtty.h> found." >&4
15298                         else
15299                                 echo "System is pyramid with BSD universe."
15300                                 echo "<sgtty.h> not found--you could have problems." >&4
15301                         fi;;
15302                 *) if $test `./findhdr termio.h`; then
15303                                 val="$define"
15304                                 echo "<termio.h> found." >&4
15305                         else
15306                                 echo "System is pyramid with USG universe."
15307                                 echo "<termio.h> not found--you could have problems." >&4
15308                         fi;;
15309                 esac
15310         elif ./usg; then
15311                 if $test `./findhdr termio.h`; then
15312                         echo "<termio.h> found." >&4
15313                         val="$define"
15314                 elif $test `./findhdr sgtty.h`; then
15315                         echo "<sgtty.h> found." >&4
15316                         val2="$define"
15317                 else
15318 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
15319                 fi
15320         else
15321                 if $test `./findhdr sgtty.h`; then
15322                         echo "<sgtty.h> found." >&4
15323                         val2="$define"
15324                 elif $test `./findhdr termio.h`; then
15325                         echo "<termio.h> found." >&4
15326                         val="$define"
15327                 else
15328 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
15329                 fi
15330         fi;;
15331 esac
15332 set i_termio; eval $setvar
15333 val=$val2; set i_sgtty; eval $setvar
15334 val=$val3; set i_termios; eval $setvar
15335
15336 : see if this is a shadow.h system
15337 set shadow.h i_shadow
15338 eval $inhdr
15339
15340 : see if stddef is available
15341 set stddef.h i_stddef
15342 eval $inhdr
15343
15344 : see if this is a sunmath.h system
15345 set sunmath.h i_sunmath
15346 eval $inhdr
15347
15348 : see if sys/access.h is available
15349 set sys/access.h i_sysaccess
15350 eval $inhdr
15351
15352 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
15353 set sys/filio.h i_sysfilio
15354 eval $inhdr
15355 echo " "
15356 if $test `./findhdr sys/ioctl.h`; then
15357         val="$define"
15358         echo '<sys/ioctl.h> found.' >&4
15359 else
15360         val="$undef"
15361         if $test $i_sysfilio = "$define"; then
15362             echo '<sys/ioctl.h> NOT found.' >&4
15363         else
15364                 $test $i_sgtty = "$define" && xxx="sgtty.h"
15365                 $test $i_termio = "$define" && xxx="termio.h"
15366                 $test $i_termios = "$define" && xxx="termios.h"
15367 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
15368         fi
15369 fi
15370 set i_sysioctl
15371 eval $setvar
15372
15373
15374 : see if this is a syslog.h system
15375 set syslog.h i_syslog
15376 eval $inhdr
15377
15378
15379 : see if this is a sys/mode.h system
15380 set sys/mode.h i_sysmode
15381 eval $inhdr
15382
15383 : see if sys/resource.h has to be included
15384 set sys/resource.h i_sysresrc
15385 eval $inhdr
15386
15387 : see if sys/security.h is available
15388 set sys/security.h i_syssecrt
15389 eval $inhdr
15390
15391 : see if this is a sys/statvfs.h system
15392 set sys/statvfs.h i_sysstatvfs
15393 eval $inhdr
15394
15395 : see if this is a sys/uio.h system
15396 set sys/uio.h i_sysuio
15397 eval $inhdr
15398
15399 : see if this is a sys/un.h system
15400 set sys/un.h i_sysun
15401 eval $inhdr
15402
15403
15404 : see if this is a sys/utsname.h system
15405 set sys/utsname.h i_sysutsname
15406 eval $inhdr
15407
15408 : see if this is a syswait system
15409 set sys/wait.h i_syswait
15410 eval $inhdr
15411
15412 : see if this is a ustat.h system
15413 set ustat.h i_ustat
15414 eval $inhdr
15415
15416 : see if this is an utime system
15417 set utime.h i_utime
15418 eval $inhdr
15419
15420 : see if this is a values.h system
15421 set values.h i_values
15422 eval $inhdr
15423
15424 : see if this is a vfork system
15425 case "$d_vfork" in
15426 "$define")
15427         set vfork.h i_vfork
15428         eval $inhdr
15429         ;;
15430 *)
15431         i_vfork="$undef"
15432         ;;
15433 esac
15434
15435 : see if gdbm.h is available
15436 set gdbm.h t_gdbm
15437 eval $inhdr
15438 case "$t_gdbm" in
15439 $define)
15440         : see if gdbm_open exists
15441         set gdbm_open d_gdbm_open
15442         eval $inlibc
15443         case "$d_gdbm_open" in
15444         $undef)
15445                 t_gdbm="$undef"
15446                 echo "We won't be including <gdbm.h>"
15447                 ;;
15448         esac
15449         ;;
15450 esac
15451 val="$t_gdbm"
15452 set i_gdbm
15453 eval $setvar
15454
15455 echo " "
15456 echo "Looking for extensions..." >&4
15457 : If we are using the old config.sh, known_extensions may contain
15458 : old or inaccurate or duplicate values.
15459 known_extensions=''
15460 nonxs_extensions=''
15461 : We do not use find because it might not be available.
15462 : We do not just use MANIFEST because the user may have dropped
15463 : some additional extensions into the source tree and expect them
15464 : to be built.
15465
15466 : Function to recursively find available extensions, ignoring DynaLoader
15467 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
15468 find_extensions='
15469     for xxx in *; do
15470        case "$xxx" in
15471            DynaLoader|dynaload) ;;
15472            *)
15473            if $test -f $xxx/$xxx.xs; then
15474                known_extensions="$known_extensions $1$xxx";
15475            elif $test -f $xxx/Makefile.PL; then
15476                nonxs_extensions="$nonxs_extensions $1$xxx";
15477            else
15478                if $test -d $xxx -a $# -lt 10; then
15479                    set $1$xxx/ $*;
15480                    cd $xxx;
15481                    eval $find_extensions;
15482                    cd ..;
15483                    shift;
15484                fi;
15485            fi
15486            ;;
15487        esac;
15488     done'
15489 tdir=`pwd`
15490 cd $rsrc/ext
15491 set X
15492 shift
15493 eval $find_extensions
15494 set X $nonxs_extensions
15495 shift
15496 nonxs_extensions="$*"
15497 set X $known_extensions
15498 shift
15499 known_extensions="$*"
15500 cd $tdir
15501
15502 : Now see which are supported on this system.
15503 avail_ext=''
15504 for xxx in $known_extensions ; do
15505         case "$xxx" in
15506         DB_File|db_file)
15507                 case "$i_db" in
15508                 $define) avail_ext="$avail_ext $xxx" ;;
15509                 esac
15510                 ;;
15511         GDBM_File|gdbm_fil)
15512                 case "$i_gdbm" in 
15513                 $define) avail_ext="$avail_ext $xxx" ;;
15514                 esac
15515                 ;;
15516         NDBM_File|ndbm_fil)
15517                 case "$i_ndbm" in
15518                 $define)
15519                     case "$osname-$use64bitint" in
15520                     hpux-define)
15521                         case "$libs" in
15522                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
15523                         esac
15524                         ;;
15525                     *) avail_ext="$avail_ext $xxx" ;;
15526                     esac
15527                     ;;
15528                 esac
15529                 ;;
15530         ODBM_File|odbm_fil) 
15531                 case "${i_dbm}${i_rpcsvcdbm}" in
15532                 *"${define}"*)
15533                     case "$osname-$use64bitint" in
15534                     hpux-define)
15535                         case "$libs" in
15536                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
15537                         esac
15538                         ;;
15539                     *) avail_ext="$avail_ext $xxx" ;;
15540                     esac
15541                     ;;
15542                 esac
15543                 ;;
15544         POSIX|posix)
15545                 case "$useposix" in
15546                 true|define|y) avail_ext="$avail_ext $xxx" ;;
15547                 esac
15548                 ;;
15549         Opcode|opcode)
15550                 case "$useopcode" in
15551                 true|define|y) avail_ext="$avail_ext $xxx" ;;
15552                 esac
15553                 ;;
15554         Socket|socket)
15555                 case "$d_socket" in 
15556                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15557                 esac
15558                 ;;
15559         Sys/Syslog|sys/syslog)
15560                 : XXX syslog requires socket
15561                 case "$d_socket" in 
15562                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15563                 esac
15564                 ;;
15565         Thread|thread)
15566                 case "$usethreads" in 
15567                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15568                 esac
15569                 ;;
15570         IPC/SysV|ipc/sysv)
15571                 : XXX Do we need a useipcsysv variable here
15572                 case "${d_msg}${d_sem}${d_shm}" in 
15573                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
15574                 esac
15575                 ;;
15576         *)      avail_ext="$avail_ext $xxx"
15577                 ;;
15578         esac
15579 done
15580
15581 set X $avail_ext
15582 shift
15583 avail_ext="$*"
15584
15585 : Now see which nonxs extensions are supported on this system.
15586 : For now assume all are.
15587 nonxs_ext=''
15588 for xxx in $nonxs_extensions ; do
15589         case "$xxx" in
15590         *)      nonxs_ext="$nonxs_ext $xxx"
15591                 ;;
15592         esac
15593 done
15594
15595 set X $nonxs_ext
15596 shift
15597 nonxs_ext="$*"
15598
15599 case $usedl in
15600 $define)
15601         $cat <<EOM
15602 A number of extensions are supplied with $package.  You may choose to
15603 compile these extensions for dynamic loading (the default), compile
15604 them into the $package executable (static loading), or not include
15605 them at all.  Answer "none" to include no extensions.
15606 Note that DynaLoader is always built and need not be mentioned here.
15607
15608 EOM
15609         case "$dynamic_ext" in
15610         '') dflt="$avail_ext" ;;
15611         *)      dflt="$dynamic_ext"
15612                 # Perhaps we are reusing an old out-of-date config.sh.
15613                 case "$hint" in
15614                 previous)
15615                         if test X"$dynamic_ext" != X"$avail_ext"; then
15616                                 $cat <<EOM
15617 NOTICE:  Your previous config.sh list may be incorrect. 
15618 The extensions now available to you are 
15619         ${avail_ext}
15620 but the default list from your previous config.sh is
15621         ${dynamic_ext} 
15622
15623 EOM
15624                         fi
15625                         ;;
15626                 esac
15627                 ;;
15628         esac
15629         case "$dflt" in
15630         '')     dflt=none;;
15631         esac
15632         rp="What extensions do you wish to load dynamically?"
15633         . ./myread
15634         case "$ans" in
15635         none) dynamic_ext=' ' ;;
15636         *) dynamic_ext="$ans" ;;
15637         esac
15638
15639         case "$static_ext" in
15640         '')
15641                 : Exclude those already listed in dynamic linking
15642                 dflt=''
15643                 for xxx in $avail_ext; do
15644                         case " $dynamic_ext " in
15645                         *" $xxx "*) ;;
15646                         *) dflt="$dflt $xxx" ;;
15647                         esac
15648                 done
15649                 set X $dflt
15650                 shift
15651                 dflt="$*"
15652                 ;;
15653         *)  dflt="$static_ext" 
15654                 ;;
15655         esac
15656
15657         case "$dflt" in
15658         '')     dflt=none;;
15659         esac
15660         rp="What extensions do you wish to load statically?"
15661         . ./myread
15662         case "$ans" in
15663         none) static_ext=' ' ;;
15664         *) static_ext="$ans" ;;
15665         esac
15666         ;;
15667 *)
15668         $cat <<EOM
15669 A number of extensions are supplied with $package.  Answer "none" 
15670 to include no extensions. 
15671 Note that DynaLoader is always built and need not be mentioned here.
15672
15673 EOM
15674         case "$static_ext" in
15675         '') dflt="$avail_ext" ;;
15676         *)      dflt="$static_ext"
15677                 # Perhaps we are reusing an old out-of-date config.sh.
15678                 case "$hint" in
15679                 previous)
15680                         if test X"$static_ext" != X"$avail_ext"; then
15681                                 $cat <<EOM
15682 NOTICE:  Your previous config.sh list may be incorrect. 
15683 The extensions now available to you are 
15684         ${avail_ext}
15685 but the default list from your previous config.sh is
15686         ${static_ext} 
15687
15688 EOM
15689                         fi
15690                         ;;
15691                 esac
15692                 ;;
15693         esac
15694         : Exclude those that are not xs extensions
15695         case "$dflt" in
15696         '')     dflt=none;;
15697         esac
15698         rp="What extensions do you wish to include?"
15699         . ./myread
15700         case "$ans" in
15701         none) static_ext=' ' ;;
15702         *) static_ext="$ans" ;;
15703         esac
15704         ;;
15705 esac
15706
15707 set X $dynamic_ext $static_ext $nonxs_ext
15708 shift
15709 extensions="$*"
15710
15711 : Remove libraries needed only for extensions
15712 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
15713 : The exception is SunOS 4.x, which needs them.
15714 case "${osname}X${osvers}" in
15715 sunos*X4*)
15716     perllibs="$libs"
15717     ;;
15718 *) case "$usedl" in
15719     $define|true|[yY]*)
15720             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'` 
15721             shift
15722             perllibs="$*"
15723             ;;
15724     *)  perllibs="$libs"
15725             ;;
15726     esac
15727     ;;
15728 esac
15729
15730 : Remove build directory name from cppstdin so it can be used from
15731 : either the present location or the final installed location.
15732 echo " "
15733 : Get out of the UU directory to get correct path name.
15734 cd ..
15735 case "$cppstdin" in
15736 `pwd`/cppstdin)
15737         echo "Stripping down cppstdin path name"
15738         cppstdin=cppstdin
15739         ;;
15740 esac
15741 cd UU
15742
15743 : end of configuration questions
15744 echo " "
15745 echo "End of configuration questions."
15746 echo " "
15747
15748 : back to where it started
15749 if test -d ../UU; then
15750         cd ..
15751 fi
15752
15753 : configuration may be patched via a 'config.over' file
15754 if $test -f config.over; then
15755         echo " "
15756         dflt=y
15757         rp='I see a config.over file.  Do you wish to load it?'
15758         . UU/myread
15759         case "$ans" in
15760         n*) echo "OK, I'll ignore it.";;
15761         *)      . ./config.over
15762                 echo "Configuration override changes have been loaded."
15763                 ;;
15764         esac
15765 fi
15766
15767 : in case they want portability, strip down executable paths
15768 case "$d_portable" in
15769 "$define")
15770         echo " "
15771         echo "Stripping down executable paths..." >&4
15772         for file in $loclist $trylist; do
15773                 eval temp=\$$file
15774                 eval $file=`basename $temp`
15775         done
15776         ;;
15777 esac
15778
15779 : create config.sh file
15780 echo " "
15781 echo "Creating config.sh..." >&4
15782 $spitshell <<EOT >config.sh
15783 $startsh
15784 #
15785 # This file was produced by running the Configure script. It holds all the
15786 # definitions figured out by Configure. Should you modify one of these values,
15787 # do not forget to propagate your changes by running "Configure -der". You may
15788 # instead choose to run each of the .SH files by yourself, or "Configure -S".
15789 #
15790
15791 # Package name      : $package
15792 # Source directory  : $src
15793 # Configuration time: $cf_time
15794 # Configured by     : $cf_by
15795 # Target system     : $myuname
15796
15797 Author='$Author'
15798 Date='$Date'
15799 Header='$Header'
15800 Id='$Id'
15801 Locker='$Locker'
15802 Log='$Log'
15803 Mcc='$Mcc'
15804 RCSfile='$RCSfile'
15805 Revision='$Revision'
15806 Source='$Source'
15807 State='$State'
15808 _a='$_a'
15809 _exe='$_exe'
15810 _o='$_o'
15811 afs='$afs'
15812 alignbytes='$alignbytes'
15813 ansi2knr='$ansi2knr'
15814 aphostname='$aphostname'
15815 api_revision='$api_revision'
15816 api_subversion='$api_subversion'
15817 api_version='$api_version'
15818 api_versionstring='$api_versionstring'
15819 ar='$ar'
15820 archlib='$archlib'
15821 archlibexp='$archlibexp'
15822 archname64='$archname64'
15823 archname='$archname'
15824 archobjs='$archobjs'
15825 awk='$awk'
15826 baserev='$baserev'
15827 bash='$bash'
15828 bin='$bin'
15829 bincompat5005='$bincompat5005'
15830 binexp='$binexp'
15831 bison='$bison'
15832 byacc='$byacc'
15833 byteorder='$byteorder'
15834 c='$c'
15835 castflags='$castflags'
15836 cat='$cat'
15837 cc='$cc'
15838 cccdlflags='$cccdlflags'
15839 ccdlflags='$ccdlflags'
15840 ccflags='$ccflags'
15841 ccflags_uselargefiles='$ccflags_uselargefiles'
15842 ccname='$ccname'
15843 ccsymbols='$ccsymbols'
15844 ccversion='$ccversion'
15845 cf_by='$cf_by'
15846 cf_email='$cf_email'
15847 cf_time='$cf_time'
15848 charsize='$charsize'
15849 chgrp='$chgrp'
15850 chmod='$chmod'
15851 chown='$chown'
15852 clocktype='$clocktype'
15853 comm='$comm'
15854 compress='$compress'
15855 contains='$contains'
15856 cp='$cp'
15857 cpio='$cpio'
15858 cpp='$cpp'
15859 cpp_stuff='$cpp_stuff'
15860 cppccsymbols='$cppccsymbols'
15861 cppflags='$cppflags'
15862 cpplast='$cpplast'
15863 cppminus='$cppminus'
15864 cpprun='$cpprun'
15865 cppstdin='$cppstdin'
15866 cppsymbols='$cppsymbols'
15867 crosscompile='$crosscompile'
15868 cryptlib='$cryptlib'
15869 csh='$csh'
15870 d_Gconvert='$d_Gconvert'
15871 d_PRIEUldbl='$d_PRIEUldbl'
15872 d_PRIFUldbl='$d_PRIFUldbl'
15873 d_PRIGUldbl='$d_PRIGUldbl'
15874 d_PRIXU64='$d_PRIXU64'
15875 d_PRId64='$d_PRId64'
15876 d_PRIeldbl='$d_PRIeldbl'
15877 d_PRIfldbl='$d_PRIfldbl'
15878 d_PRIgldbl='$d_PRIgldbl'
15879 d_PRIi64='$d_PRIi64'
15880 d_PRIo64='$d_PRIo64'
15881 d_PRIu64='$d_PRIu64'
15882 d_PRIx64='$d_PRIx64'
15883 d_SCNfldbl='$d_SCNfldbl'
15884 d__fwalk='$d__fwalk'
15885 d_access='$d_access'
15886 d_accessx='$d_accessx'
15887 d_alarm='$d_alarm'
15888 d_archlib='$d_archlib'
15889 d_atolf='$d_atolf'
15890 d_atoll='$d_atoll'
15891 d_attribut='$d_attribut'
15892 d_bcmp='$d_bcmp'
15893 d_bcopy='$d_bcopy'
15894 d_bincompat5005='$d_bincompat5005'
15895 d_bsd='$d_bsd'
15896 d_bsdgetpgrp='$d_bsdgetpgrp'
15897 d_bsdsetpgrp='$d_bsdsetpgrp'
15898 d_bzero='$d_bzero'
15899 d_casti32='$d_casti32'
15900 d_castneg='$d_castneg'
15901 d_charvspr='$d_charvspr'
15902 d_chown='$d_chown'
15903 d_chroot='$d_chroot'
15904 d_chsize='$d_chsize'
15905 d_closedir='$d_closedir'
15906 d_const='$d_const'
15907 d_crypt='$d_crypt'
15908 d_csh='$d_csh'
15909 d_cuserid='$d_cuserid'
15910 d_dbl_dig='$d_dbl_dig'
15911 d_difftime='$d_difftime'
15912 d_dirnamlen='$d_dirnamlen'
15913 d_dlerror='$d_dlerror'
15914 d_dlopen='$d_dlopen'
15915 d_dlsymun='$d_dlsymun'
15916 d_dosuid='$d_dosuid'
15917 d_drand48proto='$d_drand48proto'
15918 d_dup2='$d_dup2'
15919 d_eaccess='$d_eaccess'
15920 d_endgrent='$d_endgrent'
15921 d_endhent='$d_endhent'
15922 d_endnent='$d_endnent'
15923 d_endpent='$d_endpent'
15924 d_endpwent='$d_endpwent'
15925 d_endsent='$d_endsent'
15926 d_eofnblk='$d_eofnblk'
15927 d_eunice='$d_eunice'
15928 d_fchmod='$d_fchmod'
15929 d_fchown='$d_fchown'
15930 d_fcntl='$d_fcntl'
15931 d_fcntl_can_lock='$d_fcntl_can_lock'
15932 d_fd_macros='$d_fd_macros'
15933 d_fd_set='$d_fd_set'
15934 d_fds_bits='$d_fds_bits'
15935 d_fgetpos='$d_fgetpos'
15936 d_flexfnam='$d_flexfnam'
15937 d_flock='$d_flock'
15938 d_fork='$d_fork'
15939 d_fpathconf='$d_fpathconf'
15940 d_fpos64_t='$d_fpos64_t'
15941 d_frexpl='$d_frexpl'
15942 d_fs_data_s='$d_fs_data_s'
15943 d_fseeko='$d_fseeko'
15944 d_fsetpos='$d_fsetpos'
15945 d_fstatfs='$d_fstatfs'
15946 d_fstatvfs='$d_fstatvfs'
15947 d_fsync='$d_fsync'
15948 d_ftello='$d_ftello'
15949 d_ftime='$d_ftime'
15950 d_getcwd='$d_getcwd'
15951 d_getespwnam='$d_getespwnam'
15952 d_getfsstat='$d_getfsstat'
15953 d_getgrent='$d_getgrent'
15954 d_getgrps='$d_getgrps'
15955 d_gethbyaddr='$d_gethbyaddr'
15956 d_gethbyname='$d_gethbyname'
15957 d_gethent='$d_gethent'
15958 d_gethname='$d_gethname'
15959 d_gethostprotos='$d_gethostprotos'
15960 d_getlogin='$d_getlogin'
15961 d_getmnt='$d_getmnt'
15962 d_getmntent='$d_getmntent'
15963 d_getnbyaddr='$d_getnbyaddr'
15964 d_getnbyname='$d_getnbyname'
15965 d_getnent='$d_getnent'
15966 d_getnetprotos='$d_getnetprotos'
15967 d_getpagsz='$d_getpagsz'
15968 d_getpbyname='$d_getpbyname'
15969 d_getpbynumber='$d_getpbynumber'
15970 d_getpent='$d_getpent'
15971 d_getpgid='$d_getpgid'
15972 d_getpgrp2='$d_getpgrp2'
15973 d_getpgrp='$d_getpgrp'
15974 d_getppid='$d_getppid'
15975 d_getprior='$d_getprior'
15976 d_getprotoprotos='$d_getprotoprotos'
15977 d_getprpwnam='$d_getprpwnam'
15978 d_getpwent='$d_getpwent'
15979 d_getsbyname='$d_getsbyname'
15980 d_getsbyport='$d_getsbyport'
15981 d_getsent='$d_getsent'
15982 d_getservprotos='$d_getservprotos'
15983 d_getspnam='$d_getspnam'
15984 d_gettimeod='$d_gettimeod'
15985 d_gnulibc='$d_gnulibc'
15986 d_grpasswd='$d_grpasswd'
15987 d_hasmntopt='$d_hasmntopt'
15988 d_htonl='$d_htonl'
15989 d_iconv='$d_iconv'
15990 d_index='$d_index'
15991 d_inetaton='$d_inetaton'
15992 d_int64_t='$d_int64_t'
15993 d_isascii='$d_isascii'
15994 d_isnan='$d_isnan'
15995 d_isnanl='$d_isnanl'
15996 d_killpg='$d_killpg'
15997 d_lchown='$d_lchown'
15998 d_ldbl_dig='$d_ldbl_dig'
15999 d_link='$d_link'
16000 d_locconv='$d_locconv'
16001 d_lockf='$d_lockf'
16002 d_longdbl='$d_longdbl'
16003 d_longlong='$d_longlong'
16004 d_lseekproto='$d_lseekproto'
16005 d_lstat='$d_lstat'
16006 d_madvise='$d_madvise'
16007 d_mblen='$d_mblen'
16008 d_mbstowcs='$d_mbstowcs'
16009 d_mbtowc='$d_mbtowc'
16010 d_memchr='$d_memchr'
16011 d_memcmp='$d_memcmp'
16012 d_memcpy='$d_memcpy'
16013 d_memmove='$d_memmove'
16014 d_memset='$d_memset'
16015 d_mkdir='$d_mkdir'
16016 d_mkdtemp='$d_mkdtemp'
16017 d_mkfifo='$d_mkfifo'
16018 d_mkstemp='$d_mkstemp'
16019 d_mkstemps='$d_mkstemps'
16020 d_mktime='$d_mktime'
16021 d_mmap='$d_mmap'
16022 d_modfl='$d_modfl'
16023 d_mprotect='$d_mprotect'
16024 d_msg='$d_msg'
16025 d_msg_ctrunc='$d_msg_ctrunc'
16026 d_msg_dontroute='$d_msg_dontroute'
16027 d_msg_oob='$d_msg_oob'
16028 d_msg_peek='$d_msg_peek'
16029 d_msg_proxy='$d_msg_proxy'
16030 d_msgctl='$d_msgctl'
16031 d_msgget='$d_msgget'
16032 d_msgrcv='$d_msgrcv'
16033 d_msgsnd='$d_msgsnd'
16034 d_msync='$d_msync'
16035 d_munmap='$d_munmap'
16036 d_mymalloc='$d_mymalloc'
16037 d_nice='$d_nice'
16038 d_nv_preserves_uv='$d_nv_preserves_uv'
16039 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
16040 d_off64_t='$d_off64_t'
16041 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
16042 d_oldpthreads='$d_oldpthreads'
16043 d_oldsock='$d_oldsock'
16044 d_open3='$d_open3'
16045 d_pathconf='$d_pathconf'
16046 d_pause='$d_pause'
16047 d_perl_otherlibdirs='$d_perl_otherlibdirs'
16048 d_phostname='$d_phostname'
16049 d_pipe='$d_pipe'
16050 d_poll='$d_poll'
16051 d_portable='$d_portable'
16052 d_pthread_yield='$d_pthread_yield'
16053 d_pwage='$d_pwage'
16054 d_pwchange='$d_pwchange'
16055 d_pwclass='$d_pwclass'
16056 d_pwcomment='$d_pwcomment'
16057 d_pwexpire='$d_pwexpire'
16058 d_pwgecos='$d_pwgecos'
16059 d_pwpasswd='$d_pwpasswd'
16060 d_pwquota='$d_pwquota'
16061 d_qgcvt='$d_qgcvt'
16062 d_quad='$d_quad'
16063 d_readdir='$d_readdir'
16064 d_readlink='$d_readlink'
16065 d_rename='$d_rename'
16066 d_rewinddir='$d_rewinddir'
16067 d_rmdir='$d_rmdir'
16068 d_safebcpy='$d_safebcpy'
16069 d_safemcpy='$d_safemcpy'
16070 d_sanemcmp='$d_sanemcmp'
16071 d_sbrkproto='$d_sbrkproto'
16072 d_sched_yield='$d_sched_yield'
16073 d_scm_rights='$d_scm_rights'
16074 d_seekdir='$d_seekdir'
16075 d_select='$d_select'
16076 d_sem='$d_sem'
16077 d_semctl='$d_semctl'
16078 d_semctl_semid_ds='$d_semctl_semid_ds'
16079 d_semctl_semun='$d_semctl_semun'
16080 d_semget='$d_semget'
16081 d_semop='$d_semop'
16082 d_setegid='$d_setegid'
16083 d_seteuid='$d_seteuid'
16084 d_setgrent='$d_setgrent'
16085 d_setgrps='$d_setgrps'
16086 d_sethent='$d_sethent'
16087 d_setlinebuf='$d_setlinebuf'
16088 d_setlocale='$d_setlocale'
16089 d_setnent='$d_setnent'
16090 d_setpent='$d_setpent'
16091 d_setpgid='$d_setpgid'
16092 d_setpgrp2='$d_setpgrp2'
16093 d_setpgrp='$d_setpgrp'
16094 d_setprior='$d_setprior'
16095 d_setproctitle='$d_setproctitle'
16096 d_setpwent='$d_setpwent'
16097 d_setregid='$d_setregid'
16098 d_setresgid='$d_setresgid'
16099 d_setresuid='$d_setresuid'
16100 d_setreuid='$d_setreuid'
16101 d_setrgid='$d_setrgid'
16102 d_setruid='$d_setruid'
16103 d_setsent='$d_setsent'
16104 d_setsid='$d_setsid'
16105 d_setvbuf='$d_setvbuf'
16106 d_sfio='$d_sfio'
16107 d_shm='$d_shm'
16108 d_shmat='$d_shmat'
16109 d_shmatprototype='$d_shmatprototype'
16110 d_shmctl='$d_shmctl'
16111 d_shmdt='$d_shmdt'
16112 d_shmget='$d_shmget'
16113 d_sigaction='$d_sigaction'
16114 d_sigprocmask='$d_sigprocmask'
16115 d_sigsetjmp='$d_sigsetjmp'
16116 d_socket='$d_socket'
16117 d_socklen_t='$d_socklen_t'
16118 d_sockpair='$d_sockpair'
16119 d_socks5_init='$d_socks5_init'
16120 d_sqrtl='$d_sqrtl'
16121 d_statblks='$d_statblks'
16122 d_statfs_f_flags='$d_statfs_f_flags'
16123 d_statfs_s='$d_statfs_s'
16124 d_statvfs='$d_statvfs'
16125 d_stdio_cnt_lval='$d_stdio_cnt_lval'
16126 d_stdio_ptr_lval='$d_stdio_ptr_lval'
16127 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
16128 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
16129 d_stdio_stream_array='$d_stdio_stream_array'
16130 d_stdiobase='$d_stdiobase'
16131 d_stdstdio='$d_stdstdio'
16132 d_strchr='$d_strchr'
16133 d_strcoll='$d_strcoll'
16134 d_strctcpy='$d_strctcpy'
16135 d_strerrm='$d_strerrm'
16136 d_strerror='$d_strerror'
16137 d_strtod='$d_strtod'
16138 d_strtol='$d_strtol'
16139 d_strtold='$d_strtold'
16140 d_strtoll='$d_strtoll'
16141 d_strtoq='$d_strtoq'
16142 d_strtoul='$d_strtoul'
16143 d_strtoull='$d_strtoull'
16144 d_strtouq='$d_strtouq'
16145 d_strxfrm='$d_strxfrm'
16146 d_suidsafe='$d_suidsafe'
16147 d_symlink='$d_symlink'
16148 d_syscall='$d_syscall'
16149 d_sysconf='$d_sysconf'
16150 d_sysernlst='$d_sysernlst'
16151 d_syserrlst='$d_syserrlst'
16152 d_system='$d_system'
16153 d_tcgetpgrp='$d_tcgetpgrp'
16154 d_tcsetpgrp='$d_tcsetpgrp'
16155 d_telldir='$d_telldir'
16156 d_telldirproto='$d_telldirproto'
16157 d_time='$d_time'
16158 d_times='$d_times'
16159 d_truncate='$d_truncate'
16160 d_tzname='$d_tzname'
16161 d_umask='$d_umask'
16162 d_uname='$d_uname'
16163 d_union_semun='$d_union_semun'
16164 d_ustat='$d_ustat'
16165 d_vendorarch='$d_vendorarch'
16166 d_vendorbin='$d_vendorbin'
16167 d_vendorlib='$d_vendorlib'
16168 d_vfork='$d_vfork'
16169 d_void_closedir='$d_void_closedir'
16170 d_voidsig='$d_voidsig'
16171 d_voidtty='$d_voidtty'
16172 d_volatile='$d_volatile'
16173 d_vprintf='$d_vprintf'
16174 d_wait4='$d_wait4'
16175 d_waitpid='$d_waitpid'
16176 d_wcstombs='$d_wcstombs'
16177 d_wctomb='$d_wctomb'
16178 d_xenix='$d_xenix'
16179 date='$date'
16180 db_hashtype='$db_hashtype'
16181 db_prefixtype='$db_prefixtype'
16182 defvoidused='$defvoidused'
16183 direntrytype='$direntrytype'
16184 dlext='$dlext'
16185 dlsrc='$dlsrc'
16186 doublesize='$doublesize'
16187 drand01='$drand01'
16188 dynamic_ext='$dynamic_ext'
16189 eagain='$eagain'
16190 ebcdic='$ebcdic'
16191 echo='$echo'
16192 egrep='$egrep'
16193 emacs='$emacs'
16194 eunicefix='$eunicefix'
16195 exe_ext='$exe_ext'
16196 expr='$expr'
16197 extensions='$extensions'
16198 fflushNULL='$fflushNULL'
16199 fflushall='$fflushall'
16200 find='$find'
16201 firstmakefile='$firstmakefile'
16202 flex='$flex'
16203 fpossize='$fpossize'
16204 fpostype='$fpostype'
16205 freetype='$freetype'
16206 full_ar='$full_ar'
16207 full_csh='$full_csh'
16208 full_sed='$full_sed'
16209 gccosandvers='$gccosandvers'
16210 gccversion='$gccversion'
16211 gidformat='$gidformat'
16212 gidsign='$gidsign'
16213 gidsize='$gidsize'
16214 gidtype='$gidtype'
16215 glibpth='$glibpth'
16216 grep='$grep'
16217 groupcat='$groupcat'
16218 groupstype='$groupstype'
16219 gzip='$gzip'
16220 h_fcntl='$h_fcntl'
16221 h_sysfile='$h_sysfile'
16222 hint='$hint'
16223 hostcat='$hostcat'
16224 i16size='$i16size'
16225 i16type='$i16type'
16226 i32size='$i32size'
16227 i32type='$i32type'
16228 i64size='$i64size'
16229 i64type='$i64type'
16230 i8size='$i8size'
16231 i8type='$i8type'
16232 i_arpainet='$i_arpainet'
16233 i_bsdioctl='$i_bsdioctl'
16234 i_db='$i_db'
16235 i_dbm='$i_dbm'
16236 i_dirent='$i_dirent'
16237 i_dld='$i_dld'
16238 i_dlfcn='$i_dlfcn'
16239 i_fcntl='$i_fcntl'
16240 i_float='$i_float'
16241 i_gdbm='$i_gdbm'
16242 i_grp='$i_grp'
16243 i_iconv='$i_iconv'
16244 i_ieeefp='$i_ieeefp'
16245 i_inttypes='$i_inttypes'
16246 i_libutil='$i_libutil'
16247 i_limits='$i_limits'
16248 i_locale='$i_locale'
16249 i_machcthr='$i_machcthr'
16250 i_malloc='$i_malloc'
16251 i_math='$i_math'
16252 i_memory='$i_memory'
16253 i_mntent='$i_mntent'
16254 i_ndbm='$i_ndbm'
16255 i_netdb='$i_netdb'
16256 i_neterrno='$i_neterrno'
16257 i_netinettcp='$i_netinettcp'
16258 i_niin='$i_niin'
16259 i_poll='$i_poll'
16260 i_prot='$i_prot'
16261 i_pthread='$i_pthread'
16262 i_pwd='$i_pwd'
16263 i_rpcsvcdbm='$i_rpcsvcdbm'
16264 i_sfio='$i_sfio'
16265 i_sgtty='$i_sgtty'
16266 i_shadow='$i_shadow'
16267 i_socks='$i_socks'
16268 i_stdarg='$i_stdarg'
16269 i_stddef='$i_stddef'
16270 i_stdlib='$i_stdlib'
16271 i_string='$i_string'
16272 i_sunmath='$i_sunmath'
16273 i_sysaccess='$i_sysaccess'
16274 i_sysdir='$i_sysdir'
16275 i_sysfile='$i_sysfile'
16276 i_sysfilio='$i_sysfilio'
16277 i_sysin='$i_sysin'
16278 i_sysioctl='$i_sysioctl'
16279 i_syslog='$i_syslog'
16280 i_sysmman='$i_sysmman'
16281 i_sysmode='$i_sysmode'
16282 i_sysmount='$i_sysmount'
16283 i_sysndir='$i_sysndir'
16284 i_sysparam='$i_sysparam'
16285 i_sysresrc='$i_sysresrc'
16286 i_syssecrt='$i_syssecrt'
16287 i_sysselct='$i_sysselct'
16288 i_syssockio='$i_syssockio'
16289 i_sysstat='$i_sysstat'
16290 i_sysstatfs='$i_sysstatfs'
16291 i_sysstatvfs='$i_sysstatvfs'
16292 i_systime='$i_systime'
16293 i_systimek='$i_systimek'
16294 i_systimes='$i_systimes'
16295 i_systypes='$i_systypes'
16296 i_sysuio='$i_sysuio'
16297 i_sysun='$i_sysun'
16298 i_sysutsname='$i_sysutsname'
16299 i_sysvfs='$i_sysvfs'
16300 i_syswait='$i_syswait'
16301 i_termio='$i_termio'
16302 i_termios='$i_termios'
16303 i_time='$i_time'
16304 i_unistd='$i_unistd'
16305 i_ustat='$i_ustat'
16306 i_utime='$i_utime'
16307 i_values='$i_values'
16308 i_varargs='$i_varargs'
16309 i_varhdr='$i_varhdr'
16310 i_vfork='$i_vfork'
16311 ignore_versioned_solibs='$ignore_versioned_solibs'
16312 inc_version_list='$inc_version_list'
16313 inc_version_list_init='$inc_version_list_init'
16314 incpath='$incpath'
16315 inews='$inews'
16316 installarchlib='$installarchlib'
16317 installbin='$installbin'
16318 installman1dir='$installman1dir'
16319 installman3dir='$installman3dir'
16320 installprefix='$installprefix'
16321 installprefixexp='$installprefixexp'
16322 installprivlib='$installprivlib'
16323 installscript='$installscript'
16324 installsitearch='$installsitearch'
16325 installsitebin='$installsitebin'
16326 installsitelib='$installsitelib'
16327 installstyle='$installstyle'
16328 installusrbinperl='$installusrbinperl'
16329 installvendorarch='$installvendorarch'
16330 installvendorbin='$installvendorbin'
16331 installvendorlib='$installvendorlib'
16332 intsize='$intsize'
16333 issymlink='$issymlink'
16334 ivdformat='$ivdformat'
16335 ivsize='$ivsize'
16336 ivtype='$ivtype'
16337 known_extensions='$known_extensions'
16338 ksh='$ksh'
16339 ld='$ld'
16340 lddlflags='$lddlflags'
16341 ldflags='$ldflags'
16342 ldflags_uselargefiles='$ldflags_uselargefiles'
16343 ldlibpthname='$ldlibpthname'
16344 less='$less'
16345 lib_ext='$lib_ext'
16346 libc='$libc'
16347 libperl='$libperl'
16348 libpth='$libpth'
16349 libs='$libs'
16350 libsdirs='$libsdirs'
16351 libsfiles='$libsfiles'
16352 libsfound='$libsfound'
16353 libspath='$libspath'
16354 libswanted='$libswanted'
16355 libswanted_uselargefiles='$libswanted_uselargefiles'
16356 line='$line'
16357 lint='$lint'
16358 lkflags='$lkflags'
16359 ln='$ln'
16360 lns='$lns'
16361 locincpth='$locincpth'
16362 loclibpth='$loclibpth'
16363 longdblsize='$longdblsize'
16364 longlongsize='$longlongsize'
16365 longsize='$longsize'
16366 lp='$lp'
16367 lpr='$lpr'
16368 ls='$ls'
16369 lseeksize='$lseeksize'
16370 lseektype='$lseektype'
16371 mail='$mail'
16372 mailx='$mailx'
16373 make='$make'
16374 make_set_make='$make_set_make'
16375 mallocobj='$mallocobj'
16376 mallocsrc='$mallocsrc'
16377 malloctype='$malloctype'
16378 man1dir='$man1dir'
16379 man1direxp='$man1direxp'
16380 man1ext='$man1ext'
16381 man3dir='$man3dir'
16382 man3direxp='$man3direxp'
16383 man3ext='$man3ext'
16384 mips_type='$mips_type'
16385 mkdir='$mkdir'
16386 mmaptype='$mmaptype'
16387 modetype='$modetype'
16388 more='$more'
16389 multiarch='$multiarch'
16390 mv='$mv'
16391 myarchname='$myarchname'
16392 mydomain='$mydomain'
16393 myhostname='$myhostname'
16394 myuname='$myuname'
16395 n='$n'
16396 need_va_copy='$need_va_copy'
16397 netdb_hlen_type='$netdb_hlen_type'
16398 netdb_host_type='$netdb_host_type'
16399 netdb_name_type='$netdb_name_type'
16400 netdb_net_type='$netdb_net_type'
16401 nm='$nm'
16402 nm_opt='$nm_opt'
16403 nm_so_opt='$nm_so_opt'
16404 nonxs_ext='$nonxs_ext'
16405 nroff='$nroff'
16406 nvEUformat='$nvEUformat'
16407 nvFUformat='$nvFUformat'
16408 nvGUformat='$nvGUformat'
16409 nveformat='$nveformat'
16410 nvfformat='$nvfformat'
16411 nvgformat='$nvgformat'
16412 nvsize='$nvsize'
16413 nvtype='$nvtype'
16414 o_nonblock='$o_nonblock'
16415 obj_ext='$obj_ext'
16416 old_pthread_create_joinable='$old_pthread_create_joinable'
16417 optimize='$optimize'
16418 orderlib='$orderlib'
16419 osname='$osname'
16420 osvers='$osvers'
16421 otherlibdirs='$otherlibdirs'
16422 package='$package'
16423 pager='$pager'
16424 passcat='$passcat'
16425 patchlevel='$patchlevel'
16426 path_sep='$path_sep'
16427 perl5='$perl5'
16428 perl='$perl'
16429 perladmin='$perladmin'
16430 perllibs='$perllibs'
16431 perlpath='$perlpath'
16432 pg='$pg'
16433 phostname='$phostname'
16434 pidtype='$pidtype'
16435 plibpth='$plibpth'
16436 pm_apiversion='$pm_apiversion'
16437 pmake='$pmake'
16438 pr='$pr'
16439 prefix='$prefix'
16440 prefixexp='$prefixexp'
16441 privlib='$privlib'
16442 privlibexp='$privlibexp'
16443 prototype='$prototype'
16444 ptrsize='$ptrsize'
16445 quadkind='$quadkind'
16446 quadtype='$quadtype'
16447 randbits='$randbits'
16448 randfunc='$randfunc'
16449 randseedtype='$randseedtype'
16450 ranlib='$ranlib'
16451 rd_nodata='$rd_nodata'
16452 revision='$revision'
16453 rm='$rm'
16454 rmail='$rmail'
16455 runnm='$runnm'
16456 sPRIEUldbl='$sPRIEUldbl'
16457 sPRIFUldbl='$sPRIFUldbl'
16458 sPRIGUldbl='$sPRIGUldbl'
16459 sPRIXU64='$sPRIXU64'
16460 sPRId64='$sPRId64'
16461 sPRIeldbl='$sPRIeldbl'
16462 sPRIfldbl='$sPRIfldbl'
16463 sPRIgldbl='$sPRIgldbl'
16464 sPRIi64='$sPRIi64'
16465 sPRIo64='$sPRIo64'
16466 sPRIu64='$sPRIu64'
16467 sPRIx64='$sPRIx64'
16468 sSCNfldbl='$sSCNfldbl'
16469 sched_yield='$sched_yield'
16470 scriptdir='$scriptdir'
16471 scriptdirexp='$scriptdirexp'
16472 sed='$sed'
16473 seedfunc='$seedfunc'
16474 selectminbits='$selectminbits'
16475 selecttype='$selecttype'
16476 sendmail='$sendmail'
16477 sh='$sh'
16478 shar='$shar'
16479 sharpbang='$sharpbang'
16480 shmattype='$shmattype'
16481 shortsize='$shortsize'
16482 shrpenv='$shrpenv'
16483 shsharp='$shsharp'
16484 sig_count='$sig_count'
16485 sig_name='$sig_name'
16486 sig_name_init='$sig_name_init'
16487 sig_num='$sig_num'
16488 sig_num_init='$sig_num_init'
16489 sig_size='$sig_size'
16490 signal_t='$signal_t'
16491 sitearch='$sitearch'
16492 sitearchexp='$sitearchexp'
16493 sitebin='$sitebin'
16494 sitebinexp='$sitebinexp'
16495 sitelib='$sitelib'
16496 sitelib_stem='$sitelib_stem'
16497 sitelibexp='$sitelibexp'
16498 siteprefix='$siteprefix'
16499 siteprefixexp='$siteprefixexp'
16500 sizesize='$sizesize'
16501 sizetype='$sizetype'
16502 sleep='$sleep'
16503 smail='$smail'
16504 so='$so'
16505 sockethdr='$sockethdr'
16506 socketlib='$socketlib'
16507 socksizetype='$socksizetype'
16508 sort='$sort'
16509 spackage='$spackage'
16510 spitshell='$spitshell'
16511 src='$src'
16512 ssizetype='$ssizetype'
16513 startperl='$startperl'
16514 startsh='$startsh'
16515 static_ext='$static_ext'
16516 stdchar='$stdchar'
16517 stdio_base='$stdio_base'
16518 stdio_bufsiz='$stdio_bufsiz'
16519 stdio_cnt='$stdio_cnt'
16520 stdio_filbuf='$stdio_filbuf'
16521 stdio_ptr='$stdio_ptr'
16522 stdio_stream_array='$stdio_stream_array'
16523 strings='$strings'
16524 submit='$submit'
16525 subversion='$subversion'
16526 sysman='$sysman'
16527 tail='$tail'
16528 tar='$tar'
16529 tbl='$tbl'
16530 tee='$tee'
16531 test='$test'
16532 timeincl='$timeincl'
16533 timetype='$timetype'
16534 touch='$touch'
16535 tr='$tr'
16536 trnl='$trnl'
16537 troff='$troff'
16538 u16size='$u16size'
16539 u16type='$u16type'
16540 u32size='$u32size'
16541 u32type='$u32type'
16542 u64size='$u64size'
16543 u64type='$u64type'
16544 u8size='$u8size'
16545 u8type='$u8type'
16546 uidformat='$uidformat'
16547 uidsign='$uidsign'
16548 uidsize='$uidsize'
16549 uidtype='$uidtype'
16550 uname='$uname'
16551 uniq='$uniq'
16552 uquadtype='$uquadtype'
16553 use5005threads='$use5005threads'
16554 use64bitall='$use64bitall'
16555 use64bitint='$use64bitint'
16556 usedl='$usedl'
16557 useithreads='$useithreads'
16558 uselargefiles='$uselargefiles'
16559 uselongdouble='$uselongdouble'
16560 usemorebits='$usemorebits'
16561 usemultiplicity='$usemultiplicity'
16562 usemymalloc='$usemymalloc'
16563 usenm='$usenm'
16564 useopcode='$useopcode'
16565 useperlio='$useperlio'
16566 useposix='$useposix'
16567 usesfio='$usesfio'
16568 useshrplib='$useshrplib'
16569 usesocks='$usesocks'
16570 usethreads='$usethreads'
16571 usevendorprefix='$usevendorprefix'
16572 usevfork='$usevfork'
16573 usrinc='$usrinc'
16574 uuname='$uuname'
16575 uvXUformat='$uvXUformat'
16576 uvoformat='$uvoformat'
16577 uvsize='$uvsize'
16578 uvtype='$uvtype'
16579 uvuformat='$uvuformat'
16580 uvxformat='$uvxformat'
16581 vendorarch='$vendorarch'
16582 vendorarchexp='$vendorarchexp'
16583 vendorbin='$vendorbin'
16584 vendorbinexp='$vendorbinexp'
16585 vendorlib='$vendorlib'
16586 vendorlib_stem='$vendorlib_stem'
16587 vendorlibexp='$vendorlibexp'
16588 vendorprefix='$vendorprefix'
16589 vendorprefixexp='$vendorprefixexp'
16590 version='$version'
16591 versiononly='$versiononly'
16592 vi='$vi'
16593 voidflags='$voidflags'
16594 xlibpth='$xlibpth'
16595 xs_apiversion='$xs_apiversion'
16596 zcat='$zcat'
16597 zip='$zip'
16598 EOT
16599
16600 : Add in command line options if available
16601 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
16602
16603 : add special variables
16604 $test -f $src/patchlevel.h && \
16605 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
16606 echo "CONFIGDOTSH=true" >>config.sh
16607
16608 : propagate old symbols
16609 if $test -f UU/config.sh; then
16610         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
16611         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
16612         $sort | $uniq -u >UU/oldsyms
16613         set X `cat UU/oldsyms`
16614         shift
16615         case $# in
16616         0) ;;
16617         *)
16618                 cat <<EOM
16619 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
16620 EOM
16621                 echo "# Variables propagated from previous config.sh file." >>config.sh
16622                 for sym in `cat UU/oldsyms`; do
16623                         echo "    Propagating $hint variable "'$'"$sym..."
16624                         eval 'tmp="$'"${sym}"'"'
16625                         echo "$tmp" | \
16626                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
16627                 done
16628                 ;;
16629         esac
16630 fi
16631
16632 : Finish up by extracting the .SH files
16633 case "$alldone" in
16634 exit)
16635         $rm -rf UU
16636         echo "Done."
16637         exit 0
16638         ;;
16639 cont)
16640         ;;
16641 '')
16642         dflt=''
16643         nostick=true
16644         $cat <<EOM
16645
16646 If you'd like to make any changes to the config.sh file before I begin
16647 to configure things, do it as a shell escape now (e.g. !vi config.sh).
16648
16649 EOM
16650         rp="Press return or use a shell escape to edit config.sh:"
16651         . UU/myread
16652         nostick=''
16653         case "$ans" in
16654         '') ;;
16655         *) : in case they cannot read
16656                 sh 1>&4 -c "$ans";;
16657         esac
16658         ;;
16659 esac
16660
16661 : if this fails, just run all the .SH files by hand
16662 . ./config.sh
16663
16664 echo " "
16665 exec 1>&4
16666 . ./UU/extract
16667
16668 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
16669         dflt=y
16670         case "$silent" in
16671         true) ;;
16672         *)
16673                 $cat <<EOM
16674
16675 Now you need to generate make dependencies by running "$make depend".
16676 You might prefer to run it in background: "$make depend > makedepend.out &"
16677 It can take a while, so you might not want to run it right now.
16678
16679 EOM
16680                 ;;
16681         esac
16682         rp="Run $make depend now?"
16683         . UU/myread
16684         case "$ans" in
16685         y*)
16686                 $make depend && echo "Now you must run '$make'."
16687                 ;;
16688         *)
16689                 echo "You must run '$make depend' then '$make'."
16690                 ;;
16691         esac
16692 elif test -f [Mm]akefile; then
16693         echo " "
16694         echo "Now you must run a $make."
16695 else
16696         echo "Done."
16697 fi
16698
16699 if $test -f Policy.sh; then
16700     $cat <<EOM
16701
16702 If you compile $package on a different machine or from a different object
16703 directory, copy the Policy.sh file from this object directory to the
16704 new one before you run Configure -- this will help you with most of
16705 the policy defaults.
16706
16707 EOM
16708 fi
16709 if $test -f config.msg; then
16710     echo "Hmm.  I also noted the following information while running:"
16711     echo " "
16712     $cat config.msg >&4
16713     $rm -f config.msg
16714 fi
16715 $rm -f kit*isdone ark*isdone
16716 $rm -rf UU
16717
16718 : End of Configure
16719