This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Update Changes.
[perl5.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Fri Feb 23 03:39:53 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 yacc=''
965 yaccflags=''
966 CONFIG=''
967
968 define='define'
969 undef='undef'
970 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
971 rmlist=''
972
973 : We must find out about Eunice early
974 eunicefix=':'
975 if test -f /etc/unixtovms; then
976         eunicefix=/etc/unixtovms
977 fi
978 if test -f /etc/unixtovms.exe; then
979         eunicefix=/etc/unixtovms.exe
980 fi
981
982 i_whoami=''
983 ccname=''
984 ccversion=''
985 perllibs=''
986 : set useposix=false in your hint file to disable the POSIX extension.
987 useposix=true
988 : set useopcode=false in your hint file to disable the Opcode extension.
989 useopcode=true
990 : Trailing extension.  Override this in a hint file, if needed.
991 _exe=''
992 : Extra object files, if any, needed on this platform.
993 archobjs=''
994 archname=''
995 : Possible local include directories to search.
996 : Set locincpth to "" in a hint file to defeat local include searches.
997 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
998 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
999 :
1000 : no include file wanted by default
1001 inclwanted=''
1002
1003 groupstype=''
1004 : change the next line if compiling for Xenix/286 on Xenix/386
1005 xlibpth='/usr/lib/386 /lib/386'
1006 : Possible local library directories to search.
1007 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1008 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1009
1010 : general looking path for locating libraries
1011 glibpth="/lib /usr/lib $xlibpth"
1012 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1013 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1014 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1015
1016 : Private path used by Configure to find libraries.  Its value
1017 : is prepended to libpth. This variable takes care of special
1018 : machines, like the mips.  Usually, it should be empty.
1019 plibpth=''
1020
1021 : default library list
1022 libswanted=''
1023 : some systems want to use only the non-versioned libso:s
1024 ignore_versioned_solibs=''
1025 archname64=''
1026 ccflags_uselargefiles=''
1027 ldflags_uselargefiles=''
1028 libswanted_uselargefiles=''
1029 : set usemultiplicity on the Configure command line to enable multiplicity.
1030 : set usesocks on the Configure command line to enable socks.
1031 : set usethreads on the Configure command line to enable threads.
1032 : full support for void wanted by default
1033 defvoidused=15
1034
1035 : List of libraries we want.
1036 : If anyone needs -lnet, put it in a hint file.
1037 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1038 libswanted="$libswanted dld ld sun m c cposix posix"
1039 libswanted="$libswanted ndir dir crypt sec"
1040 libswanted="$libswanted ucb bsd BSD PW x iconv util"
1041 : We probably want to search /usr/shlib before most other libraries.
1042 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1043 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1044 glibpth="/usr/shlib $glibpth"
1045 : Do not use vfork unless overridden by a hint file.
1046 usevfork=false
1047
1048 : Find the basic shell for Bourne shell scripts
1049 case "$sh" in
1050 '')
1051         case "$SYSTYPE" in
1052         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1053         *) xxx='/bin/sh';;
1054         esac
1055         if test -f "$xxx"; then
1056                 sh="$xxx"
1057         else
1058                 : Build up a list and do a single loop so we can 'break' out.
1059                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1060                 for xxx in sh bash ksh pdksh ash; do
1061                         for p in $pth; do
1062                                 try="$try ${p}/${xxx}"
1063                         done
1064                 done
1065                 for xxx in $try; do
1066                         if test -f "$xxx"; then
1067                                 sh="$xxx";
1068                                 break
1069                         elif test -f "$xxx.exe"; then
1070                                 sh="$xxx";
1071                                 break
1072                         fi
1073                 done
1074         fi
1075         ;;
1076 esac
1077
1078 case "$sh" in
1079 '')     cat <<EOM >&2
1080 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1081
1082 Usually it's in /bin/sh.  How did you even get this far?
1083 Please contact me (Perl Maintainers) at perlbug@perl.org and 
1084 we'll try to straighten this all out.
1085 EOM
1086         exit 1
1087         ;;
1088 esac
1089
1090 : see if sh knows # comments
1091 if `$sh -c '#' >/dev/null 2>&1`; then
1092         shsharp=true
1093         spitshell=cat
1094         xcat=/bin/cat
1095         test -f $xcat || xcat=/usr/bin/cat
1096         echo "#!$xcat" >try
1097         $eunicefix try
1098         chmod +x try
1099         ./try > today
1100         if test -s today; then
1101                 sharpbang='#!'
1102         else
1103                 echo "#! $xcat" > try
1104                 $eunicefix try
1105                 chmod +x try
1106                 ./try > today
1107                 if test -s today; then
1108                         sharpbang='#! '
1109                 else
1110                         sharpbang=': use '
1111                 fi
1112         fi
1113 else
1114         echo " "
1115         echo "Your $sh doesn't grok # comments--I will strip them later on."
1116         shsharp=false
1117         cd ..
1118         echo "exec grep -v '^[  ]*#'" >spitshell
1119         chmod +x spitshell
1120         $eunicefix spitshell
1121         spitshell=`pwd`/spitshell
1122         cd UU
1123         echo "I presume that if # doesn't work, #! won't work either!"
1124         sharpbang=': use '
1125 fi
1126 rm -f try today
1127
1128 : figure out how to guarantee sh startup
1129 case "$startsh" in
1130 '') startsh=${sharpbang}${sh} ;;
1131 *)
1132 esac
1133 cat >try <<EOSS
1134 $startsh
1135 set abc
1136 test "$?abc" != 1
1137 EOSS
1138
1139 chmod +x try
1140 $eunicefix try
1141 if ./try; then
1142         : echo "Yup, it does."
1143 else
1144         echo "Hmm... '$startsh' does not guarantee sh startup..."
1145         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1146 fi
1147 rm -f try
1148
1149
1150 : Save command line options in file UU/cmdline.opt for later use in
1151 : generating config.sh.
1152 cat > cmdline.opt <<EOSH
1153 # Configure command line arguments.
1154 config_arg0='$0'
1155 config_args='$*'
1156 config_argc=$#
1157 EOSH
1158 argn=1
1159 for arg in "$@"; do
1160         cat >>cmdline.opt <<EOSH
1161 config_arg$argn='$arg'
1162 EOSH
1163         argn=`expr $argn + 1`
1164 done
1165
1166 : produce awk script to parse command line options
1167 cat >options.awk <<'EOF'
1168 BEGIN {
1169         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1170
1171         len = length(optstr);
1172         for (i = 1; i <= len; i++) {
1173                 c = substr(optstr, i, 1);
1174                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1175                 if (a == ":") {
1176                         arg[c] = 1;
1177                         i++;
1178                 }
1179                 opt[c] = 1;
1180         }
1181 }
1182 {
1183         expect = 0;
1184         str = $0;
1185         if (substr(str, 1, 1) != "-") {
1186                 printf("'%s'\n", str);
1187                 next;
1188         }
1189         len = length($0);
1190         for (i = 2; i <= len; i++) {
1191                 c = substr(str, i, 1);
1192                 if (!opt[c]) {
1193                         printf("-%s\n", substr(str, i));
1194                         next;
1195                 }
1196                 printf("-%s\n", c);
1197                 if (arg[c]) {
1198                         if (i < len)
1199                                 printf("'%s'\n", substr(str, i + 1));
1200                         else
1201                                 expect = 1;
1202                         next;
1203                 }
1204         }
1205 }
1206 END {
1207         if (expect)
1208                 print "?";
1209 }
1210 EOF
1211
1212 : process the command line options
1213 set X `for arg in "$@"; do echo "X$arg"; done |
1214         sed -e s/X// | awk -f options.awk`
1215 eval "set $*"
1216 shift
1217 rm -f options.awk
1218
1219 : set up default values
1220 fastread=''
1221 reuseval=false
1222 config_sh=''
1223 alldone=''
1224 error=''
1225 silent=''
1226 extractsh=''
1227 override=''
1228 knowitall=''
1229 rm -f optdef.sh posthint.sh
1230 cat >optdef.sh <<EOS
1231 $startsh
1232 EOS
1233
1234
1235 : option parsing
1236 while test $# -gt 0; do
1237         case "$1" in
1238         -d) shift; fastread=yes;;
1239         -e) shift; alldone=cont;;
1240         -f)
1241                 shift
1242                 cd ..
1243                 if test -r "$1"; then
1244                         config_sh="$1"
1245                 else
1246                         echo "$me: cannot read config file $1." >&2
1247                         error=true
1248                 fi
1249                 cd UU
1250                 shift;;
1251         -h) shift; error=true;;
1252         -r) shift; reuseval=true;;
1253         -s) shift; silent=true; realsilent=true;;
1254         -E) shift; alldone=exit;;
1255         -K) shift; knowitall=true;;
1256         -O) shift; override=true;;
1257         -S) shift; silent=true; extractsh=true;;
1258         -D)
1259                 shift
1260                 case "$1" in
1261                 *=)
1262                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1263                         echo "$me: ignoring -D $1" >&2
1264                         ;;
1265                 *=*) echo "$1" | \
1266                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1267                 *) echo "$1='define'" >> optdef.sh;;
1268                 esac
1269                 shift
1270                 ;;
1271         -U)
1272                 shift
1273                 case "$1" in
1274                 *=) echo "$1" >> optdef.sh;;
1275                 *=*)
1276                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1277                         echo "$me: ignoring -U $1" >&2
1278                         ;;
1279                 *) echo "$1='undef'" >> optdef.sh;;
1280                 esac
1281                 shift
1282                 ;;
1283         -A)
1284             shift
1285             xxx=''
1286             yyy="$1"
1287             zzz=''
1288             uuu=undef
1289             case "$yyy" in
1290             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1291                  case "$zzz" in
1292                  *:*) zzz='' ;;
1293                  *)   xxx=append
1294                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1295                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1296                  esac
1297                  ;;
1298             esac
1299             case "$xxx" in
1300             '')  case "$yyy" in
1301                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1302                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1303                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1304                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1305                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1306                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1307                  esac
1308                  ;;       
1309             esac
1310             case "$xxx" in
1311             append)
1312                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1313             clear)
1314                 echo "$yyy=''"                  >> posthint.sh ;;
1315             define)
1316                 case "$zzz" in
1317                 '') zzz=define ;;
1318                 esac
1319                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1320             eval)
1321                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1322             prepend)
1323                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1324             undef)
1325                 case "$zzz" in
1326                 '') zzz="$uuu" ;;
1327                 esac
1328                 echo "$yyy=$zzz"                >> posthint.sh ;;
1329             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1330             esac
1331             shift
1332             ;;
1333         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1334             exit 0;;
1335         --) break;;
1336         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1337         *) break;;
1338         esac
1339 done
1340
1341 case "$error" in
1342 true)
1343         cat >&2 <<EOM
1344 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1345                  [-U symbol] [-U symbol=] [-A command:symbol...]
1346   -d : use defaults for all answers.
1347   -e : go on without questioning past the production of config.sh.
1348   -f : specify an alternate default configuration file.
1349   -h : print this help message and exit (with an error status).
1350   -r : reuse C symbols value if possible (skips costly nm extraction).
1351   -s : silent mode, only echoes questions and essential information.
1352   -D : define symbol to have some value:
1353          -D symbol         symbol gets the value 'define'
1354          -D symbol=value   symbol gets the value 'value'
1355   -E : stop at the end of questions, after having produced config.sh.
1356   -K : do not use unless you know what you are doing.
1357   -O : let -D and -U override definitions from loaded configuration file.
1358   -S : perform variable substitutions on all .SH files (can mix with -f)
1359   -U : undefine symbol:
1360          -U symbol    symbol gets the value 'undef'
1361          -U symbol=   symbol gets completely empty
1362   -A : manipulate symbol after the platform specific hints have been applied:
1363          -A symbol=value                append " "value to symbol
1364          -A append:symbol=value         append value to symbol
1365          -A define:symbol=value         define symbol to have value
1366          -A clear:symbol                define symbol to be ''
1367          -A define:symbol               define symbol to be 'define'
1368          -A eval:symbol=value           define symbol to be eval of value
1369          -A prepend:symbol=value        prepend value to symbol
1370          -A undef:symbol                define symbol to be 'undef'
1371          -A undef:symbol=               define symbol to be ''
1372   -V : print version number and exit (with a zero status).
1373 EOM
1374         exit 1
1375         ;;
1376 esac
1377
1378 : Sanity checks
1379 case "$fastread$alldone" in
1380 yescont|yesexit) ;;
1381 *)
1382         case "$extractsh" in
1383         true) ;;
1384         *)
1385                 if test ! -t 0; then
1386                         echo "Say 'sh Configure', not 'sh <Configure'"
1387                         exit 1
1388                 fi
1389                 ;;
1390         esac
1391         ;;
1392 esac
1393
1394 exec 4>&1
1395 case "$silent" in
1396 true) exec 1>/dev/null;;
1397 esac
1398
1399 : run the defines and the undefines, if any, but leave the file out there...
1400 touch optdef.sh
1401 . ./optdef.sh
1402 : create the posthint manipulation script and leave the file out there...
1403 touch posthint.sh
1404
1405 : set package name
1406 package=perl5
1407 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1408 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1409 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1410 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1411 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1412 esac
1413
1414 : Some greps do not return status, grrr.
1415 echo "grimblepritz" >grimble
1416 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1417         contains=contains
1418 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1419         contains=grep
1420 else
1421         contains=contains
1422 fi
1423 rm -f grimble
1424 : the following should work in any shell
1425 case "$contains" in
1426 contains*)
1427         echo " "
1428         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1429         cat >contains <<'EOSS'
1430 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1431 EOSS
1432 chmod +x contains
1433 esac
1434
1435 : Find the path to the source tree
1436 case "$src" in
1437 '') case "$0" in
1438     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1439          case "$src" in
1440          /*)    ;;
1441          .)     ;;
1442          *)     src=`cd ../$src && pwd` ;;
1443          esac
1444          ;;
1445     *)   src='.';;
1446     esac;;
1447 esac
1448 case "$src" in
1449 '')     src=/
1450         rsrc=/
1451         ;;
1452 /*) rsrc="$src";;
1453 *) rsrc="../$src";;
1454 esac
1455 if test -f $rsrc/Configure && \
1456         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1457 then
1458    : found it, so we are ok.
1459 else
1460         rsrc=''
1461         for src in . .. ../.. ../../.. ../../../..; do
1462                 if test -f ../$src/Configure && \
1463                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1464                 then
1465                         rsrc=../$src
1466                         break
1467                 fi
1468         done
1469 fi
1470 case "$rsrc" in
1471 '')
1472         cat <<EOM >&4
1473
1474 Sorry, I can't seem to locate the source dir for $package.  Please start
1475 Configure with an explicit path -- i.e. /some/path/Configure.
1476
1477 EOM
1478         exit 1
1479         ;;
1480 ../.)   rsrc='..';;
1481 *)
1482         echo " "
1483         echo "Sources for $package found in \"$src\"." >&4
1484         ;;
1485 esac
1486
1487 : script used to extract .SH files with variable substitutions
1488 cat >extract <<'EOS'
1489 CONFIGDOTSH=true
1490 echo "Doing variable substitutions on .SH files..."
1491 if test -f $src/MANIFEST; then
1492         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1493 else
1494         echo "(Looking for .SH files under the source directory.)"
1495         set x `(cd $src; find . -name "*.SH" -print)`
1496 fi
1497 shift
1498 case $# in
1499 0) set x `(cd $src; echo *.SH)`; shift;;
1500 esac
1501 if test ! -f $src/$1; then
1502         shift
1503 fi
1504 mkdir_p='
1505 name=$1;
1506 create="";
1507 while test $name; do
1508         if test ! -d "$name"; then
1509                 create="$name $create";
1510                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1511                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1512         else
1513                 name="";
1514         fi;
1515 done;
1516 for file in $create; do
1517         mkdir $file;
1518 done
1519 '
1520 for file in $*; do
1521         case "$src" in
1522         ".")
1523                 case "$file" in
1524                 */*)
1525                         dir=`expr X$file : 'X\(.*\)/'`
1526                         file=`expr X$file : 'X.*/\(.*\)'`
1527                         (cd $dir && . ./$file)
1528                         ;;
1529                 *)
1530                         . ./$file
1531                         ;;
1532                 esac
1533                 ;;
1534         *)
1535                 case "$file" in
1536                 */*)
1537                         dir=`expr X$file : 'X\(.*\)/'`
1538                         file=`expr X$file : 'X.*/\(.*\)'`
1539                         (set x $dir; shift; eval $mkdir_p)
1540                         sh <$src/$dir/$file
1541                         ;;
1542                 *)
1543                         sh <$src/$file
1544                         ;;
1545                 esac
1546                 ;;
1547         esac
1548 done
1549 if test -f $src/config_h.SH; then
1550         if test ! -f config.h; then
1551         : oops, they left it out of MANIFEST, probably, so do it anyway.
1552         . $src/config_h.SH
1553         fi
1554 fi
1555 EOS
1556
1557 : extract files and exit if asked to do so
1558 case "$extractsh" in
1559 true)
1560         case "$realsilent" in
1561         true) ;;
1562         *) exec 1>&4;;
1563         esac
1564         case "$config_sh" in
1565         '') config_sh='config.sh';;
1566         esac
1567         echo " "
1568         echo "Fetching answers from $config_sh..."
1569         cd ..
1570         . $config_sh
1571         test "$override" && . ./optdef.sh
1572         echo " "
1573         . UU/extract
1574         rm -rf UU
1575         echo "Done."
1576         exit 0
1577         ;;
1578 esac
1579
1580 : Eunice requires " " instead of "", can you believe it
1581 echo " "
1582 : Here we go...
1583 echo "Beginning of configuration questions for $package."
1584
1585 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1586
1587 : first determine how to suppress newline on echo command
1588 echo " "
1589 echo "Checking echo to see how to suppress newlines..."
1590 (echo "hi there\c" ; echo " ") >.echotmp
1591 if $contains c .echotmp >/dev/null 2>&1 ; then
1592         echo "...using -n."
1593         n='-n'
1594         c=''
1595 else
1596         cat <<'EOM'
1597 ...using \c
1598 EOM
1599         n=''
1600         c='\c'
1601 fi
1602 echo $n "The star should be here-->$c"
1603 echo '*'
1604 rm -f .echotmp
1605
1606 : Now test for existence of everything in MANIFEST
1607 echo " "
1608 if test -f $rsrc/MANIFEST; then
1609         echo "First let's make sure your kit is complete.  Checking..." >&4
1610         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1611         rm -f missing
1612         tmppwd=`pwd`
1613         for filelist in x??; do
1614                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1615         done
1616         if test -s missing; then
1617                 cat missing >&4
1618                 cat >&4 <<'EOM'
1619
1620 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1621
1622 You have the option of continuing the configuration process, despite the
1623 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1624 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1625 and contact the author (perlbug@perl.org).
1626
1627 EOM
1628                 echo $n "Continue? [n] $c" >&4
1629                 read ans
1630                 case "$ans" in
1631                 y*)
1632                         echo "Continuing..." >&4
1633                         rm -f missing
1634                         ;;
1635                 *)
1636                         echo "ABORTING..." >&4
1637                         kill $$
1638                         ;;
1639                 esac
1640         else
1641                 echo "Looks good..."
1642         fi
1643 else
1644         echo "There is no MANIFEST file.  I hope your kit is complete !"
1645 fi
1646 rm -f missing x??
1647
1648 echo " "
1649 : Find the appropriate value for a newline for tr
1650 if test -n "$DJGPP"; then
1651        trnl='\012'
1652 fi
1653 if test X"$trnl" = X; then
1654         case "`echo foo|tr '\n' x 2>/dev/null`" in
1655         foox) trnl='\n' ;;
1656         esac
1657 fi
1658 if test X"$trnl" = X; then
1659         case "`echo foo|tr '\012' x 2>/dev/null`" in
1660         foox) trnl='\012' ;;
1661         esac
1662 fi
1663 if test X"$trnl" = X; then
1664         cat <<EOM >&2
1665
1666 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1667
1668 EOM
1669         exit 1
1670 fi
1671
1672 : compute the number of columns on the terminal for proper question formatting
1673 case "$COLUMNS" in
1674 '') COLUMNS='80';;
1675 esac
1676
1677 : set up the echo used in my read
1678 myecho="case \"\$xxxm\" in
1679 '') echo $n \"\$rp $c\" >&4;;
1680 *) case \"\$rp\" in
1681         '') echo $n \"[\$xxxm] $c\";;
1682         *)
1683                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1684                         echo \"\$rp\" >&4
1685                         echo $n \"[\$xxxm] $c\" >&4
1686                 else
1687                         echo $n \"\$rp [\$xxxm] $c\" >&4
1688                 fi
1689                 ;;
1690         esac;;
1691 esac"
1692
1693 : now set up to do reads with possible shell escape and default assignment
1694 cat <<EOSC >myread
1695 $startsh
1696 xxxm=\$dflt
1697 $myecho
1698 ans='!'
1699 case "\$fastread" in
1700 yes) case "\$dflt" in
1701         '') ;;
1702         *) ans='';
1703                 case "\$silent-\$rp" in
1704                 true-) ;;
1705                 *) echo " " >&4;;
1706                 esac;;
1707         esac;;
1708 *) case "\$silent" in
1709         true) case "\$rp" in
1710                 '') ans='';;
1711                 esac;;
1712         esac;;
1713 esac
1714 while expr "X\$ans" : "X!" >/dev/null; do
1715         read answ
1716         set x \$xxxm
1717         shift
1718         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1719         case  "\$answ" in
1720         "!")
1721                 sh 1>&4
1722                 echo " "
1723                 $myecho
1724                 ;;
1725         !*)
1726                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1727                 shift
1728                 sh 1>&4 -c "\$*"
1729                 echo " "
1730                 $myecho
1731                 ;;
1732         "\$ans")
1733                 case "\$ans" in
1734                 \\&*)
1735                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1736                         shift
1737                         case "\$1" in
1738                         -d)
1739                                 fastread=yes
1740                                 echo "(OK, I'll run with -d after this question.)" >&4
1741                                 ;;
1742                         -*)
1743                                 echo "*** Sorry, \$1 not supported yet." >&4
1744                                 ;;
1745                         esac
1746                         $myecho
1747                         ans=!
1748                         ;;
1749                 esac;;
1750         *)
1751                 case "\$aok" in
1752                 y)
1753                         echo "*** Substitution done -- please confirm."
1754                         xxxm="\$ans"
1755                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1756                         xxxm="\$ans"
1757                         ans=!
1758                         ;;
1759                 *)
1760                         echo "*** Error -- try again."
1761                         ans=!
1762                         ;;
1763                 esac
1764                 $myecho
1765                 ;;
1766         esac
1767         case "\$ans\$xxxm\$nostick" in
1768         '')
1769                 ans=!
1770                 $myecho
1771                 ;;
1772         esac
1773 done
1774 case "\$ans" in
1775 '') ans="\$xxxm";;
1776 esac
1777 EOSC
1778
1779 : create .config dir to save info across Configure sessions
1780 test -d ../.config || mkdir ../.config
1781 cat >../.config/README <<EOF
1782 This directory created by Configure to save information that should
1783 persist across sessions for $package.
1784
1785 You may safely delete it if you wish.
1786 EOF
1787
1788 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
1789 case "$usedevel" in
1790 $define|true|[yY]*) ;;
1791 *) case "$xversion" in
1792    *[13579])
1793         cat >&4 <<EOH
1794 *** WHOA THERE!!! ***
1795
1796     This is an UNSTABLE DEVELOPMENT release.
1797     The version of this $package distribution is $xversion, that is, odd,
1798     (as opposed to even) and that signifies a development release.
1799     If you want a maintenance release, you want an even-numbered version.
1800
1801     Do ***NOT*** install this into production use.
1802     Data corruption and crashes are possible.
1803
1804     It is most seriously suggested that you do not continue any further
1805     unless you want to help in developing and debugging Perl.
1806
1807     If you *still* want to build perl, you can answer 'y' now,
1808     or pass -Dusedevel to Configure.
1809
1810 EOH
1811         rp='Do you really want to continue?'
1812         dflt='n'
1813         . ./myread
1814         case "$ans" in
1815         [yY]) echo >&4 "Okay, continuing."
1816               usedevel="$define" ;;
1817         *) echo >&4 "Okay, bye."
1818            exit 1
1819            ;;
1820         esac
1821         ;;
1822     esac
1823     ;;
1824 esac
1825 case "$usedevel" in
1826 $define|true|[yY]*)
1827         case "$versiononly" in
1828         '') versiononly="$define" ;;
1829         esac
1830         case "$installusrbinperl" in
1831         '') installusrbinperl="$undef" ;;
1832         esac
1833         ;;
1834 esac
1835
1836 : general instructions
1837 needman=true
1838 firsttime=true
1839 user=`(logname) 2>/dev/null`
1840 case "$user" in
1841 '') user=`whoami 2>&1`;;
1842 esac
1843 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1844         firsttime=false
1845         echo " "
1846         rp='Would you like to see the instructions?'
1847         dflt=n
1848         . ./myread
1849         case "$ans" in
1850         [yY]*) ;;
1851         *) needman=false;;
1852         esac
1853 fi
1854 if $needman; then
1855         cat <<EOH
1856
1857 This installation shell script will examine your system and ask you questions
1858 to determine how the perl5 package should be installed. If you get
1859 stuck on a question, you may use a ! shell escape to start a subshell or
1860 execute a command.  Many of the questions will have default answers in square
1861 brackets; typing carriage return will give you the default.
1862
1863 On some of the questions which ask for file or directory names you are allowed
1864 to use the ~name construct to specify the login directory belonging to "name",
1865 even if you don't have a shell which knows about that.  Questions where this is
1866 allowed will be marked "(~name ok)".
1867
1868 EOH
1869         rp=''
1870         dflt='Type carriage return to continue'
1871         . ./myread
1872         cat <<'EOH'
1873
1874 The prompter used in this script allows you to use shell variables and
1875 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1876 in the default answer, as if the default line was a set of arguments given to a
1877 script shell.  This means you may also use $* to repeat the whole default line,
1878 so you do not have to re-type everything to add something to the default.
1879
1880 Everytime there is a substitution, you will have to confirm.  If there is an
1881 error (e.g. an unmatched backtick), the default answer will remain unchanged
1882 and you will be prompted again.
1883
1884 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1885 the questions and use the computed defaults (or the previous answers if there
1886 was already a config.sh file). Type 'Configure -h' for a list of options.
1887 You may also start interactively and then answer '& -d' at any prompt to turn
1888 on the non-interactive behaviour for the remainder of the execution.
1889
1890 EOH
1891         . ./myread
1892         cat <<EOH
1893
1894 Much effort has been expended to ensure that this shell script will run on any
1895 Unix system.  If despite that it blows up on yours, your best bet is to edit
1896 Configure and run it again.  If you can't run Configure for some reason,
1897 you'll have to generate a config.sh file by hand.  Whatever problems you
1898 have, let me (perlbug@perl.org) know how I blew it.
1899
1900 This installation script affects things in two ways:
1901
1902 1) it may do direct variable substitutions on some of the files included
1903    in this kit.
1904 2) it builds a config.h file for inclusion in C programs.  You may edit
1905    any of these files as the need arises after running this script.
1906
1907 If you make a mistake on a question, there is no easy way to back up to it
1908 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1909 files.  Configure will offer to let you do this before it runs the SH files.
1910
1911 EOH
1912         dflt='Type carriage return to continue'
1913         . ./myread
1914         case "$firsttime" in
1915         true) echo $user >>../.config/instruct;;
1916         esac
1917 fi
1918
1919 : find out where common programs are
1920 echo " "
1921 echo "Locating common programs..." >&4
1922 cat <<EOSC >loc
1923 $startsh
1924 case \$# in
1925 0) exit 1;;
1926 esac
1927 thing=\$1
1928 shift
1929 dflt=\$1
1930 shift
1931 for dir in \$*; do
1932         case "\$thing" in
1933         .)
1934         if test -d \$dir/\$thing; then
1935                 echo \$dir
1936                 exit 0
1937         fi
1938         ;;
1939         *)
1940         for thisthing in \$dir/\$thing; do
1941                 : just loop through to pick last item
1942         done
1943         if test -f \$thisthing; then
1944                 echo \$thisthing
1945                 exit 0
1946         elif test -f \$dir/\$thing.exe; then
1947                 if test -n "$DJGPP"; then
1948                         echo \$dir/\$thing.exe
1949                 else
1950                         : on Eunice apparently
1951                         echo \$dir/\$thing
1952                 fi
1953                 exit 0
1954         fi
1955         ;;
1956         esac
1957 done
1958 echo \$dflt
1959 exit 1
1960 EOSC
1961 chmod +x loc
1962 $eunicefix loc
1963 loclist="
1964 awk
1965 cat
1966 comm
1967 cp
1968 echo
1969 expr
1970 grep
1971 ls
1972 make
1973 mkdir
1974 rm
1975 sed
1976 sort
1977 touch
1978 tr
1979 uniq
1980 "
1981 trylist="
1982 Mcc
1983 ar
1984 bison
1985 byacc
1986 cpp
1987 csh
1988 date
1989 egrep
1990 gzip
1991 less
1992 ln
1993 more
1994 nm
1995 nroff
1996 pg
1997 test
1998 uname
1999 zip
2000 "
2001 pth=`echo $PATH | sed -e "s/$p_/ /g"`
2002 pth="$pth /lib /usr/lib"
2003 for file in $loclist; do
2004         eval xxx=\$$file
2005         case "$xxx" in
2006         /*|?:[\\/]*)
2007                 if test -f "$xxx"; then
2008                         : ok
2009                 else
2010                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2011                         xxx=`./loc $file $file $pth`
2012                 fi
2013                 ;;
2014         '') xxx=`./loc $file $file $pth`;;
2015         *) xxx=`./loc $xxx $xxx $pth`;;
2016         esac
2017         eval $file=$xxx
2018         eval _$file=$xxx
2019         case "$xxx" in
2020         /*)
2021                 echo $file is in $xxx.
2022                 ;;
2023         ?:[\\/]*)
2024                 echo $file is in $xxx.
2025                 ;;
2026         *)
2027                 echo "I don't know where '$file' is, and my life depends on it." >&4
2028                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2029                 exit 1
2030                 ;;
2031         esac
2032 done
2033 echo " "
2034 echo "Don't worry if any of the following aren't found..."
2035 say=offhand
2036 for file in $trylist; do
2037         eval xxx=\$$file
2038         case "$xxx" in
2039         /*|?:[\\/]*)
2040                 if test -f "$xxx"; then
2041                         : ok
2042                 else
2043                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2044                         xxx=`./loc $file $file $pth`
2045                 fi
2046                 ;;
2047         '') xxx=`./loc $file $file $pth`;;
2048         *) xxx=`./loc $xxx $xxx $pth`;;
2049         esac
2050         eval $file=$xxx
2051         eval _$file=$xxx
2052         case "$xxx" in
2053         /*)
2054                 echo $file is in $xxx.
2055                 ;;
2056         ?:[\\/]*)
2057                 echo $file is in $xxx.
2058                 ;;
2059         *)
2060                 echo "I don't see $file out there, $say."
2061                 say=either
2062                 ;;
2063         esac
2064 done
2065 case "$egrep" in
2066 egrep)
2067         echo "Substituting grep for egrep."
2068         egrep=$grep
2069         ;;
2070 esac
2071 case "$ln" in
2072 ln)
2073         echo "Substituting cp for ln."
2074         ln=$cp
2075         ;;
2076 esac
2077 case "$test" in
2078 test)
2079         echo "Hopefully test is built into your sh."
2080         ;;
2081 *)
2082         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2083                 echo "Using the test built into your sh."
2084                 test=test
2085                 _test=test
2086         fi
2087         ;;
2088 esac
2089 case "$echo" in
2090 echo)
2091         echo "Hopefully echo is built into your sh."
2092         ;;
2093 '') ;;
2094 *)
2095         echo " "
2096 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2097         $echo $n "hi there$c" >foo1
2098         echo $n "hi there$c" >foo2
2099         if cmp foo1 foo2 >/dev/null 2>&1; then
2100                 echo "They are compatible.  In fact, they may be identical."
2101         else
2102                 case "$n" in
2103                 '-n') n='' c='\c';;
2104                 *) n='-n' c='';;
2105                 esac
2106                 cat <<FOO
2107 They are not compatible!  You are probably running ksh on a non-USG system.
2108 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2109 have echo built in and we may have to run some Bourne shell scripts.  That
2110 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2111
2112 FOO
2113                 $echo $n "The star should be here-->$c"
2114                 $echo "*"
2115         fi
2116         $rm -f foo1 foo2
2117         ;;
2118 esac
2119
2120 cat <<EOS >checkcc
2121 $startsh
2122 EOS
2123 cat <<'EOSC' >>checkcc
2124 case "$cc" in
2125 '') ;;
2126 *)  $rm -f try try.*
2127     $cat >try.c <<EOM
2128 int main(int argc, char *argv[]) {
2129   return 0;
2130 }
2131 EOM
2132     if $cc -o try $ccflags try.c; then
2133        :
2134     else
2135         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2136         despair=yes
2137         trygcc=yes
2138         case "$cc" in
2139         *gcc*) trygcc=no ;;
2140         esac
2141         case "`$cc -v -c try.c 2>&1`" in
2142         *gcc*) trygcc=no ;;
2143         esac
2144         if $test X"$trygcc" = Xyes; then
2145             if gcc -o try -c try.c; then
2146                 echo " "
2147                 echo "You seem to have a working gcc, though." >&4
2148                 rp="Would you like to use it?"
2149                 dflt=y
2150                 if $test -f myread; then
2151                     . ./myread
2152                 else
2153                     if $test -f UU/myread; then
2154                         . ./UU/myread
2155                     else
2156                         echo "Cannot find myread, sorry.  Aborting." >&2
2157                         exit 1
2158                     fi
2159                 fi  
2160                 case "$ans" in
2161                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2162                 esac
2163             fi
2164         fi
2165         if $test X"$despair" = Xyes; then
2166             $cat >&4 <<EOM
2167 You need to find a working C compiler.
2168 Either (purchase and) install the C compiler supplied by your OS vendor,
2169 or for a free C compiler try http://gcc.gnu.org/
2170 I cannot continue any further, aborting.
2171 EOM
2172             exit 1
2173         fi
2174     fi
2175     $rm -f try try.*
2176     ;;
2177 esac
2178 EOSC
2179
2180 : determine whether symbolic links are supported
2181 echo " "
2182 $touch blurfl
2183 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2184         echo "Symbolic links are supported." >&4
2185         lns="$ln -s"
2186 else
2187         echo "Symbolic links are NOT supported." >&4
2188         lns="$ln"
2189 fi
2190 $rm -f blurfl sym
2191
2192 : determine whether symbolic links are supported
2193 echo " "
2194 case "$lns" in
2195 *"ln -s")
2196         echo "Checking how to test for symbolic links..." >&4
2197         $lns blurfl sym
2198         if $test "X$issymlink" = X; then
2199                 sh -c "PATH= test -h sym" >/dev/null 2>&1
2200                 if test $? = 0; then
2201                         issymlink="test -h"
2202                 fi              
2203         fi
2204         if $test "X$issymlink" = X; then
2205                 if  $test -h >/dev/null 2>&1; then
2206                         issymlink="$test -h"
2207                         echo "Your builtin 'test -h' may be broken, I'm using external '$test -h'." >&4
2208                 fi              
2209         fi
2210         if $test "X$issymlink" = X; then
2211                 if $test -L sym 2>/dev/null; then
2212                         issymlink="$test -L"
2213                 fi
2214         fi
2215         if $test "X$issymlink" != X; then
2216                 echo "You can test for symbolic links with '$issymlink'." >&4
2217         else
2218                 echo "I do not know how you can test for symbolic links." >&4
2219         fi
2220         $rm -f blurfl sym
2221         ;;
2222 *)      echo "No symbolic links, so not testing for their testing..." >&4
2223         ;;
2224 esac
2225 echo " "
2226
2227
2228 case "$mksymlinks" in
2229 $define|true|[yY]*)
2230         case "$src" in
2231         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2232                 exit 1
2233                 ;;
2234         *)      case "$lns:$issymlink" in
2235                 *"ln -s:"*"test -"?)
2236                         echo "Creating the symbolic links..." >&4
2237                         echo "(First creating the subdirectories...)" >&4
2238                         cd ..
2239                         awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | sort -u | while true; do
2240                                 read directory
2241                                 test -z "$directory" && break
2242                                 mkdir -p $directory
2243                         done
2244                         # Sanity check 1.
2245                         if test ! -d t/base; then
2246                                 echo "Failed to create the subdirectories.  Aborting." >&4
2247                                 exit 1
2248                         fi
2249                         echo "(Then creating the symlinks...)" >&4
2250                         awk '{print $1}' $src/MANIFEST | while true; do
2251                                 read filename
2252                                 test -z "$filename" && break
2253                                 if test -f $filename; then
2254                                         if $issymlink $filename; then
2255                                                 rm -f $filename
2256                                         fi
2257                                 fi
2258                                 if test -f $filename; then
2259                                         echo "$filename already exists, not symlinking."
2260                                 else
2261                                         ln -s $src/$filename $filename
2262                                 fi
2263                         done
2264                         # Sanity check 2.
2265                         if test ! -f t/base/commonsense.t; then
2266                                 echo "Failed to create the symlinks.  Aborting." >&4
2267                                 exit 1
2268                         fi
2269                         cd UU
2270                         ;;
2271                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2272                         ;;
2273                 esac
2274                 ;;
2275         esac
2276         ;;
2277 esac
2278
2279 : see whether [:lower:] and [:upper:] are supported character classes
2280 echo " "
2281 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2282 ABYZ)
2283         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2284         up='[:upper:]'
2285         low='[:lower:]'
2286         ;;
2287 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2288         # (0xc9 and 0xd1), therefore that is a nice testing point.
2289         if test "X$up" = X -o "X$low" = X; then
2290             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2291             ij) up='[A-Z]'
2292                 low='[a-z]'
2293                 ;;
2294             esac
2295         fi
2296         if test "X$up" = X -o "X$low" = X; then
2297             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2298             ij) up='A-Z'
2299                 low='a-z'
2300                 ;;
2301             esac
2302         fi
2303         if test "X$up" = X -o "X$low" = X; then
2304             case "`echo IJ | od -x 2>/dev/null`" in
2305             *C9D1*|*c9d1*)
2306                 echo "Hey, this might be EBCDIC." >&4
2307                 if test "X$up" = X -o "X$low" = X; then
2308                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2309                     ij) up='[A-IJ-RS-Z]'
2310                         low='[a-ij-rs-z]'
2311                         ;;
2312                     esac
2313                 fi
2314                 if test "X$up" = X -o "X$low" = X; then
2315                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2316                     ij) up='A-IJ-RS-Z'
2317                         low='a-ij-rs-z'
2318                         ;;
2319                     esac
2320                 fi
2321                 ;;
2322             esac
2323         fi
2324 esac
2325 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2326 ij)
2327     echo "Using $up and $low to convert case." >&4
2328     ;;
2329 *)
2330     echo "I don't know how to translate letters from upper to lower case." >&4
2331     echo "Your tr is not acting any way I know of." >&4
2332     exit 1
2333     ;;
2334 esac
2335 : set up the translation script tr, must be called with ./tr of course
2336 cat >tr <<EOSC
2337 $startsh
2338 case "\$1\$2" in
2339 '[A-Z][a-z]') exec $tr '$up' '$low';;
2340 '[a-z][A-Z]') exec $tr '$low' '$up';;
2341 esac
2342 exec $tr "\$@"
2343 EOSC
2344 chmod +x tr
2345 $eunicefix tr
2346
2347 : Try to determine whether config.sh was made on this system
2348 case "$config_sh" in
2349 '')
2350 myuname=`$uname -a 2>/dev/null`
2351 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2352 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2353 # because the A-Z/a-z are not consecutive.
2354 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2355         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2356 newmyuname="$myuname"
2357 dflt=n
2358 case "$knowitall" in
2359 '')
2360         if test -f ../config.sh; then
2361                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2362                         eval "`grep myuname= ../config.sh`"
2363                 fi
2364                 if test "X$myuname" = "X$newmyuname"; then
2365                         dflt=y
2366                 fi
2367         fi
2368         ;;
2369 *) dflt=y;;
2370 esac
2371
2372 : Get old answers from old config file if Configure was run on the
2373 : same system, otherwise use the hints.
2374 hint=default
2375 cd ..
2376 if test -f config.sh; then
2377         echo " "
2378         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2379         . UU/myread
2380         case "$ans" in
2381         n*|N*) echo "OK, I'll ignore it."
2382                 mv config.sh config.sh.old
2383                 myuname="$newmyuname"
2384                 ;;
2385         *)  echo "Fetching default answers from your old config.sh file..." >&4
2386                 tmp_n="$n"
2387                 tmp_c="$c"
2388                 tmp_sh="$sh"
2389                 . ./config.sh
2390                 cp config.sh UU
2391                 n="$tmp_n"
2392                 c="$tmp_c"
2393                 : Older versions did not always set $sh.  Catch re-use of such
2394                 : an old config.sh.
2395                 case "$sh" in
2396                 '') sh="$tmp_sh" ;;
2397                 esac
2398                 hint=previous
2399                 ;;
2400         esac
2401 fi
2402 . ./UU/checkcc
2403 if test ! -f config.sh; then
2404         $cat <<EOM
2405
2406 First time through, eh?  I have some defaults handy for some systems
2407 that need some extra help getting the Configure answers right:
2408
2409 EOM
2410         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2411         dflt=''
2412         : Half the following guesses are probably wrong... If you have better
2413         : tests or hints, please send them to perlbug@perl.org
2414         : The metaconfig authors would also appreciate a copy...
2415         $test -f /irix && osname=irix
2416         $test -f /xenix && osname=sco_xenix
2417         $test -f /dynix && osname=dynix
2418         $test -f /dnix && osname=dnix
2419         $test -f /lynx.os && osname=lynxos
2420         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2421         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2422         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2423         $test -f /bin/mips && /bin/mips && osname=mips
2424         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2425                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2426         $test -d /usr/apollo/bin && osname=apollo
2427         $test -f /etc/saf/_sactab && osname=svr4
2428         $test -d /usr/include/minix && osname=minix
2429         if $test -d /MachTen -o -d /MachTen_Folder; then
2430                 osname=machten
2431                 if $test -x /sbin/version; then
2432                         osvers=`/sbin/version | $awk '{print $2}' |
2433                         $sed -e 's/[A-Za-z]$//'`
2434                 elif $test -x /usr/etc/version; then
2435                         osvers=`/usr/etc/version | $awk '{print $2}' |
2436                         $sed -e 's/[A-Za-z]$//'`
2437                 else
2438                         osvers="$2.$3"
2439                 fi
2440         fi
2441
2442         $test -f /sys/posix.dll &&
2443                 $test -f /usr/bin/what &&
2444                 set X `/usr/bin/what /sys/posix.dll` &&
2445                 $test "$3" = UWIN &&
2446                 osname=uwin &&
2447                 osvers="$5"
2448
2449         if $test -f $uname; then
2450                 set X $myuname
2451                 shift
2452
2453                 case "$5" in
2454                 fps*) osname=fps ;;
2455                 mips*)
2456                         case "$4" in
2457                         umips) osname=umips ;;
2458                         *) osname=mips ;;
2459                         esac;;
2460                 [23]100) osname=mips ;;
2461                 next*) osname=next ;;
2462                 i386*)
2463                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2464                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2465                                 osname='sco'
2466                                 osvers=$tmp
2467                         elif $test -f /etc/kconfig; then
2468                                 osname=isc
2469                                 if test "$lns" = "$ln -s"; then
2470                                         osvers=4
2471                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2472                                         osvers=3
2473                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2474                                         osvers=2
2475                                 fi
2476                         fi
2477                         tmp=''
2478                         ;;
2479                 pc*)
2480                         if test -n "$DJGPP"; then
2481                                 osname=dos
2482                                 osvers=djgpp
2483                         fi
2484                         ;;
2485                 esac
2486
2487                 case "$1" in
2488                 aix) osname=aix
2489                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2490                         case "$tmp" in
2491                         'not found') osvers="$4"."$3" ;;
2492                         '<3240'|'<>3240') osvers=3.2.0 ;;
2493                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2494                         '=3250'|'>3250') osvers=3.2.5 ;;
2495                         *) osvers=$tmp;;
2496                         esac
2497                         ;;
2498                 bsd386) osname=bsd386
2499                         osvers=`$uname -r`
2500                         ;;
2501                 cygwin*) osname=cygwin
2502                         osvers="$3"
2503                         ;;
2504                 *dc.osx) osname=dcosx
2505                         osvers="$3"
2506                         ;;
2507                 dnix) osname=dnix
2508                         osvers="$3"
2509                         ;;
2510                 domainos) osname=apollo
2511                         osvers="$3"
2512                         ;;
2513                 dgux) osname=dgux 
2514                         osvers="$3"
2515                         ;;
2516                 dynixptx*) osname=dynixptx
2517                         osvers=`echo "$4"|sed 's/^v//'`
2518                         ;;
2519                 freebsd) osname=freebsd 
2520                         osvers="$3" ;;
2521                 genix) osname=genix ;;
2522                 hp*) osname=hpux 
2523                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2524                         ;;
2525                 irix*) osname=irix
2526                         case "$3" in
2527                         4*) osvers=4 ;;
2528                         5*) osvers=5 ;;
2529                         *)      osvers="$3" ;;
2530                         esac
2531                         ;;
2532                 linux) osname=linux
2533                         case "$3" in
2534                         *)      osvers="$3" ;;
2535                         esac
2536                         ;;
2537                 MiNT) osname=mint
2538                         ;;
2539                 netbsd*) osname=netbsd
2540                         osvers="$3"
2541                         ;;
2542                 news-os) osvers="$3"
2543                         case "$3" in
2544                         4*) osname=newsos4 ;;
2545                         *) osname=newsos ;;
2546                         esac
2547                         ;;
2548                 next*) osname=next ;;
2549                 nonstop-ux) osname=nonstopux ;;
2550                 POSIX-BC | posix-bc ) osname=posix-bc
2551                         osvers="$3"
2552                         ;;
2553                 powerux | power_ux | powermax_os | powermaxos | \
2554                 powerunix | power_unix) osname=powerux
2555                         osvers="$3"
2556                         ;;
2557                 qnx) osname=qnx
2558                         osvers="$4"
2559                         ;;
2560                 solaris) osname=solaris
2561                         case "$3" in
2562                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2563                         *)      osvers="$3" ;;
2564                         esac
2565                         ;;
2566                 sunos) osname=sunos
2567                         case "$3" in
2568                         5*) osname=solaris
2569                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2570                         *)      osvers="$3" ;;
2571                         esac
2572                         ;;
2573                 titanos) osname=titanos
2574                         case "$3" in
2575                         1*) osvers=1 ;;
2576                         2*) osvers=2 ;;
2577                         3*) osvers=3 ;;
2578                         4*) osvers=4 ;;
2579                         *)      osvers="$3" ;;
2580                         esac
2581                         ;;
2582                 ultrix) osname=ultrix
2583                         osvers="$3"
2584                         ;;
2585                 osf1|mls+)      case "$5" in
2586                                 alpha)
2587                                         osname=dec_osf
2588                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
2589                                         case "$osvers" in
2590                                         [1-9].[0-9]*) ;;
2591                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
2592                                         esac
2593                                         ;;
2594                         hp*)    osname=hp_osf1  ;;
2595                         mips)   osname=mips_osf1 ;;
2596                         esac
2597                         ;;
2598                 unixware) osname=svr5
2599                         osvers="$4"
2600                         ;;
2601                 uts) osname=uts
2602                         osvers="$3"
2603                         ;;
2604                 $2) case "$osname" in
2605                         *isc*) ;;
2606                         *freebsd*) ;;
2607                         svr*)
2608                                 : svr4.x or possibly later
2609                                 case "svr$3" in 
2610                                 ${osname}*)
2611                                         osname=svr$3
2612                                         osvers=$4
2613                                         ;;
2614                                 esac
2615                                 case "$osname" in
2616                                 svr4.0)
2617                                         : Check for ESIX
2618                                         if test -f /stand/boot ; then
2619                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2620                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2621                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2622                                                         if test -n "$isesix"; then
2623                                                                 osname=esix4
2624                                                         fi
2625                                                 fi
2626                                         fi
2627                                         ;;
2628                                 esac
2629                                 ;;
2630                         *)      if test -f /etc/systemid; then
2631                                         osname=sco
2632                                         set `echo $3 | $sed 's/\./ /g'` $4
2633                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2634                                                 osvers=$1.$2.$3
2635                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2636                                                 osvers=$1.$2
2637                                         elif $test -f $src/hints/sco_$1.sh; then
2638                                                 osvers=$1
2639                                         fi
2640                                 else
2641                                         case "$osname" in
2642                                         '') : Still unknown.  Probably a generic Sys V.
2643                                                 osname="sysv"
2644                                                 osvers="$3"
2645                                                 ;;
2646                                         esac
2647                                 fi
2648                                 ;;
2649                         esac
2650                         ;;
2651                 *)      case "$osname" in
2652                         '') : Still unknown.  Probably a generic BSD.
2653                                 osname="$1"
2654                                 osvers="$3"
2655                                 ;;
2656                         esac
2657                         ;;
2658                 esac
2659         else
2660                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2661                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2662                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2663                                 osname=news_os
2664                         fi
2665                         $rm -f UU/kernel.what
2666                 elif test -d c:/.; then
2667                         set X $myuname
2668                         osname=os2
2669                         osvers="$5"
2670                 fi
2671         fi
2672         
2673         : Now look for a hint file osname_osvers, unless one has been
2674         : specified already.
2675         case "$hintfile" in
2676         ''|' ')
2677                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
2678                 : Also try without trailing minor version numbers.
2679                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
2680                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
2681                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
2682                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
2683                 case "$file" in
2684                 '') dflt=none ;;
2685                 *)  case "$osvers" in
2686                         '') dflt=$file
2687                                 ;;
2688                         *)  if $test -f $src/hints/$file.sh ; then
2689                                         dflt=$file
2690                                 elif $test -f $src/hints/$xfile.sh ; then
2691                                         dflt=$xfile
2692                                 elif $test -f $src/hints/$xxfile.sh ; then
2693                                         dflt=$xxfile
2694                                 elif $test -f $src/hints/$xxxfile.sh ; then
2695                                         dflt=$xxxfile
2696                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2697                                         dflt=$xxxxfile
2698                                 elif $test -f "$src/hints/${osname}.sh" ; then
2699                                         dflt="${osname}"
2700                                 else
2701                                         dflt=none
2702                                 fi
2703                                 ;;
2704                         esac
2705                         ;;
2706                 esac
2707                 if $test -f Policy.sh ; then
2708                         case "$dflt" in
2709                         *Policy*) ;;
2710                         none) dflt="Policy" ;;
2711                         *) dflt="Policy $dflt" ;;
2712                         esac
2713                 fi
2714                 ;;
2715         *)
2716                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2717                 ;;
2718         esac
2719
2720         if $test -f Policy.sh ; then
2721                 $cat <<EOM
2722
2723 There's also a Policy hint file available, which should make the
2724 site-specific (policy) questions easier to answer.
2725 EOM
2726
2727         fi
2728
2729         $cat <<EOM
2730
2731 You may give one or more space-separated answers, or "none" if appropriate.
2732 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2733 is a good thing.  DO NOT give a wrong version or a wrong OS.
2734
2735 EOM
2736
2737         rp="Which of these apply, if any?"
2738         . UU/myread
2739         tans=$ans
2740         for file in $tans; do
2741                 if $test X$file = XPolicy -a -f Policy.sh; then
2742                         . Policy.sh
2743                         $cat Policy.sh >> UU/config.sh
2744                 elif $test -f $src/hints/$file.sh; then
2745                         . $src/hints/$file.sh
2746                         $cat $src/hints/$file.sh >> UU/config.sh
2747                 elif $test X$tans = X -o X$tans = Xnone ; then
2748                         : nothing
2749                 else
2750                         : Give one chance to correct a possible typo.
2751                         echo "$file.sh does not exist"
2752                         dflt=$file
2753                         rp="hint to use instead?"
2754                         . UU/myread
2755                         for file in $ans; do
2756                                 if $test -f "$src/hints/$file.sh"; then
2757                                         . $src/hints/$file.sh
2758                                         $cat $src/hints/$file.sh >> UU/config.sh
2759                                 elif $test X$ans = X -o X$ans = Xnone ; then
2760                                         : nothing
2761                                 else
2762                                         echo "$file.sh does not exist -- ignored."
2763                                 fi
2764                         done
2765                 fi
2766         done
2767
2768         hint=recommended
2769         : Remember our hint file for later.
2770         if $test -f "$src/hints/$file.sh" ; then
2771                 hintfile="$file"
2772         else
2773                 hintfile=''
2774         fi
2775 fi
2776 cd UU
2777 ;;
2778 *)
2779         echo " "
2780         echo "Fetching default answers from $config_sh..." >&4
2781         tmp_n="$n"
2782         tmp_c="$c"
2783         cd ..
2784         cp $config_sh config.sh 2>/dev/null
2785         chmod +w config.sh
2786         . ./config.sh
2787         cd UU
2788         cp ../config.sh .
2789         n="$tmp_n"
2790         c="$tmp_c"
2791         hint=previous
2792         ;;
2793 esac
2794 test "$override" && . ./optdef.sh
2795
2796 : Restore computed paths
2797 for file in $loclist $trylist; do
2798         eval $file="\$_$file"
2799 done
2800
2801 cat << EOM
2802
2803 Configure uses the operating system name and version to set some defaults.
2804 The default value is probably right if the name rings a bell. Otherwise,
2805 since spelling matters for me, either accept the default or answer "none"
2806 to leave it blank.
2807
2808 EOM
2809 case "$osname" in
2810         ''|' ')
2811                 case "$hintfile" in
2812                 ''|' '|none) dflt=none ;;
2813                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2814                 esac
2815                 ;;
2816         *) dflt="$osname" ;;
2817 esac
2818 rp="Operating system name?"
2819 . ./myread
2820 case "$ans" in
2821 none)  osname='' ;;
2822 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2823 esac
2824 echo " "
2825 case "$osvers" in
2826         ''|' ')
2827                 case "$hintfile" in
2828                 ''|' '|none) dflt=none ;;
2829                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2830                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2831                         case "$dflt" in
2832                         ''|' ') dflt=none ;;
2833                         esac
2834                         ;;
2835                 esac
2836                 ;;
2837         *) dflt="$osvers" ;;
2838 esac
2839 rp="Operating system version?"
2840 . ./myread
2841 case "$ans" in
2842 none)  osvers='' ;;
2843 *) osvers="$ans" ;;
2844 esac
2845
2846
2847 . ./posthint.sh
2848
2849 : who configured the system
2850 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2851 cf_by=`(logname) 2>/dev/null`
2852 case "$cf_by" in
2853 "")
2854         cf_by=`(whoami) 2>/dev/null`
2855         case "$cf_by" in
2856         "") cf_by=unknown ;;
2857         esac ;;
2858 esac
2859
2860 : set up the script used to warn in case of inconsistency
2861 cat <<EOS >whoa
2862 $startsh
2863 EOS
2864 cat <<'EOSC' >>whoa
2865 dflt=y
2866 echo " "
2867 echo "*** WHOA THERE!!! ***" >&4
2868 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2869 rp="    Keep the $hint value?"
2870 . ./myread
2871 case "$ans" in
2872 y) td=$was; tu=$was;;
2873 esac
2874 EOSC
2875
2876 : function used to set $1 to $val
2877 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2878 case "$val$was" in
2879 $define$undef) . ./whoa; eval "$var=\$td";;
2880 $undef$define) . ./whoa; eval "$var=\$tu";;
2881 *) eval "$var=$val";;
2882 esac'
2883
2884 case "$usethreads" in
2885 $define|true|[yY]*)     dflt='y';;
2886 *) dflt='n';;
2887 esac
2888 cat <<EOM
2889
2890 Perl can be built to take advantage of threads on some systems.
2891 To do so, Configure can be run with -Dusethreads.
2892
2893 Note that threading is a highly experimental feature, and
2894 some known race conditions still remain.  If you choose to try
2895 it, be very sure to not actually deploy it for production
2896 purposes.  README.threads has more details, and is required
2897 reading if you enable threads.
2898
2899 If this doesn't make any sense to you, just accept the default '$dflt'.
2900 EOM
2901 rp='Build a threading Perl?'
2902 . ./myread
2903 case "$ans" in
2904 y|Y)    val="$define" ;;
2905 *)      val="$undef" ;;
2906 esac
2907 set usethreads
2908 eval $setvar
2909
2910 case "$usethreads" in
2911 $define)
2912         $cat <<EOM
2913
2914 As of 5.5.640, Perl has two different internal threading implementations,
2915 the 5.005 version (5005threads) and an interpreter-based version
2916 (ithreads) that has one interpreter per thread.  Both are very 
2917 experimental.  This arrangement exists to help developers work out
2918 which one is better.
2919
2920 If you're a casual user, you probably don't want interpreter-threads
2921 at this time.  There doesn't yet exist a way to create threads from
2922 within Perl in this model, i.e., "use Thread;" will NOT work.
2923 EOM
2924         : Default to ithreads unless overridden on command line or with
2925         : old config.sh
2926         dflt='y'
2927         case "$use5005threads" in
2928                 $define|true|[yY]*) dflt='n';;
2929         esac
2930         case "$useithreads" in
2931                 $undef|false|[nN]*) dflt='n';;
2932         esac
2933         rp='Use interpreter-based ithreads?'
2934         . ./myread
2935         case "$ans" in
2936         y|Y)    val="$define" ;;
2937         *)      val="$undef" ;;
2938         esac
2939         set useithreads
2940         eval $setvar
2941         : Now set use5005threads to the opposite value.
2942         case "$useithreads" in
2943         $define) val="$undef" ;;
2944         *) val="$define" ;;
2945         esac
2946         set use5005threads
2947         eval $setvar
2948         ;;
2949 *)
2950         useithreads="$undef"
2951         use5005threads="$undef"
2952         ;;
2953 esac
2954
2955 case "$useithreads$use5005threads" in
2956 "$define$define")
2957         $cat >&4 <<EOM
2958
2959 You cannot have both the ithreads and the 5.005 threads enabled
2960 at the same time.  Disabling the 5.005 threads since they are
2961 much less stable than the ithreads.
2962
2963 EOM
2964         use5005threads="$undef"
2965         ;;
2966 esac
2967
2968 case "$d_oldpthreads" in
2969 '')     : Configure tests would be welcome here.  For now, assume undef.
2970         val="$undef" ;;
2971 *)      val="$d_oldpthreads" ;;
2972 esac
2973 set d_oldpthreads
2974 eval $setvar
2975
2976
2977 case "$usethreads" in
2978 "$define"|true|[yY]*)
2979 : Look for a hint-file generated 'call-back-unit'.  If the
2980 : user has specified that a threading perl is to be built,
2981 : we may need to set or change some other defaults.
2982         if $test -f usethreads.cbu; then
2983                 echo "Your platform has some specific hints for threaded builds, using them..."
2984                 . ./usethreads.cbu
2985         else
2986                 $cat <<EOM
2987 (Your platform doesn't have any specific hints for threaded builds.
2988  Assuming POSIX threads, then.)
2989 EOM
2990         fi
2991         ;;
2992 esac
2993
2994 cat <<EOM
2995
2996 Perl can be built so that multiple Perl interpreters can coexist
2997 within the same Perl executable.
2998 EOM
2999
3000 case "$useithreads" in
3001 $define)
3002         cat <<EOM
3003 This multiple interpreter support is required for interpreter-based threads.
3004 EOM
3005         val="$define"
3006         ;;
3007 *)      case "$usemultiplicity" in
3008         $define|true|[yY]*)     dflt='y';;
3009         *) dflt='n';;
3010         esac
3011         echo " "
3012         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
3013         rp='Build Perl for multiplicity?'
3014         . ./myread
3015         case "$ans" in
3016         y|Y)    val="$define" ;;
3017         *)      val="$undef" ;;
3018         esac
3019         ;;
3020 esac
3021 set usemultiplicity
3022 eval $setvar
3023
3024 : make some quick guesses about what we are up against
3025 echo " "
3026 $echo $n "Hmm...  $c"
3027 echo exit 1 >bsd
3028 echo exit 1 >usg
3029 echo exit 1 >v7
3030 echo exit 1 >osf1
3031 echo exit 1 >eunice
3032 echo exit 1 >xenix
3033 echo exit 1 >venix
3034 echo exit 1 >os2
3035 d_bsd="$undef"
3036 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3037 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3038 then
3039         echo "Looks kind of like an OSF/1 system, but we'll see..."
3040         echo exit 0 >osf1
3041 elif test `echo abc | $tr a-z A-Z` = Abc ; then
3042         xxx=`./loc addbib blurfl $pth`
3043         if $test -f $xxx; then
3044         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3045                 echo exit 0 >bsd
3046                 echo exit 0 >usg
3047         else
3048                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3049                         echo "Looks kind of like an extended USG system, but we'll see..."
3050                 else
3051                         echo "Looks kind of like a USG system, but we'll see..."
3052                 fi
3053                 echo exit 0 >usg
3054         fi
3055 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3056         echo "Looks kind of like a BSD system, but we'll see..."
3057         d_bsd="$define"
3058         echo exit 0 >bsd
3059 else
3060         echo "Looks kind of like a Version 7 system, but we'll see..."
3061         echo exit 0 >v7
3062 fi
3063 case "$eunicefix" in
3064 *unixtovms*)
3065         $cat <<'EOI'
3066 There is, however, a strange, musty smell in the air that reminds me of
3067 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3068 EOI
3069         echo exit 0 >eunice
3070         d_eunice="$define"
3071 : it so happens the Eunice I know will not run shell scripts in Unix format
3072         ;;
3073 *)
3074         echo " "
3075         echo "Congratulations.  You aren't running Eunice."
3076         d_eunice="$undef"
3077         ;;
3078 esac
3079 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3080 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
3081 : semicolon as a patch separator
3082 case "$p_" in
3083 :) ;;
3084 *)
3085         $cat <<'EOI'
3086 I have the feeling something is not exactly right, however...don't tell me...
3087 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3088 (Or you may be running DOS with DJGPP.)
3089 EOI
3090         echo exit 0 >os2
3091         ;;
3092 esac
3093 if test -f /xenix; then
3094         echo "Actually, this looks more like a XENIX system..."
3095         echo exit 0 >xenix
3096         d_xenix="$define"
3097 else
3098         echo " "
3099         echo "It's not Xenix..."
3100         d_xenix="$undef"
3101 fi
3102 chmod +x xenix
3103 $eunicefix xenix
3104 if test -f /venix; then
3105         echo "Actually, this looks more like a VENIX system..."
3106         echo exit 0 >venix
3107 else
3108         echo " "
3109         if ./xenix; then
3110                 : null
3111         else
3112                 echo "Nor is it Venix..."
3113         fi
3114 fi
3115 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3116 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3117 $rm -f foo
3118
3119 case "$cc" in
3120 '') dflt=cc;;
3121 *) dflt="$cc";;
3122 esac
3123 rp="Use which C compiler?"
3124 . ./myread
3125 cc="$ans"
3126 : Look for a hint-file generated 'call-back-unit'.  Now that the
3127 : user has specified the compiler, we may need to set or change some
3128 : other defaults.
3129 if $test -f cc.cbu; then
3130     . ./cc.cbu
3131 fi
3132 . ./checkcc
3133
3134 echo " "
3135 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3136 $cat >gccvers.c <<EOM
3137 #include <stdio.h>
3138 int main() {
3139 #ifdef __GNUC__
3140 #ifdef __VERSION__
3141         printf("%s\n", __VERSION__);
3142 #else
3143         printf("%s\n", "1");
3144 #endif
3145 #endif
3146         exit(0);
3147 }
3148 EOM
3149 if $cc -o gccvers $ldflags gccvers.c; then
3150         gccversion=`./gccvers`
3151         case "$gccversion" in
3152         '') echo "You are not using GNU cc." ;;
3153         *)  echo "You are using GNU cc $gccversion."
3154             ccname=gcc  
3155             ;;
3156         esac
3157 else
3158         echo " "
3159         echo "*** WHOA THERE!!! ***" >&4
3160         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3161         case "$knowitall" in
3162         '')
3163         echo "    You'd better start hunting for one and let me know about it." >&4
3164                 exit 1
3165                 ;;
3166         esac
3167 fi
3168 $rm -f gccvers*
3169 case "$gccversion" in
3170 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3171 esac
3172 case "$gccversion" in
3173 '') gccosandvers='' ;;
3174 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3175    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3176    gccshortvers=''
3177    case "$gccosandvers" in
3178    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3179    $osname$osvers) ;; # looking good
3180    $osname*) cat <<EOM >&4
3181
3182 *** WHOA THERE!!! ***
3183
3184     Your gcc has not been compiled for the exact release of
3185     your operating system ($gccosandvers versus $osname$osvers).
3186
3187     In general it is a good idea to keep gcc synchronized with
3188     the operating system because otherwise serious problems
3189     may ensue when trying to compile software, like Perl.
3190
3191     I'm trying to be optimistic here, though, and will continue.
3192     If later during the configuration and build icky compilation
3193     problems appear (headerfile conflicts being the most common
3194     manifestation), I suggest reinstalling the gcc to match
3195     your operating system release.
3196
3197 EOM
3198       ;;
3199    *) gccosandvers='' ;; # failed to parse, better be silent
3200    esac
3201    ;;
3202 esac
3203 case "$ccname" in
3204 '') ccname="$cc" ;;
3205 esac
3206
3207 : see how we invoke the C preprocessor
3208 echo " "
3209 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3210 cat <<'EOT' >testcpp.c
3211 #define ABC abc
3212 #define XYZ xyz
3213 ABC.XYZ
3214 EOT
3215 cd ..
3216 if test ! -f cppstdin; then
3217         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3218                 # AIX cc -E doesn't show the absolute headerfile
3219                 # locations but we'll cheat by using the -M flag.
3220                 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
3221         else
3222                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3223         fi
3224 else
3225         echo "Keeping your $hint cppstdin wrapper."
3226 fi
3227 chmod 755 cppstdin
3228 wrapper=`pwd`/cppstdin
3229 ok='false'
3230 cd UU
3231
3232 if $test "X$cppstdin" != "X" && \
3233         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3234         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3235 then
3236         echo "You used to use $cppstdin $cppminus so we'll use that again."
3237         case "$cpprun" in
3238         '') echo "But let's see if we can live without a wrapper..." ;;
3239         *)
3240                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3241                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3242                 then
3243                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3244                         ok='true'
3245                 else
3246                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3247                 fi
3248                 ;;
3249         esac
3250 else
3251         case "$cppstdin" in
3252         '') ;;
3253         *)
3254                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3255                 ;;
3256         esac
3257 fi
3258
3259 if $ok; then
3260         : nothing
3261 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3262         $cc -E <testcpp.c >testcpp.out 2>&1; \
3263         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3264         echo "Yup, it does."
3265         x_cpp="$cc -E"
3266         x_minus='';
3267 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3268         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3269         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3270         echo "Yup, it does."
3271         x_cpp="$cc -E"
3272         x_minus='-';
3273 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3274         $cc -P <testcpp.c >testcpp.out 2>&1; \
3275         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3276         echo "Yipee, that works!"
3277         x_cpp="$cc -P"
3278         x_minus='';
3279 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3280         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3281         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3282         echo "At long last!"
3283         x_cpp="$cc -P"
3284         x_minus='-';
3285 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3286         $cpp <testcpp.c >testcpp.out 2>&1; \
3287         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3288         echo "It works!"
3289         x_cpp="$cpp"
3290         x_minus='';
3291 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3292         $cpp - <testcpp.c >testcpp.out 2>&1; \
3293         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3294         echo "Hooray, it works!  I was beginning to wonder."
3295         x_cpp="$cpp"
3296         x_minus='-';
3297 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3298         $wrapper <testcpp.c >testcpp.out 2>&1; \
3299         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3300         x_cpp="$wrapper"
3301         x_minus=''
3302         echo "Eureka!"
3303 else
3304         dflt=''
3305         rp="No dice.  I can't find a C preprocessor.  Name one:"
3306         . ./myread
3307         x_cpp="$ans"
3308         x_minus=''
3309         $x_cpp <testcpp.c >testcpp.out 2>&1
3310         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3311                 echo "OK, that will do." >&4
3312         else
3313 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3314                 exit 1
3315         fi
3316 fi
3317
3318 case "$ok" in
3319 false)
3320         cppstdin="$x_cpp"
3321         cppminus="$x_minus"
3322         cpprun="$x_cpp"
3323         cpplast="$x_minus"
3324         set X $x_cpp
3325         shift
3326         case "$1" in
3327         "$cpp")
3328                 echo "Perhaps can we force $cc -E using a wrapper..."
3329                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3330                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3331                 then
3332                         echo "Yup, we can."
3333                         cppstdin="$wrapper"
3334                         cppminus='';
3335                 else
3336                         echo "Nope, we'll have to live without it..."
3337                 fi
3338                 ;;
3339         esac
3340         case "$cpprun" in
3341         "$wrapper")
3342                 cpprun=''
3343                 cpplast=''
3344                 ;;
3345         esac
3346         ;;
3347 esac
3348
3349 case "$cppstdin" in
3350 "$wrapper"|'cppstdin') ;;
3351 *) $rm -f $wrapper;;
3352 esac
3353 $rm -f testcpp.c testcpp.out
3354
3355 : decide how portable to be.  Allow command line overrides.
3356 case "$d_portable" in
3357 "$undef") ;;
3358 *)      d_portable="$define" ;;
3359 esac
3360
3361 : set up shell script to do ~ expansion
3362 cat >filexp <<EOSS
3363 $startsh
3364 : expand filename
3365 case "\$1" in
3366  ~/*|~)
3367         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3368         ;;
3369  ~*)
3370         if $test -f /bin/csh; then
3371                 /bin/csh -f -c "glob \$1"
3372                 failed=\$?
3373                 echo ""
3374                 exit \$failed
3375         else
3376                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3377                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3378                 if $test ! -d "\$dir"; then
3379                         me=\`basename \$0\`
3380                         echo "\$me: can't locate home directory for: \$name" >&2
3381                         exit 1
3382                 fi
3383                 case "\$1" in
3384                 */*)
3385                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3386                         ;;
3387                 *)
3388                         echo \$dir
3389                         ;;
3390                 esac
3391         fi
3392         ;;
3393 *)
3394         echo \$1
3395         ;;
3396 esac
3397 EOSS
3398 chmod +x filexp
3399 $eunicefix filexp
3400
3401 : now set up to get a file name
3402 cat <<EOS >getfile
3403 $startsh
3404 EOS
3405 cat <<'EOSC' >>getfile
3406 tilde=''
3407 fullpath=''
3408 already=''
3409 skip=''
3410 none_ok=''
3411 exp_file=''
3412 nopath_ok=''
3413 orig_rp="$rp"
3414 orig_dflt="$dflt"
3415 case "$gfpth" in
3416 '') gfpth='.' ;;
3417 esac
3418
3419 case "$fn" in
3420 *\(*)
3421         expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3422         fn=`echo $fn | sed 's/(.*)//'`
3423         ;;
3424 esac
3425
3426 case "$fn" in
3427 *:*)
3428         loc_file=`expr $fn : '.*:\(.*\)'`
3429         fn=`expr $fn : '\(.*\):.*'`
3430         ;;
3431 esac
3432
3433 case "$fn" in
3434 *~*) tilde=true;;
3435 esac
3436 case "$fn" in
3437 */*) fullpath=true;;
3438 esac
3439 case "$fn" in
3440 *+*) skip=true;;
3441 esac
3442 case "$fn" in
3443 *n*) none_ok=true;;
3444 esac
3445 case "$fn" in
3446 *e*) exp_file=true;;
3447 esac
3448 case "$fn" in
3449 *p*) nopath_ok=true;;
3450 esac
3451
3452 case "$fn" in
3453 *f*) type='File';;
3454 *d*) type='Directory';;
3455 *l*) type='Locate';;
3456 esac
3457
3458 what="$type"
3459 case "$what" in
3460 Locate) what='File';;
3461 esac
3462
3463 case "$exp_file" in
3464 '')
3465         case "$d_portable" in
3466         "$define") ;;
3467         *) exp_file=true;;
3468         esac
3469         ;;
3470 esac
3471
3472 cd ..
3473 while test "$type"; do
3474         redo=''
3475         rp="$orig_rp"
3476         dflt="$orig_dflt"
3477         case "$tilde" in
3478         true) rp="$rp (~name ok)";;
3479         esac
3480         . UU/myread
3481         if test -f UU/getfile.ok && \
3482                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3483         then
3484                 value="$ans"
3485                 ansexp="$ans"
3486                 break
3487         fi
3488         case "$ans" in
3489         none)
3490                 value=''
3491                 ansexp=''
3492                 case "$none_ok" in
3493                 true) type='';;
3494                 esac
3495                 ;;
3496         *)
3497                 case "$tilde" in
3498                 '') value="$ans"
3499                         ansexp="$ans";;
3500                 *)
3501                         value=`UU/filexp $ans`
3502                         case $? in
3503                         0)
3504                                 if test "$ans" != "$value"; then
3505                                         echo "(That expands to $value on this system.)"
3506                                 fi
3507                                 ;;
3508                         *) value="$ans";;
3509                         esac
3510                         ansexp="$value"
3511                         case "$exp_file" in
3512                         '') value="$ans";;
3513                         esac
3514                         ;;
3515                 esac
3516                 case "$fullpath" in
3517                 true)
3518                         case "$ansexp" in
3519                         /*) value="$ansexp" ;;
3520                         [a-zA-Z]:/*) value="$ansexp" ;;
3521                         *)
3522                                 redo=true
3523                                 case "$already" in
3524                                 true)
3525                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3526                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3527                                         ;;
3528                                 *)
3529                                 echo "Please give a full path name, starting with slash." >&4
3530                                         case "$tilde" in
3531                                         true)
3532                                 echo "Note that using ~name is ok provided it expands well." >&4
3533                                                 already=true
3534                                                 ;;
3535                                         esac
3536                                 esac
3537                                 ;;
3538                         esac
3539                         ;;
3540                 esac
3541                 case "$redo" in
3542                 '')
3543                         case "$type" in
3544                         File)
3545                                 for fp in $gfpth; do
3546                                         if test "X$fp" = X.; then
3547                                             pf="$ansexp"
3548                                         else    
3549                                             pf="$fp/$ansexp"
3550                                         fi
3551                                         if test -f "$pf"; then
3552                                                 type=''
3553                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3554                                         then
3555                                                 echo "($value is not a plain file, but that's ok.)"
3556                                                 type=''
3557                                         fi
3558                                         if test X"$type" = X; then
3559                                             value="$pf"
3560                                             break
3561                                         fi
3562                                 done
3563                                 ;;
3564                         Directory)
3565                                 for fp in $gfpth; do
3566                                         if test "X$fp" = X.; then
3567                                             dir="$ans"
3568                                             direxp="$ansexp"
3569                                         else    
3570                                             dir="$fp/$ansexp"
3571                                             direxp="$fp/$ansexp"
3572                                         fi
3573                                         if test -d "$direxp"; then
3574                                                 type=''
3575                                                 value="$dir"
3576                                                 break
3577                                         fi
3578                                 done
3579                                 ;;
3580                         Locate)
3581                                 if test -d "$ansexp"; then
3582                                         echo "(Looking for $loc_file in directory $value.)"
3583                                         value="$value/$loc_file"
3584                                         ansexp="$ansexp/$loc_file"
3585                                 fi
3586                                 if test -f "$ansexp"; then
3587                                         type=''
3588                                 fi
3589                                 case "$nopath_ok" in
3590                                 true)   case "$value" in
3591                                         */*) ;;
3592                                         *)      echo "Assuming $value will be in people's path."
3593                                                 type=''
3594                                                 ;;
3595                                         esac
3596                                         ;;
3597                                 esac
3598                                 ;;
3599                         esac
3600
3601                         case "$skip" in
3602                         true) type='';
3603                         esac
3604
3605                         case "$type" in
3606                         '') ;;
3607                         *)
3608                                 if test "$fastread" = yes; then
3609                                         dflt=y
3610                                 else
3611                                         dflt=n
3612                                 fi
3613                                 rp="$what $value doesn't exist.  Use that name anyway?"
3614                                 . UU/myread
3615                                 dflt=''
3616                                 case "$ans" in
3617                                 y*) type='';;
3618                                 *) echo " ";;
3619                                 esac
3620                                 ;;
3621                         esac
3622                         ;;
3623                 esac
3624                 ;;
3625         esac
3626 done
3627 cd UU
3628 ans="$value"
3629 rp="$orig_rp"
3630 dflt="$orig_dflt"
3631 rm -f getfile.ok
3632 test "X$gfpthkeep" != Xy && gfpth=""
3633 EOSC
3634
3635 : What should the include directory be ?
3636 echo " "
3637 $echo $n "Hmm...  $c"
3638 dflt='/usr/include'
3639 incpath=''
3640 mips_type=''
3641 if $test -f /bin/mips && /bin/mips; then
3642         echo "Looks like a MIPS system..."
3643         $cat >usr.c <<'EOCP'
3644 #ifdef SYSTYPE_BSD43
3645 /bsd43
3646 #endif
3647 EOCP
3648         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3649                 dflt='/bsd43/usr/include'
3650                 incpath='/bsd43'
3651                 mips_type='BSD 4.3'
3652         else
3653                 mips_type='System V'
3654         fi
3655         $rm -f usr.c usr.out
3656         echo "and you're compiling with the $mips_type compiler and libraries."
3657         xxx_prompt=y
3658         echo "exit 0" >mips
3659 else
3660         echo "Doesn't look like a MIPS system."
3661         xxx_prompt=n
3662         echo "exit 1" >mips
3663 fi
3664 chmod +x mips
3665 $eunicefix mips
3666 case "$usrinc" in
3667 '') ;;
3668 *) dflt="$usrinc";;
3669 esac
3670 case "$xxx_prompt" in
3671 y)      fn=d/
3672         echo " "
3673         rp='Where are the include files you want to use?'
3674         . ./getfile
3675         usrinc="$ans"
3676         ;;
3677 *)      usrinc="$dflt"
3678         ;;
3679 esac
3680
3681 : Set private lib path
3682 case "$plibpth" in
3683 '') if ./mips; then
3684                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3685         fi;;
3686 esac
3687 case "$libpth" in
3688 ' ') dlist='';;
3689 '') dlist="$loclibpth $plibpth $glibpth";;
3690 *) dlist="$libpth";;
3691 esac
3692
3693 : Now check and see which directories actually exist, avoiding duplicates
3694 libpth=''
3695 for xxx in $dlist
3696 do
3697     if $test -d $xxx; then
3698                 case " $libpth " in
3699                 *" $xxx "*) ;;
3700                 *) libpth="$libpth $xxx";;
3701                 esac
3702     fi
3703 done
3704 $cat <<'EOM'
3705
3706 Some systems have incompatible or broken versions of libraries.  Among
3707 the directories listed in the question below, please remove any you
3708 know not to be holding relevant libraries, and add any that are needed.
3709 Say "none" for none.
3710
3711 EOM
3712 case "$libpth" in
3713 '') dflt='none';;
3714 *)
3715         set X $libpth
3716         shift
3717         dflt=${1+"$@"}
3718         ;;
3719 esac
3720 rp="Directories to use for library searches?"
3721 . ./myread
3722 case "$ans" in
3723 none) libpth=' ';;
3724 *) libpth="$ans";;
3725 esac
3726
3727 : compute shared library extension
3728 case "$so" in
3729 '')
3730         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3731                 dflt='sl'
3732         else
3733                 dflt='so'
3734         fi
3735         ;;
3736 *) dflt="$so";;
3737 esac
3738 $cat <<EOM
3739
3740 On some systems, shared libraries may be available.  Answer 'none' if
3741 you want to suppress searching of shared libraries for the remainder
3742 of this configuration.
3743
3744 EOM
3745 rp='What is the file extension used for shared libraries?'
3746 . ./myread
3747 so="$ans"
3748
3749 : Define several unixisms.
3750 : Hints files or command line option can be used to override them.
3751 : The convoluted testing is in case hints files set either the old
3752 : or the new name.
3753 case "$_exe" in
3754 '')     case "$exe_ext" in
3755     '') ;;
3756         *)      _exe="$exe_ext" ;;
3757         esac
3758         ;;
3759 esac
3760 case "$_a" in
3761 '')     case "$lib_ext" in
3762     '') _a='.a';;
3763         *)      _a="$lib_ext" ;;
3764         esac
3765         ;;
3766 esac
3767 case "$_o" in
3768 '') case "$obj_ext" in
3769         '')     _o='.o';;
3770         *)      _o="$obj_ext";;
3771         esac
3772         ;;
3773 esac
3774 case "$p_" in
3775 '') case "$path_sep" in
3776         '')     p_=':';;
3777         *)      p_="$path_sep";;
3778         esac
3779         ;;
3780 esac
3781 exe_ext=$_exe
3782 lib_ext=$_a
3783 obj_ext=$_o
3784 path_sep=$p_
3785
3786 : Which makefile gets called first.  This is used by make depend.
3787 case "$firstmakefile" in
3788 '') firstmakefile='makefile';;
3789 esac
3790
3791 case "$usesocks" in
3792 $define|true|[yY]*)     dflt='y';;
3793 *) dflt='n';;
3794 esac
3795 cat <<EOM
3796
3797 Perl can be built to use the SOCKS proxy protocol library.  To do so,
3798 Configure must be run with -Dusesocks.  If you use SOCKS you also need
3799 to use the PerlIO abstraction layer, this will be implicitly selected.
3800
3801 If this doesn't make any sense to you, just accept the default '$dflt'.
3802 EOM
3803 rp='Build Perl for SOCKS?'
3804 . ./myread
3805 case "$ans" in
3806 y|Y)    val="$define" ;;     
3807 *)      val="$undef" ;;
3808 esac
3809 set usesocks
3810 eval $setvar
3811
3812 case "$usesocks" in
3813 $define|true|[yY]*) useperlio="$define";;
3814 esac
3815
3816 : Looking for optional libraries
3817 echo " "
3818 echo "Checking for optional libraries..." >&4
3819 case "$libs" in
3820 ' '|'') dflt='';;
3821 *) dflt="$libs";;
3822 esac
3823 case "$libswanted" in
3824 '') libswanted='c_s';;
3825 esac
3826 case "$usesocks" in
3827 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
3828 esac
3829 libsfound=''
3830 libsfiles=''
3831 libsdirs=''
3832 libspath=''
3833 for thisdir in $libpth $xlibpth; do
3834   test -d $thisdir && libspath="$libspath $thisdir"
3835 done
3836 for thislib in $libswanted; do
3837         for thisdir in $libspath; do
3838             xxx=''
3839             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3840                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
3841                 $test -f "$xxx" && eval $libscheck
3842                 $test -f "$xxx" && libstyle=shared
3843             fi
3844             if test ! -f "$xxx"; then
3845                 xxx=$thisdir/lib$thislib.$so
3846                 $test -f "$xxx" && eval $libscheck
3847                 $test -f "$xxx" && libstyle=shared
3848             fi  
3849             if test ! -f "$xxx"; then
3850                 xxx=$thisdir/lib$thislib$_a
3851                 $test -f "$xxx" && eval $libscheck
3852                 $test -f "$xxx" && libstyle=static
3853             fi
3854             if test ! -f "$xxx"; then
3855                 xxx=$thisdir/$thislib$_a
3856                 $test -f "$xxx" && eval $libscheck
3857                 $test -f "$xxx" && libstyle=static
3858             fi
3859             if test ! -f "$xxx"; then
3860                 xxx=$thisdir/lib${thislib}_s$_a
3861                 $test -f "$xxx" && eval $libscheck
3862                 $test -f "$xxx" && libstyle=static
3863                 $test -f "$xxx" && thislib=${thislib}_s
3864             fi
3865             if test ! -f "$xxx"; then
3866                 xxx=$thisdir/Slib$thislib$_a
3867                 $test -f "$xxx" && eval $libscheck
3868                 $test -f "$xxx" && libstyle=static
3869             fi
3870             if $test -f "$xxx"; then
3871                 case "$libstyle" in
3872                 shared) echo "Found -l$thislib (shared)." ;;
3873                 static) echo "Found -l$thislib." ;;
3874                 *)      echo "Found -l$thislib ($libstyle)." ;;
3875                 esac
3876                 case " $dflt " in
3877                 *"-l$thislib "*);;
3878                 *) dflt="$dflt -l$thislib"
3879                    libsfound="$libsfound $xxx"
3880                    yyy=`basename $xxx`
3881                    libsfiles="$libsfiles $yyy"
3882                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
3883                    case " $libsdirs " in
3884                    *" $yyy "*) ;;
3885                    *) libsdirs="$libsdirs $yyy" ;;
3886                    esac
3887                    ;;
3888                 esac
3889                 break
3890             fi  
3891         done
3892         if $test ! -f "$xxx"; then
3893             echo "No -l$thislib."
3894         fi
3895 done
3896 set X $dflt
3897 shift
3898 dflt="$*"
3899 case "$libs" in
3900 '') dflt="$dflt";;
3901 *) dflt="$libs";;
3902 esac
3903 case "$dflt" in
3904 ' '|'') dflt='none';;
3905 esac
3906
3907 $cat <<EOM
3908
3909 In order to compile $package on your machine, a number of libraries
3910 are usually needed.  Include any other special libraries here as well.
3911 Say "none" for none.  The default list is almost always right.
3912 EOM
3913
3914 echo " "
3915 rp="What libraries to use?"
3916 . ./myread
3917 case "$ans" in
3918 none) libs=' ';;
3919 *) libs="$ans";;
3920 esac
3921
3922 : determine optimization, if desired, or use for debug flag also
3923 case "$optimize" in
3924 ' '|$undef) dflt='none';;
3925 '') dflt='-O';;
3926 *) dflt="$optimize";;
3927 esac
3928 $cat <<EOH
3929
3930 By default, $package compiles with the -O flag to use the optimizer.
3931 Alternately, you might want to use the symbolic debugger, which uses
3932 the -g flag (on traditional Unix systems).  Either flag can be
3933 specified here.  To use neither flag, specify the word "none".
3934
3935 EOH
3936 rp="What optimizer/debugger flag should be used?"
3937 . ./myread
3938 optimize="$ans"
3939 case "$optimize" in
3940 'none') optimize=" ";;
3941 esac
3942
3943 dflt=''
3944 : We will not override a previous value, but we might want to
3945 : augment a hint file
3946 case "$hint" in
3947 default|recommended)
3948         case "$gccversion" in
3949         1*) dflt='-fpcc-struct-return' ;;
3950         esac
3951         case "$optimize" in
3952         *-g*) dflt="$dflt -DDEBUGGING";;
3953         esac
3954         case "$gccversion" in
3955         2*) if test -d /etc/conf/kconfig.d &&
3956                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
3957                 then
3958                         dflt="$dflt -posix"
3959                 fi
3960                 ;;
3961         esac
3962         case "$gccversion" in
3963         1*) ;;
3964         2.[0-8]*) ;;
3965         ?*)     echo " "
3966                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
3967                 echo 'int main(void) { return 0; }' > gcctest.c
3968                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
3969                         echo "Yes, it does." 2>&1
3970                         case "$ccflags" in
3971                         *strict-aliasing*) 
3972                                 echo "Leaving current flags $ccflags alone." 2>&1
3973                                 ;;
3974                         *) dflt="$dflt -fno-strict-aliasing" ;;
3975                         esac
3976                 else
3977                         echo "Nope, it doesn't, but that's ok." 2>&1
3978                 fi
3979                 ;;
3980         esac
3981         ;;
3982 esac
3983
3984 case "$mips_type" in
3985 *BSD*|'') inclwanted="$locincpth $usrinc";;
3986 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
3987 esac
3988 for thisincl in $inclwanted; do
3989         if $test -d $thisincl; then
3990                 if $test x$thisincl != x$usrinc; then
3991                         case "$dflt" in
3992                         *" -I$thisincl "*);;
3993                         *) dflt="$dflt -I$thisincl ";;
3994                         esac
3995                 fi
3996         fi
3997 done
3998
3999 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4000         xxx=true;
4001 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4002         xxx=true;
4003 else
4004         xxx=false;
4005 fi;
4006 if $xxx; then
4007         case "$dflt" in
4008         *$2*);;
4009         *) dflt="$dflt -D$2";;
4010         esac;
4011 fi'
4012
4013 set signal.h LANGUAGE_C; eval $inctest
4014
4015 case "$usesocks" in
4016 $define)
4017         ccflags="$ccflags -DSOCKS"
4018         ;;
4019 esac
4020
4021 case "$hint" in
4022 default|recommended) dflt="$ccflags $dflt" ;;
4023 *) dflt="$ccflags";;
4024 esac
4025
4026 case "$dflt" in
4027 ''|' ') dflt=none;;
4028 esac
4029
4030 $cat <<EOH
4031
4032 Your C compiler may want other flags.  For this question you should include
4033 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4034 but you should NOT include libraries or ld flags like -lwhatever.  If you
4035 want $package to honor its debug switch, you should include -DDEBUGGING here.
4036 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4037
4038 To use no flags, specify the word "none".
4039
4040 EOH
4041 set X $dflt
4042 shift
4043 dflt=${1+"$@"}
4044 rp="Any additional cc flags?"
4045 . ./myread
4046 case "$ans" in
4047 none) ccflags='';;
4048 *) ccflags="$ans";;
4049 esac
4050
4051 : the following weeds options from ccflags that are of no interest to cpp
4052 cppflags="$ccflags"
4053 case "$gccversion" in
4054 1*) cppflags="$cppflags -D__GNUC__"
4055 esac
4056 case "$mips_type" in
4057 '');;
4058 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4059 esac
4060 case "$cppflags" in
4061 '');;
4062 *)
4063         echo " "
4064         echo "Let me guess what the preprocessor flags are..." >&4
4065         set X $cppflags
4066         shift
4067         cppflags=''
4068         $cat >cpp.c <<'EOM'
4069 #define BLURFL foo
4070
4071 BLURFL xx LFRULB
4072 EOM
4073         previous=''
4074         for flag in $*
4075         do
4076                 case "$flag" in
4077                 -*) ftry="$flag";;
4078                 *) ftry="$previous $flag";;
4079                 esac
4080                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4081                         >cpp1.out 2>/dev/null && \
4082                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4083                         >cpp2.out 2>/dev/null && \
4084                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4085                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4086                 then
4087                         cppflags="$cppflags $ftry"
4088                         previous=''
4089                 else
4090                         previous="$flag"
4091                 fi
4092         done
4093         set X $cppflags
4094         shift
4095         cppflags=${1+"$@"}
4096         case "$cppflags" in
4097         *-*)  echo "They appear to be: $cppflags";;
4098         esac
4099         $rm -f cpp.c cpp?.out
4100         ;;
4101 esac
4102
4103 : flags used in final linking phase
4104 case "$ldflags" in
4105 '') if ./venix; then
4106                 dflt='-i -z'
4107         else
4108                 dflt=''
4109         fi
4110         case "$ccflags" in
4111         *-posix*) dflt="$dflt -posix" ;;
4112         esac
4113         ;;
4114 *) dflt="$ldflags";;
4115 esac
4116
4117 : Try to guess additional flags to pick up local libraries.
4118 for thislibdir in $libpth; do
4119         case " $loclibpth " in
4120         *" $thislibdir "*)
4121                 case "$dflt " in 
4122                 *"-L$thislibdir "*) ;;
4123                 *)  dflt="$dflt -L$thislibdir" ;;
4124                 esac
4125                 ;;
4126         esac
4127 done
4128
4129 case "$dflt" in
4130 '') dflt='none' ;;
4131 esac
4132
4133 $cat <<EOH
4134
4135 Your C linker may need flags.  For this question you should
4136 include -L/whatever and any other flags used by the C linker, but you
4137 should NOT include libraries like -lwhatever.
4138
4139 Make sure you include the appropriate -L/path flags if your C linker
4140 does not normally search all of the directories you specified above,
4141 namely
4142         $libpth
4143 To use no flags, specify the word "none".
4144
4145 EOH
4146
4147 rp="Any additional ld flags (NOT including libraries)?"
4148 . ./myread
4149 case "$ans" in
4150 none) ldflags='';;
4151 *) ldflags="$ans";;
4152 esac
4153 rmlist="$rmlist pdp11"
4154
4155 : coherency check
4156 echo " "
4157 echo "Checking your choice of C compiler and flags for coherency..." >&4
4158 $cat > try.c <<'EOF'
4159 #include <stdio.h>
4160 int main() { printf("Ok\n"); exit(0); }
4161 EOF
4162 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
4163 shift
4164 $cat >try.msg <<'EOM'
4165 I've tried to compile and run the following simple program:
4166
4167 EOM
4168 $cat try.c >> try.msg
4169
4170 $cat >> try.msg <<EOM
4171
4172 I used the command:
4173
4174         $*
4175         ./try
4176
4177 and I got the following output:
4178
4179 EOM
4180 dflt=y
4181 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
4182         if $sh -c './try' >>try.msg 2>&1; then
4183                 xxx=`./try`
4184                 case "$xxx" in
4185                 "Ok") dflt=n ;;
4186                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4187                         case " $libs " in
4188                         *" -lsfio "*)
4189                                 cat >> try.msg <<'EOQS'
4190 If $libs contains -lsfio, and sfio is mis-configured, then it
4191 sometimes (apparently) runs and exits with a 0 status, but with no
4192 output!  It may have to do with sfio's use of _exit vs. exit.
4193
4194 EOQS
4195                                 rp="You have a big problem.  Shall I abort Configure"
4196                                 dflt=y
4197                                 ;;
4198                         esac
4199                         ;;
4200                 esac
4201         else
4202                 echo "The program compiled OK, but exited with status $?." >>try.msg
4203                 rp="You have a problem.  Shall I abort Configure"
4204                 dflt=y
4205         fi
4206 else
4207         echo "I can't compile the test program." >>try.msg
4208         rp="You have a BIG problem.  Shall I abort Configure"
4209         dflt=y
4210 fi
4211 case "$dflt" in
4212 y)
4213         $cat try.msg >&4
4214         case "$knowitall" in
4215         '')
4216                 echo "(The supplied flags or libraries might be incorrect.)"
4217                 ;;
4218         *) dflt=n;;
4219         esac
4220         echo " "
4221         . ./myread
4222         case "$ans" in
4223         n*|N*) ;;
4224         *)      echo "Ok.  Stopping Configure." >&4
4225                 exit 1
4226                 ;;
4227         esac
4228         ;;
4229 n) echo "OK, that should do.";;
4230 esac
4231 $rm -f try try.* core
4232
4233 : define an is-a-typedef? function
4234 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4235 case "$inclist" in
4236 "") inclist="sys/types.h";;
4237 esac;
4238 eval "varval=\$$var";
4239 case "$varval" in
4240 "")
4241         $rm -f temp.c;
4242         for inc in $inclist; do
4243                 echo "#include <$inc>" >>temp.c;
4244         done;
4245         echo "#ifdef $type" >> temp.c;
4246         echo "printf(\"We have $type\");" >> temp.c;
4247         echo "#endif" >> temp.c;
4248         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4249         if $contains $type temp.E >/dev/null 2>&1; then
4250                 eval "$var=\$type";
4251         else
4252                 eval "$var=\$def";
4253         fi;
4254         $rm -f temp.?;;
4255 *) eval "$var=\$varval";;
4256 esac'
4257
4258 : define an is-a-typedef? function that prompts if the type is not available.
4259 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4260 case "$inclist" in
4261 "") inclist="sys/types.h";;
4262 esac;
4263 eval "varval=\$$var";
4264 case "$varval" in
4265 "")
4266         $rm -f temp.c;
4267         for inc in $inclist; do
4268                 echo "#include <$inc>" >>temp.c;
4269         done;
4270         echo "#ifdef $type" >> temp.c;
4271         echo "printf(\"We have $type\");" >> temp.c;
4272         echo "#endif" >> temp.c;
4273         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4274         echo " " ;
4275         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
4276         if $contains $type temp.E >/dev/null 2>&1; then
4277                 echo "$type found." >&4;
4278                 eval "$var=\$type";
4279         else
4280                 echo "$type NOT found." >&4;
4281                 dflt="$def";
4282                 . ./myread ;
4283                 eval "$var=\$ans";
4284         fi;
4285         $rm -f temp.?;;
4286 *) eval "$var=\$varval";;
4287 esac'
4288
4289 : define a shorthand compile call
4290 compile='
4291 mc_file=$1;
4292 shift;
4293 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
4294 : define a shorthand compile call for compilations that should be ok.
4295 compile_ok='
4296 mc_file=$1;
4297 shift;
4298 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
4299
4300 : check for lengths of integral types
4301 echo " "
4302 case "$intsize" in
4303 '')
4304         echo "Checking to see how big your integers are..." >&4
4305         $cat >intsize.c <<'EOCP'
4306 #include <stdio.h>
4307 int main()
4308 {
4309         printf("intsize=%d;\n", (int)sizeof(int));
4310         printf("longsize=%d;\n", (int)sizeof(long));
4311         printf("shortsize=%d;\n", (int)sizeof(short));
4312         exit(0);
4313 }
4314 EOCP
4315         set intsize
4316         if eval $compile_ok && ./intsize > /dev/null; then
4317                 eval `./intsize`
4318                 echo "Your integers are $intsize bytes long."
4319                 echo "Your long integers are $longsize bytes long."
4320                 echo "Your short integers are $shortsize bytes long."
4321         else
4322                 $cat >&4 <<EOM
4323 !
4324 Help! I can't compile and run the intsize test program: please enlighten me!
4325 (This is probably a misconfiguration in your system or libraries, and
4326 you really ought to fix it.  Still, I'll try anyway.)
4327 !
4328 EOM
4329                 dflt=4
4330                 rp="What is the size of an integer (in bytes)?"
4331                 . ./myread
4332                 intsize="$ans"
4333                 dflt=$intsize
4334                 rp="What is the size of a long integer (in bytes)?"
4335                 . ./myread
4336                 longsize="$ans"
4337                 dflt=2
4338                 rp="What is the size of a short integer (in bytes)?"
4339                 . ./myread
4340                 shortsize="$ans"
4341         fi
4342         ;;
4343 esac
4344 $rm -f intsize intsize.*
4345
4346 : see what type lseek is declared as in the kernel
4347 rp="What is the type used for lseek's offset on this system?"
4348 set off_t lseektype long stdio.h sys/types.h
4349 eval $typedef_ask
4350
4351 echo " "
4352 echo "Checking to see how big your file offsets are..." >&4
4353 $cat >try.c <<EOCP
4354 #include <sys/types.h>
4355 #include <stdio.h>
4356 int main()
4357 {
4358     printf("%d\n", (int)sizeof($lseektype));
4359     return(0); 
4360 }
4361 EOCP
4362 set try
4363 if eval $compile_ok; then
4364         lseeksize=`./try`
4365         echo "Your file offsets are $lseeksize bytes long."
4366 else
4367         dflt=$longsize
4368         echo " "
4369         echo "(I can't seem to compile the test program.  Guessing...)"
4370         rp="What is the size of your file offsets (in bytes)?"
4371         . ./myread
4372         lseeksize="$ans"
4373 fi
4374 $rm -f try.c try
4375
4376 : see what type file positions are declared as in the library
4377 rp="What is the type for file position used by fsetpos()?"
4378 set fpos_t fpostype long stdio.h sys/types.h
4379 eval $typedef_ask
4380
4381 echo " "
4382 case "$fpostype" in
4383 *_t) zzz="$fpostype"    ;;
4384 *)   zzz="fpos_t"       ;;
4385 esac
4386 echo "Checking the size of $zzz..." >&4 
4387 cat > try.c <<EOCP
4388 #include <sys/types.h>
4389 #include <stdio.h>
4390 int main() {
4391     printf("%d\n", (int)sizeof($fpostype));
4392     exit(0);
4393 }
4394 EOCP
4395 set try
4396 if eval $compile_ok; then
4397         yyy=`./try`
4398         case "$yyy" in
4399         '')     fpossize=4
4400                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4401                 ;;
4402         *)      fpossize=$yyy
4403                 echo "Your $zzz is $fpossize bytes long."
4404                 ;;
4405         esac
4406 else
4407         dflt="$longsize"
4408         echo " " >&4
4409         echo "(I can't compile the test program.  Guessing...)" >&4
4410         rp="What is the size of your file positions (in bytes)?"
4411         . ./myread
4412         fpossize="$ans"
4413 fi
4414
4415
4416
4417 # Backward compatibility (uselfs is deprecated).
4418 case "$uselfs" in
4419 "$define"|true|[yY]*)
4420         cat <<EOM >&4
4421
4422 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
4423 EOM
4424         uselargefiles="$define"
4425         ;;
4426 esac                          
4427
4428 case "$lseeksize:$fpossize" in
4429 8:8) cat <<EOM
4430
4431 You can have files larger than 2 gigabytes.
4432 EOM
4433    val="$define" ;;
4434 *)    case "$uselargefiles" in
4435    "$undef"|false|[nN]*) dflt='n' ;;
4436    *)   dflt='y' ;;
4437    esac
4438    cat <<EOM
4439
4440 Perl can be built to understand large files (files larger than 2 gigabytes)
4441 on some systems.  To do so, Configure can be run with -Duselargefiles.
4442
4443 If this doesn't make any sense to you, just accept the default '$dflt'.
4444 EOM
4445    rp='Try to understand large files, if available?'
4446    . ./myread
4447    case "$ans" in
4448    y|Y)         val="$define" ;;
4449    *)           val="$undef"  ;;
4450    esac
4451    ;;
4452 esac
4453 set uselargefiles
4454 eval $setvar
4455 case "$uselargefiles" in
4456 "$define")
4457 : Look for a hint-file generated 'call-back-unit'.  If the
4458 : user has specified that a large files perl is to be built,
4459 : we may need to set or change some other defaults.
4460         if $test -f uselargefiles.cbu; then
4461                 echo "Your platform has some specific hints for large file builds, using them..."
4462                 . ./uselargefiles.cbu
4463                 echo " "
4464                 echo "Rechecking to see how big your file offsets are..." >&4
4465                 $cat >try.c <<EOCP
4466 #include <sys/types.h>
4467 #include <stdio.h>
4468 int main()
4469 {
4470     printf("%d\n", (int)sizeof($lseektype));
4471     return(0); 
4472 }
4473 EOCP
4474                 set try
4475                 if eval $compile_ok; then
4476                         lseeksize=`./try`
4477                         $echo "Your file offsets are now $lseeksize bytes long."
4478                 else
4479                         dflt="$lseeksize"
4480                         echo " "
4481                         echo "(I can't seem to compile the test program.  Guessing...)"
4482                         rp="What is the size of your file offsets (in bytes)?"
4483                         . ./myread
4484                         lseeksize="$ans"
4485                 fi
4486                 case "$fpostype" in
4487                 *_t) zzz="$fpostype"    ;;
4488                 *)   zzz="fpos_t"       ;;
4489                 esac
4490                 $echo $n "Rechecking the size of $zzz...$c" >&4 
4491                 $cat > try.c <<EOCP
4492 #include <sys/types.h>
4493 #include <stdio.h>
4494 int main() {
4495     printf("%d\n", (int)sizeof($fpostype));
4496     exit(0);
4497 }
4498 EOCP
4499                 set try
4500                 if eval $compile_ok; then
4501                         yyy=`./try`
4502                         dflt="$lseeksize"
4503                         case "$yyy" in
4504                         '')     echo " "
4505                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4506                                 ;;
4507                         *)      fpossize=$yyy
4508                                 echo " $fpossize bytes." >&4
4509                                 ;;
4510                         esac
4511                 else
4512                         dflt="$fpossize"
4513                         echo " "
4514                         echo "(I can't compile the test program.  Guessing...)" >&4
4515                         rp="What is the size of your file positions (in bytes)?"
4516                         . ./myread
4517                         fpossize="$ans"
4518                 fi
4519                 $rm -f try.c try
4520         fi
4521         ;;
4522 esac
4523
4524
4525 case "$usemorebits" in
4526 "$define"|true|[yY]*)
4527         use64bitint="$define"
4528         uselongdouble="$define"
4529         usemorebits="$define"
4530         ;;
4531 *)      usemorebits="$undef"
4532         ;;
4533 esac
4534
4535
4536 case "$uselonglong" in
4537 "$define"|true|[yY]*)
4538         cat <<EOM >&4
4539
4540 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
4541 EOM
4542         use64bitint="$define"
4543         ;;
4544 esac                          
4545 case "$use64bits" in
4546 "$define"|true|[yY]*)
4547         cat <<EOM >&4
4548
4549 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
4550 EOM
4551         use64bitint="$define"
4552         ;;
4553 esac                          
4554 case "$use64bitints" in
4555 "$define"|true|[yY]*)
4556         cat <<EOM >&4
4557
4558 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
4559 EOM
4560         use64bitint="$define"
4561         ;;
4562 esac                          
4563 case "$use64bitsint" in
4564 "$define"|true|[yY]*)
4565         cat <<EOM >&4
4566
4567 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
4568 EOM
4569         use64bitint="$define"
4570         ;;
4571 esac                          
4572 case "$uselonglongs" in
4573 "$define"|true|[yY]*)
4574         cat <<EOM >&4
4575
4576 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
4577 EOM
4578         use64bitint="$define"
4579         ;;
4580 esac                          
4581 case "$use64bitsall" in
4582 "$define"|true|[yY]*)
4583         cat <<EOM >&4
4584
4585 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
4586 EOM
4587         use64bitall="$define"
4588         ;;
4589 esac                          
4590
4591 case "$ccflags" in
4592 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
4593 esac
4594 case "$use64bitall" in
4595 "$define"|true|[yY]*) use64bitint="$define" ;;
4596 esac
4597
4598 case "$longsize" in
4599 8) cat <<EOM
4600
4601 You have natively 64-bit long integers.
4602 EOM
4603    val="$define"
4604    ;;
4605 *) case "$use64bitint" in
4606    "$define"|true|[yY]*) dflt='y';;
4607    *) dflt='n';;
4608    esac
4609    cat <<EOM
4610
4611 Perl can be built to take advantage of 64-bit integer types
4612 on some systems.  To do so, Configure can be run with -Duse64bitint.
4613 Choosing this option will most probably introduce binary incompatibilities.
4614
4615 If this doesn't make any sense to you, just accept the default '$dflt'.
4616 EOM
4617    rp='Try to use 64-bit integers, if available?'
4618    . ./myread
4619    case "$ans" in
4620    [yY]*) val="$define" ;;
4621    *)     val="$undef"  ;;
4622    esac
4623    ;;
4624 esac
4625 set use64bitint
4626 eval $setvar
4627
4628 case "$use64bitall" in
4629 "$define"|true|[yY]*) dflt='y' ;;
4630 *) case "$longsize" in
4631    8) dflt='y' ;;
4632    *) dflt='n' ;;
4633    esac
4634    ;;
4635 esac    
4636 cat <<EOM
4637
4638 You may also choose to try maximal 64-bitness.  It means using as much
4639 64-bitness as possible on the platform.  This in turn means even more
4640 binary incompatibilities.  On the other hand, your platform may not
4641 have any more 64-bitness available than what you already have chosen.
4642
4643 If this doesn't make any sense to you, just accept the default '$dflt'.
4644 EOM
4645 rp='Try to use maximal 64-bit support, if available?'
4646 . ./myread
4647 case "$ans" in
4648 [yY]*) val="$define" ;;
4649 *)     val="$undef"  ;;
4650 esac
4651 set use64bitall
4652 eval $setvar
4653 case "$use64bitall" in
4654 "$define")
4655         case "$use64bitint" in
4656         "$undef")
4657                 cat <<EOM
4658
4659 Since you have chosen a maximally 64-bit build, I'm also turning on
4660 the use of 64-bit integers.
4661 EOM
4662                 use64bitint="$define" ;;
4663         esac
4664         ;;
4665 esac
4666
4667 case "$use64bitint" in
4668 "$define"|true|[yY]*)
4669 : Look for a hint-file generated 'call-back-unit'.  If the
4670 : user has specified that a 64-bit perl is to be built,
4671 : we may need to set or change some other defaults.
4672         if $test -f use64bitint.cbu; then
4673                 echo "Your platform has some specific hints for 64-bit integers, using them..."
4674                 . ./use64bitint.cbu
4675         fi
4676         case "$longsize" in
4677         4) case "$archname64" in
4678            '') archname64=64int ;;
4679            esac
4680            ;;
4681         esac
4682         ;;
4683 esac
4684
4685 case "$use64bitall" in
4686 "$define"|true|[yY]*)
4687 : Look for a hint-file generated 'call-back-unit'.  If the
4688 : user has specified that a maximally 64-bit perl is to be built,
4689 : we may need to set or change some other defaults.
4690         if $test -f use64bitall.cbu; then
4691                 echo "Your platform has some specific hints for 64-bit builds, using them..."
4692                 . ./use64bitall.cbu
4693         fi
4694         case "$longsize" in
4695         4) case "$archname64" in
4696            ''|64int) archname64=64all ;;
4697            esac
4698            ;;
4699         esac
4700         ;;
4701 esac
4702
4703 echo " "
4704 echo "Checking for GNU C Library..." >&4
4705 cat >gnulibc.c <<EOM
4706 #include <stdio.h>
4707 int main()
4708 {
4709 #ifdef __GLIBC__
4710     exit(0);
4711 #else
4712     exit(1);
4713 #endif
4714 }
4715 EOM
4716 set gnulibc
4717 if eval $compile_ok && ./gnulibc; then
4718         val="$define"
4719         echo "You are using the GNU C Library"
4720 else
4721         val="$undef"
4722         echo "You are not using the GNU C Library"
4723 fi
4724 $rm -f gnulibc*
4725 set d_gnulibc
4726 eval $setvar
4727
4728 : see if nm is to be used to determine whether a symbol is defined or not
4729 case "$usenm" in
4730 '')
4731         dflt=''
4732         case "$d_gnulibc" in
4733         "$define")
4734                 echo " "
4735                 echo "nm probably won't work on the GNU C Library." >&4
4736                 dflt=n
4737                 ;;
4738         esac
4739         case "$dflt" in
4740         '') 
4741                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4742                         echo " "
4743                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4744                         echo "'nm' won't be sufficient on this sytem." >&4
4745                         dflt=n
4746                 fi
4747                 ;;
4748         esac
4749         case "$dflt" in
4750         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4751                 if $test $dflt -gt 20; then
4752                         dflt=y
4753                 else
4754                         dflt=n
4755                 fi
4756                 ;;
4757         esac
4758         ;;
4759 *)
4760         case "$usenm" in
4761         true|$define) dflt=y;;
4762         *) dflt=n;;
4763         esac
4764         ;;
4765 esac
4766 $cat <<EOM
4767
4768 I can use $nm to extract the symbols from your C libraries. This
4769 is a time consuming task which may generate huge output on the disk (up
4770 to 3 megabytes) but that should make the symbols extraction faster. The
4771 alternative is to skip the 'nm' extraction part and to compile a small
4772 test program instead to determine whether each symbol is present. If
4773 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4774 this may be the best solution.
4775
4776 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4777
4778 EOM
4779 rp="Shall I use $nm to extract C symbols from the libraries?"
4780 . ./myread
4781 case "$ans" in
4782 [Nn]*) usenm=false;;
4783 *) usenm=true;;
4784 esac
4785
4786 runnm=$usenm
4787 case "$reuseval" in
4788 true) runnm=false;;
4789 esac
4790
4791 : nm options which may be necessary
4792 case "$nm_opt" in
4793 '') if $test -f /mach_boot; then
4794                 nm_opt=''       # Mach
4795         elif $test -d /usr/ccs/lib; then
4796                 nm_opt='-p'     # Solaris (and SunOS?)
4797         elif $test -f /dgux; then
4798                 nm_opt='-p'     # DG-UX
4799         elif $test -f /lib64/rld; then
4800                 nm_opt='-p'     # 64-bit Irix
4801         else
4802                 nm_opt=''
4803         fi;;
4804 esac
4805
4806 : nm options which may be necessary for shared libraries but illegal
4807 : for archive libraries.  Thank you, Linux.
4808 case "$nm_so_opt" in
4809 '')     case "$myuname" in
4810         *linux*)
4811                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4812                         nm_so_opt='--dynamic'
4813                 fi
4814                 ;;
4815         esac
4816         ;;
4817 esac
4818
4819 case "$runnm" in
4820 true)
4821 : get list of predefined functions in a handy place
4822 echo " "
4823 case "$libc" in
4824 '') libc=unknown
4825         case "$libs" in
4826         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4827         esac
4828         ;;
4829 esac
4830 libnames='';
4831 case "$libs" in
4832 '') ;;
4833 *)  for thislib in $libs; do
4834         case "$thislib" in
4835         -lc|-lc_s)
4836                 : Handle C library specially below.
4837                 ;;
4838         -l*)
4839                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4840                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4841                         :
4842                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4843                         :
4844                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4845                         :
4846                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4847                         :
4848                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4849                         :
4850                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4851                         :
4852                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4853                         :
4854                 else
4855                         try=''
4856                 fi
4857                 libnames="$libnames $try"
4858                 ;;
4859         *) libnames="$libnames $thislib" ;;
4860         esac
4861         done
4862         ;;
4863 esac
4864 xxx=normal
4865 case "$libc" in
4866 unknown)
4867         set /lib/libc.$so
4868         for xxx in $libpth; do
4869                 $test -r $1 || set $xxx/libc.$so
4870                 : The messy sed command sorts on library version numbers.
4871                 $test -r $1 || \
4872                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4873                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4874                                 h
4875                                 s/[0-9][0-9]*/0000&/g
4876                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4877                                 G
4878                                 s/\n/ /' | \
4879                          $sort | $sed -e 's/^.* //'`
4880                 eval set \$$#
4881         done
4882         $test -r $1 || set /usr/ccs/lib/libc.$so
4883         $test -r $1 || set /lib/libsys_s$_a
4884         ;;
4885 *)
4886         set blurfl
4887         ;;
4888 esac
4889 if $test -r "$1"; then
4890         echo "Your (shared) C library seems to be in $1."
4891         libc="$1"
4892 elif $test -r /lib/libc && $test -r /lib/clib; then
4893         echo "Your C library seems to be in both /lib/clib and /lib/libc."
4894         xxx=apollo
4895         libc='/lib/clib /lib/libc'
4896         if $test -r /lib/syslib; then
4897                 echo "(Your math library is in /lib/syslib.)"
4898                 libc="$libc /lib/syslib"
4899         fi
4900 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4901         echo "Your C library seems to be in $libc, as you said before."
4902 elif $test -r $incpath/usr/lib/libc$_a; then
4903         libc=$incpath/usr/lib/libc$_a;
4904         echo "Your C library seems to be in $libc.  That's fine."
4905 elif $test -r /lib/libc$_a; then
4906         libc=/lib/libc$_a;
4907         echo "Your C library seems to be in $libc.  You're normal."
4908 else
4909         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
4910                 :
4911         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4912                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4913         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4914                 :
4915         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4916                 :
4917         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4918                 :
4919         else
4920                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4921         fi
4922         if $test -r "$tans"; then
4923                 echo "Your C library seems to be in $tans, of all places."
4924                 libc=$tans
4925         else
4926                 libc='blurfl'
4927         fi
4928 fi
4929 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4930         dflt="$libc"
4931         cat <<EOM
4932
4933 If the guess above is wrong (which it might be if you're using a strange
4934 compiler, or your machine supports multiple models), you can override it here.
4935
4936 EOM
4937 else
4938         dflt=''
4939         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
4940         cat >&4 <<EOM
4941 I can't seem to find your C library.  I've looked in the following places:
4942
4943 EOM
4944         $sed 's/^/      /' libpath
4945         cat <<EOM
4946
4947 None of these seems to contain your C library. I need to get its name...
4948
4949 EOM
4950 fi
4951 fn=f
4952 rp='Where is your C library?'
4953 . ./getfile
4954 libc="$ans"
4955
4956 echo " "
4957 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
4958 set X `cat libnames`
4959 shift
4960 xxx=files
4961 case $# in 1) xxx=file; esac
4962 echo "Extracting names from the following $xxx for later perusal:" >&4
4963 echo " "
4964 $sed 's/^/      /' libnames >&4
4965 echo " "
4966 $echo $n "This may take a while...$c" >&4
4967
4968 for file in $*; do
4969         case $file in
4970         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
4971         *) $nm $nm_opt $file 2>/dev/null;;
4972         esac
4973 done >libc.tmp
4974
4975 $echo $n ".$c"
4976 $grep fprintf libc.tmp > libc.ptf
4977 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
4978 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
4979 xxx='[ADTSIW]'
4980 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
4981         eval $xscan;\
4982         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4983                 eval $xrun
4984 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
4985         eval $xscan;\
4986         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4987                 eval $xrun
4988 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
4989         eval $xscan;\
4990         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4991                 eval $xrun
4992 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //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 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
4997         eval $xscan;\
4998         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4999                 eval $xrun
5000 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5001         eval $xscan;\
5002         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5003                 eval $xrun
5004 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5005                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5006         eval $xscan;\
5007         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5008                 eval $xrun
5009 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5010         eval $xscan;\
5011         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5012                 eval $xrun
5013 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5014         eval $xscan;\
5015         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5016                 eval $xrun
5017 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5018         eval $xscan;\
5019         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5020                 eval $xrun
5021 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5022         eval $xscan;\
5023         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5024                 eval $xrun
5025 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5026         eval $xscan;\
5027         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5028                 eval $xrun
5029 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5030         eval $xscan;\
5031         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5032                 eval $xrun
5033 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5034         eval $xscan;\
5035         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5036                 eval $xrun
5037 else
5038         $nm -p $* 2>/dev/null >libc.tmp
5039         $grep fprintf libc.tmp > libc.ptf
5040         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5041                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5042         then
5043                 nm_opt='-p'
5044                 eval $xrun
5045         else
5046                 echo " "
5047                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5048                 com=''
5049                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5050                         for thisname in $libnames $libc; do
5051                                 $ar t $thisname >>libc.tmp
5052                         done
5053                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5054                         echo "Ok." >&4
5055                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5056                         # Repeat libc to extract forwarders to DLL entries too
5057                         for thisname in $libnames $libc; do
5058                                 $ar tv $thisname >>libc.tmp
5059                                 # Revision 50 of EMX has bug in $ar.
5060                                 # it will not extract forwarders to DLL entries
5061                                 # Use emximp which will extract exactly them.
5062                                 emximp -o tmp.imp $thisname \
5063                                     2>/dev/null && \
5064                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5065                                     < tmp.imp >>libc.tmp
5066                                 $rm tmp.imp
5067                         done
5068                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5069                         echo "Ok." >&4
5070                 else
5071                         echo "$ar didn't seem to work right." >&4
5072                         echo "Maybe this is a Cray...trying bld instead..." >&4
5073                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5074                         then
5075                                 for thisname in $libnames; do
5076                                         bld t $libnames | \
5077                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5078                                         $ar t $thisname >>libc.tmp
5079                                 done
5080                                 echo "Ok." >&4
5081                         else
5082                                 echo "That didn't work either.  Giving up." >&4
5083                                 exit 1
5084                         fi
5085                 fi
5086         fi
5087 fi
5088 nm_extract="$com"
5089 if $test -f /lib/syscalls.exp; then
5090         echo " "
5091         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5092         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
5093 fi
5094 ;;
5095 esac
5096 $rm -f libnames libpath
5097
5098 : is a C symbol defined?
5099 csym='tlook=$1;
5100 case "$3" in
5101 -v) tf=libc.tmp; tc=""; tdc="";;
5102 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5103 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5104 esac;
5105 tx=yes;
5106 case "$reuseval-$4" in
5107 true-) ;;
5108 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5109 esac;
5110 case "$tx" in
5111 yes)
5112         case "$runnm" in
5113         true)
5114                 if $contains $tlook $tf >/dev/null 2>&1;
5115                 then tval=true;
5116                 else tval=false;
5117                 fi;;
5118         *)
5119                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5120                 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
5121                 then tval=true;
5122                 else tval=false;
5123                 fi;
5124                 $rm -f t t.c;;
5125         esac;;
5126 *)
5127         case "$tval" in
5128         $define) tval=true;;
5129         *) tval=false;;
5130         esac;;
5131 esac;
5132 eval "$2=$tval"'
5133
5134 : define an is-in-libc? function
5135 inlibc='echo " "; td=$define; tu=$undef;
5136 sym=$1; var=$2; eval "was=\$$2";
5137 tx=yes;
5138 case "$reuseval$was" in
5139 true) ;;
5140 true*) tx=no;;
5141 esac;
5142 case "$tx" in
5143 yes)
5144         set $sym tres -f;
5145         eval $csym;
5146         case "$tres" in
5147         true)
5148                 echo "$sym() found." >&4;
5149                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5150         *)
5151                 echo "$sym() NOT found." >&4;
5152                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5153         esac;;
5154 *)
5155         case "$was" in
5156         $define) echo "$sym() found." >&4;;
5157         *) echo "$sym() NOT found." >&4;;
5158         esac;;
5159 esac'
5160
5161 : see if sqrtl exists
5162 set sqrtl d_sqrtl
5163 eval $inlibc
5164
5165 case "$ccflags" in
5166 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
5167 esac
5168
5169 case "$uselongdouble" in
5170 $define|true|[yY]*)     dflt='y';;
5171 *) dflt='n';;
5172 esac
5173 cat <<EOM
5174
5175 Perl can be built to take advantage of long doubles which
5176 (if available) may give more accuracy and range for floating point numbers.
5177
5178 If this doesn't make any sense to you, just accept the default '$dflt'.
5179 EOM
5180 rp='Try to use long doubles if available?'
5181 . ./myread
5182 case "$ans" in
5183 y|Y)    val="$define"   ;;
5184 *)      val="$undef"    ;;
5185 esac
5186 set uselongdouble
5187 eval $setvar
5188
5189 case "$uselongdouble" in
5190 true|[yY]*) uselongdouble="$define" ;;
5191 esac
5192
5193 case "$uselongdouble" in
5194 $define)
5195 : Look for a hint-file generated 'call-back-unit'.  If the
5196 : user has specified that long doubles should be used,
5197 : we may need to set or change some other defaults.
5198         if $test -f uselongdouble.cbu; then
5199                 echo "Your platform has some specific hints for long doubles, using them..."
5200                 . ./uselongdouble.cbu
5201         else
5202                 $cat <<EOM
5203 (Your platform doesn't have any specific hints for long doubles.)
5204 EOM
5205         fi
5206         ;;
5207 esac
5208
5209 case "$uselongdouble:$d_sqrtl" in
5210 $define:$undef)
5211                 $cat <<EOM >&4
5212
5213 *** You requested the use of long doubles but you do not seem to have
5214 *** the mathematic functions for long doubles.  I'm disabling the use
5215 *** of long doubles.
5216
5217 EOM
5218         uselongdouble=$undef
5219         ;;
5220 esac
5221
5222 : check for length of double
5223 echo " "
5224 case "$doublesize" in
5225 '')
5226         echo "Checking to see how big your double precision numbers are..." >&4
5227         $cat >try.c <<'EOCP'
5228 #include <stdio.h>
5229 int main()
5230 {
5231     printf("%d\n", (int)sizeof(double));
5232     exit(0);
5233 }
5234 EOCP
5235         set try
5236         if eval $compile_ok; then
5237                 doublesize=`./try`
5238                 echo "Your double is $doublesize bytes long."
5239         else
5240                 dflt='8'
5241                 echo "(I can't seem to compile the test program.  Guessing...)"
5242                 rp="What is the size of a double precision number (in bytes)?"
5243                 . ./myread
5244                 doublesize="$ans"
5245         fi
5246         ;;
5247 esac
5248 $rm -f try.c try
5249
5250 : check for long doubles
5251 echo " "
5252 echo "Checking to see if you have long double..." >&4
5253 echo 'int main() { long double x = 7.0; }' > try.c
5254 set try
5255 if eval $compile; then
5256         val="$define"
5257         echo "You have long double."
5258 else
5259         val="$undef"
5260         echo "You do not have long double."
5261 fi
5262 $rm try.*
5263 set d_longdbl
5264 eval $setvar
5265
5266 : check for length of long double
5267 case "${d_longdbl}${longdblsize}" in
5268 $define)
5269         echo " "
5270         echo "Checking to see how big your long doubles are..." >&4
5271         $cat >try.c <<'EOCP'
5272 #include <stdio.h>
5273 int main()
5274 {
5275         printf("%d\n", sizeof(long double));
5276 }
5277 EOCP
5278         set try
5279         set try
5280         if eval $compile; then
5281                 longdblsize=`./try$exe_ext`
5282                 echo "Your long doubles are $longdblsize bytes long."
5283         else
5284                 dflt='8'
5285                 echo " "
5286                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
5287                 rp="What is the size of a long double (in bytes)?"
5288                 . ./myread
5289                 longdblsize="$ans"
5290         fi
5291         if $test "X$doublesize" = "X$longdblsize"; then
5292                 echo "(That isn't any different from an ordinary double.)"
5293         fi      
5294         ;;
5295 esac
5296 $rm -f try.* try
5297
5298 case "$useperlio" in
5299 $define|true|[yY]*|'')  dflt='y';;
5300 *) dflt='n';;
5301 esac
5302 cat <<EOM
5303
5304 Previous version of $package used the standard IO mechanisms as
5305 defined in <stdio.h>.  Versions 5.003_02 and later of $package allow
5306 alternate IO mechanisms via the PerlIO abstraction layer, but the
5307 stdio mechanism is still available if needed.  The abstraction layer
5308 can use AT&T's sfio (if you already have sfio installed) or regular stdio.
5309 Using PerlIO with sfio may cause problems with some extension modules.
5310
5311 If this doesn't make any sense to you, just accept the default '$dflt'.
5312 EOM
5313 rp='Use the PerlIO abstraction layer?'
5314 . ./myread
5315 case "$ans" in
5316 y|Y) 
5317         val="$define"
5318         ;;
5319 *)      
5320         echo "Ok, doing things the stdio way."
5321         val="$undef"
5322         ;;
5323 esac
5324 set useperlio
5325 eval $setvar 
5326
5327 case "$usesocks" in
5328 $define|true|[yY]*)
5329         case "$useperlio" in
5330         $define|true|[yY]*) ;;
5331         *)      cat >&4 <<EOM
5332
5333 You are using the SOCKS proxy protocol library which means that you
5334 should also use the PerlIO layer.  You may be headed for trouble.
5335
5336 EOM
5337                 ;;
5338         esac
5339         ;;
5340 esac
5341
5342         
5343 : determine the architecture name
5344 echo " "
5345 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
5346         tarch=`arch`"-$osname"
5347 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
5348         if uname -m > tmparch 2>&1 ; then
5349                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
5350                         -e 's/$/'"-$osname/" tmparch`
5351         else
5352                 tarch="$osname"
5353         fi
5354         $rm -f tmparch
5355 else
5356         tarch="$osname"
5357 fi
5358 case "$myarchname" in
5359 ''|"$tarch") ;;
5360 *)
5361         echo "(Your architecture name used to be $myarchname.)"
5362         archname=''
5363         ;;
5364 esac
5365 myarchname="$tarch"
5366 case "$archname" in
5367 '') dflt="$tarch";;
5368 *) dflt="$archname";;
5369 esac
5370 rp='What is your architecture name'
5371 . ./myread
5372 archname="$ans"
5373 case "$usethreads" in
5374 $define)
5375         echo "Threads selected." >&4
5376         case "$archname" in
5377         *-thread*) echo "...and architecture name already has -thread." >&4
5378                 ;;
5379         *)      archname="$archname-thread"
5380                 echo "...setting architecture name to $archname." >&4
5381                 ;;
5382         esac
5383         ;;
5384 esac
5385 case "$usemultiplicity" in
5386 $define)
5387         echo "Multiplicity selected." >&4
5388         case "$archname" in
5389         *-multi*) echo "...and architecture name already has -multi." >&4
5390                 ;;
5391         *)      archname="$archname-multi"
5392                 echo "...setting architecture name to $archname." >&4
5393                 ;;
5394         esac
5395         ;;
5396 esac
5397 case "$use64bitint$use64bitall" in
5398 *"$define"*)
5399         case "$archname64" in
5400         '')
5401                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
5402                 ;;
5403         *)
5404                 case "$use64bitint" in
5405                 "$define") echo "64 bit integers selected." >&4 ;;
5406                 esac
5407                 case "$use64bitall" in
5408                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
5409                 esac
5410                 case "$archname" in
5411                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
5412                         ;;
5413                 *)      archname="$archname-$archname64"
5414                         echo "...setting architecture name to $archname." >&4
5415                         ;;
5416                 esac
5417                 ;;
5418         esac
5419 esac
5420 case "$uselongdouble" in
5421 $define)
5422         echo "Long doubles selected." >&4
5423         case "$longdblsize" in
5424         $doublesize)
5425                 "...but long doubles are equal to doubles, not changing architecture name." >&4
5426                 ;;
5427         *)
5428                 case "$archname" in
5429                 *-ld*) echo "...and architecture name already has -ld." >&4
5430                         ;;
5431                 *)      archname="$archname-ld"
5432                         echo "...setting architecture name to $archname." >&4
5433                         ;;
5434                 esac
5435                 ;;
5436         esac
5437         ;;
5438 esac
5439 case "$useperlio" in
5440 $define)
5441         echo "Perlio selected." >&4
5442         ;;
5443 *)
5444         echo "Perlio not selected, using stdio." >&4
5445         case "$archname" in
5446         *-stdio*) echo "...and architecture name already has -stdio." >&4
5447                 ;;
5448         *)      archname="$archname-stdio"
5449                 echo "...setting architecture name to $archname." >&4
5450                 ;;
5451         esac
5452         ;;
5453 esac
5454
5455 : determine root of directory hierarchy where package will be installed.
5456 case "$prefix" in
5457 '')
5458         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
5459         ;;
5460 *)
5461         dflt="$prefix"
5462         ;;
5463 esac
5464 $cat <<EOM
5465
5466 By default, $package will be installed in $dflt/bin, manual pages
5467 under $dflt/man, etc..., i.e. with $dflt as prefix for all
5468 installation directories. Typically this is something like /usr/local.
5469 If you wish to have binaries under /usr/bin but other parts of the
5470 installation under /usr/local, that's ok: you will be prompted
5471 separately for each of the installation directories, the prefix being
5472 only used to set the defaults.
5473
5474 EOM
5475 fn=d~
5476 rp='Installation prefix to use?'
5477 . ./getfile
5478 oldprefix=''
5479 case "$prefix" in
5480 '') ;;
5481 *)
5482         case "$ans" in
5483         "$prefix") ;;
5484         *) oldprefix="$prefix";;
5485         esac
5486         ;;
5487 esac
5488 prefix="$ans"
5489 prefixexp="$ansexp"
5490
5491 : is AFS running?
5492 echo " "
5493 case "$afs" in
5494 $define|true)   afs=true ;;
5495 $undef|false)   afs=false ;;
5496 *)      if test -d /afs; then
5497                 afs=true
5498         else
5499                 afs=false
5500         fi
5501         ;;
5502 esac
5503 if $afs; then
5504         echo "AFS may be running... I'll be extra cautious then..." >&4
5505 else
5506         echo "AFS does not seem to be running..." >&4
5507 fi
5508
5509 : determine installation prefix for where package is to be installed.
5510 if $afs; then 
5511 $cat <<EOM
5512
5513 Since you are running AFS, I need to distinguish the directory in which
5514 files will reside from the directory in which they are installed (and from
5515 which they are presumably copied to the former directory by occult means).
5516
5517 EOM
5518         case "$installprefix" in
5519         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
5520         *) dflt="$installprefix";;
5521         esac
5522 else
5523 $cat <<EOM
5524
5525 In some special cases, particularly when building $package for distribution,
5526 it is convenient to distinguish between the directory in which files should 
5527 be installed from the directory ($prefix) in which they 
5528 will eventually reside.  For most users, these two directories are the same.
5529
5530 EOM
5531         case "$installprefix" in
5532         '') dflt=$prefix ;;
5533         *) dflt=$installprefix;;
5534         esac
5535 fi
5536 fn=d~
5537 rp='What installation prefix should I use for installing files?'
5538 . ./getfile
5539 installprefix="$ans"
5540 installprefixexp="$ansexp"
5541
5542 : set the prefixit variable, to compute a suitable default value
5543 prefixit='case "$3" in
5544 ""|none)
5545         case "$oldprefix" in
5546         "") eval "$1=\"\$$2\"";;
5547         *)
5548                 case "$3" in
5549                 "") eval "$1=";;
5550                 none)
5551                         eval "tp=\"\$$2\"";
5552                         case "$tp" in
5553                         ""|" ") eval "$1=\"\$$2\"";;
5554                         *) eval "$1=";;
5555                         esac;;
5556                 esac;;
5557         esac;;
5558 *)
5559         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
5560         case "$tp" in
5561         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
5562         /*-$oldprefix/*|\~*-$oldprefix/*)
5563                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
5564         *) eval "$1=\"\$$2\"";;
5565         esac;;
5566 esac'
5567
5568
5569 : get the patchlevel
5570 echo " "
5571 echo "Getting the current patchlevel..." >&4
5572 if $test -r $rsrc/patchlevel.h;then
5573         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
5574         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
5575         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
5576         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
5577         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
5578         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
5579 else
5580         revision=0
5581         patchlevel=0
5582         subversion=0
5583         api_revision=0
5584         api_version=0
5585         api_subversion=0
5586 fi
5587 $echo "(You have $package version $patchlevel subversion $subversion.)"
5588 case "$osname" in
5589 dos|vms)
5590         : XXX Should be a Configure test for double-dots in filenames.
5591         version=`echo $revision $patchlevel $subversion | \
5592                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
5593         api_versionstring=`echo $api_revision $api_version $api_subversion | \
5594                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
5595         ;;
5596 *)
5597         version=`echo $revision $patchlevel $subversion | \
5598                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
5599         api_versionstring=`echo $api_revision $api_version $api_subversion | \
5600                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
5601         ;;
5602 esac
5603 : Special case the 5.005_xx maintenance series, which used 5.005
5604 : without any subversion label as a subdirectory in $sitelib
5605 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
5606         api_versionstring='5.005'
5607 fi
5608
5609 : determine installation style
5610 : For now, try to deduce it from prefix unless it is already set.
5611 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
5612 case "$installstyle" in
5613 '')     case "$prefix" in
5614                 *perl*) dflt='lib';;
5615                 *) dflt='lib/perl5' ;;
5616         esac
5617         ;;
5618 *)      dflt="$installstyle" ;;
5619 esac
5620 : Probably not worth prompting for this since we prompt for all
5621 : the directories individually, and the prompt would be too long and
5622 : confusing anyway.
5623 installstyle=$dflt
5624
5625 : determine where private library files go
5626 : Usual default is /usr/local/lib/perl5/$version.
5627 : Also allow things like /opt/perl/lib/$version, since 
5628 : /opt/perl/lib/perl5... would be redundant.
5629 : The default "style" setting is made in installstyle.U
5630 case "$installstyle" in
5631 *lib/perl5*) set dflt privlib lib/$package/$version ;;
5632 *)       set dflt privlib lib/$version ;;
5633 esac
5634 eval $prefixit
5635 $cat <<EOM
5636
5637 There are some auxiliary files for $package that need to be put into a
5638 private library directory that is accessible by everyone.
5639
5640 EOM
5641 fn=d~+
5642 rp='Pathname where the private library files will reside?'
5643 . ./getfile
5644 privlib="$ans"
5645 privlibexp="$ansexp"
5646 : Change installation prefix, if necessary.
5647 if $test X"$prefix" != X"$installprefix"; then
5648         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
5649 else
5650         installprivlib="$privlibexp"
5651 fi
5652
5653 : set the prefixup variable, to restore leading tilda escape
5654 prefixup='case "$prefixexp" in
5655 "$prefix") ;;
5656 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
5657 esac'
5658
5659 : determine where public architecture dependent libraries go
5660 set archlib archlib
5661 eval $prefixit
5662 : privlib default is /usr/local/lib/$package/$version
5663 : archlib default is /usr/local/lib/$package/$version/$archname
5664 : privlib may have an optional trailing /share.
5665 tdflt=`echo $privlib | $sed 's,/share$,,'`
5666 tdflt=$tdflt/$archname
5667 case "$archlib" in
5668 '')     dflt=$tdflt
5669         ;;
5670 *)      dflt="$archlib"
5671     ;;
5672 esac
5673 $cat <<EOM
5674
5675 $spackage contains architecture-dependent library files.  If you are
5676 sharing libraries in a heterogeneous environment, you might store
5677 these files in a separate location.  Otherwise, you can just include
5678 them with the rest of the public library files.
5679
5680 EOM
5681 fn=d+~
5682 rp='Where do you want to put the public architecture-dependent libraries?'
5683 . ./getfile
5684 archlib="$ans"
5685 archlibexp="$ansexp"
5686 if $test X"$archlib" = X"$privlib"; then
5687         d_archlib="$undef"
5688 else
5689         d_archlib="$define"
5690 fi
5691 : Change installation prefix, if necessary.
5692 if $test X"$prefix" != X"$installprefix"; then
5693         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
5694 else
5695         installarchlib="$archlibexp"
5696 fi
5697
5698
5699 : Binary compatibility with 5.005 is not possible for builds
5700 : with advanced features
5701 case "$usethreads$usemultiplicity" in
5702 *define*)
5703         bincompat5005="$undef"
5704         d_bincompat5005="$undef"
5705         ;;
5706 *)      $cat <<EOM
5707
5708 This version of Perl can be compiled for binary compatibility with 5.005.
5709 If you decide to do so, you will be able to continue using most of the
5710 extensions that were compiled for Perl 5.005.
5711
5712 EOM
5713         case "$bincompat5005$d_bincompat5005" in
5714         *"$undef"*) dflt=n ;;
5715         *) dflt=y ;;
5716         esac
5717         rp='Binary compatibility with Perl 5.005?'
5718         . ./myread
5719         case "$ans" in
5720         y*) val="$define" ;;
5721         *)  val="$undef" ;;
5722         esac
5723         set d_bincompat5005
5724         eval $setvar
5725         case "$d_bincompat5005" in
5726         "$define")
5727                 bincompat5005="$define"
5728                 ;;
5729         *)      bincompat5005="$undef"
5730                 d_bincompat5005="$undef"
5731                 ;;
5732         esac
5733         ;;
5734 esac
5735
5736
5737 : see if setuid scripts can be secure
5738 $cat <<EOM
5739
5740 Some kernels have a bug that prevents setuid #! scripts from being
5741 secure.  Some sites have disabled setuid #! scripts because of this.
5742
5743 First let's decide if your kernel supports secure setuid #! scripts.
5744 (If setuid #! scripts would be secure but have been disabled anyway,
5745 don't say that they are secure if asked.)
5746
5747 EOM
5748
5749 val="$undef"
5750 if $test -d /dev/fd; then
5751         echo "#!$ls" >reflect
5752         chmod +x,u+s reflect
5753         ./reflect >flect 2>&1
5754         if $contains "/dev/fd" flect >/dev/null; then
5755                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
5756                 val="$define"
5757         else
5758                 $cat <<EOM
5759 If you are not sure if they are secure, I can check but I'll need a
5760 username and password different from the one you are using right now.
5761 If you don't have such a username or don't want me to test, simply
5762 enter 'none'.
5763
5764 EOM
5765                 rp='Other username to test security of setuid scripts with?'
5766                 dflt='none'
5767                 . ./myread
5768                 case "$ans" in
5769                 n|none)
5770                         case "$d_suidsafe" in
5771                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
5772                                 dflt=n;;
5773                         "$undef")
5774                                 echo "Well, the $hint value is *not* secure." >&4
5775                                 dflt=n;;
5776                         *)      echo "Well, the $hint value *is* secure." >&4
5777                                 dflt=y;;
5778                         esac
5779                         ;;
5780                 *)
5781                         $rm -f reflect flect
5782                         echo "#!$ls" >reflect
5783                         chmod +x,u+s reflect
5784                         echo >flect
5785                         chmod a+w flect
5786                         echo '"su" will (probably) prompt you for '"$ans's password."
5787                         su $ans -c './reflect >flect'
5788                         if $contains "/dev/fd" flect >/dev/null; then
5789                                 echo "Okay, it looks like setuid scripts are secure." >&4
5790                                 dflt=y
5791                         else
5792                                 echo "I don't think setuid scripts are secure." >&4
5793                                 dflt=n
5794                         fi
5795                         ;;
5796                 esac
5797                 rp='Does your kernel have *secure* setuid scripts?'
5798                 . ./myread
5799                 case "$ans" in
5800                 [yY]*)  val="$define";;
5801                 *)      val="$undef";;
5802                 esac
5803         fi
5804 else
5805         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
5806         echo "(That's for file descriptors, not floppy disks.)"
5807         val="$undef"
5808 fi
5809 set d_suidsafe
5810 eval $setvar
5811
5812 $rm -f reflect flect
5813
5814 : now see if they want to do setuid emulation
5815 echo " "
5816 val="$undef"
5817 case "$d_suidsafe" in
5818 "$define")
5819         val="$undef"
5820         echo "No need to emulate SUID scripts since they are secure here." >& 4
5821         ;;
5822 *)
5823         $cat <<EOM
5824 Some systems have disabled setuid scripts, especially systems where
5825 setuid scripts cannot be secure.  On systems where setuid scripts have
5826 been disabled, the setuid/setgid bits on scripts are currently
5827 useless.  It is possible for $package to detect those bits and emulate
5828 setuid/setgid in a secure fashion.  This emulation will only work if
5829 setuid scripts have been disabled in your kernel.
5830
5831 EOM
5832         case "$d_dosuid" in
5833         "$define") dflt=y ;;
5834         *) dflt=n ;;
5835         esac
5836         rp="Do you want to do setuid/setgid emulation?"
5837         . ./myread
5838         case "$ans" in
5839         [yY]*)  val="$define";;
5840         *)      val="$undef";;
5841         esac
5842         ;;
5843 esac
5844 set d_dosuid
5845 eval $setvar
5846
5847 : determine filename position in cpp output
5848 echo " "
5849 echo "Computing filename position in cpp output for #include directives..." >&4
5850 echo '#include <stdio.h>' > foo.c
5851 $cat >fieldn <<EOF
5852 $startsh
5853 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
5854 $grep '^[       ]*#.*stdio\.h' | \
5855 while read cline; do
5856         pos=1
5857         set \$cline
5858         while $test \$# -gt 0; do
5859                 if $test -r \`echo \$1 | $tr -d '"'\`; then
5860                         echo "\$pos"
5861                         exit 0
5862                 fi
5863                 shift
5864                 pos=\`expr \$pos + 1\`
5865         done
5866 done
5867 EOF
5868 chmod +x fieldn
5869 fieldn=`./fieldn`
5870 $rm -f foo.c fieldn
5871 case $fieldn in
5872 '') pos='???';;
5873 1) pos=first;;
5874 2) pos=second;;
5875 3) pos=third;;
5876 *) pos="${fieldn}th";;
5877 esac
5878 echo "Your cpp writes the filename in the $pos field of the line."
5879
5880 : locate header file
5881 $cat >findhdr <<EOF
5882 $startsh
5883 wanted=\$1
5884 name=''
5885 for usrincdir in $usrinc
5886 do
5887         if test -f \$usrincdir/\$wanted; then
5888                 echo "\$usrincdir/\$wanted"
5889                 exit 0
5890         fi
5891 done
5892 awkprg='{ print \$$fieldn }'
5893 echo "#include <\$wanted>" > foo\$\$.c
5894 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
5895 $grep "^[       ]*#.*\$wanted" | \
5896 while read cline; do
5897         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
5898         case "\$name" in
5899         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
5900         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
5901         *) exit 2;;
5902         esac;
5903 done;
5904 #
5905 # status = 0: grep returned 0 lines, case statement not executed
5906 # status = 1: headerfile found
5907 # status = 2: while loop executed, no headerfile found
5908 #
5909 status=\$?
5910 $rm -f foo\$\$.c;
5911 if test \$status -eq 1; then
5912         exit 0;
5913 fi
5914 exit 1
5915 EOF
5916 chmod +x findhdr
5917
5918 : define an alternate in-header-list? function
5919 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
5920 cont=true; xxf="echo \"<\$1> found.\" >&4";
5921 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
5922 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
5923 esac;
5924 case $# in 4) instead=instead;; *) instead="at last";; esac;
5925 while $test "$cont"; do
5926         xxx=`./findhdr $1`
5927         var=$2; eval "was=\$$2";
5928         if $test "$xxx" && $test -r "$xxx";
5929         then eval $xxf;
5930         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5931                 cont="";
5932         else eval $xxnf;
5933         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5934         set $yyy; shift; shift; yyy=$@;
5935         case $# in 0) cont="";;
5936         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5937                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5938         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5939                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5940         esac;
5941 done;
5942 while $test "$yyy";
5943 do set $yyy; var=$2; eval "was=\$$2";
5944         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5945         set $yyy; shift; shift; yyy=$@;
5946 done'
5947
5948 : see if this is a malloc.h system
5949 set malloc.h i_malloc
5950 eval $inhdr
5951
5952 : see if stdlib is available
5953 set stdlib.h i_stdlib
5954 eval $inhdr
5955
5956 : determine which malloc to compile in
5957 echo " "
5958 case "$usemymalloc" in
5959 ''|[yY]*|true|$define)  dflt='y' ;;
5960 *)      dflt='n' ;;
5961 esac
5962 rp="Do you wish to attempt to use the malloc that comes with $package?"
5963 . ./myread
5964 usemymalloc="$ans"
5965 case "$ans" in
5966 y*|true)
5967         usemymalloc='y'
5968         mallocsrc='malloc.c'
5969         mallocobj="malloc$_o"
5970         d_mymalloc="$define"
5971         case "$libs" in
5972         *-lmalloc*)
5973                 : Remove malloc from list of libraries to use
5974                 echo "Removing unneeded -lmalloc from library list" >&4
5975                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
5976                 shift
5977                 libs="$*"
5978                 echo "libs = $libs" >&4
5979                 ;;
5980         esac
5981         ;;
5982 *)
5983         usemymalloc='n'
5984         mallocsrc=''
5985         mallocobj=''
5986         d_mymalloc="$undef"
5987         ;;
5988 esac
5989
5990 : compute the return types of malloc and free
5991 echo " "
5992 $cat >malloc.c <<END
5993 #$i_malloc I_MALLOC
5994 #$i_stdlib I_STDLIB
5995 #include <stdio.h>
5996 #include <sys/types.h>
5997 #ifdef I_MALLOC
5998 #include <malloc.h>
5999 #endif
6000 #ifdef I_STDLIB
6001 #include <stdlib.h>
6002 #endif
6003 #ifdef TRY_MALLOC
6004 void *malloc();
6005 #endif
6006 #ifdef TRY_FREE
6007 void free();
6008 #endif
6009 END
6010 case "$malloctype" in
6011 '')
6012         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
6013                 malloctype='void *'
6014         else
6015                 malloctype='char *'
6016         fi
6017         ;;
6018 esac
6019 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6020
6021 case "$freetype" in
6022 '')
6023         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6024                 freetype='void'
6025         else
6026                 freetype='int'
6027         fi
6028         ;;
6029 esac
6030 echo "Your system uses $freetype free(), it would seem." >&4
6031 $rm -f malloc.[co]
6032 $cat <<EOM
6033
6034 After $package is installed, you may wish to install various
6035 add-on modules and utilities.  Typically, these add-ons will
6036 be installed under $prefix with the rest
6037 of this package.  However, you may wish to install such add-ons
6038 elsewhere under a different prefix.
6039
6040 If you do not wish to put everything under a single prefix, that's
6041 ok.  You will be prompted for the individual locations; this siteprefix
6042 is only used to suggest the defaults.
6043
6044 The default should be fine for most people.
6045
6046 EOM
6047 fn=d~+
6048 rp='Installation prefix to use for add-on modules and utilities?'
6049 : XXX Here might be another good place for an installstyle setting.
6050 case "$siteprefix" in
6051 '') dflt=$prefix ;;
6052 *)  dflt=$siteprefix ;;
6053 esac
6054 . ./getfile
6055 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6056 oldsiteprefix=''
6057 case "$siteprefix" in
6058 '') ;;
6059 *)      case "$ans" in
6060         "$prefix") ;;
6061         *) oldsiteprefix="$prefix";;
6062         esac
6063         ;;
6064 esac
6065 siteprefix="$ans"
6066 siteprefixexp="$ansexp"
6067
6068 : determine where site specific libraries go.
6069 : Usual default is /usr/local/lib/perl5/site_perl/$version
6070 : The default "style" setting is made in installstyle.U
6071 : XXX No longer works with Prefixit stuff.
6072 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6073 case "$sitelib" in
6074 '') case "$installstyle" in
6075         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
6076         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
6077         esac
6078         ;;
6079 *)      dflt="$sitelib"
6080         ;;
6081 esac
6082 $cat <<EOM
6083
6084 The installation process will create a directory for
6085 site-specific extensions and modules.  Most users find it convenient
6086 to place all site-specific files in this directory rather than in the
6087 main distribution directory.
6088
6089 EOM
6090 fn=d~+
6091 rp='Pathname for the site-specific library files?'
6092 . ./getfile
6093 sitelib="$ans"
6094 sitelibexp="$ansexp"
6095 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
6096 : Change installation prefix, if necessary.
6097 if $test X"$prefix" != X"$installprefix"; then
6098         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
6099 else
6100         installsitelib="$sitelibexp"
6101 fi
6102
6103 : determine where site specific architecture-dependent libraries go.
6104 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
6105 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6106 : sitelib may have an optional trailing /share.
6107 case "$sitearch" in
6108 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
6109         dflt="$dflt/$archname"
6110         ;;
6111 *)      dflt="$sitearch"
6112         ;;
6113 esac
6114 set sitearch sitearch none
6115 eval $prefixit
6116 $cat <<EOM
6117
6118 The installation process will also create a directory for
6119 architecture-dependent site-specific extensions and modules.
6120
6121 EOM
6122 fn=d~+
6123 rp='Pathname for the site-specific architecture-dependent library files?'
6124 . ./getfile
6125 sitearch="$ans"
6126 sitearchexp="$ansexp"
6127 : Change installation prefix, if necessary.
6128 if $test X"$prefix" != X"$installprefix"; then
6129         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6130 else
6131         installsitearch="$sitearchexp"
6132 fi
6133
6134 $cat <<EOM
6135
6136 The installation process will also create a directory for
6137 vendor-supplied add-ons.  Vendors who supply perl with their system
6138 may find it convenient to place all vendor-supplied files in this
6139 directory rather than in the main distribution directory.  This will
6140 ease upgrades between binary-compatible maintenance versions of perl.
6141
6142 Of course you may also use these directories in whatever way you see
6143 fit.  For example, you might use them to access modules shared over a
6144 company-wide network.
6145
6146 The default answer should be fine for most people.
6147 This causes further questions about vendor add-ons to be skipped
6148 and no vendor-specific directories will be configured for perl.
6149
6150 EOM
6151 rp='Do you want to configure vendor-specific add-on directories?'
6152 case "$usevendorprefix" in
6153 define|true|[yY]*) dflt=y ;;
6154 *)      : User may have set vendorprefix directly on Configure command line.
6155         case "$vendorprefix" in
6156         ''|' ') dflt=n ;;
6157         *)      dflt=y ;;
6158         esac
6159         ;;
6160 esac
6161 . ./myread
6162 case "$ans" in
6163 [yY]*)  fn=d~+
6164         rp='Installation prefix to use for vendor-supplied add-ons?'
6165         case "$vendorprefix" in
6166         '') dflt='' ;;
6167         *)  dflt=$vendorprefix ;;
6168         esac
6169         . ./getfile
6170         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6171         oldvendorprefix=''
6172         case "$vendorprefix" in
6173         '') ;;
6174         *)      case "$ans" in
6175                 "$prefix") ;;
6176                 *) oldvendorprefix="$prefix";;
6177                 esac
6178                 ;;
6179         esac
6180         usevendorprefix="$define"
6181         vendorprefix="$ans"
6182         vendorprefixexp="$ansexp"
6183         ;;
6184 *)      usevendorprefix="$undef"
6185         vendorprefix=''
6186         vendorprefixexp=''
6187         ;;
6188 esac
6189
6190 case "$vendorprefix" in
6191 '')     d_vendorlib="$undef"
6192         vendorlib=''
6193         vendorlibexp=''
6194         ;;
6195 *)      d_vendorlib="$define"
6196         : determine where vendor-supplied modules go.
6197         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6198         case "$vendorlib" in
6199         '')
6200                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6201                 case "$installstyle" in
6202                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6203                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6204                 esac
6205                 ;;
6206         *)      dflt="$vendorlib"
6207                 ;;
6208         esac
6209         fn=d~+
6210         rp='Pathname for the vendor-supplied library files?'
6211         . ./getfile
6212         vendorlib="$ans"
6213         vendorlibexp="$ansexp"
6214         ;;
6215 esac
6216 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6217 : Change installation prefix, if necessary.
6218 if $test X"$prefix" != X"$installprefix"; then
6219         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6220 else
6221         installvendorlib="$vendorlibexp"
6222 fi
6223
6224 case "$vendorprefix" in
6225 '')     d_vendorarch="$undef"
6226         vendorarch=''
6227         vendorarchexp=''
6228         ;;
6229 *)      d_vendorarch="$define"
6230         : determine where vendor-supplied architecture-dependent libraries go.
6231         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
6232         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6233         : vendorlib may have an optional trailing /share.
6234         case "$vendorarch" in
6235         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
6236                 dflt="$dflt/$archname"
6237                 ;;
6238         *)      dflt="$vendorarch" ;;
6239         esac
6240         fn=d~+
6241         rp='Pathname for vendor-supplied architecture-dependent files?'
6242         . ./getfile
6243         vendorarch="$ans"
6244         vendorarchexp="$ansexp"
6245         ;;
6246 esac
6247 : Change installation prefix, if necessary.
6248 if $test X"$prefix" != X"$installprefix"; then
6249         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6250 else
6251         installvendorarch="$vendorarchexp"
6252 fi
6253
6254 : Final catch-all directories to search
6255 $cat <<EOM
6256
6257 Lastly, you can have perl look in other directories for extensions and
6258 modules in addition to those already specified.
6259 These directories will be searched after 
6260         $sitearch 
6261         $sitelib 
6262 EOM
6263 test X"$vendorlib" != "X" && echo '     ' $vendorlib
6264 test X"$vendorarch" != "X" && echo '    ' $vendorarch
6265 echo ' '
6266 case "$otherlibdirs" in
6267 ''|' ') dflt='none' ;;
6268 *)      dflt="$otherlibdirs" ;;
6269 esac
6270 $cat <<EOM
6271 Enter a colon-separated set of extra paths to include in perl's @INC
6272 search path, or enter 'none' for no extra paths.
6273
6274 EOM
6275
6276 rp='Colon-separated list of additional directories for perl to search?'
6277 . ./myread
6278 case "$ans" in
6279 ' '|''|none)    otherlibdirs=' ' ;;     
6280 *)      otherlibdirs="$ans" ;;
6281 esac
6282 case "$otherlibdirs" in
6283 ' ') val=$undef ;;
6284 *)      val=$define ;;
6285 esac
6286 set d_perl_otherlibdirs
6287 eval $setvar
6288
6289 : Cruising for prototypes
6290 echo " "
6291 echo "Checking out function prototypes..." >&4
6292 $cat >prototype.c <<'EOCP'
6293 int main(int argc, char *argv[]) {
6294         exit(0);}
6295 EOCP
6296 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
6297         echo "Your C compiler appears to support function prototypes."
6298         val="$define"
6299 else
6300         echo "Your C compiler doesn't seem to understand function prototypes."
6301         val="$undef"
6302 fi
6303 set prototype
6304 eval $setvar
6305 $rm -f prototype*
6306
6307 case "$prototype" in
6308 "$define") ;;
6309 *)      ansi2knr='ansi2knr'
6310         echo " "
6311         cat <<EOM >&4
6312
6313 $me:  FATAL ERROR:
6314 This version of $package can only be compiled by a compiler that 
6315 understands function prototypes.  Unfortunately, your C compiler 
6316         $cc $ccflags
6317 doesn't seem to understand them.  Sorry about that.
6318
6319 If GNU cc is available for your system, perhaps you could try that instead.  
6320
6321 Eventually, we hope to support building Perl with pre-ANSI compilers.
6322 If you would like to help in that effort, please contact <perlbug@perl.org>.
6323
6324 Aborting Configure now.
6325 EOM
6326         exit 2
6327         ;;
6328 esac
6329
6330 : determine where public executables go
6331 echo " "
6332 set dflt bin bin
6333 eval $prefixit
6334 fn=d~
6335 rp='Pathname where the public executables will reside?'
6336 . ./getfile
6337 if $test "X$ansexp" != "X$binexp"; then
6338         installbin=''
6339 fi
6340 bin="$ans"
6341 binexp="$ansexp"
6342 : Change installation prefix, if necessary.
6343 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
6344 if $test X"$prefix" != X"$installprefix"; then
6345         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
6346 else
6347         installbin="$binexp"
6348 fi
6349
6350 : Find perl5.005 or later.
6351 echo "Looking for a previously installed perl5.005 or later... "
6352 case "$perl5" in
6353 '')     for tdir in `echo "$binexp:$PATH" | $sed "s/$path_sep/ /g"`; do
6354                 : Check if this perl is recent and can load a simple module
6355                 if $test -x $tdir/perl && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6356                         perl5=$tdir/perl
6357                         break;
6358                 elif $test -x $tdir/perl5 && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6359                         perl5=$tdir/perl
6360                         break;
6361                 fi
6362         done
6363         ;;
6364 *)      perl5="$perl5"
6365         ;;
6366 esac
6367 case "$perl5" in
6368 '')     echo "None found.  That's ok.";;
6369 *)      echo "Using $perl5." ;;
6370 esac
6371
6372 : Determine list of previous versions to include in @INC
6373 $cat > getverlist <<EOPL
6374 #!$perl5 -w
6375 use File::Basename;
6376 \$api_versionstring = "$api_versionstring";
6377 \$version = "$version";
6378 \$stem = "$sitelib_stem";
6379 \$archname = "$archname";
6380 EOPL
6381         $cat >> getverlist <<'EOPL'
6382 # Can't have leading @ because metaconfig interprets it as a command!
6383 ;@inc_version_list=();
6384 # XXX Redo to do opendir/readdir? 
6385 if (-d $stem) {
6386     chdir($stem);
6387     ;@candidates = glob("5.*");
6388 }
6389 else {
6390     ;@candidates = ();
6391 }
6392
6393 # XXX ToDo:  These comparisons must be reworked when two-digit
6394 # subversions come along, so that 5.7.10 compares as greater than
6395 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
6396 # widespread that we can use the built-in version vectors rather
6397 # than reinventing them here.  For 5.6.0, however, we must
6398 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
6399 foreach $d (@candidates) {
6400     if ($d lt $version) {
6401         if ($d ge $api_versionstring) {
6402             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
6403         }
6404         elsif ($d ge "5.005") {
6405             unshift(@inc_version_list, grep { -d } $d);
6406         }
6407     }
6408     else {
6409         # Skip newer version.  I.e. don't look in
6410         # 5.7.0 if we're installing 5.6.1.
6411     }
6412 }
6413
6414 if (@inc_version_list) {
6415     print join(' ', @inc_version_list);
6416 }
6417 else {
6418     # Blank space to preserve value for next Configure run.
6419     print " ";
6420 }
6421 EOPL
6422 chmod +x getverlist
6423 case "$inc_version_list" in
6424 '')     if test -x "$perl5"; then
6425                 dflt=`$perl5 getverlist`
6426         else
6427                 dflt='none'
6428         fi
6429         ;;
6430 $undef) dflt='none' ;;
6431 *)  dflt="$inc_version_list" ;;
6432 esac
6433 case "$dflt" in
6434 ''|' ') dflt=none ;;
6435 esac
6436 case "$dflt" in
6437 5.005) case "$bincompat5005" in
6438        $define|true|[yY]*) ;;
6439        *) dflt=none ;;
6440        esac
6441        ;;
6442 esac
6443 $cat <<'EOM'
6444
6445 In order to ease the process of upgrading, this version of perl 
6446 can be configured to use modules built and installed with earlier 
6447 versions of perl that were installed under $prefix.  Specify here
6448 the list of earlier versions that this version of perl should check.
6449 If Configure detected no earlier versions of perl installed under
6450 $prefix, then the list will be empty.  Answer 'none' to tell perl
6451 to not search earlier versions.
6452
6453 The default should almost always be sensible, so if you're not sure,
6454 just accept the default.
6455 EOM
6456
6457 rp='List of earlier versions to include in @INC?'
6458 . ./myread
6459 case "$ans" in
6460 [Nn]one|''|' ') inc_version_list=' ' ;;
6461 *) inc_version_list="$ans" ;;
6462 esac
6463 case "$inc_version_list" in
6464 ''|' ') 
6465         inc_version_list_init='0';;
6466 *)      inc_version_list_init=`echo $inc_version_list |
6467                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
6468         ;;
6469 esac
6470 $rm -f getverlist
6471
6472 : determine whether to install perl also as /usr/bin/perl
6473
6474 echo " "
6475 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
6476         $cat <<EOM
6477 Many scripts expect perl to be installed as /usr/bin/perl.
6478 I can install the perl you are about to compile also as /usr/bin/perl
6479 (in addition to $installbin/perl).
6480 EOM
6481         case "$installusrbinperl" in
6482         "$undef"|[nN]*) dflt='n';;
6483         *)              dflt='y';;
6484         esac
6485         rp="Do you want to install perl as /usr/bin/perl?"
6486         . ./myread
6487         case "$ans" in
6488         [yY]*)  val="$define";;
6489         *)      val="$undef" ;;
6490         esac
6491 else
6492         val="$undef"
6493 fi
6494 set installusrbinperl
6495 eval $setvar
6496
6497 : see if dld is available
6498 set dld.h i_dld
6499 eval $inhdr
6500
6501 : see if dlopen exists
6502 xxx_runnm="$runnm"
6503 runnm=false
6504 set dlopen d_dlopen
6505 eval $inlibc
6506 runnm="$xxx_runnm"
6507
6508 : determine which dynamic loading, if any, to compile in
6509 echo " "
6510 dldir="ext/DynaLoader"
6511 case "$usedl" in
6512 $define|y|true)
6513         dflt='y'
6514         usedl="$define"
6515         ;;
6516 $undef|n|false)
6517         dflt='n'
6518         usedl="$undef"
6519         ;;
6520 *) 
6521         dflt='n'
6522         case "$d_dlopen" in
6523             $define) dflt='y' ;;
6524         esac
6525         case "$i_dld" in
6526             $define) dflt='y' ;;
6527         esac
6528         : Does a dl_xxx.xs file exist for this operating system
6529         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
6530         ;;
6531 esac
6532 rp="Do you wish to use dynamic loading?"
6533 . ./myread
6534 usedl="$ans"
6535 case "$ans" in
6536 y*) usedl="$define"
6537         case "$dlsrc" in
6538         '')
6539                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
6540                         dflt="$dldir/dl_${osname}.xs"
6541                 elif $test "$d_dlopen" = "$define" ; then
6542                         dflt="$dldir/dl_dlopen.xs"
6543                 elif $test "$i_dld" = "$define" ; then
6544                         dflt="$dldir/dl_dld.xs"
6545                 else
6546                         dflt=''
6547                 fi
6548                 ;;
6549         *)      dflt="$dldir/$dlsrc"
6550                 ;;
6551         esac
6552     echo "The following dynamic loading files are available:"
6553         : Can not go over to $dldir because getfile has path hard-coded in.
6554         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
6555         rp="Source file to use for dynamic loading"
6556         fn="fne"
6557         gfpth="$src"
6558         . ./getfile
6559         usedl="$define"
6560         : emulate basename
6561         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
6562
6563         $cat << EOM
6564
6565 Some systems may require passing special flags to $cc -c to
6566 compile modules that will be used to create a shared library.
6567 To use no flags, say "none".
6568
6569 EOM
6570     case "$cccdlflags" in
6571     '') case "$gccversion" in
6572                 '') case "$osname" in
6573                         hpux)   dflt='+z' ;;
6574                         next)   dflt='none' ;;
6575                         irix*)  dflt='-KPIC' ;;
6576                         svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
6577                         sunos)  dflt='-pic' ;;
6578                         *)      dflt='none' ;;
6579                     esac
6580                         ;;
6581                 *)  case "$osname" in
6582                         svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
6583                         *)      dflt='-fpic' ;;
6584                     esac ;;
6585             esac ;;
6586         ' ') dflt='none' ;;
6587     *)  dflt="$cccdlflags" ;;
6588     esac
6589     rp="Any special flags to pass to $cc -c to compile shared library modules?"
6590     . ./myread
6591     case "$ans" in
6592     none) cccdlflags=' ' ;;
6593     *) cccdlflags="$ans" ;;
6594     esac
6595
6596     cat << EOM
6597
6598 Some systems use ld to create libraries that can be dynamically loaded,
6599 while other systems (such as those using ELF) use $cc.
6600
6601 EOM
6602         case "$ld" in
6603         '')     $cat >try.c <<'EOM'
6604 /* Test for whether ELF binaries are produced */
6605 #include <fcntl.h>
6606 #include <stdlib.h>
6607 int main() {
6608         char b[4];
6609         int i = open("a.out",O_RDONLY);
6610         if(i == -1) 
6611                 exit(1); /* fail */
6612         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
6613                 exit(0); /* succeed (yes, it's ELF) */
6614         else
6615                 exit(1); /* fail */
6616 }
6617 EOM
6618                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
6619                         cat <<EOM
6620 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
6621 EOM
6622                         dflt="$cc"
6623                 else
6624                         echo "I'll use ld to build dynamic libraries."
6625                         dflt='ld'
6626                 fi
6627                 rm -f try.c a.out
6628                 ;;
6629         *)      dflt="$ld"
6630                 ;;
6631         esac
6632
6633     rp="What command should be used to create dynamic libraries?"
6634     . ./myread
6635         ld="$ans"
6636
6637     cat << EOM
6638
6639 Some systems may require passing special flags to $ld to create a
6640 library that can be dynamically loaded.  If your ld flags include
6641 -L/other/path options to locate libraries outside your loader's normal
6642 search path, you may need to specify those -L options here as well.  To
6643 use no flags, say "none".
6644
6645 EOM
6646     case "$lddlflags" in
6647     '') case "$osname" in
6648                         beos) dflt='-nostart' ;;
6649                         hpux) dflt='-b';
6650                               case "$gccversion" in
6651                               '') dflt="$dflt +vnocompatwarnings" ;;
6652                               esac
6653                               ;;        
6654                         linux|irix*)    dflt='-shared' ;;
6655                         next)  dflt='none' ;;
6656                         solaris) dflt='-G' ;;
6657                         sunos) dflt='-assert nodefinitions' ;;
6658                         svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
6659                 *)     dflt='none' ;;
6660                         esac
6661                         ;;
6662     *) dflt="$lddlflags" ;;
6663     esac
6664
6665         : Try to guess additional flags to pick up local libraries.
6666         : Be careful not to append to a plain 'none'
6667         case "$dflt" in
6668         none) dflt='' ;;
6669         esac
6670         for thisflag in $ldflags; do
6671                 case "$thisflag" in
6672                 -L*|-R*)
6673                         case " $dflt " in
6674                         *" $thisflag "*) ;;
6675                         *) dflt="$dflt $thisflag" ;;
6676                         esac
6677                         ;;
6678                 esac
6679         done
6680
6681         case "$dflt" in
6682         ''|' ') dflt='none' ;;
6683         esac
6684
6685     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
6686     . ./myread
6687     case "$ans" in
6688     none) lddlflags=' ' ;;
6689     *) lddlflags="$ans" ;;
6690     esac
6691
6692         cat <<EOM
6693
6694 Some systems may require passing special flags to $cc to indicate that
6695 the resulting executable will use dynamic linking.  To use no flags,
6696 say "none".
6697
6698 EOM
6699     case "$ccdlflags" in
6700     '') case "$osname" in
6701                 hpux)   dflt='-Wl,-E' ;;
6702                 linux)  dflt='-rdynamic' ;;
6703                 next)   dflt='none' ;;
6704                 sunos)  dflt='none' ;;
6705                 *)      dflt='none' ;;
6706             esac ;;
6707     ' ')  dflt='none' ;;
6708     *)  dflt="$ccdlflags" ;;
6709     esac
6710     rp="Any special flags to pass to $cc to use dynamic linking?"
6711     . ./myread
6712     case "$ans" in
6713     none) ccdlflags=' ' ;;
6714     *) ccdlflags="$ans" ;;
6715     esac
6716     ;;
6717 *)  usedl="$undef"
6718         ld='ld'
6719     dlsrc='dl_none.xs'
6720     lddlflags=''
6721     ccdlflags=''
6722     ;;
6723 esac
6724
6725 also=''
6726 case "$usedl" in
6727 $undef)
6728         # No dynamic loading being used, so don't bother even to prompt.
6729         useshrplib='false'
6730         ;;
6731 *)      case "$useshrplib" in
6732         '')     case "$osname" in
6733                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
6734                         dflt=y
6735                         also='Building a shared libperl is required for dynamic loading to work on your system.'
6736                         ;;
6737                 next*)
6738                         case "$osvers" in
6739                         4*)     dflt=y
6740                                 also='Building a shared libperl is needed for MAB support.'
6741                                 ;;
6742                         *)      dflt=n
6743                                 ;;
6744                         esac
6745                         ;;
6746                 *)      dflt=n
6747                         ;;
6748                 esac
6749                 ;;
6750         $define|true|[Yy]*)
6751                 dflt=y
6752                 ;;
6753         *)      dflt=n
6754                 ;;
6755         esac
6756         $cat << EOM
6757
6758 The perl executable is normally obtained by linking perlmain.c with
6759 libperl${_a}, any static extensions (usually just DynaLoader), and
6760 any other libraries needed on this system (such as -lm, etc.).  Since
6761 your system supports dynamic loading, it is probably possible to build
6762 a shared libperl.$so.  If you will have more than one executable linked
6763 to libperl.$so, this will significantly reduce the size of each
6764 executable, but it may have a noticeable affect on performance.  The
6765 default is probably sensible for your system.
6766 $also
6767
6768 EOM
6769         rp="Build a shared libperl.$so (y/n)"
6770         . ./myread
6771         case "$ans" in
6772         true|$define|[Yy]*)
6773                 useshrplib='true'  ;;
6774         *)      useshrplib='false' ;;
6775         esac
6776         ;;
6777 esac
6778
6779 case "$useshrplib" in
6780 true)
6781         case "$libperl" in
6782         '')
6783                 # Figure out a good name for libperl.so.  Since it gets stored in
6784                 # a version-specific architecture-dependent library, the version
6785                 # number isn't really that important, except for making cc/ld happy.
6786                 #
6787                 # A name such as libperl.so.3.1
6788                 majmin="libperl.$so.$patchlevel.$subversion"
6789                 # A name such as libperl.so.301
6790                 majonly=`echo $patchlevel $subversion |
6791                         $awk '{printf "%d%02d", $1, $2}'`
6792                 majonly=libperl.$so.$majonly
6793                 # I'd prefer to keep the os-specific stuff here to a minimum, and
6794                 # rely on figuring it out from the naming of libc.
6795                 case "${osname}${osvers}" in
6796                 next4*)
6797                         dflt=libperl.5.$so
6798                         # XXX How handle the --version stuff for MAB?
6799                         ;;
6800                 linux*)  # ld won't link with a bare -lperl otherwise.
6801                         dflt=libperl.$so
6802                         ;;
6803                 cygwin*) # include version
6804                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
6805                         ;;
6806                 *)      # Try to guess based on whether libc has major.minor.
6807                         case "$libc" in
6808                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
6809                         *libc.$so.[0-9]*) dflt=$majonly ;;
6810                         *)      dflt=libperl.$so ;;
6811                         esac
6812                         ;;
6813                 esac
6814                 ;;
6815         *)      dflt=$libperl
6816                 ;;
6817         esac
6818         cat << EOM
6819
6820 I need to select a good name for the shared libperl.  If your system uses
6821 library names with major and minor numbers, then you might want something
6822 like $majmin.  Alternatively, if your system uses a single version
6823 number for shared libraries, then you might want to use $majonly.
6824 Or, your system might be quite happy with a simple libperl.$so.
6825
6826 Since the shared libperl will get installed into a version-specific
6827 architecture-dependent directory, the version number of the shared perl
6828 library probably isn't important, so the default should be o.k.
6829
6830 EOM
6831         rp='What name do you want to give to the shared libperl?'
6832         . ./myread
6833         libperl=$ans
6834         echo "Ok, I'll use $libperl"
6835         ;;
6836 *)
6837         libperl="libperl${_a}"
6838         ;;
6839 esac
6840
6841 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
6842 case "$shrpdir" in
6843 '') ;;
6844 *)      $cat >&4 <<EOM
6845 WARNING:  Use of the shrpdir variable for the installation location of
6846 the shared $libperl is not supported.  It was never documented and
6847 will not work in this version.  Let me (perlbug@perl.org)
6848 know of any problems this may cause.
6849
6850 EOM
6851         case "$shrpdir" in
6852         "$archlibexp/CORE")
6853                 $cat >&4 <<EOM
6854 But your current setting of $shrpdir is
6855 the default anyway, so it's harmless.
6856 EOM
6857                 ;;
6858         *)
6859                 $cat >&4 <<EOM
6860 Further, your current attempted setting of $shrpdir
6861 conflicts with the value of $archlibexp/CORE
6862 that installperl will use.
6863 EOM
6864                 ;;
6865         esac
6866         ;;
6867 esac
6868
6869 # How will the perl executable find the installed shared $libperl?
6870 # Add $xxx to ccdlflags.
6871 # If we can't figure out a command-line option, use $shrpenv to
6872 # set env LD_RUN_PATH.  The main perl makefile uses this.
6873 shrpdir=$archlibexp/CORE
6874 xxx=''
6875 tmp_shrpenv=''
6876 if "$useshrplib"; then
6877     case "$osname" in 
6878         aix)
6879                 # We'll set it in Makefile.SH...
6880                 ;;
6881         solaris|netbsd)
6882                 xxx="-R $shrpdir"
6883                 ;;
6884         freebsd)
6885                 xxx="-Wl,-R$shrpdir"
6886                 ;;
6887         linux|irix*|dec_osf)
6888                 xxx="-Wl,-rpath,$shrpdir"
6889                 ;;
6890         next)
6891                 # next doesn't like the default...
6892                 ;;
6893         beos)
6894                 # beos doesn't like the default, either.
6895                 ;;
6896         hpux*)
6897                 # hpux doesn't like the default, either.
6898                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
6899                 ;;
6900         *)
6901                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
6902                 ;;
6903         esac
6904         case "$xxx" in
6905         '') ;;
6906         *)      
6907                 # Only add $xxx if it isn't already in ccdlflags.
6908                 case " $ccdlflags " in
6909                 *" $xxx "*)     ;;
6910                 *)      ccdlflags="$ccdlflags $xxx"
6911                         cat <<EOM >&4
6912
6913 Adding $xxx to the flags
6914 passed to $ld so that the perl executable will find the 
6915 installed shared $libperl.
6916
6917 EOM
6918                         ;;
6919                 esac
6920                 ;;
6921         esac
6922 fi
6923 # Fix ccdlflags in AIX for building external extensions.
6924 # (For building Perl itself bare -bE:perl.exp is needed,
6925 #  Makefile.SH takes care of this.)
6926 case "$osname" in
6927 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
6928 esac
6929 # Respect a hint or command-line value.
6930 case "$shrpenv" in
6931 '') shrpenv="$tmp_shrpenv" ;;
6932 esac
6933 case "$ldlibpthname" in
6934 '')     ldlibpthname=LD_LIBRARY_PATH ;;
6935 none)   ldlibpthname='' ;;
6936 esac
6937
6938 : determine where manual pages are on this system
6939 echo " "
6940 case "$sysman" in
6941 '') 
6942         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
6943         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
6944         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
6945         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
6946         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
6947         sysman=`./loc . /usr/man/man1 $syspath`
6948         ;;
6949 esac
6950 if $test -d "$sysman"; then
6951         echo "System manual is in $sysman." >&4
6952 else
6953         echo "Could not find manual pages in source form." >&4
6954 fi
6955
6956 : determine where manual pages go
6957 set man1dir man1dir none
6958 eval $prefixit
6959 $cat <<EOM
6960
6961 $spackage has manual pages available in source form.
6962 EOM
6963 case "$nroff" in
6964 nroff)
6965         echo "However, you don't have nroff, so they're probably useless to you."
6966         case "$man1dir" in
6967         '') man1dir="none";;
6968         esac;;
6969 esac
6970 echo "If you don't want the manual sources installed, answer 'none'."
6971 case "$man1dir" in
6972 ' ') dflt=none
6973         ;;
6974 '')
6975         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
6976         lookpath="$lookpath $prefixexp/man/p_man/man1"
6977         lookpath="$lookpath $prefixexp/man/u_man/man1"
6978         lookpath="$lookpath $prefixexp/man/man.1"
6979         case "$sysman" in
6980         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
6981         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
6982         esac
6983         set dflt
6984         eval $prefixup
6985         ;;
6986 *)  dflt="$man1dir"
6987         ;;
6988 esac
6989 echo " "
6990 fn=dn+~
6991 rp="Where do the main $spackage manual pages (source) go?"
6992 . ./getfile
6993 if $test "X$man1direxp" != "X$ansexp"; then
6994         installman1dir=''
6995 fi
6996 man1dir="$ans"
6997 man1direxp="$ansexp"
6998 case "$man1dir" in
6999 '')     man1dir=' '
7000         installman1dir='';;
7001 esac
7002
7003 : Change installation prefix, if necessary.
7004 if $test X"$prefix" != X"$installprefix"; then
7005         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
7006 else
7007         installman1dir="$man1direxp"
7008 fi
7009
7010 : What suffix to use on installed man pages
7011
7012 case "$man1dir" in
7013 ' ')
7014         man1ext='0'
7015         ;;
7016 *)
7017         rp="What suffix should be used for the main $spackage man pages?"
7018         case "$man1ext" in
7019         '')     case "$man1dir" in
7020                 *1)  dflt=1 ;;
7021                 *1p) dflt=1p ;;
7022                 *1pm) dflt=1pm ;;
7023                 *l) dflt=l;;
7024                 *n) dflt=n;;
7025                 *o) dflt=o;;
7026                 *p) dflt=p;;
7027                 *C) dflt=C;;
7028                 *L) dflt=L;;
7029                 *L1) dflt=L1;;
7030                 *) dflt=1;;
7031                 esac
7032                 ;;
7033         *)      dflt="$man1ext";;
7034         esac
7035         . ./myread
7036         man1ext="$ans"
7037         ;;
7038 esac
7039
7040 : see if we can have long filenames
7041 echo " "
7042 first=123456789abcdef
7043 $rm -f $first
7044 if (echo hi >$first) 2>/dev/null; then
7045         if $test -f 123456789abcde; then
7046                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
7047                 val="$undef"
7048         else
7049                 echo 'You can have filenames longer than 14 characters.'>&4
7050                 val="$define"
7051         fi
7052 else
7053         $cat <<'EOM'
7054 You can't have filenames longer than 14 chars.
7055 You can't even think about them!
7056 EOM
7057         val="$undef"
7058 fi 
7059 set d_flexfnam
7060 eval $setvar
7061 $rm -rf 123456789abcde*
7062
7063 : determine where library module manual pages go
7064 set man3dir man3dir none
7065 eval $prefixit
7066 $cat <<EOM
7067
7068 $spackage has manual pages for many of the library modules.
7069 EOM
7070
7071 case "$nroff" in
7072 nroff)
7073         $cat <<'EOM'
7074 However, you don't have nroff, so they're probably useless to you.
7075 EOM
7076         case "$man3dir" in
7077         '') man3dir="none";;
7078         esac;;
7079 esac
7080
7081 case "$d_flexfnam" in
7082 undef)
7083         $cat <<'EOM'
7084 However, your system can't handle the long file names like File::Basename.3. 
7085 EOM
7086         case "$man3dir" in
7087         '') man3dir="none";;
7088         esac;;
7089 esac
7090
7091 echo "If you don't want the manual sources installed, answer 'none'."
7092 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7093 case "$man3dir" in
7094 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
7095         if $test -d "$privlib/man/man3"; then
7096                 cat <<EOM >&4
7097
7098 WARNING:  Previous versions of perl installed man3 pages into
7099 $privlib/man/man3.  This version will suggest a 
7100 new default of $dflt.  
7101 EOM
7102                 tdflt=$dflt
7103                 dflt='n'
7104                 rp='Do you wish to preserve the old behavior?(y/n)'
7105                 . ./myread
7106                 case "$ans" in
7107                 y*) dflt="$privlib/man/man3" ;;
7108                 *)  dflt=$tdflt ;;
7109                 esac
7110     fi
7111         ;;
7112 *)      dflt="$man3dir" ;;
7113 esac
7114 case "$dflt" in
7115 ' ') dflt=none ;;
7116 esac
7117 echo " "
7118 fn=dn+~
7119 rp="Where do the $package library man pages (source) go?"
7120 . ./getfile
7121 man3dir="$ans"
7122 man3direxp="$ansexp"
7123 case "$man3dir" in
7124 '')     man3dir=' '
7125         installman3dir='';;
7126 esac
7127
7128 : Change installation prefix, if necessary.
7129 if $test X"$prefix" != X"$installprefix"; then
7130         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
7131 else
7132         installman3dir="$man3direxp"
7133 fi
7134
7135 : What suffix to use on installed man pages
7136 case "$man3dir" in
7137 ' ')
7138         man3ext='0'
7139         ;;
7140 *)
7141         rp="What suffix should be used for the $package library man pages?"
7142         case "$man3ext" in
7143         '')     case "$man3dir" in
7144                 *3)  dflt=3 ;;
7145                 *3p) dflt=3p ;;
7146                 *3pm) dflt=3pm ;;
7147                 *l) dflt=l;;
7148                 *n) dflt=n;;
7149                 *o) dflt=o;;
7150                 *p) dflt=p;;
7151                 *C) dflt=C;;
7152                 *L) dflt=L;;
7153                 *L3) dflt=L3;;
7154                 *) dflt=3;;
7155                 esac
7156                 ;;
7157         *)      dflt="$man3ext";;
7158         esac
7159         . ./myread
7160         man3ext="$ans"
7161         ;;
7162 esac
7163
7164 : see if we have to deal with yellow pages, now NIS.
7165 if $test -d /usr/etc/yp || $test -d /etc/yp; then
7166         if $test -f /usr/etc/nibindd; then
7167                 echo " "
7168                 echo "I'm fairly confident you're on a NeXT."
7169                 echo " "
7170                 rp='Do you get the hosts file via NetInfo?'
7171                 dflt=y
7172                 case "$hostcat" in
7173                 nidump*) ;;
7174                 '') ;;
7175                 *) dflt=n;;
7176                 esac
7177                 . ./myread
7178                 case "$ans" in
7179                 y*) hostcat='nidump hosts .';;
7180                 *)      case "$hostcat" in
7181                         nidump*) hostcat='';;
7182                         esac
7183                         ;;
7184                 esac
7185         fi
7186         case "$hostcat" in
7187         nidump*) ;;
7188         *)
7189                 case "$hostcat" in
7190                 *ypcat*) dflt=y;;
7191                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7192                                 dflt=y
7193                         else
7194                                 dflt=n
7195                         fi;;
7196                 *) dflt=n;;
7197                 esac
7198                 echo " "
7199                 rp='Are you getting the hosts file via yellow pages?'
7200                 . ./myread
7201                 case "$ans" in
7202                 y*) hostcat='ypcat hosts';;
7203                 *) hostcat='cat /etc/hosts';;
7204                 esac
7205                 ;;
7206         esac
7207 fi
7208 case "$hostcat" in
7209 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
7210 esac
7211 case "$groupcat" in
7212 '') test -f /etc/group && groupcat='cat /etc/group';;
7213 esac
7214 case "$passcat" in
7215 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
7216 esac
7217
7218 : now get the host name
7219 echo " "
7220 echo "Figuring out host name..." >&4
7221 case "$myhostname" in
7222 '') cont=true
7223         echo 'Maybe "hostname" will work...'
7224         if tans=`sh -c hostname 2>&1` ; then
7225                 myhostname=$tans
7226                 phostname=hostname
7227                 cont=''
7228         fi
7229         ;;
7230 *) cont='';;
7231 esac
7232 if $test "$cont"; then
7233         if ./xenix; then
7234                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
7235                 if tans=`cat /etc/systemid 2>&1` ; then
7236                         myhostname=$tans
7237                         phostname='cat /etc/systemid'
7238                         echo "Whadyaknow.  Xenix always was a bit strange..."
7239                         cont=''
7240                 fi
7241         elif $test -r /etc/systemid; then
7242                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
7243         fi
7244 fi
7245 if $test "$cont"; then
7246         echo 'No, maybe "uuname -l" will work...'
7247         if tans=`sh -c 'uuname -l' 2>&1` ; then
7248                 myhostname=$tans
7249                 phostname='uuname -l'
7250         else
7251                 echo 'Strange.  Maybe "uname -n" will work...'
7252                 if tans=`sh -c 'uname -n' 2>&1` ; then
7253                         myhostname=$tans
7254                         phostname='uname -n'
7255                 else
7256                         echo 'Oh well, maybe I can mine it out of whoami.h...'
7257                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
7258                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
7259                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
7260                         else
7261                                 case "$myhostname" in
7262                                 '') echo "Does this machine have an identity crisis or something?"
7263                                         phostname='';;
7264                                 *)
7265                                         echo "Well, you said $myhostname before..."
7266                                         phostname='echo $myhostname';;
7267                                 esac
7268                         fi
7269                 fi
7270         fi
7271 fi
7272 : you do not want to know about this
7273 set $myhostname
7274 myhostname=$1
7275
7276 : verify guess
7277 if $test "$myhostname" ; then
7278         dflt=y
7279         rp='Your host name appears to be "'$myhostname'".'" Right?"
7280         . ./myread
7281         case "$ans" in
7282         y*) ;;
7283         *) myhostname='';;
7284         esac
7285 fi
7286
7287 : bad guess or no guess
7288 while $test "X$myhostname" = X ; do
7289         dflt=''
7290         rp="Please type the (one word) name of your host:"
7291         . ./myread
7292         myhostname="$ans"
7293 done
7294
7295 : translate upper to lower if necessary
7296 case "$myhostname" in
7297 *[A-Z]*)
7298         echo "(Normalizing case in your host name)"
7299         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
7300         ;;
7301 esac
7302
7303 case "$myhostname" in
7304 *.*)
7305         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
7306         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
7307         echo "(Trimming domain name from host name--host name is now $myhostname)"
7308         ;;
7309 *) case "$mydomain" in
7310         '')
7311                 {
7312                         test "X$hostcat" = "Xypcat hosts" &&
7313                         ypmatch "$myhostname" hosts 2>/dev/null |\
7314                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
7315                         $test -s hosts
7316                 } || {
7317                         test "X$hostcat" != "X" &&
7318                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
7319                                         /[       ]$myhostname[  . ]/p" > hosts
7320                 }
7321                 tmp_re="[       . ]"
7322                 if $test -f hosts; then
7323                         $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
7324                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
7325                         dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
7326                                 hosts | $sort | $uniq | \
7327                                 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
7328                         case `$echo X$dflt` in
7329                         X*\ *)  echo "(Several hosts in the database matched hostname)"
7330                                 dflt=.
7331                                 ;;
7332                         X.) echo "(You do not have fully-qualified names in the hosts database)"
7333                                 ;;
7334                         esac
7335                 else
7336                         echo "(I cannot locate a hosts database anywhere)"
7337                         dflt=.
7338                 fi
7339                 case "$dflt" in
7340                 .)
7341                         tans=`./loc resolv.conf X /etc /usr/etc`
7342                         if $test -f "$tans"; then
7343                                 echo "(Attempting domain name extraction from $tans)"
7344                                 dflt=.`$sed -n -e 's/   / /g' \
7345                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
7346                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7347                                 case "$dflt" in
7348                                 .) dflt=.`$sed -n -e 's/        / /g' \
7349                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
7350                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7351                                         ;;
7352                                 esac
7353                         fi
7354                         ;;
7355                 esac
7356                 case "$dflt" in
7357                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
7358                         dflt=.`sh -c domainname 2>/dev/null`
7359                         case "$dflt" in
7360                         '') dflt='.';;
7361                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
7362                         esac
7363                         ;;
7364                 esac
7365                 case "$dflt" in
7366                 .) echo "(Lost all hope -- silly guess then)"
7367                         dflt='.uucp'
7368                         ;;
7369                 esac
7370                 $rm -f hosts
7371                 ;;
7372         *) dflt="$mydomain";;
7373         esac;;
7374 esac
7375 echo " "
7376 rp="What is your domain name?"
7377 . ./myread
7378 tans="$ans"
7379 case "$ans" in
7380 '') ;;
7381 .*) ;;
7382 *) tans=".$tans";;
7383 esac
7384 mydomain="$tans"
7385
7386 : translate upper to lower if necessary
7387 case "$mydomain" in
7388 *[A-Z]*)
7389         echo "(Normalizing case in your domain name)"
7390         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
7391         ;;
7392 esac
7393
7394 : a little sanity check here
7395 case "$phostname" in
7396 '') ;;
7397 *)
7398         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
7399         $myhostname$mydomain|$myhostname) ;;
7400         *)
7401                 case "$phostname" in
7402                 sed*)
7403                         echo "(That doesn't agree with your whoami.h file, by the way.)"
7404                         ;;
7405                 *)
7406                         echo "(That doesn't agree with your $phostname command, by the way.)"
7407                         ;;
7408                 esac
7409         ;;
7410         esac
7411         ;;
7412 esac
7413
7414 $cat <<EOM
7415
7416 I need to get your e-mail address in Internet format if possible, i.e.
7417 something like user@host.domain. Please answer accurately since I have
7418 no easy means to double check it. The default value provided below
7419 is most probably close to reality but may not be valid from outside
7420 your organization...
7421
7422 EOM
7423 cont=x
7424 while test "$cont"; do
7425         case "$cf_email" in
7426         '') dflt="$cf_by@$myhostname$mydomain";;
7427         *) dflt="$cf_email";;
7428         esac
7429         rp='What is your e-mail address?'
7430         . ./myread
7431         cf_email="$ans"
7432         case "$cf_email" in
7433         *@*.*) cont='' ;;
7434         *)
7435                 rp='Address does not look like an Internet one.  Use it anyway?'
7436                 case "$fastread" in
7437                 yes) dflt=y ;;
7438                 *) dflt=n ;;
7439                 esac
7440                 . ./myread
7441                 case "$ans" in
7442                 y*) cont='' ;;
7443                 *) echo " " ;;
7444                 esac
7445                 ;;
7446         esac
7447 done
7448
7449 $cat <<EOM
7450
7451 If you or somebody else will be maintaining perl at your site, please
7452 fill in the correct e-mail address here so that they may be contacted
7453 if necessary. Currently, the "perlbug" program included with perl
7454 will send mail to this address in addition to perlbug@perl.org. You may
7455 enter "none" for no administrator.
7456
7457 EOM
7458 case "$perladmin" in
7459 '') dflt="$cf_email";;
7460 *) dflt="$perladmin";;
7461 esac
7462 rp='Perl administrator e-mail address'
7463 . ./myread
7464 perladmin="$ans"
7465
7466 : determine whether to only install version-specific parts.
7467 echo " "
7468 $cat <<EOM
7469 Do you want to install only the version-specific parts of the perl
7470 distribution?  Usually you do *not* want to do this.
7471 EOM
7472 case "$versiononly" in
7473 "$define"|[Yy]*|true) dflt='y' ;;
7474 *) dflt='n';
7475 esac
7476 rp="Do you want to install only the version-specific parts of perl?"
7477 . ./myread
7478 case "$ans" in
7479 [yY]*)  val="$define";;
7480 *)      val="$undef" ;;
7481 esac
7482 set versiononly
7483 eval $setvar
7484
7485 : figure out how to guarantee perl startup
7486 case "$startperl" in
7487 '')
7488         case "$sharpbang" in
7489         *!)
7490                 $cat <<EOH
7491
7492 I can use the #! construct to start perl on your system. This will
7493 make startup of perl scripts faster, but may cause problems if you
7494 want to share those scripts and perl is not in a standard place
7495 ($binexp/perl) on all your platforms. The alternative is to force
7496 a shell by starting the script with a single ':' character.
7497
7498 EOH
7499                 case "$versiononly" in
7500                 "$define")      dflt="$binexp/perl$version";;  
7501                 *)              dflt="$binexp/perl";;
7502                 esac
7503                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
7504                 . ./myread
7505                 case "$ans" in
7506                 none)   startperl=": # use perl";;
7507                 *)      startperl="#!$ans"
7508                         if $test 30 -lt `echo "$ans" | wc -c`; then
7509                                 $cat >&4 <<EOM
7510
7511 WARNING:  Some systems limit the #! command to 32 characters.
7512 If you experience difficulty running Perl scripts with #!, try
7513 installing Perl in a directory with a shorter pathname.
7514
7515 EOM
7516                         fi ;;
7517                 esac
7518                 ;;
7519         *) startperl=": # use perl"
7520                 ;;
7521         esac
7522         ;;
7523 esac
7524 echo "I'll use $startperl to start perl scripts."
7525
7526 : figure best path for perl in scripts
7527 case "$perlpath" in
7528 '')
7529         perlpath="$binexp/perl"
7530         case "$startperl" in
7531         *!*) ;;
7532         *)
7533                 $cat <<EOH
7534
7535 I will use the "eval 'exec'" idiom to start Perl on your system.
7536 I can use the full path of your Perl binary for this purpose, but
7537 doing so may cause problems if you want to share those scripts and
7538 Perl is not always in a standard place ($binexp/perl).
7539
7540 EOH
7541                 dflt="$binexp/perl"
7542                 rp="What path shall I use in \"eval 'exec'\"?"
7543                 . ./myread
7544                 perlpath="$ans"
7545                 ;;
7546         esac
7547         ;;
7548 esac
7549 case "$startperl" in
7550 *!*)    ;;
7551 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
7552 esac
7553
7554 : determine where public executable scripts go
7555 set scriptdir scriptdir
7556 eval $prefixit
7557 case "$scriptdir" in
7558 '')
7559         dflt="$bin"
7560         : guess some guesses
7561         $test -d /usr/share/scripts && dflt=/usr/share/scripts
7562         $test -d /usr/share/bin     && dflt=/usr/share/bin
7563         $test -d /usr/local/script  && dflt=/usr/local/script
7564         $test -d /usr/local/scripts && dflt=/usr/local/scripts
7565         $test -d $prefixexp/script  && dflt=$prefixexp/script
7566         set dflt
7567         eval $prefixup
7568         ;;
7569 *)  dflt="$scriptdir"
7570         ;;
7571 esac
7572 $cat <<EOM
7573  
7574 Some installations have a separate directory just for executable scripts so
7575 that they can mount it across multiple architectures but keep the scripts in
7576 one spot.  You might, for example, have a subdirectory of /usr/share for this.
7577 Or you might just lump your scripts in with all your other executables.
7578  
7579 EOM
7580 fn=d~
7581 rp='Where do you keep publicly executable scripts?'
7582 . ./getfile
7583 if $test "X$ansexp" != "X$scriptdirexp"; then
7584         installscript=''
7585 fi
7586 scriptdir="$ans"
7587 scriptdirexp="$ansexp"
7588 : Change installation prefix, if necessary.
7589 if $test X"$prefix" != X"$installprefix"; then
7590         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
7591 else
7592         installscript="$scriptdirexp"
7593 fi
7594
7595 : determine where add-on public executables go
7596 case "$sitebin" in
7597 '')     dflt=$siteprefix/bin ;;
7598 *)      dflt=$sitebin ;;
7599 esac
7600 fn=d~
7601 rp='Pathname where the add-on public executables should be installed?'
7602 . ./getfile
7603 sitebin="$ans"
7604 sitebinexp="$ansexp"
7605 : Change installation prefix, if necessary.
7606 if $test X"$prefix" != X"$installprefix"; then
7607         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
7608 else
7609         installsitebin="$sitebinexp"
7610 fi
7611
7612 case "$vendorprefix" in
7613 '')     d_vendorbin="$undef"
7614         vendorbin=''
7615         vendorbinexp=''
7616         ;;
7617 *)      d_vendorbin="$define"
7618         : determine where vendor-supplied executables go.
7619         case "$vendorbin" in
7620         '') dflt=$vendorprefix/bin ;;
7621         *)      dflt="$vendorbin" ;;
7622         esac
7623         fn=d~+
7624         rp='Pathname for the vendor-supplied executables directory?'
7625         . ./getfile
7626         vendorbin="$ans"
7627         vendorbinexp="$ansexp"
7628         ;;
7629 esac
7630 : Change installation prefix, if necessary.
7631 if $test X"$prefix" != X"$installprefix"; then
7632         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
7633 else
7634         installvendorbin="$vendorbinexp"
7635 fi
7636
7637 : see if qgcvt exists
7638 set qgcvt d_qgcvt
7639 eval $inlibc
7640
7641 echo " "
7642
7643 if $test X"$d_longdbl" = X"$define"; then
7644
7645 echo "Checking how to print long doubles..." >&4
7646
7647 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
7648         $cat >try.c <<'EOCP'
7649 #include <sys/types.h>
7650 #include <stdio.h>
7651 int main() {
7652   double d = 123.456;
7653   printf("%.3f\n", d);
7654 }
7655 EOCP
7656         set try
7657         if eval $compile; then
7658                 yyy=`./try$exe_ext`
7659                 case "$yyy" in
7660                 123.456)
7661                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
7662                         sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
7663                         echo "We will use %f."
7664                         ;;
7665                 esac
7666         fi
7667 fi
7668
7669 if $test X"$sPRIfldbl" = X; then
7670         $cat >try.c <<'EOCP'
7671 #include <sys/types.h>
7672 #include <stdio.h>
7673 int main() {
7674   long double d = 123.456;
7675   printf("%.3llf\n", d);
7676 }
7677 EOCP
7678         set try
7679         if eval $compile; then
7680                 yyy=`./try$exe_ext`
7681                 case "$yyy" in
7682                 123.456)
7683                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
7684                         sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
7685                         echo "We will use %llf."
7686                         ;;
7687                 esac
7688         fi
7689 fi
7690
7691 if $test X"$sPRIfldbl" = X; then
7692         $cat >try.c <<'EOCP'
7693 #include <sys/types.h>
7694 #include <stdio.h>
7695 int main() {
7696   long double d = 123.456;
7697   printf("%.3Lf\n", d);
7698 }
7699 EOCP
7700         set try
7701         if eval $compile; then
7702                 yyy=`./try$exe_ext`
7703                 case "$yyy" in
7704                 123.456)
7705                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
7706                         sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
7707                         echo "We will use %Lf."
7708                         ;;
7709                 esac
7710         fi
7711 fi
7712
7713 if $test X"$sPRIfldbl" = X; then
7714         $cat >try.c <<'EOCP'
7715 #include <sys/types.h>
7716 #include <stdio.h>
7717 int main() {
7718   long double d = 123.456;
7719   printf("%.3lf\n", d);
7720 }
7721 EOCP
7722         set try
7723         if eval $compile; then
7724                 yyy=`./try$exe_ext`
7725                 case "$yyy" in
7726                 123.456)
7727                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
7728                         sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
7729                         echo "We will use %lf."
7730                         ;;
7731                 esac
7732         fi
7733 fi
7734
7735 if $test X"$sPRIfldbl" = X; then
7736         echo "Cannot figure out how to print long doubles." >&4
7737 else
7738         sSCNfldbl=$sPRIfldbl    # expect consistency
7739 fi
7740
7741 $rm -f try try.*
7742
7743 fi # d_longdbl
7744
7745 case "$sPRIfldbl" in
7746 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
7747         d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; 
7748         d_SCNfldbl="$undef";
7749         ;;
7750 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
7751         d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; 
7752         d_SCNfldbl="$define";
7753         ;;
7754 esac
7755
7756 : Check how to convert floats to strings.
7757 echo " "
7758 echo "Checking for an efficient way to convert floats to strings."
7759 echo " " > try.c
7760 case "$uselongdouble" in
7761 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
7762 esac
7763 case "$d_longdbl" in
7764 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
7765 esac
7766 case "$d_PRIgldbl" in
7767 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
7768 esac
7769 $cat >>try.c <<EOP
7770 #ifdef TRY_gconvert
7771 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
7772 char *myname = "gconvert";
7773 #endif
7774 #ifdef TRY_gcvt
7775 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
7776 char *myname = "gcvt";
7777 #endif
7778 #ifdef TRY_qgcvt
7779 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
7780 char *myname = "qgcvt";
7781 #define DOUBLETYPE long double
7782 #endif
7783 #ifdef TRY_sprintf
7784 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
7785 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
7786 #else
7787 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
7788 #endif
7789 char *myname = "sprintf";
7790 #endif
7791
7792 #ifndef DOUBLETYPE
7793 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
7794 #define DOUBLETYPE long double
7795 #else
7796 #define DOUBLETYPE double
7797 #endif
7798 #endif
7799
7800 #include <stdio.h>
7801
7802 #define I_STDLIB $i_stdlib
7803 #ifdef I_STDLIB
7804 #include <stdlib.h>
7805 #endif
7806
7807 int
7808 checkit(expect, got)
7809 char *expect;
7810 char *got;
7811 {
7812     if (strcmp(expect, got)) {
7813                 printf("%s oddity:  Expected %s, got %s\n",
7814                         myname, expect, got);
7815                 exit(1);
7816         }
7817 }
7818
7819 int main()
7820
7821         char buf[64]; 
7822         buf[63] = '\0';
7823
7824         /* This must be 1st test on (which?) platform */
7825         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
7826         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
7827         checkit("0.1", buf);
7828
7829         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
7830         checkit("1", buf);
7831
7832         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
7833         checkit("1.1", buf);
7834
7835         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
7836         checkit("1.01", buf);
7837
7838         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
7839         checkit("1.001", buf);
7840
7841         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
7842         checkit("1.0001", buf);
7843
7844         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
7845         checkit("1.00001", buf);
7846
7847         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
7848         checkit("1.000001", buf);
7849
7850         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
7851         checkit("0", buf);
7852
7853         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
7854         checkit("-1", buf);
7855
7856         /* Some Linux gcvt's give 1.e+5 here. */
7857         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
7858         checkit("100000", buf);
7859         
7860         /* Some Linux gcvt's give -1.e+5 here. */
7861         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
7862         checkit("-100000", buf);
7863
7864         Gconvert((DOUBLETYPE)123.456, 8, 0, buf); 
7865         checkit("123.456", buf);
7866
7867         exit(0);
7868 }
7869 EOP
7870 case "$d_Gconvert" in
7871 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
7872 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
7873 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
7874 *) xxx_list='gconvert gcvt sprintf' ;;
7875 esac
7876
7877 case "$d_longdbl$uselongdouble$d_PRIgldbl" in
7878 "$define$define$define")
7879     # for long doubles prefer first qgcvt, then sprintf
7880     xxx_list="`echo $xxx_list|sed s/sprintf//`" 
7881     xxx_list="sprintf $xxx_list"
7882     case "$d_qgcvt" in
7883     "$define") xxx_list="qgcvt $xxx_list" ;;
7884     esac
7885     ;;
7886 esac
7887
7888 for xxx_convert in $xxx_list; do
7889         echo "Trying $xxx_convert..."
7890         $rm -f try try$_o
7891         set try -DTRY_$xxx_convert
7892         if eval $compile; then
7893                 echo "$xxx_convert() found." >&4
7894                 if ./try; then
7895                         echo "I'll use $xxx_convert to convert floats into a string." >&4
7896                         break;
7897                 else
7898                         echo "...But $xxx_convert didn't work as I expected."
7899                 fi
7900         else
7901                 echo "$xxx_convert NOT found." >&4
7902         fi
7903 done
7904         
7905 case "$xxx_convert" in
7906 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
7907 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
7908 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
7909 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
7910    "$define$define$define")
7911       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
7912    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
7913    esac
7914    ;;  
7915 esac
7916
7917 : see if _fwalk exists
7918 set fwalk d__fwalk
7919 eval $inlibc
7920
7921 : Initialize h_fcntl
7922 h_fcntl=false
7923
7924 : Initialize h_sysfile
7925 h_sysfile=false
7926
7927 : access call always available on UNIX
7928 set access d_access
7929 eval $inlibc
7930
7931 : locate the flags for 'access()'
7932 case "$d_access" in
7933 "$define")
7934         echo " "
7935         $cat >access.c <<'EOCP'
7936 #include <sys/types.h>
7937 #ifdef I_FCNTL
7938 #include <fcntl.h>
7939 #endif
7940 #ifdef I_SYS_FILE
7941 #include <sys/file.h>
7942 #endif
7943 #ifdef I_UNISTD
7944 #include <unistd.h>
7945 #endif
7946 int main() {
7947         exit(R_OK);
7948 }
7949 EOCP
7950         : check sys/file.h first, no particular reason here
7951         if $test `./findhdr sys/file.h` && \
7952                 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
7953                 h_sysfile=true;
7954                 echo "<sys/file.h> defines the *_OK access constants." >&4
7955         elif $test `./findhdr fcntl.h` && \
7956                 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
7957                 h_fcntl=true;
7958                 echo "<fcntl.h> defines the *_OK access constants." >&4
7959         elif $test `./findhdr unistd.h` && \
7960                 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
7961                 echo "<unistd.h> defines the *_OK access constants." >&4
7962         else
7963                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
7964         fi
7965         ;;
7966 esac
7967 $rm -f access*
7968
7969 : see if accessx exists
7970 set accessx d_accessx
7971 eval $inlibc
7972
7973 : see if alarm exists
7974 set alarm d_alarm
7975 eval $inlibc
7976
7977 : see if atolf exists
7978 set atolf d_atolf
7979 eval $inlibc
7980
7981 : see if atoll exists
7982 set atoll d_atoll
7983 eval $inlibc
7984
7985 : Look for GNU-cc style attribute checking
7986 echo " "
7987 echo "Checking whether your compiler can handle __attribute__ ..." >&4
7988 $cat >attrib.c <<'EOCP'
7989 #include <stdio.h>
7990 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
7991 EOCP
7992 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
7993         if $contains 'warning' attrib.out >/dev/null 2>&1; then
7994                 echo "Your C compiler doesn't fully support __attribute__."
7995                 val="$undef"
7996         else
7997                 echo "Your C compiler supports __attribute__."
7998                 val="$define"
7999         fi
8000 else
8001         echo "Your C compiler doesn't seem to understand __attribute__ at all."
8002         val="$undef"
8003 fi
8004 set d_attribut
8005 eval $setvar
8006 $rm -f attrib*
8007
8008 : see if bcmp exists
8009 set bcmp d_bcmp
8010 eval $inlibc
8011
8012 : see if bcopy exists
8013 set bcopy d_bcopy
8014 eval $inlibc
8015
8016 : see if this is a unistd.h system
8017 set unistd.h i_unistd
8018 eval $inhdr
8019
8020 : see if getpgrp exists
8021 set getpgrp d_getpgrp
8022 eval $inlibc
8023
8024 case "$d_getpgrp" in
8025 "$define")
8026         echo " "
8027         echo "Checking to see which flavor of getpgrp is in use..."
8028         $cat >set.c <<EOP
8029 #$i_unistd I_UNISTD
8030 #include <sys/types.h>
8031 #ifdef I_UNISTD
8032 #  include <unistd.h>
8033 #endif
8034 int main()
8035 {
8036         if (getuid() == 0) {
8037                 printf("(I see you are running Configure as super-user...)\n");
8038                 setuid(1);
8039         }
8040 #ifdef TRY_BSD_PGRP
8041         if (getpgrp(1) == 0)
8042                 exit(0);
8043 #else
8044         if (getpgrp() > 0)
8045                 exit(0);
8046 #endif
8047         exit(1);
8048 }
8049 EOP
8050         if $cc -o set -DTRY_BSD_PGRP $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
8051                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
8052                 val="$define"
8053         elif $cc -o set $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
8054                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
8055                 val="$undef"
8056         else
8057                 echo "I can't seem to compile and run the test program."
8058                 if ./usg; then
8059                         xxx="a USG one, i.e. you use getpgrp()."
8060                 else
8061                         # SVR4 systems can appear rather BSD-ish.
8062                         case "$i_unistd" in
8063                         $undef)
8064                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
8065                                 val="$define"
8066                                 ;;
8067                         $define)
8068                                 xxx="probably a USG one, i.e. you use getpgrp()."
8069                                 val="$undef"
8070                                 ;;
8071                         esac
8072                 fi
8073                 echo "Assuming your getpgrp is $xxx" >&4
8074         fi
8075         ;;
8076 *) val="$undef";;
8077 esac
8078 set d_bsdgetpgrp
8079 eval $setvar
8080 $rm -f set set.c
8081
8082 : see if setpgrp exists
8083 set setpgrp d_setpgrp
8084 eval $inlibc
8085
8086 case "$d_setpgrp" in
8087 "$define")
8088         echo " "
8089         echo "Checking to see which flavor of setpgrp is in use..."
8090         $cat >set.c <<EOP
8091 #$i_unistd I_UNISTD
8092 #include <sys/types.h>
8093 #ifdef I_UNISTD
8094 #  include <unistd.h>
8095 #endif
8096 int main()
8097 {
8098         if (getuid() == 0) {
8099                 printf("(I see you are running Configure as super-user...)\n");
8100                 setuid(1);
8101         }
8102 #ifdef TRY_BSD_PGRP
8103         if (-1 == setpgrp(1, 1))
8104                 exit(0);
8105 #else
8106         if (setpgrp() != -1)
8107                 exit(0);
8108 #endif
8109         exit(1);
8110 }
8111 EOP
8112         if $cc -o set -DTRY_BSD_PGRP $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
8113                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
8114                 val="$define"
8115         elif $cc -o set $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
8116                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
8117                 val="$undef"
8118         else
8119                 echo "(I can't seem to compile and run the test program.)"
8120                 if ./usg; then
8121                         xxx="a USG one, i.e. you use setpgrp()."
8122                 else
8123                         # SVR4 systems can appear rather BSD-ish.
8124                         case "$i_unistd" in
8125                         $undef)
8126                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
8127                                 val="$define"
8128                                 ;;
8129                         $define)
8130                                 xxx="probably a USG one, i.e. you use setpgrp()."
8131                                 val="$undef"
8132                                 ;;
8133                         esac
8134                 fi
8135                 echo "Assuming your setpgrp is $xxx" >&4
8136         fi
8137         ;;
8138 *) val="$undef";;
8139 esac
8140 set d_bsdsetpgrp
8141 eval $setvar
8142 $rm -f set set.c
8143 : see if bzero exists
8144 set bzero d_bzero
8145 eval $inlibc
8146
8147 : see if signal is declared as pointer to function returning int or void
8148 echo " "
8149 xxx=`./findhdr signal.h`
8150 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
8151 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
8152         echo "You have int (*signal())() instead of void." >&4
8153         val="$undef"
8154 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
8155         echo "You have void (*signal())()." >&4
8156         val="$define"
8157 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
8158         echo "You have int (*signal())() instead of void." >&4
8159         val="$undef"
8160 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
8161         echo "You have void (*signal())()." >&4
8162         val="$define"
8163 else
8164         case "$d_voidsig" in
8165         '')
8166         echo "I can't determine whether signal handler returns void or int..." >&4
8167                 dflt=void
8168                 rp="What type does your signal handler return?"
8169                 . ./myread
8170                 case "$ans" in
8171                 v*) val="$define";;
8172                 *) val="$undef";;
8173                 esac;;
8174         "$define")
8175                 echo "As you already told me, signal handler returns void." >&4
8176                 val="$define"
8177                 ;;
8178         *)      echo "As you already told me, signal handler returns int." >&4
8179                 val="$undef"
8180                 ;;
8181         esac
8182 fi
8183 set d_voidsig
8184 eval $setvar
8185 case "$d_voidsig" in
8186 "$define") signal_t="void";;
8187 *) signal_t="int";;
8188 esac
8189 $rm -f $$.tmp
8190
8191 : check for ability to cast large floats to 32-bit ints.
8192 echo " "
8193 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
8194 if $test "$intsize" -ge 4; then
8195         xxx=int
8196 else
8197         xxx=long
8198 fi
8199 $cat >try.c <<EOCP
8200 #include <stdio.h>
8201 #include <sys/types.h>
8202 #include <signal.h>
8203 $signal_t blech(s) int s; { exit(3); }
8204 int main()
8205 {
8206         $xxx i32;
8207         double f, g;
8208         int result = 0;
8209         char str[16];
8210         signal(SIGFPE, blech);
8211
8212         /* Don't let compiler optimize the test away.  Store the number 
8213            in a writable string for gcc to pass to sscanf under HP/UX.
8214         */
8215         sprintf(str, "2147483647");
8216         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
8217         g = 10 * f;
8218         i32  = ($xxx) g;
8219
8220         /* x86 processors will probably give 0x8000 0000, which is a
8221        sign change.  We don't want that.  We want to mimic SPARC
8222            behavior here, which is to preserve the sign and give
8223            back 0x7fff ffff.
8224         */
8225         if (i32 != ($xxx) f)
8226                 result |= 1;
8227         exit(result);
8228 }
8229 EOCP
8230 set try
8231 if eval $compile_ok; then
8232         ./try
8233         yyy=$?
8234 else
8235         echo "(I can't seem to compile the test program--assuming it can't)"
8236         yyy=1
8237 fi
8238 case "$yyy" in
8239 0)      val="$define"
8240         echo "Yup, it can."
8241         ;;
8242 *)      val="$undef"
8243         echo "Nope, it can't."
8244         ;;
8245 esac
8246 set d_casti32
8247 eval $setvar
8248 $rm -f try try.*
8249
8250 : check for ability to cast negative floats to unsigned
8251 echo " "
8252 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
8253 $cat >try.c <<EOCP
8254 #include <stdio.h>
8255 #include <sys/types.h>
8256 #include <signal.h>
8257 $signal_t blech(s) int s; { exit(7); }
8258 $signal_t blech_in_list(s) int s; { exit(4); }
8259 unsigned long dummy_long(p) unsigned long p; { return p; }
8260 unsigned int dummy_int(p) unsigned int p; { return p; }
8261 unsigned short dummy_short(p) unsigned short p; { return p; }
8262 int main()
8263 {
8264         double f;
8265         unsigned long along;
8266         unsigned int aint;
8267         unsigned short ashort;
8268         int result = 0;
8269         char str[16];
8270         
8271         /* Frustrate gcc-2.7.2's optimizer which failed this test with
8272            a direct f = -123. assignment.  gcc-2.8.0 reportedly
8273            optimized the whole file away
8274         */
8275         /* Store the number in a writable string for gcc to pass to 
8276            sscanf under HP/UX.
8277         */
8278         sprintf(str, "-123");
8279         sscanf(str, "%lf", &f);  /* f = -123.; */
8280
8281         signal(SIGFPE, blech);
8282         along = (unsigned long)f;
8283         aint = (unsigned int)f;
8284         ashort = (unsigned short)f;
8285         if (along != (unsigned long)-123)
8286                 result |= 1;
8287         if (aint != (unsigned int)-123)
8288                 result |= 1;
8289         if (ashort != (unsigned short)-123)
8290                 result |= 1;
8291         sprintf(str, "1073741824.");
8292         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
8293         f = f + f;
8294         along = 0;
8295         along = (unsigned long)f;
8296         if (along != 0x80000000)
8297                 result |= 2;
8298         f -= 1.;
8299         along = 0;
8300         along = (unsigned long)f;
8301         if (along != 0x7fffffff)
8302                 result |= 1;
8303         f += 2.;
8304         along = 0;
8305         along = (unsigned long)f;
8306         if (along != 0x80000001)
8307                 result |= 2;
8308         if (result)
8309                 exit(result);
8310         signal(SIGFPE, blech_in_list);
8311         sprintf(str, "123.");
8312         sscanf(str, "%lf", &f);  /* f = 123.; */
8313         along = dummy_long((unsigned long)f);
8314         aint = dummy_int((unsigned int)f);
8315         ashort = dummy_short((unsigned short)f);
8316         if (along != (unsigned long)123)
8317                 result |= 4;
8318         if (aint != (unsigned int)123)
8319                 result |= 4;
8320         if (ashort != (unsigned short)123)
8321                 result |= 4;
8322         exit(result);
8323
8324 }
8325 EOCP
8326 set try
8327 if eval $compile_ok; then
8328         ./try
8329         castflags=$?
8330 else
8331         echo "(I can't seem to compile the test program--assuming it can't)"
8332         castflags=7
8333 fi
8334 case "$castflags" in
8335 0)      val="$define"
8336         echo "Yup, it can."
8337         ;;
8338 *)      val="$undef"
8339         echo "Nope, it can't."
8340         ;;
8341 esac
8342 set d_castneg
8343 eval $setvar
8344 $rm -f try.*
8345
8346 : see if vprintf exists
8347 echo " "
8348 if set vprintf val -f d_vprintf; eval $csym; $val; then
8349         echo 'vprintf() found.' >&4
8350         val="$define"
8351         $cat >vprintf.c <<'EOF'
8352 #include <varargs.h>
8353
8354 int main() { xxx("foo"); }
8355
8356 xxx(va_alist)
8357 va_dcl
8358 {
8359         va_list args;
8360         char buf[10];
8361
8362         va_start(args);
8363         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
8364 }
8365 EOF
8366         set vprintf
8367         if eval $compile && ./vprintf; then
8368                 echo "Your vsprintf() returns (int)." >&4
8369                 val2="$undef"
8370         else
8371                 echo "Your vsprintf() returns (char*)." >&4
8372                 val2="$define"
8373         fi
8374 else
8375         echo 'vprintf() NOT found.' >&4
8376                 val="$undef"
8377                 val2="$undef"
8378 fi
8379 set d_vprintf
8380 eval $setvar
8381 val=$val2
8382 set d_charvspr
8383 eval $setvar
8384
8385 : see if chown exists
8386 set chown d_chown
8387 eval $inlibc
8388
8389 : see if chroot exists
8390 set chroot d_chroot
8391 eval $inlibc
8392
8393 : see if chsize exists
8394 set chsize d_chsize
8395 eval $inlibc
8396
8397 : check for const keyword
8398 echo " "
8399 echo 'Checking to see if your C compiler knows about "const"...' >&4
8400 $cat >const.c <<'EOCP'
8401 typedef struct spug { int drokk; } spug;
8402 int main()
8403 {
8404         const char *foo;
8405         const spug y;
8406 }
8407 EOCP
8408 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
8409         val="$define"
8410         echo "Yup, it does."
8411 else
8412         val="$undef"
8413         echo "Nope, it doesn't."
8414 fi
8415 set d_const
8416 eval $setvar
8417
8418 : see if crypt exists
8419 echo " "
8420 if set crypt val -f d_crypt; eval $csym; $val; then
8421         echo 'crypt() found.' >&4
8422         val="$define"
8423         cryptlib=''
8424 else
8425         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
8426         if $test -z "$cryptlib"; then
8427                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
8428         else
8429                 cryptlib=-lcrypt
8430         fi
8431         if $test -z "$cryptlib"; then
8432                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
8433         else
8434                 cryptlib=-lcrypt
8435         fi
8436         if $test -z "$cryptlib"; then
8437                 cryptlib=`./loc libcrypt$_a "" $libpth`
8438         else
8439                 cryptlib=-lcrypt
8440         fi
8441         if $test -z "$cryptlib"; then
8442                 echo 'crypt() NOT found.' >&4
8443                 val="$undef"
8444         else
8445                 val="$define"
8446         fi
8447 fi
8448 set d_crypt
8449 eval $setvar
8450
8451 : get csh whereabouts
8452 case "$csh" in
8453 'csh') val="$undef" ;;
8454 *) val="$define" ;;
8455 esac
8456 set d_csh
8457 eval $setvar
8458 : Respect a hint or command line value for full_csh.
8459 case "$full_csh" in
8460 '') full_csh=$csh ;;
8461 esac
8462
8463 : see if cuserid exists
8464 set cuserid d_cuserid
8465 eval $inlibc
8466
8467 : see if this is a limits.h system
8468 set limits.h i_limits
8469 eval $inhdr
8470
8471 : see if this is a float.h system
8472 set float.h i_float
8473 eval $inhdr
8474
8475 : See if number of significant digits in a double precision number is known
8476 echo " "
8477 $cat >dbl_dig.c <<EOM
8478 #$i_limits I_LIMITS
8479 #$i_float I_FLOAT
8480 #ifdef I_LIMITS
8481 #include <limits.h>
8482 #endif
8483 #ifdef I_FLOAT
8484 #include <float.h>
8485 #endif
8486 #ifdef DBL_DIG
8487 printf("Contains DBL_DIG");
8488 #endif
8489 EOM
8490 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
8491 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
8492         echo "DBL_DIG found." >&4
8493         val="$define"
8494 else
8495         echo "DBL_DIG NOT found." >&4
8496         val="$undef"
8497 fi
8498 $rm -f dbl_dig.?
8499 set d_dbl_dig
8500 eval $setvar
8501
8502 : see if difftime exists
8503 set difftime d_difftime
8504 eval $inlibc
8505
8506 : see if this is a dirent system
8507 echo " "
8508 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
8509         val="$define"
8510         echo "<dirent.h> found." >&4
8511 else
8512         val="$undef"
8513         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
8514                 echo "<sys/dir.h> found." >&4
8515                 echo " "
8516         else
8517                 xinc=`./findhdr sys/ndir.h`
8518         fi
8519         echo "<dirent.h> NOT found." >&4
8520 fi
8521 set i_dirent
8522 eval $setvar
8523
8524 : Look for type of directory structure.
8525 echo " "
8526 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8527
8528 case "$direntrytype" in
8529 ''|' ')
8530         case "$i_dirent" in
8531         $define) guess1='struct dirent' ;;
8532         *) guess1='struct direct'  ;;
8533         esac
8534         ;;
8535 *)      guess1="$direntrytype"
8536         ;;
8537 esac
8538
8539 case "$guess1" in
8540 'struct dirent') guess2='struct direct' ;;
8541 *) guess2='struct dirent' ;;
8542 esac
8543                 
8544 if $contains "$guess1" try.c >/dev/null 2>&1; then
8545         direntrytype="$guess1"
8546         echo "Your directory entries are $direntrytype." >&4
8547 elif $contains "$guess2" try.c >/dev/null 2>&1; then
8548         direntrytype="$guess2"
8549         echo "Your directory entries seem to be $direntrytype." >&4
8550 else
8551         echo "I don't recognize your system's directory entries." >&4
8552         rp="What type is used for directory entries on this system?"
8553         dflt="$guess1"
8554         . ./myread
8555         direntrytype="$ans"
8556 fi
8557 $rm -f try.c
8558
8559
8560 : see if the directory entry stores field length
8561 echo " "
8562 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8563 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
8564         echo "Good, your directory entry keeps length information in d_namlen." >&4
8565         val="$define"
8566 else
8567         echo "Your directory entry does not know about the d_namlen field." >&4
8568         val="$undef"
8569 fi
8570 set d_dirnamlen
8571 eval $setvar
8572 $rm -f try.c
8573
8574 : see if dlerror exists
8575 xxx_runnm="$runnm"
8576 runnm=false
8577 set dlerror d_dlerror
8578 eval $inlibc
8579 runnm="$xxx_runnm"
8580
8581 : see if dlfcn is available
8582 set dlfcn.h i_dlfcn
8583 eval $inhdr
8584
8585 case "$usedl" in
8586 $define|y|true)
8587         $cat << EOM
8588
8589 On a few systems, the dynamically loaded modules that perl generates and uses
8590 will need a different extension than shared libs. The default will probably
8591 be appropriate.
8592
8593 EOM
8594         case "$dlext" in
8595         '')     dflt="$so" ;;
8596         *)      dflt="$dlext" ;;
8597         esac
8598         rp='What is the extension of dynamically loaded modules'
8599         . ./myread
8600         dlext="$ans"
8601         ;;
8602 *)
8603         dlext="none"
8604         ;;
8605 esac
8606
8607 : Check if dlsym need a leading underscore
8608 echo " "
8609 val="$undef"
8610
8611 case "$dlsrc" in
8612 dl_dlopen.xs)
8613         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
8614         $cat >dyna.c <<'EOM'
8615 fred () { }
8616 EOM
8617
8618 $cat >fred.c<<EOM
8619
8620 #include <stdio.h>
8621 #$i_dlfcn I_DLFCN
8622 #ifdef I_DLFCN
8623 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
8624 #else
8625 #include <sys/types.h>
8626 #include <nlist.h>
8627 #include <link.h>
8628 #endif
8629
8630 extern int fred() ;
8631
8632 int main()
8633 {
8634     void * handle ;
8635     void * symbol ;
8636 #ifndef RTLD_LAZY
8637     int mode = 1 ;
8638 #else
8639     int mode = RTLD_LAZY ;
8640 #endif
8641     handle = dlopen("./dyna.$dlext", mode) ;
8642     if (handle == NULL) {
8643         printf ("1\n") ;
8644         fflush (stdout) ;
8645         exit(0);
8646     }
8647     symbol = dlsym(handle, "fred") ;
8648     if (symbol == NULL) {
8649         /* try putting a leading underscore */
8650         symbol = dlsym(handle, "_fred") ;
8651         if (symbol == NULL) {
8652             printf ("2\n") ;
8653             fflush (stdout) ;
8654             exit(0);
8655         }
8656         printf ("3\n") ;
8657     }
8658     else
8659         printf ("4\n") ;
8660     fflush (stdout) ;
8661     exit(0);
8662 }
8663 EOM
8664         : Call the object file tmp-dyna.o in case dlext=o.
8665         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
8666                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
8667                 $ld -o dyna.$dlext $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && 
8668                 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
8669                 xxx=`./fred`
8670                 case $xxx in
8671                 1)      echo "Test program failed using dlopen." >&4
8672                         echo "Perhaps you should not use dynamic loading." >&4;;
8673                 2)      echo "Test program failed using dlsym." >&4
8674                         echo "Perhaps you should not use dynamic loading." >&4;;
8675                 3)      echo "dlsym needs a leading underscore" >&4
8676                         val="$define" ;;
8677                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
8678                 esac
8679         else
8680                 echo "I can't compile and run the test program." >&4
8681                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
8682         fi
8683         ;;
8684 esac
8685                 
8686 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
8687
8688 set d_dlsymun
8689 eval $setvar
8690
8691 hasproto='varname=$1; func=$2; shift; shift;
8692 while $test $# -ge 2; do
8693         case "$1" in
8694         $define) echo "#include <$2>";;
8695         esac ;
8696     shift 2;
8697 done > try.c;
8698 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
8699 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
8700         echo "$func() prototype found.";
8701         val="$define";
8702 else
8703         echo "$func() prototype NOT found.";
8704         val="$undef";
8705 fi;
8706 set $varname;
8707 eval $setvar;
8708 $rm -f try.c tryout.c'
8709
8710 : see if prototype for drand48 is available
8711 echo " "
8712 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
8713 eval $hasproto
8714
8715 : see if dup2 exists
8716 set dup2 d_dup2
8717 eval $inlibc
8718
8719 : see if eaccess exists
8720 set eaccess d_eaccess
8721 eval $inlibc
8722
8723 : see if endgrent exists
8724 set endgrent d_endgrent
8725 eval $inlibc
8726
8727 : see if endhostent exists
8728 set endhostent d_endhent
8729 eval $inlibc
8730
8731 : see if endnetent exists
8732 set endnetent d_endnent
8733 eval $inlibc
8734
8735 : see if endprotoent exists
8736 set endprotoent d_endpent
8737 eval $inlibc
8738
8739 : see if endpwent exists
8740 set endpwent d_endpwent
8741 eval $inlibc
8742
8743 : see if endservent exists
8744 set endservent d_endsent
8745 eval $inlibc
8746
8747 : Locate the flags for 'open()'
8748 echo " "
8749 $cat >open3.c <<'EOCP'
8750 #include <sys/types.h>
8751 #ifdef I_FCNTL
8752 #include <fcntl.h>
8753 #endif
8754 #ifdef I_SYS_FILE
8755 #include <sys/file.h>
8756 #endif
8757 int main() {
8758         if(O_RDONLY);
8759 #ifdef O_TRUNC
8760         exit(0);
8761 #else
8762         exit(1);
8763 #endif
8764 }
8765 EOCP
8766 : check sys/file.h first to get FREAD on Sun
8767 if $test `./findhdr sys/file.h` && \
8768                 set open3 -DI_SYS_FILE && eval $compile; then
8769         h_sysfile=true;
8770         echo "<sys/file.h> defines the O_* constants..." >&4
8771         if ./open3; then
8772                 echo "and you have the 3 argument form of open()." >&4
8773                 val="$define"
8774         else
8775                 echo "but not the 3 argument form of open().  Oh, well." >&4
8776                 val="$undef"
8777         fi
8778 elif $test `./findhdr fcntl.h` && \
8779                 set open3 -DI_FCNTL && eval $compile; then
8780         h_fcntl=true;
8781         echo "<fcntl.h> defines the O_* constants..." >&4
8782         if ./open3; then
8783                 echo "and you have the 3 argument form of open()." >&4
8784                 val="$define"
8785         else
8786                 echo "but not the 3 argument form of open().  Oh, well." >&4
8787                 val="$undef"
8788         fi
8789 else
8790         val="$undef"
8791         echo "I can't find the O_* constant definitions!  You got problems." >&4
8792 fi
8793 set d_open3
8794 eval $setvar
8795 $rm -f open3*
8796
8797 : see which of string.h or strings.h is needed
8798 echo " "
8799 strings=`./findhdr string.h`
8800 if $test "$strings" && $test -r "$strings"; then
8801         echo "Using <string.h> instead of <strings.h>." >&4
8802         val="$define"
8803 else
8804         val="$undef"
8805         strings=`./findhdr strings.h`
8806         if $test "$strings" && $test -r "$strings"; then
8807                 echo "Using <strings.h> instead of <string.h>." >&4
8808         else
8809                 echo "No string header found -- You'll surely have problems." >&4
8810         fi
8811 fi
8812 set i_string
8813 eval $setvar
8814 case "$i_string" in
8815 "$undef") strings=`./findhdr strings.h`;;
8816 *)        strings=`./findhdr string.h`;;
8817 esac
8818
8819 : check for non-blocking I/O stuff
8820 case "$h_sysfile" in
8821 true) echo "#include <sys/file.h>" > head.c;;
8822 *)
8823        case "$h_fcntl" in
8824        true) echo "#include <fcntl.h>" > head.c;;
8825        *) echo "#include <sys/fcntl.h>" > head.c;;
8826        esac
8827        ;;
8828 esac
8829 echo " "
8830 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
8831 case "$o_nonblock" in
8832 '')
8833         $cat head.c > try.c
8834         $cat >>try.c <<'EOCP'
8835 #include <stdio.h>
8836 int main() {
8837 #ifdef O_NONBLOCK
8838         printf("O_NONBLOCK\n");
8839         exit(0);
8840 #endif
8841 #ifdef O_NDELAY
8842         printf("O_NDELAY\n");
8843         exit(0);
8844 #endif
8845 #ifdef FNDELAY
8846         printf("FNDELAY\n");
8847         exit(0);
8848 #endif
8849         exit(0);
8850 }
8851 EOCP
8852         set try
8853         if eval $compile_ok; then
8854                 o_nonblock=`./try`
8855                 case "$o_nonblock" in
8856                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
8857                 *) echo "Seems like we can use $o_nonblock.";;
8858                 esac
8859         else
8860                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
8861         fi
8862         ;;
8863 *) echo "Using $hint value $o_nonblock.";;
8864 esac
8865 $rm -f try try.* .out core
8866
8867 echo " "
8868 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
8869 case "$eagain" in
8870 '')
8871         $cat head.c > try.c
8872         $cat >>try.c <<EOCP
8873 #include <errno.h>
8874 #include <sys/types.h>
8875 #include <signal.h>
8876 #include <stdio.h> 
8877 #define MY_O_NONBLOCK $o_nonblock
8878 #ifndef errno  /* XXX need better Configure test */
8879 extern int errno;
8880 #endif
8881 #$i_unistd I_UNISTD
8882 #ifdef I_UNISTD
8883 #include <unistd.h>
8884 #endif
8885 #$i_string I_STRING
8886 #ifdef I_STRING
8887 #include <string.h>
8888 #else
8889 #include <strings.h>
8890 #endif
8891 $signal_t blech(x) int x; { exit(3); }
8892 EOCP
8893         $cat >> try.c <<'EOCP'
8894 int main()
8895 {
8896         int pd[2];
8897         int pu[2];
8898         char buf[1];
8899         char string[100];
8900
8901         pipe(pd);       /* Down: child -> parent */
8902         pipe(pu);       /* Up: parent -> child */
8903         if (0 != fork()) {
8904                 int ret;
8905                 close(pd[1]);   /* Parent reads from pd[0] */
8906                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
8907 #ifdef F_SETFL
8908                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
8909                         exit(1);
8910 #else
8911                 exit(4);
8912 #endif
8913                 signal(SIGALRM, blech);
8914                 alarm(5);
8915                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
8916                         exit(2);
8917                 sprintf(string, "%d\n", ret);
8918                 write(2, string, strlen(string));
8919                 alarm(0);
8920 #ifdef EAGAIN
8921                 if (errno == EAGAIN) {
8922                         printf("EAGAIN\n");
8923                         goto ok;
8924                 }
8925 #endif
8926 #ifdef EWOULDBLOCK
8927                 if (errno == EWOULDBLOCK)
8928                         printf("EWOULDBLOCK\n");
8929 #endif
8930         ok:
8931                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
8932                 sleep(2);                               /* Give it time to close our pipe */
8933                 alarm(5);
8934                 ret = read(pd[0], buf, 1);      /* Should read EOF */
8935                 alarm(0);
8936                 sprintf(string, "%d\n", ret);
8937                 write(3, string, strlen(string));
8938                 exit(0);
8939         }
8940
8941         close(pd[0]);                   /* We write to pd[1] */
8942         close(pu[1]);                   /* We read from pu[0] */
8943         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
8944         close(pd[1]);                   /* Pipe pd is now fully closed! */
8945         exit(0);                                /* Bye bye, thank you for playing! */
8946 }
8947 EOCP
8948         set try
8949         if eval $compile_ok; then
8950                 echo "$startsh" >mtry
8951                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
8952                 chmod +x mtry
8953                 ./mtry >/dev/null 2>&1
8954                 case $? in
8955                 0) eagain=`$cat try.out`;;
8956                 1) echo "Could not perform non-blocking setting!";;
8957                 2) echo "I did a successful read() for something that was not there!";;
8958                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
8959                 4) echo "Could not find F_SETFL!";;
8960                 *) echo "Something terribly wrong happened during testing.";;
8961                 esac
8962                 rd_nodata=`$cat try.ret`
8963                 echo "A read() system call with no data present returns $rd_nodata."
8964                 case "$rd_nodata" in
8965                 0|-1) ;;
8966                 *)
8967                         echo "(That's peculiar, fixing that to be -1.)"
8968                         rd_nodata=-1
8969                         ;;
8970                 esac
8971                 case "$eagain" in
8972                 '')
8973                         echo "Forcing errno EAGAIN on read() with no data available."
8974                         eagain=EAGAIN
8975                         ;;
8976                 *)
8977                         echo "Your read() sets errno to $eagain when no data is available."
8978                         ;;
8979                 esac
8980                 status=`$cat try.err`
8981                 case "$status" in
8982                 0) echo "And it correctly returns 0 to signal EOF.";;
8983                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
8984                 *) echo "However, your read() returns '$status' on EOF??";;
8985                 esac
8986                 val="$define"
8987                 if test "$status" = "$rd_nodata"; then
8988                         echo "WARNING: you can't distinguish between EOF and no data!"
8989                         val="$undef"
8990                 fi
8991         else
8992                 echo "I can't compile the test program--assuming errno EAGAIN will do."
8993                 eagain=EAGAIN
8994         fi
8995         set d_eofnblk
8996         eval $setvar
8997         ;;
8998 *)
8999         echo "Using $hint value $eagain."
9000         echo "Your read() returns $rd_nodata when no data is present."
9001         case "$d_eofnblk" in
9002         "$define") echo "And you can see EOF because read() returns 0.";;
9003         "$undef") echo "But you can't see EOF status from read() returned value.";;
9004         *)
9005                 echo "(Assuming you can't see EOF status from read anyway.)"
9006                 d_eofnblk=$undef
9007                 ;;
9008         esac
9009         ;;
9010 esac
9011 $rm -f try try.* .out core head.c mtry
9012
9013 : see if fchmod exists
9014 set fchmod d_fchmod
9015 eval $inlibc
9016
9017 : see if fchown exists
9018 set fchown d_fchown
9019 eval $inlibc
9020
9021 : see if this is an fcntl system
9022 set fcntl d_fcntl
9023 eval $inlibc
9024
9025 echo " "
9026 : See if fcntl-based locking works.
9027 $cat >try.c <<'EOCP'
9028 #include <stdlib.h>
9029 #include <unistd.h>
9030 #include <fcntl.h>
9031 int main() {
9032 #if defined(F_SETLK) && defined(F_SETLKW)
9033      struct flock flock;
9034      int retval, fd;
9035      fd = open("try.c", O_RDONLY);
9036      flock.l_type = F_RDLCK;
9037      flock.l_whence = SEEK_SET;
9038      flock.l_start = flock.l_len = 0;
9039      retval = fcntl(fd, F_SETLK, &flock);
9040      close(fd);
9041      (retval < 0 ? exit(2) : exit(0));
9042 #else
9043      exit(2);
9044 #endif
9045 }
9046 EOCP
9047 echo "Checking if fcntl-based file locking works... "
9048 case "$d_fcntl" in
9049 "$define")
9050         set try
9051         if eval $compile_ok; then
9052                 if ./try; then
9053                         echo "Yes, it seems to work."
9054                         val="$define"
9055                 else
9056                         echo "Nope, it didn't work."
9057                         val="$undef"
9058                 fi
9059         else
9060                 echo "I'm unable to compile the test program, so I'll assume not."
9061                 val="$undef"
9062         fi
9063         ;;
9064 *) val="$undef";
9065         echo "Nope, since you don't even have fcntl()."
9066         ;;
9067 esac
9068 set d_fcntl_can_lock
9069 eval $setvar
9070 $rm -f try*
9071
9072
9073 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
9074 while $test $# -ge 2; do
9075         case "$1" in
9076         $define) echo "#include <$2>";;
9077         esac ;
9078     shift 2;
9079 done > try.c;
9080 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
9081 set try;
9082 if eval $compile; then
9083         val="$define";
9084 else
9085         val="$undef";
9086 fi;
9087 set $varname;
9088 eval $setvar;
9089 $rm -f try.c try.o'
9090
9091 socketlib=''
9092 sockethdr=''
9093 : see whether socket exists
9094 echo " "
9095 $echo $n "Hmm... $c" >&4
9096 if set socket val -f d_socket; eval $csym; $val; then
9097         echo "Looks like you have Berkeley networking support." >&4
9098         d_socket="$define"
9099         if set setsockopt val -f; eval $csym; $val; then
9100                 d_oldsock="$undef"
9101         else
9102                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
9103                 d_oldsock="$define"
9104         fi
9105 else
9106         if $contains socklib libc.list >/dev/null 2>&1; then
9107                 echo "Looks like you have Berkeley networking support." >&4
9108                 d_socket="$define"
9109                 : we will have to assume that it supports the 4.2 BSD interface
9110                 d_oldsock="$undef"
9111         else
9112                 echo "You don't have Berkeley networking in libc$_a..." >&4
9113                 if test "X$d_socket" = "X$define"; then
9114                    echo "...but you seem to believe that you have sockets." >&4
9115                 else
9116                         for net in net socket
9117                         do
9118                                 if test -f /usr/lib/lib$net$_a; then
9119                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
9120                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
9121                                         if $contains socket libc.list >/dev/null 2>&1; then
9122                                                 d_socket="$define"
9123                                                 socketlib="-l$net"
9124                                                 case "$net" in
9125                                                 net)
9126                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
9127                                                         sockethdr="-I/usr/netinclude"
9128                                                         ;;
9129                                                 esac
9130                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
9131                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
9132                                                         d_oldsock="$undef"
9133                                                 else
9134                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
9135                                                         d_oldsock="$define"
9136                                                 fi
9137                                                 break
9138                                         fi
9139                                 fi
9140                         done
9141                         if test "X$d_socket" != "X$define"; then
9142                            echo "or anywhere else I see." >&4
9143                            d_socket="$undef"
9144                            d_oldsock="$undef"
9145                         fi
9146                 fi
9147         fi
9148 fi
9149
9150 : see if socketpair exists
9151 set socketpair d_sockpair
9152 eval $inlibc
9153
9154
9155 echo " "
9156 echo "Checking the availability of certain socket constants..." >& 4
9157 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
9158         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
9159         $cat >try.c <<EOF
9160 #include <sys/types.h>
9161 #include <sys/socket.h>
9162 int main() {
9163     int i = $ENUM;
9164 }
9165 EOF
9166         val="$undef"
9167         set try; if eval $compile; then
9168                 val="$define"
9169         fi
9170         set d_${enum}; eval $setvar
9171         $rm -f try.c try
9172 done
9173
9174 : see if sys/select.h has to be included
9175 set sys/select.h i_sysselct
9176 eval $inhdr
9177
9178 : see if we should include time.h, sys/time.h, or both
9179 echo " "
9180 if test "X$timeincl" = X; then
9181         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
9182         $echo $n "I'm now running the test program...$c"
9183         $cat >try.c <<'EOCP'
9184 #include <sys/types.h>
9185 #ifdef I_TIME
9186 #include <time.h>
9187 #endif
9188 #ifdef I_SYSTIME
9189 #ifdef SYSTIMEKERNEL
9190 #define KERNEL
9191 #endif
9192 #include <sys/time.h>
9193 #endif
9194 #ifdef I_SYSSELECT
9195 #include <sys/select.h>
9196 #endif
9197 int main()
9198 {
9199         struct tm foo;
9200 #ifdef S_TIMEVAL
9201         struct timeval bar;
9202 #endif
9203 #ifdef S_TIMEZONE
9204         struct timezone tzp;
9205 #endif
9206         if (foo.tm_sec == foo.tm_sec)
9207                 exit(0);
9208 #ifdef S_TIMEVAL
9209         if (bar.tv_sec == bar.tv_sec)
9210                 exit(0);
9211 #endif
9212         exit(1);
9213 }
9214 EOCP
9215         flags=''
9216         for s_timezone in '-DS_TIMEZONE' ''; do
9217         sysselect=''
9218         for s_timeval in '-DS_TIMEVAL' ''; do
9219         for i_systimek in '' '-DSYSTIMEKERNEL'; do
9220         for i_time in '' '-DI_TIME'; do
9221         for i_systime in '-DI_SYSTIME' ''; do
9222                 case "$flags" in
9223                 '') $echo $n ".$c"
9224                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
9225                         if eval $compile; then
9226                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
9227                                 shift
9228                                 flags="$*"
9229                                 echo " "
9230                                 $echo $n "Succeeded with $flags$c"
9231                         fi
9232                         ;;
9233                 esac
9234         done
9235         done
9236         done
9237         done
9238         done
9239         timeincl=''
9240         echo " "
9241         case "$flags" in
9242         *SYSTIMEKERNEL*) i_systimek="$define"
9243                 timeincl=`./findhdr sys/time.h`
9244                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
9245         *) i_systimek="$undef";;
9246         esac
9247         case "$flags" in
9248         *I_TIME*) i_time="$define"
9249                 timeincl=`./findhdr time.h`" $timeincl"
9250                 echo "We'll include <time.h>." >&4;;
9251         *) i_time="$undef";;
9252         esac
9253         case "$flags" in
9254         *I_SYSTIME*) i_systime="$define"
9255                 timeincl=`./findhdr sys/time.h`" $timeincl"
9256                 echo "We'll include <sys/time.h>." >&4;;
9257         *) i_systime="$undef";;
9258         esac
9259         $rm -f try.c try
9260 fi
9261
9262 : check for fd_set items
9263 $cat <<EOM
9264
9265 Checking to see how well your C compiler handles fd_set and friends ...
9266 EOM
9267 $cat >fd_set.c <<EOCP
9268 #$i_systime I_SYS_TIME
9269 #$i_sysselct I_SYS_SELECT
9270 #$d_socket HAS_SOCKET
9271 #include <sys/types.h>
9272 #ifdef HAS_SOCKET
9273 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
9274 #endif
9275 #ifdef I_SYS_TIME
9276 #include <sys/time.h>
9277 #endif
9278 #ifdef I_SYS_SELECT
9279 #include <sys/select.h>
9280 #endif
9281 int main() {
9282         fd_set fds;
9283
9284 #ifdef TRYBITS
9285         if(fds.fds_bits);
9286 #endif
9287
9288 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
9289         exit(0);
9290 #else
9291         exit(1);
9292 #endif
9293 }
9294 EOCP
9295 set fd_set -DTRYBITS
9296 if eval $compile; then
9297         d_fds_bits="$define"
9298         d_fd_set="$define"
9299         echo "Well, your system knows about the normal fd_set typedef..." >&4
9300         if ./fd_set; then
9301                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
9302                 d_fd_macros="$define"
9303         else
9304                 $cat >&4 <<'EOM'
9305 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
9306 EOM
9307                 d_fd_macros="$undef"
9308         fi
9309 else
9310         $cat <<'EOM'
9311 Hmm, your compiler has some difficulty with fd_set.  Checking further...
9312 EOM
9313         set fd_set
9314         if eval $compile; then
9315                 d_fds_bits="$undef"
9316                 d_fd_set="$define"
9317                 echo "Well, your system has some sort of fd_set available..." >&4
9318                 if ./fd_set; then
9319                         echo "and you have the normal fd_set macros." >&4
9320                         d_fd_macros="$define"
9321                 else
9322                         $cat <<'EOM'
9323 but not the normal fd_set macros!  Gross!  More work for me...
9324 EOM
9325                         d_fd_macros="$undef"
9326                 fi
9327         else
9328         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
9329                 d_fd_set="$undef"
9330                 d_fds_bits="$undef"
9331                 d_fd_macros="$undef"
9332         fi
9333 fi
9334 $rm -f fd_set*
9335
9336 : see if fgetpos exists
9337 set fgetpos d_fgetpos
9338 eval $inlibc
9339
9340 : see if flock exists
9341 set flock d_flock
9342 eval $inlibc
9343
9344 : see if fork exists
9345 set fork d_fork
9346 eval $inlibc
9347
9348 : see if pathconf exists
9349 set pathconf d_pathconf
9350 eval $inlibc
9351
9352 : see if fpathconf exists
9353 set fpathconf d_fpathconf
9354 eval $inlibc
9355
9356
9357 : check for fpos64_t
9358 echo " "
9359 echo "Checking to see if you have fpos64_t..." >&4
9360 $cat >try.c <<EOCP
9361 #include <stdio.h>
9362 int main() { fpos64_t x = 7; }
9363 EOCP
9364 set try
9365 if eval $compile; then
9366         val="$define"
9367         echo "You have fpos64_t."
9368 else
9369         val="$undef"
9370         echo "You do not have fpos64_t."
9371         case "$fpossize" in
9372         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
9373         esac
9374 fi
9375 $rm -f try.* try
9376 set d_fpos64_t
9377 eval $setvar
9378
9379 : see if frexpl exists
9380 set frexpl d_frexpl
9381 eval $inlibc
9382
9383 hasstruct='varname=$1; struct=$2; shift; shift;
9384 while $test $# -ge 2; do
9385         case "$1" in
9386         $define) echo "#include <$2>";;
9387         esac ;
9388     shift 2;
9389 done > try.c;
9390 echo "int main () { struct $struct foo; }" >> try.c;
9391 set try;
9392 if eval $compile; then
9393         val="$define";
9394 else
9395         val="$undef";
9396 fi;
9397 set $varname;
9398 eval $setvar;
9399 $rm -f try.c try.o'
9400
9401 : see if this is a sys/param system
9402 set sys/param.h i_sysparam
9403 eval $inhdr
9404
9405 : see if this is a sys/mount.h system
9406 set sys/mount.h i_sysmount
9407 eval $inhdr
9408
9409 : see if sys/types.h has to be included
9410 set sys/types.h i_systypes
9411 eval $inhdr
9412
9413
9414 echo " "
9415 echo "Checking to see if your system supports struct fs_data..." >&4
9416 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
9417 eval $hasstruct
9418 case "$d_fs_data_s" in
9419 "$define")      echo "Yes, it does."   ;;
9420 *)              echo "No, it doesn't." ;;
9421 esac
9422
9423 : see if fseeko exists
9424 set fseeko d_fseeko
9425 eval $inlibc
9426 case "$longsize" in
9427 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
9428 esac
9429
9430 : see if fsetpos exists
9431 set fsetpos d_fsetpos
9432 eval $inlibc
9433
9434
9435 : see if fstatfs exists
9436 set fstatfs d_fstatfs
9437 eval $inlibc
9438
9439
9440 : see if statvfs exists
9441 set statvfs d_statvfs
9442 eval $inlibc
9443
9444 : see if fstatvfs exists
9445 set fstatvfs d_fstatvfs
9446 eval $inlibc
9447
9448
9449 : see if fsync exists
9450 set fsync d_fsync
9451 eval $inlibc
9452
9453 : see if ftello exists
9454 set ftello d_ftello
9455 eval $inlibc
9456 case "$longsize" in
9457 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
9458 esac
9459
9460 : see if getcwd exists
9461 set getcwd d_getcwd
9462 eval $inlibc
9463
9464 : see if getespwnam exists
9465 set getespwnam d_getespwnam
9466 eval $inlibc
9467
9468
9469 : see if getfsstat exists
9470 set getfsstat d_getfsstat
9471 eval $inlibc
9472
9473 : see if getgrent exists
9474 set getgrent d_getgrent
9475 eval $inlibc
9476
9477 : see if gethostbyaddr exists
9478 set gethostbyaddr d_gethbyaddr
9479 eval $inlibc
9480
9481 : see if gethostbyname exists
9482 set gethostbyname d_gethbyname
9483 eval $inlibc
9484
9485 : see if gethostent exists
9486 set gethostent d_gethent
9487 eval $inlibc
9488
9489 : see how we will look up host name
9490 echo " "
9491 call=''
9492 if set gethostname val -f d_gethname; eval $csym; $val; then
9493         echo 'gethostname() found.' >&4
9494         d_gethname="$define"
9495         call=gethostname
9496 fi
9497 if set uname val -f d_uname; eval $csym; $val; then
9498         if ./xenix; then
9499                 $cat <<'EOM'
9500 uname() was found, but you're running xenix, and older versions of xenix
9501 have a broken uname(). If you don't really know whether your xenix is old
9502 enough to have a broken system call, use the default answer.
9503
9504 EOM
9505                 dflt=y
9506                 case "$d_uname" in
9507                 "$define") dflt=n;;
9508                 esac
9509                 rp='Is your uname() broken?'
9510                 . ./myread
9511                 case "$ans" in
9512                 n*) d_uname="$define"; call=uname;;
9513                 esac
9514         else
9515                 echo 'uname() found.' >&4
9516                 d_uname="$define"
9517                 case "$call" in
9518                 '') call=uname ;;
9519                 esac
9520         fi
9521 fi
9522 case "$d_gethname" in
9523 '') d_gethname="$undef";;
9524 esac
9525 case "$d_uname" in
9526 '') d_uname="$undef";;
9527 esac
9528 case "$d_uname$d_gethname" in
9529 *define*)
9530         dflt=n
9531         cat <<EOM
9532  
9533 Every now and then someone has a $call() that lies about the hostname
9534 but can't be fixed for political or economic reasons.  If you wish, I can
9535 pretend $call() isn't there and maybe compute hostname at run-time
9536 thanks to the '$phostname' command.
9537
9538 EOM
9539         rp="Shall I ignore $call() from now on?"
9540         . ./myread
9541         case "$ans" in
9542         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
9543         esac;;
9544 esac
9545 case "$phostname" in
9546 '') aphostname='';;
9547 *) case "$aphostname" in
9548         /*) ;;
9549         *) set X $phostname
9550                 shift
9551                 file=$1
9552                 shift
9553                 file=`./loc $file $file $pth`
9554                 aphostname=`echo $file $*`
9555                 ;;
9556         esac
9557         ;;
9558 esac
9559 case "$d_uname$d_gethname" in
9560 *define*) ;;
9561 *)
9562         case "$phostname" in
9563         '')
9564                 echo "There will be no way for $package to get your hostname." >&4;;
9565         *)
9566         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
9567                 ;;
9568         esac;;
9569 esac
9570 case "$d_phostname" in
9571 '') d_phostname="$undef";;
9572 esac
9573
9574 : see if this is a netdb.h system
9575 set netdb.h i_netdb
9576 eval $inhdr
9577
9578 : see if prototypes for various gethostxxx netdb.h functions are available
9579 echo " "
9580 set d_gethostprotos gethostent $i_netdb netdb.h
9581 eval $hasproto
9582
9583 : see if getlogin exists
9584 set getlogin d_getlogin
9585 eval $inlibc
9586
9587 : see if getmnt exists
9588 set getmnt d_getmnt
9589 eval $inlibc
9590
9591 : see if getmntent exists
9592 set getmntent d_getmntent
9593 eval $inlibc
9594
9595 : see if getnetbyaddr exists
9596 set getnetbyaddr d_getnbyaddr
9597 eval $inlibc
9598
9599 : see if getnetbyname exists
9600 set getnetbyname d_getnbyname
9601 eval $inlibc
9602
9603 : see if getnetent exists
9604 set getnetent d_getnent
9605 eval $inlibc
9606
9607 : see if prototypes for various getnetxxx netdb.h functions are available
9608 echo " "
9609 set d_getnetprotos getnetent $i_netdb netdb.h
9610 eval $hasproto
9611
9612 : see if getpagesize exists
9613 set getpagesize d_getpagsz
9614 eval $inlibc
9615
9616
9617 : see if getprotobyname exists
9618 set getprotobyname d_getpbyname
9619 eval $inlibc
9620
9621 : see if getprotobynumber exists
9622 set getprotobynumber d_getpbynumber
9623 eval $inlibc
9624
9625 : see if getprotoent exists
9626 set getprotoent d_getpent
9627 eval $inlibc
9628
9629 : see if getpgid exists
9630 set getpgid d_getpgid
9631 eval $inlibc
9632
9633 : see if getpgrp2 exists
9634 set getpgrp2 d_getpgrp2
9635 eval $inlibc
9636
9637 : see if getppid exists
9638 set getppid d_getppid
9639 eval $inlibc
9640
9641 : see if getpriority exists
9642 set getpriority d_getprior
9643 eval $inlibc
9644
9645 : see if prototypes for various getprotoxxx netdb.h functions are available
9646 echo " "
9647 set d_getprotoprotos getprotoent $i_netdb netdb.h
9648 eval $hasproto
9649
9650 : see if getprpwnam exists
9651 set getprpwnam d_getprpwnam
9652 eval $inlibc
9653
9654 : see if getpwent exists
9655 set getpwent d_getpwent
9656 eval $inlibc
9657
9658
9659 : see if getservbyname exists
9660 set getservbyname d_getsbyname
9661 eval $inlibc
9662
9663 : see if getservbyport exists
9664 set getservbyport d_getsbyport
9665 eval $inlibc
9666
9667 : see if getservent exists
9668 set getservent d_getsent
9669 eval $inlibc
9670
9671 : see if prototypes for various getservxxx netdb.h functions are available
9672 echo " "
9673 set d_getservprotos getservent $i_netdb netdb.h
9674 eval $hasproto
9675
9676 : see if getspnam exists
9677 set getspnam d_getspnam
9678 eval $inlibc
9679
9680 : see if gettimeofday or ftime exists
9681 set gettimeofday d_gettimeod
9682 eval $inlibc
9683 case "$d_gettimeod" in
9684 "$undef")
9685         set ftime d_ftime 
9686         eval $inlibc
9687         ;;
9688 *)
9689         val="$undef"; set d_ftime; eval $setvar
9690         ;;
9691 esac
9692 case "$d_gettimeod$d_ftime" in
9693 "$undef$undef")
9694         echo " "
9695         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
9696         ;;
9697 esac
9698
9699 : see if this is an grp system
9700 set grp.h i_grp
9701 eval $inhdr
9702
9703 case "$i_grp" in
9704 $define)
9705         xxx=`./findhdr grp.h`
9706         $cppstdin $cppflags $cppminus < $xxx >$$.h
9707
9708         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
9709                 val="$define"
9710         else
9711                 val="$undef"
9712         fi
9713         set d_grpasswd
9714         eval $setvar
9715
9716         $rm -f $$.h
9717         ;;
9718 *)
9719         val="$undef";
9720         set d_grpasswd; eval $setvar
9721         ;;
9722 esac
9723
9724 : see if hasmntopt exists
9725 set hasmntopt d_hasmntopt
9726 eval $inlibc
9727
9728 : see if this is a netinet/in.h or sys/in.h system
9729 set netinet/in.h i_niin sys/in.h i_sysin
9730 eval $inhdr
9731
9732 : see if arpa/inet.h has to be included
9733 set arpa/inet.h i_arpainet
9734 eval $inhdr
9735
9736 : see if htonl --and friends-- exists
9737 val=''
9738 set htonl val
9739 eval $inlibc
9740
9741 : Maybe they are macros.
9742 case "$val" in
9743 $undef)
9744         $cat >htonl.c <<EOM
9745 #include <stdio.h>
9746 #include <sys/types.h>
9747 #$i_niin I_NETINET_IN
9748 #$i_sysin I_SYS_IN
9749 #$i_arpainet I_ARPA_INET
9750 #ifdef I_NETINET_IN
9751 #include <netinet/in.h>
9752 #endif
9753 #ifdef I_SYS_IN
9754 #include <sys/in.h>
9755 #endif
9756 #ifdef I_ARPA_INET
9757 #include <arpa/inet.h>
9758 #endif
9759 #ifdef htonl
9760 printf("Defined as a macro.");
9761 #endif
9762 EOM
9763         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
9764         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
9765                 val="$define"
9766                 echo "But it seems to be defined as a macro." >&4
9767         fi
9768         $rm -f htonl.?
9769         ;;
9770 esac
9771 set d_htonl
9772 eval $setvar
9773
9774 : see if iconv exists
9775 set iconv d_iconv
9776 eval $inlibc
9777
9778 : index or strchr
9779 echo " "
9780 if set index val -f; eval $csym; $val; then
9781         if set strchr val -f d_strchr; eval $csym; $val; then
9782                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
9783                         val="$define"
9784                         vali="$undef"
9785                         echo "strchr() found." >&4
9786                 else
9787                         val="$undef"
9788                         vali="$define"
9789                         echo "index() found." >&4
9790                 fi
9791         else
9792                 val="$undef"
9793                 vali="$define"
9794                 echo "index() found." >&4
9795         fi
9796 else
9797         if set strchr val -f d_strchr; eval $csym; $val; then
9798                 val="$define"
9799                 vali="$undef"
9800                 echo "strchr() found." >&4
9801         else
9802                 echo "No index() or strchr() found!" >&4
9803                 val="$undef"
9804                 vali="$undef"
9805         fi
9806 fi
9807 set d_strchr; eval $setvar
9808 val="$vali"
9809 set d_index; eval $setvar
9810
9811 : check whether inet_aton exists
9812 set inet_aton d_inetaton
9813 eval $inlibc
9814
9815 : see if inttypes.h is available
9816 : we want a real compile instead of Inhdr because some systems
9817 : have an inttypes.h which includes non-existent headers
9818 echo " "
9819 $cat >try.c <<EOCP
9820 #include <inttypes.h>
9821 int main() {
9822         static int32_t foo32 = 0x12345678;
9823 }
9824 EOCP
9825 set try
9826 if eval $compile; then
9827         echo "<inttypes.h> found." >&4
9828         val="$define"
9829 else
9830         echo "<inttypes.h> NOT found." >&4
9831         val="$undef"
9832 fi
9833 $rm -f try.c try
9834 set i_inttypes
9835 eval $setvar
9836
9837 : check for int64_t
9838 echo " "
9839 echo "Checking to see if you have int64_t..." >&4
9840 $cat >try.c <<EOCP
9841 #include <sys/types.h>
9842 #$i_inttypes I_INTTYPES
9843 #ifdef I_INTTYPES
9844 #include <inttypes.h>
9845 #endif
9846 int main() { int64_t x = 7; }
9847 EOCP
9848 set try
9849 if eval $compile; then
9850         val="$define"
9851         echo "You have int64_t."
9852 else
9853         val="$undef"
9854         echo "You do not have int64_t."
9855 fi
9856 $rm -f try try.*
9857 set d_int64_t
9858 eval $setvar
9859
9860 : Look for isascii
9861 echo " "
9862 $cat >isascii.c <<'EOCP'
9863 #include <stdio.h>
9864 #include <ctype.h>
9865 int main() {
9866         int c = 'A';
9867         if (isascii(c))
9868                 exit(0);
9869         else
9870                 exit(1);
9871 }
9872 EOCP
9873 set isascii
9874 if eval $compile; then
9875         echo "isascii() found." >&4
9876         val="$define"
9877 else
9878         echo "isascii() NOT found." >&4
9879         val="$undef"
9880 fi
9881 set d_isascii
9882 eval $setvar
9883 $rm -f isascii*
9884
9885 : see if isnan exists
9886 set isnan d_isnan
9887 eval $inlibc
9888
9889 : see if isnanl exists
9890 set isnanl d_isnanl
9891 eval $inlibc
9892
9893 : see if killpg exists
9894 set killpg d_killpg
9895 eval $inlibc
9896
9897 : see if lchown exists
9898 echo " "
9899 $cat > try.c <<'EOCP'
9900 /* System header to define __stub macros and hopefully few prototypes,
9901     which can conflict with char lchown(); below.  */
9902 #include <assert.h>
9903 /* Override any gcc2 internal prototype to avoid an error.  */
9904 /* We use char because int might match the return type of a gcc2
9905    builtin and then its argument prototype would still apply.  */
9906 char lchown();
9907 int main() {
9908     /*  The GNU C library defines this for functions which it implements
9909         to always fail with ENOSYS.  Some functions are actually named
9910         something starting with __ and the normal name is an alias.  */
9911 #if defined (__stub_lchown) || defined (__stub___lchown)
9912 choke me
9913 #else
9914 lchown();
9915 #endif
9916 ; return 0; }
9917 EOCP
9918 set try
9919 if eval $compile; then
9920     $echo "lchown() found." >&4
9921     val="$define"
9922 else
9923     $echo "lchown() NOT found." >&4
9924     val="$undef"
9925 fi
9926 set d_lchown
9927 eval $setvar
9928
9929 : See if number of significant digits in a double precision number is known
9930 echo " "
9931 $cat >ldbl_dig.c <<EOM
9932 #$i_limits I_LIMITS
9933 #$i_float I_FLOAT
9934 #ifdef I_LIMITS
9935 #include <limits.h>
9936 #endif
9937 #ifdef I_FLOAT
9938 #include <float.h>
9939 #endif
9940 #ifdef LDBL_DIG
9941 printf("Contains LDBL_DIG");
9942 #endif
9943 EOM
9944 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
9945 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
9946         echo "LDBL_DIG found." >&4
9947         val="$define"
9948 else
9949         echo "LDBL_DIG NOT found." >&4
9950         val="$undef"
9951 fi
9952 $rm -f ldbl_dig.?
9953 set d_ldbl_dig
9954 eval $setvar
9955
9956 : see if link exists
9957 set link d_link
9958 eval $inlibc
9959
9960 : see if localeconv exists
9961 set localeconv d_locconv
9962 eval $inlibc
9963
9964 : see if lockf exists
9965 set lockf d_lockf
9966 eval $inlibc
9967
9968 : check for long long
9969 echo " "
9970 echo "Checking to see if you have long long..." >&4
9971 echo 'int main() { long long x = 7; return 0; }' > try.c
9972 set try
9973 if eval $compile; then
9974         val="$define"
9975         echo "You have long long."
9976 else
9977         val="$undef"
9978         echo "You do not have long long."
9979 fi
9980 $rm try.*
9981 set d_longlong
9982 eval $setvar
9983
9984 : check for length of long long
9985 case "${d_longlong}${longlongsize}" in
9986 $define)
9987         echo " "
9988         echo "Checking to see how big your long longs are..." >&4
9989         $cat >try.c <<'EOCP'
9990 #include <stdio.h>
9991 int main()
9992 {
9993     printf("%d\n", (int)sizeof(long long));
9994     return(0);
9995 }
9996 EOCP
9997         set try
9998         if eval $compile_ok; then
9999                 longlongsize=`./try$exe_ext`
10000                 echo "Your long longs are $longlongsize bytes long."
10001         else
10002                 dflt='8'
10003                 echo " "
10004                 echo "(I can't seem to compile the test program.  Guessing...)"
10005                 rp="What is the size of a long long (in bytes)?"
10006                 . ./myread
10007                 longlongsize="$ans"
10008         fi
10009         if $test "X$longsize" = "X$longlongsize"; then
10010                 echo "(That isn't any different from an ordinary long.)"
10011         fi      
10012         ;;
10013 esac
10014 $rm -f try.* try
10015
10016 : see if prototype for lseek is available
10017 echo " "
10018 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
10019 eval $hasproto
10020
10021 : see if lstat exists
10022 set lstat d_lstat
10023 eval $inlibc
10024
10025 : see if madvise exists
10026 set madvise d_madvise
10027 eval $inlibc
10028
10029 : see if mblen exists
10030 set mblen d_mblen
10031 eval $inlibc
10032
10033 : see if mbstowcs exists
10034 set mbstowcs d_mbstowcs
10035 eval $inlibc
10036
10037 : see if mbtowc exists
10038 set mbtowc d_mbtowc
10039 eval $inlibc
10040
10041 : see if memchr exists
10042 set memchr d_memchr
10043 eval $inlibc
10044
10045 : see if memcmp exists
10046 set memcmp d_memcmp
10047 eval $inlibc
10048
10049 : see if memcpy exists
10050 set memcpy d_memcpy
10051 eval $inlibc
10052
10053 : see if memmove exists
10054 set memmove d_memmove
10055 eval $inlibc
10056
10057 : see if memset exists
10058 set memset d_memset
10059 eval $inlibc
10060
10061 : see if mkdir exists
10062 set mkdir d_mkdir
10063 eval $inlibc
10064
10065 : see if mkdtemp exists
10066 set mkdtemp d_mkdtemp
10067 eval $inlibc
10068
10069 : see if mkfifo exists
10070 set mkfifo d_mkfifo
10071 eval $inlibc
10072
10073 : see if mkstemp exists
10074 set mkstemp d_mkstemp
10075 eval $inlibc
10076
10077 : see if mkstemps exists
10078 set mkstemps d_mkstemps
10079 eval $inlibc
10080
10081 : see if mktime exists
10082 set mktime d_mktime
10083 eval $inlibc
10084
10085 : see if this is a sys/mman.h system
10086 set sys/mman.h i_sysmman
10087 eval $inhdr
10088
10089 : see if mmap exists
10090 set mmap d_mmap
10091 eval $inlibc
10092 : see what shmat returns
10093 : default to something harmless
10094 mmaptype='void *'
10095 case "$i_sysmman$d_mmap" in
10096 "$define$define")
10097         $cat >mmap.c <<'END'
10098 #include <sys/mman.h>
10099 void *mmap();
10100 END
10101         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
10102                 mmaptype='void *'
10103         else
10104                 mmaptype='caddr_t'
10105         fi
10106         echo "and it returns ($mmaptype)." >&4
10107         ;;
10108 esac
10109
10110
10111
10112 : see if modfl exists
10113 set modfl d_modfl
10114 eval $inlibc
10115
10116 : see if mprotect exists
10117 set mprotect d_mprotect
10118 eval $inlibc
10119
10120 : see if msgctl exists
10121 set msgctl d_msgctl
10122 eval $inlibc
10123
10124 : see if msgget exists
10125 set msgget d_msgget
10126 eval $inlibc
10127
10128 : see if msgsnd exists
10129 set msgsnd d_msgsnd
10130 eval $inlibc
10131
10132 : see if msgrcv exists
10133 set msgrcv d_msgrcv
10134 eval $inlibc
10135
10136 : see how much of the 'msg*(2)' library is present.
10137 h_msg=true
10138 echo " "
10139 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
10140 *"$undef"*) h_msg=false;;
10141 esac
10142 case "$osname" in
10143 freebsd)
10144     case "`ipcs 2>&1`" in
10145     "SVID messages"*"not configured"*)
10146         echo "Your $osname does not have the msg*(2) configured." >&4
10147         h_msg=false
10148         val="$undef"
10149         set msgctl d_msgctl
10150         eval $setvar
10151         set msgget d_msgget
10152         eval $setvar
10153         set msgsnd d_msgsnd
10154         eval $setvar
10155         set msgrcv d_msgrcv
10156         eval $setvar
10157         ;;
10158     esac
10159     ;;
10160 esac
10161 : we could also check for sys/ipc.h ...
10162 if $h_msg && $test `./findhdr sys/msg.h`; then
10163         echo "You have the full msg*(2) library." >&4
10164         val="$define"
10165 else
10166         echo "You don't have the full msg*(2) library." >&4
10167         val="$undef"
10168 fi
10169 set d_msg
10170 eval $setvar
10171
10172 : see if msync exists
10173 set msync d_msync
10174 eval $inlibc
10175
10176 : see if munmap exists
10177 set munmap d_munmap
10178 eval $inlibc
10179
10180 : see if nice exists
10181 set nice d_nice
10182 eval $inlibc
10183
10184
10185 echo " "
10186 echo "Checking which 64-bit integer type we could use..." >&4
10187
10188 case "$intsize" in
10189 8) val=int
10190    set quadtype
10191    eval $setvar
10192    val='"unsigned int"'
10193    set uquadtype
10194    eval $setvar
10195    quadkind=1
10196    ;;
10197 *) case "$longsize" in
10198    8) val=long
10199       set quadtype
10200       eval $setvar
10201       val='"unsigned long"'
10202       set uquadtype
10203       eval $setvar
10204       quadkind=2
10205       ;;
10206    *) case "$d_longlong:$longlongsize" in
10207       define:8)
10208         val='"long long"'
10209         set quadtype
10210         eval $setvar
10211         val='"unsigned long long"'
10212         set uquadtype
10213         eval $setvar
10214         quadkind=3
10215         ;;
10216       *) case "$d_int64_t" in
10217          define)
10218            val=int64_t
10219            set quadtype
10220            eval $setvar
10221            val=uint64_t
10222            set uquadtype
10223            eval $setvar
10224            quadkind=4
10225            ;;
10226          esac
10227          ;;
10228       esac
10229       ;;
10230    esac
10231    ;;
10232 esac
10233
10234 case "$quadtype" in
10235 '')     echo "Alas, no 64-bit integer types in sight." >&4
10236         d_quad="$undef"
10237         ;;
10238 *)      if test X"$use64bitint" = Xdefine -o X"$longsize" = X8; then
10239             verb="will"
10240         else
10241             verb="could"
10242         fi
10243         echo "We $verb use '$quadtype' for 64-bit integers." >&4
10244         d_quad="$define"
10245         ;;
10246 esac
10247
10248 : check for length of character
10249 echo " "
10250 case "$charsize" in
10251 '')
10252         echo "Checking to see how big your characters are (hey, you never know)..." >&4
10253         $cat >try.c <<'EOCP'
10254 #include <stdio.h>
10255 int main()
10256 {
10257     printf("%d\n", (int)sizeof(char));
10258     exit(0);
10259 }
10260 EOCP
10261         set try
10262         if eval $compile_ok; then
10263                 dflt=`./try`
10264         else
10265                 dflt='1'
10266                 echo "(I can't seem to compile the test program.  Guessing...)"
10267         fi
10268         ;;
10269 *)
10270         dflt="$charsize"
10271         ;;
10272 esac
10273 rp="What is the size of a character (in bytes)?"
10274 . ./myread
10275 charsize="$ans"
10276 $rm -f try.c try
10277
10278 : check for volatile keyword
10279 echo " "
10280 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10281 $cat >try.c <<'EOCP'
10282 int main()
10283 {
10284         typedef struct _goo_struct goo_struct;
10285         goo_struct * volatile goo = ((goo_struct *)0);
10286         struct _goo_struct {
10287                 long long_int;
10288                 int reg_int;
10289                 char char_var;
10290         };
10291         typedef unsigned short foo_t;
10292         char *volatile foo;
10293         volatile int bar;
10294         volatile foo_t blech;
10295         foo = foo;
10296 }
10297 EOCP
10298 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10299         val="$define"
10300         echo "Yup, it does."
10301 else
10302         val="$undef"
10303         echo "Nope, it doesn't."
10304 fi
10305 set d_volatile
10306 eval $setvar
10307 $rm -f try.*
10308
10309
10310 echo " "
10311 $echo "Choosing the C types to be used for Perl's internal types..." >&4
10312
10313 case "$use64bitint:$d_quad:$quadtype" in
10314 define:define:?*)
10315         ivtype="$quadtype"
10316         uvtype="$uquadtype"
10317         ivsize=8
10318         uvsize=8
10319         ;;
10320 *)      ivtype="long"
10321         uvtype="unsigned long"
10322         ivsize=$longsize
10323         uvsize=$longsize
10324         ;;
10325 esac
10326
10327 case "$uselongdouble:$d_longdbl" in
10328 define:define)
10329         nvtype="long double"
10330         nvsize=$longdblsize
10331         ;;
10332 *)      nvtype=double
10333         nvsize=$doublesize
10334         ;;
10335 esac
10336
10337 $echo "(IV will be "$ivtype", $ivsize bytes)"
10338 $echo "(UV will be "$uvtype", $uvsize bytes)"
10339 $echo "(NV will be "$nvtype", $nvsize bytes)"
10340
10341 $cat >try.c <<EOCP
10342 #$i_inttypes I_INTTYPES
10343 #ifdef I_INTTYPES
10344 #include <inttypes.h>
10345 #endif
10346 #include <stdio.h>
10347 int main() {
10348 #ifdef INT8
10349    int8_t i =  INT8_MAX;
10350   uint8_t u = UINT8_MAX;
10351   printf("int8_t\n");
10352 #endif
10353 #ifdef INT16
10354    int16_t i =  INT16_MAX;
10355   uint16_t i = UINT16_MAX;
10356   printf("int16_t\n");
10357 #endif
10358 #ifdef INT32
10359    int32_t i =  INT32_MAX;
10360   uint32_t u = UINT32_MAX;
10361   printf("int32_t\n");
10362 #endif
10363 }
10364 EOCP
10365
10366 case "$i8type" in
10367 '')     case "$charsize" in
10368         1)      i8type=char
10369                 u8type="unsigned char"
10370                 i8size=$charsize
10371                 u8size=$charsize
10372                 ;;
10373         esac
10374         ;;
10375 esac
10376 case "$i8type" in
10377 '')     set try -DINT8
10378         if eval $compile; then
10379                 case "`./try$exe_ext`" in
10380                 int8_t) i8type=int8_t
10381                         u8type=uint8_t
10382                         i8size=1
10383                         u8size=1
10384                         ;;
10385                 esac
10386         fi
10387         ;;
10388 esac
10389 case "$i8type" in
10390 '')     if $test $charsize -ge 1; then
10391                 i8type=char
10392                 u8type="unsigned char"
10393                 i8size=$charsize
10394                 u8size=$charsize
10395         fi
10396         ;;
10397 esac
10398
10399 case "$i16type" in
10400 '')     case "$shortsize" in
10401         2)      i16type=short
10402                 u16type="unsigned short"
10403                 i16size=$shortsize
10404                 u16size=$shortsize
10405                 ;;
10406         esac
10407         ;;
10408 esac
10409 case "$i16type" in
10410 '')     set try -DINT16
10411         if eval $compile; then
10412                 case "`./try$exe_ext`" in
10413                 int16_t)
10414                         i16type=int16_t
10415                         u16type=uint16_t
10416                         i16size=2
10417                         u16size=2
10418                         ;;
10419                 esac
10420         fi
10421         ;;
10422 esac
10423 case "$i16type" in
10424 '')     if $test $shortsize -ge 2; then
10425                 i16type=short
10426                 u16type="unsigned short"
10427                 i16size=$shortsize
10428                 u16size=$shortsize
10429         fi
10430         ;;
10431 esac
10432
10433 case "$i32type" in
10434 '')     case "$longsize" in
10435         4)      i32type=long
10436                 u32type="unsigned long"
10437                 i32size=$longsize
10438                 u32size=$longsize
10439                 ;;
10440         *)      case "$intsize" in
10441                 4)      i32type=int
10442                         u32type="unsigned int"
10443                         i32size=$intsize
10444                         u32size=$intsize
10445                         ;;
10446                 esac
10447                 ;;
10448         esac
10449         ;;
10450 esac
10451 case "$i32type" in
10452 '')     set try -DINT32
10453         if eval $compile; then
10454                 case "`./try$exe_ext`" in
10455                 int32_t)
10456                         i32type=int32_t
10457                         u32type=uint32_t
10458                         i32size=4
10459                         u32size=4
10460                         ;;
10461                 esac
10462         fi
10463         ;;
10464 esac
10465 case "$i32type" in
10466 '')     if $test $intsize -ge 4; then
10467                 i32type=int
10468                 u32type="unsigned int"
10469                 i32size=$intsize
10470                 u32size=$intsize
10471         fi
10472         ;;
10473 esac
10474
10475 case "$i64type" in
10476 '')     case "$d_quad:$quadtype" in
10477         define:?*)
10478                 i64type="$quadtype"
10479                 u64type="$uquadtype"
10480                 i64size=8
10481                 u64size=8
10482                 ;;
10483         esac
10484         ;;
10485 esac
10486
10487 $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
10488 : volatile so that the compiler has to store it out to memory.
10489 if test X"$d_volatile" = X"$define"; then
10490         volatile=volatile
10491 fi
10492 $cat <<EOP >try.c
10493 #include <stdio.h>
10494 #include <sys/types.h>
10495 #include <signal.h>
10496 #ifdef SIGFPE
10497 $volatile int bletched = 0;
10498 $signal_t blech(s) int s; { bletched = 1; }
10499 #endif
10500 int main() {
10501     $uvtype u = 0;
10502     $nvtype d;
10503     int     n = 8 * $uvsize;
10504     int     i;
10505 #ifdef SIGFPE
10506     signal(SIGFPE, blech);
10507 #endif
10508
10509     for (i = 0; i < n; i++) {
10510       u = u << 1 | ($uvtype)1;
10511       d = ($nvtype)u;
10512       if (($uvtype)d != u)
10513         break;
10514       if (d <= 0)
10515         break;
10516       d = ($nvtype)(u - 1);
10517       if (($uvtype)d != (u - 1))
10518         break;
10519 #ifdef SIGFPE
10520       if (bletched) {
10521         break;
10522 #endif
10523       } 
10524     }
10525     printf("%d\n", ((i == n) ? -n : i));
10526     exit(0);
10527 }
10528 EOP
10529 set try
10530
10531 d_nv_preserves_uv="$undef"
10532 if eval $compile; then
10533         d_nv_preserves_uv_bits="`./try$exe_ext`"
10534 fi
10535 case "$d_nv_preserves_uv_bits" in
10536 \-[1-9]*)       
10537         d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
10538         $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs."  2>&1
10539         d_nv_preserves_uv="$define"
10540         ;;
10541 [1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs."  2>&1
10542         d_nv_preserves_uv="$undef" ;;
10543 *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
10544         d_nv_preserves_uv_bits="$undef" ;;
10545 esac
10546
10547 $rm -f try.* try
10548
10549
10550 : check for off64_t
10551 echo " "
10552 echo "Checking to see if you have off64_t..." >&4
10553 $cat >try.c <<EOCP
10554 #include <sys/types.h>
10555 #include <unistd.h>
10556 int main() { off64_t x = 7; }
10557 EOCP
10558 set try
10559 if eval $compile; then
10560         val="$define"
10561         echo "You have off64_t."
10562 else
10563         val="$undef"
10564         echo "You do not have off64_t."
10565         case "$lseeksize" in
10566         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
10567         esac
10568 fi
10569 $rm -f try.* try
10570 set d_off64_t
10571 eval $setvar
10572
10573 : see if POSIX threads are available
10574 set pthread.h i_pthread
10575 eval $inhdr
10576
10577
10578
10579
10580 : how to create joinable pthreads
10581 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
10582         echo " "
10583         echo "Checking what constant to use for creating joinable pthreads..." >&4 
10584         $cat >try.c <<'EOCP'
10585 #include <pthread.h>
10586 int main() {
10587     int detachstate = JOINABLE;
10588 }
10589 EOCP
10590         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
10591         if eval $compile; then
10592                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
10593                 val="$undef" # Yes, undef.
10594                 set d_old_pthread_create_joinable
10595                 eval $setvar
10596                 val=""
10597                 set old_pthread_create_joinable
10598                 eval $setvar
10599         else
10600                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
10601                 if eval $compile; then
10602                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
10603                         val="$define"
10604                         set d_old_pthread_create_joinable
10605                         eval $setvar
10606                         val=PTHREAD_CREATE_UNDETACHED
10607                         set old_pthread_create_joinable
10608                         eval $setvar
10609                 else            
10610                         set try -DJOINABLE=__UNDETACHED
10611                         if eval $compile; then
10612                                 echo "You seem to use __UNDETACHED." >&4
10613                                 val="$define"
10614                                 set d_old_pthread_create_joinable
10615                                 eval $setvar
10616                                 val=__UNDETACHED
10617                                 set old_pthread_create_joinable
10618                                 eval $setvar
10619                         else
10620                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
10621                                 val="$define"
10622                                 set d_old_pthread_create_joinable
10623                                 eval $setvar
10624                                 val=0
10625                                 set old_pthread_create_joinable
10626                                 eval $setvar
10627                         fi
10628                 fi
10629         fi
10630         $rm -f try try.*
10631 else
10632     d_old_pthread_create_joinable="$undef"
10633     old_pthread_create_joinable=""
10634 fi
10635
10636 : see if pause exists
10637 set pause d_pause
10638 eval $inlibc
10639
10640 : see if pipe exists
10641 set pipe d_pipe
10642 eval $inlibc
10643
10644 : see if poll exists
10645 set poll d_poll
10646 eval $inlibc
10647
10648
10649 : see whether the various POSIXish _yields exist
10650 $cat >try.c <<EOP
10651 #include <pthread.h>
10652 #include <stdio.h>
10653 int main() {
10654 #ifdef SCHED_YIELD
10655         sched_yield();
10656 #else
10657 #ifdef PTHREAD_YIELD
10658         pthread_yield();
10659 #else
10660 #ifdef PTHREAD_YIELD_NULL
10661         pthread_yield(NULL);
10662 #endif
10663 #endif
10664 #endif
10665 }
10666 EOP
10667 : see if sched_yield exists
10668 set try -DSCHED_YIELD
10669 if eval $compile; then
10670     val="$define"
10671     sched_yield='sched_yield()'
10672 else
10673     val="$undef"
10674 fi
10675 case "$usethreads" in
10676 $define)
10677         case "$val" in
10678         $define) echo 'sched_yield() found.' >&4        ;;
10679         *)       echo 'sched_yield() NOT found.' >&4    ;;
10680         esac
10681 esac
10682 set d_sched_yield
10683 eval $setvar
10684
10685 : see if pthread_yield exists
10686 set try -DPTHREAD_YIELD
10687 if eval $compile; then
10688     val="$define"
10689     case "$sched_yield" in
10690     '') sched_yield='pthread_yield()' ;;
10691     esac
10692 else
10693     set try -DPTHREAD_YIELD_NULL
10694     if eval $compile; then
10695         val="$define"
10696         case "$sched_yield" in
10697         '') sched_yield='pthread_yield(NULL)' ;;
10698         esac
10699     else
10700         val="$undef"
10701     fi
10702 fi
10703 case "$usethreads" in
10704 $define)
10705         case "$val" in
10706         $define) echo 'pthread_yield() found.' >&4      ;;
10707         *)       echo 'pthread_yield() NOT found.' >&4  ;;
10708         esac
10709         ;;
10710 esac
10711 set d_pthread_yield
10712 eval $setvar
10713
10714 case "$sched_yield" in
10715 '') sched_yield=undef ;;
10716 esac
10717
10718 $rm -f try try.*
10719
10720 : see if this is a pwd.h system
10721 set pwd.h i_pwd
10722 eval $inhdr
10723
10724 case "$i_pwd" in
10725 $define)
10726         xxx=`./findhdr pwd.h`
10727         $cppstdin $cppflags $cppminus < $xxx >$$.h
10728
10729         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
10730                 val="$define"
10731         else
10732                 val="$undef"
10733         fi
10734         set d_pwquota
10735         eval $setvar
10736
10737         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
10738                 val="$define"
10739         else
10740                 val="$undef"
10741         fi
10742         set d_pwage
10743         eval $setvar
10744
10745         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
10746                 val="$define"
10747         else
10748                 val="$undef"
10749         fi
10750         set d_pwchange
10751         eval $setvar
10752
10753         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
10754                 val="$define"
10755         else
10756                 val="$undef"
10757         fi
10758         set d_pwclass
10759         eval $setvar
10760
10761         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
10762                 val="$define"
10763         else
10764                 val="$undef"
10765         fi
10766         set d_pwexpire
10767         eval $setvar
10768
10769         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
10770                 val="$define"
10771         else
10772                 val="$undef"
10773         fi
10774         set d_pwcomment
10775         eval $setvar
10776
10777         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
10778                 val="$define"
10779         else
10780                 val="$undef"
10781         fi
10782         set d_pwgecos
10783         eval $setvar
10784
10785         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
10786                 val="$define"
10787         else
10788                 val="$undef"
10789         fi
10790         set d_pwpasswd
10791         eval $setvar
10792
10793         $rm -f $$.h
10794         ;;
10795 *)
10796         val="$undef"; 
10797         set d_pwquota; eval $setvar
10798         set d_pwage; eval $setvar
10799         set d_pwchange; eval $setvar
10800         set d_pwclass; eval $setvar
10801         set d_pwexpire; eval $setvar
10802         set d_pwcomment; eval $setvar
10803         set d_pwgecos; eval $setvar
10804         set d_pwpasswd; eval $setvar
10805         ;;
10806 esac
10807
10808 : see if readdir and friends exist
10809 set readdir d_readdir
10810 eval $inlibc
10811 set seekdir d_seekdir
10812 eval $inlibc
10813 set telldir d_telldir
10814 eval $inlibc
10815 set rewinddir d_rewinddir
10816 eval $inlibc
10817
10818 : see if readlink exists
10819 set readlink d_readlink
10820 eval $inlibc
10821
10822 : see if rename exists
10823 set rename d_rename
10824 eval $inlibc
10825
10826 : see if rmdir exists
10827 set rmdir d_rmdir
10828 eval $inlibc
10829
10830 : see if memory.h is available.
10831 val=''
10832 set memory.h val
10833 eval $inhdr
10834
10835 : See if it conflicts with string.h
10836 case "$val" in
10837 $define)
10838         case "$strings" in
10839         '') ;;
10840         *)
10841                 $cppstdin $cppflags $cppminus < $strings > mem.h
10842                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
10843                         echo " "
10844                         echo "We won't be including <memory.h>."
10845                         val="$undef"
10846                 fi
10847                 $rm -f mem.h
10848                 ;;
10849         esac
10850 esac
10851 set i_memory
10852 eval $setvar
10853
10854 : can bcopy handle overlapping blocks?
10855 val="$undef"
10856 case "$d_bcopy" in
10857 "$define")
10858         echo " "
10859         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
10860         $cat >try.c <<EOCP
10861 #$i_memory I_MEMORY
10862 #$i_stdlib I_STDLIB
10863 #$i_string I_STRING
10864 #$i_unistd I_UNISTD
10865 EOCP
10866         $cat >>try.c <<'EOCP'
10867 #include <stdio.h>
10868 #ifdef I_MEMORY
10869 #  include <memory.h>
10870 #endif
10871 #ifdef I_STDLIB
10872 #  include <stdlib.h>
10873 #endif
10874 #ifdef I_STRING
10875 #  include <string.h>
10876 #else
10877 #  include <strings.h>
10878 #endif
10879 #ifdef I_UNISTD
10880 #  include <unistd.h>  /* Needed for NetBSD */
10881 #endif
10882 int main()
10883 {
10884 char buf[128], abc[128];
10885 char *b;
10886 int len;
10887 int off;
10888 int align;
10889
10890 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
10891
10892 for (align = 7; align >= 0; align--) {
10893         for (len = 36; len; len--) {
10894                 b = buf+align;
10895                 bcopy(abc, b, len);
10896                 for (off = 1; off <= len; off++) {
10897                         bcopy(b, b+off, len);
10898                         bcopy(b+off, b, len);
10899                         if (bcmp(b, abc, len))
10900                                 exit(1);
10901                 }
10902         }
10903 }
10904 exit(0);
10905 }
10906 EOCP
10907         set try
10908         if eval $compile_ok; then
10909                 if ./try 2>/dev/null; then
10910                         echo "Yes, it can."
10911                         val="$define"
10912                 else
10913                         echo "It can't, sorry."
10914                         case "$d_memmove" in
10915                         "$define") echo "But that's Ok since you have memmove()." ;;
10916                         esac
10917                 fi
10918         else
10919                 echo "(I can't compile the test program, so we'll assume not...)"
10920                 case "$d_memmove" in
10921                 "$define") echo "But that's Ok since you have memmove()." ;;
10922                 esac
10923         fi
10924         ;;
10925 esac
10926 $rm -f try.* try core
10927 set d_safebcpy
10928 eval $setvar
10929
10930 : can memcpy handle overlapping blocks?
10931 val="$undef"
10932 case "$d_memcpy" in
10933 "$define")
10934         echo " "
10935         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
10936         $cat >try.c <<EOCP
10937 #$i_memory I_MEMORY
10938 #$i_stdlib I_STDLIB
10939 #$i_string I_STRING
10940 #$i_unistd I_UNISTD
10941 EOCP
10942         $cat >>try.c <<'EOCP'
10943 #include <stdio.h>
10944 #ifdef I_MEMORY
10945 #  include <memory.h>
10946 #endif
10947 #ifdef I_STDLIB
10948 #  include <stdlib.h>
10949 #endif
10950 #ifdef I_STRING
10951 #  include <string.h>
10952 #else
10953 #  include <strings.h>
10954 #endif
10955 #ifdef I_UNISTD
10956 #  include <unistd.h>  /* Needed for NetBSD */
10957 #endif
10958 int main()
10959 {
10960 char buf[128], abc[128];
10961 char *b;
10962 int len;
10963 int off;
10964 int align;
10965
10966 /* Copy "abcde..." string to char abc[] so that gcc doesn't
10967    try to store the string in read-only memory. */
10968 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
10969
10970 for (align = 7; align >= 0; align--) {
10971         for (len = 36; len; len--) {
10972                 b = buf+align;
10973                 memcpy(b, abc, len);
10974                 for (off = 1; off <= len; off++) {
10975                         memcpy(b+off, b, len);
10976                         memcpy(b, b+off, len);
10977                         if (memcmp(b, abc, len))
10978                                 exit(1);
10979                 }
10980         }
10981 }
10982 exit(0);
10983 }
10984 EOCP
10985         set try
10986         if eval $compile_ok; then
10987                 if ./try 2>/dev/null; then
10988                         echo "Yes, it can."
10989                         val="$define"
10990                 else
10991                         echo "It can't, sorry."
10992                         case "$d_memmove" in
10993                         "$define") echo "But that's Ok since you have memmove()." ;;
10994                         esac
10995                 fi
10996         else
10997                 echo "(I can't compile the test program, so we'll assume not...)"
10998                 case "$d_memmove" in
10999                 "$define") echo "But that's Ok since you have memmove()." ;;
11000                 esac
11001         fi
11002         ;;
11003 esac
11004 $rm -f try.* try core
11005 set d_safemcpy
11006 eval $setvar
11007
11008 : can memcmp be trusted to compare relative magnitude?
11009 val="$undef"
11010 case "$d_memcmp" in
11011 "$define")
11012         echo " "
11013         echo "Checking if your memcmp() can compare relative magnitude..." >&4
11014         $cat >try.c <<EOCP
11015 #$i_memory I_MEMORY
11016 #$i_stdlib I_STDLIB
11017 #$i_string I_STRING
11018 #$i_unistd I_UNISTD
11019 EOCP
11020         $cat >>try.c <<'EOCP'
11021 #include <stdio.h>
11022 #ifdef I_MEMORY
11023 #  include <memory.h>
11024 #endif
11025 #ifdef I_STDLIB
11026 #  include <stdlib.h>
11027 #endif
11028 #ifdef I_STRING
11029 #  include <string.h>
11030 #else
11031 #  include <strings.h>
11032 #endif
11033 #ifdef I_UNISTD
11034 #  include <unistd.h>  /* Needed for NetBSD */
11035 #endif
11036 int main()
11037 {
11038 char a = -1;
11039 char b = 0;
11040 if ((a < b) && memcmp(&a, &b, 1) < 0)
11041         exit(1);
11042 exit(0);
11043 }
11044 EOCP
11045         set try
11046         if eval $compile_ok; then
11047                 if ./try 2>/dev/null; then
11048                         echo "Yes, it can."
11049                         val="$define"
11050                 else
11051                         echo "No, it can't (it uses signed chars)."
11052                 fi
11053         else
11054                 echo "(I can't compile the test program, so we'll assume not...)"
11055         fi
11056         ;;
11057 esac
11058 $rm -f try.* try core
11059 set d_sanemcmp
11060 eval $setvar
11061
11062 : see if prototype for sbrk is available
11063 echo " "
11064 set d_sbrkproto sbrk $i_unistd unistd.h
11065 eval $hasproto
11066
11067 : see if select exists
11068 set select d_select
11069 eval $inlibc
11070
11071 : see if semctl exists
11072 set semctl d_semctl
11073 eval $inlibc
11074
11075 : see if semget exists
11076 set semget d_semget
11077 eval $inlibc
11078
11079 : see if semop exists
11080 set semop d_semop
11081 eval $inlibc
11082
11083 : see how much of the 'sem*(2)' library is present.
11084 h_sem=true
11085 echo " "
11086 case "$d_semctl$d_semget$d_semop" in
11087 *"$undef"*) h_sem=false;;
11088 esac
11089 case "$osname" in
11090 freebsd)
11091     case "`ipcs 2>&1`" in
11092     "SVID messages"*"not configured"*)
11093         echo "Your $osname does not have the sem*(2) configured." >&4
11094         h_sem=false
11095         val="$undef"
11096         set semctl d_semctl
11097         eval $setvar
11098         set semget d_semget
11099         eval $setvar
11100         set semop d_semop
11101         eval $setvar
11102         ;;
11103     esac
11104     ;;
11105 esac
11106 : we could also check for sys/ipc.h ...
11107 if $h_sem && $test `./findhdr sys/sem.h`; then
11108         echo "You have the full sem*(2) library." >&4
11109         val="$define"
11110 else
11111         echo "You don't have the full sem*(2) library." >&4
11112         val="$undef"
11113 fi
11114 set d_sem
11115 eval $setvar
11116
11117 : see whether sys/sem.h defines union semun
11118 echo " "
11119 $cat > try.c <<'END'
11120 #include <sys/types.h>
11121 #include <sys/ipc.h>
11122 #include <sys/sem.h>
11123 int main () { union semun semun; semun.buf = 0; }
11124 END
11125 set try
11126 if eval $compile; then
11127     echo "You have union semun in <sys/sem.h>." >&4
11128     val="$define"
11129 else
11130     echo "You do not have union semun in <sys/sem.h>." >&4
11131     val="$undef"
11132 fi
11133 $rm -f try try.c try.h
11134 set d_union_semun
11135 eval $setvar
11136
11137 : see how to do semctl IPC_STAT
11138 case "$d_sem" in
11139 $define)
11140     : see whether semctl IPC_STAT can use union semun
11141     echo " "
11142     $cat > try.h <<END
11143 #ifndef S_IRUSR
11144 #   ifdef S_IREAD
11145 #       define S_IRUSR S_IREAD
11146 #       define S_IWUSR S_IWRITE
11147 #       define S_IXUSR S_IEXEC
11148 #   else
11149 #       define S_IRUSR 0400
11150 #       define S_IWUSR 0200
11151 #       define S_IXUSR 0100
11152 #   endif
11153 #   define S_IRGRP (S_IRUSR>>3)
11154 #   define S_IWGRP (S_IWUSR>>3)
11155 #   define S_IXGRP (S_IXUSR>>3)
11156 #   define S_IROTH (S_IRUSR>>6)
11157 #   define S_IWOTH (S_IWUSR>>6)
11158 #   define S_IXOTH (S_IXUSR>>6)
11159 #endif
11160 #ifndef S_IRWXU
11161 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
11162 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
11163 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
11164 #endif
11165 END
11166
11167     $cat > try.c <<END
11168 #include <sys/types.h>
11169 #include <sys/ipc.h>
11170 #include <sys/sem.h>
11171 #include <sys/stat.h>
11172 #include <stdio.h>
11173 #include <errno.h>
11174 #include "try.h"
11175 #ifndef errno
11176 extern int errno;
11177 #endif
11178 #$d_union_semun HAS_UNION_SEMUN
11179 int main() {
11180     union semun
11181 #ifndef HAS_UNION_SEMUN
11182     {
11183         int val;
11184         struct semid_ds *buf;
11185         unsigned short *array;
11186     }
11187 #endif
11188     arg;
11189     int sem, st;
11190
11191 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
11192     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11193     if (sem > -1) {
11194         struct semid_ds argbuf;
11195         arg.buf = &argbuf;
11196 #       ifdef IPC_STAT
11197         st = semctl(sem, 0, IPC_STAT, arg);
11198         if (st == 0)
11199             printf("semun\n");
11200         else
11201 #       endif /* IPC_STAT */
11202             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11203 #       ifdef IPC_RMID
11204         if (semctl(sem, 0, IPC_RMID, arg) != 0)
11205 #       endif /* IPC_RMID */
11206             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11207     } else
11208 #endif /* IPC_PRIVATE && ... */
11209         printf("semget failed: errno = %d\n", errno);
11210   return 0;
11211 }
11212 END
11213     val="$undef"
11214     set try
11215     if eval $compile; then
11216         xxx=`./try`
11217         case "$xxx" in
11218         semun) val="$define" ;;
11219         esac
11220     fi
11221     $rm -f try try.c
11222     set d_semctl_semun
11223     eval $setvar
11224     case "$d_semctl_semun" in
11225     $define)
11226         echo "You can use union semun for semctl IPC_STAT." >&4
11227         also='also'
11228         ;;
11229     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
11230         also=''
11231         ;;
11232     esac
11233
11234     : see whether semctl IPC_STAT can use struct semid_ds pointer
11235     $cat > try.c <<'END'
11236 #include <sys/types.h>
11237 #include <sys/ipc.h>
11238 #include <sys/sem.h>
11239 #include <sys/stat.h>
11240 #include "try.h"
11241 #include <stdio.h>
11242 #include <errno.h>
11243 #ifndef errno
11244 extern int errno;
11245 #endif
11246 int main() {
11247     struct semid_ds arg;
11248     int sem, st;
11249
11250 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
11251     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11252     if (sem > -1) {
11253 #       ifdef IPC_STAT
11254         st = semctl(sem, 0, IPC_STAT, &arg);
11255         if (st == 0)
11256             printf("semid_ds\n");
11257         else
11258 #       endif /* IPC_STAT */
11259             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11260 #       ifdef IPC_RMID
11261         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
11262 #       endif /* IPC_RMID */
11263             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11264     } else
11265 #endif /* IPC_PRIVATE && ... */
11266         printf("semget failed: errno = %d\n", errno);
11267
11268     return 0;
11269 }
11270 END
11271     val="$undef"
11272     set try
11273     if eval $compile; then
11274         xxx=`./try`
11275         case "$xxx" in
11276         semid_ds) val="$define" ;;
11277         esac
11278     fi
11279     $rm -f try try.c
11280     set d_semctl_semid_ds
11281     eval $setvar
11282     case "$d_semctl_semid_ds" in
11283     $define)
11284         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
11285         ;;
11286     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
11287         ;;
11288     esac
11289     $rm -f try.h
11290     ;;
11291 *)  val="$undef"
11292
11293     # We do not have the full sem*(2) library, so assume we can not
11294     # use either.
11295
11296     set d_semctl_semun
11297     eval $setvar
11298
11299     set d_semctl_semid_ds
11300     eval $setvar
11301     ;;
11302 esac
11303
11304 : see if setegid exists
11305 set setegid d_setegid
11306 eval $inlibc
11307
11308 : see if seteuid exists
11309 set seteuid d_seteuid
11310 eval $inlibc
11311
11312 : see if setgrent exists
11313 set setgrent d_setgrent
11314 eval $inlibc
11315
11316 : see if sethostent exists
11317 set sethostent d_sethent
11318 eval $inlibc
11319
11320 : see if setlinebuf exists
11321 set setlinebuf d_setlinebuf
11322 eval $inlibc
11323
11324 : see if setlocale exists
11325 set setlocale d_setlocale
11326 eval $inlibc
11327
11328 : see if setnetent exists
11329 set setnetent d_setnent
11330 eval $inlibc
11331
11332 : see if setprotoent exists
11333 set setprotoent d_setpent
11334 eval $inlibc
11335
11336 : see if setpgid exists
11337 set setpgid d_setpgid
11338 eval $inlibc
11339
11340 : see if setpgrp2 exists
11341 set setpgrp2 d_setpgrp2
11342 eval $inlibc
11343
11344 : see if setpriority exists
11345 set setpriority d_setprior
11346 eval $inlibc
11347
11348 : see if setproctitle exists
11349 set setproctitle d_setproctitle
11350 eval $inlibc
11351
11352 : see if setpwent exists
11353 set setpwent d_setpwent
11354 eval $inlibc
11355
11356 : see if setregid exists
11357 set setregid d_setregid
11358 eval $inlibc
11359 set setresgid d_setresgid
11360 eval $inlibc
11361
11362 : see if setreuid exists
11363 set setreuid d_setreuid
11364 eval $inlibc
11365 set setresuid d_setresuid
11366 eval $inlibc
11367
11368 : see if setrgid exists
11369 set setrgid d_setrgid
11370 eval $inlibc
11371
11372 : see if setruid exists
11373 set setruid d_setruid
11374 eval $inlibc
11375
11376 : see if setservent exists
11377 set setservent d_setsent
11378 eval $inlibc
11379
11380 : see if setsid exists
11381 set setsid d_setsid
11382 eval $inlibc
11383
11384 : see if setvbuf exists
11385 set setvbuf d_setvbuf
11386 eval $inlibc
11387
11388 : see if sfio.h is available
11389 set sfio.h i_sfio
11390 eval $inhdr
11391
11392
11393 : see if sfio library is available
11394 case "$i_sfio" in
11395 $define)
11396         val=''
11397         set sfreserve val
11398         eval $inlibc
11399         ;;
11400 *)
11401         val="$undef"
11402         ;;
11403 esac
11404 : Ok, but do we want to use it.
11405 case "$val" in
11406 $define)
11407         case "$usesfio" in
11408         true|$define|[yY]*) dflt='y';;
11409         *) dflt='n';;
11410         esac
11411         echo "$package can use the sfio library, but it is experimental."
11412         case "$useperlio" in
11413         "$undef")
11414             echo "For sfio also the PerlIO abstraction layer is needed."
11415             echo "Earlier you said you wouldn't want that."
11416             ;;
11417         esac
11418         rp="You seem to have sfio available, do you want to try using it?"
11419         . ./myread
11420         case "$ans" in
11421         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
11422                 useperlio="$define"
11423                 val="$define"
11424                 ;;
11425         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
11426                 val="$undef"
11427                 ;;
11428         esac
11429         ;;
11430 *)      case "$usesfio" in
11431         true|$define|[yY]*)
11432                 echo "Sorry, cannot find sfio on this machine." >&4
11433                 echo "Ignoring your setting of usesfio=$usesfio." >&4
11434                 val="$undef"
11435                 ;;
11436         esac
11437         ;;
11438 esac
11439 set d_sfio
11440 eval $setvar
11441 case "$d_sfio" in
11442 $define) usesfio='true';;
11443 *) usesfio='false';;
11444 esac
11445 case "$d_sfio" in
11446 $define) ;;
11447 *)      : Remove sfio from list of libraries to use
11448         set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
11449         shift
11450         libs="$*"
11451         echo "libs = $libs" >&4
11452 ;;
11453 esac
11454
11455
11456 : see if shmctl exists
11457 set shmctl d_shmctl
11458 eval $inlibc
11459
11460 : see if shmget exists
11461 set shmget d_shmget
11462 eval $inlibc
11463
11464 : see if shmat exists
11465 set shmat d_shmat
11466 eval $inlibc
11467 : see what shmat returns
11468 case "$d_shmat" in
11469 "$define")
11470         $cat >shmat.c <<'END'
11471 #include <sys/shm.h>
11472 void *shmat();
11473 END
11474         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
11475                 shmattype='void *'
11476         else
11477                 shmattype='char *'
11478         fi
11479         echo "and it returns ($shmattype)." >&4
11480         : see if a prototype for shmat is available
11481         xxx=`./findhdr sys/shm.h`
11482         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
11483         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
11484                 val="$define"
11485         else
11486                 val="$undef"
11487         fi
11488         $rm -f shmat.[co]
11489         ;;
11490 *)
11491         val="$undef"
11492         ;;
11493 esac
11494 set d_shmatprototype
11495 eval $setvar
11496
11497 : see if shmdt exists
11498 set shmdt d_shmdt
11499 eval $inlibc
11500
11501 : see how much of the 'shm*(2)' library is present.
11502 h_shm=true
11503 echo " "
11504 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
11505 *"$undef"*) h_shm=false;;
11506 esac
11507 case "$osname" in
11508 freebsd)
11509     case "`ipcs 2>&1`" in
11510     "SVID shared memory"*"not configured"*)
11511         echo "Your $osname does not have the shm*(2) configured." >&4
11512         h_shm=false
11513         val="$undef"
11514         set shmctl d_shmctl
11515         evat $setvar
11516         set shmget d_shmget
11517         evat $setvar
11518         set shmat d_shmat
11519         evat $setvar
11520         set shmdt d_shmdt
11521         evat $setvar
11522         ;;
11523     esac
11524     ;;
11525 esac
11526 : we could also check for sys/ipc.h ...
11527 if $h_shm && $test `./findhdr sys/shm.h`; then
11528         echo "You have the full shm*(2) library." >&4
11529         val="$define"
11530 else
11531         echo "You don't have the full shm*(2) library." >&4
11532         val="$undef"
11533 fi
11534 set d_shm
11535 eval $setvar
11536
11537 echo " "
11538 : see if we have sigaction
11539 if set sigaction val -f d_sigaction; eval $csym; $val; then
11540         echo 'sigaction() found.' >&4
11541         $cat > try.c <<'EOP'
11542 #include <stdio.h>
11543 #include <sys/types.h>
11544 #include <signal.h>
11545 int main()
11546 {
11547     struct sigaction act, oact;
11548     act.sa_flags = 0;
11549     oact.sa_handler = 0;
11550     /* so that act and oact are used */
11551     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
11552 }
11553 EOP
11554         set try
11555         if eval $compile_ok; then
11556                 val="$define"
11557         else
11558                 echo "But you don't seem to have a useable struct sigaction." >&4
11559                 val="$undef"
11560         fi
11561 else
11562         echo 'sigaction NOT found.' >&4
11563         val="$undef"
11564 fi
11565 set d_sigaction; eval $setvar
11566 $rm -f try try$_o try.c
11567
11568 : see if sigprocmask exists
11569 set sigprocmask d_sigprocmask
11570 eval $inlibc
11571
11572 : see if sigsetjmp exists
11573 echo " "
11574 case "$d_sigsetjmp" in
11575 '')
11576         $cat >try.c <<'EOP'
11577 #include <setjmp.h>
11578 sigjmp_buf env;
11579 int set = 1;
11580 int main()
11581 {
11582         if (sigsetjmp(env,1))
11583                 exit(set);
11584         set = 0;
11585         siglongjmp(env, 1);
11586         exit(1);
11587 }
11588 EOP
11589         set try
11590         if eval $compile; then
11591                 if ./try >/dev/null 2>&1; then
11592                         echo "POSIX sigsetjmp found." >&4
11593                         val="$define"
11594                 else
11595                         $cat >&4 <<EOM
11596 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
11597 I'll ignore them.
11598 EOM
11599                         val="$undef"
11600                 fi
11601         else
11602                 echo "sigsetjmp not found." >&4
11603                 val="$undef"
11604         fi
11605         ;;
11606 *) val="$d_sigsetjmp"
11607         case "$d_sigsetjmp" in
11608         $define) echo "POSIX sigsetjmp found." >&4;;
11609         $undef) echo "sigsetjmp not found." >&4;;
11610         esac
11611         ;;
11612 esac
11613 set d_sigsetjmp
11614 eval $setvar
11615 $rm -f try.c try
11616
11617 : see if socks5_init exists
11618 set socks5_init d_socks5_init
11619 eval $inlibc
11620
11621 : see if sys/stat.h is available
11622 set sys/stat.h i_sysstat
11623 eval $inhdr
11624
11625
11626 : see if stat knows about block sizes
11627 echo " "
11628 echo "Checking to see if your struct stat has st_blocks field..." >&4
11629 set d_statblks stat st_blocks $i_sysstat sys/stat.h
11630 eval $hasfield
11631
11632
11633 : see if this is a sys/vfs.h system
11634 set sys/vfs.h i_sysvfs
11635 eval $inhdr
11636
11637
11638 : see if this is a sys/statfs.h system
11639 set sys/statfs.h i_sysstatfs
11640 eval $inhdr
11641
11642
11643 echo " "
11644 echo "Checking to see if your system supports struct statfs..." >&4
11645 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
11646 eval $hasstruct
11647 case "$d_statfs_s" in
11648 "$define")      echo "Yes, it does."   ;;
11649 *)              echo "No, it doesn't." ;;
11650 esac
11651
11652
11653
11654 : see if struct statfs knows about f_flags
11655 case "$d_statfs_s" in
11656 define) 
11657         echo " "
11658         echo "Checking to see if your struct statfs has f_flags field..." >&4
11659         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
11660         eval $hasfield
11661         ;;
11662 *)      val="$undef"
11663         set d_statfs_f_flags
11664         eval $setvar
11665         ;;
11666 esac
11667 case "$d_statfs_f_flags" in
11668 "$define")      echo "Yes, it does."   ;;
11669 *)              echo "No, it doesn't." ;;
11670 esac
11671
11672 : see if _ptr and _cnt from stdio act std
11673 echo " "
11674
11675 if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
11676         echo "(Looks like you have stdio.h from BSD.)"
11677         case "$stdio_ptr" in
11678         '') stdio_ptr='((fp)->_p)'
11679                 ptr_lval=$define
11680                 ;;
11681         *)      ptr_lval=$d_stdio_ptr_lval;;
11682         esac
11683         case "$stdio_cnt" in
11684         '') stdio_cnt='((fp)->_r)'
11685                 cnt_lval=$define
11686                 ;;
11687         *)      cnt_lval=$d_stdio_cnt_lval;;
11688         esac
11689         case "$stdio_base" in
11690         '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
11691         esac
11692         case "$stdio_bufsiz" in
11693         '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
11694         esac
11695 elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
11696         echo "(Looks like you have stdio.h from Linux.)"
11697         case "$stdio_ptr" in
11698         '') stdio_ptr='((fp)->_IO_read_ptr)'
11699                 ptr_lval=$define
11700                 ;;
11701         *)      ptr_lval=$d_stdio_ptr_lval;;
11702         esac
11703         case "$stdio_cnt" in
11704         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
11705                 cnt_lval=$undef
11706                 ;;
11707         *)      cnt_lval=$d_stdio_cnt_lval;;
11708         esac
11709         case "$stdio_base" in
11710         '') stdio_base='((fp)->_IO_read_base)';;
11711         esac
11712         case "$stdio_bufsiz" in
11713         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
11714         esac
11715 else
11716         case "$stdio_ptr" in
11717         '') stdio_ptr='((fp)->_ptr)'
11718                 ptr_lval=$define
11719                 ;;
11720         *)      ptr_lval=$d_stdio_ptr_lval;;
11721         esac
11722         case "$stdio_cnt" in
11723         '') stdio_cnt='((fp)->_cnt)'
11724                 cnt_lval=$define
11725                 ;;
11726         *)      cnt_lval=$d_stdio_cnt_lval;;
11727         esac
11728         case "$stdio_base" in
11729         '') stdio_base='((fp)->_base)';;
11730         esac
11731         case "$stdio_bufsiz" in
11732         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
11733         esac
11734 fi
11735
11736 : test whether _ptr and _cnt really work
11737 echo "Checking how std your stdio is..." >&4
11738 $cat >try.c <<EOP
11739 #include <stdio.h>
11740 #define FILE_ptr(fp)    $stdio_ptr
11741 #define FILE_cnt(fp)    $stdio_cnt
11742 int main() {
11743         FILE *fp = fopen("try.c", "r");
11744         char c = getc(fp);
11745         if (
11746                 18 <= FILE_cnt(fp) &&
11747                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
11748         )
11749                 exit(0);
11750         exit(1);
11751 }
11752 EOP
11753 val="$undef"
11754 set try
11755 if eval $compile; then
11756         if ./try; then
11757                 echo "Your stdio acts pretty std."
11758                 val="$define"
11759         else
11760                 echo "Your stdio isn't very std."
11761         fi
11762 else
11763         echo "Your stdio doesn't appear very std."
11764 fi
11765 $rm -f try.c try
11766 set d_stdstdio
11767 eval $setvar
11768
11769 : Can _ptr be used as an lvalue?
11770 case "$d_stdstdio$ptr_lval" in
11771 $define$define) val=$define ;;
11772 *) val=$undef ;;
11773 esac
11774 set d_stdio_ptr_lval
11775 eval $setvar
11776
11777 : Can _cnt be used as an lvalue?
11778 case "$d_stdstdio$cnt_lval" in
11779 $define$define) val=$define ;;
11780 *) val=$undef ;;
11781 esac
11782 set d_stdio_cnt_lval
11783 eval $setvar
11784
11785
11786 : test whether setting _ptr sets _cnt as a side effect
11787 d_stdio_ptr_lval_sets_cnt="$undef"
11788 d_stdio_ptr_lval_nochange_cnt="$undef"
11789 case "$d_stdio_ptr_lval$d_stdstdio" in
11790 $define$define)
11791         echo "Checking to see what happens if we set the stdio ptr..." >&4
11792 $cat >try.c <<EOP
11793 #include <stdio.h>
11794 /* Can we scream? */
11795 /* Eat dust sed :-) */
11796 /* In the buffer space, no one can hear you scream. */
11797 #define FILE_ptr(fp)    $stdio_ptr
11798 #define FILE_cnt(fp)    $stdio_cnt
11799 #include <sys/types.h>
11800 int main() {
11801         FILE *fp = fopen("try.c", "r");
11802         int c;
11803         char *ptr;
11804         size_t cnt;
11805         if (!fp) {
11806             puts("Fail even to read");
11807             exit(1);
11808         }
11809         c = getc(fp); /* Read away the first # */
11810         if (c == EOF) {
11811             puts("Fail even to read");
11812             exit(1);
11813         }
11814         if (!(
11815                 18 <= FILE_cnt(fp) &&
11816                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
11817         )) {
11818                 puts("Fail even to read");
11819                 exit (1);
11820         }
11821         ptr = (char*) FILE_ptr(fp);
11822         cnt = (size_t)FILE_cnt(fp);
11823
11824         FILE_ptr(fp) += 42;
11825
11826         if ((char*)FILE_ptr(fp) != (ptr + 42)) {
11827                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
11828                 exit (1);
11829         }
11830         if (FILE_cnt(fp) <= 20) {
11831                 printf ("Fail (<20 chars to test)");
11832                 exit (1);
11833         }
11834         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
11835                 puts("Fail compare");
11836                 exit (1);
11837         }
11838         if (cnt == FILE_cnt(fp)) {
11839                 puts("Pass_unchanged");
11840                 exit (0);
11841         }       
11842         if (FILE_cnt(fp) == (cnt - 42)) {
11843                 puts("Pass_changed");
11844                 exit (0);
11845         }
11846         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
11847         return 1;
11848
11849 }
11850 EOP
11851         set try
11852         if eval $compile; then
11853                 case `./try$exe_ext` in
11854                 Pass_changed)
11855                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
11856                         d_stdio_ptr_lval_sets_cnt="$define" ;;
11857                 Pass_unchanged)
11858                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
11859                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
11860                 Fail*)
11861                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
11862                 *)
11863                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
11864         esac
11865         else
11866                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
11867         fi
11868         $rm -f try.c try
11869         ;;
11870 esac
11871
11872 : see if _base is also standard
11873 val="$undef"
11874 case "$d_stdstdio" in
11875 $define)
11876         $cat >try.c <<EOP
11877 #include <stdio.h>
11878 #define FILE_base(fp)   $stdio_base
11879 #define FILE_bufsiz(fp) $stdio_bufsiz
11880 int main() {
11881         FILE *fp = fopen("try.c", "r");
11882         char c = getc(fp);
11883         if (
11884                 19 <= FILE_bufsiz(fp) &&
11885                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
11886         )
11887                 exit(0);
11888         exit(1);
11889 }
11890 EOP
11891         set try
11892         if eval $compile; then
11893                 if ./try; then
11894                         echo "And its _base field acts std."
11895                         val="$define"
11896                 else
11897                         echo "But its _base field isn't std."
11898                 fi
11899         else
11900                 echo "However, it seems to be lacking the _base field."
11901         fi
11902         $rm -f try.c try
11903         ;;
11904 esac
11905 set d_stdiobase
11906 eval $setvar
11907
11908 $cat >&4 <<EOM
11909 Checking how to access stdio streams by file descriptor number...
11910 EOM
11911 case "$stdio_stream_array" in
11912 '')     $cat >try.c <<EOCP
11913 #include <stdio.h>
11914 int main() {
11915   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
11916     printf("yes\n");
11917 }
11918 EOCP
11919         for s in _iob __iob __sF
11920         do
11921                 set try -DSTDIO_STREAM_ARRAY=$s
11922                 if eval $compile; then
11923                         case "`./try$exe_ext`" in
11924                         yes)    stdio_stream_array=$s; break ;;
11925                         esac
11926                 fi
11927         done
11928         $rm -f try.* try$exe_ext
11929 esac
11930 case "$stdio_stream_array" in
11931 '')     $cat >&4 <<EOM
11932 I can't figure out how to access stdio streams by file descriptor number.
11933 EOM
11934         d_stdio_stream_array="$undef"
11935         ;;
11936 *)      $cat >&4 <<EOM
11937 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
11938 EOM
11939         d_stdio_stream_array="$define"
11940         ;;
11941 esac
11942
11943 : see if strcoll exists
11944 set strcoll d_strcoll
11945 eval $inlibc
11946
11947 : check for structure copying
11948 echo " "
11949 echo "Checking to see if your C compiler can copy structs..." >&4
11950 $cat >try.c <<'EOCP'
11951 int main()
11952 {
11953         struct blurfl {
11954                 int dyick;
11955         } foo, bar;
11956
11957         foo = bar;
11958 }
11959 EOCP
11960 if $cc -c try.c >/dev/null 2>&1 ; then
11961         val="$define"
11962         echo "Yup, it can."
11963 else
11964         val="$undef"
11965         echo "Nope, it can't."
11966 fi
11967 set d_strctcpy
11968 eval $setvar
11969 $rm -f try.*
11970
11971 : see if strerror and/or sys_errlist[] exist
11972 echo " "
11973 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
11974     if set strerror val -f d_strerror; eval $csym; $val; then
11975                 echo 'strerror() found.' >&4
11976                 d_strerror="$define"
11977                 d_strerrm='strerror(e)'
11978                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11979                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
11980                         d_syserrlst="$define"
11981                 else
11982                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
11983                         d_syserrlst="$undef"
11984                 fi
11985     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
11986                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
11987                 echo 'strerror() found in string header.' >&4
11988                 d_strerror="$define"
11989                 d_strerrm='strerror(e)'
11990                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11991                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
11992                                 d_syserrlst="$define"
11993                 else
11994                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
11995                         d_syserrlst="$undef"
11996                 fi
11997     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
11998                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
11999                 d_strerror="$undef"
12000                 d_syserrlst="$define"
12001                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
12002     else
12003                 echo 'strerror() and sys_errlist[] NOT found.' >&4
12004                 d_strerror="$undef"
12005                 d_syserrlst="$undef"
12006                 d_strerrm='"unknown"'
12007     fi
12008 fi
12009
12010 : see if strtod exists
12011 set strtod d_strtod
12012 eval $inlibc
12013
12014 : see if strtol exists
12015 set strtol d_strtol
12016 eval $inlibc
12017
12018 : see if strtold exists
12019 set strtold d_strtold
12020 eval $inlibc
12021
12022 : see if strtoll exists
12023 set strtoll d_strtoll
12024 eval $inlibc
12025
12026 case "$d_longlong-$d_strtoll" in
12027 "$define-$define")
12028         $cat <<EOM
12029 Checking whether your strtoll() works okay...
12030 EOM
12031         $cat >try.c <<'EOCP'
12032 #include <errno.h>
12033 #ifdef __hpux
12034 #define strtoll __strtoll
12035 #endif
12036 #ifdef __EMX__
12037 #define strtoll _strtoll
12038 #endif
12039 #include <stdio.h>
12040 extern long long int strtoll(char *s, char **, int); 
12041 static int bad = 0;
12042 int check(char *s, long long ell, int een) {
12043         long long gll;
12044         errno = 0;
12045         gll = strtoll(s, 0, 10);
12046         if (!((gll == ell) && (errno == een)))
12047                 bad++;
12048 }
12049 int main() {
12050         check(" 1",                                      1LL, 0);
12051         check(" 0",                                      0LL, 0);
12052         check("-1",                                     -1LL, 0);
12053         check("-9223372036854775808", -9223372036854775808LL, 0);
12054         check("-9223372036854775808", -9223372036854775808LL, 0);
12055         check(" 9223372036854775807",  9223372036854775807LL, 0);
12056         check("-9223372036854775808", -9223372036854775808LL, 0);
12057         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
12058         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
12059         if (!bad)
12060                 printf("ok\n");
12061 }
12062 EOCP
12063         set try
12064         if eval $compile; then
12065                 yyy=`./try`
12066                 case "$yyy" in
12067                 ok) echo "Your strtoll() seems to be working okay." ;;
12068                 *) cat <<EOM >&4
12069 Your strtoll() doesn't seem to be working okay.
12070 EOM
12071                    d_strtoll="$undef"
12072                    ;;
12073                 esac
12074         else
12075                 echo "(I can't seem to compile the test program--assuming it doesn't)"
12076                 d_strtoll="$undef"
12077         fi
12078         ;;
12079 esac
12080
12081 : see if strtoq exists
12082 set strtoq d_strtoq
12083 eval $inlibc
12084
12085 : see if strtoul exists
12086 set strtoul d_strtoul
12087 eval $inlibc
12088
12089 case "$d_strtoul" in
12090 "$define")
12091         $cat <<EOM
12092 Checking whether your strtoul() works okay...
12093 EOM
12094         $cat >try.c <<'EOCP'
12095 #include <errno.h>
12096 #include <stdio.h>
12097 extern unsigned long int strtoul(char *s, char **, int); 
12098 static int bad = 0;
12099 void check(char *s, unsigned long eul, int een) {
12100         unsigned long gul;
12101         errno = 0;
12102         gul = strtoul(s, 0, 10);
12103         if (!((gul == eul) && (errno == een)))
12104                 bad++;
12105 }
12106 int main() {
12107         check(" 1", 1L, 0);
12108         check(" 0", 0L, 0);
12109 EOCP
12110         case "$longsize" in
12111         8)
12112             $cat >>try.c <<'EOCP'
12113         check("18446744073709551615", 18446744073709551615UL, 0);
12114         check("18446744073709551616", 18446744073709551615UL, ERANGE);
12115 #if 0 /* strtoul() for /^-/ strings is undefined. */
12116         check("-1", 18446744073709551615UL, 0);
12117         check("-18446744073709551614", 2, 0);
12118         check("-18446744073709551615", 1, 0);
12119         check("-18446744073709551616", 18446744073709551615UL, ERANGE);
12120         check("-18446744073709551617", 18446744073709551615UL, ERANGE);
12121 #endif
12122 EOCP
12123                 ;;
12124         4)
12125                     $cat >>try.c <<'EOCP'
12126         check("4294967295", 4294967295UL, 0);
12127         check("4294967296", 4294967295UL, ERANGE);
12128 #if 0 /* strtoul() for /^-/ strings is undefined. */
12129         check("-1", 4294967295UL, 0);
12130         check("-4294967294", 2, 0);
12131         check("-4294967295", 1, 0);
12132         check("-4294967296", 4294967295UL, ERANGE);
12133         check("-4294967297", 4294967295UL, ERANGE);
12134 #endif
12135 EOCP
12136                 ;;
12137         *)
12138 : Should we write these tests to be more portable by sprintf-ing
12139 : ~0 and then manipulating that char string as input for strtol?
12140                 ;;
12141         esac
12142         $cat >>try.c <<'EOCP'
12143         if (!bad)
12144                 printf("ok\n");
12145         return 0;
12146 }
12147 EOCP
12148         set try
12149         if eval $compile; then
12150                 case "`./try`" in
12151                 ok) echo "Your strtoul() seems to be working okay." ;;
12152                 *) cat <<EOM >&4
12153 Your strtoul() doesn't seem to be working okay.
12154 EOM
12155                    d_strtoul="$undef"
12156                    ;;
12157                 esac
12158         fi
12159         ;;
12160 esac
12161
12162 : see if strtoull exists
12163 set strtoull d_strtoull
12164 eval $inlibc
12165
12166 case "$d_longlong-$d_strtoull" in
12167 "$define-$define")
12168         $cat <<EOM
12169 Checking whether your strtoull() works okay...
12170 EOM
12171         $cat >try.c <<'EOCP'
12172 #include <errno.h>
12173 #ifdef __hpux
12174 #define strtoull __strtoull
12175 #endif
12176 #include <stdio.h>
12177 extern unsigned long long int strtoull(char *s, char **, int); 
12178 static int bad = 0;
12179 int check(char *s, long long eull, int een) {
12180         long long gull;
12181         errno = 0;
12182         gull = strtoull(s, 0, 10);
12183         if (!((gull == eull) && (errno == een)))
12184                 bad++;
12185 }
12186 int main() {
12187         check(" 1",                                        1LL, 0);
12188         check(" 0",                                        0LL, 0);
12189         check("18446744073709551615",  18446744073709551615ULL, 0);
12190         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
12191 #if 0 /* strtoull() for /^-/ strings is undefined. */
12192         check("-1",                    18446744073709551615ULL, 0);
12193         check("-18446744073709551614",                     2LL, 0);
12194         check("-18446744073709551615",                     1LL, 0);
12195         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
12196         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
12197 #endif
12198         if (!bad)
12199                 printf("ok\n");
12200 }
12201 EOCP
12202         set try
12203         if eval $compile; then
12204                 case "`./try`" in
12205                 ok) echo "Your strtoull() seems to be working okay." ;;
12206                 *) cat <<EOM >&4
12207 Your strtoull() doesn't seem to be working okay.
12208 EOM
12209                    d_strtoull="$undef"
12210                    ;;
12211                 esac
12212         fi
12213         ;;
12214 esac
12215
12216 : see if strtouq exists
12217 set strtouq d_strtouq
12218 eval $inlibc
12219
12220 case "$d_strtouq" in
12221 "$define")
12222         $cat <<EOM
12223 Checking whether your strtouq() works okay...
12224 EOM
12225         $cat >try.c <<'EOCP'
12226 #include <errno.h>
12227 #include <stdio.h>
12228 extern unsigned long long int strtouq(char *s, char **, int); 
12229 static int bad = 0;
12230 void check(char *s, unsigned long long eull, int een) {
12231         unsigned long long gull;
12232         errno = 0;
12233         gull = strtouq(s, 0, 10);
12234         if (!((gull == eull) && (errno == een)))
12235                 bad++;
12236 }
12237 int main() {
12238         check(" 1",                                        1LL, 0);
12239         check(" 0",                                        0LL, 0);
12240         check("18446744073709551615",  18446744073709551615ULL, 0);
12241         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
12242 #if 0 /* strtouq() for /^-/ strings is undefined. */
12243         check("-1",                    18446744073709551615ULL, 0);
12244         check("-18446744073709551614",                     2LL, 0);
12245         check("-18446744073709551615",                     1LL, 0);
12246         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
12247         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
12248 #endif
12249         if (!bad)
12250                 printf("ok\n");
12251         return 0;
12252 }
12253 EOCP
12254         set try
12255         if eval $compile; then
12256                 case "`./try`" in
12257                 ok) echo "Your strtouq() seems to be working okay." ;;
12258                 *) cat <<EOM >&4
12259 Your strtouq() doesn't seem to be working okay.
12260 EOM
12261                    d_strtouq="$undef"
12262                    ;;
12263                 esac
12264         fi
12265         ;;
12266 esac
12267
12268 : see if strxfrm exists
12269 set strxfrm d_strxfrm
12270 eval $inlibc
12271
12272 : see if symlink exists
12273 set symlink d_symlink
12274 eval $inlibc
12275
12276 : see if syscall exists
12277 set syscall d_syscall
12278 eval $inlibc
12279
12280 : see if sysconf exists
12281 set sysconf d_sysconf
12282 eval $inlibc
12283
12284 : see if system exists
12285 set system d_system
12286 eval $inlibc
12287
12288 : see if tcgetpgrp exists
12289 set tcgetpgrp d_tcgetpgrp
12290 eval $inlibc
12291
12292 : see if tcsetpgrp exists
12293 set tcsetpgrp d_tcsetpgrp
12294 eval $inlibc
12295
12296 : see if prototype for telldir is available
12297 echo " "
12298 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
12299 eval $hasproto
12300
12301 : see if this is a sys/times.h system
12302 set sys/times.h i_systimes
12303 eval $inhdr
12304
12305 : see if times exists
12306 echo " "
12307 if set times val -f d_times; eval $csym; $val; then
12308         echo 'times() found.' >&4
12309         d_times="$define"
12310         inc=''
12311         case "$i_systimes" in
12312         "$define") inc='sys/times.h';;
12313         esac
12314         rp="What is the type returned by times() on this system?"
12315         set clock_t clocktype long stdio.h sys/types.h $inc
12316         eval $typedef_ask
12317 else
12318         echo 'times() NOT found, hope that will do.' >&4
12319         d_times="$undef"
12320         clocktype='int'
12321 fi
12322
12323 : see if truncate exists
12324 set truncate d_truncate
12325 eval $inlibc
12326
12327 : see if tzname[] exists
12328 echo " "
12329 if set tzname val -a d_tzname; eval $csym; $val; then
12330         val="$define"
12331         echo 'tzname[] found.' >&4
12332 else
12333         val="$undef"
12334         echo 'tzname[] NOT found.' >&4
12335 fi
12336 set d_tzname
12337 eval $setvar
12338
12339 : see if umask exists
12340 set umask d_umask
12341 eval $inlibc
12342
12343 : see if ustat exists
12344 set ustat d_ustat
12345 eval $inlibc
12346
12347 : backward compatibility for d_hvfork
12348 if test X$d_hvfork != X; then
12349         d_vfork="$d_hvfork"
12350         d_hvfork=''
12351 fi
12352 : see if there is a vfork
12353 val=''
12354 set vfork val
12355 eval $inlibc
12356
12357 : Ok, but do we want to use it. vfork is reportedly unreliable in 
12358 : perl on Solaris 2.x, and probably elsewhere.
12359 case "$val" in
12360 $define)
12361         echo " "
12362         case "$usevfork" in
12363         false) dflt='n';;
12364         *) dflt='y';;
12365         esac
12366         cat <<'EOM'
12367  
12368 Perl can only use a vfork() that doesn't suffer from strict
12369 restrictions on calling functions or modifying global data in
12370 the child.  For example, glibc-2.1 contains such a vfork()
12371 that is unsuitable.  If your system provides a proper fork()
12372 call, chances are that you do NOT want perl to use vfork().
12373
12374 EOM
12375         rp="Do you still want to use vfork()?"
12376         . ./myread
12377         case "$ans" in
12378         y|Y) ;;
12379         *)
12380                 echo "Ok, we won't use vfork()."
12381                 val="$undef"
12382                 ;;
12383         esac
12384         ;;
12385 esac
12386 set d_vfork
12387 eval $setvar
12388 case "$d_vfork" in
12389 $define) usevfork='true';;
12390 *) usevfork='false';;
12391 esac
12392
12393 : see if this is an sysdir system
12394 set sys/dir.h i_sysdir
12395 eval $inhdr
12396
12397 : see if this is an sysndir system
12398 set sys/ndir.h i_sysndir
12399 eval $inhdr
12400
12401 : see if closedir exists
12402 set closedir d_closedir
12403 eval $inlibc
12404
12405 case "$d_closedir" in
12406 "$define")
12407         echo " "
12408         echo "Checking whether closedir() returns a status..." >&4
12409         cat > closedir.c <<EOM
12410 #$i_dirent I_DIRENT             /**/
12411 #$i_sysdir I_SYS_DIR            /**/
12412 #$i_sysndir I_SYS_NDIR          /**/
12413 #$i_systypes I_SYS_TYPES        /**/
12414
12415 #if defined(I_SYS_TYPES)
12416 #include <sys/types.h>
12417 #endif
12418 #if defined(I_DIRENT)
12419 #include <dirent.h>
12420 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
12421 #include <sys/dir.h>
12422 #endif
12423 #else
12424 #ifdef I_SYS_NDIR
12425 #include <sys/ndir.h>
12426 #else
12427 #ifdef I_SYS_DIR
12428 #ifdef hp9000s500
12429 #include <ndir.h>       /* may be wrong in the future */
12430 #else
12431 #include <sys/dir.h>
12432 #endif
12433 #endif
12434 #endif
12435 #endif 
12436 int main() { return closedir(opendir(".")); }
12437 EOM
12438         set closedir
12439         if eval $compile_ok; then
12440                 if ./closedir > /dev/null 2>&1 ; then
12441                         echo "Yes, it does."
12442                         val="$undef"
12443                 else
12444                         echo "No, it doesn't."
12445                         val="$define"
12446                 fi
12447         else
12448                 echo "(I can't seem to compile the test program--assuming it doesn't)"
12449                 val="$define"
12450         fi
12451         ;;
12452 *)
12453         val="$undef";
12454         ;;
12455 esac
12456 set d_void_closedir
12457 eval $setvar
12458 $rm -f closedir*
12459 : see if there is a wait4
12460 set wait4 d_wait4
12461 eval $inlibc
12462
12463 : see if waitpid exists
12464 set waitpid d_waitpid
12465 eval $inlibc
12466
12467 : see if wcstombs exists
12468 set wcstombs d_wcstombs
12469 eval $inlibc
12470
12471 : see if wctomb exists
12472 set wctomb d_wctomb
12473 eval $inlibc
12474
12475 : preserve RCS keywords in files with variable substitution, grrr
12476 Date='$Date'
12477 Id='$Id'
12478 Log='$Log'
12479 RCSfile='$RCSfile'
12480 Revision='$Revision'
12481
12482 case "$crosscompile" in
12483 ''|[nN]*) crosscompile="$undef" ;;
12484 esac
12485
12486 case "$osname" in
12487 next|rhapsody|darwin) multiarch="$define" ;;
12488 esac
12489 case "$multiarch" in
12490 ''|[nN]*) multiarch="$undef" ;;
12491 esac
12492
12493 : check for alignment requirements
12494 echo " "
12495 case "$crosscompile$multiarch" in
12496 *$define*)
12497         $cat <<EOM
12498 You seem to be either cross-compiling or doing a multiarchitecture build,
12499 skipping the memory alignment check.
12500
12501 EOM
12502         case "$alignbytes" in
12503         '') alignbytes=8 ;;
12504         esac
12505         ;;
12506 *)
12507         case "$alignbytes" in
12508         '') echo "Checking alignment constraints..." >&4
12509                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
12510                         $cat >try.c <<'EOCP'
12511 typedef long double NV;
12512 EOCP
12513                 else
12514                         $cat >try.c <<'EOCP'
12515 typedef double NV;
12516 EOCP
12517                 fi
12518                 $cat >>try.c <<'EOCP'
12519 #include <stdio.h>
12520 struct foobar {
12521         char foo;
12522         NV bar;
12523 } try_algn;
12524 int main()
12525 {
12526     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
12527     return(0);
12528 }
12529 EOCP
12530                 set try
12531                 if eval $compile_ok; then
12532                         dflt=`./try`
12533                 else
12534                         dflt='8'
12535                         echo "(I can't seem to compile the test program...)"
12536                 fi
12537                 ;;
12538         *) dflt="$alignbytes"
12539                 ;;
12540         esac
12541         rp="Doubles must be aligned on a how-many-byte boundary?"
12542         . ./myread
12543         alignbytes="$ans"
12544         $rm -f try.c try
12545         ;;
12546 esac
12547
12548
12549 : set the base revision
12550 baserev=5.0
12551
12552 : check for ordering of bytes in a long
12553 echo " "
12554 case "$crosscompile$multiarch" in
12555 *$define*)
12556         $cat <<EOM
12557 You seem to be either cross-compiling or doing a multiarchitecture build,
12558 skipping the byteorder check.
12559
12560 EOM
12561         byteorder='0xffff'
12562         ;;
12563 *)
12564         case "$byteorder" in
12565         '')
12566                 $cat <<'EOM'
12567 In the following, larger digits indicate more significance.  A big-endian
12568 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
12569 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
12570 machines may have weird orders like 3412.  A Cray will report 87654321,
12571 an Alpha will report 12345678. If the test program works the default is
12572 probably right.
12573 I'm now running the test program...
12574 EOM
12575                 $cat >try.c <<'EOCP'
12576 #include <stdio.h>
12577 int main()
12578 {
12579         int i;
12580         union {
12581                 unsigned long l;
12582                 char c[sizeof(long)];
12583         } u;
12584
12585         if (sizeof(long) > 4)
12586                 u.l = (0x08070605L << 32) | 0x04030201L;
12587         else
12588                 u.l = 0x04030201L;
12589         for (i = 0; i < sizeof(long); i++)
12590                 printf("%c", u.c[i]+'0');
12591         printf("\n");
12592         exit(0);
12593 }
12594 EOCP
12595                 xxx_prompt=y
12596                 set try
12597                 if eval $compile && ./try > /dev/null; then
12598                         dflt=`./try`
12599                         case "$dflt" in
12600                         [1-4][1-4][1-4][1-4]|12345678|87654321)
12601                                 echo "(The test program ran ok.)"
12602                                 echo "byteorder=$dflt"
12603                                 xxx_prompt=n
12604                         ;;
12605                         ????|????????) echo "(The test program ran ok.)" ;;
12606                         *) echo "(The test program didn't run right for some reason.)" ;;
12607                         esac
12608                 else
12609                         dflt='4321'
12610                         cat <<'EOM'
12611 (I can't seem to compile the test program.  Guessing big-endian...)
12612 EOM
12613                 fi
12614                 case "$xxx_prompt" in
12615                 y)
12616                         rp="What is the order of bytes in a long?"
12617                         . ./myread
12618                         byteorder="$ans"
12619                         ;;
12620                 *)      byteorder=$dflt
12621                         ;;
12622                 esac
12623                 ;;
12624         esac
12625         $rm -f try.c try
12626         ;;
12627 esac
12628
12629
12630 : how do we catenate cpp tokens here?
12631 echo " "
12632 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
12633 $cat >cpp_stuff.c <<'EOCP'
12634 #define RCAT(a,b)a/**/b
12635 #define ACAT(a,b)a ## b
12636 RCAT(Rei,ser)
12637 ACAT(Cir,cus)
12638 EOCP
12639 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
12640 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
12641         echo "Oh!  Smells like ANSI's been here." >&4
12642         echo "We can catify or stringify, separately or together!"
12643         cpp_stuff=42
12644 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
12645         echo "Ah, yes!  The good old days!" >&4
12646         echo "However, in the good old days we don't know how to stringify and"
12647         echo "catify at the same time."
12648         cpp_stuff=1
12649 else
12650         $cat >&4 <<EOM
12651 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
12652 to have to edit the values of CAT[2-5] in config.h...
12653 EOM
12654         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
12655 fi
12656 $rm -f cpp_stuff.*
12657
12658 : see if this is a db.h system
12659 set db.h i_db
12660 eval $inhdr
12661
12662 case "$i_db" in
12663 $define)
12664         : Check db version.
12665         echo " "
12666         echo "Checking Berkeley DB version ..." >&4
12667         $cat >try.c <<EOCP
12668 #$d_const HASCONST
12669 #ifndef HASCONST
12670 #define const
12671 #endif
12672 #include <sys/types.h>
12673 #include <stdio.h>
12674 #include <db.h>
12675 int main()
12676 {
12677 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
12678     int Major, Minor, Patch ;
12679     unsigned long Version ;
12680     (void)db_version(&Major, &Minor, &Patch) ;
12681     printf("You have Berkeley DB Version 2 or greater\n");
12682
12683     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
12684                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
12685     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
12686                 Major, Minor, Patch) ;
12687
12688     /* check that db.h & libdb are compatible */
12689     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
12690         printf("db.h and libdb are incompatible\n") ;
12691         exit(3);        
12692     }
12693
12694     printf("db.h and libdb are compatible\n") ;
12695
12696     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
12697                 + DB_VERSION_PATCH ;
12698
12699     /* needs to be >= 2.3.4 */
12700     if (Version < 2003004) {
12701     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
12702         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
12703         exit(2);        
12704     }
12705
12706     exit(0);
12707 #else
12708 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
12709     printf("You have Berkeley DB Version 1\n");
12710     exit(0);    /* DB version < 2: the coast is clear. */
12711 #else
12712     exit(1);    /* <db.h> not Berkeley DB? */
12713 #endif
12714 #endif
12715 }
12716 EOCP
12717         set try
12718         if eval $compile_ok && ./try; then
12719                 echo 'Looks OK.' >&4
12720         else
12721                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
12722                 i_db=$undef
12723                 case " $libs " in
12724                 *"-ldb "*)
12725                         : Remove db from list of libraries to use
12726                         echo "Removing unusable -ldb from library list" >&4
12727                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
12728                         shift
12729                         libs="$*"
12730                         echo "libs = $libs" >&4
12731                         ;;
12732                 esac
12733         fi
12734         $rm -f try.*
12735         ;;
12736 esac
12737
12738 case "$i_db" in
12739 define)
12740         : Check the return type needed for hash 
12741         echo " "
12742         echo "Checking return type needed for hash for Berkeley DB ..." >&4
12743         $cat >try.c <<EOCP
12744 #$d_const HASCONST
12745 #ifndef HASCONST
12746 #define const
12747 #endif
12748 #include <sys/types.h>
12749 #include <db.h>
12750
12751 #ifndef DB_VERSION_MAJOR
12752 u_int32_t hash_cb (ptr, size)
12753 const void *ptr;
12754 size_t size;
12755 {
12756 }
12757 HASHINFO info;
12758 int main()
12759 {
12760         info.hash = hash_cb;
12761 }
12762 #endif
12763 EOCP
12764         if $cc $ccflags -c try.c >try.out 2>&1 ; then
12765                 if $contains warning try.out >>/dev/null 2>&1 ; then
12766                         db_hashtype='int'
12767                 else
12768                         db_hashtype='u_int32_t'
12769                 fi
12770         else
12771                 : XXX Maybe we should just give up here.
12772                 db_hashtype=u_int32_t
12773                 $cat try.out >&4
12774                 echo "Help:  I can't seem to compile the db test program." >&4
12775                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
12776         fi
12777         $rm -f try.*
12778         echo "Your version of Berkeley DB uses $db_hashtype for hash."
12779         ;;
12780 *)      db_hashtype=u_int32_t
12781         ;;
12782 esac
12783 case "$i_db" in
12784 define)
12785         : Check the return type needed for prefix 
12786         echo " "
12787         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
12788         cat >try.c <<EOCP
12789 #$d_const HASCONST
12790 #ifndef HASCONST
12791 #define const
12792 #endif
12793 #include <sys/types.h>
12794 #include <db.h>
12795
12796 #ifndef DB_VERSION_MAJOR
12797 size_t prefix_cb (key1, key2)
12798 const DBT *key1;
12799 const DBT *key2;
12800 {
12801 }
12802 BTREEINFO info;
12803 int main()
12804 {
12805         info.prefix = prefix_cb;
12806 }
12807 #endif
12808 EOCP
12809         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
12810                 if $contains warning try.out >>/dev/null 2>&1 ; then
12811                         db_prefixtype='int'
12812                 else
12813                         db_prefixtype='size_t'
12814                 fi
12815         else
12816                 db_prefixtype='size_t'
12817                 : XXX Maybe we should just give up here.
12818                 $cat try.out >&4
12819                 echo "Help:  I can't seem to compile the db test program." >&4
12820                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
12821         fi
12822         $rm -f try.*
12823         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
12824         ;;
12825 *)      db_prefixtype='size_t'
12826         ;;
12827 esac
12828
12829 : check for void type
12830 echo " "
12831 echo "Checking to see how well your C compiler groks the void type..." >&4
12832 case "$voidflags" in
12833 '')
12834         $cat >try.c <<'EOCP'
12835 #if TRY & 1
12836 void sub() {
12837 #else
12838 sub() {
12839 #endif
12840         extern void moo();      /* function returning void */
12841         void (*goo)();          /* ptr to func returning void */
12842 #if TRY & 8
12843         void *hue;              /* generic ptr */
12844 #endif
12845 #if TRY & 2
12846         void (*foo[10])();
12847 #endif
12848
12849 #if TRY & 4
12850         if(goo == moo) {
12851                 exit(0);
12852         }
12853 #endif
12854         exit(0);
12855 }
12856 int main() { sub(); }
12857 EOCP
12858         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
12859                 voidflags=$defvoidused
12860         echo "Good.  It appears to support void to the level $package wants.">&4
12861                 if $contains warning .out >/dev/null 2>&1; then
12862                         echo "However, you might get some warnings that look like this:"
12863                         $cat .out
12864                 fi
12865         else
12866 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
12867                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
12868                         echo "It supports 1..."
12869                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
12870                                 echo "It also supports 2..."
12871                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
12872                                         voidflags=7
12873                                         echo "And it supports 4 but not 8 definitely."
12874                                 else
12875                                         echo "It doesn't support 4..."
12876                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
12877                                                 voidflags=11
12878                                                 echo "But it supports 8."
12879                                         else
12880                                                 voidflags=3
12881                                                 echo "Neither does it support 8."
12882                                         fi
12883                                 fi
12884                         else
12885                                 echo "It does not support 2..."
12886                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
12887                                         voidflags=13
12888                                         echo "But it supports 4 and 8."
12889                                 else
12890                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
12891                                                 voidflags=5
12892                                                 echo "And it supports 4 but has not heard about 8."
12893                                         else
12894                                                 echo "However it supports 8 but not 4."
12895                                         fi
12896                                 fi
12897                         fi
12898                 else
12899                         echo "There is no support at all for void."
12900                         voidflags=0
12901                 fi
12902         fi
12903 esac
12904 case "$voidflags" in
12905 "$defvoidused") ;;
12906 *)      $cat >&4 <<'EOM'
12907   Support flag bits are:
12908     1: basic void declarations.
12909     2: arrays of pointers to functions returning void.
12910     4: operations between pointers to and addresses of void functions.
12911     8: generic void pointers.
12912 EOM
12913         dflt="$voidflags";
12914         rp="Your void support flags add up to what?"
12915         . ./myread
12916         voidflags="$ans"
12917         ;;
12918 esac
12919 $rm -f try.* .out
12920
12921
12922 : How can we generate normalized random numbers ?
12923 echo " "
12924 echo "Looking for a random number function..." >&4
12925 case "$randfunc" in
12926 '')
12927         if set drand48 val -f; eval $csym; $val; then
12928                 dflt="drand48"
12929                 echo "Good, found drand48()." >&4
12930         elif set random val -f; eval $csym; $val; then
12931                 dflt="random"
12932                 echo "OK, found random()." >&4
12933         else
12934                 dflt="rand"
12935                 echo "Yick, looks like I have to use rand()." >&4
12936         fi
12937         echo " "
12938         ;;
12939 *)
12940         dflt="$randfunc"
12941         ;;
12942 esac
12943 cont=true
12944
12945 case "$ccflags" in
12946 *-Dmy_rand=*|*-Dmy_srand=*)
12947         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
12948         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
12949         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
12950         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
12951         ;;
12952 esac
12953
12954 while $test "$cont"; do
12955         rp="Use which function to generate random numbers?"
12956         . ./myread
12957         if $test "$ans" = "$dflt"; then
12958                 : null
12959         else
12960                 randbits=''
12961         fi
12962         randfunc="$ans"
12963         if set $ans val -f; eval $csym; $val; then
12964                 cont=''
12965         else
12966                 dflt=y
12967                 rp="I cannot find function $ans. Use that name anyway?"
12968                 . ./myread
12969                 dflt=rand
12970                 case "$ans" in
12971                         [yY]*) cont='';;
12972                 esac
12973         fi
12974         case "$cont" in
12975         '')
12976                 case "$randfunc" in
12977                 drand48)
12978                         drand01="drand48()"
12979                         seedfunc="srand48"
12980                         randbits=48
12981                         randseedtype=long
12982                         ;;
12983                 rand|random)
12984                         case "$randbits" in
12985                         '')
12986 echo "Checking to see how many bits your $randfunc() function produces..." >&4
12987                                 $cat >try.c <<EOCP
12988 #$i_unistd I_UNISTD
12989 #$i_stdlib I_STDLIB
12990 #include <stdio.h>
12991 #ifdef I_UNISTD
12992 #  include <unistd.h>
12993 #endif
12994 #ifdef I_STDLIB
12995 #  include <stdlib.h>
12996 #endif
12997 int main()
12998 {
12999         register int i;
13000         register unsigned long tmp;
13001         register unsigned long max = 0L;
13002
13003         for (i = 1000; i; i--) {
13004                 tmp = (unsigned long) $randfunc();
13005                 if (tmp > max) max = tmp;
13006         }
13007         for (i = 0; max; i++)
13008                 max /= 2;
13009         printf("%d\n",i);
13010 }
13011 EOCP
13012                                 set try
13013                                 if eval $compile_ok; then
13014                                         dflt=`try`
13015                                 else
13016                                         dflt='?'
13017                                         echo "(I can't seem to compile the test program...)"
13018                                 fi
13019                                 ;;
13020                         *)
13021                                 dflt="$randbits"
13022                                 ;;
13023                         esac
13024                         rp="How many bits does your $randfunc() function produce?"
13025                         . ./myread
13026                         randbits="$ans"
13027                         $rm -f try.c try
13028                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13029                         seedfunc="s$randfunc"
13030                         randseedtype=unsigned
13031                         ;;
13032                 *)
13033                         dflt="31"
13034                         rp="How many bits does your $randfunc() function produce?"
13035                         . ./myread
13036                         randbits="$ans"
13037                         seedfunc="s$randfunc"
13038                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13039                         if set $seedfunc val -f; eval $csym; $val; then
13040                                 echo "(Using $seedfunc() to seed random generator)"
13041                         else
13042                                 echo "(Warning: no $seedfunc() to seed random generator)"
13043                                 seedfunc=rand
13044                         fi
13045                         randseedtype=unsigned
13046                         ;;
13047                 esac
13048                 ;;
13049         esac
13050 done
13051
13052 echo " "
13053 echo "Determining whether or not we are on an EBCDIC system..." >&4
13054 $cat >tebcdic.c <<'EOM'
13055 int main()
13056 {
13057   if ('M'==0xd4) return 0;
13058   return 1;
13059 }
13060 EOM
13061
13062 val=$undef
13063 set tebcdic
13064 if eval $compile_ok; then
13065         if ./tebcdic; then
13066                 echo "You seem to speak EBCDIC." >&4
13067                 val="$define"
13068         else
13069                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF8." >&4
13070         fi
13071 else
13072         echo "I'm unable to compile the test program." >&4
13073         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
13074 fi
13075 $rm -f tebcdic.c tebcdic
13076 set ebcdic
13077 eval $setvar
13078
13079 echo " "
13080 $cat >&4 <<EOM
13081 Checking how to flush all pending stdio output...
13082 EOM
13083 # I only know how to find the first 32 possibly open files on SunOS.
13084 # See also hints/sunos_4_1.sh and util.c  --AD
13085 case "$osname" in
13086 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
13087 esac
13088 $cat >>try.c <<EOCP
13089 #include <stdio.h>
13090 #$i_unistd I_UNISTD
13091 #ifdef I_UNISTD
13092 # include <unistd.h>
13093 #endif
13094 #$d_sysconf HAS_SYSCONF
13095 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
13096 #ifdef HAS_STDIO_STREAM_ARRAY
13097 # define STDIO_STREAM_ARRAY $stdio_stream_array
13098 #endif
13099 int main() {
13100   FILE* p = fopen("try.out", "w");
13101 #ifdef TRY_FPUTC
13102   fputc('x', p);
13103 #else
13104 # ifdef TRY_FPRINTF
13105   fprintf(p, "x");
13106 # endif
13107 #endif
13108 #ifdef TRY_FFLUSH_NULL
13109   fflush(NULL);
13110 #endif
13111 #ifdef TRY_FFLUSH_ALL
13112   {
13113     long open_max = -1;
13114 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
13115     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
13116 # else
13117 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
13118     open_max = sysconf(_SC_OPEN_MAX);
13119 #  else
13120 #   ifdef FOPEN_MAX
13121     open_max = FOPEN_MAX;
13122 #   else
13123 #    ifdef OPEN_MAX
13124     open_max = OPEN_MAX;
13125 #    else
13126 #     ifdef _NFILE
13127     open_max = _NFILE;
13128 #     endif
13129 #    endif
13130 #   endif
13131 #  endif
13132 # endif 
13133 # ifdef HAS_STDIO_STREAM_ARRAY
13134     if (open_max > 0) {
13135       long i;
13136       for (i = 0; i < open_max; i++)
13137             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
13138                 STDIO_STREAM_ARRAY[i]._file < open_max &&
13139                 STDIO_STREAM_ARRAY[i]._flag)
13140                 fflush(&STDIO_STREAM_ARRAY[i]);
13141     }   
13142   }
13143 # endif
13144 #endif
13145   _exit(42);
13146 }
13147 EOCP
13148 : first we have to find out how _not_ to flush
13149 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
13150     output=''
13151     set try -DTRY_FPUTC
13152     if eval $compile; then
13153             $rm -f try.out
13154             ./try$exe_ext 2>/dev/null
13155             if $test ! -s try.out -a "X$?" = X42; then
13156                 output=-DTRY_FPUTC
13157             fi
13158     fi
13159     case "$output" in
13160     '')
13161             set try -DTRY_FPRINTF
13162             $rm -f try.out
13163             if eval $compile; then
13164                     $rm -f try.out
13165                     ./try$exe_ext 2>/dev/null
13166                     if $test ! -s try.out -a "X$?" = X42; then
13167                         output=-DTRY_FPRINTF
13168                     fi
13169             fi
13170         ;;
13171     esac
13172 fi
13173 : check for fflush NULL behaviour
13174 case "$fflushNULL" in
13175 '')     set try -DTRY_FFLUSH_NULL $output
13176         if eval $compile; then
13177                 $rm -f try.out
13178                 ./try$exe_ext 2>/dev/null
13179                 code="$?"
13180                 if $test -s try.out -a "X$code" = X42; then
13181                         fflushNULL="`$cat try.out`"
13182                 else
13183                         if $test "X$code" != X42; then
13184                                 $cat >&4 <<EOM
13185 (If this test failed, don't worry, we'll try another method shortly.)
13186 EOM
13187                         fi
13188                 fi
13189         fi
13190         $rm -f core try.core core.try.*
13191         case "$fflushNULL" in
13192         x)      $cat >&4 <<EOM
13193 Your fflush(NULL) works okay for output streams.
13194 Let's see if it clobbers input pipes...
13195 EOM
13196 # As of mid-March 2000 all versions of Solaris appear to have a stdio
13197 # bug that improperly flushes the input end of pipes.  So we avoid the
13198 # autoflush on fork/system/exec support for now. :-(
13199 $cat >tryp.c <<EOCP
13200 #include <stdio.h>
13201 int
13202 main(int argc, char **argv)
13203 {
13204     char buf[1024];
13205     int i;
13206     char *bp = buf;
13207     while (1) {
13208         while ((i = getc(stdin)) != -1
13209                && (*bp++ = i) != '\n'
13210                && bp < &buf[1024])
13211         /* DO NOTHING */ ;
13212         *bp = '\0';
13213         fprintf(stdout, "%s", buf);
13214         fflush(NULL);
13215         if (i == -1)
13216             return 0;
13217         bp = buf;
13218     }
13219 }
13220 EOCP
13221                 fflushNULL="$define"
13222                 set tryp
13223                 if eval $compile; then
13224                     $rm -f tryp.out
13225                     $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
13226                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
13227                        $cat >&4 <<EOM
13228 fflush(NULL) seems to behave okay with input streams.
13229 EOM
13230                         fflushNULL="$define"
13231                     else
13232                         $cat >&4 <<EOM
13233 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
13234 EOM
13235                         fflushNULL="$undef"
13236                     fi
13237                 fi
13238                 $rm -f core tryp.c tryp.core core.tryp.*
13239                 ;;
13240         '')     $cat >&4 <<EOM
13241 Your fflush(NULL) isn't working (contrary to ANSI C).
13242 EOM
13243                 fflushNULL="$undef"
13244                 ;;
13245         *)      $cat >&4 <<EOM
13246 Cannot figure out whether your fflush(NULL) works or not.
13247 I'm assuming it doesn't (contrary to ANSI C).
13248 EOM
13249                 fflushNULL="$undef"
13250                 ;;
13251         esac
13252         ;;
13253 $define|true|[yY]*)
13254         fflushNULL="$define"
13255         ;;
13256 *)
13257         fflushNULL="$undef"
13258         ;;
13259 esac
13260 : check explicit looping only if NULL did not work, and if the pipe
13261 : bug does not show up on an explicit flush too
13262 case "$fflushNULL" in
13263 "$undef")
13264         $cat >tryp.c <<EOCP
13265 #include <stdio.h>
13266 int
13267 main(int argc, char **argv)
13268 {
13269     char buf[1024];
13270     int i;
13271     char *bp = buf;
13272     while (1) {
13273         while ((i = getc(stdin)) != -1
13274                && (*bp++ = i) != '\n'
13275                && bp < &buf[1024])
13276         /* DO NOTHING */ ;
13277         *bp = '\0';
13278         fprintf(stdout, "%s", buf);
13279         fflush(stdin);
13280         if (i == -1)
13281             return 0;
13282         bp = buf;
13283     }
13284 }
13285 EOCP
13286         set tryp
13287         if eval $compile; then
13288             $rm -f tryp.out
13289             $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
13290             if cmp tryp.c tryp.out >/dev/null 2>&1; then
13291                $cat >&4 <<EOM
13292 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
13293 EOM
13294                 : now check for fflushall behaviour
13295                 case "$fflushall" in
13296                 '')     set try -DTRY_FFLUSH_ALL $output
13297                         if eval $compile; then
13298                                 $cat >&4 <<EOM
13299 (Now testing the other method--but note that this also may fail.)
13300 EOM
13301                                 $rm -f try.out
13302                                 ./try$exe_ext 2>/dev/null
13303                                 if $test -s try.out -a "X$?" = X42; then
13304                                         fflushall="`$cat try.out`"
13305                                 fi
13306                         fi
13307                         $rm -f core try.core core.try.*
13308                         case "$fflushall" in
13309                         x)      $cat >&4 <<EOM
13310 Whew. Flushing explicitly all the stdio streams works.
13311 EOM
13312                                 fflushall="$define"
13313                                 ;;
13314                         '')     $cat >&4 <<EOM
13315 Sigh. Flushing explicitly all the stdio streams doesn't work.
13316 EOM
13317                                 fflushall="$undef"
13318                                 ;;
13319                         *)      $cat >&4 <<EOM
13320 Cannot figure out whether flushing stdio streams explicitly works or not.
13321 I'm assuming it doesn't.
13322 EOM
13323                                 fflushall="$undef"
13324                                 ;;
13325                         esac
13326                         ;;
13327                 "$define"|true|[yY]*)
13328                         fflushall="$define"
13329                         ;;
13330                 *)
13331                         fflushall="$undef"
13332                         ;;
13333                 esac
13334             else
13335                 $cat >&4 <<EOM
13336 All is futile.  Even fflush(stdin) clobbers input pipes!
13337 EOM
13338                 fflushall="$undef"
13339             fi
13340         else
13341             fflushall="$undef"
13342         fi
13343         $rm -f core tryp.c tryp.core core.tryp.*
13344         ;;
13345 *)      fflushall="$undef"
13346         ;;
13347 esac
13348
13349 case "$fflushNULL$fflushall" in
13350 undefundef)
13351         $cat <<EOM
13352 OK, I give up.  I cannot figure out how to flush pending stdio output.
13353 We won't be flushing handles at all before fork/exec/popen.
13354 EOM
13355         ;;
13356 esac
13357 $rm -f try.* try$exe_ext
13358
13359 : Store the full pathname to the ar program for use in the C program
13360 : Respect a hint or command line value for full_ar.
13361 case "$full_ar" in
13362 '') full_ar=$ar ;;
13363 esac
13364
13365 : Store the full pathname to the sed program for use in the C program
13366 full_sed=$sed
13367
13368 : see what type gids are declared as in the kernel
13369 echo " "
13370 echo "Looking for the type for group ids returned by getgid()."
13371 set gid_t gidtype xxx stdio.h sys/types.h
13372 eval $typedef
13373 case "$gidtype" in
13374 xxx)
13375         xxx=`./findhdr sys/user.h`
13376         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
13377         case $1 in
13378         unsigned) dflt="$1 $2" ;;
13379         *) dflt="$1" ;;
13380         esac
13381         ;;
13382 *) dflt="$gidtype";;
13383 esac
13384 case "$gidtype" in
13385 gid_t) echo "gid_t found." ;;
13386 *)      rp="What is the type for group ids returned by getgid()?"
13387         . ./myread
13388         gidtype="$ans"
13389         ;;
13390 esac
13391
13392 echo " "
13393 case "$gidtype" in
13394 *_t) zzz="$gidtype"     ;;
13395 *)   zzz="gid"          ;;
13396 esac
13397 echo "Checking the size of $zzz..." >&4 
13398 cat > try.c <<EOCP
13399 #include <sys/types.h>
13400 #include <stdio.h>
13401 int main() {
13402     printf("%d\n", (int)sizeof($gidtype));
13403     exit(0);
13404 }
13405 EOCP
13406 set try
13407 if eval $compile_ok; then
13408         yyy=`./try`
13409         case "$yyy" in
13410         '')     gidsize=4
13411                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
13412                 ;;
13413         *)      gidsize=$yyy
13414                 echo "Your $zzz is $gidsize bytes long."
13415                 ;;
13416         esac
13417 else
13418         gidsize=4
13419         echo "(I can't compile the test program--guessing $gidsize.)" >&4
13420 fi
13421
13422
13423 echo " "
13424 case "$gidtype" in
13425 *_t) zzz="$gidtype"     ;;
13426 *)   zzz="gid"          ;;
13427 esac
13428 echo "Checking the sign of $zzz..." >&4 
13429 cat > try.c <<EOCP
13430 #include <sys/types.h>
13431 #include <stdio.h>
13432 int main() {
13433         $gidtype foo = -1;
13434         if (foo < 0)
13435                 printf("-1\n");
13436         else
13437                 printf("1\n");
13438 }
13439 EOCP
13440 set try
13441 if eval $compile; then
13442         yyy=`./try`
13443         case "$yyy" in
13444         '')     gidsign=1
13445                 echo "(I can't execute the test program--guessing unsigned.)" >&4
13446                 ;;
13447         *)      gidsign=$yyy
13448                 case "$gidsign" in
13449                  1) echo "Your $zzz is unsigned." ;;
13450                 -1) echo "Your $zzz is signed."   ;;
13451                 esac
13452                 ;;
13453         esac
13454 else
13455         gidsign=1
13456         echo "(I can't compile the test program--guessing unsigned.)" >&4
13457 fi
13458
13459
13460 echo " "
13461
13462 if $test X"$quadtype" != X; then
13463
13464 echo "Checking how to print 64-bit integers..." >&4
13465
13466 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
13467         $cat >try.c <<'EOCP'
13468 #include <sys/types.h>
13469 #include <stdio.h>
13470 int main() {
13471   int q = 12345678901;
13472   printf("%ld\n", q);
13473 }
13474 EOCP
13475         set try
13476         if eval $compile; then
13477                 yyy=`./try$exe_ext`
13478                 case "$yyy" in
13479                 12345678901)
13480                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
13481                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
13482                         echo "We will use %d."
13483                         ;;
13484                 esac
13485         fi
13486 fi
13487
13488 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
13489         $cat >try.c <<'EOCP'
13490 #include <sys/types.h>
13491 #include <stdio.h>
13492 int main() {
13493   long q = 12345678901;
13494   printf("%ld\n", q);
13495 }
13496 EOCP
13497         set try
13498         if eval $compile; then
13499                 yyy=`./try$exe_ext`
13500                 case "$yyy" in
13501                 12345678901)
13502                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
13503                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
13504                         echo "We will use %ld."
13505                         ;;
13506                 esac
13507         fi
13508 fi
13509
13510 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
13511         $cat >try.c <<'EOCP'
13512 #include <sys/types.h>
13513 #include <inttypes.h>
13514 #include <stdio.h>
13515 int main() {
13516   int64_t q = 12345678901;
13517   printf("%" PRId64 "\n", q);
13518 }
13519 EOCP
13520         set try
13521         if eval $compile; then
13522                 yyy=`./try$exe_ext`
13523                 case "$yyy" in
13524                 12345678901)
13525                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
13526                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
13527                         echo "We will use the C9X style."
13528                         ;;
13529                 esac
13530         fi
13531 fi
13532
13533 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
13534         $cat >try.c <<'EOCP'
13535 #include <sys/types.h>
13536 #include <stdio.h>
13537 int main() {
13538   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
13539   printf("%lld\n", q);
13540 }
13541 EOCP
13542         set try
13543         if eval $compile; then
13544                 yyy=`./try$exe_ext`
13545                 case "$yyy" in
13546                 12345678901)
13547                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
13548                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
13549                         echo "We will use the %lld style."
13550                         ;;
13551                 esac
13552         fi
13553 fi
13554
13555 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
13556         $cat >try.c <<EOCP
13557 #include <sys/types.h>
13558 #include <stdio.h>
13559 int main() {
13560   $quadtype q = 12345678901;
13561   printf("%Ld\n", q);
13562 }
13563 EOCP
13564         set try
13565         if eval $compile; then
13566                 yyy=`./try$exe_ext`
13567                 case "$yyy" in
13568                 12345678901)
13569                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
13570                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
13571                         echo "We will use %Ld."
13572                         ;;
13573                 esac
13574         fi
13575 fi
13576
13577 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
13578         $cat >try.c <<EOCP
13579 #include <sys/types.h>
13580 #include <stdio.h>
13581 int main() {
13582   $quadtype q = 12345678901;
13583   printf("%qd\n", q);
13584 }
13585 EOCP
13586         set try
13587         if eval $compile; then
13588                 yyy=`./try$exe_ext`
13589                 case "$yyy" in
13590                 12345678901)
13591                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
13592                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
13593                         echo "We will use %qd."
13594                         ;;
13595                 esac
13596         fi
13597 fi
13598
13599 if $test X"$sPRId64" = X; then
13600         echo "Cannot figure out how to print 64-bit integers." >&4
13601 fi
13602
13603 $rm -f try try.*
13604
13605 fi
13606
13607 case "$sPRId64" in
13608 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
13609         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; 
13610         ;;
13611 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
13612         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; 
13613         ;;
13614 esac
13615
13616
13617 echo " "
13618 $echo "Checking the format strings to be used for Perl's internal types..." >&4
13619
13620 if $test X"$ivsize" = X8; then
13621         ivdformat="$sPRId64"
13622         uvuformat="$sPRIu64"
13623         uvoformat="$sPRIo64"
13624         uvxformat="$sPRIx64"
13625         uvXUformat="$sPRIXU64"
13626 else
13627         if $test X"$ivsize" = X"$longsize"; then
13628                 ivdformat='"ld"'
13629                 uvuformat='"lu"'
13630                 uvoformat='"lo"'
13631                 uvxformat='"lx"'
13632                 uvXUformat='"lX"'
13633         else
13634                 if $test X"$ivsize" = X"$intsize"; then
13635                         ivdformat='"d"'
13636                         uvuformat='"u"'
13637                         uvoformat='"o"'
13638                         uvxformat='"x"'
13639                         uvXUformat='"X"'
13640                 else
13641                         : far out
13642                         if $test X"$ivsize" = X"$shortsize"; then
13643                                 ivdformat='"hd"'
13644                                 uvuformat='"hu"'
13645                                 uvoformat='"ho"'
13646                                 uvxformat='"hx"'
13647                                 uvXUformat='"hX"'
13648                         fi
13649                 fi
13650         fi
13651 fi
13652
13653 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
13654         nveformat="$sPRIeldbl"
13655         nvfformat="$sPRIfldbl"
13656         nvgformat="$sPRIgldbl"
13657         nvEUformat="$sPRIEUldbl"
13658         nvFUformat="$sPRIFUldbl"
13659         nvGUformat="$sPRIGUldbl"
13660 else
13661         nveformat='"e"'
13662         nvfformat='"f"'
13663         nvgformat='"g"'
13664         nvEUformat='"E"'
13665         nvFUformat='"F"'
13666         nvGUformat='"G"'
13667 fi
13668
13669 case "$ivdformat" in
13670 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
13671     exit 1
13672     ;;
13673 esac
13674
13675
13676 echo " "
13677 $echo "Checking the format string to be used for gids..." >&4
13678
13679 case "$gidsign" in
13680 -1)     if $test X"$gidsize" = X"$ivsize"; then
13681                 gidformat="$ivdformat"
13682         else
13683                 if $test X"$gidsize" = X"$longsize"; then
13684                         gidformat='"ld"'
13685                 else
13686                         if $test X"$gidsize" = X"$intsize"; then
13687                                 gidformat='"d"'
13688                         else
13689                                 if $test X"$gidsize" = X"$shortsize"; then
13690                                         gidformat='"hd"'
13691                                 fi
13692                         fi
13693                 fi
13694         fi
13695         ;;
13696 *)      if $test X"$gidsize" = X"$uvsize"; then
13697                 gidformat="$uvuformat"
13698         else
13699                 if $test X"$gidsize" = X"$longsize"; then
13700                         gidformat='"lu"'
13701                 else
13702                         if $test X"$gidsize" = X"$intsize"; then
13703                                 gidformat='"u"'
13704                         else
13705                                 if $test X"$gidsize" = X"$shortsize"; then
13706                                         gidformat='"hu"'
13707                                 fi
13708                         fi
13709                 fi
13710         fi
13711         ;;
13712 esac
13713
13714 : see if getgroups exists
13715 set getgroups d_getgrps
13716 eval $inlibc
13717
13718 : see if setgroups exists
13719 set setgroups d_setgrps
13720 eval $inlibc
13721
13722
13723 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
13724 echo " "
13725 case "$d_getgrps$d_setgrps" in
13726 *define*)
13727         case "$groupstype" in
13728         '') dflt="$gidtype" ;;
13729         *)  dflt="$groupstype" ;;
13730         esac
13731         $cat <<EOM
13732 What type of pointer is the second argument to getgroups() and setgroups()?
13733 Usually this is the same as group ids, $gidtype, but not always.
13734
13735 EOM
13736         rp='What type pointer is the second argument to getgroups() and setgroups()?'
13737         . ./myread
13738         groupstype="$ans"
13739         ;;
13740 *)  groupstype="$gidtype";;
13741 esac
13742
13743 echo " "
13744 echo "Checking if your $make program sets \$(MAKE)..." >&4
13745 case "$make_set_make" in
13746 '')
13747         $sed 's/^X //' > testmake.mak << 'EOF'
13748 Xall:
13749 X       @echo 'maketemp="$(MAKE)"'
13750 EOF
13751         case "`$make -f testmake.mak 2>/dev/null`" in
13752         *maketemp=*) make_set_make='#' ;;
13753         *)      make_set_make="MAKE=$make" ;;
13754         esac
13755         $rm -f testmake.mak
13756         ;;
13757 esac
13758 case "$make_set_make" in
13759 '#') echo "Yup, it does.";;
13760 *) echo "Nope, it doesn't.";;
13761 esac
13762
13763 : see what type is used for mode_t
13764 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
13765 set mode_t modetype int stdio.h sys/types.h
13766 eval $typedef_ask
13767
13768 : see if stdarg is available
13769 echo " "
13770 if $test `./findhdr stdarg.h`; then
13771         echo "<stdarg.h> found." >&4
13772         valstd="$define"
13773 else
13774         echo "<stdarg.h> NOT found." >&4
13775         valstd="$undef"
13776 fi
13777
13778 : see if varags is available
13779 echo " "
13780 if $test `./findhdr varargs.h`; then
13781         echo "<varargs.h> found." >&4
13782 else
13783         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
13784 fi
13785
13786 : set up the varargs testing programs
13787 $cat > varargs.c <<EOP
13788 #ifdef I_STDARG
13789 #include <stdarg.h>
13790 #endif
13791 #ifdef I_VARARGS
13792 #include <varargs.h>
13793 #endif
13794
13795 #ifdef I_STDARG
13796 int f(char *p, ...)
13797 #else
13798 int f(va_alist)
13799 va_dcl
13800 #endif
13801 {
13802         va_list ap;
13803 #ifndef I_STDARG
13804         char *p;
13805 #endif
13806 #ifdef I_STDARG
13807         va_start(ap,p);
13808 #else
13809         va_start(ap);
13810         p = va_arg(ap, char *);
13811 #endif
13812         va_end(ap);
13813 }
13814 EOP
13815 $cat > varargs <<EOP
13816 $startsh
13817 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
13818         echo "true"
13819 else
13820         echo "false"
13821 fi
13822 $rm -f varargs$_o
13823 EOP
13824 chmod +x varargs
13825
13826 : now check which varargs header should be included
13827 echo " "
13828 i_varhdr=''
13829 case "$valstd" in
13830 "$define")
13831         if `./varargs I_STDARG`; then
13832                 val='stdarg.h'
13833         elif `./varargs I_VARARGS`; then
13834                 val='varargs.h'
13835         fi
13836         ;;
13837 *)
13838         if `./varargs I_VARARGS`; then
13839                 val='varargs.h'
13840         fi
13841         ;;
13842 esac
13843 case "$val" in
13844 '')
13845 echo "I could not find the definition for va_dcl... You have problems..." >&4
13846         val="$undef"; set i_stdarg; eval $setvar
13847         val="$undef"; set i_varargs; eval $setvar
13848         ;;
13849 *) 
13850         set i_varhdr
13851         eval $setvar
13852         case "$i_varhdr" in
13853         stdarg.h)
13854                 val="$define"; set i_stdarg; eval $setvar
13855                 val="$undef"; set i_varargs; eval $setvar
13856                 ;;
13857         varargs.h)
13858                 val="$undef"; set i_stdarg; eval $setvar
13859                 val="$define"; set i_varargs; eval $setvar
13860                 ;;
13861         esac
13862         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
13863 esac
13864 $rm -f varargs*
13865
13866 : see if we need va_copy
13867 echo " "
13868 case "$i_stdarg" in
13869 "$define")
13870         $cat >try.c <<EOCP
13871 #include <stdarg.h>
13872 #include <stdio.h>
13873 #$i_stdlib I_STDLIB
13874 #ifdef I_STDLIB
13875 #include <stdlib.h>
13876 #endif
13877 #include <signal.h>
13878
13879 int
13880 ivfprintf(FILE *f, const char *fmt, va_list *valp)
13881 {
13882   return vfprintf(f, fmt, *valp);
13883 }
13884  
13885 int    
13886 myvfprintf(FILE *f, const  char *fmt, va_list val)
13887 {
13888   return ivfprintf(f, fmt, &val);
13889 }
13890       
13891 int
13892 myprintf(char *fmt, ...) 
13893 {
13894   va_list val;
13895   va_start(val, fmt);
13896   return myvfprintf(stdout, fmt, val); 
13897 }         
13898
13899 int
13900 main(int ac, char **av)
13901 {
13902   signal(SIGSEGV, exit);
13903
13904   myprintf("%s%cs all right, then\n", "that", '\'');                            
13905   exit(0);      
13906 }
13907 EOCP
13908         set try
13909         if eval $compile && ./try 2>&1 >/dev/null; then
13910                 case "`./try`" in
13911                 "that's all right, then")
13912                         okay=yes
13913                         ;;
13914                 esac
13915         fi
13916         case "$okay" in
13917         yes)    echo "It seems that you don't need va_copy()." >&4
13918                 need_va_copy="$undef"
13919                 ;;
13920         *)      echo "It seems that va_copy() or similar will be needed." >&4
13921                 need_va_copy="$define"
13922                 ;;
13923         esac
13924         $rm -f try.* core core.* *.core *.core.*
13925         ;;
13926 *)      echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
13927         ;;
13928 esac
13929
13930 : define a fucntion to check prototypes
13931 $cat > protochk <<EOSH
13932 $startsh
13933 cc="$cc"
13934 optimize="$optimize"
13935 ccflags="$ccflags"
13936 prototype="$prototype"
13937 define="$define"
13938 rm=$rm
13939 EOSH
13940
13941 $cat >> protochk <<'EOSH'
13942
13943 $rm -f try.c
13944 foo="$1"
13945 shift
13946 while test $# -ge 2; do
13947         case "$1" in
13948                 $define) echo "#include <$2>" >> try.c ;;
13949                 literal) echo "$2" >> try.c ;;
13950         esac
13951     shift 2
13952 done
13953 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
13954 cat >> try.c <<'EOCP'
13955 #ifdef CAN_PROTOTYPE
13956 #define _(args) args
13957 #else
13958 #define _(args) ()
13959 #endif
13960 EOCP
13961 echo "$foo" >> try.c
13962 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
13963 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
13964 status=$?
13965 $rm -f try.[co]
13966 exit $status
13967 EOSH
13968 chmod +x protochk
13969 $eunicefix protochk
13970
13971 : see what type is used for size_t
13972 rp="What is the type used for the length parameter for string functions?"
13973 set size_t sizetype 'unsigned int' stdio.h sys/types.h
13974 eval $typedef_ask
13975
13976 : check for type of arguments to gethostbyaddr. 
13977 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
13978         case "$d_gethbyaddr" in
13979         $define)
13980                 $cat <<EOM
13981
13982 Checking to see what type of arguments are accepted by gethostbyaddr().
13983 EOM
13984                 hdrs="$define sys/types.h
13985                         $d_socket sys/socket.h 
13986                         $i_niin netinet/in.h 
13987                         $i_netdb netdb.h
13988                         $i_unistd unistd.h"
13989                 : The first arg can 'char *' or 'void *'
13990                 : The second arg is some of integral type
13991                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
13992                         for yyy in size_t long int; do
13993                                 case "$netdb_host_type" in
13994                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
13995                                         if ./protochk "$try" $hdrs; then
13996                                                 echo "Your system accepts $xxx for the first arg."
13997                                                 echo "...and $yyy for the second arg."
13998                                                 netdb_host_type="$xxx"
13999                                                 netdb_hlen_type="$yyy"
14000                                         fi
14001                                         ;;
14002                                 esac
14003                         done
14004                 done
14005                 : In case none of those worked, prompt the user.
14006                 case "$netdb_host_type" in
14007                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
14008                         dflt='char *'
14009                         . ./myread
14010                         netdb_host_type=$ans
14011                         rp='What is the type for the 2nd argument to gethostbyaddr?'
14012                         dflt="$sizetype"
14013                         . ./myread
14014                         netdb_hlen_type=$ans
14015                         ;;
14016                 esac
14017                 ;;
14018         *)      : no gethostbyaddr, so pick harmless defaults
14019                 netdb_host_type='char *'
14020                 netdb_hlen_type="$sizetype"
14021                 ;;
14022         esac
14023         # Remove the "const" if needed. -- but then we'll have a 
14024         # prototype clash!
14025         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
14026 fi
14027
14028 : check for type of argument to gethostbyname. 
14029 if test "X$netdb_name_type" = X ; then
14030         case "$d_gethbyname" in
14031         $define)
14032                 $cat <<EOM
14033
14034 Checking to see what type of argument is accepted by gethostbyname().
14035 EOM
14036                 hdrs="$define sys/types.h
14037                         $d_socket sys/socket.h 
14038                         $i_niin netinet/in.h 
14039                         $i_netdb netdb.h
14040                         $i_unistd unistd.h"
14041                 for xxx in "const char *" "char *"; do
14042                         case "$netdb_name_type" in
14043                         '')     try="extern struct hostent *gethostbyname($xxx);"
14044                                 if ./protochk "$try" $hdrs; then
14045                                         echo "Your system accepts $xxx."
14046                                         netdb_name_type="$xxx"
14047                                 fi
14048                                 ;;
14049                         esac
14050                 done
14051                 : In case none of those worked, prompt the user.
14052                 case "$netdb_name_type" in
14053                 '')     rp='What is the type for the 1st argument to gethostbyname?'
14054                         dflt='char *'
14055                         . ./myread
14056                         netdb_name_type=$ans
14057                         ;;
14058                 esac
14059                 ;;
14060         *)      : no gethostbyname, so pick harmless default
14061                 netdb_name_type='char *'
14062                 ;;
14063         esac
14064 fi
14065
14066 : check for type of 1st argument to getnetbyaddr. 
14067 if test "X$netdb_net_type" = X ; then
14068         case "$d_getnbyaddr" in
14069         $define)
14070                 $cat <<EOM
14071
14072 Checking to see what type of 1st argument is accepted by getnetbyaddr().
14073 EOM
14074                 hdrs="$define sys/types.h
14075                         $d_socket sys/socket.h 
14076                         $i_niin netinet/in.h 
14077                         $i_netdb netdb.h
14078                         $i_unistd unistd.h"
14079                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
14080                         case "$netdb_net_type" in
14081                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
14082                                 if ./protochk "$try" $hdrs; then
14083                                         echo "Your system accepts $xxx."
14084                                         netdb_net_type="$xxx"
14085                                 fi
14086                                 ;;
14087                         esac
14088                 done
14089                 : In case none of those worked, prompt the user.
14090                 case "$netdb_net_type" in
14091                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
14092                         dflt='long'
14093                         . ./myread
14094                         netdb_net_type=$ans
14095                         ;;
14096                 esac
14097                 ;;
14098         *)      : no getnetbyaddr, so pick harmless default
14099                 netdb_net_type='long'
14100                 ;;
14101         esac
14102 fi
14103 : locate the preferred pager for this system
14104 case "$pager" in
14105 '')
14106         dflt=''
14107         case "$pg" in
14108         /*) dflt=$pg;;
14109         [a-zA-Z]:/*) dflt=$pg;;
14110         esac
14111         case "$more" in
14112         /*) dflt=$more;;
14113         [a-zA-Z]:/*) dflt=$more;;
14114         esac
14115         case "$less" in
14116         /*) dflt=$less;;
14117         [a-zA-Z]:/*) dflt=$less;;
14118         esac
14119         case "$dflt" in
14120         '') dflt=/usr/ucb/more;;
14121         esac
14122         ;;
14123 *) dflt="$pager";;
14124 esac
14125 echo " "
14126 fn=f/
14127 rp='What pager is used on your system?'
14128 . ./getfile
14129 pager="$ans"
14130
14131 : see what type pids are declared as in the kernel
14132 rp="What is the type of process ids on this system?"
14133 set pid_t pidtype int stdio.h sys/types.h
14134 eval $typedef_ask
14135
14136 : Find earliest binary compatible site_perl subdirectory perl can use.
14137 case "$bincompat5005" in
14138 "$define") xs_apiversion='5.005' ;;
14139 *) xs_apiversion=$version ;;   # The current site_perl version.
14140 esac
14141 : Find earliest pure perl site_perl subdirectory perl can use.
14142 : The versioned directories started at 5.005.
14143 pm_apiversion='5.005'
14144
14145 : check for length of pointer
14146 echo " "
14147 case "$ptrsize" in
14148 '')
14149         echo "Checking to see how big your pointers are..." >&4
14150         if test "$voidflags" -gt 7; then
14151                 echo '#define VOID_PTR char *' > try.c
14152         else
14153                 echo '#define VOID_PTR void *' > try.c
14154         fi
14155         $cat >>try.c <<'EOCP'
14156 #include <stdio.h>
14157 int main()
14158 {
14159     printf("%d\n", (int)sizeof(VOID_PTR));
14160     exit(0);
14161 }
14162 EOCP
14163         set try
14164         if eval $compile_ok; then
14165                 ptrsize=`./try`
14166                 echo "Your pointers are $ptrsize bytes long."
14167         else
14168                 dflt='4'
14169                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
14170                 rp="What is the size of a pointer (in bytes)?"
14171                 . ./myread
14172                 ptrsize="$ans"
14173         fi
14174         ;;
14175 esac
14176 $rm -f try.c try
14177
14178 : see if ar generates random libraries by itself
14179 echo " "
14180 echo "Checking how to generate random libraries on your machine..." >&4
14181 echo 'int bar1() { return bar2(); }' > bar1.c
14182 echo 'int bar2() { return 2; }' > bar2.c
14183 $cat > foo.c <<'EOP'
14184 int main() { printf("%d\n", bar1()); exit(0); }
14185 EOP
14186 $cc $ccflags -c bar1.c >/dev/null 2>&1
14187 $cc $ccflags -c bar2.c >/dev/null 2>&1
14188 $cc $ccflags -c foo.c >/dev/null 2>&1
14189 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
14190 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
14191         ./foobar >/dev/null 2>&1; then
14192         echo "$ar appears to generate random libraries itself."
14193         orderlib=false
14194         ranlib=":"
14195 elif $ar ts bar$_a >/dev/null 2>&1 &&
14196         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
14197         ./foobar >/dev/null 2>&1; then
14198                 echo "a table of contents needs to be added with '$ar ts'."
14199                 orderlib=false
14200                 ranlib="$ar ts"
14201 else
14202         case "$ranlib" in
14203         :) ranlib='';;
14204         '')
14205                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
14206                 $test -f $ranlib || ranlib=''
14207                 ;;
14208         esac
14209         if $test -n "$ranlib"; then
14210                 echo "your system has '$ranlib'; we'll use that."
14211                 orderlib=false
14212         else
14213                 echo "your system doesn't seem to support random libraries"
14214                 echo "so we'll use lorder and tsort to order the libraries."
14215                 orderlib=true
14216                 ranlib=":"
14217         fi
14218 fi
14219 $rm -f foo* bar* 
14220
14221 : check for type of arguments to select. 
14222 case "$selecttype" in
14223 '') case "$d_select" in
14224         $define)
14225                 echo " "
14226                 $cat <<EOM
14227 Checking to see what type of arguments are accepted by select().
14228 EOM
14229                 hdrs="$define sys/types.h
14230                         $i_systime sys/time.h 
14231                         $i_sysselct sys/select.h
14232                         $d_socket sys/socket.h"
14233                 : The first arg can be int, unsigned, or size_t
14234                 : The last arg may or may not be 'const'
14235                 val=''
14236                 : void pointer has been seen but using that
14237                 : breaks the selectminbits test
14238                 for xxx in 'fd_set *' 'int *'; do
14239                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
14240                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
14241                                         case "$val" in
14242                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
14243                                                 if ./protochk "$try" $hdrs; then
14244                                                         echo "Your system accepts $xxx."
14245                                                         val="$xxx"
14246                                                 fi
14247                                                 ;;
14248                                         esac
14249                                 done
14250                         done
14251                 done
14252                 case "$val" in
14253                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
14254                         case "$d_fd_set" in
14255                                 $define) dflt="fd_set *" ;;
14256                                 *)              dflt="int *" ;;
14257                         esac
14258                         . ./myread
14259                         val=$ans
14260                         ;;
14261                 esac
14262                 selecttype="$val"
14263                 ;;
14264         *)      : no select, so pick a harmless default
14265                 selecttype='int *'
14266                 ;;
14267         esac
14268         ;;
14269 esac
14270
14271 : check for the select 'width'
14272 case "$selectminbits" in
14273 '') case "$d_select" in
14274         $define)
14275                 $cat <<EOM
14276
14277 Checking to see on how many bits at a time your select() operates...
14278 EOM
14279                 $cat >try.c <<EOCP
14280 #include <sys/types.h>
14281 #$i_time I_TIME
14282 #$i_systime I_SYS_TIME
14283 #$i_systimek I_SYS_TIME_KERNEL
14284 #ifdef I_TIME
14285 #   include <time.h>
14286 #endif
14287 #ifdef I_SYS_TIME
14288 #   ifdef I_SYS_TIME_KERNEL
14289 #       define KERNEL
14290 #   endif
14291 #   include <sys/time.h>
14292 #   ifdef I_SYS_TIME_KERNEL
14293 #       undef KERNEL
14294 #   endif
14295 #endif
14296 #$i_sysselct I_SYS_SELECT
14297 #ifdef I_SYS_SELECT
14298 #include <sys/select.h>
14299 #endif
14300 #$d_socket HAS_SOCKET
14301 #ifdef HAS_SOCKET
14302 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
14303 #endif
14304 #include <stdio.h>
14305 $selecttype b;
14306 #define S sizeof(*(b))
14307 #define MINBITS 64
14308 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
14309 #define NBITS  (NBYTES * 8)
14310 int main() {
14311     char s[NBYTES];
14312     struct timeval t;
14313     int i;
14314     FILE* fp;
14315     int fd;
14316
14317     fclose(stdin);
14318     fp = fopen("try.c", "r");
14319     if (fp == 0)
14320       exit(1);
14321     fd = fileno(fp);
14322     if (fd < 0)
14323       exit(2);
14324     b = ($selecttype)s;
14325     for (i = 0; i < NBITS; i++)
14326         FD_SET(i, b);
14327     t.tv_sec  = 0;
14328     t.tv_usec = 0;
14329     select(fd + 1, b, 0, 0, &t);
14330     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
14331     printf("%d\n", i + 1);
14332     return 0;
14333 }
14334 EOCP
14335                 set try
14336                 if eval $compile_ok; then
14337                         selectminbits=`./try`
14338                         case "$selectminbits" in
14339                         '')     cat >&4 <<EOM
14340 Cannot figure out on how many bits at a time your select() operates.
14341 I'll play safe and guess it is 32 bits.
14342 EOM
14343                                 selectminbits=32
14344                                 bits="32 bits"
14345                                 ;;
14346                         1)      bits="1 bit" ;;
14347                         *)      bits="$selectminbits bits" ;;
14348                         esac
14349                         echo "Your select() operates on $bits at a time." >&4
14350                 else
14351                         rp='What is the minimum number of bits your select() operates on?'
14352                         case "$byteorder" in
14353                         1234|12345678)  dflt=32 ;;
14354                         *)              dflt=1  ;;
14355                         esac
14356                         . ./myread
14357                         val=$ans
14358                         selectminbits="$val"
14359                 fi
14360                 $rm -f try.* try
14361                 ;;
14362         *)      : no select, so pick a harmless default
14363                 selectminbits='32'
14364                 ;;
14365         esac
14366         ;;
14367 esac
14368
14369 : Trace out the files included by signal.h, then look for SIGxxx names.
14370 : Remove SIGARRAYSIZE used by HPUX.
14371 : Remove SIGSTKSIZE used by Linux.
14372 : Remove SIGSTKSZ used by Posix.
14373 : Remove SIGTYP void lines used by OS2.
14374 : Some cpps, like os390, dont give the file name anywhere
14375 if [ "X$fieldn" = X ]; then
14376         : Just make some guesses.  We check them later.
14377         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
14378 else
14379         xxx=`echo '#include <signal.h>' |
14380         $cppstdin $cppminus $cppflags 2>/dev/null |
14381         $grep '^[       ]*#.*include' | 
14382         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
14383 fi
14384 : Check this list of files to be sure we have parsed the cpp output ok.
14385 : This will also avoid potentially non-existent files, such 
14386 : as ../foo/bar.h
14387 xxxfiles=''
14388 for xx in $xxx /dev/null ; do
14389         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
14390 done
14391 : If we have found no files, at least try signal.h
14392 case "$xxxfiles" in
14393 '')     xxxfiles=`./findhdr signal.h` ;;
14394 esac
14395 xxx=`awk '
14396 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
14397         print substr($2, 4, 20)
14398 }
14399 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
14400         print substr($3, 4, 20)
14401 }' $xxxfiles`
14402 : Append some common names just in case the awk scan failed.
14403 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
14404 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
14405 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
14406 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
14407 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
14408
14409 : generate a few handy files for later
14410 $cat > signal.c <<'EOCP'
14411 #include <sys/types.h>
14412 #include <signal.h>
14413 #include <stdio.h>
14414 int main() {
14415
14416 /* Strange style to avoid deeply-nested #if/#else/#endif */
14417 #ifndef NSIG
14418 #  ifdef _NSIG
14419 #    define NSIG (_NSIG)
14420 #  endif
14421 #endif
14422
14423 #ifndef NSIG
14424 #  ifdef SIGMAX
14425 #    define NSIG (SIGMAX+1)
14426 #  endif
14427 #endif
14428
14429 #ifndef NSIG
14430 #  ifdef SIG_MAX
14431 #    define NSIG (SIG_MAX+1)
14432 #  endif
14433 #endif
14434
14435 #ifndef NSIG
14436 #  ifdef MAXSIG
14437 #    define NSIG (MAXSIG+1)
14438 #  endif
14439 #endif
14440
14441 #ifndef NSIG
14442 #  ifdef MAX_SIG
14443 #    define NSIG (MAX_SIG+1)
14444 #  endif
14445 #endif
14446
14447 #ifndef NSIG
14448 #  ifdef SIGARRAYSIZE
14449 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
14450 #  endif
14451 #endif
14452
14453 #ifndef NSIG
14454 #  ifdef _sys_nsig
14455 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
14456 #  endif
14457 #endif
14458
14459 /* Default to some arbitrary number that's big enough to get most
14460    of the common signals.
14461 */
14462 #ifndef NSIG
14463 #    define NSIG 50
14464 #endif
14465
14466 printf("NSIG %d\n", NSIG);
14467
14468 #ifndef JUST_NSIG
14469
14470 EOCP
14471
14472 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
14473 {
14474         printf "#ifdef SIG"; printf $1; printf "\n"
14475         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
14476         printf $1; printf ");\n"
14477         printf "#endif\n"
14478 }
14479 END {
14480         printf "#endif /* JUST_NSIG */\n";
14481         printf "exit(0);\n}\n";
14482 }
14483 ' >>signal.c
14484 $cat >signal.awk <<'EOP'
14485 BEGIN { ndups = 0 }
14486 $1 ~ /^NSIG$/ { nsig = $2 }
14487 ($1 !~ /^NSIG$/) && (NF == 2) {
14488     if ($2 > maxsig) { maxsig = $2 }
14489     if (sig_name[$2]) {
14490         dup_name[ndups] = $1
14491         dup_num[ndups] = $2
14492         ndups++ 
14493     }
14494     else {
14495         sig_name[$2] = $1
14496         sig_num[$2] = $2
14497     }
14498 }
14499 END { 
14500     if (nsig == 0) {
14501         nsig = maxsig + 1
14502     }
14503     printf("NSIG %d\n", nsig);
14504     for (n = 1; n < nsig; n++) {
14505         if (sig_name[n]) {
14506             printf("%s %d\n", sig_name[n], sig_num[n])
14507         }
14508         else {
14509             printf("NUM%d %d\n", n, n) 
14510         }
14511     }
14512     for (n = 0; n < ndups; n++) {
14513         printf("%s %d\n", dup_name[n], dup_num[n])
14514     }
14515 }
14516 EOP
14517 $cat >signal_cmd <<EOS
14518 $startsh
14519 if $test -s signal.lst; then
14520     echo "Using your existing signal.lst file"
14521         exit 0
14522 fi
14523 xxx="$xxx"
14524 EOS
14525 $cat >>signal_cmd <<'EOS'
14526
14527 set signal
14528 if eval $compile_ok; then
14529         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
14530 else
14531         echo "(I can't seem be able to compile the whole test program)" >&4
14532         echo "(I'll try it in little pieces.)" >&4
14533         set signal -DJUST_NSIG
14534         if eval $compile_ok; then
14535                 ./signal$_exe > signal.nsg
14536                 $cat signal.nsg
14537         else
14538                 echo "I can't seem to figure out how many signals you have." >&4
14539                 echo "Guessing 50." >&4
14540                 echo 'NSIG 50' > signal.nsg
14541         fi
14542         : Now look at all the signal names, one at a time.
14543         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
14544                 $cat > signal.c <<EOCP
14545 #include <sys/types.h>
14546 #include <signal.h>
14547 #include <stdio.h>
14548 int main() {
14549 printf("$xx %d\n", SIG${xx});
14550 return 0;
14551 }
14552 EOCP
14553                 set signal
14554                 if eval $compile; then
14555                         echo "SIG${xx} found."
14556                         ./signal$_exe  >> signal.ls1
14557                 else
14558                         echo "SIG${xx} NOT found."
14559                 fi
14560         done
14561         if $test -s signal.ls1; then
14562                 $cat signal.nsg signal.ls1 |
14563                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
14564         fi
14565
14566 fi
14567 if $test -s signal.lst; then
14568         :
14569 else
14570         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
14571         echo 'kill -l' >signal
14572         set X `csh -f <signal`
14573         $rm -f signal
14574         shift
14575         case $# in
14576         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
14577         esac
14578         echo $@ | $tr ' ' $trnl | \
14579             $awk '{ printf "%s %d\n", $1, ++s; }
14580                   END { printf "NSIG %d\n", ++s }' >signal.lst
14581 fi
14582 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
14583 EOS
14584 chmod a+x signal_cmd
14585 $eunicefix signal_cmd
14586
14587 : generate list of signal names
14588 echo " "
14589 case "$sig_name_init" in
14590 '') doinit=yes ;;
14591 *)  case "$sig_num_init" in
14592     ''|*,*) doinit=yes ;;
14593     esac ;;
14594 esac
14595 case "$doinit" in
14596 yes)
14597         echo "Generating a list of signal names and numbers..." >&4
14598         . ./signal_cmd
14599         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
14600         sig_name=`$awk 'BEGIN { printf "ZERO " }
14601                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
14602         sig_num=`$awk  'BEGIN { printf "0 " }
14603                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
14604         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
14605                              !/^NSIG/   { printf "\"%s\", ", $1 }
14606                              END        { printf "0\n" }' signal.lst`
14607         sig_num_init=`$awk  'BEGIN      { printf "0, " }
14608                              !/^NSIG/   { printf "%d, ", $2}
14609                              END        { printf "0\n"}' signal.lst`
14610         ;;
14611 esac
14612 echo "The following $sig_count signals are available:"
14613 echo " "
14614 echo $sig_name | $awk \
14615 'BEGIN { linelen = 0 }
14616 {
14617         for (i = 1; i <= NF; i++) {
14618                 name = "SIG" $i " "
14619                 linelen = linelen + length(name)
14620                 if (linelen > 70) {
14621                         printf "\n"
14622                         linelen = length(name)
14623                 }
14624                 printf "%s", name
14625         }
14626         printf "\n"
14627 }'
14628 sig_size=`echo $sig_name | awk '{print NF}'`
14629 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
14630
14631 echo " "
14632 case "$sizetype" in
14633 *_t) zzz="$sizetype"    ;;
14634 *)   zzz="filesize"     ;;
14635 esac
14636 echo "Checking the size of $zzz..." >&4 
14637 cat > try.c <<EOCP
14638 #include <sys/types.h>
14639 #include <stdio.h>
14640 int main() {
14641     printf("%d\n", (int)sizeof($sizetype));
14642     exit(0);
14643 }
14644 EOCP
14645 set try
14646 if eval $compile_ok; then
14647         yyy=`./try`
14648         case "$yyy" in
14649         '')     sizesize=4
14650                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
14651                 ;;
14652         *)      sizesize=$yyy
14653                 echo "Your $zzz size is $sizesize bytes."
14654                 ;;
14655         esac
14656 else
14657         sizesize=4
14658         echo "(I can't compile the test program--guessing $sizesize.)" >&4
14659 fi
14660
14661
14662 : check for socklen_t
14663 echo " "
14664 echo "Checking to see if you have socklen_t..." >&4
14665 $cat >try.c <<EOCP
14666 #include <sys/types.h>
14667 #$d_socket HAS_SOCKET
14668 #ifdef HAS_SOCKET
14669 #include <sys/socket.h>
14670 #endif
14671 int main() { socklen_t x = 16; }
14672 EOCP
14673 set try
14674 if eval $compile; then
14675         val="$define"
14676         echo "You have socklen_t."
14677 else
14678         val="$undef"
14679         echo "You do not have socklen_t."
14680         case "$sizetype" in
14681         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
14682         esac
14683 fi
14684 $rm -f try try.*
14685 set d_socklen_t
14686 eval $setvar
14687
14688 : see if this is a socks.h system
14689 set socks.h i_socks
14690 eval $inhdr
14691
14692 : check for type of the size argument to socket calls
14693 case "$d_socket" in
14694 "$define")
14695         $cat <<EOM
14696
14697 Checking to see what type is the last argument of accept().
14698 EOM
14699         yyy=''
14700         case "$d_socklen_t" in
14701         "$define") yyy="$yyy socklen_t"
14702         esac
14703         yyy="$yyy $sizetype int long unsigned"
14704         for xxx in $yyy; do
14705                 case "$socksizetype" in
14706                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
14707                         case "$usesocks" in
14708                         "$define")
14709                                 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
14710                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
14711                                         socksizetype="$xxx"
14712                                 fi
14713                                 ;;
14714                         *)      if ./protochk "$try"  $i_systypes sys/types.h $d_socket sys/socket.h; then
14715                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
14716                                         socksizetype="$xxx"
14717                                 fi
14718                                 ;;
14719                         esac
14720                         ;;
14721                 esac
14722         done
14723 : In case none of those worked, prompt the user.
14724         case "$socksizetype" in
14725         '')     rp='What is the type for socket address structure sizes?'
14726                 dflt='int'
14727                 . ./myread
14728                 socksizetype=$ans
14729                 ;;
14730         esac
14731         ;;
14732 *)      : no sockets, so pick relatively harmless default
14733         socksizetype='int'
14734         ;;
14735 esac
14736
14737 : see what type is used for signed size_t
14738 set ssize_t ssizetype int stdio.h sys/types.h
14739 eval $typedef
14740 dflt="$ssizetype"
14741 $cat > ssize.c <<EOM
14742 #include <stdio.h>
14743 #include <sys/types.h>
14744 #define Size_t $sizetype
14745 #define SSize_t $dflt
14746 int main()
14747 {
14748         if (sizeof(Size_t) == sizeof(SSize_t))
14749                 printf("$dflt\n");
14750         else if (sizeof(Size_t) == sizeof(int))
14751                 printf("int\n");
14752         else 
14753                 printf("long\n");
14754         exit(0);
14755 }
14756 EOM
14757 echo " "
14758 set ssize
14759 if eval $compile_ok && ./ssize > /dev/null; then
14760         ssizetype=`./ssize`
14761         echo "I'll be using $ssizetype for functions returning a byte count." >&4
14762 else
14763         $cat >&4 <<EOM
14764 Help! I can't compile and run the ssize_t test program: please enlighten me!
14765 (This is probably a misconfiguration in your system or libraries, and
14766 you really ought to fix it.  Still, I'll try anyway.)
14767
14768 I need a type that is the same size as $sizetype, but is guaranteed to
14769 be signed.  Common values are ssize_t, int and long.
14770
14771 EOM
14772         rp="What signed type is the same size as $sizetype?"
14773         . ./myread
14774         ssizetype="$ans"
14775 fi
14776 $rm -f ssize ssize.*
14777
14778 : see what type of char stdio uses.
14779 echo " "
14780 echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
14781 if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
14782         echo "Your stdio uses unsigned chars." >&4
14783         stdchar="unsigned char"
14784 else
14785         echo "Your stdio uses signed chars." >&4
14786         stdchar="char"
14787 fi
14788 $rm -f stdioh
14789
14790
14791
14792 : see if time exists
14793 echo " "
14794 if test "X$d_time" = X -o X"$timetype" = X; then
14795     if set time val -f d_time; eval $csym; $val; then
14796                 echo 'time() found.' >&4
14797                 val="$define"
14798                 rp="What is the type returned by time() on this system?"
14799                 set time_t timetype long stdio.h sys/types.h
14800                 eval $typedef_ask
14801     else
14802                 echo 'time() not found, hope that will do.' >&4
14803                 val="$undef"
14804                 timetype='int';
14805     fi
14806     set d_time
14807     eval $setvar
14808 fi
14809
14810 : see what type uids are declared as in the kernel
14811 echo " "
14812 echo "Looking for the type for user ids returned by getuid()."
14813 set uid_t uidtype xxx stdio.h sys/types.h
14814 eval $typedef
14815 case "$uidtype" in
14816 xxx)
14817         xxx=`./findhdr sys/user.h`
14818         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
14819         case $1 in
14820         unsigned) dflt="$1 $2" ;;
14821         *) dflt="$1" ;;
14822         esac
14823         ;;
14824 *) dflt="$uidtype";;
14825 esac
14826 case "$uidtype" in
14827 uid_t)  echo "uid_t found." ;;
14828 *)      rp="What is the type for user ids returned by getuid()?"
14829         . ./myread
14830         uidtype="$ans"
14831         ;;
14832 esac
14833
14834 echo " "
14835 case "$uidtype" in
14836 *_t) zzz="$uidtype"     ;;
14837 *)   zzz="uid"          ;;
14838 esac
14839 echo "Checking the size of $zzz..." >&4 
14840 cat > try.c <<EOCP
14841 #include <sys/types.h>
14842 #include <stdio.h>
14843 int main() {
14844     printf("%d\n", (int)sizeof($uidtype));
14845     exit(0);
14846 }
14847 EOCP
14848 set try
14849 if eval $compile_ok; then
14850         yyy=`./try`
14851         case "$yyy" in
14852         '')     uidsize=4
14853                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
14854                 ;;
14855         *)      uidsize=$yyy
14856                 echo "Your $zzz is $uidsize bytes long."
14857                 ;;
14858         esac
14859 else
14860         uidsize=4
14861         echo "(I can't compile the test program--guessing $uidsize.)" >&4
14862 fi
14863
14864 echo " "
14865 case "$uidtype" in
14866 *_t) zzz="$uidtype"     ;;
14867 *)   zzz="uid"          ;;
14868 esac
14869 echo "Checking the sign of $zzz..." >&4
14870 cat > try.c <<EOCP
14871 #include <sys/types.h>
14872 #include <stdio.h>
14873 int main() {
14874         $uidtype foo = -1;
14875         if (foo < 0)
14876                 printf("-1\n");
14877         else
14878                 printf("1\n");
14879 }
14880 EOCP
14881 set try
14882 if eval $compile; then
14883         yyy=`./try`
14884         case "$yyy" in
14885         '')     uidsign=1
14886                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14887                 ;;
14888         *)      uidsign=$yyy
14889                 case "$uidsign" in
14890                  1) echo "Your $zzz is unsigned." ;;
14891                 -1) echo "Your $zzz is signed."   ;;
14892                 esac
14893                 ;;
14894         esac
14895 else
14896         uidsign=1
14897         echo "(I can't compile the test program--guessing unsigned.)" >&4
14898 fi
14899
14900
14901
14902 echo " "
14903 $echo "Checking the format string to be used for uids..." >&4
14904
14905 case "$uidsign" in
14906 -1)     if $test X"$uidsize" = X"$ivsize"; then
14907                 uidformat="$ivdformat"
14908         else
14909                 if $test X"$uidsize" = X"$longsize"; then
14910                         uidformat='"ld"'
14911                 else
14912                         if $test X"$uidsize" = X"$intsize"; then
14913                                 uidformat='"d"'
14914                         else
14915                                 if $test X"$uidsize" = X"$shortsize"; then
14916                                         uidformat='"hd"'
14917                                 fi
14918                         fi
14919                 fi
14920         fi
14921         ;;
14922 *)      if $test X"$uidsize" = X"$uvsize"; then
14923                 uidformat="$uvuformat"
14924         else
14925                 if $test X"$uidsize" = X"$longsize"; then
14926                         uidformat='"lu"'
14927                 else
14928                         if $test X"$uidsize" = X"$intsize"; then
14929                                 uidformat='"u"'
14930                         else
14931                                 if $test X"$uidsize" = X"$shortsize"; then
14932                                         uidformat='"hu"'
14933                                 fi
14934                         fi
14935                 fi
14936         fi
14937         ;;
14938 esac
14939
14940 : determine compiler compiler
14941 case "$yacc" in
14942 '')
14943         dflt=yacc;;
14944 *)
14945         dflt="$yacc";;
14946 esac
14947 echo " "
14948 comp='yacc'
14949 if $test -f "$byacc"; then
14950         dflt="$byacc"
14951         comp="byacc or $comp"
14952 fi
14953 if $test -f "$bison"; then
14954         comp="$comp or bison -y"
14955 fi
14956 rp="Which compiler compiler ($comp) shall I use?"
14957 . ./myread
14958 yacc="$ans"
14959 case "$yacc" in
14960 *bis*)
14961         case "$yacc" in
14962         *-y*) ;;
14963         *)
14964                 yacc="$yacc -y"
14965                 echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
14966                 ;;
14967         esac
14968         ;;
14969 esac
14970
14971 : see if dbm.h is available
14972 : see if dbmclose exists
14973 set dbmclose d_dbmclose
14974 eval $inlibc
14975
14976 case "$d_dbmclose" in
14977 $define)
14978         set dbm.h i_dbm
14979         eval $inhdr
14980         case "$i_dbm" in
14981         $define)
14982                 val="$undef"
14983                 set i_rpcsvcdbm
14984                 eval $setvar
14985                 ;;
14986         *)      set rpcsvc/dbm.h i_rpcsvcdbm
14987                 eval $inhdr
14988                 ;;
14989         esac
14990         ;;
14991 *)      echo "We won't be including <dbm.h>"
14992         val="$undef"
14993         set i_dbm
14994         eval $setvar
14995         val="$undef"
14996         set i_rpcsvcdbm
14997         eval $setvar
14998         ;;
14999 esac
15000
15001 : see if this is a sys/file.h system
15002 val=''
15003 set sys/file.h val
15004 eval $inhdr
15005
15006 : do we need to include sys/file.h ?
15007 case "$val" in
15008 "$define")
15009         echo " "
15010         if $h_sysfile; then
15011                 val="$define"
15012                 echo "We'll be including <sys/file.h>." >&4
15013         else
15014                 val="$undef"
15015                 echo "We won't be including <sys/file.h>." >&4
15016         fi
15017         ;;
15018 *)
15019         h_sysfile=false
15020         ;;
15021 esac
15022 set i_sysfile
15023 eval $setvar
15024
15025 : see if fcntl.h is there
15026 val=''
15027 set fcntl.h val
15028 eval $inhdr
15029
15030 : see if we can include fcntl.h
15031 case "$val" in
15032 "$define")
15033         echo " "
15034         if $h_fcntl; then
15035                 val="$define"
15036                 echo "We'll be including <fcntl.h>." >&4
15037         else
15038                 val="$undef"
15039                 if $h_sysfile; then
15040         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
15041                 else
15042                         echo "We won't be including <fcntl.h>." >&4
15043                 fi
15044         fi
15045         ;;
15046 *)
15047         h_fcntl=false
15048         val="$undef"
15049         ;;
15050 esac
15051 set i_fcntl
15052 eval $setvar
15053
15054 : see if this is a iconv.h system
15055 set iconv.h i_iconv
15056 eval $inhdr
15057
15058 : see if this is a ieeefp.h system
15059 set ieeefp.h i_ieeefp
15060 eval $inhdr
15061
15062 : see if this is a libutil.h system
15063 set libutil.h i_libutil
15064 eval $inhdr
15065
15066 : see if locale.h is available
15067 set locale.h i_locale
15068 eval $inhdr
15069
15070 : see if mach cthreads are available
15071 if test "X$usethreads" = "X$define"; then
15072         set mach/cthreads.h i_machcthr
15073         eval $inhdr
15074 else
15075         i_machcthr="$undef"
15076 fi
15077
15078
15079
15080 : see if this is a math.h system
15081 set math.h i_math
15082 eval $inhdr
15083
15084 : see if this is a mntent.h system
15085 set mntent.h i_mntent
15086 eval $inhdr
15087
15088 : see if ndbm.h is available
15089 set ndbm.h t_ndbm
15090 eval $inhdr
15091 case "$t_ndbm" in
15092 $define)
15093         : see if dbm_open exists
15094         set dbm_open d_dbm_open
15095         eval $inlibc
15096         case "$d_dbm_open" in
15097         $undef)
15098                 t_ndbm="$undef"
15099                 echo "We won't be including <ndbm.h>"
15100                 ;;
15101         esac
15102         ;;
15103 esac
15104 val="$t_ndbm"
15105 set i_ndbm
15106 eval $setvar
15107
15108 : see if net/errno.h is available
15109 val=''
15110 set net/errno.h val
15111 eval $inhdr
15112
15113 : Unfortunately, it causes problems on some systems.  Arrgh.
15114 case "$val" in
15115 $define)
15116         cat > try.c <<'EOM'
15117 #include <stdio.h>
15118 #include <errno.h>
15119 #include <net/errno.h>
15120 int func()
15121 {
15122         return ENOTSOCK;
15123 }
15124 EOM
15125         if $cc $ccflags -c try.c >/dev/null 2>&1; then
15126                 echo "We'll be including <net/errno.h>." >&4
15127         else
15128                 echo "We won't be including <net/errno.h>." >&4
15129                 val="$undef"
15130         fi
15131         $rm -f try.* try
15132         ;;
15133 esac
15134 set i_neterrno
15135 eval $setvar
15136
15137 : see if netinet/tcp.h is available
15138 set netinet/tcp.h i_netinettcp
15139 eval $inhdr
15140
15141 : see if this is a poll.h system
15142 set poll.h i_poll
15143 eval $inhdr
15144
15145 : see if this is a prot.h system
15146 set prot.h i_prot
15147 eval $inhdr
15148
15149 echo " "
15150 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
15151 $cat <<'EOSH' > Cppsym.know
15152 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
15153 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
15154 alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
15155 ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
15156 BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
15157 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
15158 bull c cadmus clipper CMU COFF COMPILER_VERSION
15159 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
15160 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
15161 Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
15162 FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
15163 GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
15164 H3050R H3050RX hbullx20 hcx host_mips
15165 hp200 hp300 hp700 HP700 hp800 hp9000
15166 hp9000s200 hp9000s300 hp9000s400 hp9000s500
15167 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
15168 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
15169 IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
15170 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
15171 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
15172 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
15173 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
15174 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
15175 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
15176 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
15177 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
15178 MATH_HAS_NO_SIDE_EFFECTS
15179 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
15180 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
15181 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
15182 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
15183 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
15184 NetBSD news1500 news1700 news1800 news1900 news3700
15185 news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
15186 ns32016 ns32332 ns32k nsc32000
15187 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
15188 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
15189 pc532 pdp11 PGC PIC plexus PORTAR posix
15190 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
15191 POSIX_C_SOURCE POSIX_SOURCE POWER
15192 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
15193 riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
15194 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
15195 sony sony_news sonyrisc sparc sparclite spectrum
15196 stardent stdc STDC_EXT stratos sun sun3 sun386
15197 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
15198 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
15199 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
15200 sysV68 sysV88 Tek4132 Tek4300 titan
15201 TM3200 TM5400 TM5600
15202 tower tower32 tower32_200 tower32_600 tower32_700
15203 tower32_800 tower32_850 tss
15204 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
15205 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
15206 unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
15207 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
15208 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
15209 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
15210 z8000
15211 EOSH
15212 # Maybe put other stuff here too.
15213 cat <<EOSH >>Cppsym.know
15214 $osname
15215 EOSH
15216 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
15217 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
15218 $cat Cppsym.know > Cppsym.c
15219 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
15220 $rm -f Cppsym.a Cppsym.b Cppsym.c
15221 cat <<EOSH > Cppsym
15222 $startsh
15223 if $test \$# -gt 0; then
15224     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
15225     if $test -s Cppsym.got; then
15226         $rm -f Cppsym.got
15227         exit 0
15228     fi
15229     $rm -f Cppsym.got
15230     exit 1
15231 else
15232     $tr " " "$trnl" | ./Cppsym.try
15233     exit 0
15234 fi
15235 EOSH
15236 chmod +x Cppsym
15237 $eunicefix Cppsym
15238 cat <<EOSH > Cppsym.try
15239 $startsh
15240 cat <<'EOCP' > try.c
15241 #include <stdio.h>
15242 int main() {
15243 EOCP
15244 $awk \\
15245 EOSH
15246 cat <<'EOSH' >> Cppsym.try
15247 'length($1) > 0 {
15248     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
15249     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
15250     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
15251     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
15252 }'       >> try.c
15253 echo '}' >> try.c
15254 EOSH
15255 cat <<EOSH >> Cppsym.try
15256 ccflags="$ccflags"
15257 case "$osname-$gccversion" in
15258 irix-) ccflags="\$ccflags -woff 1178" ;;
15259 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
15260 esac
15261 $cc -o try $optimize \$ccflags $ldflags try.c $libs && ./try$exe_ext
15262 EOSH
15263 chmod +x Cppsym.try
15264 $eunicefix Cppsym.try
15265 ./Cppsym < Cppsym.know > Cppsym.true
15266 : now check the C compiler for additional symbols
15267 postprocess_cc_v=''
15268 case "$osname" in
15269 aix) postprocess_cc_v="|$tr , ' '" ;;
15270 esac
15271 $cat >ccsym <<EOS
15272 $startsh
15273 $cat >tmp.c <<EOF
15274 extern int foo;
15275 EOF
15276 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
15277 do
15278         case "\$i" in
15279         -D*) echo "\$i" | $sed 's/^-D//';;
15280         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
15281         esac
15282 done
15283 $rm -f try.c
15284 EOS
15285 postprocess_cc_v=''
15286 chmod +x ccsym
15287 $eunicefix ccsym
15288 ./ccsym > ccsym1.raw
15289 if $test -s ccsym1.raw; then
15290        $sort ccsym1.raw | $uniq >ccsym.raw
15291 else
15292        mv ccsym1.raw ccsym.raw
15293 fi
15294
15295 $awk '/\=/ { print $0; next }
15296         { print $0"=1" }' ccsym.raw >ccsym.list
15297 $awk '/\=/ { print $0; next }
15298         { print $0"=1" }' Cppsym.true >ccsym.true
15299 $comm -13 ccsym.true ccsym.list >ccsym.own
15300 $comm -12 ccsym.true ccsym.list >ccsym.com
15301 $comm -23 ccsym.true ccsym.list >ccsym.cpp
15302 also=''
15303 if $test -z ccsym.raw; then
15304         echo "Your C compiler doesn't seem to define any symbols!" >&4
15305         echo " "
15306         echo "However, your C preprocessor defines the following symbols:"
15307         $cat Cppsym.true
15308         ccsymbols=''
15309         cppsymbols=`$cat Cppsym.true`
15310         cppsymbols=`echo $cppsymbols`
15311         cppccsymbols="$cppsymbols"
15312 else
15313         if $test -s ccsym.com; then
15314                 echo "Your C compiler and pre-processor define these symbols:"
15315                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
15316                 also='also '
15317                 symbols='ones'
15318                 cppccsymbols=`$cat ccsym.com`
15319                 cppccsymbols=`echo $cppccsymbols`
15320                 $test "$silent" || sleep 1
15321         fi
15322         if $test -s ccsym.cpp; then
15323                 $test "$also" && echo " "
15324                 echo "Your C pre-processor ${also}defines the following symbols:"
15325                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
15326                 also='further '
15327                 cppsymbols=`$cat ccsym.cpp`
15328                 cppsymbols=`echo $cppsymbols`
15329                 $test "$silent" || sleep 1
15330         fi
15331         if $test -s ccsym.own; then
15332                 $test "$also" && echo " "
15333                 echo "Your C compiler ${also}defines the following cpp symbols:"
15334                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
15335                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
15336                 ccsymbols=`$cat ccsym.own`
15337                 ccsymbols=`echo $ccsymbols`
15338                 $test "$silent" || sleep 1
15339         fi
15340 fi
15341 $rm -f ccsym* Cppsym.*
15342
15343 : see if this is a termio system
15344 val="$undef"
15345 val2="$undef"
15346 val3="$undef"
15347 if $test `./findhdr termios.h`; then
15348         set tcsetattr i_termios
15349         eval $inlibc
15350         val3="$i_termios"
15351 fi
15352 echo " "
15353 case "$val3" in
15354 "$define") echo "You have POSIX termios.h... good!" >&4;;
15355 *) if ./Cppsym pyr; then
15356                 case "`/bin/universe`" in
15357                 ucb) if $test `./findhdr sgtty.h`; then
15358                                 val2="$define"
15359                                 echo "<sgtty.h> found." >&4
15360                         else
15361                                 echo "System is pyramid with BSD universe."
15362                                 echo "<sgtty.h> not found--you could have problems." >&4
15363                         fi;;
15364                 *) if $test `./findhdr termio.h`; then
15365                                 val="$define"
15366                                 echo "<termio.h> found." >&4
15367                         else
15368                                 echo "System is pyramid with USG universe."
15369                                 echo "<termio.h> not found--you could have problems." >&4
15370                         fi;;
15371                 esac
15372         elif ./usg; then
15373                 if $test `./findhdr termio.h`; then
15374                         echo "<termio.h> found." >&4
15375                         val="$define"
15376                 elif $test `./findhdr sgtty.h`; then
15377                         echo "<sgtty.h> found." >&4
15378                         val2="$define"
15379                 else
15380 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
15381                 fi
15382         else
15383                 if $test `./findhdr sgtty.h`; then
15384                         echo "<sgtty.h> found." >&4
15385                         val2="$define"
15386                 elif $test `./findhdr termio.h`; then
15387                         echo "<termio.h> found." >&4
15388                         val="$define"
15389                 else
15390 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
15391                 fi
15392         fi;;
15393 esac
15394 set i_termio; eval $setvar
15395 val=$val2; set i_sgtty; eval $setvar
15396 val=$val3; set i_termios; eval $setvar
15397
15398 : see if this is a shadow.h system
15399 set shadow.h i_shadow
15400 eval $inhdr
15401
15402 : see if stddef is available
15403 set stddef.h i_stddef
15404 eval $inhdr
15405
15406 : see if this is a sunmath.h system
15407 set sunmath.h i_sunmath
15408 eval $inhdr
15409
15410 : see if sys/access.h is available
15411 set sys/access.h i_sysaccess
15412 eval $inhdr
15413
15414 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
15415 set sys/filio.h i_sysfilio
15416 eval $inhdr
15417 echo " "
15418 if $test `./findhdr sys/ioctl.h`; then
15419         val="$define"
15420         echo '<sys/ioctl.h> found.' >&4
15421 else
15422         val="$undef"
15423         if $test $i_sysfilio = "$define"; then
15424             echo '<sys/ioctl.h> NOT found.' >&4
15425         else
15426                 $test $i_sgtty = "$define" && xxx="sgtty.h"
15427                 $test $i_termio = "$define" && xxx="termio.h"
15428                 $test $i_termios = "$define" && xxx="termios.h"
15429 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
15430         fi
15431 fi
15432 set i_sysioctl
15433 eval $setvar
15434
15435
15436 : see if this is a syslog.h system
15437 set syslog.h i_syslog
15438 eval $inhdr
15439
15440
15441 : see if this is a sys/mode.h system
15442 set sys/mode.h i_sysmode
15443 eval $inhdr
15444
15445 : see if sys/resource.h has to be included
15446 set sys/resource.h i_sysresrc
15447 eval $inhdr
15448
15449 : see if sys/security.h is available
15450 set sys/security.h i_syssecrt
15451 eval $inhdr
15452
15453 : see if this is a sys/statvfs.h system
15454 set sys/statvfs.h i_sysstatvfs
15455 eval $inhdr
15456
15457 : see if this is a sys/uio.h system
15458 set sys/uio.h i_sysuio
15459 eval $inhdr
15460
15461 : see if this is a sys/un.h system
15462 set sys/un.h i_sysun
15463 eval $inhdr
15464
15465
15466 : see if this is a sys/utsname.h system
15467 set sys/utsname.h i_sysutsname
15468 eval $inhdr
15469
15470 : see if this is a syswait system
15471 set sys/wait.h i_syswait
15472 eval $inhdr
15473
15474 : see if this is a ustat.h system
15475 set ustat.h i_ustat
15476 eval $inhdr
15477
15478 : see if this is an utime system
15479 set utime.h i_utime
15480 eval $inhdr
15481
15482 : see if this is a values.h system
15483 set values.h i_values
15484 eval $inhdr
15485
15486 : see if this is a vfork system
15487 case "$d_vfork" in
15488 "$define")
15489         set vfork.h i_vfork
15490         eval $inhdr
15491         ;;
15492 *)
15493         i_vfork="$undef"
15494         ;;
15495 esac
15496
15497 : see if gdbm.h is available
15498 set gdbm.h t_gdbm
15499 eval $inhdr
15500 case "$t_gdbm" in
15501 $define)
15502         : see if gdbm_open exists
15503         set gdbm_open d_gdbm_open
15504         eval $inlibc
15505         case "$d_gdbm_open" in
15506         $undef)
15507                 t_gdbm="$undef"
15508                 echo "We won't be including <gdbm.h>"
15509                 ;;
15510         esac
15511         ;;
15512 esac
15513 val="$t_gdbm"
15514 set i_gdbm
15515 eval $setvar
15516
15517 echo " "
15518 echo "Looking for extensions..." >&4
15519 : If we are using the old config.sh, known_extensions may contain
15520 : old or inaccurate or duplicate values.
15521 known_extensions=''
15522 nonxs_extensions=''
15523 : We do not use find because it might not be available.
15524 : We do not just use MANIFEST because the user may have dropped
15525 : some additional extensions into the source tree and expect them
15526 : to be built.
15527
15528 : Function to recursively find available extensions, ignoring DynaLoader
15529 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
15530 find_extensions='
15531     for xxx in *; do
15532        case "$xxx" in
15533            DynaLoader|dynaload) ;;
15534            *)
15535            if $test -f $xxx/$xxx.xs; then
15536                known_extensions="$known_extensions $1$xxx";
15537            elif $test -f $xxx/Makefile.PL; then
15538                nonxs_extensions="$nonxs_extensions $1$xxx";
15539            else
15540                if $test -d $xxx -a $# -lt 10; then
15541                    set $1$xxx/ $*;
15542                    cd $xxx;
15543                    eval $find_extensions;
15544                    cd ..;
15545                    shift;
15546                fi;
15547            fi
15548            ;;
15549        esac;
15550     done'
15551 tdir=`pwd`
15552 cd $rsrc/ext
15553 set X
15554 shift
15555 eval $find_extensions
15556 set X $nonxs_extensions
15557 shift
15558 nonxs_extensions="$*"
15559 set X $known_extensions
15560 shift
15561 known_extensions="$*"
15562 cd $tdir
15563
15564 : Now see which are supported on this system.
15565 avail_ext=''
15566 for xxx in $known_extensions ; do
15567         case "$xxx" in
15568         DB_File|db_file)
15569                 case "$i_db" in
15570                 $define) avail_ext="$avail_ext $xxx" ;;
15571                 esac
15572                 ;;
15573         GDBM_File|gdbm_fil)
15574                 case "$i_gdbm" in 
15575                 $define) avail_ext="$avail_ext $xxx" ;;
15576                 esac
15577                 ;;
15578         NDBM_File|ndbm_fil)
15579                 case "$i_ndbm" in
15580                 $define)
15581                     case "$osname-$use64bitint" in
15582                     hpux-define)
15583                         case "$libs" in
15584                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
15585                         esac
15586                         ;;
15587                     *) avail_ext="$avail_ext $xxx" ;;
15588                     esac
15589                     ;;
15590                 esac
15591                 ;;
15592         ODBM_File|odbm_fil) 
15593                 case "${i_dbm}${i_rpcsvcdbm}" in
15594                 *"${define}"*)
15595                     case "$osname-$use64bitint" in
15596                     hpux-define)
15597                         case "$libs" in
15598                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
15599                         esac
15600                         ;;
15601                     *) avail_ext="$avail_ext $xxx" ;;
15602                     esac
15603                     ;;
15604                 esac
15605                 ;;
15606         POSIX|posix)
15607                 case "$useposix" in
15608                 true|define|y) avail_ext="$avail_ext $xxx" ;;
15609                 esac
15610                 ;;
15611         Opcode|opcode)
15612                 case "$useopcode" in
15613                 true|define|y) avail_ext="$avail_ext $xxx" ;;
15614                 esac
15615                 ;;
15616         Socket|socket)
15617                 case "$d_socket" in 
15618                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15619                 esac
15620                 ;;
15621         Sys/Syslog|sys/syslog)
15622                 : XXX syslog requires socket
15623                 case "$d_socket" in 
15624                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15625                 esac
15626                 ;;
15627         Thread|thread)
15628                 case "$usethreads" in 
15629                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15630                 esac
15631                 ;;
15632         IPC/SysV|ipc/sysv)
15633                 : XXX Do we need a useipcsysv variable here
15634                 case "${d_msg}${d_sem}${d_shm}" in 
15635                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
15636                 esac
15637                 ;;
15638         *)      avail_ext="$avail_ext $xxx"
15639                 ;;
15640         esac
15641 done
15642
15643 set X $avail_ext
15644 shift
15645 avail_ext="$*"
15646
15647 : Now see which nonxs extensions are supported on this system.
15648 : For now assume all are.
15649 nonxs_ext=''
15650 for xxx in $nonxs_extensions ; do
15651         case "$xxx" in
15652         *)      nonxs_ext="$nonxs_ext $xxx"
15653                 ;;
15654         esac
15655 done
15656
15657 set X $nonxs_ext
15658 shift
15659 nonxs_ext="$*"
15660
15661 case $usedl in
15662 $define)
15663         $cat <<EOM
15664 A number of extensions are supplied with $package.  You may choose to
15665 compile these extensions for dynamic loading (the default), compile
15666 them into the $package executable (static loading), or not include
15667 them at all.  Answer "none" to include no extensions.
15668 Note that DynaLoader is always built and need not be mentioned here.
15669
15670 EOM
15671         case "$dynamic_ext" in
15672         '') dflt="$avail_ext" ;;
15673         *)      dflt="$dynamic_ext"
15674                 # Perhaps we are reusing an old out-of-date config.sh.
15675                 case "$hint" in
15676                 previous)
15677                         if test X"$dynamic_ext" != X"$avail_ext"; then
15678                                 $cat <<EOM
15679 NOTICE:  Your previous config.sh list may be incorrect. 
15680 The extensions now available to you are 
15681         ${avail_ext}
15682 but the default list from your previous config.sh is
15683         ${dynamic_ext} 
15684
15685 EOM
15686                         fi
15687                         ;;
15688                 esac
15689                 ;;
15690         esac
15691         case "$dflt" in
15692         '')     dflt=none;;
15693         esac
15694         rp="What extensions do you wish to load dynamically?"
15695         . ./myread
15696         case "$ans" in
15697         none) dynamic_ext=' ' ;;
15698         *) dynamic_ext="$ans" ;;
15699         esac
15700
15701         case "$static_ext" in
15702         '')
15703                 : Exclude those already listed in dynamic linking
15704                 dflt=''
15705                 for xxx in $avail_ext; do
15706                         case " $dynamic_ext " in
15707                         *" $xxx "*) ;;
15708                         *) dflt="$dflt $xxx" ;;
15709                         esac
15710                 done
15711                 set X $dflt
15712                 shift
15713                 dflt="$*"
15714                 ;;
15715         *)  dflt="$static_ext" 
15716                 ;;
15717         esac
15718
15719         case "$dflt" in
15720         '')     dflt=none;;
15721         esac
15722         rp="What extensions do you wish to load statically?"
15723         . ./myread
15724         case "$ans" in
15725         none) static_ext=' ' ;;
15726         *) static_ext="$ans" ;;
15727         esac
15728         ;;
15729 *)
15730         $cat <<EOM
15731 A number of extensions are supplied with $package.  Answer "none" 
15732 to include no extensions. 
15733 Note that DynaLoader is always built and need not be mentioned here.
15734
15735 EOM
15736         case "$static_ext" in
15737         '') dflt="$avail_ext" ;;
15738         *)      dflt="$static_ext"
15739                 # Perhaps we are reusing an old out-of-date config.sh.
15740                 case "$hint" in
15741                 previous)
15742                         if test X"$static_ext" != X"$avail_ext"; then
15743                                 $cat <<EOM
15744 NOTICE:  Your previous config.sh list may be incorrect. 
15745 The extensions now available to you are 
15746         ${avail_ext}
15747 but the default list from your previous config.sh is
15748         ${static_ext} 
15749
15750 EOM
15751                         fi
15752                         ;;
15753                 esac
15754                 ;;
15755         esac
15756         : Exclude those that are not xs extensions
15757         case "$dflt" in
15758         '')     dflt=none;;
15759         esac
15760         rp="What extensions do you wish to include?"
15761         . ./myread
15762         case "$ans" in
15763         none) static_ext=' ' ;;
15764         *) static_ext="$ans" ;;
15765         esac
15766         ;;
15767 esac
15768
15769 set X $dynamic_ext $static_ext $nonxs_ext
15770 shift
15771 extensions="$*"
15772
15773 : Remove libraries needed only for extensions
15774 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
15775 : The exception is SunOS 4.x, which needs them.
15776 case "${osname}X${osvers}" in
15777 sunos*X4*)
15778     perllibs="$libs"
15779     ;;
15780 *) case "$usedl" in
15781     $define|true|[yY]*)
15782             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'` 
15783             shift
15784             perllibs="$*"
15785             ;;
15786     *)  perllibs="$libs"
15787             ;;
15788     esac
15789     ;;
15790 esac
15791
15792 : Remove build directory name from cppstdin so it can be used from
15793 : either the present location or the final installed location.
15794 echo " "
15795 : Get out of the UU directory to get correct path name.
15796 cd ..
15797 case "$cppstdin" in
15798 `pwd`/cppstdin)
15799         echo "Stripping down cppstdin path name"
15800         cppstdin=cppstdin
15801         ;;
15802 esac
15803 cd UU
15804
15805 : end of configuration questions
15806 echo " "
15807 echo "End of configuration questions."
15808 echo " "
15809
15810 : back to where it started
15811 if test -d ../UU; then
15812         cd ..
15813 fi
15814
15815 : configuration may be patched via a 'config.over' file
15816 if $test -f config.over; then
15817         echo " "
15818         dflt=y
15819         rp='I see a config.over file.  Do you wish to load it?'
15820         . UU/myread
15821         case "$ans" in
15822         n*) echo "OK, I'll ignore it.";;
15823         *)      . ./config.over
15824                 echo "Configuration override changes have been loaded."
15825                 ;;
15826         esac
15827 fi
15828
15829 : in case they want portability, strip down executable paths
15830 case "$d_portable" in
15831 "$define")
15832         echo " "
15833         echo "Stripping down executable paths..." >&4
15834         for file in $loclist $trylist; do
15835                 eval temp=\$$file
15836                 eval $file=`basename $temp`
15837         done
15838         ;;
15839 esac
15840
15841 : create config.sh file
15842 echo " "
15843 echo "Creating config.sh..." >&4
15844 $spitshell <<EOT >config.sh
15845 $startsh
15846 #
15847 # This file was produced by running the Configure script. It holds all the
15848 # definitions figured out by Configure. Should you modify one of these values,
15849 # do not forget to propagate your changes by running "Configure -der". You may
15850 # instead choose to run each of the .SH files by yourself, or "Configure -S".
15851 #
15852
15853 # Package name      : $package
15854 # Source directory  : $src
15855 # Configuration time: $cf_time
15856 # Configured by     : $cf_by
15857 # Target system     : $myuname
15858
15859 Author='$Author'
15860 Date='$Date'
15861 Header='$Header'
15862 Id='$Id'
15863 Locker='$Locker'
15864 Log='$Log'
15865 Mcc='$Mcc'
15866 RCSfile='$RCSfile'
15867 Revision='$Revision'
15868 Source='$Source'
15869 State='$State'
15870 _a='$_a'
15871 _exe='$_exe'
15872 _o='$_o'
15873 afs='$afs'
15874 alignbytes='$alignbytes'
15875 ansi2knr='$ansi2knr'
15876 aphostname='$aphostname'
15877 api_revision='$api_revision'
15878 api_subversion='$api_subversion'
15879 api_version='$api_version'
15880 api_versionstring='$api_versionstring'
15881 ar='$ar'
15882 archlib='$archlib'
15883 archlibexp='$archlibexp'
15884 archname64='$archname64'
15885 archname='$archname'
15886 archobjs='$archobjs'
15887 awk='$awk'
15888 baserev='$baserev'
15889 bash='$bash'
15890 bin='$bin'
15891 bincompat5005='$bincompat5005'
15892 binexp='$binexp'
15893 bison='$bison'
15894 byacc='$byacc'
15895 byteorder='$byteorder'
15896 c='$c'
15897 castflags='$castflags'
15898 cat='$cat'
15899 cc='$cc'
15900 cccdlflags='$cccdlflags'
15901 ccdlflags='$ccdlflags'
15902 ccflags='$ccflags'
15903 ccflags_uselargefiles='$ccflags_uselargefiles'
15904 ccname='$ccname'
15905 ccsymbols='$ccsymbols'
15906 ccversion='$ccversion'
15907 cf_by='$cf_by'
15908 cf_email='$cf_email'
15909 cf_time='$cf_time'
15910 charsize='$charsize'
15911 chgrp='$chgrp'
15912 chmod='$chmod'
15913 chown='$chown'
15914 clocktype='$clocktype'
15915 comm='$comm'
15916 compress='$compress'
15917 contains='$contains'
15918 cp='$cp'
15919 cpio='$cpio'
15920 cpp='$cpp'
15921 cpp_stuff='$cpp_stuff'
15922 cppccsymbols='$cppccsymbols'
15923 cppflags='$cppflags'
15924 cpplast='$cpplast'
15925 cppminus='$cppminus'
15926 cpprun='$cpprun'
15927 cppstdin='$cppstdin'
15928 cppsymbols='$cppsymbols'
15929 crosscompile='$crosscompile'
15930 cryptlib='$cryptlib'
15931 csh='$csh'
15932 d_Gconvert='$d_Gconvert'
15933 d_PRIEUldbl='$d_PRIEUldbl'
15934 d_PRIFUldbl='$d_PRIFUldbl'
15935 d_PRIGUldbl='$d_PRIGUldbl'
15936 d_PRIXU64='$d_PRIXU64'
15937 d_PRId64='$d_PRId64'
15938 d_PRIeldbl='$d_PRIeldbl'
15939 d_PRIfldbl='$d_PRIfldbl'
15940 d_PRIgldbl='$d_PRIgldbl'
15941 d_PRIi64='$d_PRIi64'
15942 d_PRIo64='$d_PRIo64'
15943 d_PRIu64='$d_PRIu64'
15944 d_PRIx64='$d_PRIx64'
15945 d_SCNfldbl='$d_SCNfldbl'
15946 d__fwalk='$d__fwalk'
15947 d_access='$d_access'
15948 d_accessx='$d_accessx'
15949 d_alarm='$d_alarm'
15950 d_archlib='$d_archlib'
15951 d_atolf='$d_atolf'
15952 d_atoll='$d_atoll'
15953 d_attribut='$d_attribut'
15954 d_bcmp='$d_bcmp'
15955 d_bcopy='$d_bcopy'
15956 d_bincompat5005='$d_bincompat5005'
15957 d_bsd='$d_bsd'
15958 d_bsdgetpgrp='$d_bsdgetpgrp'
15959 d_bsdsetpgrp='$d_bsdsetpgrp'
15960 d_bzero='$d_bzero'
15961 d_casti32='$d_casti32'
15962 d_castneg='$d_castneg'
15963 d_charvspr='$d_charvspr'
15964 d_chown='$d_chown'
15965 d_chroot='$d_chroot'
15966 d_chsize='$d_chsize'
15967 d_closedir='$d_closedir'
15968 d_const='$d_const'
15969 d_crypt='$d_crypt'
15970 d_csh='$d_csh'
15971 d_cuserid='$d_cuserid'
15972 d_dbl_dig='$d_dbl_dig'
15973 d_difftime='$d_difftime'
15974 d_dirnamlen='$d_dirnamlen'
15975 d_dlerror='$d_dlerror'
15976 d_dlopen='$d_dlopen'
15977 d_dlsymun='$d_dlsymun'
15978 d_dosuid='$d_dosuid'
15979 d_drand48proto='$d_drand48proto'
15980 d_dup2='$d_dup2'
15981 d_eaccess='$d_eaccess'
15982 d_endgrent='$d_endgrent'
15983 d_endhent='$d_endhent'
15984 d_endnent='$d_endnent'
15985 d_endpent='$d_endpent'
15986 d_endpwent='$d_endpwent'
15987 d_endsent='$d_endsent'
15988 d_eofnblk='$d_eofnblk'
15989 d_eunice='$d_eunice'
15990 d_fchmod='$d_fchmod'
15991 d_fchown='$d_fchown'
15992 d_fcntl='$d_fcntl'
15993 d_fcntl_can_lock='$d_fcntl_can_lock'
15994 d_fd_macros='$d_fd_macros'
15995 d_fd_set='$d_fd_set'
15996 d_fds_bits='$d_fds_bits'
15997 d_fgetpos='$d_fgetpos'
15998 d_flexfnam='$d_flexfnam'
15999 d_flock='$d_flock'
16000 d_fork='$d_fork'
16001 d_fpathconf='$d_fpathconf'
16002 d_fpos64_t='$d_fpos64_t'
16003 d_frexpl='$d_frexpl'
16004 d_fs_data_s='$d_fs_data_s'
16005 d_fseeko='$d_fseeko'
16006 d_fsetpos='$d_fsetpos'
16007 d_fstatfs='$d_fstatfs'
16008 d_fstatvfs='$d_fstatvfs'
16009 d_fsync='$d_fsync'
16010 d_ftello='$d_ftello'
16011 d_ftime='$d_ftime'
16012 d_getcwd='$d_getcwd'
16013 d_getespwnam='$d_getespwnam'
16014 d_getfsstat='$d_getfsstat'
16015 d_getgrent='$d_getgrent'
16016 d_getgrps='$d_getgrps'
16017 d_gethbyaddr='$d_gethbyaddr'
16018 d_gethbyname='$d_gethbyname'
16019 d_gethent='$d_gethent'
16020 d_gethname='$d_gethname'
16021 d_gethostprotos='$d_gethostprotos'
16022 d_getlogin='$d_getlogin'
16023 d_getmnt='$d_getmnt'
16024 d_getmntent='$d_getmntent'
16025 d_getnbyaddr='$d_getnbyaddr'
16026 d_getnbyname='$d_getnbyname'
16027 d_getnent='$d_getnent'
16028 d_getnetprotos='$d_getnetprotos'
16029 d_getpagsz='$d_getpagsz'
16030 d_getpbyname='$d_getpbyname'
16031 d_getpbynumber='$d_getpbynumber'
16032 d_getpent='$d_getpent'
16033 d_getpgid='$d_getpgid'
16034 d_getpgrp2='$d_getpgrp2'
16035 d_getpgrp='$d_getpgrp'
16036 d_getppid='$d_getppid'
16037 d_getprior='$d_getprior'
16038 d_getprotoprotos='$d_getprotoprotos'
16039 d_getprpwnam='$d_getprpwnam'
16040 d_getpwent='$d_getpwent'
16041 d_getsbyname='$d_getsbyname'
16042 d_getsbyport='$d_getsbyport'
16043 d_getsent='$d_getsent'
16044 d_getservprotos='$d_getservprotos'
16045 d_getspnam='$d_getspnam'
16046 d_gettimeod='$d_gettimeod'
16047 d_gnulibc='$d_gnulibc'
16048 d_grpasswd='$d_grpasswd'
16049 d_hasmntopt='$d_hasmntopt'
16050 d_htonl='$d_htonl'
16051 d_iconv='$d_iconv'
16052 d_index='$d_index'
16053 d_inetaton='$d_inetaton'
16054 d_int64_t='$d_int64_t'
16055 d_isascii='$d_isascii'
16056 d_isnan='$d_isnan'
16057 d_isnanl='$d_isnanl'
16058 d_killpg='$d_killpg'
16059 d_lchown='$d_lchown'
16060 d_ldbl_dig='$d_ldbl_dig'
16061 d_link='$d_link'
16062 d_locconv='$d_locconv'
16063 d_lockf='$d_lockf'
16064 d_longdbl='$d_longdbl'
16065 d_longlong='$d_longlong'
16066 d_lseekproto='$d_lseekproto'
16067 d_lstat='$d_lstat'
16068 d_madvise='$d_madvise'
16069 d_mblen='$d_mblen'
16070 d_mbstowcs='$d_mbstowcs'
16071 d_mbtowc='$d_mbtowc'
16072 d_memchr='$d_memchr'
16073 d_memcmp='$d_memcmp'
16074 d_memcpy='$d_memcpy'
16075 d_memmove='$d_memmove'
16076 d_memset='$d_memset'
16077 d_mkdir='$d_mkdir'
16078 d_mkdtemp='$d_mkdtemp'
16079 d_mkfifo='$d_mkfifo'
16080 d_mkstemp='$d_mkstemp'
16081 d_mkstemps='$d_mkstemps'
16082 d_mktime='$d_mktime'
16083 d_mmap='$d_mmap'
16084 d_modfl='$d_modfl'
16085 d_mprotect='$d_mprotect'
16086 d_msg='$d_msg'
16087 d_msg_ctrunc='$d_msg_ctrunc'
16088 d_msg_dontroute='$d_msg_dontroute'
16089 d_msg_oob='$d_msg_oob'
16090 d_msg_peek='$d_msg_peek'
16091 d_msg_proxy='$d_msg_proxy'
16092 d_msgctl='$d_msgctl'
16093 d_msgget='$d_msgget'
16094 d_msgrcv='$d_msgrcv'
16095 d_msgsnd='$d_msgsnd'
16096 d_msync='$d_msync'
16097 d_munmap='$d_munmap'
16098 d_mymalloc='$d_mymalloc'
16099 d_nice='$d_nice'
16100 d_nv_preserves_uv='$d_nv_preserves_uv'
16101 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
16102 d_off64_t='$d_off64_t'
16103 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
16104 d_oldpthreads='$d_oldpthreads'
16105 d_oldsock='$d_oldsock'
16106 d_open3='$d_open3'
16107 d_pathconf='$d_pathconf'
16108 d_pause='$d_pause'
16109 d_perl_otherlibdirs='$d_perl_otherlibdirs'
16110 d_phostname='$d_phostname'
16111 d_pipe='$d_pipe'
16112 d_poll='$d_poll'
16113 d_portable='$d_portable'
16114 d_pthread_yield='$d_pthread_yield'
16115 d_pwage='$d_pwage'
16116 d_pwchange='$d_pwchange'
16117 d_pwclass='$d_pwclass'
16118 d_pwcomment='$d_pwcomment'
16119 d_pwexpire='$d_pwexpire'
16120 d_pwgecos='$d_pwgecos'
16121 d_pwpasswd='$d_pwpasswd'
16122 d_pwquota='$d_pwquota'
16123 d_qgcvt='$d_qgcvt'
16124 d_quad='$d_quad'
16125 d_readdir='$d_readdir'
16126 d_readlink='$d_readlink'
16127 d_rename='$d_rename'
16128 d_rewinddir='$d_rewinddir'
16129 d_rmdir='$d_rmdir'
16130 d_safebcpy='$d_safebcpy'
16131 d_safemcpy='$d_safemcpy'
16132 d_sanemcmp='$d_sanemcmp'
16133 d_sbrkproto='$d_sbrkproto'
16134 d_sched_yield='$d_sched_yield'
16135 d_scm_rights='$d_scm_rights'
16136 d_seekdir='$d_seekdir'
16137 d_select='$d_select'
16138 d_sem='$d_sem'
16139 d_semctl='$d_semctl'
16140 d_semctl_semid_ds='$d_semctl_semid_ds'
16141 d_semctl_semun='$d_semctl_semun'
16142 d_semget='$d_semget'
16143 d_semop='$d_semop'
16144 d_setegid='$d_setegid'
16145 d_seteuid='$d_seteuid'
16146 d_setgrent='$d_setgrent'
16147 d_setgrps='$d_setgrps'
16148 d_sethent='$d_sethent'
16149 d_setlinebuf='$d_setlinebuf'
16150 d_setlocale='$d_setlocale'
16151 d_setnent='$d_setnent'
16152 d_setpent='$d_setpent'
16153 d_setpgid='$d_setpgid'
16154 d_setpgrp2='$d_setpgrp2'
16155 d_setpgrp='$d_setpgrp'
16156 d_setprior='$d_setprior'
16157 d_setproctitle='$d_setproctitle'
16158 d_setpwent='$d_setpwent'
16159 d_setregid='$d_setregid'
16160 d_setresgid='$d_setresgid'
16161 d_setresuid='$d_setresuid'
16162 d_setreuid='$d_setreuid'
16163 d_setrgid='$d_setrgid'
16164 d_setruid='$d_setruid'
16165 d_setsent='$d_setsent'
16166 d_setsid='$d_setsid'
16167 d_setvbuf='$d_setvbuf'
16168 d_sfio='$d_sfio'
16169 d_shm='$d_shm'
16170 d_shmat='$d_shmat'
16171 d_shmatprototype='$d_shmatprototype'
16172 d_shmctl='$d_shmctl'
16173 d_shmdt='$d_shmdt'
16174 d_shmget='$d_shmget'
16175 d_sigaction='$d_sigaction'
16176 d_sigprocmask='$d_sigprocmask'
16177 d_sigsetjmp='$d_sigsetjmp'
16178 d_socket='$d_socket'
16179 d_socklen_t='$d_socklen_t'
16180 d_sockpair='$d_sockpair'
16181 d_socks5_init='$d_socks5_init'
16182 d_sqrtl='$d_sqrtl'
16183 d_statblks='$d_statblks'
16184 d_statfs_f_flags='$d_statfs_f_flags'
16185 d_statfs_s='$d_statfs_s'
16186 d_statvfs='$d_statvfs'
16187 d_stdio_cnt_lval='$d_stdio_cnt_lval'
16188 d_stdio_ptr_lval='$d_stdio_ptr_lval'
16189 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
16190 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
16191 d_stdio_stream_array='$d_stdio_stream_array'
16192 d_stdiobase='$d_stdiobase'
16193 d_stdstdio='$d_stdstdio'
16194 d_strchr='$d_strchr'
16195 d_strcoll='$d_strcoll'
16196 d_strctcpy='$d_strctcpy'
16197 d_strerrm='$d_strerrm'
16198 d_strerror='$d_strerror'
16199 d_strtod='$d_strtod'
16200 d_strtol='$d_strtol'
16201 d_strtold='$d_strtold'
16202 d_strtoll='$d_strtoll'
16203 d_strtoq='$d_strtoq'
16204 d_strtoul='$d_strtoul'
16205 d_strtoull='$d_strtoull'
16206 d_strtouq='$d_strtouq'
16207 d_strxfrm='$d_strxfrm'
16208 d_suidsafe='$d_suidsafe'
16209 d_symlink='$d_symlink'
16210 d_syscall='$d_syscall'
16211 d_sysconf='$d_sysconf'
16212 d_sysernlst='$d_sysernlst'
16213 d_syserrlst='$d_syserrlst'
16214 d_system='$d_system'
16215 d_tcgetpgrp='$d_tcgetpgrp'
16216 d_tcsetpgrp='$d_tcsetpgrp'
16217 d_telldir='$d_telldir'
16218 d_telldirproto='$d_telldirproto'
16219 d_time='$d_time'
16220 d_times='$d_times'
16221 d_truncate='$d_truncate'
16222 d_tzname='$d_tzname'
16223 d_umask='$d_umask'
16224 d_uname='$d_uname'
16225 d_union_semun='$d_union_semun'
16226 d_ustat='$d_ustat'
16227 d_vendorarch='$d_vendorarch'
16228 d_vendorbin='$d_vendorbin'
16229 d_vendorlib='$d_vendorlib'
16230 d_vfork='$d_vfork'
16231 d_void_closedir='$d_void_closedir'
16232 d_voidsig='$d_voidsig'
16233 d_voidtty='$d_voidtty'
16234 d_volatile='$d_volatile'
16235 d_vprintf='$d_vprintf'
16236 d_wait4='$d_wait4'
16237 d_waitpid='$d_waitpid'
16238 d_wcstombs='$d_wcstombs'
16239 d_wctomb='$d_wctomb'
16240 d_xenix='$d_xenix'
16241 date='$date'
16242 db_hashtype='$db_hashtype'
16243 db_prefixtype='$db_prefixtype'
16244 defvoidused='$defvoidused'
16245 direntrytype='$direntrytype'
16246 dlext='$dlext'
16247 dlsrc='$dlsrc'
16248 doublesize='$doublesize'
16249 drand01='$drand01'
16250 dynamic_ext='$dynamic_ext'
16251 eagain='$eagain'
16252 ebcdic='$ebcdic'
16253 echo='$echo'
16254 egrep='$egrep'
16255 emacs='$emacs'
16256 eunicefix='$eunicefix'
16257 exe_ext='$exe_ext'
16258 expr='$expr'
16259 extensions='$extensions'
16260 fflushNULL='$fflushNULL'
16261 fflushall='$fflushall'
16262 find='$find'
16263 firstmakefile='$firstmakefile'
16264 flex='$flex'
16265 fpossize='$fpossize'
16266 fpostype='$fpostype'
16267 freetype='$freetype'
16268 full_ar='$full_ar'
16269 full_csh='$full_csh'
16270 full_sed='$full_sed'
16271 gccosandvers='$gccosandvers'
16272 gccversion='$gccversion'
16273 gidformat='$gidformat'
16274 gidsign='$gidsign'
16275 gidsize='$gidsize'
16276 gidtype='$gidtype'
16277 glibpth='$glibpth'
16278 grep='$grep'
16279 groupcat='$groupcat'
16280 groupstype='$groupstype'
16281 gzip='$gzip'
16282 h_fcntl='$h_fcntl'
16283 h_sysfile='$h_sysfile'
16284 hint='$hint'
16285 hostcat='$hostcat'
16286 i16size='$i16size'
16287 i16type='$i16type'
16288 i32size='$i32size'
16289 i32type='$i32type'
16290 i64size='$i64size'
16291 i64type='$i64type'
16292 i8size='$i8size'
16293 i8type='$i8type'
16294 i_arpainet='$i_arpainet'
16295 i_bsdioctl='$i_bsdioctl'
16296 i_db='$i_db'
16297 i_dbm='$i_dbm'
16298 i_dirent='$i_dirent'
16299 i_dld='$i_dld'
16300 i_dlfcn='$i_dlfcn'
16301 i_fcntl='$i_fcntl'
16302 i_float='$i_float'
16303 i_gdbm='$i_gdbm'
16304 i_grp='$i_grp'
16305 i_iconv='$i_iconv'
16306 i_ieeefp='$i_ieeefp'
16307 i_inttypes='$i_inttypes'
16308 i_libutil='$i_libutil'
16309 i_limits='$i_limits'
16310 i_locale='$i_locale'
16311 i_machcthr='$i_machcthr'
16312 i_malloc='$i_malloc'
16313 i_math='$i_math'
16314 i_memory='$i_memory'
16315 i_mntent='$i_mntent'
16316 i_ndbm='$i_ndbm'
16317 i_netdb='$i_netdb'
16318 i_neterrno='$i_neterrno'
16319 i_netinettcp='$i_netinettcp'
16320 i_niin='$i_niin'
16321 i_poll='$i_poll'
16322 i_prot='$i_prot'
16323 i_pthread='$i_pthread'
16324 i_pwd='$i_pwd'
16325 i_rpcsvcdbm='$i_rpcsvcdbm'
16326 i_sfio='$i_sfio'
16327 i_sgtty='$i_sgtty'
16328 i_shadow='$i_shadow'
16329 i_socks='$i_socks'
16330 i_stdarg='$i_stdarg'
16331 i_stddef='$i_stddef'
16332 i_stdlib='$i_stdlib'
16333 i_string='$i_string'
16334 i_sunmath='$i_sunmath'
16335 i_sysaccess='$i_sysaccess'
16336 i_sysdir='$i_sysdir'
16337 i_sysfile='$i_sysfile'
16338 i_sysfilio='$i_sysfilio'
16339 i_sysin='$i_sysin'
16340 i_sysioctl='$i_sysioctl'
16341 i_syslog='$i_syslog'
16342 i_sysmman='$i_sysmman'
16343 i_sysmode='$i_sysmode'
16344 i_sysmount='$i_sysmount'
16345 i_sysndir='$i_sysndir'
16346 i_sysparam='$i_sysparam'
16347 i_sysresrc='$i_sysresrc'
16348 i_syssecrt='$i_syssecrt'
16349 i_sysselct='$i_sysselct'
16350 i_syssockio='$i_syssockio'
16351 i_sysstat='$i_sysstat'
16352 i_sysstatfs='$i_sysstatfs'
16353 i_sysstatvfs='$i_sysstatvfs'
16354 i_systime='$i_systime'
16355 i_systimek='$i_systimek'
16356 i_systimes='$i_systimes'
16357 i_systypes='$i_systypes'
16358 i_sysuio='$i_sysuio'
16359 i_sysun='$i_sysun'
16360 i_sysutsname='$i_sysutsname'
16361 i_sysvfs='$i_sysvfs'
16362 i_syswait='$i_syswait'
16363 i_termio='$i_termio'
16364 i_termios='$i_termios'
16365 i_time='$i_time'
16366 i_unistd='$i_unistd'
16367 i_ustat='$i_ustat'
16368 i_utime='$i_utime'
16369 i_values='$i_values'
16370 i_varargs='$i_varargs'
16371 i_varhdr='$i_varhdr'
16372 i_vfork='$i_vfork'
16373 ignore_versioned_solibs='$ignore_versioned_solibs'
16374 inc_version_list='$inc_version_list'
16375 inc_version_list_init='$inc_version_list_init'
16376 incpath='$incpath'
16377 inews='$inews'
16378 installarchlib='$installarchlib'
16379 installbin='$installbin'
16380 installman1dir='$installman1dir'
16381 installman3dir='$installman3dir'
16382 installprefix='$installprefix'
16383 installprefixexp='$installprefixexp'
16384 installprivlib='$installprivlib'
16385 installscript='$installscript'
16386 installsitearch='$installsitearch'
16387 installsitebin='$installsitebin'
16388 installsitelib='$installsitelib'
16389 installstyle='$installstyle'
16390 installusrbinperl='$installusrbinperl'
16391 installvendorarch='$installvendorarch'
16392 installvendorbin='$installvendorbin'
16393 installvendorlib='$installvendorlib'
16394 intsize='$intsize'
16395 issymlink='$issymlink'
16396 ivdformat='$ivdformat'
16397 ivsize='$ivsize'
16398 ivtype='$ivtype'
16399 known_extensions='$known_extensions'
16400 ksh='$ksh'
16401 ld='$ld'
16402 lddlflags='$lddlflags'
16403 ldflags='$ldflags'
16404 ldflags_uselargefiles='$ldflags_uselargefiles'
16405 ldlibpthname='$ldlibpthname'
16406 less='$less'
16407 lib_ext='$lib_ext'
16408 libc='$libc'
16409 libperl='$libperl'
16410 libpth='$libpth'
16411 libs='$libs'
16412 libsdirs='$libsdirs'
16413 libsfiles='$libsfiles'
16414 libsfound='$libsfound'
16415 libspath='$libspath'
16416 libswanted='$libswanted'
16417 libswanted_uselargefiles='$libswanted_uselargefiles'
16418 line='$line'
16419 lint='$lint'
16420 lkflags='$lkflags'
16421 ln='$ln'
16422 lns='$lns'
16423 locincpth='$locincpth'
16424 loclibpth='$loclibpth'
16425 longdblsize='$longdblsize'
16426 longlongsize='$longlongsize'
16427 longsize='$longsize'
16428 lp='$lp'
16429 lpr='$lpr'
16430 ls='$ls'
16431 lseeksize='$lseeksize'
16432 lseektype='$lseektype'
16433 mail='$mail'
16434 mailx='$mailx'
16435 make='$make'
16436 make_set_make='$make_set_make'
16437 mallocobj='$mallocobj'
16438 mallocsrc='$mallocsrc'
16439 malloctype='$malloctype'
16440 man1dir='$man1dir'
16441 man1direxp='$man1direxp'
16442 man1ext='$man1ext'
16443 man3dir='$man3dir'
16444 man3direxp='$man3direxp'
16445 man3ext='$man3ext'
16446 mips_type='$mips_type'
16447 mkdir='$mkdir'
16448 mmaptype='$mmaptype'
16449 modetype='$modetype'
16450 more='$more'
16451 multiarch='$multiarch'
16452 mv='$mv'
16453 myarchname='$myarchname'
16454 mydomain='$mydomain'
16455 myhostname='$myhostname'
16456 myuname='$myuname'
16457 n='$n'
16458 need_va_copy='$need_va_copy'
16459 netdb_hlen_type='$netdb_hlen_type'
16460 netdb_host_type='$netdb_host_type'
16461 netdb_name_type='$netdb_name_type'
16462 netdb_net_type='$netdb_net_type'
16463 nm='$nm'
16464 nm_opt='$nm_opt'
16465 nm_so_opt='$nm_so_opt'
16466 nonxs_ext='$nonxs_ext'
16467 nroff='$nroff'
16468 nvEUformat='$nvEUformat'
16469 nvFUformat='$nvFUformat'
16470 nvGUformat='$nvGUformat'
16471 nveformat='$nveformat'
16472 nvfformat='$nvfformat'
16473 nvgformat='$nvgformat'
16474 nvsize='$nvsize'
16475 nvtype='$nvtype'
16476 o_nonblock='$o_nonblock'
16477 obj_ext='$obj_ext'
16478 old_pthread_create_joinable='$old_pthread_create_joinable'
16479 optimize='$optimize'
16480 orderlib='$orderlib'
16481 osname='$osname'
16482 osvers='$osvers'
16483 otherlibdirs='$otherlibdirs'
16484 package='$package'
16485 pager='$pager'
16486 passcat='$passcat'
16487 patchlevel='$patchlevel'
16488 path_sep='$path_sep'
16489 perl5='$perl5'
16490 perl='$perl'
16491 perladmin='$perladmin'
16492 perllibs='$perllibs'
16493 perlpath='$perlpath'
16494 pg='$pg'
16495 phostname='$phostname'
16496 pidtype='$pidtype'
16497 plibpth='$plibpth'
16498 pm_apiversion='$pm_apiversion'
16499 pmake='$pmake'
16500 pr='$pr'
16501 prefix='$prefix'
16502 prefixexp='$prefixexp'
16503 privlib='$privlib'
16504 privlibexp='$privlibexp'
16505 prototype='$prototype'
16506 ptrsize='$ptrsize'
16507 quadkind='$quadkind'
16508 quadtype='$quadtype'
16509 randbits='$randbits'
16510 randfunc='$randfunc'
16511 randseedtype='$randseedtype'
16512 ranlib='$ranlib'
16513 rd_nodata='$rd_nodata'
16514 revision='$revision'
16515 rm='$rm'
16516 rmail='$rmail'
16517 runnm='$runnm'
16518 sPRIEUldbl='$sPRIEUldbl'
16519 sPRIFUldbl='$sPRIFUldbl'
16520 sPRIGUldbl='$sPRIGUldbl'
16521 sPRIXU64='$sPRIXU64'
16522 sPRId64='$sPRId64'
16523 sPRIeldbl='$sPRIeldbl'
16524 sPRIfldbl='$sPRIfldbl'
16525 sPRIgldbl='$sPRIgldbl'
16526 sPRIi64='$sPRIi64'
16527 sPRIo64='$sPRIo64'
16528 sPRIu64='$sPRIu64'
16529 sPRIx64='$sPRIx64'
16530 sSCNfldbl='$sSCNfldbl'
16531 sched_yield='$sched_yield'
16532 scriptdir='$scriptdir'
16533 scriptdirexp='$scriptdirexp'
16534 sed='$sed'
16535 seedfunc='$seedfunc'
16536 selectminbits='$selectminbits'
16537 selecttype='$selecttype'
16538 sendmail='$sendmail'
16539 sh='$sh'
16540 shar='$shar'
16541 sharpbang='$sharpbang'
16542 shmattype='$shmattype'
16543 shortsize='$shortsize'
16544 shrpenv='$shrpenv'
16545 shsharp='$shsharp'
16546 sig_count='$sig_count'
16547 sig_name='$sig_name'
16548 sig_name_init='$sig_name_init'
16549 sig_num='$sig_num'
16550 sig_num_init='$sig_num_init'
16551 sig_size='$sig_size'
16552 signal_t='$signal_t'
16553 sitearch='$sitearch'
16554 sitearchexp='$sitearchexp'
16555 sitebin='$sitebin'
16556 sitebinexp='$sitebinexp'
16557 sitelib='$sitelib'
16558 sitelib_stem='$sitelib_stem'
16559 sitelibexp='$sitelibexp'
16560 siteprefix='$siteprefix'
16561 siteprefixexp='$siteprefixexp'
16562 sizesize='$sizesize'
16563 sizetype='$sizetype'
16564 sleep='$sleep'
16565 smail='$smail'
16566 so='$so'
16567 sockethdr='$sockethdr'
16568 socketlib='$socketlib'
16569 socksizetype='$socksizetype'
16570 sort='$sort'
16571 spackage='$spackage'
16572 spitshell='$spitshell'
16573 src='$src'
16574 ssizetype='$ssizetype'
16575 startperl='$startperl'
16576 startsh='$startsh'
16577 static_ext='$static_ext'
16578 stdchar='$stdchar'
16579 stdio_base='$stdio_base'
16580 stdio_bufsiz='$stdio_bufsiz'
16581 stdio_cnt='$stdio_cnt'
16582 stdio_filbuf='$stdio_filbuf'
16583 stdio_ptr='$stdio_ptr'
16584 stdio_stream_array='$stdio_stream_array'
16585 strings='$strings'
16586 submit='$submit'
16587 subversion='$subversion'
16588 sysman='$sysman'
16589 tail='$tail'
16590 tar='$tar'
16591 tbl='$tbl'
16592 tee='$tee'
16593 test='$test'
16594 timeincl='$timeincl'
16595 timetype='$timetype'
16596 touch='$touch'
16597 tr='$tr'
16598 trnl='$trnl'
16599 troff='$troff'
16600 u16size='$u16size'
16601 u16type='$u16type'
16602 u32size='$u32size'
16603 u32type='$u32type'
16604 u64size='$u64size'
16605 u64type='$u64type'
16606 u8size='$u8size'
16607 u8type='$u8type'
16608 uidformat='$uidformat'
16609 uidsign='$uidsign'
16610 uidsize='$uidsize'
16611 uidtype='$uidtype'
16612 uname='$uname'
16613 uniq='$uniq'
16614 uquadtype='$uquadtype'
16615 use5005threads='$use5005threads'
16616 use64bitall='$use64bitall'
16617 use64bitint='$use64bitint'
16618 usedl='$usedl'
16619 useithreads='$useithreads'
16620 uselargefiles='$uselargefiles'
16621 uselongdouble='$uselongdouble'
16622 usemorebits='$usemorebits'
16623 usemultiplicity='$usemultiplicity'
16624 usemymalloc='$usemymalloc'
16625 usenm='$usenm'
16626 useopcode='$useopcode'
16627 useperlio='$useperlio'
16628 useposix='$useposix'
16629 usesfio='$usesfio'
16630 useshrplib='$useshrplib'
16631 usesocks='$usesocks'
16632 usethreads='$usethreads'
16633 usevendorprefix='$usevendorprefix'
16634 usevfork='$usevfork'
16635 usrinc='$usrinc'
16636 uuname='$uuname'
16637 uvXUformat='$uvXUformat'
16638 uvoformat='$uvoformat'
16639 uvsize='$uvsize'
16640 uvtype='$uvtype'
16641 uvuformat='$uvuformat'
16642 uvxformat='$uvxformat'
16643 vendorarch='$vendorarch'
16644 vendorarchexp='$vendorarchexp'
16645 vendorbin='$vendorbin'
16646 vendorbinexp='$vendorbinexp'
16647 vendorlib='$vendorlib'
16648 vendorlib_stem='$vendorlib_stem'
16649 vendorlibexp='$vendorlibexp'
16650 vendorprefix='$vendorprefix'
16651 vendorprefixexp='$vendorprefixexp'
16652 version='$version'
16653 versiononly='$versiononly'
16654 vi='$vi'
16655 voidflags='$voidflags'
16656 xlibpth='$xlibpth'
16657 xs_apiversion='$xs_apiversion'
16658 yacc='$yacc'
16659 yaccflags='$yaccflags'
16660 zcat='$zcat'
16661 zip='$zip'
16662 EOT
16663
16664 : Add in command line options if available
16665 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
16666
16667 : add special variables
16668 $test -f $src/patchlevel.h && \
16669 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
16670 echo "CONFIGDOTSH=true" >>config.sh
16671
16672 : propagate old symbols
16673 if $test -f UU/config.sh; then
16674         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
16675         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
16676         $sort | $uniq -u >UU/oldsyms
16677         set X `cat UU/oldsyms`
16678         shift
16679         case $# in
16680         0) ;;
16681         *)
16682                 cat <<EOM
16683 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
16684 EOM
16685                 echo "# Variables propagated from previous config.sh file." >>config.sh
16686                 for sym in `cat UU/oldsyms`; do
16687                         echo "    Propagating $hint variable "'$'"$sym..."
16688                         eval 'tmp="$'"${sym}"'"'
16689                         echo "$tmp" | \
16690                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
16691                 done
16692                 ;;
16693         esac
16694 fi
16695
16696 : Finish up by extracting the .SH files
16697 case "$alldone" in
16698 exit)
16699         $rm -rf UU
16700         echo "Done."
16701         exit 0
16702         ;;
16703 cont)
16704         ;;
16705 '')
16706         dflt=''
16707         nostick=true
16708         $cat <<EOM
16709
16710 If you'd like to make any changes to the config.sh file before I begin
16711 to configure things, do it as a shell escape now (e.g. !vi config.sh).
16712
16713 EOM
16714         rp="Press return or use a shell escape to edit config.sh:"
16715         . UU/myread
16716         nostick=''
16717         case "$ans" in
16718         '') ;;
16719         *) : in case they cannot read
16720                 sh 1>&4 -c "$ans";;
16721         esac
16722         ;;
16723 esac
16724
16725 : if this fails, just run all the .SH files by hand
16726 . ./config.sh
16727
16728 echo " "
16729 exec 1>&4
16730 . ./UU/extract
16731
16732 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
16733         dflt=y
16734         case "$silent" in
16735         true) ;;
16736         *)
16737                 $cat <<EOM
16738
16739 Now you need to generate make dependencies by running "$make depend".
16740 You might prefer to run it in background: "$make depend > makedepend.out &"
16741 It can take a while, so you might not want to run it right now.
16742
16743 EOM
16744                 ;;
16745         esac
16746         rp="Run $make depend now?"
16747         . UU/myread
16748         case "$ans" in
16749         y*)
16750                 $make depend && echo "Now you must run '$make'."
16751                 ;;
16752         *)
16753                 echo "You must run '$make depend' then '$make'."
16754                 ;;
16755         esac
16756 elif test -f [Mm]akefile; then
16757         echo " "
16758         echo "Now you must run a $make."
16759 else
16760         echo "Done."
16761 fi
16762
16763 if $test -f Policy.sh; then
16764     $cat <<EOM
16765
16766 If you compile $package on a different machine or from a different object
16767 directory, copy the Policy.sh file from this object directory to the
16768 new one before you run Configure -- this will help you with most of
16769 the policy defaults.
16770
16771 EOM
16772 fi
16773 if $test -f config.msg; then
16774     echo "Hmm.  I also noted the following information while running:"
16775     echo " "
16776     $cat config.msg >&4
16777     $rm -f config.msg
16778 fi
16779 $rm -f kit*isdone ark*isdone
16780 $rm -rf UU
16781
16782 : End of Configure
16783