This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Add a few glibc cpp symbols to probe for.
[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 Mon Sep 24 15:24:44 EET DST 2001 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.org)
25
26 cat >c1$$ <<EOF
27 ARGGGHHHH!!!!!
28
29 SCO csh still thinks true is false.  Write to SCO today and tell them that next
30 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
31
32 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
33 we'd have to do is go in and swap the && and || tokens, wherever they are.)
34
35 [End of diatribe. We now return you to your regularly scheduled programming...]
36 EOF
37 cat >c2$$ <<EOF
38
39 OOPS!  You naughty creature!  You didn't run Configure with sh!
40 I will attempt to remedy the situation by running sh for you...
41 EOF
42
43 true || cat c1$$ c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f c1$$ c2$$
49
50 : compute my invocation name
51 me=$0
52 case "$0" in
53 */*)
54         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
55         test "$me" || me=$0
56         ;;
57 esac
58
59 : Proper separator for the PATH environment variable
60 p_=:
61 : On OS/2 this directory should exist if this is not floppy only system :-]
62 if test -d c:/. ; then
63     if test -n "$OS2_SHELL"; then
64                 p_=\;
65                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
66                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
67         elif test -n "$DJGPP"; then
68                 p_=\;
69         fi
70 fi
71
72 : Proper PATH setting
73 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
74 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
75 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
76 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
77 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
78 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
79 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
80 paths="$paths /sbin /usr/sbin /usr/libexec"
81
82 for p in $paths
83 do
84         case "$p_$PATH$p_" in
85         *$p_$p$p_*) ;;
86         *) test -d $p && PATH=$PATH$p_$p ;;
87         esac
88 done
89
90 PATH=.$p_$PATH
91 export PATH
92
93 : shall we be using ksh?
94 inksh=''
95 needksh=''
96 avoidksh=''
97 newsh=/bin/ksh
98 changesh=''
99 if (PATH=.; alias -x) >/dev/null 2>&1; then
100                 inksh=true
101 fi
102 if test -f /hp-ux -a -f /bin/ksh; then
103         needksh='to avoid sh bug in "here document" expansion'
104 fi
105 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
106         if test X`/usr/bin/uname -v` = X4; then
107                 avoidksh="to avoid AIX 4's /bin/sh"
108                 newsh=/usr/bin/bsh
109         fi
110 fi
111 if test -f /osf_boot -a -f /usr/sbin/setld; then
112         if test X`/usr/bin/uname -s` = XOSF1; then
113                 avoidksh="to avoid Digital UNIX' ksh"
114                 newsh=/bin/sh
115                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
116         fi
117 fi
118 case "$inksh/$needksh" in
119 /[a-z]*)
120                 ENV=''
121                 changesh=true
122                 reason="$needksh"
123         ;;
124 esac
125 case "$inksh/$avoidksh" in
126 true/[a-z]*)
127         changesh=true
128         reason="$avoidksh"
129         ;;
130 esac
131 case "$inksh/$needksh-$avoidksh-" in
132 true/--)
133                 cat <<EOM
134 (I see you are using the Korn shell.  Some ksh's blow up on $me,
135 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
136 EOM
137         ;;
138 esac
139 case "$changesh" in
140 true)
141         echo "(Feeding myself to $newsh $reason.)"
142         case "$0" in
143         Configure|*/Configure) exec $newsh $0 "$@";;
144         *) exec $newsh Configure "$@";;
145         esac
146         ;;
147 esac
148
149 : if needed set CDPATH to a harmless value that is not chatty
150 : avoid bash 2.02 problems with empty CDPATH.
151 case "$CDPATH" in
152 '')     ;;
153 *)      case "$SHELL" in
154         *bash*) CDPATH='.' ;;
155         *)              CDPATH='' ;;
156         esac
157         ;;
158 esac
159 : Configure runs within the UU subdirectory
160 test -d UU || mkdir UU
161 cd UU && rm -f ./*
162
163 ccname=''
164 ccversion=''
165 ccsymbols=''
166 cppccsymbols=''
167 cppsymbols=''
168 from=''
169 run=''
170 targetarch=''
171 to=''
172 usecrosscompile=''
173 perllibs=''
174 dynamic_ext=''
175 extensions=''
176 known_extensions=''
177 nonxs_ext=''
178 static_ext=''
179 useopcode=''
180 useposix=''
181 extras=''
182 d_bsd=''
183 d_eunice=''
184 d_xenix=''
185 eunicefix=''
186 Mcc=''
187 ar=''
188 awk=''
189 bash=''
190 bison=''
191 byacc=''
192 cat=''
193 chgrp=''
194 chmod=''
195 chown=''
196 comm=''
197 compress=''
198 cp=''
199 cpio=''
200 cpp=''
201 csh=''
202 date=''
203 echo=''
204 egrep=''
205 emacs=''
206 expr=''
207 find=''
208 flex=''
209 grep=''
210 gzip=''
211 inews=''
212 ksh=''
213 less=''
214 line=''
215 lint=''
216 ln=''
217 lp=''
218 lpr=''
219 ls=''
220 mail=''
221 mailx=''
222 make=''
223 mkdir=''
224 more=''
225 mv=''
226 nm=''
227 nroff=''
228 perl=''
229 pg=''
230 pmake=''
231 pr=''
232 rm=''
233 rmail=''
234 sed=''
235 sendmail=''
236 shar=''
237 sleep=''
238 smail=''
239 sort=''
240 submit=''
241 tail=''
242 tar=''
243 tbl=''
244 tee=''
245 test=''
246 touch=''
247 tr=''
248 troff=''
249 uname=''
250 uniq=''
251 uuname=''
252 vi=''
253 zcat=''
254 zip=''
255 full_ar=''
256 full_sed=''
257 libswanted=''
258 hint=''
259 myuname=''
260 osname=''
261 osvers=''
262 Author=''
263 Date=''
264 Header=''
265 Id=''
266 Locker=''
267 Log=''
268 RCSfile=''
269 Revision=''
270 Source=''
271 State=''
272 _a=''
273 _exe=''
274 _o=''
275 archobjs=''
276 exe_ext=''
277 firstmakefile=''
278 lib_ext=''
279 obj_ext=''
280 path_sep=''
281 afs=''
282 afsroot=''
283 alignbytes=''
284 ansi2knr=''
285 archlib=''
286 archlibexp=''
287 d_archlib=''
288 installarchlib=''
289 archname=''
290 myarchname=''
291 d_atolf=''
292 d_atoll=''
293 baserev=''
294 bin=''
295 binexp=''
296 installbin=''
297 bincompat5005=''
298 d_bincompat5005=''
299 byteorder=''
300 cc=''
301 ccflags=''
302 cppflags=''
303 ldflags=''
304 lkflags=''
305 locincpth=''
306 optimize=''
307 cf_email=''
308 cf_by=''
309 cf_time=''
310 charsize=''
311 contains=''
312 cpp_stuff=''
313 cpplast=''
314 cppminus=''
315 cpprun=''
316 cppstdin=''
317 d__fwalk=''
318 d_access=''
319 d_accessx=''
320 d_alarm=''
321 d_attribut=''
322 d_bcmp=''
323 d_bcopy=''
324 d_bzero=''
325 d_casti32=''
326 castflags=''
327 d_castneg=''
328 d_chown=''
329 d_chroot=''
330 d_chsize=''
331 d_class=''
332 d_closedir=''
333 d_void_closedir=''
334 d_cmsghdr_s=''
335 d_const=''
336 cryptlib=''
337 d_crypt=''
338 d_csh=''
339 full_csh=''
340 d_cuserid=''
341 d_dbl_dig=''
342 d_dbminitproto=''
343 d_difftime=''
344 d_dlerror=''
345 d_dlopen=''
346 d_dlsymun=''
347 d_dosuid=''
348 d_suidsafe=''
349 d_drand48proto=''
350 d_dup2=''
351 d_eaccess=''
352 d_endgrent=''
353 d_endhent=''
354 d_endnent=''
355 d_endpent=''
356 d_endpwent=''
357 d_endsent=''
358 d_fchdir=''
359 d_fchmod=''
360 d_fchown=''
361 d_fcntl=''
362 d_fcntl_can_lock=''
363 d_fd_macros=''
364 d_fd_set=''
365 d_fds_bits=''
366 d_fgetpos=''
367 d_finite=''
368 d_finitel=''
369 d_flexfnam=''
370 d_flock=''
371 d_flockproto=''
372 d_fork=''
373 d_fp_class=''
374 d_fpclass=''
375 d_fpclassify=''
376 d_fpclassl=''
377 d_fpos64_t=''
378 d_frexpl=''
379 d_fs_data_s=''
380 d_fseeko=''
381 d_fsetpos=''
382 d_fstatfs=''
383 d_fsync=''
384 d_ftello=''
385 d_ftime=''
386 d_gettimeod=''
387 d_Gconvert=''
388 d_getcwd=''
389 d_getespwnam=''
390 d_getfsstat=''
391 d_getgrent=''
392 d_getgrps=''
393 d_gethbyaddr=''
394 d_gethbyname=''
395 d_gethent=''
396 aphostname=''
397 d_gethname=''
398 d_phostname=''
399 d_uname=''
400 d_gethostprotos=''
401 d_getitimer=''
402 d_getlogin=''
403 d_getmnt=''
404 d_getmntent=''
405 d_getnbyaddr=''
406 d_getnbyname=''
407 d_getnent=''
408 d_getnetprotos=''
409 d_getpagsz=''
410 d_getpent=''
411 d_getpgid=''
412 d_getpgrp2=''
413 d_bsdgetpgrp=''
414 d_getpgrp=''
415 d_getppid=''
416 d_getprior=''
417 d_getpbyname=''
418 d_getpbynumber=''
419 d_getprotoprotos=''
420 d_getprpwnam=''
421 d_getpwent=''
422 d_getsent=''
423 d_getservprotos=''
424 d_getspnam=''
425 d_getsbyname=''
426 d_getsbyport=''
427 d_gnulibc=''
428 d_hasmntopt=''
429 d_htonl=''
430 d_inetaton=''
431 d_int64_t=''
432 d_isascii=''
433 d_isfinite=''
434 d_isinf=''
435 d_isnan=''
436 d_isnanl=''
437 d_killpg=''
438 d_lchown=''
439 d_ldbl_dig=''
440 d_link=''
441 d_locconv=''
442 d_lockf=''
443 d_longdbl=''
444 longdblsize=''
445 d_longlong=''
446 longlongsize=''
447 d_lseekproto=''
448 d_lstat=''
449 d_madvise=''
450 d_mblen=''
451 d_mbstowcs=''
452 d_mbtowc=''
453 d_memchr=''
454 d_memcmp=''
455 d_memcpy=''
456 d_memmove=''
457 d_memset=''
458 d_mkdir=''
459 d_mkdtemp=''
460 d_mkfifo=''
461 d_mkstemp=''
462 d_mkstemps=''
463 d_mktime=''
464 d_mmap=''
465 mmaptype=''
466 d_modfl=''
467 d_modfl_pow32_bug=''
468 d_mprotect=''
469 d_msg=''
470 d_msgctl=''
471 d_msgget=''
472 d_msghdr_s=''
473 d_msgrcv=''
474 d_msgsnd=''
475 d_msync=''
476 d_munmap=''
477 d_nice=''
478 d_nl_langinfo=''
479 d_off64_t=''
480 d_open3=''
481 d_fpathconf=''
482 d_pathconf=''
483 d_pause=''
484 d_pipe=''
485 d_poll=''
486 d_portable=''
487 d_old_pthread_create_joinable=''
488 old_pthread_create_joinable=''
489 d_pthread_atfork=''
490 d_pthread_yield=''
491 d_sched_yield=''
492 sched_yield=''
493 d_qgcvt=''
494 d_readdir=''
495 d_rewinddir=''
496 d_seekdir=''
497 d_telldir=''
498 d_readlink=''
499 d_readv=''
500 d_recvmsg=''
501 d_rename=''
502 d_rmdir=''
503 d_safebcpy=''
504 d_safemcpy=''
505 d_sanemcmp=''
506 d_sbrkproto=''
507 d_select=''
508 d_sem=''
509 d_semctl=''
510 d_semget=''
511 d_semop=''
512 d_sendmsg=''
513 d_setegid=''
514 d_seteuid=''
515 d_setgrent=''
516 d_setgrps=''
517 d_sethent=''
518 d_setitimer=''
519 d_setlinebuf=''
520 d_setlocale=''
521 d_setnent=''
522 d_setpent=''
523 d_setpgid=''
524 d_setpgrp2=''
525 d_bsdsetpgrp=''
526 d_setpgrp=''
527 d_setprior=''
528 d_setproctitle=''
529 d_setpwent=''
530 d_setregid=''
531 d_setresgid=''
532 d_setresuid=''
533 d_setreuid=''
534 d_setrgid=''
535 d_setruid=''
536 d_setsent=''
537 d_setsid=''
538 d_setvbuf=''
539 d_sfio=''
540 usesfio=''
541 d_shm=''
542 d_shmat=''
543 d_shmatprototype=''
544 shmattype=''
545 d_shmctl=''
546 d_shmdt=''
547 d_shmget=''
548 d_sigaction=''
549 d_sigprocmask=''
550 d_sigsetjmp=''
551 d_sockatmark=''
552 d_sockatmarkproto=''
553 d_msg_ctrunc=''
554 d_msg_dontroute=''
555 d_msg_oob=''
556 d_msg_peek=''
557 d_msg_proxy=''
558 d_oldsock=''
559 d_scm_rights=''
560 d_socket=''
561 d_sockpair=''
562 sockethdr=''
563 socketlib=''
564 d_socklen_t=''
565 d_socks5_init=''
566 d_sqrtl=''
567 d_sresgproto=''
568 d_sresuproto=''
569 d_statblks=''
570 d_statfs_f_flags=''
571 d_statfs_s=''
572 d_fstatvfs=''
573 d_statvfs=''
574 d_stdio_cnt_lval=''
575 d_stdio_ptr_lval=''
576 d_stdio_ptr_lval_nochange_cnt=''
577 d_stdio_ptr_lval_sets_cnt=''
578 d_stdiobase=''
579 d_stdstdio=''
580 stdio_base=''
581 stdio_bufsiz=''
582 stdio_cnt=''
583 stdio_filbuf=''
584 stdio_ptr=''
585 d_index=''
586 d_strchr=''
587 d_strcoll=''
588 d_strctcpy=''
589 d_strerrm=''
590 d_strerror=''
591 d_sysernlst=''
592 d_syserrlst=''
593 d_strftime=''
594 d_strtod=''
595 d_strtol=''
596 d_strtold=''
597 d_strtoll=''
598 d_strtoq=''
599 d_strtoul=''
600 d_strtoull=''
601 d_strtouq=''
602 d_strxfrm=''
603 d_symlink=''
604 d_syscall=''
605 d_syscallproto=''
606 d_sysconf=''
607 d_system=''
608 d_tcgetpgrp=''
609 d_tcsetpgrp=''
610 d_telldirproto=''
611 d_time=''
612 timetype=''
613 clocktype=''
614 d_times=''
615 d_truncate=''
616 d_tzname=''
617 d_u32align=''
618 d_ualarm=''
619 d_umask=''
620 d_semctl_semid_ds=''
621 d_semctl_semun=''
622 d_union_semun=''
623 d_unordered=''
624 d_usleep=''
625 d_usleepproto=''
626 d_ustat=''
627 d_vfork=''
628 usevfork=''
629 d_voidsig=''
630 signal_t=''
631 d_volatile=''
632 d_charvspr=''
633 d_vprintf=''
634 d_wait4=''
635 d_waitpid=''
636 d_wcstombs=''
637 d_wctomb=''
638 d_writev=''
639 dlext=''
640 cccdlflags=''
641 ccdlflags=''
642 dlsrc=''
643 ld=''
644 lddlflags=''
645 usedl=''
646 doublesize=''
647 ebcdic=''
648 fflushNULL=''
649 fflushall=''
650 fpossize=''
651 fpostype=''
652 gccosandvers=''
653 gccversion=''
654 gidformat=''
655 gidsign=''
656 gidsize=''
657 gidtype=''
658 groupstype=''
659 h_fcntl=''
660 h_sysfile=''
661 i_arpainet=''
662 db_hashtype=''
663 db_prefixtype=''
664 db_version_major=''
665 db_version_minor=''
666 db_version_patch=''
667 i_db=''
668 i_dbm=''
669 i_rpcsvcdbm=''
670 d_dirnamlen=''
671 direntrytype=''
672 i_dirent=''
673 i_dld=''
674 i_dlfcn=''
675 i_fcntl=''
676 i_float=''
677 i_fp=''
678 i_fp_class=''
679 i_gdbm=''
680 d_grpasswd=''
681 i_grp=''
682 i_ieeefp=''
683 i_inttypes=''
684 i_langinfo=''
685 i_libutil=''
686 i_limits=''
687 i_locale=''
688 i_machcthr=''
689 i_malloc=''
690 i_math=''
691 i_memory=''
692 i_mntent=''
693 i_ndbm=''
694 i_netdb=''
695 i_neterrno=''
696 i_netinettcp=''
697 i_niin=''
698 i_sysin=''
699 i_poll=''
700 i_prot=''
701 i_pthread=''
702 d_pwage=''
703 d_pwchange=''
704 d_pwclass=''
705 d_pwcomment=''
706 d_pwexpire=''
707 d_pwgecos=''
708 d_pwpasswd=''
709 d_pwquota=''
710 i_pwd=''
711 i_sfio=''
712 i_shadow=''
713 i_socks=''
714 i_stddef=''
715 i_stdlib=''
716 i_string=''
717 strings=''
718 i_sunmath=''
719 i_sysaccess=''
720 i_sysdir=''
721 i_sysfile=''
722 d_voidtty=''
723 i_bsdioctl=''
724 i_sysfilio=''
725 i_sysioctl=''
726 i_syssockio=''
727 i_syslog=''
728 i_sysmman=''
729 i_sysmode=''
730 i_sysmount=''
731 i_sysndir=''
732 i_sysparam=''
733 i_sysresrc=''
734 i_syssecrt=''
735 i_sysselct=''
736 i_sysstat=''
737 i_sysstatfs=''
738 i_sysstatvfs=''
739 i_systimes=''
740 i_systypes=''
741 i_sysuio=''
742 i_sysun=''
743 i_sysutsname=''
744 i_sysvfs=''
745 i_syswait=''
746 i_sgtty=''
747 i_termio=''
748 i_termios=''
749 i_systime=''
750 i_systimek=''
751 i_time=''
752 timeincl=''
753 i_unistd=''
754 i_ustat=''
755 i_utime=''
756 i_values=''
757 i_stdarg=''
758 i_varargs=''
759 i_varhdr=''
760 i_vfork=''
761 inc_version_list=''
762 inc_version_list_init=''
763 installprefix=''
764 installprefixexp=''
765 installstyle=''
766 installusrbinperl=''
767 intsize=''
768 longsize=''
769 shortsize=''
770 issymlink=''
771 libc=''
772 ldlibpthname=''
773 libperl=''
774 shrpenv=''
775 useshrplib=''
776 glibpth=''
777 libpth=''
778 loclibpth=''
779 plibpth=''
780 xlibpth=''
781 ignore_versioned_solibs=''
782 libs=''
783 libsdirs=''
784 libsfiles=''
785 libsfound=''
786 libspath=''
787 lns=''
788 d_PRIEUldbl=''
789 d_PRIFUldbl=''
790 d_PRIGUldbl=''
791 d_PRIeldbl=''
792 d_PRIfldbl=''
793 d_PRIgldbl=''
794 d_SCNfldbl=''
795 sPRIEUldbl=''
796 sPRIFUldbl=''
797 sPRIGUldbl=''
798 sPRIeldbl=''
799 sPRIfldbl=''
800 sPRIgldbl=''
801 sSCNfldbl=''
802 lseeksize=''
803 lseektype=''
804 make_set_make=''
805 d_mymalloc=''
806 freetype=''
807 mallocobj=''
808 mallocsrc=''
809 malloctype=''
810 usemymalloc=''
811 installman1dir=''
812 man1dir=''
813 man1direxp=''
814 man1ext=''
815 installman3dir=''
816 man3dir=''
817 man3direxp=''
818 man3ext=''
819 modetype=''
820 multiarch=''
821 mydomain=''
822 myhostname=''
823 phostname=''
824 c=''
825 n=''
826 d_eofnblk=''
827 eagain=''
828 o_nonblock=''
829 rd_nodata=''
830 need_va_copy=''
831 netdb_hlen_type=''
832 netdb_host_type=''
833 netdb_name_type=''
834 netdb_net_type=''
835 groupcat=''
836 hostcat=''
837 passcat=''
838 orderlib=''
839 ranlib=''
840 d_perl_otherlibdirs=''
841 otherlibdirs=''
842 package=''
843 spackage=''
844 pager=''
845 api_revision=''
846 api_subversion=''
847 api_version=''
848 api_versionstring=''
849 patchlevel=''
850 perl_patchlevel=''
851 revision=''
852 subversion=''
853 version=''
854 version_patchlevel_string=''
855 perl5=''
856 perladmin=''
857 perlpath=''
858 d_nv_preserves_uv=''
859 d_nv_preserves_uv_bits=''
860 i16size=''
861 i16type=''
862 i32size=''
863 i32type=''
864 i64size=''
865 i64type=''
866 i8size=''
867 i8type=''
868 ivsize=''
869 ivtype=''
870 nvsize=''
871 nvtype=''
872 u16size=''
873 u16type=''
874 u32size=''
875 u32type=''
876 u64size=''
877 u64type=''
878 u8size=''
879 u8type=''
880 uvsize=''
881 uvtype=''
882 ivdformat=''
883 nvEUformat=''
884 nvFUformat=''
885 nvGUformat=''
886 nveformat=''
887 nvfformat=''
888 nvgformat=''
889 uvXUformat=''
890 uvoformat=''
891 uvuformat=''
892 uvxformat=''
893 pidtype=''
894 prefix=''
895 prefixexp=''
896 installprivlib=''
897 privlib=''
898 privlibexp=''
899 prototype=''
900 ptrsize=''
901 d_PRIXU64=''
902 d_PRId64=''
903 d_PRIi64=''
904 d_PRIo64=''
905 d_PRIu64=''
906 d_PRIx64=''
907 sPRIXU64=''
908 sPRId64=''
909 sPRIi64=''
910 sPRIo64=''
911 sPRIu64=''
912 sPRIx64=''
913 d_quad=''
914 quadkind=''
915 quadtype=''
916 uquadtype=''
917 drand01=''
918 randbits=''
919 randfunc=''
920 randseedtype=''
921 seedfunc=''
922 installscript=''
923 scriptdir=''
924 scriptdirexp=''
925 selectminbits=''
926 selecttype=''
927 sh=''
928 sig_count=''
929 sig_name=''
930 sig_name_init=''
931 sig_num=''
932 sig_num_init=''
933 sig_size=''
934 installsitearch=''
935 sitearch=''
936 sitearchexp=''
937 installsitebin=''
938 sitebin=''
939 sitebinexp=''
940 installsitelib=''
941 sitelib=''
942 sitelib_stem=''
943 sitelibexp=''
944 siteprefix=''
945 siteprefixexp=''
946 sizesize=''
947 sizetype=''
948 so=''
949 socksizetype=''
950 sharpbang=''
951 shsharp=''
952 spitshell=''
953 src=''
954 ssizetype=''
955 startperl=''
956 startsh=''
957 stdchar=''
958 d_stdio_stream_array=''
959 stdio_stream_array=''
960 sysman=''
961 trnl=''
962 uidformat=''
963 uidsign=''
964 uidsize=''
965 uidtype=''
966 archname64=''
967 use64bitall=''
968 use64bitint=''
969 ccflags_uselargefiles=''
970 ldflags_uselargefiles=''
971 libswanted_uselargefiles=''
972 uselargefiles=''
973 uselongdouble=''
974 usemorebits=''
975 usemultiplicity=''
976 nm_opt=''
977 nm_so_opt=''
978 runnm=''
979 usenm=''
980 useperlio=''
981 usesocks=''
982 d_oldpthreads=''
983 use5005threads=''
984 useithreads=''
985 usereentrant=''
986 usethreads=''
987 incpath=''
988 mips_type=''
989 usrinc=''
990 d_vendorarch=''
991 installvendorarch=''
992 vendorarch=''
993 vendorarchexp=''
994 d_vendorbin=''
995 installvendorbin=''
996 vendorbin=''
997 vendorbinexp=''
998 d_vendorlib=''
999 installvendorlib=''
1000 vendorlib=''
1001 vendorlib_stem=''
1002 vendorlibexp=''
1003 usevendorprefix=''
1004 vendorprefix=''
1005 vendorprefixexp=''
1006 versiononly=''
1007 defvoidused=''
1008 voidflags=''
1009 pm_apiversion=''
1010 xs_apiversion=''
1011 yacc=''
1012 yaccflags=''
1013 CONFIG=''
1014
1015 define='define'
1016 undef='undef'
1017 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
1018 rmlist=''
1019
1020 : We must find out about Eunice early
1021 eunicefix=':'
1022 if test -f /etc/unixtovms; then
1023         eunicefix=/etc/unixtovms
1024 fi
1025 if test -f /etc/unixtovms.exe; then
1026         eunicefix=/etc/unixtovms.exe
1027 fi
1028
1029 i_whoami=''
1030 ccname=''
1031 ccversion=''
1032 perllibs=''
1033 : set useposix=false in your hint file to disable the POSIX extension.
1034 useposix=true
1035 : set useopcode=false in your hint file to disable the Opcode extension.
1036 useopcode=true
1037 : Trailing extension.  Override this in a hint file, if needed.
1038 _exe=''
1039 : Extra object files, if any, needed on this platform.
1040 archobjs=''
1041 archname=''
1042 : Possible local include directories to search.
1043 : Set locincpth to "" in a hint file to defeat local include searches.
1044 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
1045 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
1046 :
1047 : no include file wanted by default
1048 inclwanted=''
1049
1050 groupstype=''
1051 libnames=''
1052 : change the next line if compiling for Xenix/286 on Xenix/386
1053 xlibpth='/usr/lib/386 /lib/386'
1054 : Possible local library directories to search.
1055 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1056 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1057
1058 : general looking path for locating libraries
1059 glibpth="/lib /usr/lib $xlibpth"
1060 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1061 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1062 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1063
1064 : Private path used by Configure to find libraries.  Its value
1065 : is prepended to libpth. This variable takes care of special
1066 : machines, like the mips.  Usually, it should be empty.
1067 plibpth=''
1068
1069 : default library list
1070 libswanted=''
1071 : some systems want to use only the non-versioned libso:s
1072 ignore_versioned_solibs=''
1073 archname64=''
1074 ccflags_uselargefiles=''
1075 ldflags_uselargefiles=''
1076 libswanted_uselargefiles=''
1077 : set usemultiplicity on the Configure command line to enable multiplicity.
1078 : set usesocks on the Configure command line to enable socks.
1079 : set usethreads on the Configure command line to enable threads.
1080 usereentrant='undef'
1081 : full support for void wanted by default
1082 defvoidused=15
1083
1084 : List of libraries we want.
1085 : If anyone needs -lnet, put it in a hint file.
1086 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1087 libswanted="$libswanted dld ld sun m c cposix posix"
1088 libswanted="$libswanted ndir dir crypt sec"
1089 libswanted="$libswanted ucb bsd BSD PW x util"
1090 : We probably want to search /usr/shlib before most other libraries.
1091 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1092 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1093 glibpth="/usr/shlib $glibpth"
1094 : Do not use vfork unless overridden by a hint file.
1095 usevfork=false
1096
1097 : Find the basic shell for Bourne shell scripts
1098 case "$sh" in
1099 '')
1100         case "$SYSTYPE" in
1101         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1102         *) xxx='/bin/sh';;
1103         esac
1104         if test -f "$xxx"; then
1105                 sh="$xxx"
1106         else
1107                 : Build up a list and do a single loop so we can 'break' out.
1108                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1109                 for xxx in sh bash ksh pdksh ash; do
1110                         for p in $pth; do
1111                                 try="$try ${p}/${xxx}"
1112                         done
1113                 done
1114                 for xxx in $try; do
1115                         if test -f "$xxx"; then
1116                                 sh="$xxx";
1117                                 break
1118                         elif test -f "$xxx.exe"; then
1119                                 sh="$xxx";
1120                                 break
1121                         fi
1122                 done
1123         fi
1124         ;;
1125 esac
1126
1127 case "$sh" in
1128 '')     cat >&2 <<EOM
1129 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1130
1131 Usually it's in /bin/sh.  How did you even get this far?
1132 Please contact me (Perl Maintainers) at perlbug@perl.org and 
1133 we'll try to straighten this all out.
1134 EOM
1135         exit 1
1136         ;;
1137 esac
1138
1139 : see if sh knows # comments
1140 if `$sh -c '#' >/dev/null 2>&1`; then
1141         shsharp=true
1142         spitshell=cat
1143         xcat=/bin/cat
1144         test -f $xcat || xcat=/usr/bin/cat
1145         echo "#!$xcat" >sharp
1146         $eunicefix sharp
1147         chmod +x sharp
1148         ./sharp > today
1149         if test -s today; then
1150                 sharpbang='#!'
1151         else
1152                 echo "#! $xcat" > sharp
1153                 $eunicefix sharp
1154                 chmod +x sharp
1155                 ./sharp > today
1156                 if test -s today; then
1157                         sharpbang='#! '
1158                 else
1159                         sharpbang=': use '
1160                 fi
1161         fi
1162 else
1163         echo " "
1164         echo "Your $sh doesn't grok # comments--I will strip them later on."
1165         shsharp=false
1166         cd ..
1167         echo "exec grep -v '^[  ]*#'" >spitshell
1168         chmod +x spitshell
1169         $eunicefix spitshell
1170         spitshell=`pwd`/spitshell
1171         cd UU
1172         echo "I presume that if # doesn't work, #! won't work either!"
1173         sharpbang=': use '
1174 fi
1175 rm -f sharp today
1176
1177 : figure out how to guarantee sh startup
1178 case "$startsh" in
1179 '') startsh=${sharpbang}${sh} ;;
1180 *)
1181 esac
1182 cat >sharp <<EOSS
1183 $startsh
1184 set abc
1185 test "$?abc" != 1
1186 EOSS
1187
1188 chmod +x sharp
1189 $eunicefix sharp
1190 if ./sharp; then
1191         : echo "Yup, it does."
1192 else
1193         echo "Hmm... '$startsh' does not guarantee sh startup..."
1194         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1195 fi
1196 rm -f sharp
1197
1198
1199 : Save command line options in file UU/cmdline.opt for later use in
1200 : generating config.sh.
1201 cat > cmdline.opt <<EOSH
1202 # Configure command line arguments.
1203 config_arg0='$0'
1204 config_args='$*'
1205 config_argc=$#
1206 EOSH
1207 argn=1
1208 args_exp=''
1209 args_sep=''
1210 for arg in "$@"; do
1211         cat >>cmdline.opt <<EOSH
1212 config_arg$argn='$arg'
1213 EOSH
1214         # Extreme backslashitis: replace each ' by '"'"'
1215         cat <<EOC | sed -e "s/'/'"'"'"'"'"'"'/g" > cmdl.opt
1216 $arg
1217 EOC
1218         arg_exp=`cat cmdl.opt`
1219         args_exp="$args_exp$args_sep'$arg_exp'"
1220         argn=`expr $argn + 1`
1221         args_sep=' '
1222 done
1223 # args_exp is good for restarting self: eval "set X $args_exp"; shift; $0 "$@"
1224 # used by ./hints/os2.sh
1225 rm -f cmdl.opt
1226
1227 : produce awk script to parse command line options
1228 cat >options.awk <<'EOF'
1229 BEGIN {
1230         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1231
1232         len = length(optstr);
1233         for (i = 1; i <= len; i++) {
1234                 c = substr(optstr, i, 1);
1235                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1236                 if (a == ":") {
1237                         arg[c] = 1;
1238                         i++;
1239                 }
1240                 opt[c] = 1;
1241         }
1242 }
1243 {
1244         expect = 0;
1245         str = $0;
1246         if (substr(str, 1, 1) != "-") {
1247                 printf("'%s'\n", str);
1248                 next;
1249         }
1250         len = length($0);
1251         for (i = 2; i <= len; i++) {
1252                 c = substr(str, i, 1);
1253                 if (!opt[c]) {
1254                         printf("-%s\n", substr(str, i));
1255                         next;
1256                 }
1257                 printf("-%s\n", c);
1258                 if (arg[c]) {
1259                         if (i < len)
1260                                 printf("'%s'\n", substr(str, i + 1));
1261                         else
1262                                 expect = 1;
1263                         next;
1264                 }
1265         }
1266 }
1267 END {
1268         if (expect)
1269                 print "?";
1270 }
1271 EOF
1272
1273 : process the command line options
1274 set X `for arg in "$@"; do echo "X$arg"; done |
1275         sed -e s/X// | awk -f options.awk`
1276 eval "set $*"
1277 shift
1278 rm -f options.awk
1279
1280 : set up default values
1281 fastread=''
1282 reuseval=false
1283 config_sh=''
1284 alldone=''
1285 error=''
1286 silent=''
1287 extractsh=''
1288 override=''
1289 knowitall=''
1290 rm -f optdef.sh posthint.sh
1291 cat >optdef.sh <<EOS
1292 $startsh
1293 EOS
1294
1295
1296 : option parsing
1297 while test $# -gt 0; do
1298         case "$1" in
1299         -d) shift; fastread=yes;;
1300         -e) shift; alldone=cont;;
1301         -f)
1302                 shift
1303                 cd ..
1304                 if test -r "$1"; then
1305                         config_sh="$1"
1306                 else
1307                         echo "$me: cannot read config file $1." >&2
1308                         error=true
1309                 fi
1310                 cd UU
1311                 shift;;
1312         -h) shift; error=true;;
1313         -r) shift; reuseval=true;;
1314         -s) shift; silent=true; realsilent=true;;
1315         -E) shift; alldone=exit;;
1316         -K) shift; knowitall=true;;
1317         -O) shift; override=true;;
1318         -S) shift; silent=true; extractsh=true;;
1319         -D)
1320                 shift
1321                 case "$1" in
1322                 *=)
1323                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1324                         echo "$me: ignoring -D $1" >&2
1325                         ;;
1326                 *=*) echo "$1" | \
1327                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1328                 *) echo "$1='define'" >> optdef.sh;;
1329                 esac
1330                 shift
1331                 ;;
1332         -U)
1333                 shift
1334                 case "$1" in
1335                 *=) echo "$1" >> optdef.sh;;
1336                 *=*)
1337                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1338                         echo "$me: ignoring -U $1" >&2
1339                         ;;
1340                 *) echo "$1='undef'" >> optdef.sh;;
1341                 esac
1342                 shift
1343                 ;;
1344         -A)
1345             shift
1346             xxx=''
1347             yyy="$1"
1348             zzz=''
1349             uuu=undef
1350             case "$yyy" in
1351             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1352                  case "$zzz" in
1353                  *:*) zzz='' ;;
1354                  *)   xxx=append
1355                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1356                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1357                  esac
1358                  ;;
1359             esac
1360             case "$xxx" in
1361             '')  case "$yyy" in
1362                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1363                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1364                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1365                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1366                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1367                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1368                  esac
1369                  ;;       
1370             esac
1371             case "$xxx" in
1372             append)
1373                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1374             clear)
1375                 echo "$yyy=''"                  >> posthint.sh ;;
1376             define)
1377                 case "$zzz" in
1378                 '') zzz=define ;;
1379                 esac
1380                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1381             eval)
1382                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1383             prepend)
1384                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1385             undef)
1386                 case "$zzz" in
1387                 '') zzz="$uuu" ;;
1388                 esac
1389                 echo "$yyy=$zzz"                >> posthint.sh ;;
1390             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1391             esac
1392             shift
1393             ;;
1394         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1395             exit 0;;
1396         --) break;;
1397         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1398         *) break;;
1399         esac
1400 done
1401
1402 case "$error" in
1403 true)
1404         cat >&2 <<EOM
1405 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1406                  [-U symbol] [-U symbol=] [-A command:symbol...]
1407   -d : use defaults for all answers.
1408   -e : go on without questioning past the production of config.sh.
1409   -f : specify an alternate default configuration file.
1410   -h : print this help message and exit (with an error status).
1411   -r : reuse C symbols value if possible (skips costly nm extraction).
1412   -s : silent mode, only echoes questions and essential information.
1413   -D : define symbol to have some value:
1414          -D symbol         symbol gets the value 'define'
1415          -D symbol=value   symbol gets the value 'value'
1416   -E : stop at the end of questions, after having produced config.sh.
1417   -K : do not use unless you know what you are doing.
1418   -O : let -D and -U override definitions from loaded configuration file.
1419   -S : perform variable substitutions on all .SH files (can mix with -f)
1420   -U : undefine symbol:
1421          -U symbol    symbol gets the value 'undef'
1422          -U symbol=   symbol gets completely empty
1423   -A : manipulate symbol after the platform specific hints have been applied:
1424          -A symbol=value                append " "value to symbol
1425          -A append:symbol=value         append value to symbol
1426          -A define:symbol=value         define symbol to have value
1427          -A clear:symbol                define symbol to be ''
1428          -A define:symbol               define symbol to be 'define'
1429          -A eval:symbol=value           define symbol to be eval of value
1430          -A prepend:symbol=value        prepend value to symbol
1431          -A undef:symbol                define symbol to be 'undef'
1432          -A undef:symbol=               define symbol to be ''
1433   -V : print version number and exit (with a zero status).
1434 EOM
1435         exit 1
1436         ;;
1437 esac
1438
1439 : Sanity checks
1440 case "$fastread$alldone" in
1441 yescont|yesexit) ;;
1442 *)
1443         case "$extractsh" in
1444         true) ;;
1445         *)
1446                 if test ! -t 0; then
1447                         echo "Say 'sh Configure', not 'sh <Configure'"
1448                         exit 1
1449                 fi
1450                 ;;
1451         esac
1452         ;;
1453 esac
1454
1455 exec 4>&1
1456 case "$silent" in
1457 true) exec 1>/dev/null;;
1458 esac
1459
1460 : run the defines and the undefines, if any, but leave the file out there...
1461 touch optdef.sh
1462 . ./optdef.sh
1463 : create the posthint manipulation script and leave the file out there...
1464 touch posthint.sh
1465
1466 : set package name
1467 package=perl5
1468 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1469 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1470 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1471 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1472 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1473 esac
1474
1475 : Some greps do not return status, grrr.
1476 echo "grimblepritz" >grimble
1477 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1478         contains=contains
1479 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1480         contains=grep
1481 else
1482         contains=contains
1483 fi
1484 rm -f grimble
1485 : the following should work in any shell
1486 case "$contains" in
1487 contains*)
1488         echo " "
1489         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1490         cat >contains <<'EOSS'
1491 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1492 EOSS
1493 chmod +x contains
1494 esac
1495
1496 : Find the path to the source tree
1497 case "$src" in
1498 '') case "$0" in
1499     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1500          case "$src" in
1501          /*)    ;;
1502          .)     ;;
1503          *)     src=`cd ../$src && pwd` ;;
1504          esac
1505          ;;
1506     *)   src='.';;
1507     esac;;
1508 esac
1509 case "$src" in
1510 '')     src=/
1511         rsrc=/
1512         ;;
1513 /*) rsrc="$src";;
1514 *) rsrc="../$src";;
1515 esac
1516 if test -f $rsrc/Configure && \
1517         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1518 then
1519    : found it, so we are ok.
1520 else
1521         rsrc=''
1522         for src in . .. ../.. ../../.. ../../../..; do
1523                 if test -f ../$src/Configure && \
1524                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1525                 then
1526                         rsrc=../$src
1527                         break
1528                 fi
1529         done
1530 fi
1531 case "$rsrc" in
1532 '')
1533         cat <<EOM >&4
1534
1535 Sorry, I can't seem to locate the source dir for $package.  Please start
1536 Configure with an explicit path -- i.e. /some/path/Configure.
1537
1538 EOM
1539         exit 1
1540         ;;
1541 ../.)   rsrc='..';;
1542 *)
1543         echo " "
1544         echo "Sources for $package found in \"$src\"." >&4
1545         ;;
1546 esac
1547
1548 : script used to extract .SH files with variable substitutions
1549 cat >extract <<'EOS'
1550 PERL_CONFIG_SH=true
1551 echo "Doing variable substitutions on .SH files..."
1552 if test -f MANIFEST; then
1553         set x `awk '{print $1}' < MANIFEST | grep '\.SH$'`
1554 else
1555         echo "(Looking for .SH files under the source directory.)"
1556         set x `(cd $src; find . -name "*.SH" -print)`
1557 fi
1558 shift
1559 case $# in
1560 0) set x `(cd $src; echo *.SH)`; shift;;
1561 esac
1562 if test ! -f $src/$1; then
1563         shift
1564 fi
1565 mkdir_p='
1566 name=$1;
1567 create="";
1568 while test $name; do
1569         if test ! -d "$name"; then
1570                 create="$name $create";
1571                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1572                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1573         else
1574                 name="";
1575         fi;
1576 done;
1577 for file in $create; do
1578         mkdir $file;
1579 done
1580 '
1581 for file in $*; do
1582         case "$src" in
1583         ".")
1584                 case "$file" in
1585                 */*)
1586                         dir=`expr X$file : 'X\(.*\)/'`
1587                         file=`expr X$file : 'X.*/\(.*\)'`
1588                         (cd $dir && . ./$file)
1589                         ;;
1590                 *)
1591                         . ./$file
1592                         ;;
1593                 esac
1594                 ;;
1595         *)
1596                 case "$file" in
1597                 */*)
1598                         dir=`expr X$file : 'X\(.*\)/'`
1599                         file=`expr X$file : 'X.*/\(.*\)'`
1600                         (set x $dir; shift; eval $mkdir_p)
1601                         sh <$src/$dir/$file
1602                         ;;
1603                 *)
1604                         sh <$src/$file
1605                         ;;
1606                 esac
1607                 ;;
1608         esac
1609 done
1610 if test -f $src/config_h.SH; then
1611         if test ! -f config.h; then
1612         : oops, they left it out of MANIFEST, probably, so do it anyway.
1613         . $src/config_h.SH
1614         fi
1615 fi
1616 EOS
1617
1618 : extract files and exit if asked to do so
1619 case "$extractsh" in
1620 true)
1621         case "$realsilent" in
1622         true) ;;
1623         *) exec 1>&4;;
1624         esac
1625         case "$config_sh" in
1626         '') config_sh='config.sh';;
1627         esac
1628         echo " "
1629         echo "Fetching answers from $config_sh..."
1630         cd ..
1631         . $config_sh
1632         test "$override" && . ./optdef.sh
1633         echo " "
1634         . UU/extract
1635         rm -rf UU
1636         echo "Extraction done."
1637         exit 0
1638         ;;
1639 esac
1640
1641 : Eunice requires " " instead of "", can you believe it
1642 echo " "
1643 : Here we go...
1644 echo "Beginning of configuration questions for $package."
1645
1646 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1647
1648 : first determine how to suppress newline on echo command
1649 echo " "
1650 echo "Checking echo to see how to suppress newlines..."
1651 (echo "hi there\c" ; echo " ") >.echotmp
1652 if $contains c .echotmp >/dev/null 2>&1 ; then
1653         echo "...using -n."
1654         n='-n'
1655         c=''
1656 else
1657         cat <<'EOM'
1658 ...using \c
1659 EOM
1660         n=''
1661         c='\c'
1662 fi
1663 echo $n "The star should be here-->$c"
1664 echo '*'
1665 rm -f .echotmp
1666
1667 : Now test for existence of everything in MANIFEST
1668 echo " "
1669 if test -f $rsrc/MANIFEST; then
1670         echo "First let's make sure your kit is complete.  Checking..." >&4
1671         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1672         rm -f missing
1673         tmppwd=`pwd`
1674         for filelist in x??; do
1675                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1676         done
1677         if test -s missing; then
1678                 cat missing >&4
1679                 cat >&4 <<'EOM'
1680
1681 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1682
1683 You have the option of continuing the configuration process, despite the
1684 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1685 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1686 and contact the author (perlbug@perl.org).
1687
1688 EOM
1689                 echo $n "Continue? [n] $c" >&4
1690                 read ans
1691                 case "$ans" in
1692                 y*)
1693                         echo "Continuing..." >&4
1694                         rm -f missing
1695                         ;;
1696                 *)
1697                         echo "ABORTING..." >&4
1698                         kill $$
1699                         ;;
1700                 esac
1701         else
1702                 echo "Looks good..."
1703         fi
1704 else
1705         echo "There is no MANIFEST file.  I hope your kit is complete !"
1706 fi
1707 rm -f missing x??
1708
1709 echo " "
1710 : Find the appropriate value for a newline for tr
1711 if test -n "$DJGPP"; then
1712        trnl='\012'
1713 fi
1714 if test X"$trnl" = X; then
1715         case "`echo foo|tr '\n' x 2>/dev/null`" in
1716         foox) trnl='\n' ;;
1717         esac
1718 fi
1719 if test X"$trnl" = X; then
1720         case "`echo foo|tr '\012' x 2>/dev/null`" in
1721         foox) trnl='\012' ;;
1722         esac
1723 fi
1724 if test X"$trnl" = X; then
1725         cat <<EOM >&2
1726
1727 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1728
1729 EOM
1730         exit 1
1731 fi
1732
1733 : compute the number of columns on the terminal for proper question formatting
1734 case "$COLUMNS" in
1735 '') COLUMNS='80';;
1736 esac
1737
1738 : set up the echo used in my read
1739 myecho="case \"\$xxxm\" in
1740 '') echo $n \"\$rp $c\" >&4;;
1741 *) case \"\$rp\" in
1742         '') echo $n \"[\$xxxm] $c\";;
1743         *)
1744                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1745                         echo \"\$rp\" >&4
1746                         echo $n \"[\$xxxm] $c\" >&4
1747                 else
1748                         echo $n \"\$rp [\$xxxm] $c\" >&4
1749                 fi
1750                 ;;
1751         esac;;
1752 esac"
1753
1754 : now set up to do reads with possible shell escape and default assignment
1755 cat <<EOSC >myread
1756 $startsh
1757 xxxm=\$dflt
1758 $myecho
1759 ans='!'
1760 case "\$fastread" in
1761 yes) case "\$dflt" in
1762         '') ;;
1763         *) ans='';
1764                 case "\$silent-\$rp" in
1765                 true-) ;;
1766                 *) echo " " >&4;;
1767                 esac;;
1768         esac;;
1769 *) case "\$silent" in
1770         true) case "\$rp" in
1771                 '') ans='';;
1772                 esac;;
1773         esac;;
1774 esac
1775 while expr "X\$ans" : "X!" >/dev/null; do
1776         read answ
1777         set x \$xxxm
1778         shift
1779         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1780         case  "\$answ" in
1781         "!")
1782                 sh 1>&4
1783                 echo " "
1784                 $myecho
1785                 ;;
1786         !*)
1787                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1788                 shift
1789                 sh 1>&4 -c "\$*"
1790                 echo " "
1791                 $myecho
1792                 ;;
1793         "\$ans")
1794                 case "\$ans" in
1795                 \\&*)
1796                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1797                         shift
1798                         case "\$1" in
1799                         -d)
1800                                 fastread=yes
1801                                 echo "(OK, I'll run with -d after this question.)" >&4
1802                                 ;;
1803                         -*)
1804                                 echo "*** Sorry, \$1 not supported yet." >&4
1805                                 ;;
1806                         esac
1807                         $myecho
1808                         ans=!
1809                         ;;
1810                 esac;;
1811         *)
1812                 case "\$aok" in
1813                 y)
1814                         echo "*** Substitution done -- please confirm."
1815                         xxxm="\$ans"
1816                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1817                         xxxm="\$ans"
1818                         ans=!
1819                         ;;
1820                 *)
1821                         echo "*** Error -- try again."
1822                         ans=!
1823                         ;;
1824                 esac
1825                 $myecho
1826                 ;;
1827         esac
1828         case "\$ans\$xxxm\$nostick" in
1829         '')
1830                 ans=!
1831                 $myecho
1832                 ;;
1833         esac
1834 done
1835 case "\$ans" in
1836 '') ans="\$xxxm";;
1837 esac
1838 EOSC
1839
1840 : create .config dir to save info across Configure sessions
1841 test -d ../.config || mkdir ../.config
1842 cat >../.config/README <<EOF
1843 This directory created by Configure to save information that should
1844 persist across sessions for $package.
1845
1846 You may safely delete it if you wish.
1847 EOF
1848
1849 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
1850 case "$usedevel" in
1851 $define|true|[yY]*) ;;
1852 *) case "$xversion" in
1853    *[13579])
1854         cat >&4 <<EOH
1855 *** WHOA THERE!!! ***
1856
1857     This is an UNSTABLE DEVELOPMENT release.
1858     The version of this $package distribution is $xversion, that is, odd,
1859     (as opposed to even) and that signifies a development release.
1860     If you want a maintenance release, you want an even-numbered version.
1861
1862     Do ***NOT*** install this into production use.
1863     Data corruption and crashes are possible.
1864
1865     It is most seriously suggested that you do not continue any further
1866     unless you want to help in developing and debugging Perl.
1867
1868     If you *still* want to build perl, you can answer 'y' now,
1869     or pass -Dusedevel to Configure.
1870
1871 EOH
1872         rp='Do you really want to continue?'
1873         dflt='n'
1874         . ./myread
1875         case "$ans" in
1876         [yY]) echo >&4 "Okay, continuing."
1877               usedevel="$define" ;;
1878         *) echo >&4 "Okay, bye."
1879            exit 1
1880            ;;
1881         esac
1882         ;;
1883     esac
1884     ;;
1885 esac
1886 case "$usedevel" in
1887 $define|true|[yY]*)
1888         case "$versiononly" in
1889         '') versiononly="$define" ;;
1890         esac
1891         case "$installusrbinperl" in
1892         '') installusrbinperl="$undef" ;;
1893         esac
1894         ;;
1895 esac
1896
1897 : general instructions
1898 needman=true
1899 firsttime=true
1900 user=`(logname) 2>/dev/null`
1901 case "$user" in
1902 '') user=`whoami 2>&1`;;
1903 esac
1904 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1905         firsttime=false
1906         echo " "
1907         rp='Would you like to see the instructions?'
1908         dflt=n
1909         . ./myread
1910         case "$ans" in
1911         [yY]*) ;;
1912         *) needman=false;;
1913         esac
1914 fi
1915 if $needman; then
1916         cat <<EOH
1917
1918 This installation shell script will examine your system and ask you questions
1919 to determine how the perl5 package should be installed. If you get
1920 stuck on a question, you may use a ! shell escape to start a subshell or
1921 execute a command.  Many of the questions will have default answers in square
1922 brackets; typing carriage return will give you the default.
1923
1924 On some of the questions which ask for file or directory names you are allowed
1925 to use the ~name construct to specify the login directory belonging to "name",
1926 even if you don't have a shell which knows about that.  Questions where this is
1927 allowed will be marked "(~name ok)".
1928
1929 EOH
1930         rp=''
1931         dflt='Type carriage return to continue'
1932         . ./myread
1933         cat <<'EOH'
1934
1935 The prompter used in this script allows you to use shell variables and
1936 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1937 in the default answer, as if the default line was a set of arguments given to a
1938 script shell.  This means you may also use $* to repeat the whole default line,
1939 so you do not have to re-type everything to add something to the default.
1940
1941 Everytime there is a substitution, you will have to confirm.  If there is an
1942 error (e.g. an unmatched backtick), the default answer will remain unchanged
1943 and you will be prompted again.
1944
1945 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1946 the questions and use the computed defaults (or the previous answers if there
1947 was already a config.sh file). Type 'Configure -h' for a list of options.
1948 You may also start interactively and then answer '& -d' at any prompt to turn
1949 on the non-interactive behaviour for the remainder of the execution.
1950
1951 EOH
1952         . ./myread
1953         cat <<EOH
1954
1955 Much effort has been expended to ensure that this shell script will run on any
1956 Unix system.  If despite that it blows up on yours, your best bet is to edit
1957 Configure and run it again.  If you can't run Configure for some reason,
1958 you'll have to generate a config.sh file by hand.  Whatever problems you
1959 have, let me (perlbug@perl.org) know how I blew it.
1960
1961 This installation script affects things in two ways:
1962
1963 1) it may do direct variable substitutions on some of the files included
1964    in this kit.
1965 2) it builds a config.h file for inclusion in C programs.  You may edit
1966    any of these files as the need arises after running this script.
1967
1968 If you make a mistake on a question, there is no easy way to back up to it
1969 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1970 files.  Configure will offer to let you do this before it runs the SH files.
1971
1972 EOH
1973         dflt='Type carriage return to continue'
1974         . ./myread
1975         case "$firsttime" in
1976         true) echo $user >>../.config/instruct;;
1977         esac
1978 fi
1979
1980 : find out where common programs are
1981 echo " "
1982 echo "Locating common programs..." >&4
1983 cat <<EOSC >loc
1984 $startsh
1985 case \$# in
1986 0) exit 1;;
1987 esac
1988 thing=\$1
1989 shift
1990 dflt=\$1
1991 shift
1992 for dir in \$*; do
1993         case "\$thing" in
1994         .)
1995         if test -d \$dir/\$thing; then
1996                 echo \$dir
1997                 exit 0
1998         fi
1999         ;;
2000         *)
2001         for thisthing in \$dir/\$thing; do
2002                 : just loop through to pick last item
2003         done
2004         if test -f \$thisthing; then
2005                 echo \$thisthing
2006                 exit 0
2007         elif test -f \$dir/\$thing.exe; then
2008                 if test -n "$DJGPP"; then
2009                         echo \$dir/\$thing.exe
2010                 else
2011                         : on Eunice apparently
2012                         echo \$dir/\$thing
2013                 fi
2014                 exit 0
2015         fi
2016         ;;
2017         esac
2018 done
2019 echo \$dflt
2020 exit 1
2021 EOSC
2022 chmod +x loc
2023 $eunicefix loc
2024 loclist="
2025 awk
2026 cat
2027 chmod
2028 comm
2029 cp
2030 echo
2031 expr
2032 grep
2033 ls
2034 make
2035 mkdir
2036 rm
2037 sed
2038 sort
2039 touch
2040 tr
2041 uniq
2042 "
2043 trylist="
2044 Mcc
2045 ar
2046 bison
2047 byacc
2048 cpp
2049 csh
2050 date
2051 egrep
2052 gzip
2053 less
2054 ln
2055 more
2056 nm
2057 nroff
2058 pg
2059 test
2060 uname
2061 zip
2062 "
2063 pth=`echo $PATH | sed -e "s/$p_/ /g"`
2064 pth="$pth /lib /usr/lib"
2065 for file in $loclist; do
2066         eval xxx=\$$file
2067         case "$xxx" in
2068         /*|?:[\\/]*)
2069                 if test -f "$xxx"; then
2070                         : ok
2071                 else
2072                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2073                         xxx=`./loc $file $file $pth`
2074                 fi
2075                 ;;
2076         '') xxx=`./loc $file $file $pth`;;
2077         *) xxx=`./loc $xxx $xxx $pth`;;
2078         esac
2079         eval $file=$xxx
2080         eval _$file=$xxx
2081         case "$xxx" in
2082         /*)
2083                 echo $file is in $xxx.
2084                 ;;
2085         ?:[\\/]*)
2086                 echo $file is in $xxx.
2087                 ;;
2088         *)
2089                 echo "I don't know where '$file' is, and my life depends on it." >&4
2090                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2091                 exit 1
2092                 ;;
2093         esac
2094 done
2095 echo " "
2096 echo "Don't worry if any of the following aren't found..."
2097 say=offhand
2098 for file in $trylist; do
2099         eval xxx=\$$file
2100         case "$xxx" in
2101         /*|?:[\\/]*)
2102                 if test -f "$xxx"; then
2103                         : ok
2104                 else
2105                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2106                         xxx=`./loc $file $file $pth`
2107                 fi
2108                 ;;
2109         '') xxx=`./loc $file $file $pth`;;
2110         *) xxx=`./loc $xxx $xxx $pth`;;
2111         esac
2112         eval $file=$xxx
2113         eval _$file=$xxx
2114         case "$xxx" in
2115         /*)
2116                 echo $file is in $xxx.
2117                 ;;
2118         ?:[\\/]*)
2119                 echo $file is in $xxx.
2120                 ;;
2121         *)
2122                 echo "I don't see $file out there, $say."
2123                 say=either
2124                 ;;
2125         esac
2126 done
2127 case "$egrep" in
2128 egrep)
2129         echo "Substituting grep for egrep."
2130         egrep=$grep
2131         ;;
2132 esac
2133 case "$ln" in
2134 ln)
2135         echo "Substituting cp for ln."
2136         ln=$cp
2137         ;;
2138 esac
2139 case "$test" in
2140 test)
2141         echo "Hopefully test is built into your sh."
2142         ;;
2143 *)
2144         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2145                 echo "Using the test built into your sh."
2146                 test=test
2147                 _test=test
2148         fi
2149         ;;
2150 esac
2151 case "$echo" in
2152 echo)
2153         echo "Hopefully echo is built into your sh."
2154         ;;
2155 '') ;;
2156 *)
2157         echo " "
2158 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2159         $echo $n "hi there$c" >foo1
2160         echo $n "hi there$c" >foo2
2161         if cmp foo1 foo2 >/dev/null 2>&1; then
2162                 echo "They are compatible.  In fact, they may be identical."
2163         else
2164                 case "$n" in
2165                 '-n') n='' c='\c';;
2166                 *) n='-n' c='';;
2167                 esac
2168                 cat <<FOO
2169 They are not compatible!  You are probably running ksh on a non-USG system.
2170 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2171 have echo built in and we may have to run some Bourne shell scripts.  That
2172 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2173
2174 FOO
2175                 $echo $n "The star should be here-->$c"
2176                 $echo "*"
2177         fi
2178         $rm -f foo1 foo2
2179         ;;
2180 esac
2181
2182 cat <<EOS >checkcc
2183 $startsh
2184 EOS
2185 cat <<'EOSC' >>checkcc
2186 case "$cc" in
2187 '') ;;
2188 *)  $rm -f try try.*
2189     $cat >try.c <<EOM
2190 int main(int argc, char *argv[]) {
2191   return 0;
2192 }
2193 EOM
2194     if $cc -o try $ccflags $ldflags try.c; then
2195        :
2196     else
2197         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2198         despair=yes
2199         trygcc=yes
2200         case "$cc" in
2201         *gcc*) trygcc=no ;;
2202         esac
2203         case "`$cc -v -c try.c 2>&1`" in
2204         *gcc*) trygcc=no ;;
2205         esac
2206         if $test X"$trygcc" = Xyes; then
2207             if gcc -o try -c try.c; then
2208                 echo " "
2209                 echo "You seem to have a working gcc, though." >&4
2210                 rp="Would you like to use it?"
2211                 dflt=y
2212                 if $test -f myread; then
2213                     . ./myread
2214                 else
2215                     if $test -f UU/myread; then
2216                         . ./UU/myread
2217                     else
2218                         echo "Cannot find myread, sorry.  Aborting." >&2
2219                         exit 1
2220                     fi
2221                 fi  
2222                 case "$ans" in
2223                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2224                 esac
2225             fi
2226         fi
2227         if $test X"$despair" = Xyes; then
2228             $cat >&4 <<EOM
2229 You need to find a working C compiler.
2230 Either (purchase and) install the C compiler supplied by your OS vendor,
2231 or for a free C compiler try http://gcc.gnu.org/
2232 I cannot continue any further, aborting.
2233 EOM
2234             exit 1
2235         fi
2236     fi
2237     $rm -f try try.*
2238     ;;
2239 esac
2240 EOSC
2241
2242 : determine whether symbolic links are supported
2243 echo " "
2244 $touch blurfl
2245 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2246         echo "Symbolic links are supported." >&4
2247         lns="$ln -s"
2248 else
2249         echo "Symbolic links are NOT supported." >&4
2250         lns="$ln"
2251 fi
2252 $rm -f blurfl sym
2253
2254 : determine whether symbolic links are supported
2255 echo " "
2256 case "$lns" in
2257 *"ln -s")
2258         echo "Checking how to test for symbolic links..." >&4
2259         $lns blurfl sym
2260         if $test "X$issymlink" = X; then
2261                 sh -c "PATH= test -h sym" >/dev/null 2>&1
2262                 if test $? = 0; then
2263                         issymlink="test -h"
2264                 fi              
2265         fi
2266         if $test "X$issymlink" = X; then
2267                 if  $test -h >/dev/null 2>&1; then
2268                         issymlink="$test -h"
2269                         echo "Your builtin 'test -h' may be broken, I'm using external '$test -h'." >&4
2270                 fi              
2271         fi
2272         if $test "X$issymlink" = X; then
2273                 if $test -L sym 2>/dev/null; then
2274                         issymlink="$test -L"
2275                 fi
2276         fi
2277         if $test "X$issymlink" != X; then
2278                 echo "You can test for symbolic links with '$issymlink'." >&4
2279         else
2280                 echo "I do not know how you can test for symbolic links." >&4
2281         fi
2282         $rm -f blurfl sym
2283         ;;
2284 *)      echo "No symbolic links, so not testing for their testing..." >&4
2285         ;;
2286 esac
2287 echo " "
2288
2289
2290 case "$mksymlinks" in
2291 $define|true|[yY]*)
2292         case "$src" in
2293         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2294                 exit 1
2295                 ;;
2296         *)      case "$lns:$issymlink" in
2297                 *"ln -s:"*"test -"?)
2298                         echo "Creating the symbolic links..." >&4
2299                         echo "(First creating the subdirectories...)" >&4
2300                         cd ..
2301                         awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | sort -u | while true; do
2302                                 read directory
2303                                 test -z "$directory" && break
2304                                 mkdir -p $directory
2305                         done
2306                         # Sanity check 1.
2307                         if test ! -d t/base; then
2308                                 echo "Failed to create the subdirectories.  Aborting." >&4
2309                                 exit 1
2310                         fi
2311                         echo "(Then creating the symlinks...)" >&4
2312                         awk '{print $1}' $src/MANIFEST | while true; do
2313                                 read filename
2314                                 test -z "$filename" && break
2315                                 if test -f $filename; then
2316                                         if $issymlink $filename; then
2317                                                 rm -f $filename
2318                                         fi
2319                                 fi
2320                                 if test -f $filename; then
2321                                         echo "$filename already exists, not symlinking."
2322                                 else
2323                                         ln -s $src/$filename $filename
2324                                 fi
2325                         done
2326                         # Sanity check 2.
2327                         if test ! -f t/base/lex.t; then
2328                                 echo "Failed to create the symlinks (t/base/lex.t missing).  Aborting." >&4
2329                                 exit 1
2330                         fi
2331                         cd UU
2332                         ;;
2333                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2334                         ;;
2335                 esac
2336                 ;;
2337         esac
2338         ;;
2339 esac
2340
2341
2342 case "$usecrosscompile" in
2343 $define|true|[yY]*)
2344         $echo "Cross-compiling..."
2345         croak=''
2346         case "$cc" in
2347         *-*-gcc) # A cross-compiling gcc, probably.
2348             targetarch=`$echo $cc|$sed 's/-gcc$//'`
2349             ar=$targetarch-ar
2350             # leave out ld, choosing it is more complex
2351             nm=$targetarch-nm
2352             ranlib=$targetarch-ranlib
2353             $echo 'extern int foo;' > try.c
2354             set X `$cc -v -E try.c 2>&1 | $awk '/^#include </,/^End of search /'|$grep '/include'`
2355             shift
2356             if $test $# -gt 0; then
2357                 incpth="$incpth $*"
2358                 incpth="`$echo $incpth|$sed 's/^ //'`"
2359                 echo "Guessing incpth '$incpth'." >&4
2360                 for i in $*; do
2361                     j="`$echo $i|$sed 's,/include$,/lib,'`"
2362                     if $test -d $j; then
2363                         libpth="$libpth $j"
2364                     fi
2365                 done   
2366                 libpth="`$echo $libpth|$sed 's/^ //'`"
2367                 echo "Guessing libpth '$libpth'." >&4
2368             fi
2369             $rm -f try.c
2370             ;;
2371         esac
2372         case "$targetarch" in
2373         '') echo "Targetarch not defined." >&4; croak=y ;;
2374         *)  echo "Using targetarch $targetarch." >&4 ;;
2375         esac
2376         case "$incpth" in
2377         '') echo "Incpth not defined." >&4; croak=y ;;
2378         *)  echo "Using incpth '$incpth'." >&4 ;;
2379         esac
2380         case "$libpth" in
2381         '') echo "Libpth not defined." >&4; croak=y ;;
2382         *)  echo "Using libpth '$libpth'." >&4 ;;
2383         esac
2384         case "$usrinc" in
2385         '') for i in $incpth; do
2386                 if $test -f $i/errno.h -a -f $i/stdio.h -a -f $i/time.h; then
2387                     usrinc=$i
2388                     echo "Guessing usrinc $usrinc." >&4
2389                     break
2390                 fi
2391             done
2392             case "$usrinc" in
2393             '') echo "Usrinc not defined." >&4; croak=y ;;
2394             esac
2395             ;;
2396         *)  echo "Using usrinc $usrinc." >&4 ;;
2397         esac
2398         case "$targethost" in
2399         '') echo "Targethost not defined." >&4; croak=y ;;
2400         *)  echo "Using targethost $targethost." >&4
2401         esac
2402         locincpth=' '
2403         loclibpth=' '
2404         case "$croak" in
2405         y) echo "Cannot continue, aborting." >&4; exit 1 ;;
2406         esac
2407         case "$src" in
2408         /*) run=$src/Cross/run
2409             targetmkdir=$src/Cross/mkdir
2410             to=$src/Cross/to
2411             from=$src/Cross/from
2412             ;;
2413         *)  pwd=`$test -f ../Configure & cd ..; pwd`
2414             run=$pwd/Cross/run
2415             targetmkdir=$pwd/Cross/mkdir
2416             to=$pwd/Cross/to
2417             from=$pwd/Cross/from
2418             ;;
2419         esac
2420         case "$targetrun" in
2421         '') targetrun=ssh ;;
2422         esac
2423         case "$targetto" in
2424         '') targetto=scp ;;
2425         esac
2426         case "$targetfrom" in
2427         '') targetfrom=scp ;;
2428         esac
2429         run=$run-$targetrun
2430         to=$to-$targetto
2431         from=$from-$targetfrom
2432         case "$targetdir" in
2433         '')  targetdir=/tmp
2434              echo "Guessing targetdir $targetdir." >&4
2435              ;;
2436         esac
2437         case "$targetuser" in
2438         '')  targetuser=root
2439              echo "Guessing targetuser $targetuser." >&4
2440              ;;
2441         esac
2442         case "$targetfrom" in
2443         scp)    q=-q ;;
2444         *)      q='' ;;
2445         esac
2446         case "$targetrun" in
2447         ssh|rsh)
2448             cat >$run <<EOF
2449 #!/bin/sh
2450 case "\$1" in
2451 -cwd)
2452   shift
2453   cwd=\$1
2454   shift
2455   ;;
2456 esac
2457 case "\$cwd" in
2458 '') cwd=$targetdir ;;
2459 esac
2460 exe=\$1
2461 shift
2462 if $test ! -f \$exe.xok; then
2463   $to \$exe
2464   $touch \$exe.xok
2465 fi
2466 $targetrun -l $targetuser $targethost "cd \$cwd && ./\$exe \$@"
2467 EOF
2468             ;;
2469         *)  echo "Unknown targetrun '$targetrun'" >&4
2470             exit 1
2471             ;;
2472         esac
2473         case "$targetmkdir" in
2474         */Cross/mkdir)
2475             cat >$targetmkdir <<EOF
2476 #!/bin/sh
2477 $targetrun -l $targetuser $targethost "mkdir -p \$@"
2478 EOF
2479             $chmod a+rx $targetmkdir
2480             ;;
2481         *)  echo "Unknown targetmkdir '$targetmkdir'" >&4
2482             exit 1
2483             ;;
2484         esac
2485         case "$targetto" in
2486         scp|rcp)
2487             cat >$to <<EOF
2488 #!/bin/sh
2489 for f in \$@
2490 do
2491   case "\$f" in
2492   /*)
2493     $targetmkdir \`dirname \$f\`
2494     $targetto $q \$f $targetuser@$targethost:\$f            || exit 1
2495     ;;
2496   *)
2497     $targetmkdir $targetdir/\`dirname \$f\`
2498     $targetto $q \$f $targetuser@$targethost:$targetdir/\$f || exit 1
2499     ;;
2500   esac
2501 done
2502 exit 0
2503 EOF
2504             ;;
2505         cp) cat >$to <<EOF
2506 #!/bin/sh
2507 for f in \$@
2508 do
2509   case "\$f" in
2510   /*)
2511     $mkdir -p $targetdir/\`dirname \$f\`
2512     $cp \$f $targetdir/\$f || exit 1
2513     ;;
2514   *)
2515     $targetmkdir $targetdir/\`dirname \$f\`
2516     $cp \$f $targetdir/\$f || exit 1
2517     ;;
2518   esac
2519 done
2520 exit 0
2521 EOF
2522             ;;
2523         *)  echo "Unknown targetto '$targetto'" >&4
2524             exit 1
2525             ;;
2526         esac
2527         case "$targetfrom" in
2528         scp|rcp)
2529           cat >$from <<EOF
2530 #!/bin/sh
2531 for f in \$@
2532 do
2533   $rm -f \$f
2534   $targetfrom $q $targetuser@$targethost:$targetdir/\$f . || exit 1
2535 done
2536 exit 0
2537 EOF
2538             ;;
2539         cp) cat >$from <<EOF
2540 #!/bin/sh
2541 for f in \$@
2542 do
2543   $rm -f \$f
2544   cp $targetdir/\$f . || exit 1
2545 done
2546 exit 0
2547 EOF
2548             ;;
2549         *)  echo "Unknown targetfrom '$targetfrom'" >&4
2550             exit 1
2551             ;;
2552         esac
2553         if $test ! -f $run; then
2554             echo "Target 'run' script '$run' not found." >&4
2555         else
2556             $chmod a+rx $run
2557         fi
2558         if $test ! -f $to; then
2559             echo "Target 'to' script '$to' not found." >&4
2560         else
2561             $chmod a+rx $to
2562         fi
2563         if $test ! -f $from; then
2564             echo "Target 'from' script '$from' not found." >&4
2565         else
2566             $chmod a+rx $from
2567         fi
2568         if $test ! -f $run -o ! -f $to -o ! -f $from; then
2569             exit 1
2570         fi
2571         cat >&4 <<EOF
2572 Using '$run' for remote execution,
2573 and '$from' and '$to'
2574 for remote file transfer.
2575 EOF
2576         ;;
2577 *)      run=''
2578         to=:
2579         from=:
2580         usecrosscompile='undef'
2581         targetarch=''
2582         ;;
2583 esac
2584
2585 : see whether [:lower:] and [:upper:] are supported character classes
2586 echo " "
2587 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2588 ABYZ)
2589         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2590         up='[:upper:]'
2591         low='[:lower:]'
2592         ;;
2593 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2594         # (0xc9 and 0xd1), therefore that is a nice testing point.
2595         if test "X$up" = X -o "X$low" = X; then
2596             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2597             ij) up='[A-Z]'
2598                 low='[a-z]'
2599                 ;;
2600             esac
2601         fi
2602         if test "X$up" = X -o "X$low" = X; then
2603             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2604             ij) up='A-Z'
2605                 low='a-z'
2606                 ;;
2607             esac
2608         fi
2609         if test "X$up" = X -o "X$low" = X; then
2610             case "`echo IJ | od -x 2>/dev/null`" in
2611             *C9D1*|*c9d1*)
2612                 echo "Hey, this might be EBCDIC." >&4
2613                 if test "X$up" = X -o "X$low" = X; then
2614                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2615                     ij) up='[A-IJ-RS-Z]'
2616                         low='[a-ij-rs-z]'
2617                         ;;
2618                     esac
2619                 fi
2620                 if test "X$up" = X -o "X$low" = X; then
2621                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2622                     ij) up='A-IJ-RS-Z'
2623                         low='a-ij-rs-z'
2624                         ;;
2625                     esac
2626                 fi
2627                 ;;
2628             esac
2629         fi
2630 esac
2631 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2632 ij)
2633     echo "Using $up and $low to convert case." >&4
2634     ;;
2635 *)
2636     echo "I don't know how to translate letters from upper to lower case." >&4
2637     echo "Your tr is not acting any way I know of." >&4
2638     exit 1
2639     ;;
2640 esac
2641 : set up the translation script tr, must be called with ./tr of course
2642 cat >tr <<EOSC
2643 $startsh
2644 case "\$1\$2" in
2645 '[A-Z][a-z]') exec $tr '$up' '$low';;
2646 '[a-z][A-Z]') exec $tr '$low' '$up';;
2647 esac
2648 exec $tr "\$@"
2649 EOSC
2650 chmod +x tr
2651 $eunicefix tr
2652
2653 : Try to determine whether config.sh was made on this system
2654 case "$config_sh" in
2655 '')
2656 myuname=`$uname -a 2>/dev/null`
2657 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2658 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2659 # because the A-Z/a-z are not consecutive.
2660 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2661         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2662 newmyuname="$myuname"
2663 dflt=n
2664 case "$knowitall" in
2665 '')
2666         if test -f ../config.sh; then
2667                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2668                         eval "`grep myuname= ../config.sh`"
2669                 fi
2670                 if test "X$myuname" = "X$newmyuname"; then
2671                         dflt=y
2672                 fi
2673         fi
2674         ;;
2675 *) dflt=y;;
2676 esac
2677
2678 : Get old answers from old config file if Configure was run on the
2679 : same system, otherwise use the hints.
2680 hint=default
2681 cd ..
2682 if test -f config.sh; then
2683         echo " "
2684         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2685         . UU/myread
2686         case "$ans" in
2687         n*|N*) echo "OK, I'll ignore it."
2688                 mv config.sh config.sh.old
2689                 myuname="$newmyuname"
2690                 ;;
2691         *)  echo "Fetching default answers from your old config.sh file..." >&4
2692                 tmp_n="$n"
2693                 tmp_c="$c"
2694                 tmp_sh="$sh"
2695                 . ./config.sh
2696                 cp config.sh UU
2697                 n="$tmp_n"
2698                 c="$tmp_c"
2699                 : Older versions did not always set $sh.  Catch re-use of such
2700                 : an old config.sh.
2701                 case "$sh" in
2702                 '') sh="$tmp_sh" ;;
2703                 esac
2704                 hint=previous
2705                 ;;
2706         esac
2707 fi
2708 . ./UU/checkcc
2709 if test ! -f config.sh; then
2710         $cat <<EOM
2711
2712 First time through, eh?  I have some defaults handy for some systems
2713 that need some extra help getting the Configure answers right:
2714
2715 EOM
2716         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2717         dflt=''
2718         : Half the following guesses are probably wrong... If you have better
2719         : tests or hints, please send them to perlbug@perl.org
2720         : The metaconfig authors would also appreciate a copy...
2721         $test -f /irix && osname=irix
2722         $test -f /xenix && osname=sco_xenix
2723         $test -f /dynix && osname=dynix
2724         $test -f /dnix && osname=dnix
2725         $test -f /lynx.os && osname=lynxos
2726         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2727         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2728         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2729         $test -f /bin/mips && /bin/mips && osname=mips
2730         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2731                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2732         $test -d /usr/apollo/bin && osname=apollo
2733         $test -f /etc/saf/_sactab && osname=svr4
2734         $test -d /usr/include/minix && osname=minix
2735         if $test -d /MachTen -o -d /MachTen_Folder; then
2736                 osname=machten
2737                 if $test -x /sbin/version; then
2738                         osvers=`/sbin/version | $awk '{print $2}' |
2739                         $sed -e 's/[A-Za-z]$//'`
2740                 elif $test -x /usr/etc/version; then
2741                         osvers=`/usr/etc/version | $awk '{print $2}' |
2742                         $sed -e 's/[A-Za-z]$//'`
2743                 else
2744                         osvers="$2.$3"
2745                 fi
2746         fi
2747
2748         $test -f /sys/posix.dll &&
2749                 $test -f /usr/bin/what &&
2750                 set X `/usr/bin/what /sys/posix.dll` &&
2751                 $test "$3" = UWIN &&
2752                 osname=uwin &&
2753                 osvers="$5"
2754
2755         if $test -f $uname; then
2756                 set X $myuname
2757                 shift
2758
2759                 case "$5" in
2760                 fps*) osname=fps ;;
2761                 mips*)
2762                         case "$4" in
2763                         umips) osname=umips ;;
2764                         *) osname=mips ;;
2765                         esac;;
2766                 [23]100) osname=mips ;;
2767                 next*) osname=next ;;
2768                 i386*)
2769                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2770                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2771                                 osname='sco'
2772                                 osvers=$tmp
2773                         elif $test -f /etc/kconfig; then
2774                                 osname=isc
2775                                 if test "$lns" = "$ln -s"; then
2776                                         osvers=4
2777                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2778                                         osvers=3
2779                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2780                                         osvers=2
2781                                 fi
2782                         fi
2783                         tmp=''
2784                         ;;
2785                 pc*)
2786                         if test -n "$DJGPP"; then
2787                                 osname=dos
2788                                 osvers=djgpp
2789                         fi
2790                         ;;
2791                 esac
2792
2793                 case "$1" in
2794                 aix) osname=aix
2795                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2796                         case "$tmp" in
2797                         'not found') osvers="$4"."$3" ;;
2798                         '<3240'|'<>3240') osvers=3.2.0 ;;
2799                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2800                         '=3250'|'>3250') osvers=3.2.5 ;;
2801                         *) osvers=$tmp;;
2802                         esac
2803                         ;;
2804                 bsd386) osname=bsd386
2805                         osvers=`$uname -r`
2806                         ;;
2807                 cygwin*) osname=cygwin
2808                         osvers="$3"
2809                         ;;
2810                 *dc.osx) osname=dcosx
2811                         osvers="$3"
2812                         ;;
2813                 dnix) osname=dnix
2814                         osvers="$3"
2815                         ;;
2816                 domainos) osname=apollo
2817                         osvers="$3"
2818                         ;;
2819                 dgux) osname=dgux 
2820                         osvers="$3"
2821                         ;;
2822                 dynixptx*) osname=dynixptx
2823                         osvers=`echo "$4"|sed 's/^v//'`
2824                         ;;
2825                 freebsd) osname=freebsd 
2826                         osvers="$3" ;;
2827                 genix) osname=genix ;;
2828                 hp*) osname=hpux 
2829                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2830                         ;;
2831                 irix*) osname=irix
2832                         case "$3" in
2833                         4*) osvers=4 ;;
2834                         5*) osvers=5 ;;
2835                         *)      osvers="$3" ;;
2836                         esac
2837                         ;;
2838                 linux) osname=linux
2839                         case "$3" in
2840                         *)      osvers="$3" ;;
2841                         esac
2842                         ;;
2843                 MiNT) osname=mint
2844                         ;;
2845                 netbsd*) osname=netbsd
2846                         osvers="$3"
2847                         ;;
2848                 news-os) osvers="$3"
2849                         case "$3" in
2850                         4*) osname=newsos4 ;;
2851                         *) osname=newsos ;;
2852                         esac
2853                         ;;
2854                 next*) osname=next ;;
2855                 nonstop-ux) osname=nonstopux ;;
2856                 POSIX-BC | posix-bc ) osname=posix-bc
2857                         osvers="$3"
2858                         ;;
2859                 powerux | power_ux | powermax_os | powermaxos | \
2860                 powerunix | power_unix) osname=powerux
2861                         osvers="$3"
2862                         ;;
2863                 qnx) osname=qnx
2864                         osvers="$4"
2865                         ;;
2866                 solaris) osname=solaris
2867                         case "$3" in
2868                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2869                         *)      osvers="$3" ;;
2870                         esac
2871                         ;;
2872                 sunos) osname=sunos
2873                         case "$3" in
2874                         5*) osname=solaris
2875                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2876                         *)      osvers="$3" ;;
2877                         esac
2878                         ;;
2879                 titanos) osname=titanos
2880                         case "$3" in
2881                         1*) osvers=1 ;;
2882                         2*) osvers=2 ;;
2883                         3*) osvers=3 ;;
2884                         4*) osvers=4 ;;
2885                         *)      osvers="$3" ;;
2886                         esac
2887                         ;;
2888                 ultrix) osname=ultrix
2889                         osvers="$3"
2890                         ;;
2891                 osf1|mls+)      case "$5" in
2892                                 alpha)
2893                                         osname=dec_osf
2894                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
2895                                         case "$osvers" in
2896                                         [1-9].[0-9]*) ;;
2897                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
2898                                         esac
2899                                         ;;
2900                         hp*)    osname=hp_osf1  ;;
2901                         mips)   osname=mips_osf1 ;;
2902                         esac
2903                         ;;
2904                 unixware) osname=svr5
2905                         osvers="$4"
2906                         ;;
2907                 uts) osname=uts
2908                         osvers="$3"
2909                         ;;
2910                 $2) case "$osname" in
2911                         *isc*) ;;
2912                         *freebsd*) ;;
2913                         svr*)
2914                                 : svr4.x or possibly later
2915                                 case "svr$3" in 
2916                                 ${osname}*)
2917                                         osname=svr$3
2918                                         osvers=$4
2919                                         ;;
2920                                 esac
2921                                 case "$osname" in
2922                                 svr4.0)
2923                                         : Check for ESIX
2924                                         if test -f /stand/boot ; then
2925                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2926                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2927                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2928                                                         if test -n "$isesix"; then
2929                                                                 osname=esix4
2930                                                         fi
2931                                                 fi
2932                                         fi
2933                                         ;;
2934                                 esac
2935                                 ;;
2936                         *)      if test -f /etc/systemid; then
2937                                         osname=sco
2938                                         set `echo $3 | $sed 's/\./ /g'` $4
2939                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2940                                                 osvers=$1.$2.$3
2941                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2942                                                 osvers=$1.$2
2943                                         elif $test -f $src/hints/sco_$1.sh; then
2944                                                 osvers=$1
2945                                         fi
2946                                 else
2947                                         case "$osname" in
2948                                         '') : Still unknown.  Probably a generic Sys V.
2949                                                 osname="sysv"
2950                                                 osvers="$3"
2951                                                 ;;
2952                                         esac
2953                                 fi
2954                                 ;;
2955                         esac
2956                         ;;
2957                 *)      case "$osname" in
2958                         '') : Still unknown.  Probably a generic BSD.
2959                                 osname="$1"
2960                                 osvers="$3"
2961                                 ;;
2962                         esac
2963                         ;;
2964                 esac
2965         else
2966                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2967                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2968                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2969                                 osname=news_os
2970                         fi
2971                         $rm -f UU/kernel.what
2972                 elif test -d c:/.; then
2973                         set X $myuname
2974                         osname=os2
2975                         osvers="$5"
2976                 fi
2977         fi
2978         
2979         case "$targetarch" in
2980         '') ;;
2981         *)  hostarch=$osname
2982             osname=`echo $targetarch|sed 's,^[^-]*-,,'`
2983             osvers=''
2984             ;;
2985         esac
2986
2987         : Now look for a hint file osname_osvers, unless one has been
2988         : specified already.
2989         case "$hintfile" in
2990         ''|' ')
2991                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
2992                 : Also try without trailing minor version numbers.
2993                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
2994                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
2995                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
2996                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
2997                 case "$file" in
2998                 '') dflt=none ;;
2999                 *)  case "$osvers" in
3000                         '') dflt=$file
3001                                 ;;
3002                         *)  if $test -f $src/hints/$file.sh ; then
3003                                         dflt=$file
3004                                 elif $test -f $src/hints/$xfile.sh ; then
3005                                         dflt=$xfile
3006                                 elif $test -f $src/hints/$xxfile.sh ; then
3007                                         dflt=$xxfile
3008                                 elif $test -f $src/hints/$xxxfile.sh ; then
3009                                         dflt=$xxxfile
3010                                 elif $test -f $src/hints/$xxxxfile.sh ; then
3011                                         dflt=$xxxxfile
3012                                 elif $test -f "$src/hints/${osname}.sh" ; then
3013                                         dflt="${osname}"
3014                                 else
3015                                         dflt=none
3016                                 fi
3017                                 ;;
3018                         esac
3019                         ;;
3020                 esac
3021                 if $test -f Policy.sh ; then
3022                         case "$dflt" in
3023                         *Policy*) ;;
3024                         none) dflt="Policy" ;;
3025                         *) dflt="Policy $dflt" ;;
3026                         esac
3027                 fi
3028                 ;;
3029         *)
3030                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
3031                 ;;
3032         esac
3033
3034         if $test -f Policy.sh ; then
3035                 $cat <<EOM
3036
3037 There's also a Policy hint file available, which should make the
3038 site-specific (policy) questions easier to answer.
3039 EOM
3040
3041         fi
3042
3043         $cat <<EOM
3044
3045 You may give one or more space-separated answers, or "none" if appropriate.
3046 A well-behaved OS will have no hints, so answering "none" or just "Policy"
3047 is a good thing.  DO NOT give a wrong version or a wrong OS.
3048
3049 EOM
3050
3051         rp="Which of these apply, if any?"
3052         . UU/myread
3053         tans=$ans
3054         for file in $tans; do
3055                 if $test X$file = XPolicy -a -f Policy.sh; then
3056                         . Policy.sh
3057                         $cat Policy.sh >> UU/config.sh
3058                 elif $test -f $src/hints/$file.sh; then
3059                         . $src/hints/$file.sh
3060                         $cat $src/hints/$file.sh >> UU/config.sh
3061                 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
3062                         : nothing
3063                 else
3064                         : Give one chance to correct a possible typo.
3065                         echo "$file.sh does not exist"
3066                         dflt=$file
3067                         rp="hint to use instead?"
3068                         . UU/myread
3069                         for file in $ans; do
3070                                 if $test -f "$src/hints/$file.sh"; then
3071                                         . $src/hints/$file.sh
3072                                         $cat $src/hints/$file.sh >> UU/config.sh
3073                                 elif $test X$ans = X -o X$ans = Xnone ; then
3074                                         : nothing
3075                                 else
3076                                         echo "$file.sh does not exist -- ignored."
3077                                 fi
3078                         done
3079                 fi
3080         done
3081
3082         hint=recommended
3083         : Remember our hint file for later.
3084         if $test -f "$src/hints/$file.sh" ; then
3085                 hintfile="$file"
3086         else
3087                 hintfile=''
3088         fi
3089 fi
3090 cd UU
3091 ;;
3092 *)
3093         echo " "
3094         echo "Fetching default answers from $config_sh..." >&4
3095         tmp_n="$n"
3096         tmp_c="$c"
3097         cd ..
3098         cp $config_sh config.sh 2>/dev/null
3099         chmod +w config.sh
3100         . ./config.sh
3101         cd UU
3102         cp ../config.sh .
3103         n="$tmp_n"
3104         c="$tmp_c"
3105         hint=previous
3106         ;;
3107 esac
3108 test "$override" && . ./optdef.sh
3109
3110 : Restore computed paths
3111 for file in $loclist $trylist; do
3112         eval $file="\$_$file"
3113 done
3114
3115 cat << EOM
3116
3117 Configure uses the operating system name and version to set some defaults.
3118 The default value is probably right if the name rings a bell. Otherwise,
3119 since spelling matters for me, either accept the default or answer "none"
3120 to leave it blank.
3121
3122 EOM
3123 case "$osname" in
3124         ''|' ')
3125                 case "$hintfile" in
3126                 ''|' '|none) dflt=none ;;
3127                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
3128                 esac
3129                 ;;
3130         *) dflt="$osname" ;;
3131 esac
3132 rp="Operating system name?"
3133 . ./myread
3134 case "$ans" in
3135 none)  osname='' ;;
3136 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
3137 esac
3138 echo " "
3139 case "$osvers" in
3140         ''|' ')
3141                 case "$hintfile" in
3142                 ''|' '|none) dflt=none ;;
3143                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
3144                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
3145                         case "$dflt" in
3146                         ''|' ') dflt=none ;;
3147                         esac
3148                         ;;
3149                 esac
3150                 ;;
3151         *) dflt="$osvers" ;;
3152 esac
3153 rp="Operating system version?"
3154 . ./myread
3155 case "$ans" in
3156 none)  osvers='' ;;
3157 *) osvers="$ans" ;;
3158 esac
3159
3160
3161 . ./posthint.sh
3162
3163 : who configured the system
3164 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
3165 cf_by=`(logname) 2>/dev/null`
3166 case "$cf_by" in
3167 "")
3168         cf_by=`(whoami) 2>/dev/null`
3169         case "$cf_by" in
3170         "") cf_by=unknown ;;
3171         esac ;;
3172 esac
3173
3174 : set up the script used to warn in case of inconsistency
3175 cat <<EOS >whoa
3176 $startsh
3177 EOS
3178 cat <<'EOSC' >>whoa
3179 dflt=y
3180 echo " "
3181 echo "*** WHOA THERE!!! ***" >&4
3182 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
3183 rp="    Keep the $hint value?"
3184 . ./myread
3185 case "$ans" in
3186 y) td=$was; tu=$was;;
3187 esac
3188 EOSC
3189
3190 : function used to set $1 to $val
3191 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
3192 case "$val$was" in
3193 $define$undef) . ./whoa; eval "$var=\$td";;
3194 $undef$define) . ./whoa; eval "$var=\$tu";;
3195 *) eval "$var=$val";;
3196 esac'
3197
3198 case "$usethreads" in
3199 $define|true|[yY]*)     dflt='y';;
3200 *) dflt='n';;
3201 esac
3202 cat <<EOM
3203
3204 Perl can be built to take advantage of threads on some systems.
3205 To do so, Configure can be run with -Dusethreads.
3206
3207 Note that threading is a highly experimental feature, and
3208 some known race conditions still remain.  If you choose to try
3209 it, be very sure to not actually deploy it for production
3210 purposes.  README.threads has more details, and is required
3211 reading if you enable threads.
3212
3213 If this doesn't make any sense to you, just accept the default '$dflt'.
3214 EOM
3215 rp='Build a threading Perl?'
3216 . ./myread
3217 case "$ans" in
3218 y|Y)    val="$define" ;;
3219 *)      val="$undef" ;;
3220 esac
3221 set usethreads
3222 eval $setvar
3223
3224 case "$usethreads" in
3225 $define)
3226         $cat <<EOM
3227
3228 As of 5.5.640, Perl has two different internal threading implementations,
3229 the 5.005 version (5005threads) and an interpreter-based version
3230 (ithreads) that has one interpreter per thread.  Both are very 
3231 experimental.  This arrangement exists to help developers work out
3232 which one is better.
3233
3234 If you're a casual user, you probably don't want interpreter-threads
3235 at this time.  There doesn't yet exist a way to create threads from
3236 within Perl in this model, i.e., "use Thread;" will NOT work.
3237 EOM
3238         : Default to ithreads unless overridden on command line or with
3239         : old config.sh
3240         dflt='y'
3241         case "$use5005threads" in
3242                 $define|true|[yY]*) dflt='n';;
3243         esac
3244         case "$useithreads" in
3245                 $undef|false|[nN]*) dflt='n';;
3246         esac
3247         rp='Use interpreter-based ithreads?'
3248         . ./myread
3249         case "$ans" in
3250         y|Y)    val="$define" ;;
3251         *)      val="$undef" ;;
3252         esac
3253         set useithreads
3254         eval $setvar
3255         : Now set use5005threads to the opposite value.
3256         case "$useithreads" in
3257         $define) val="$undef" ;;
3258         *) val="$define" ;;
3259         esac
3260         set use5005threads
3261         eval $setvar
3262         ;;
3263 *)
3264         useithreads="$undef"
3265         use5005threads="$undef"
3266         ;;
3267 esac
3268
3269 case "$useithreads$use5005threads" in
3270 "$define$define")
3271         $cat >&4 <<EOM
3272
3273 You cannot have both the ithreads and the 5.005 threads enabled
3274 at the same time.  Disabling the 5.005 threads since they are
3275 much less stable than the ithreads.
3276
3277 EOM
3278         use5005threads="$undef"
3279         ;;
3280 esac
3281
3282 case "$d_oldpthreads" in
3283 '')     : Configure tests would be welcome here.  For now, assume undef.
3284         val="$undef" ;;
3285 *)      val="$d_oldpthreads" ;;
3286 esac
3287 set d_oldpthreads
3288 eval $setvar
3289
3290
3291 case "$usethreads" in
3292 "$define"|true|[yY]*)
3293 : Look for a hint-file generated 'call-back-unit'.  If the
3294 : user has specified that a threading perl is to be built,
3295 : we may need to set or change some other defaults.
3296         if $test -f usethreads.cbu; then
3297                 echo "Your platform has some specific hints for threaded builds, using them..."
3298                 . ./usethreads.cbu
3299         else
3300                 $cat <<EOM
3301 (Your platform doesn't have any specific hints for threaded builds.
3302  Assuming POSIX threads, then.)
3303 EOM
3304         fi
3305         ;;
3306 esac
3307
3308 cat <<EOM
3309
3310 Perl can be built so that multiple Perl interpreters can coexist
3311 within the same Perl executable.
3312 EOM
3313
3314 case "$useithreads" in
3315 $define)
3316         cat <<EOM
3317 This multiple interpreter support is required for interpreter-based threads.
3318 EOM
3319         val="$define"
3320         ;;
3321 *)      case "$usemultiplicity" in
3322         $define|true|[yY]*)     dflt='y';;
3323         *) dflt='n';;
3324         esac
3325         echo " "
3326         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
3327         rp='Build Perl for multiplicity?'
3328         . ./myread
3329         case "$ans" in
3330         y|Y)    val="$define" ;;
3331         *)      val="$undef" ;;
3332         esac
3333         ;;
3334 esac
3335 set usemultiplicity
3336 eval $setvar
3337
3338
3339 case "$usemorebits" in
3340 "$define"|true|[yY]*)
3341         use64bitint="$define"
3342         uselongdouble="$define"
3343         usemorebits="$define"
3344         ;;
3345 *)      usemorebits="$undef"
3346         ;;
3347 esac
3348
3349 : make some quick guesses about what we are up against
3350 echo " "
3351 $echo $n "Hmm...  $c"
3352 echo exit 1 >bsd
3353 echo exit 1 >usg
3354 echo exit 1 >v7
3355 echo exit 1 >osf1
3356 echo exit 1 >eunice
3357 echo exit 1 >xenix
3358 echo exit 1 >venix
3359 echo exit 1 >os2
3360 d_bsd="$undef"
3361 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3362 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3363 then
3364         echo "Looks kind of like an OSF/1 system, but we'll see..."
3365         echo exit 0 >osf1
3366 elif test `echo abc | $tr a-z A-Z` = Abc ; then
3367         xxx=`./loc addbib blurfl $pth`
3368         if $test -f $xxx; then
3369         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3370                 echo exit 0 >bsd
3371                 echo exit 0 >usg
3372         else
3373                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3374                         echo "Looks kind of like an extended USG system, but we'll see..."
3375                 else
3376                         echo "Looks kind of like a USG system, but we'll see..."
3377                 fi
3378                 echo exit 0 >usg
3379         fi
3380 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3381         echo "Looks kind of like a BSD system, but we'll see..."
3382         d_bsd="$define"
3383         echo exit 0 >bsd
3384 else
3385         echo "Looks kind of like a Version 7 system, but we'll see..."
3386         echo exit 0 >v7
3387 fi
3388 case "$eunicefix" in
3389 *unixtovms*)
3390         $cat <<'EOI'
3391 There is, however, a strange, musty smell in the air that reminds me of
3392 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3393 EOI
3394         echo exit 0 >eunice
3395         d_eunice="$define"
3396 : it so happens the Eunice I know will not run shell scripts in Unix format
3397         ;;
3398 *)
3399         echo " "
3400         echo "Congratulations.  You aren't running Eunice."
3401         d_eunice="$undef"
3402         ;;
3403 esac
3404 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3405 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
3406 : semicolon as a patch separator
3407 case "$p_" in
3408 :) ;;
3409 *)
3410         $cat <<'EOI'
3411 I have the feeling something is not exactly right, however...don't tell me...
3412 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3413 (Or you may be running DOS with DJGPP.)
3414 EOI
3415         echo exit 0 >os2
3416         ;;
3417 esac
3418 if test -f /xenix; then
3419         echo "Actually, this looks more like a XENIX system..."
3420         echo exit 0 >xenix
3421         d_xenix="$define"
3422 else
3423         echo " "
3424         echo "It's not Xenix..."
3425         d_xenix="$undef"
3426 fi
3427 chmod +x xenix
3428 $eunicefix xenix
3429 if test -f /venix; then
3430         echo "Actually, this looks more like a VENIX system..."
3431         echo exit 0 >venix
3432 else
3433         echo " "
3434         if ./xenix; then
3435                 : null
3436         else
3437                 echo "Nor is it Venix..."
3438         fi
3439 fi
3440 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3441 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3442 $rm -f foo
3443
3444 case "$cc" in
3445 '') dflt=cc;;
3446 *) dflt="$cc";;
3447 esac
3448 rp="Use which C compiler?"
3449 . ./myread
3450 cc="$ans"
3451 : Look for a hint-file generated 'call-back-unit'.  Now that the
3452 : user has specified the compiler, we may need to set or change some
3453 : other defaults.
3454 if $test -f cc.cbu; then
3455     . ./cc.cbu
3456 fi
3457 . ./checkcc
3458
3459 echo " "
3460 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3461 $cat >try.c <<EOM
3462 #include <stdio.h>
3463 int main() {
3464 #ifdef __GNUC__
3465 #ifdef __VERSION__
3466         printf("%s\n", __VERSION__);
3467 #else
3468         printf("%s\n", "1");
3469 #endif
3470 #endif
3471         exit(0);
3472 }
3473 EOM
3474 if $cc -o try $ccflags $ldflags try.c; then
3475         gccversion=`$run ./try`
3476         case "$gccversion" in
3477         '') echo "You are not using GNU cc." ;;
3478         *)  echo "You are using GNU cc $gccversion."
3479             ccname=gcc  
3480             ;;
3481         esac
3482 else
3483         echo " "
3484         echo "*** WHOA THERE!!! ***" >&4
3485         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3486         case "$knowitall" in
3487         '')
3488         echo "    You'd better start hunting for one and let me know about it." >&4
3489                 exit 1
3490                 ;;
3491         esac
3492 fi
3493 $rm -f try try.*
3494 case "$gccversion" in
3495 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3496 esac
3497 case "$gccversion" in
3498 '') gccosandvers='' ;;
3499 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3500    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3501    gccshortvers=''
3502    case "$gccosandvers" in
3503    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3504    $osname$osvers) ;; # looking good
3505    $osname*) cat <<EOM >&4
3506
3507 *** WHOA THERE!!! ***
3508
3509     Your gcc has not been compiled for the exact release of
3510     your operating system ($gccosandvers versus $osname$osvers).
3511
3512     In general it is a good idea to keep gcc synchronized with
3513     the operating system because otherwise serious problems
3514     may ensue when trying to compile software, like Perl.
3515
3516     I'm trying to be optimistic here, though, and will continue.
3517     If later during the configuration and build icky compilation
3518     problems appear (headerfile conflicts being the most common
3519     manifestation), I suggest reinstalling the gcc to match
3520     your operating system release.
3521
3522 EOM
3523       ;;
3524    *) gccosandvers='' ;; # failed to parse, better be silent
3525    esac
3526    ;;
3527 esac
3528 case "$ccname" in
3529 '') ccname="$cc" ;;
3530 esac
3531
3532
3533 : decide how portable to be.  Allow command line overrides.
3534 case "$d_portable" in
3535 "$undef") ;;
3536 *)      d_portable="$define" ;;
3537 esac
3538
3539 : set up shell script to do ~ expansion
3540 cat >filexp <<EOSS
3541 $startsh
3542 : expand filename
3543 case "\$1" in
3544  ~/*|~)
3545         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3546         ;;
3547  ~*)
3548         if $test -f /bin/csh; then
3549                 /bin/csh -f -c "glob \$1"
3550                 failed=\$?
3551                 echo ""
3552                 exit \$failed
3553         else
3554                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3555                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3556                 if $test ! -d "\$dir"; then
3557                         me=\`basename \$0\`
3558                         echo "\$me: can't locate home directory for: \$name" >&2
3559                         exit 1
3560                 fi
3561                 case "\$1" in
3562                 */*)
3563                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3564                         ;;
3565                 *)
3566                         echo \$dir
3567                         ;;
3568                 esac
3569         fi
3570         ;;
3571 *)
3572         echo \$1
3573         ;;
3574 esac
3575 EOSS
3576 chmod +x filexp
3577 $eunicefix filexp
3578
3579 : now set up to get a file name
3580 cat <<EOS >getfile
3581 $startsh
3582 EOS
3583 cat <<'EOSC' >>getfile
3584 tilde=''
3585 fullpath=''
3586 already=''
3587 skip=''
3588 none_ok=''
3589 exp_file=''
3590 nopath_ok=''
3591 orig_rp="$rp"
3592 orig_dflt="$dflt"
3593 case "$gfpth" in
3594 '') gfpth='.' ;;
3595 esac
3596
3597 case "$fn" in
3598 *\(*)
3599         expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3600         fn=`echo $fn | sed 's/(.*)//'`
3601         ;;
3602 esac
3603
3604 case "$fn" in
3605 *:*)
3606         loc_file=`expr $fn : '.*:\(.*\)'`
3607         fn=`expr $fn : '\(.*\):.*'`
3608         ;;
3609 esac
3610
3611 case "$fn" in
3612 *~*) tilde=true;;
3613 esac
3614 case "$fn" in
3615 */*) fullpath=true;;
3616 esac
3617 case "$fn" in
3618 *+*) skip=true;;
3619 esac
3620 case "$fn" in
3621 *n*) none_ok=true;;
3622 esac
3623 case "$fn" in
3624 *e*) exp_file=true;;
3625 esac
3626 case "$fn" in
3627 *p*) nopath_ok=true;;
3628 esac
3629
3630 case "$fn" in
3631 *f*) type='File';;
3632 *d*) type='Directory';;
3633 *l*) type='Locate';;
3634 esac
3635
3636 what="$type"
3637 case "$what" in
3638 Locate) what='File';;
3639 esac
3640
3641 case "$exp_file" in
3642 '')
3643         case "$d_portable" in
3644         "$define") ;;
3645         *) exp_file=true;;
3646         esac
3647         ;;
3648 esac
3649
3650 cd ..
3651 while test "$type"; do
3652         redo=''
3653         rp="$orig_rp"
3654         dflt="$orig_dflt"
3655         case "$tilde" in
3656         true) rp="$rp (~name ok)";;
3657         esac
3658         . UU/myread
3659         if test -f UU/getfile.ok && \
3660                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3661         then
3662                 value="$ans"
3663                 ansexp="$ans"
3664                 break
3665         fi
3666         case "$ans" in
3667         none)
3668                 value=''
3669                 ansexp=''
3670                 case "$none_ok" in
3671                 true) type='';;
3672                 esac
3673                 ;;
3674         *)
3675                 case "$tilde" in
3676                 '') value="$ans"
3677                         ansexp="$ans";;
3678                 *)
3679                         value=`UU/filexp $ans`
3680                         case $? in
3681                         0)
3682                                 if test "$ans" != "$value"; then
3683                                         echo "(That expands to $value on this system.)"
3684                                 fi
3685                                 ;;
3686                         *) value="$ans";;
3687                         esac
3688                         ansexp="$value"
3689                         case "$exp_file" in
3690                         '') value="$ans";;
3691                         esac
3692                         ;;
3693                 esac
3694                 case "$fullpath" in
3695                 true)
3696                         case "$ansexp" in
3697                         /*) value="$ansexp" ;;
3698                         [a-zA-Z]:/*) value="$ansexp" ;;
3699                         *)
3700                                 redo=true
3701                                 case "$already" in
3702                                 true)
3703                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3704                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3705                                         ;;
3706                                 *)
3707                                 echo "Please give a full path name, starting with slash." >&4
3708                                         case "$tilde" in
3709                                         true)
3710                                 echo "Note that using ~name is ok provided it expands well." >&4
3711                                                 already=true
3712                                                 ;;
3713                                         esac
3714                                 esac
3715                                 ;;
3716                         esac
3717                         ;;
3718                 esac
3719                 case "$redo" in
3720                 '')
3721                         case "$type" in
3722                         File)
3723                                 for fp in $gfpth; do
3724                                         if test "X$fp" = X.; then
3725                                             pf="$ansexp"
3726                                         else    
3727                                             pf="$fp/$ansexp"
3728                                         fi
3729                                         if test -f "$pf"; then
3730                                                 type=''
3731                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3732                                         then
3733                                                 echo "($value is not a plain file, but that's ok.)"
3734                                                 type=''
3735                                         fi
3736                                         if test X"$type" = X; then
3737                                             value="$pf"
3738                                             break
3739                                         fi
3740                                 done
3741                                 ;;
3742                         Directory)
3743                                 for fp in $gfpth; do
3744                                         if test "X$fp" = X.; then
3745                                             dir="$ans"
3746                                             direxp="$ansexp"
3747                                         else    
3748                                             dir="$fp/$ansexp"
3749                                             direxp="$fp/$ansexp"
3750                                         fi
3751                                         if test -d "$direxp"; then
3752                                                 type=''
3753                                                 value="$dir"
3754                                                 break
3755                                         fi
3756                                 done
3757                                 ;;
3758                         Locate)
3759                                 if test -d "$ansexp"; then
3760                                         echo "(Looking for $loc_file in directory $value.)"
3761                                         value="$value/$loc_file"
3762                                         ansexp="$ansexp/$loc_file"
3763                                 fi
3764                                 if test -f "$ansexp"; then
3765                                         type=''
3766                                 fi
3767                                 case "$nopath_ok" in
3768                                 true)   case "$value" in
3769                                         */*) ;;
3770                                         *)      echo "Assuming $value will be in people's path."
3771                                                 type=''
3772                                                 ;;
3773                                         esac
3774                                         ;;
3775                                 esac
3776                                 ;;
3777                         esac
3778
3779                         case "$skip" in
3780                         true) type='';
3781                         esac
3782
3783                         case "$type" in
3784                         '') ;;
3785                         *)
3786                                 if test "$fastread" = yes; then
3787                                         dflt=y
3788                                 else
3789                                         dflt=n
3790                                 fi
3791                                 rp="$what $value doesn't exist.  Use that name anyway?"
3792                                 . UU/myread
3793                                 dflt=''
3794                                 case "$ans" in
3795                                 y*) type='';;
3796                                 *) echo " ";;
3797                                 esac
3798                                 ;;
3799                         esac
3800                         ;;
3801                 esac
3802                 ;;
3803         esac
3804 done
3805 cd UU
3806 ans="$value"
3807 rp="$orig_rp"
3808 dflt="$orig_dflt"
3809 rm -f getfile.ok
3810 test "X$gfpthkeep" != Xy && gfpth=""
3811 EOSC
3812
3813 : What should the include directory be ?
3814 echo " "
3815 $echo $n "Hmm...  $c"
3816 dflt='/usr/include'
3817 incpath=''
3818 mips_type=''
3819 if $test -f /bin/mips && /bin/mips; then
3820         echo "Looks like a MIPS system..."
3821         $cat >usr.c <<'EOCP'
3822 #ifdef SYSTYPE_BSD43
3823 /bsd43
3824 #endif
3825 EOCP
3826         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3827                 dflt='/bsd43/usr/include'
3828                 incpath='/bsd43'
3829                 mips_type='BSD 4.3'
3830         else
3831                 mips_type='System V'
3832         fi
3833         $rm -f usr.c usr.out
3834         echo "and you're compiling with the $mips_type compiler and libraries."
3835         xxx_prompt=y
3836         echo "exit 0" >mips
3837 else
3838         echo "Doesn't look like a MIPS system."
3839         xxx_prompt=n
3840         echo "exit 1" >mips
3841 fi
3842 chmod +x mips
3843 $eunicefix mips
3844 case "$usrinc" in
3845 '') ;;
3846 *) dflt="$usrinc";;
3847 esac
3848 case "$xxx_prompt" in
3849 y)      fn=d/
3850         echo " "
3851         rp='Where are the include files you want to use?'
3852         . ./getfile
3853         usrinc="$ans"
3854         ;;
3855 *)      usrinc="$dflt"
3856         ;;
3857 esac
3858
3859 : see how we invoke the C preprocessor
3860 echo " "
3861 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3862 cat <<'EOT' >testcpp.c
3863 #define ABC abc
3864 #define XYZ xyz
3865 ABC.XYZ
3866 EOT
3867 cd ..
3868 if test ! -f cppstdin; then
3869         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3870                 # AIX cc -E doesn't show the absolute headerfile
3871                 # locations but we'll cheat by using the -M flag.
3872                 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
3873         else
3874                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3875         fi
3876 else
3877         echo "Keeping your $hint cppstdin wrapper."
3878 fi
3879 chmod 755 cppstdin
3880 wrapper=`pwd`/cppstdin
3881 ok='false'
3882 cd UU
3883
3884 if $test "X$cppstdin" != "X" && \
3885         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3886         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3887 then
3888         echo "You used to use $cppstdin $cppminus so we'll use that again."
3889         case "$cpprun" in
3890         '') echo "But let's see if we can live without a wrapper..." ;;
3891         *)
3892                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3893                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3894                 then
3895                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3896                         ok='true'
3897                 else
3898                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3899                 fi
3900                 ;;
3901         esac
3902 else
3903         case "$cppstdin" in
3904         '') ;;
3905         *)
3906                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3907                 ;;
3908         esac
3909 fi
3910
3911 if $ok; then
3912         : nothing
3913 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3914         $cc -E <testcpp.c >testcpp.out 2>&1; \
3915         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3916         echo "Yup, it does."
3917         x_cpp="$cc -E"
3918         x_minus='';
3919 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3920         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3921         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3922         echo "Yup, it does."
3923         x_cpp="$cc -E"
3924         x_minus='-';
3925 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3926         $cc -P <testcpp.c >testcpp.out 2>&1; \
3927         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3928         echo "Yipee, that works!"
3929         x_cpp="$cc -P"
3930         x_minus='';
3931 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3932         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3933         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3934         echo "At long last!"
3935         x_cpp="$cc -P"
3936         x_minus='-';
3937 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3938         $cpp <testcpp.c >testcpp.out 2>&1; \
3939         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3940         echo "It works!"
3941         x_cpp="$cpp"
3942         x_minus='';
3943 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3944         $cpp - <testcpp.c >testcpp.out 2>&1; \
3945         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3946         echo "Hooray, it works!  I was beginning to wonder."
3947         x_cpp="$cpp"
3948         x_minus='-';
3949 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3950         $wrapper <testcpp.c >testcpp.out 2>&1; \
3951         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3952         x_cpp="$wrapper"
3953         x_minus=''
3954         echo "Eureka!"
3955 else
3956         dflt=''
3957         rp="No dice.  I can't find a C preprocessor.  Name one:"
3958         . ./myread
3959         x_cpp="$ans"
3960         x_minus=''
3961         $x_cpp <testcpp.c >testcpp.out 2>&1
3962         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3963                 echo "OK, that will do." >&4
3964         else
3965 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3966                 exit 1
3967         fi
3968 fi
3969
3970 case "$ok" in
3971 false)
3972         cppstdin="$x_cpp"
3973         cppminus="$x_minus"
3974         cpprun="$x_cpp"
3975         cpplast="$x_minus"
3976         set X $x_cpp
3977         shift
3978         case "$1" in
3979         "$cpp")
3980                 echo "Perhaps can we force $cc -E using a wrapper..."
3981                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3982                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3983                 then
3984                         echo "Yup, we can."
3985                         cppstdin="$wrapper"
3986                         cppminus='';
3987                 else
3988                         echo "Nope, we'll have to live without it..."
3989                 fi
3990                 ;;
3991         esac
3992         case "$cpprun" in
3993         "$wrapper")
3994                 cpprun=''
3995                 cpplast=''
3996                 ;;
3997         esac
3998         ;;
3999 esac
4000
4001 case "$cppstdin" in
4002 "$wrapper"|'cppstdin') ;;
4003 *) $rm -f $wrapper;;
4004 esac
4005 $rm -f testcpp.c testcpp.out
4006
4007 : Set private lib path
4008 case "$plibpth" in
4009 '') if ./mips; then
4010                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
4011         fi;;
4012 esac
4013 case "$libpth" in
4014 ' ') dlist='';;
4015 '') dlist="$loclibpth $plibpth $glibpth";;
4016 *) dlist="$libpth";;
4017 esac
4018
4019 : Now check and see which directories actually exist, avoiding duplicates
4020 libpth=''
4021 for xxx in $dlist
4022 do
4023     if $test -d $xxx; then
4024                 case " $libpth " in
4025                 *" $xxx "*) ;;
4026                 *) libpth="$libpth $xxx";;
4027                 esac
4028     fi
4029 done
4030 $cat <<'EOM'
4031
4032 Some systems have incompatible or broken versions of libraries.  Among
4033 the directories listed in the question below, please remove any you
4034 know not to be holding relevant libraries, and add any that are needed.
4035 Say "none" for none.
4036
4037 EOM
4038 case "$libpth" in
4039 '') dflt='none';;
4040 *)
4041         set X $libpth
4042         shift
4043         dflt=${1+"$@"}
4044         ;;
4045 esac
4046 rp="Directories to use for library searches?"
4047 . ./myread
4048 case "$ans" in
4049 none) libpth=' ';;
4050 *) libpth="$ans";;
4051 esac
4052
4053 : compute shared library extension
4054 case "$so" in
4055 '')
4056         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4057                 dflt='sl'
4058         else
4059                 dflt='so'
4060         fi
4061         ;;
4062 *) dflt="$so";;
4063 esac
4064 $cat <<EOM
4065
4066 On some systems, shared libraries may be available.  Answer 'none' if
4067 you want to suppress searching of shared libraries for the remainder
4068 of this configuration.
4069
4070 EOM
4071 rp='What is the file extension used for shared libraries?'
4072 . ./myread
4073 so="$ans"
4074
4075 : Define several unixisms.
4076 : Hints files or command line option can be used to override them.
4077 : The convoluted testing is in case hints files set either the old
4078 : or the new name.
4079 case "$_exe" in
4080 '')     case "$exe_ext" in
4081     '') ;;
4082         *)      _exe="$exe_ext" ;;
4083         esac
4084         ;;
4085 esac
4086 case "$_a" in
4087 '')     case "$lib_ext" in
4088     '') _a='.a';;
4089         *)      _a="$lib_ext" ;;
4090         esac
4091         ;;
4092 esac
4093 case "$_o" in
4094 '') case "$obj_ext" in
4095         '')     _o='.o';;
4096         *)      _o="$obj_ext";;
4097         esac
4098         ;;
4099 esac
4100 case "$p_" in
4101 '') case "$path_sep" in
4102         '')     p_=':';;
4103         *)      p_="$path_sep";;
4104         esac
4105         ;;
4106 esac
4107 exe_ext=$_exe
4108 lib_ext=$_a
4109 obj_ext=$_o
4110 path_sep=$p_
4111
4112 : Which makefile gets called first.  This is used by make depend.
4113 case "$firstmakefile" in
4114 '') firstmakefile='makefile';;
4115 esac
4116
4117 case "$usesocks" in
4118 $define|true|[yY]*)     dflt='y';;
4119 *) dflt='n';;
4120 esac
4121 cat <<EOM
4122
4123 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4124 Configure must be run with -Dusesocks.  If you use SOCKS you also need
4125 to use the PerlIO abstraction layer, this will be implicitly selected.
4126
4127 If this doesn't make any sense to you, just accept the default '$dflt'.
4128 EOM
4129 rp='Build Perl for SOCKS?'
4130 . ./myread
4131 case "$ans" in
4132 y|Y)    val="$define" ;;     
4133 *)      val="$undef" ;;
4134 esac
4135 set usesocks
4136 eval $setvar
4137
4138 case "$usesocks" in
4139 $define|true|[yY]*) useperlio="$define";;
4140 esac
4141
4142 : Looking for optional libraries
4143 echo " "
4144 echo "Checking for optional libraries..." >&4
4145 case "$libs" in
4146 ' '|'') dflt='';;
4147 *) dflt="$libs";;
4148 esac
4149 case "$libswanted" in
4150 '') libswanted='c_s';;
4151 esac
4152 case "$usesocks" in
4153 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
4154 esac
4155 libsfound=''
4156 libsfiles=''
4157 libsdirs=''
4158 libspath=''
4159 for thisdir in $libpth $xlibpth; do
4160   test -d $thisdir && libspath="$libspath $thisdir"
4161 done
4162 for thislib in $libswanted; do
4163         for thisdir in $libspath; do
4164             xxx=''
4165             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4166                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
4167                 $test -f "$xxx" && eval $libscheck
4168                 $test -f "$xxx" && libstyle=shared
4169             fi
4170             if test ! -f "$xxx"; then
4171                 xxx=$thisdir/lib$thislib.$so
4172                 $test -f "$xxx" && eval $libscheck
4173                 $test -f "$xxx" && libstyle=shared
4174             fi  
4175             if test ! -f "$xxx"; then
4176                 xxx=$thisdir/lib$thislib$_a
4177                 $test -f "$xxx" && eval $libscheck
4178                 $test -f "$xxx" && libstyle=static
4179             fi
4180             if test ! -f "$xxx"; then
4181                 xxx=$thisdir/$thislib$_a
4182                 $test -f "$xxx" && eval $libscheck
4183                 $test -f "$xxx" && libstyle=static
4184             fi
4185             if test ! -f "$xxx"; then
4186                 xxx=$thisdir/lib${thislib}_s$_a
4187                 $test -f "$xxx" && eval $libscheck
4188                 $test -f "$xxx" && libstyle=static
4189                 $test -f "$xxx" && thislib=${thislib}_s
4190             fi
4191             if test ! -f "$xxx"; then
4192                 xxx=$thisdir/Slib$thislib$_a
4193                 $test -f "$xxx" && eval $libscheck
4194                 $test -f "$xxx" && libstyle=static
4195             fi
4196             if $test -f "$xxx"; then
4197                 case "$libstyle" in
4198                 shared) echo "Found -l$thislib (shared)." ;;
4199                 static) echo "Found -l$thislib." ;;
4200                 *)      echo "Found -l$thislib ($libstyle)." ;;
4201                 esac
4202                 case " $dflt " in
4203                 *"-l$thislib "*);;
4204                 *) dflt="$dflt -l$thislib"
4205                    libsfound="$libsfound $xxx"
4206                    yyy=`basename $xxx`
4207                    libsfiles="$libsfiles $yyy"
4208                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
4209                    case " $libsdirs " in
4210                    *" $yyy "*) ;;
4211                    *) libsdirs="$libsdirs $yyy" ;;
4212                    esac
4213                    ;;
4214                 esac
4215                 break
4216             fi  
4217         done
4218         if $test ! -f "$xxx"; then
4219             echo "No -l$thislib."
4220         fi
4221 done
4222 set X $dflt
4223 shift
4224 dflt="$*"
4225 case "$libs" in
4226 '') dflt="$dflt";;
4227 *) dflt="$libs";;
4228 esac
4229 case "$dflt" in
4230 ' '|'') dflt='none';;
4231 esac
4232
4233 $cat <<EOM
4234
4235 In order to compile $package on your machine, a number of libraries
4236 are usually needed.  Include any other special libraries here as well.
4237 Say "none" for none.  The default list is almost always right.
4238 EOM
4239
4240 echo " "
4241 rp="What libraries to use?"
4242 . ./myread
4243 case "$ans" in
4244 none) libs=' ';;
4245 *) libs="$ans";;
4246 esac
4247
4248 : determine optimization, if desired, or use for debug flag also
4249 case "$optimize" in
4250 ' '|$undef) dflt='none';;
4251 '') dflt='-O';;
4252 *) dflt="$optimize";;
4253 esac
4254 $cat <<EOH
4255
4256 By default, $package compiles with the -O flag to use the optimizer.
4257 Alternately, you might want to use the symbolic debugger, which uses
4258 the -g flag (on traditional Unix systems).  Either flag can be
4259 specified here.  To use neither flag, specify the word "none".
4260
4261 EOH
4262 rp="What optimizer/debugger flag should be used?"
4263 . ./myread
4264 optimize="$ans"
4265 case "$optimize" in
4266 'none') optimize=" ";;
4267 esac
4268
4269 dflt=''
4270 : We will not override a previous value, but we might want to
4271 : augment a hint file
4272 case "$hint" in
4273 default|recommended)
4274         case "$gccversion" in
4275         1*) dflt='-fpcc-struct-return' ;;
4276         esac
4277         case "$optimize" in
4278         *-g*) dflt="$dflt -DDEBUGGING";;
4279         esac
4280         case "$gccversion" in
4281         2*) if test -d /etc/conf/kconfig.d &&
4282                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4283                 then
4284                         dflt="$dflt -posix"
4285                 fi
4286                 ;;
4287         esac
4288         case "$gccversion" in
4289         1*) ;;
4290         2.[0-8]*) ;;
4291         ?*)     echo " "
4292                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4293                 echo 'int main(void) { return 0; }' > gcctest.c
4294                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4295                         echo "Yes, it does." 2>&1
4296                         case "$ccflags" in
4297                         *strict-aliasing*) 
4298                                 echo "Leaving current flags $ccflags alone." 2>&1
4299                                 ;;
4300                         *) dflt="$dflt -fno-strict-aliasing" ;;
4301                         esac
4302                 else
4303                         echo "Nope, it doesn't, but that's ok." 2>&1
4304                 fi
4305                 ;;
4306         esac
4307         ;;
4308 esac
4309
4310 case "$mips_type" in
4311 *BSD*|'') inclwanted="$locincpth $usrinc";;
4312 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4313 esac
4314 for thisincl in $inclwanted; do
4315         if $test -d $thisincl; then
4316                 if $test x$thisincl != x$usrinc; then
4317                         case "$dflt" in
4318                         *" -I$thisincl "*);;
4319                         *) dflt="$dflt -I$thisincl ";;
4320                         esac
4321                 fi
4322         fi
4323 done
4324
4325 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4326         xxx=true;
4327 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4328         xxx=true;
4329 else
4330         xxx=false;
4331 fi;
4332 if $xxx; then
4333         case "$dflt" in
4334         *$2*);;
4335         *) dflt="$dflt -D$2";;
4336         esac;
4337 fi'
4338
4339 set signal.h LANGUAGE_C; eval $inctest
4340
4341 case "$usesocks" in
4342 $define)
4343         ccflags="$ccflags -DSOCKS"
4344         ;;
4345 esac
4346
4347 case "$hint" in
4348 default|recommended) dflt="$ccflags $dflt" ;;
4349 *) dflt="$ccflags";;
4350 esac
4351
4352 case "$dflt" in
4353 ''|' ') dflt=none;;
4354 esac
4355
4356 $cat <<EOH
4357
4358 Your C compiler may want other flags.  For this question you should include
4359 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4360 but you should NOT include libraries or ld flags like -lwhatever.  If you
4361 want $package to honor its debug switch, you should include -DDEBUGGING here.
4362 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4363
4364 To use no flags, specify the word "none".
4365
4366 EOH
4367 set X $dflt
4368 shift
4369 dflt=${1+"$@"}
4370 rp="Any additional cc flags?"
4371 . ./myread
4372 case "$ans" in
4373 none) ccflags='';;
4374 *) ccflags="$ans";;
4375 esac
4376
4377 : the following weeds options from ccflags that are of no interest to cpp
4378 case "$cppflags" in
4379 '') cppflags="$ccflags" ;;
4380 *)  cppflags="$cppflags $ccflags" ;;
4381 esac
4382 case "$gccversion" in
4383 1*) cppflags="$cppflags -D__GNUC__"
4384 esac
4385 case "$mips_type" in
4386 '');;
4387 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4388 esac
4389 case "$cppflags" in
4390 '');;
4391 *)
4392         echo " "
4393         echo "Let me guess what the preprocessor flags are..." >&4
4394         set X $cppflags
4395         shift
4396         cppflags=''
4397         $cat >cpp.c <<'EOM'
4398 #define BLURFL foo
4399
4400 BLURFL xx LFRULB
4401 EOM
4402         previous=''
4403         for flag in $*
4404         do
4405                 case "$flag" in
4406                 -*) ftry="$flag";;
4407                 *) ftry="$previous $flag";;
4408                 esac
4409                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4410                         >cpp1.out 2>/dev/null && \
4411                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4412                         >cpp2.out 2>/dev/null && \
4413                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4414                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4415                 then
4416                         cppflags="$cppflags $ftry"
4417                         previous=''
4418                 else
4419                         previous="$flag"
4420                 fi
4421         done
4422         set X $cppflags
4423         shift
4424         cppflags=${1+"$@"}
4425         case "$cppflags" in
4426         *-*)  echo "They appear to be: $cppflags";;
4427         esac
4428         $rm -f cpp.c cpp?.out
4429         ;;
4430 esac
4431
4432 : flags used in final linking phase
4433 case "$ldflags" in
4434 '') if ./venix; then
4435                 dflt='-i -z'
4436         else
4437                 dflt=''
4438         fi
4439         case "$ccflags" in
4440         *-posix*) dflt="$dflt -posix" ;;
4441         esac
4442         ;;
4443 *) dflt="$ldflags";;
4444 esac
4445
4446 : Try to guess additional flags to pick up local libraries.
4447 for thislibdir in $libpth; do
4448         case " $loclibpth " in
4449         *" $thislibdir "*)
4450                 case "$dflt " in 
4451                 *"-L$thislibdir "*) ;;
4452                 *)  dflt="$dflt -L$thislibdir" ;;
4453                 esac
4454                 ;;
4455         esac
4456 done
4457
4458 case "$dflt" in
4459 '') dflt='none' ;;
4460 esac
4461
4462 $cat <<EOH
4463
4464 Your C linker may need flags.  For this question you should
4465 include -L/whatever and any other flags used by the C linker, but you
4466 should NOT include libraries like -lwhatever.
4467
4468 Make sure you include the appropriate -L/path flags if your C linker
4469 does not normally search all of the directories you specified above,
4470 namely
4471         $libpth
4472 To use no flags, specify the word "none".
4473
4474 EOH
4475
4476 rp="Any additional ld flags (NOT including libraries)?"
4477 . ./myread
4478 case "$ans" in
4479 none) ldflags='';;
4480 *) ldflags="$ans";;
4481 esac
4482 rmlist="$rmlist pdp11"
4483
4484 : coherency check
4485 echo " "
4486 echo "Checking your choice of C compiler and flags for coherency..." >&4
4487 $cat > try.c <<'EOF'
4488 #include <stdio.h>
4489 int main() { printf("Ok\n"); exit(0); }
4490 EOF
4491 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
4492 shift
4493 $cat >try.msg <<'EOM'
4494 I've tried to compile and run the following simple program:
4495
4496 EOM
4497 $cat try.c >> try.msg
4498
4499 $cat >> try.msg <<EOM
4500
4501 I used the command:
4502
4503         $*
4504         $run ./try
4505
4506 and I got the following output:
4507
4508 EOM
4509 dflt=y
4510 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
4511         if $sh -c "$run ./try" >>try.msg 2>&1; then
4512                 xxx=`$run ./try`
4513                 case "$xxx" in
4514                 "Ok") dflt=n ;;
4515                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4516                         case " $libs " in
4517                         *" -lsfio "*)
4518                                 cat >> try.msg <<'EOQS'
4519 If $libs contains -lsfio, and sfio is mis-configured, then it
4520 sometimes (apparently) runs and exits with a 0 status, but with no
4521 output!  It may have to do with sfio's use of _exit vs. exit.
4522
4523 EOQS
4524                                 rp="You have a big problem.  Shall I abort Configure"
4525                                 dflt=y
4526                                 ;;
4527                         esac
4528                         ;;
4529                 esac
4530         else
4531                 echo "The program compiled OK, but exited with status $?." >>try.msg
4532                 rp="You have a problem.  Shall I abort Configure"
4533                 dflt=y
4534         fi
4535 else
4536         echo "I can't compile the test program." >>try.msg
4537         rp="You have a BIG problem.  Shall I abort Configure"
4538         dflt=y
4539 fi
4540 case "$dflt" in
4541 y)
4542         $cat try.msg >&4
4543         case "$knowitall" in
4544         '')
4545                 echo "(The supplied flags or libraries might be incorrect.)"
4546                 ;;
4547         *) dflt=n;;
4548         esac
4549         echo " "
4550         . ./myread
4551         case "$ans" in
4552         n*|N*) ;;
4553         *)      echo "Ok.  Stopping Configure." >&4
4554                 exit 1
4555                 ;;
4556         esac
4557         ;;
4558 n) echo "OK, that should do.";;
4559 esac
4560 $rm -f try try.* core
4561
4562 : define a shorthand compile call
4563 compile='
4564 mc_file=$1;
4565 shift;
4566 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
4567 : define a shorthand compile call for compilations that should be ok.
4568 compile_ok='
4569 mc_file=$1;
4570 shift;
4571 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
4572
4573 : check for lengths of integral types
4574 echo " "
4575 case "$intsize" in
4576 '')
4577         echo "Checking to see how big your integers are..." >&4
4578         $cat >try.c <<'EOCP'
4579 #include <stdio.h>
4580 int main()
4581 {
4582         printf("intsize=%d;\n", (int)sizeof(int));
4583         printf("longsize=%d;\n", (int)sizeof(long));
4584         printf("shortsize=%d;\n", (int)sizeof(short));
4585         exit(0);
4586 }
4587 EOCP
4588         set try
4589         if eval $compile_ok && $run ./try > /dev/null; then
4590                 eval `$run ./try`
4591                 echo "Your integers are $intsize bytes long."
4592                 echo "Your long integers are $longsize bytes long."
4593                 echo "Your short integers are $shortsize bytes long."
4594         else
4595                 $cat >&4 <<EOM
4596 !
4597 Help! I can't compile and run the intsize test program: please enlighten me!
4598 (This is probably a misconfiguration in your system or libraries, and
4599 you really ought to fix it.  Still, I'll try anyway.)
4600 !
4601 EOM
4602                 dflt=4
4603                 rp="What is the size of an integer (in bytes)?"
4604                 . ./myread
4605                 intsize="$ans"
4606                 dflt=$intsize
4607                 rp="What is the size of a long integer (in bytes)?"
4608                 . ./myread
4609                 longsize="$ans"
4610                 dflt=2
4611                 rp="What is the size of a short integer (in bytes)?"
4612                 . ./myread
4613                 shortsize="$ans"
4614         fi
4615         ;;
4616 esac
4617 $rm -f try try.*
4618
4619 : check for void type
4620 echo " "
4621 echo "Checking to see how well your C compiler groks the void type..." >&4
4622 case "$voidflags" in
4623 '')
4624         $cat >try.c <<'EOCP'
4625 #if TRY & 1
4626 void sub() {
4627 #else
4628 sub() {
4629 #endif
4630         extern void moo();      /* function returning void */
4631         void (*goo)();          /* ptr to func returning void */
4632 #if TRY & 8
4633         void *hue;              /* generic ptr */
4634 #endif
4635 #if TRY & 2
4636         void (*foo[10])();
4637 #endif
4638
4639 #if TRY & 4
4640         if(goo == moo) {
4641                 exit(0);
4642         }
4643 #endif
4644         exit(0);
4645 }
4646 int main() { sub(); }
4647 EOCP
4648         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
4649                 voidflags=$defvoidused
4650         echo "Good.  It appears to support void to the level $package wants.">&4
4651                 if $contains warning .out >/dev/null 2>&1; then
4652                         echo "However, you might get some warnings that look like this:"
4653                         $cat .out
4654                 fi
4655         else
4656 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
4657                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
4658                         echo "It supports 1..."
4659                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
4660                                 echo "It also supports 2..."
4661                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
4662                                         voidflags=7
4663                                         echo "And it supports 4 but not 8 definitely."
4664                                 else
4665                                         echo "It doesn't support 4..."
4666                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
4667                                                 voidflags=11
4668                                                 echo "But it supports 8."
4669                                         else
4670                                                 voidflags=3
4671                                                 echo "Neither does it support 8."
4672                                         fi
4673                                 fi
4674                         else
4675                                 echo "It does not support 2..."
4676                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
4677                                         voidflags=13
4678                                         echo "But it supports 4 and 8."
4679                                 else
4680                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
4681                                                 voidflags=5
4682                                                 echo "And it supports 4 but has not heard about 8."
4683                                         else
4684                                                 echo "However it supports 8 but not 4."
4685                                         fi
4686                                 fi
4687                         fi
4688                 else
4689                         echo "There is no support at all for void."
4690                         voidflags=0
4691                 fi
4692         fi
4693 esac
4694 case "$voidflags" in
4695 "$defvoidused") ;;
4696 *)      $cat >&4 <<'EOM'
4697   Support flag bits are:
4698     1: basic void declarations.
4699     2: arrays of pointers to functions returning void.
4700     4: operations between pointers to and addresses of void functions.
4701     8: generic void pointers.
4702 EOM
4703         dflt="$voidflags";
4704         rp="Your void support flags add up to what?"
4705         . ./myread
4706         voidflags="$ans"
4707         ;;
4708 esac
4709 $rm -f try.* .out
4710
4711 : check for length of pointer
4712 echo " "
4713 case "$ptrsize" in
4714 '')
4715         echo "Checking to see how big your pointers are..." >&4
4716         if test "$voidflags" -gt 7; then
4717                 echo '#define VOID_PTR char *' > try.c
4718         else
4719                 echo '#define VOID_PTR void *' > try.c
4720         fi
4721         $cat >>try.c <<'EOCP'
4722 #include <stdio.h>
4723 int main()
4724 {
4725     printf("%d\n", (int)sizeof(VOID_PTR));
4726     exit(0);
4727 }
4728 EOCP
4729         set try
4730         if eval $compile_ok; then
4731                 ptrsize=`$run ./try`
4732                 echo "Your pointers are $ptrsize bytes long."
4733         else
4734                 dflt='4'
4735                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
4736                 rp="What is the size of a pointer (in bytes)?"
4737                 . ./myread
4738                 ptrsize="$ans"
4739         fi
4740         ;;
4741 esac
4742 $rm -f try.c try
4743
4744 : check for long long
4745 echo " "
4746 echo "Checking to see if you have long long..." >&4
4747 echo 'int main() { long long x = 7; return 0; }' > try.c
4748 set try
4749 if eval $compile; then
4750         val="$define"
4751         echo "You have long long."
4752 else
4753         val="$undef"
4754         echo "You do not have long long."
4755 fi
4756 $rm try.*
4757 set d_longlong
4758 eval $setvar
4759
4760 : check for length of long long
4761 case "${d_longlong}${longlongsize}" in
4762 $define)
4763         echo " "
4764         echo "Checking to see how big your long longs are..." >&4
4765         $cat >try.c <<'EOCP'
4766 #include <stdio.h>
4767 int main()
4768 {
4769     printf("%d\n", (int)sizeof(long long));
4770     return(0);
4771 }
4772 EOCP
4773         set try
4774         if eval $compile_ok; then
4775                 longlongsize=`$run ./try`
4776                 echo "Your long longs are $longlongsize bytes long."
4777         else
4778                 dflt='8'
4779                 echo " "
4780                 echo "(I can't seem to compile the test program.  Guessing...)"
4781                 rp="What is the size of a long long (in bytes)?"
4782                 . ./myread
4783                 longlongsize="$ans"
4784         fi
4785         if $test "X$longsize" = "X$longlongsize"; then
4786                 echo "(That isn't any different from an ordinary long.)"
4787         fi      
4788         ;;
4789 esac
4790 $rm -f try.* try
4791
4792 : determine filename position in cpp output
4793 echo " "
4794 echo "Computing filename position in cpp output for #include directives..." >&4
4795 echo '#include <stdio.h>' > foo.c
4796 $cat >fieldn <<EOF
4797 $startsh
4798 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4799 $grep '^[       ]*#.*stdio\.h' | \
4800 while read cline; do
4801         pos=1
4802         set \$cline
4803         while $test \$# -gt 0; do
4804                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4805                         echo "\$pos"
4806                         exit 0
4807                 fi
4808                 shift
4809                 pos=\`expr \$pos + 1\`
4810         done
4811 done
4812 EOF
4813 chmod +x fieldn
4814 fieldn=`./fieldn`
4815 $rm -f foo.c fieldn
4816 case $fieldn in
4817 '') pos='???';;
4818 1) pos=first;;
4819 2) pos=second;;
4820 3) pos=third;;
4821 *) pos="${fieldn}th";;
4822 esac
4823 echo "Your cpp writes the filename in the $pos field of the line."
4824
4825 : locate header file
4826 $cat >findhdr <<EOF
4827 $startsh
4828 wanted=\$1
4829 name=''
4830 for usrincdir in $usrinc
4831 do
4832         if test -f \$usrincdir/\$wanted; then
4833                 echo "\$usrincdir/\$wanted"
4834                 exit 0
4835         fi
4836 done
4837 awkprg='{ print \$$fieldn }'
4838 echo "#include <\$wanted>" > foo\$\$.c
4839 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4840 $grep "^[       ]*#.*\$wanted" | \
4841 while read cline; do
4842         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4843         case "\$name" in
4844         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4845         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4846         *) exit 2;;
4847         esac;
4848 done;
4849 #
4850 # status = 0: grep returned 0 lines, case statement not executed
4851 # status = 1: headerfile found
4852 # status = 2: while loop executed, no headerfile found
4853 #
4854 status=\$?
4855 $rm -f foo\$\$.c;
4856 if test \$status -eq 1; then
4857         exit 0;
4858 fi
4859 exit 1
4860 EOF
4861 chmod +x findhdr
4862
4863 : define an alternate in-header-list? function
4864 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4865 cont=true; xxf="echo \"<\$1> found.\" >&4";
4866 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4867 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4868 esac;
4869 case $# in 4) instead=instead;; *) instead="at last";; esac;
4870 while $test "$cont"; do
4871         xxx=`./findhdr $1`
4872         var=$2; eval "was=\$$2";
4873         if $test "$xxx" && $test -r "$xxx";
4874         then eval $xxf;
4875         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4876                 cont="";
4877         else eval $xxnf;
4878         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4879         set $yyy; shift; shift; yyy=$@;
4880         case $# in 0) cont="";;
4881         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4882                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4883         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4884                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4885         esac;
4886 done;
4887 while $test "$yyy";
4888 do set $yyy; var=$2; eval "was=\$$2";
4889         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4890         set $yyy; shift; shift; yyy=$@;
4891 done'
4892
4893 : see if inttypes.h is available
4894 : we want a real compile instead of Inhdr because some systems
4895 : have an inttypes.h which includes non-existent headers
4896 echo " "
4897 $cat >try.c <<EOCP
4898 #include <inttypes.h>
4899 int main() {
4900         static int32_t foo32 = 0x12345678;
4901 }
4902 EOCP
4903 set try
4904 if eval $compile; then
4905         echo "<inttypes.h> found." >&4
4906         val="$define"
4907 else
4908         echo "<inttypes.h> NOT found." >&4
4909         val="$undef"
4910 fi
4911 $rm -f try.c try
4912 set i_inttypes
4913 eval $setvar
4914
4915 : check for int64_t
4916 echo " "
4917 echo "Checking to see if you have int64_t..." >&4
4918 $cat >try.c <<EOCP
4919 #include <sys/types.h>
4920 #$i_inttypes I_INTTYPES
4921 #ifdef I_INTTYPES
4922 #include <inttypes.h>
4923 #endif
4924 int main() { int64_t x = 7; }
4925 EOCP
4926 set try
4927 if eval $compile; then
4928         val="$define"
4929         echo "You have int64_t."
4930 else
4931         val="$undef"
4932         echo "You do not have int64_t."
4933 fi
4934 $rm -f try try.*
4935 set d_int64_t
4936 eval $setvar
4937
4938
4939 echo " "
4940 echo "Checking which 64-bit integer type we could use..." >&4
4941
4942 case "$intsize" in
4943 8) val=int
4944    set quadtype
4945    eval $setvar
4946    val='"unsigned int"'
4947    set uquadtype
4948    eval $setvar
4949    quadkind=1
4950    ;;
4951 *) case "$longsize" in
4952    8) val=long
4953       set quadtype
4954       eval $setvar
4955       val='"unsigned long"'
4956       set uquadtype
4957       eval $setvar
4958       quadkind=2
4959       ;;
4960    *) case "$d_longlong:$longlongsize" in
4961       define:8)
4962         val='"long long"'
4963         set quadtype
4964         eval $setvar
4965         val='"unsigned long long"'
4966         set uquadtype
4967         eval $setvar
4968         quadkind=3
4969         ;;
4970       *) case "$d_int64_t" in
4971          define)
4972            val=int64_t
4973            set quadtype
4974            eval $setvar
4975            val=uint64_t
4976            set uquadtype
4977            eval $setvar
4978            quadkind=4
4979            ;;
4980          esac
4981          ;;
4982       esac
4983       ;;
4984    esac
4985    ;;
4986 esac
4987
4988 case "$quadtype" in
4989 '')     echo "Alas, no 64-bit integer types in sight." >&4
4990         d_quad="$undef"
4991         ;;
4992 *)      echo "We could use '$quadtype' for 64-bit integers." >&4
4993         d_quad="$define"
4994         ;;
4995 esac
4996
4997
4998 case "$uselonglong" in
4999 "$define"|true|[yY]*)
5000         cat <<EOM >&4
5001
5002 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
5003 EOM
5004         use64bitint="$define"
5005         ;;
5006 esac                          
5007 case "$use64bits" in
5008 "$define"|true|[yY]*)
5009         cat <<EOM >&4
5010
5011 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
5012 EOM
5013         use64bitint="$define"
5014         ;;
5015 esac                          
5016 case "$use64bitints" in
5017 "$define"|true|[yY]*)
5018         cat <<EOM >&4
5019
5020 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
5021 EOM
5022         use64bitint="$define"
5023         ;;
5024 esac                          
5025 case "$use64bitsint" in
5026 "$define"|true|[yY]*)
5027         cat <<EOM >&4
5028
5029 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
5030 EOM
5031         use64bitint="$define"
5032         ;;
5033 esac                          
5034 case "$uselonglongs" in
5035 "$define"|true|[yY]*)
5036         cat <<EOM >&4
5037
5038 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
5039 EOM
5040         use64bitint="$define"
5041         ;;
5042 esac                          
5043 case "$use64bitsall" in
5044 "$define"|true|[yY]*)
5045         cat <<EOM >&4
5046
5047 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
5048 EOM
5049         use64bitall="$define"
5050         ;;
5051 esac                          
5052
5053 case "$ccflags" in
5054 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
5055 esac
5056 case "$use64bitall" in
5057 "$define"|true|[yY]*) use64bitint="$define" ;;
5058 esac
5059
5060 case "$longsize" in
5061 8) cat <<EOM
5062
5063 You have natively 64-bit long integers.
5064 EOM
5065    val="$define"
5066    ;;
5067 *) case "$use64bitint" in
5068    "$define"|true|[yY]*) dflt='y';;
5069    *) dflt='n';;
5070    esac
5071    case "$d_quad" in
5072    "$define") ;;
5073    *) dflt='n' ;;
5074    esac
5075    cat <<EOM
5076
5077 Perl can be built to take advantage of 64-bit integer types
5078 on some systems.  To do so, Configure can be run with -Duse64bitint.
5079 Choosing this option will most probably introduce binary incompatibilities.
5080
5081 If this doesn't make any sense to you, just accept the default '$dflt'.
5082 (The default has been chosen based on your configuration.)
5083 EOM
5084    rp='Try to use 64-bit integers, if available?'
5085    . ./myread
5086    case "$ans" in
5087    [yY]*) val="$define" ;;
5088    *)     val="$undef"  ;;
5089    esac
5090    ;;
5091 esac
5092 set use64bitint
5093 eval $setvar
5094
5095 case "$use64bitall" in
5096 "$define"|true|[yY]*) dflt='y' ;;
5097 *) case "$longsize" in
5098    8) dflt='y' ;;
5099    *) dflt='n' ;;
5100    esac
5101    ;;
5102 esac    
5103 cat <<EOM
5104
5105 You may also choose to try maximal 64-bitness.  It means using as much
5106 64-bitness as possible on the platform.  This in turn means even more
5107 binary incompatibilities.  On the other hand, your platform may not
5108 have any more 64-bitness available than what you already have chosen.
5109
5110 If this doesn't make any sense to you, just accept the default '$dflt'.
5111 (The default has been chosen based on your configuration.)
5112 EOM
5113 rp='Try to use maximal 64-bit support, if available?'
5114 . ./myread
5115 case "$ans" in
5116 [yY]*) val="$define" ;;
5117 *)     val="$undef"  ;;
5118 esac
5119 set use64bitall
5120 eval $setvar
5121 case "$use64bitall" in
5122 "$define")
5123         case "$use64bitint" in
5124         "$undef")
5125                 cat <<EOM
5126
5127 Since you have chosen a maximally 64-bit build, I'm also turning on
5128 the use of 64-bit integers.
5129 EOM
5130                 use64bitint="$define" ;;
5131         esac
5132         ;;
5133 esac
5134
5135 case "$use64bitall" in
5136 "$define"|true|[yY]*)
5137         case "$ptrsize" in
5138         4)      cat <<EOM >&4
5139
5140 *** You have chosen a maximally 64-bit build, but your pointers
5141 *** are only 4 bytes wide, disabling maximal 64-bitness.
5142
5143 EOM
5144                 use64bitall="$undef"
5145                 case "$use64bitint" in
5146                 "$define"|true|[yY]*) ;;
5147                 *)      cat <<EOM >&4
5148
5149 *** Downgrading from maximal 64-bitness to using 64-bit integers.
5150
5151 EOM
5152                         use64bitint="$define"
5153                         ;;
5154                 esac
5155                 ;;
5156         esac
5157         ;;
5158 esac
5159
5160 case "$use64bitint" in
5161 "$define"|true|[yY]*)
5162 : Look for a hint-file generated 'call-back-unit'.  If the
5163 : user has specified that a 64-bit perl is to be built,
5164 : we may need to set or change some other defaults.
5165         if $test -f use64bitint.cbu; then
5166                 echo "Your platform has some specific hints for 64-bit integers, using them..."
5167                 . ./use64bitint.cbu
5168         fi
5169         case "$longsize" in
5170         4) case "$archname64" in
5171            '') archname64=64int ;;
5172            esac
5173            ;;
5174         esac
5175         ;;
5176 esac
5177
5178 case "$use64bitall" in
5179 "$define"|true|[yY]*)
5180 : Look for a hint-file generated 'call-back-unit'.  If the
5181 : user has specified that a maximally 64-bit perl is to be built,
5182 : we may need to set or change some other defaults.
5183         if $test -f use64bitall.cbu; then
5184                 echo "Your platform has some specific hints for 64-bit builds, using them..."
5185                 . ./use64bitall.cbu
5186         fi
5187         case "$longsize" in
5188         4) case "$archname64" in
5189            ''|64int) archname64=64all ;;
5190            esac
5191            ;;
5192         esac
5193         ;;
5194 esac
5195
5196 echo " "
5197 echo "Checking for GNU C Library..." >&4
5198 cat >try.c <<EOM
5199 #include <stdio.h>
5200 int main()
5201 {
5202 #ifdef __GLIBC__
5203     exit(0);
5204 #else
5205     exit(1);
5206 #endif
5207 }
5208 EOM
5209 set try
5210 if eval $compile_ok && $run ./try; then
5211         val="$define"
5212         echo "You are using the GNU C Library"
5213 else
5214         val="$undef"
5215         echo "You are not using the GNU C Library"
5216 fi
5217 $rm -f try try.*
5218 set d_gnulibc
5219 eval $setvar
5220
5221 : see if nm is to be used to determine whether a symbol is defined or not
5222 case "$usenm" in
5223 '')
5224         dflt=''
5225         case "$d_gnulibc" in
5226         "$define")
5227                 echo " "
5228                 echo "nm probably won't work on the GNU C Library." >&4
5229                 dflt=n
5230                 ;;
5231         esac
5232         case "$dflt" in
5233         '') 
5234                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5235                         echo " "
5236                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5237                         echo "'nm' won't be sufficient on this sytem." >&4
5238                         dflt=n
5239                 fi
5240                 ;;
5241         esac
5242         case "$dflt" in
5243         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5244                 if $test $dflt -gt 20; then
5245                         dflt=y
5246                 else
5247                         dflt=n
5248                 fi
5249                 ;;
5250         esac
5251         ;;
5252 *)
5253         case "$usenm" in
5254         true|$define) dflt=y;;
5255         *) dflt=n;;
5256         esac
5257         ;;
5258 esac
5259 $cat <<EOM
5260
5261 I can use $nm to extract the symbols from your C libraries. This
5262 is a time consuming task which may generate huge output on the disk (up
5263 to 3 megabytes) but that should make the symbols extraction faster. The
5264 alternative is to skip the 'nm' extraction part and to compile a small
5265 test program instead to determine whether each symbol is present. If
5266 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5267 this may be the best solution.
5268
5269 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5270
5271 EOM
5272 rp="Shall I use $nm to extract C symbols from the libraries?"
5273 . ./myread
5274 case "$ans" in
5275 [Nn]*) usenm=false;;
5276 *) usenm=true;;
5277 esac
5278
5279 runnm=$usenm
5280 case "$reuseval" in
5281 true) runnm=false;;
5282 esac
5283
5284 : nm options which may be necessary
5285 case "$nm_opt" in
5286 '') if $test -f /mach_boot; then
5287                 nm_opt=''       # Mach
5288         elif $test -d /usr/ccs/lib; then
5289                 nm_opt='-p'     # Solaris (and SunOS?)
5290         elif $test -f /dgux; then
5291                 nm_opt='-p'     # DG-UX
5292         elif $test -f /lib64/rld; then
5293                 nm_opt='-p'     # 64-bit Irix
5294         else
5295                 nm_opt=''
5296         fi;;
5297 esac
5298
5299 : nm options which may be necessary for shared libraries but illegal
5300 : for archive libraries.  Thank you, Linux.
5301 case "$nm_so_opt" in
5302 '')     case "$myuname" in
5303         *linux*)
5304                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5305                         nm_so_opt='--dynamic'
5306                 fi
5307                 ;;
5308         esac
5309         ;;
5310 esac
5311
5312 case "$runnm" in
5313 true)
5314 : get list of predefined functions in a handy place
5315 echo " "
5316 case "$libc" in
5317 '') libc=unknown
5318         case "$libs" in
5319         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5320         esac
5321         ;;
5322 esac
5323 case "$libs" in
5324 '') ;;
5325 *)  for thislib in $libs; do
5326         case "$thislib" in
5327         -lc|-lc_s)
5328                 : Handle C library specially below.
5329                 ;;
5330         -l*)
5331                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5332                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5333                         :
5334                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5335                         :
5336                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5337                         :
5338                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5339                         :
5340                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5341                         :
5342                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5343                         :
5344                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5345                         :
5346                 else
5347                         try=''
5348                 fi
5349                 libnames="$libnames $try"
5350                 ;;
5351         *) libnames="$libnames $thislib" ;;
5352         esac
5353         done
5354         ;;
5355 esac
5356 xxx=normal
5357 case "$libc" in
5358 unknown)
5359         set /lib/libc.$so
5360         for xxx in $libpth; do
5361                 $test -r $1 || set $xxx/libc.$so
5362                 : The messy sed command sorts on library version numbers.
5363                 $test -r $1 || \
5364                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5365                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5366                                 h
5367                                 s/[0-9][0-9]*/0000&/g
5368                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5369                                 G
5370                                 s/\n/ /' | \
5371                          $sort | $sed -e 's/^.* //'`
5372                 eval set \$$#
5373         done
5374         $test -r $1 || set /usr/ccs/lib/libc.$so
5375         $test -r $1 || set /lib/libsys_s$_a
5376         ;;
5377 *)
5378         set blurfl
5379         ;;
5380 esac
5381 if $test -r "$1"; then
5382         echo "Your (shared) C library seems to be in $1."
5383         libc="$1"
5384 elif $test -r /lib/libc && $test -r /lib/clib; then
5385         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5386         xxx=apollo
5387         libc='/lib/clib /lib/libc'
5388         if $test -r /lib/syslib; then
5389                 echo "(Your math library is in /lib/syslib.)"
5390                 libc="$libc /lib/syslib"
5391         fi
5392 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5393         echo "Your C library seems to be in $libc, as you said before."
5394 elif $test -r $incpath/usr/lib/libc$_a; then
5395         libc=$incpath/usr/lib/libc$_a;
5396         echo "Your C library seems to be in $libc.  That's fine."
5397 elif $test -r /lib/libc$_a; then
5398         libc=/lib/libc$_a;
5399         echo "Your C library seems to be in $libc.  You're normal."
5400 else
5401         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5402                 :
5403         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5404                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5405         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5406                 :
5407         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5408                 :
5409         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5410                 :
5411         else
5412                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5413         fi
5414         if $test -r "$tans"; then
5415                 echo "Your C library seems to be in $tans, of all places."
5416                 libc=$tans
5417         else
5418                 libc='blurfl'
5419         fi
5420 fi
5421 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5422         dflt="$libc"
5423         cat <<EOM
5424
5425 If the guess above is wrong (which it might be if you're using a strange
5426 compiler, or your machine supports multiple models), you can override it here.
5427
5428 EOM
5429 else
5430         dflt=''
5431         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
5432         cat >&4 <<EOM
5433 I can't seem to find your C library.  I've looked in the following places:
5434
5435 EOM
5436         $sed 's/^/      /' libpath
5437         cat <<EOM
5438
5439 None of these seems to contain your C library. I need to get its name...
5440
5441 EOM
5442 fi
5443 fn=f
5444 rp='Where is your C library?'
5445 . ./getfile
5446 libc="$ans"
5447
5448 echo " "
5449 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
5450 set X `cat libnames`
5451 shift
5452 xxx=files
5453 case $# in 1) xxx=file; esac
5454 echo "Extracting names from the following $xxx for later perusal:" >&4
5455 echo " "
5456 $sed 's/^/      /' libnames >&4
5457 echo " "
5458 $echo $n "This may take a while...$c" >&4
5459
5460 for file in $*; do
5461         case $file in
5462         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5463         *) $nm $nm_opt $file 2>/dev/null;;
5464         esac
5465 done >libc.tmp
5466
5467 $echo $n ".$c"
5468 $grep fprintf libc.tmp > libc.ptf
5469 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5470 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5471 xxx='[ADTSIW]'
5472 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5473         eval $xscan;\
5474         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5475                 eval $xrun
5476 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5477         eval $xscan;\
5478         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5479                 eval $xrun
5480 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5481         eval $xscan;\
5482         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5483                 eval $xrun
5484 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5485         eval $xscan;\
5486         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5487                 eval $xrun
5488 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5489         eval $xscan;\
5490         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5491                 eval $xrun
5492 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5493         eval $xscan;\
5494         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5495                 eval $xrun
5496 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5497                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5498         eval $xscan;\
5499         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5500                 eval $xrun
5501 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5502         eval $xscan;\
5503         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5504                 eval $xrun
5505 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5506         eval $xscan;\
5507         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5508                 eval $xrun
5509 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5510         eval $xscan;\
5511         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5512                 eval $xrun
5513 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5514         eval $xscan;\
5515         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5516                 eval $xrun
5517 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5518         eval $xscan;\
5519         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5520                 eval $xrun
5521 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5522         eval $xscan;\
5523         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5524                 eval $xrun
5525 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5526         eval $xscan;\
5527         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5528                 eval $xrun
5529 else
5530         $nm -p $* 2>/dev/null >libc.tmp
5531         $grep fprintf libc.tmp > libc.ptf
5532         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5533                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5534         then
5535                 nm_opt='-p'
5536                 eval $xrun
5537         else
5538                 echo " "
5539                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5540                 com=''
5541                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5542                         for thisname in $libnames $libc; do
5543                                 $ar t $thisname >>libc.tmp
5544                         done
5545                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5546                         echo "Ok." >&4
5547                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5548                         # Repeat libc to extract forwarders to DLL entries too
5549                         for thisname in $libnames $libc; do
5550                                 $ar tv $thisname >>libc.tmp
5551                                 # Revision 50 of EMX has bug in $ar.
5552                                 # it will not extract forwarders to DLL entries
5553                                 # Use emximp which will extract exactly them.
5554                                 emximp -o tmp.imp $thisname \
5555                                     2>/dev/null && \
5556                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5557                                     < tmp.imp >>libc.tmp
5558                                 $rm tmp.imp
5559                         done
5560                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5561                         echo "Ok." >&4
5562                 else
5563                         echo "$ar didn't seem to work right." >&4
5564                         echo "Maybe this is a Cray...trying bld instead..." >&4
5565                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5566                         then
5567                                 for thisname in $libnames; do
5568                                         bld t $libnames | \
5569                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5570                                         $ar t $thisname >>libc.tmp
5571                                 done
5572                                 echo "Ok." >&4
5573                         else
5574                                 echo "That didn't work either.  Giving up." >&4
5575                                 exit 1
5576                         fi
5577                 fi
5578         fi
5579 fi
5580 nm_extract="$com"
5581 if $test -f /lib/syscalls.exp; then
5582         echo " "
5583         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5584         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*[        ]*$/\1/p' /lib/syscalls.exp >>libc.list
5585 fi
5586 ;;
5587 esac
5588 $rm -f libnames libpath
5589
5590 : is a C symbol defined?
5591 csym='tlook=$1;
5592 case "$3" in
5593 -v) tf=libc.tmp; tc=""; tdc="";;
5594 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5595 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5596 esac;
5597 tx=yes;
5598 case "$reuseval-$4" in
5599 true-) ;;
5600 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5601 esac;
5602 case "$tx" in
5603 yes)
5604         case "$runnm" in
5605         true)
5606                 if $contains $tlook $tf >/dev/null 2>&1;
5607                 then tval=true;
5608                 else tval=false;
5609                 fi;;
5610         *)
5611                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5612                 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
5613                 then tval=true;
5614                 else tval=false;
5615                 fi;
5616                 $rm -f t t.c;;
5617         esac;;
5618 *)
5619         case "$tval" in
5620         $define) tval=true;;
5621         *) tval=false;;
5622         esac;;
5623 esac;
5624 eval "$2=$tval"'
5625
5626 : define an is-in-libc? function
5627 inlibc='echo " "; td=$define; tu=$undef;
5628 sym=$1; var=$2; eval "was=\$$2";
5629 tx=yes;
5630 case "$reuseval$was" in
5631 true) ;;
5632 true*) tx=no;;
5633 esac;
5634 case "$tx" in
5635 yes)
5636         set $sym tres -f;
5637         eval $csym;
5638         case "$tres" in
5639         true)
5640                 echo "$sym() found." >&4;
5641                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5642         *)
5643                 echo "$sym() NOT found." >&4;
5644                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5645         esac;;
5646 *)
5647         case "$was" in
5648         $define) echo "$sym() found." >&4;;
5649         *) echo "$sym() NOT found." >&4;;
5650         esac;;
5651 esac'
5652
5653 : see if sqrtl exists
5654 set sqrtl d_sqrtl
5655 eval $inlibc
5656
5657 case "$ccflags" in
5658 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
5659 esac
5660
5661 case "$uselongdouble" in
5662 $define|true|[yY]*)     dflt='y';;
5663 *) dflt='n';;
5664 esac
5665 cat <<EOM
5666
5667 Perl can be built to take advantage of long doubles which
5668 (if available) may give more accuracy and range for floating point numbers.
5669
5670 If this doesn't make any sense to you, just accept the default '$dflt'.
5671 EOM
5672 rp='Try to use long doubles if available?'
5673 . ./myread
5674 case "$ans" in
5675 y|Y)    val="$define"   ;;
5676 *)      val="$undef"    ;;
5677 esac
5678 set uselongdouble
5679 eval $setvar
5680
5681 case "$uselongdouble" in
5682 true|[yY]*) uselongdouble="$define" ;;
5683 esac
5684
5685 case "$uselongdouble" in
5686 $define)
5687 : Look for a hint-file generated 'call-back-unit'.  If the
5688 : user has specified that long doubles should be used,
5689 : we may need to set or change some other defaults.
5690         if $test -f uselongdouble.cbu; then
5691                 echo "Your platform has some specific hints for long doubles, using them..."
5692                 . ./uselongdouble.cbu
5693         else
5694                 $cat <<EOM
5695 (Your platform doesn't have any specific hints for long doubles.)
5696 EOM
5697         fi
5698         ;;
5699 esac
5700
5701 case "$uselongdouble:$d_sqrtl" in
5702 $define:$undef)
5703                 $cat <<EOM >&4
5704
5705 *** You requested the use of long doubles but you do not seem to have
5706 *** the mathematic functions for long doubles.  I'm disabling the use
5707 *** of long doubles.
5708
5709 EOM
5710         uselongdouble=$undef
5711         ;;
5712 esac
5713
5714 : check for length of double
5715 echo " "
5716 case "$doublesize" in
5717 '')
5718         echo "Checking to see how big your double precision numbers are..." >&4
5719         $cat >try.c <<'EOCP'
5720 #include <stdio.h>
5721 int main()
5722 {
5723     printf("%d\n", (int)sizeof(double));
5724     exit(0);
5725 }
5726 EOCP
5727         set try
5728         if eval $compile_ok; then
5729                 doublesize=`$run ./try`
5730                 echo "Your double is $doublesize bytes long."
5731         else
5732                 dflt='8'
5733                 echo "(I can't seem to compile the test program.  Guessing...)"
5734                 rp="What is the size of a double precision number (in bytes)?"
5735                 . ./myread
5736                 doublesize="$ans"
5737         fi
5738         ;;
5739 esac
5740 $rm -f try.c try
5741
5742 : check for long doubles
5743 echo " "
5744 echo "Checking to see if you have long double..." >&4
5745 echo 'int main() { long double x = 7.0; }' > try.c
5746 set try
5747 if eval $compile; then
5748         val="$define"
5749         echo "You have long double."
5750 else
5751         val="$undef"
5752         echo "You do not have long double."
5753 fi
5754 $rm try.*
5755 set d_longdbl
5756 eval $setvar
5757
5758 : check for length of long double
5759 case "${d_longdbl}${longdblsize}" in
5760 $define)
5761         echo " "
5762         echo "Checking to see how big your long doubles are..." >&4
5763         $cat >try.c <<'EOCP'
5764 #include <stdio.h>
5765 int main()
5766 {
5767         printf("%d\n", sizeof(long double));
5768 }
5769 EOCP
5770         set try
5771         set try
5772         if eval $compile; then
5773                 longdblsize=`$run ./try`
5774                 echo "Your long doubles are $longdblsize bytes long."
5775         else
5776                 dflt='8'
5777                 echo " "
5778                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
5779                 rp="What is the size of a long double (in bytes)?"
5780                 . ./myread
5781                 longdblsize="$ans"
5782         fi
5783         if $test "X$doublesize" = "X$longdblsize"; then
5784                 echo "(That isn't any different from an ordinary double.)"
5785         fi      
5786         ;;
5787 esac
5788 $rm -f try.* try
5789
5790 case "$useperlio" in
5791 $define|true|[yY]*|'')  dflt='y';;
5792 *) dflt='n';;
5793 esac
5794 cat <<EOM
5795
5796 Previous version of $package used the standard IO mechanisms as
5797 defined in <stdio.h>.  Versions 5.003_02 and later of $package allow
5798 alternate IO mechanisms via the PerlIO abstraction layer, but the
5799 stdio mechanism is still available if needed.  The abstraction layer
5800 can use AT&T's sfio (if you already have sfio installed) or regular stdio.
5801 Using PerlIO with sfio may cause problems with some extension modules.
5802
5803 If this doesn't make any sense to you, just accept the default '$dflt'.
5804 EOM
5805 rp='Use the PerlIO abstraction layer?'
5806 . ./myread
5807 case "$ans" in
5808 y|Y) 
5809         val="$define"
5810         ;;
5811 *)      
5812         echo "Ok, doing things the stdio way."
5813         val="$undef"
5814         ;;
5815 esac
5816 set useperlio
5817 eval $setvar 
5818
5819 case "$usesocks" in
5820 $define|true|[yY]*)
5821         case "$useperlio" in
5822         $define|true|[yY]*) ;;
5823         *)      cat >&4 <<EOM
5824
5825 You are using the SOCKS proxy protocol library which means that you
5826 should also use the PerlIO layer.  You may be headed for trouble.
5827
5828 EOM
5829                 ;;
5830         esac
5831         ;;
5832 esac
5833
5834         
5835 : determine the architecture name
5836 echo " "
5837 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
5838         tarch=`arch`"-$osname"
5839 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
5840         if uname -m > tmparch 2>&1 ; then
5841                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
5842                         -e 's/$/'"-$osname/" tmparch`
5843         else
5844                 tarch="$osname"
5845         fi
5846         $rm -f tmparch
5847 else
5848         tarch="$osname"
5849 fi
5850 case "$myarchname" in
5851 ''|"$tarch") ;;
5852 *)
5853         echo "(Your architecture name used to be $myarchname.)"
5854         archname=''
5855         ;;
5856 esac
5857 case "$targetarch" in
5858 '') ;;
5859 *)  archname=`echo $targetarch|sed 's,^[^-]*-,,'` ;;
5860 esac
5861 myarchname="$tarch"
5862 case "$archname" in
5863 '') dflt="$tarch";;
5864 *) dflt="$archname";;
5865 esac
5866 rp='What is your architecture name'
5867 . ./myread
5868 archname="$ans"
5869 case "$usethreads" in
5870 $define)
5871         echo "Threads selected." >&4
5872         case "$archname" in
5873         *-thread*) echo "...and architecture name already has -thread." >&4
5874                 ;;
5875         *)      archname="$archname-thread"
5876                 echo "...setting architecture name to $archname." >&4
5877                 ;;
5878         esac
5879         ;;
5880 esac
5881 case "$usemultiplicity" in
5882 $define)
5883         echo "Multiplicity selected." >&4
5884         case "$archname" in
5885         *-multi*) echo "...and architecture name already has -multi." >&4
5886                 ;;
5887         *)      archname="$archname-multi"
5888                 echo "...setting architecture name to $archname." >&4
5889                 ;;
5890         esac
5891         ;;
5892 esac
5893 case "$use64bitint$use64bitall" in
5894 *"$define"*)
5895         case "$archname64" in
5896         '')
5897                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
5898                 ;;
5899         *)
5900                 case "$use64bitint" in
5901                 "$define") echo "64 bit integers selected." >&4 ;;
5902                 esac
5903                 case "$use64bitall" in
5904                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
5905                 esac
5906                 case "$archname" in
5907                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
5908                         ;;
5909                 *)      archname="$archname-$archname64"
5910                         echo "...setting architecture name to $archname." >&4
5911                         ;;
5912                 esac
5913                 ;;
5914         esac
5915 esac
5916 case "$uselongdouble" in
5917 $define)
5918         echo "Long doubles selected." >&4
5919         case "$longdblsize" in
5920         $doublesize)
5921                 echo "...but long doubles are equal to doubles, not changing architecture name." >&4
5922                 ;;
5923         *)
5924                 case "$archname" in
5925                 *-ld*) echo "...and architecture name already has -ld." >&4
5926                         ;;
5927                 *)      archname="$archname-ld"
5928                         echo "...setting architecture name to $archname." >&4
5929                         ;;
5930                 esac
5931                 ;;
5932         esac
5933         ;;
5934 esac
5935 case "$useperlio" in
5936 $define)
5937         echo "Perlio selected." >&4
5938         ;;
5939 *)
5940         echo "Perlio not selected, using stdio." >&4
5941         case "$archname" in
5942         *-stdio*) echo "...and architecture name already has -stdio." >&4
5943                 ;;
5944         *)      archname="$archname-stdio"
5945                 echo "...setting architecture name to $archname." >&4
5946                 ;;
5947         esac
5948         ;;
5949 esac
5950
5951 : determine root of directory hierarchy where package will be installed.
5952 case "$prefix" in
5953 '')
5954         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
5955         ;;
5956 *)
5957         dflt="$prefix"
5958         ;;
5959 esac
5960 $cat <<EOM
5961
5962 By default, $package will be installed in $dflt/bin, manual pages
5963 under $dflt/man, etc..., i.e. with $dflt as prefix for all
5964 installation directories. Typically this is something like /usr/local.
5965 If you wish to have binaries under /usr/bin but other parts of the
5966 installation under /usr/local, that's ok: you will be prompted
5967 separately for each of the installation directories, the prefix being
5968 only used to set the defaults.
5969
5970 EOM
5971 fn=d~
5972 rp='Installation prefix to use?'
5973 . ./getfile
5974 oldprefix=''
5975 case "$prefix" in
5976 '') ;;
5977 *)
5978         case "$ans" in
5979         "$prefix") ;;
5980         *) oldprefix="$prefix";;
5981         esac
5982         ;;
5983 esac
5984 prefix="$ans"
5985 prefixexp="$ansexp"
5986
5987 case "$afsroot" in
5988 '')     afsroot=/afs ;;
5989 *)      afsroot=$afsroot ;;
5990 esac
5991
5992 : is AFS running?
5993 echo " "
5994 case "$afs" in
5995 $define|true)   afs=true ;;
5996 $undef|false)   afs=false ;;
5997 *)      if test -d $afsroot; then
5998                 afs=true
5999         else
6000                 afs=false
6001         fi
6002         ;;
6003 esac
6004 if $afs; then
6005         echo "AFS may be running... I'll be extra cautious then..." >&4
6006 else
6007         echo "AFS does not seem to be running..." >&4
6008 fi
6009
6010 : determine installation prefix for where package is to be installed.
6011 if $afs; then 
6012 $cat <<EOM
6013
6014 Since you are running AFS, I need to distinguish the directory in which
6015 files will reside from the directory in which they are installed (and from
6016 which they are presumably copied to the former directory by occult means).
6017
6018 EOM
6019         case "$installprefix" in
6020         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
6021         *) dflt="$installprefix";;
6022         esac
6023 else
6024 $cat <<EOM
6025
6026 In some special cases, particularly when building $package for distribution,
6027 it is convenient to distinguish between the directory in which files should 
6028 be installed from the directory ($prefix) in which they 
6029 will eventually reside.  For most users, these two directories are the same.
6030
6031 EOM
6032         case "$installprefix" in
6033         '') dflt=$prefix ;;
6034         *) dflt=$installprefix;;
6035         esac
6036 fi
6037 fn=d~
6038 rp='What installation prefix should I use for installing files?'
6039 . ./getfile
6040 installprefix="$ans"
6041 installprefixexp="$ansexp"
6042
6043 : set the prefixit variable, to compute a suitable default value
6044 prefixit='case "$3" in
6045 ""|none)
6046         case "$oldprefix" in
6047         "") eval "$1=\"\$$2\"";;
6048         *)
6049                 case "$3" in
6050                 "") eval "$1=";;
6051                 none)
6052                         eval "tp=\"\$$2\"";
6053                         case "$tp" in
6054                         ""|" ") eval "$1=\"\$$2\"";;
6055                         *) eval "$1=";;
6056                         esac;;
6057                 esac;;
6058         esac;;
6059 *)
6060         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
6061         case "$tp" in
6062         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
6063         /*-$oldprefix/*|\~*-$oldprefix/*)
6064                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
6065         *) eval "$1=\"\$$2\"";;
6066         esac;;
6067 esac'
6068
6069 : get the patchlevel
6070 echo " "
6071 echo "Getting the current patchlevel..." >&4
6072 if $test -r $rsrc/patchlevel.h;then
6073         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
6074         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
6075         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6076         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
6077         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
6078         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6079        perl_patchlevel=`grep ',"DEVEL[0-9][0-9]*"' $rsrc/patchlevel.h|sed 's/[^0-9]//g'`
6080 else
6081         revision=0
6082         patchlevel=0
6083         subversion=0
6084         api_revision=0
6085         api_version=0
6086         api_subversion=0
6087         perl_patchlevel=0
6088         $echo "(You do not have patchlevel.h.  Eek.)"
6089 fi
6090 if $test -r $rsrc/.patch ; then  
6091         if $test "`cat $rsrc/.patch`" -gt "$perl_patchlevel" ; then
6092                 perl_patchlevel=`cat $rsrc/.patch`
6093         fi
6094 fi
6095 : Define a handy string here to avoid duplication in myconfig.SH and configpm.
6096 version_patchlevel_string="version $patchlevel subversion $subversion"
6097 case "$perl_patchlevel" in
6098 0|'') ;;
6099 *) version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel" ;;
6100 esac
6101
6102 $echo "(You have $package $version_patchlevel_string.)"
6103
6104 case "$osname" in
6105 dos|vms)
6106         : XXX Should be a Configure test for double-dots in filenames.
6107         version=`echo $revision $patchlevel $subversion | \
6108                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6109         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6110                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6111         ;;
6112 *)
6113         version=`echo $revision $patchlevel $subversion | \
6114                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6115         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6116                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6117         ;;
6118 esac
6119 : Special case the 5.005_xx maintenance series, which used 5.005
6120 : without any subversion label as a subdirectory in $sitelib
6121 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
6122         api_versionstring='5.005'
6123 fi
6124
6125 : determine installation style
6126 : For now, try to deduce it from prefix unless it is already set.
6127 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
6128 case "$installstyle" in
6129 '')     case "$prefix" in
6130                 *perl*) dflt='lib';;
6131                 *) dflt='lib/perl5' ;;
6132         esac
6133         ;;
6134 *)      dflt="$installstyle" ;;
6135 esac
6136 : Probably not worth prompting for this since we prompt for all
6137 : the directories individually, and the prompt would be too long and
6138 : confusing anyway.
6139 installstyle=$dflt
6140
6141 : determine where private library files go
6142 : Usual default is /usr/local/lib/perl5/$version.
6143 : Also allow things like /opt/perl/lib/$version, since 
6144 : /opt/perl/lib/perl5... would be redundant.
6145 : The default "style" setting is made in installstyle.U
6146 case "$installstyle" in
6147 *lib/perl5*) set dflt privlib lib/$package/$version ;;
6148 *)       set dflt privlib lib/$version ;;
6149 esac
6150 eval $prefixit
6151 $cat <<EOM
6152
6153 There are some auxiliary files for $package that need to be put into a
6154 private library directory that is accessible by everyone.
6155
6156 EOM
6157 fn=d~+
6158 rp='Pathname where the private library files will reside?'
6159 . ./getfile
6160 privlib="$ans"
6161 privlibexp="$ansexp"
6162 : Change installation prefix, if necessary.
6163 if $test X"$prefix" != X"$installprefix"; then
6164         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
6165 else
6166         installprivlib="$privlibexp"
6167 fi
6168
6169 : set the prefixup variable, to restore leading tilda escape
6170 prefixup='case "$prefixexp" in
6171 "$prefix") ;;
6172 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
6173 esac'
6174
6175 : determine where public architecture dependent libraries go
6176 set archlib archlib
6177 eval $prefixit
6178 : privlib default is /usr/local/lib/$package/$version
6179 : archlib default is /usr/local/lib/$package/$version/$archname
6180 : privlib may have an optional trailing /share.
6181 tdflt=`echo $privlib | $sed 's,/share$,,'`
6182 tdflt=$tdflt/$archname
6183 case "$archlib" in
6184 '')     dflt=$tdflt
6185         ;;
6186 *)      dflt="$archlib"
6187     ;;
6188 esac
6189 $cat <<EOM
6190
6191 $spackage contains architecture-dependent library files.  If you are
6192 sharing libraries in a heterogeneous environment, you might store
6193 these files in a separate location.  Otherwise, you can just include
6194 them with the rest of the public library files.
6195
6196 EOM
6197 fn=d+~
6198 rp='Where do you want to put the public architecture-dependent libraries?'
6199 . ./getfile
6200 archlib="$ans"
6201 archlibexp="$ansexp"
6202 if $test X"$archlib" = X"$privlib"; then
6203         d_archlib="$undef"
6204 else
6205         d_archlib="$define"
6206 fi
6207 : Change installation prefix, if necessary.
6208 if $test X"$prefix" != X"$installprefix"; then
6209         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
6210 else
6211         installarchlib="$archlibexp"
6212 fi
6213
6214
6215 : Binary compatibility with 5.005 is not possible for builds
6216 : with advanced features
6217 case "$usethreads$usemultiplicity" in
6218 *define*)
6219         bincompat5005="$undef"
6220         d_bincompat5005="$undef"
6221         ;;
6222 *)      $cat <<EOM
6223
6224 This version of Perl can be compiled for binary compatibility with 5.005.
6225 If you decide to do so, you will be able to continue using most of the
6226 extensions that were compiled for Perl 5.005.
6227
6228 EOM
6229         case "$bincompat5005$d_bincompat5005" in
6230         *"$undef"*) dflt=n ;;
6231         *) dflt=y ;;
6232         esac
6233         rp='Binary compatibility with Perl 5.005?'
6234         . ./myread
6235         case "$ans" in
6236         y*) val="$define" ;;
6237         *)  val="$undef" ;;
6238         esac
6239         set d_bincompat5005
6240         eval $setvar
6241         case "$d_bincompat5005" in
6242         "$define")
6243                 bincompat5005="$define"
6244                 ;;
6245         *)      bincompat5005="$undef"
6246                 d_bincompat5005="$undef"
6247                 ;;
6248         esac
6249         ;;
6250 esac
6251
6252
6253 : see if setuid scripts can be secure
6254 $cat <<EOM
6255
6256 Some kernels have a bug that prevents setuid #! scripts from being
6257 secure.  Some sites have disabled setuid #! scripts because of this.
6258
6259 First let's decide if your kernel supports secure setuid #! scripts.
6260 (If setuid #! scripts would be secure but have been disabled anyway,
6261 don't say that they are secure if asked.)
6262
6263 EOM
6264
6265 val="$undef"
6266 if $test -d /dev/fd; then
6267         echo "#!$ls" >reflect
6268         chmod +x,u+s reflect
6269         ./reflect >flect 2>&1
6270         if $contains "/dev/fd" flect >/dev/null; then
6271                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
6272                 val="$define"
6273         else
6274                 $cat <<EOM
6275 If you are not sure if they are secure, I can check but I'll need a
6276 username and password different from the one you are using right now.
6277 If you don't have such a username or don't want me to test, simply
6278 enter 'none'.
6279
6280 EOM
6281                 rp='Other username to test security of setuid scripts with?'
6282                 dflt='none'
6283                 . ./myread
6284                 case "$ans" in
6285                 n|none)
6286                         case "$d_suidsafe" in
6287                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
6288                                 dflt=n;;
6289                         "$undef")
6290                                 echo "Well, the $hint value is *not* secure." >&4
6291                                 dflt=n;;
6292                         *)      echo "Well, the $hint value *is* secure." >&4
6293                                 dflt=y;;
6294                         esac
6295                         ;;
6296                 *)
6297                         $rm -f reflect flect
6298                         echo "#!$ls" >reflect
6299                         chmod +x,u+s reflect
6300                         echo >flect
6301                         chmod a+w flect
6302                         echo '"su" will (probably) prompt you for '"$ans's password."
6303                         su $ans -c './reflect >flect'
6304                         if $contains "/dev/fd" flect >/dev/null; then
6305                                 echo "Okay, it looks like setuid scripts are secure." >&4
6306                                 dflt=y
6307                         else
6308                                 echo "I don't think setuid scripts are secure." >&4
6309                                 dflt=n
6310                         fi
6311                         ;;
6312                 esac
6313                 rp='Does your kernel have *secure* setuid scripts?'
6314                 . ./myread
6315                 case "$ans" in
6316                 [yY]*)  val="$define";;
6317                 *)      val="$undef";;
6318                 esac
6319         fi
6320 else
6321         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
6322         echo "(That's for file descriptors, not floppy disks.)"
6323         val="$undef"
6324 fi
6325 set d_suidsafe
6326 eval $setvar
6327
6328 $rm -f reflect flect
6329
6330 : now see if they want to do setuid emulation
6331 echo " "
6332 val="$undef"
6333 case "$d_suidsafe" in
6334 "$define")
6335         val="$undef"
6336         echo "No need to emulate SUID scripts since they are secure here." >& 4
6337         ;;
6338 *)
6339         $cat <<EOM
6340 Some systems have disabled setuid scripts, especially systems where
6341 setuid scripts cannot be secure.  On systems where setuid scripts have
6342 been disabled, the setuid/setgid bits on scripts are currently
6343 useless.  It is possible for $package to detect those bits and emulate
6344 setuid/setgid in a secure fashion.  This emulation will only work if
6345 setuid scripts have been disabled in your kernel.
6346
6347 EOM
6348         case "$d_dosuid" in
6349         "$define") dflt=y ;;
6350         *) dflt=n ;;
6351         esac
6352         rp="Do you want to do setuid/setgid emulation?"
6353         . ./myread
6354         case "$ans" in
6355         [yY]*)  val="$define";;
6356         *)      val="$undef";;
6357         esac
6358         ;;
6359 esac
6360 set d_dosuid
6361 eval $setvar
6362
6363 : see if this is a malloc.h system
6364 set malloc.h i_malloc
6365 eval $inhdr
6366
6367 : see if stdlib is available
6368 set stdlib.h i_stdlib
6369 eval $inhdr
6370
6371 : determine which malloc to compile in
6372 echo " "
6373 case "$usemymalloc" in
6374 [yY]*|true|$define)     dflt='y' ;;
6375 [nN]*|false|$undef)     dflt='n' ;;
6376 *)      case "$ptrsize" in
6377         4) dflt='y' ;;
6378         *) dflt='n' ;;
6379         esac
6380         ;;
6381 esac
6382 rp="Do you wish to attempt to use the malloc that comes with $package?"
6383 . ./myread
6384 usemymalloc="$ans"
6385 case "$ans" in
6386 y*|true)
6387         usemymalloc='y'
6388         mallocsrc='malloc.c'
6389         mallocobj="malloc$_o"
6390         d_mymalloc="$define"
6391         case "$libs" in
6392         *-lmalloc*)
6393                 : Remove malloc from list of libraries to use
6394                 echo "Removing unneeded -lmalloc from library list" >&4
6395                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
6396                 shift
6397                 libs="$*"
6398                 echo "libs = $libs" >&4
6399                 ;;
6400         esac
6401         ;;
6402 *)
6403         usemymalloc='n'
6404         mallocsrc=''
6405         mallocobj=''
6406         d_mymalloc="$undef"
6407         ;;
6408 esac
6409
6410 : compute the return types of malloc and free
6411 echo " "
6412 $cat >malloc.c <<END
6413 #$i_malloc I_MALLOC
6414 #$i_stdlib I_STDLIB
6415 #include <stdio.h>
6416 #include <sys/types.h>
6417 #ifdef I_MALLOC
6418 #include <malloc.h>
6419 #endif
6420 #ifdef I_STDLIB
6421 #include <stdlib.h>
6422 #endif
6423 #ifdef TRY_MALLOC
6424 void *malloc();
6425 #endif
6426 #ifdef TRY_FREE
6427 void free();
6428 #endif
6429 END
6430 case "$malloctype" in
6431 '')
6432         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
6433                 malloctype='void *'
6434         else
6435                 malloctype='char *'
6436         fi
6437         ;;
6438 esac
6439 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6440
6441 case "$freetype" in
6442 '')
6443         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6444                 freetype='void'
6445         else
6446                 freetype='int'
6447         fi
6448         ;;
6449 esac
6450 echo "Your system uses $freetype free(), it would seem." >&4
6451 $rm -f malloc.[co]
6452 $cat <<EOM
6453
6454 After $package is installed, you may wish to install various
6455 add-on modules and utilities.  Typically, these add-ons will
6456 be installed under $prefix with the rest
6457 of this package.  However, you may wish to install such add-ons
6458 elsewhere under a different prefix.
6459
6460 If you do not wish to put everything under a single prefix, that's
6461 ok.  You will be prompted for the individual locations; this siteprefix
6462 is only used to suggest the defaults.
6463
6464 The default should be fine for most people.
6465
6466 EOM
6467 fn=d~+
6468 rp='Installation prefix to use for add-on modules and utilities?'
6469 : XXX Here might be another good place for an installstyle setting.
6470 case "$siteprefix" in
6471 '') dflt=$prefix ;;
6472 *)  dflt=$siteprefix ;;
6473 esac
6474 . ./getfile
6475 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6476 oldsiteprefix=''
6477 case "$siteprefix" in
6478 '') ;;
6479 *)      case "$ans" in
6480         "$prefix") ;;
6481         *) oldsiteprefix="$prefix";;
6482         esac
6483         ;;
6484 esac
6485 siteprefix="$ans"
6486 siteprefixexp="$ansexp"
6487
6488 : determine where site specific libraries go.
6489 : Usual default is /usr/local/lib/perl5/site_perl/$version
6490 : The default "style" setting is made in installstyle.U
6491 : XXX No longer works with Prefixit stuff.
6492 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6493 case "$sitelib" in
6494 '') case "$installstyle" in
6495         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
6496         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
6497         esac
6498         ;;
6499 *)      dflt="$sitelib"
6500         ;;
6501 esac
6502 $cat <<EOM
6503
6504 The installation process will create a directory for
6505 site-specific extensions and modules.  Most users find it convenient
6506 to place all site-specific files in this directory rather than in the
6507 main distribution directory.
6508
6509 EOM
6510 fn=d~+
6511 rp='Pathname for the site-specific library files?'
6512 . ./getfile
6513 sitelib="$ans"
6514 sitelibexp="$ansexp"
6515 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
6516 : Change installation prefix, if necessary.
6517 if $test X"$prefix" != X"$installprefix"; then
6518         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
6519 else
6520         installsitelib="$sitelibexp"
6521 fi
6522
6523 : determine where site specific architecture-dependent libraries go.
6524 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
6525 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6526 : sitelib may have an optional trailing /share.
6527 case "$sitearch" in
6528 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
6529         dflt="$dflt/$archname"
6530         ;;
6531 *)      dflt="$sitearch"
6532         ;;
6533 esac
6534 set sitearch sitearch none
6535 eval $prefixit
6536 $cat <<EOM
6537
6538 The installation process will also create a directory for
6539 architecture-dependent site-specific extensions and modules.
6540
6541 EOM
6542 fn=d~+
6543 rp='Pathname for the site-specific architecture-dependent library files?'
6544 . ./getfile
6545 sitearch="$ans"
6546 sitearchexp="$ansexp"
6547 : Change installation prefix, if necessary.
6548 if $test X"$prefix" != X"$installprefix"; then
6549         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6550 else
6551         installsitearch="$sitearchexp"
6552 fi
6553
6554 $cat <<EOM
6555
6556 The installation process will also create a directory for
6557 vendor-supplied add-ons.  Vendors who supply perl with their system
6558 may find it convenient to place all vendor-supplied files in this
6559 directory rather than in the main distribution directory.  This will
6560 ease upgrades between binary-compatible maintenance versions of perl.
6561
6562 Of course you may also use these directories in whatever way you see
6563 fit.  For example, you might use them to access modules shared over a
6564 company-wide network.
6565
6566 The default answer should be fine for most people.
6567 This causes further questions about vendor add-ons to be skipped
6568 and no vendor-specific directories will be configured for perl.
6569
6570 EOM
6571 rp='Do you want to configure vendor-specific add-on directories?'
6572 case "$usevendorprefix" in
6573 define|true|[yY]*) dflt=y ;;
6574 *)      : User may have set vendorprefix directly on Configure command line.
6575         case "$vendorprefix" in
6576         ''|' ') dflt=n ;;
6577         *)      dflt=y ;;
6578         esac
6579         ;;
6580 esac
6581 . ./myread
6582 case "$ans" in
6583 [yY]*)  fn=d~+
6584         rp='Installation prefix to use for vendor-supplied add-ons?'
6585         case "$vendorprefix" in
6586         '') dflt='' ;;
6587         *)  dflt=$vendorprefix ;;
6588         esac
6589         . ./getfile
6590         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6591         oldvendorprefix=''
6592         case "$vendorprefix" in
6593         '') ;;
6594         *)      case "$ans" in
6595                 "$prefix") ;;
6596                 *) oldvendorprefix="$prefix";;
6597                 esac
6598                 ;;
6599         esac
6600         usevendorprefix="$define"
6601         vendorprefix="$ans"
6602         vendorprefixexp="$ansexp"
6603         ;;
6604 *)      usevendorprefix="$undef"
6605         vendorprefix=''
6606         vendorprefixexp=''
6607         ;;
6608 esac
6609
6610 case "$vendorprefix" in
6611 '')     d_vendorlib="$undef"
6612         vendorlib=''
6613         vendorlibexp=''
6614         ;;
6615 *)      d_vendorlib="$define"
6616         : determine where vendor-supplied modules go.
6617         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6618         case "$vendorlib" in
6619         '')
6620                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6621                 case "$installstyle" in
6622                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6623                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6624                 esac
6625                 ;;
6626         *)      dflt="$vendorlib"
6627                 ;;
6628         esac
6629         fn=d~+
6630         rp='Pathname for the vendor-supplied library files?'
6631         . ./getfile
6632         vendorlib="$ans"
6633         vendorlibexp="$ansexp"
6634         ;;
6635 esac
6636 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6637 : Change installation prefix, if necessary.
6638 if $test X"$prefix" != X"$installprefix"; then
6639         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6640 else
6641         installvendorlib="$vendorlibexp"
6642 fi
6643
6644 case "$vendorprefix" in
6645 '')     d_vendorarch="$undef"
6646         vendorarch=''
6647         vendorarchexp=''
6648         ;;
6649 *)      d_vendorarch="$define"
6650         : determine where vendor-supplied architecture-dependent libraries go.
6651         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
6652         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6653         : vendorlib may have an optional trailing /share.
6654         case "$vendorarch" in
6655         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
6656                 dflt="$dflt/$archname"
6657                 ;;
6658         *)      dflt="$vendorarch" ;;
6659         esac
6660         fn=d~+
6661         rp='Pathname for vendor-supplied architecture-dependent files?'
6662         . ./getfile
6663         vendorarch="$ans"
6664         vendorarchexp="$ansexp"
6665         ;;
6666 esac
6667 : Change installation prefix, if necessary.
6668 if $test X"$prefix" != X"$installprefix"; then
6669         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6670 else
6671         installvendorarch="$vendorarchexp"
6672 fi
6673
6674 : Final catch-all directories to search
6675 $cat <<EOM
6676
6677 Lastly, you can have perl look in other directories for extensions and
6678 modules in addition to those already specified.
6679 These directories will be searched after 
6680         $sitearch 
6681         $sitelib 
6682 EOM
6683 test X"$vendorlib" != "X" && echo '     ' $vendorlib
6684 test X"$vendorarch" != "X" && echo '    ' $vendorarch
6685 echo ' '
6686 case "$otherlibdirs" in
6687 ''|' ') dflt='none' ;;
6688 *)      dflt="$otherlibdirs" ;;
6689 esac
6690 $cat <<EOM
6691 Enter a colon-separated set of extra paths to include in perl's @INC
6692 search path, or enter 'none' for no extra paths.
6693
6694 EOM
6695
6696 rp='Colon-separated list of additional directories for perl to search?'
6697 . ./myread
6698 case "$ans" in
6699 ' '|''|none)    otherlibdirs=' ' ;;     
6700 *)      otherlibdirs="$ans" ;;
6701 esac
6702 case "$otherlibdirs" in
6703 ' ') val=$undef ;;
6704 *)      val=$define ;;
6705 esac
6706 set d_perl_otherlibdirs
6707 eval $setvar
6708
6709 : Cruising for prototypes
6710 echo " "
6711 echo "Checking out function prototypes..." >&4
6712 $cat >prototype.c <<'EOCP'
6713 int main(int argc, char *argv[]) {
6714         exit(0);}
6715 EOCP
6716 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
6717         echo "Your C compiler appears to support function prototypes."
6718         val="$define"
6719 else
6720         echo "Your C compiler doesn't seem to understand function prototypes."
6721         val="$undef"
6722 fi
6723 set prototype
6724 eval $setvar
6725 $rm -f prototype*
6726
6727 case "$prototype" in
6728 "$define") ;;
6729 *)      ansi2knr='ansi2knr'
6730         echo " "
6731         cat <<EOM >&4
6732
6733 $me:  FATAL ERROR:
6734 This version of $package can only be compiled by a compiler that 
6735 understands function prototypes.  Unfortunately, your C compiler 
6736         $cc $ccflags
6737 doesn't seem to understand them.  Sorry about that.
6738
6739 If GNU cc is available for your system, perhaps you could try that instead.  
6740
6741 Eventually, we hope to support building Perl with pre-ANSI compilers.
6742 If you would like to help in that effort, please contact <perlbug@perl.org>.
6743
6744 Aborting Configure now.
6745 EOM
6746         exit 2
6747         ;;
6748 esac
6749
6750 : determine where public executables go
6751 echo " "
6752 set dflt bin bin
6753 eval $prefixit
6754 fn=d~
6755 rp='Pathname where the public executables will reside?'
6756 . ./getfile
6757 if $test "X$ansexp" != "X$binexp"; then
6758         installbin=''
6759 fi
6760 bin="$ans"
6761 binexp="$ansexp"
6762 : Change installation prefix, if necessary.
6763 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
6764 if $test X"$prefix" != X"$installprefix"; then
6765         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
6766 else
6767         installbin="$binexp"
6768 fi
6769
6770 echo " "
6771 case "$extras" in
6772 '') dflt='n';;
6773 *) dflt='y';;
6774 esac
6775 cat <<EOM
6776 Perl can be built with extra modules or bundles of modules which
6777 will be fetched from the CPAN and installed alongside Perl.
6778
6779 Notice that you will need access to the CPAN; either via the Internet,
6780 or a local copy, for example a CD-ROM or a local CPAN mirror.  (You will
6781 be asked later to configure the CPAN.pm module which will in turn do
6782 the installation of the rest of the extra modules or bundles.)
6783
6784 Notice also that if the modules require any external software such as
6785 libraries and headers (the libz library and the zlib.h header for the
6786 Compress::Zlib module, for example) you MUST have any such software
6787 already installed, this configuration process will NOT install such
6788 things for you.
6789
6790 If this doesn't make any sense to you, just accept the default '$dflt'.
6791 EOM
6792 rp='Install any extra modules (y or n)?'
6793 . ./myread
6794 case "$ans" in
6795 y|Y)
6796         cat <<EOM
6797
6798 Please list any extra modules or bundles to be installed from CPAN,
6799 with spaces between the names.  The names can be in any format the
6800 'install' command of CPAN.pm will understand.  (Answer 'none',
6801 without the quotes, to install no extra modules or bundles.)
6802 EOM
6803         rp='Extras?'
6804         dflt="$extras"
6805         . ./myread
6806         extras="$ans"
6807 esac
6808 case "$extras" in
6809 ''|'none')
6810         val=''
6811         $rm -f ../extras.lst
6812         ;;
6813 *)      echo "(Saving the list of extras for later...)"
6814         echo "$extras" > ../extras.lst
6815         val="'$extras'"
6816         ;;
6817 esac
6818 set extras
6819 eval $setvar
6820 echo " "
6821
6822 : Find perl5.005 or later.
6823 echo "Looking for a previously installed perl5.005 or later... "
6824 case "$perl5" in
6825 '')     for tdir in `echo "$binexp$path_sep$PATH" | $sed "s/$path_sep/ /g"`; do
6826                 : Check if this perl is recent and can load a simple module
6827                 if $test -x $tdir/perl$exe_ext && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6828                         perl5=$tdir/perl
6829                         break;
6830                 elif $test -x $tdir/perl5$exe_ext && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6831                         perl5=$tdir/perl5
6832                         break;
6833                 fi
6834         done
6835         ;;
6836 *)      perl5="$perl5"
6837         ;;
6838 esac
6839 case "$perl5" in
6840 '')     echo "None found.  That's ok.";;
6841 *)      echo "Using $perl5." ;;
6842 esac
6843
6844 : Determine list of previous versions to include in @INC
6845 $cat > getverlist <<EOPL
6846 #!$perl5 -w
6847 use File::Basename;
6848 \$api_versionstring = "$api_versionstring";
6849 \$version = "$version";
6850 \$stem = "$sitelib_stem";
6851 \$archname = "$archname";
6852 EOPL
6853         $cat >> getverlist <<'EOPL'
6854 # Can't have leading @ because metaconfig interprets it as a command!
6855 ;@inc_version_list=();
6856 # XXX Redo to do opendir/readdir? 
6857 if (-d $stem) {
6858     chdir($stem);
6859     ;@candidates = glob("5.*");
6860 }
6861 else {
6862     ;@candidates = ();
6863 }
6864
6865 # XXX ToDo:  These comparisons must be reworked when two-digit
6866 # subversions come along, so that 5.7.10 compares as greater than
6867 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
6868 # widespread that we can use the built-in version vectors rather
6869 # than reinventing them here.  For 5.6.0, however, we must
6870 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
6871 foreach $d (@candidates) {
6872     if ($d lt $version) {
6873         if ($d ge $api_versionstring) {
6874             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
6875         }
6876         elsif ($d ge "5.005") {
6877             unshift(@inc_version_list, grep { -d } $d);
6878         }
6879     }
6880     else {
6881         # Skip newer version.  I.e. don't look in
6882         # 5.7.0 if we're installing 5.6.1.
6883     }
6884 }
6885
6886 if (@inc_version_list) {
6887     print join(' ', @inc_version_list);
6888 }
6889 else {
6890     # Blank space to preserve value for next Configure run.
6891     print " ";
6892 }
6893 EOPL
6894 chmod +x getverlist
6895 case "$inc_version_list" in
6896 '')     if test -x "$perl5$exe_ext"; then
6897                 dflt=`$perl5 getverlist`
6898         else
6899                 dflt='none'
6900         fi
6901         ;;
6902 $undef) dflt='none' ;;
6903 *)  eval dflt=\"$inc_version_list\" ;;
6904 esac
6905 case "$dflt" in
6906 ''|' ') dflt=none ;;
6907 esac
6908 case "$dflt" in
6909 5.005) case "$bincompat5005" in
6910        $define|true|[yY]*) ;;
6911        *) dflt=none ;;
6912        esac
6913        ;;
6914 esac
6915 $cat <<'EOM'
6916
6917 In order to ease the process of upgrading, this version of perl 
6918 can be configured to use modules built and installed with earlier 
6919 versions of perl that were installed under $prefix.  Specify here
6920 the list of earlier versions that this version of perl should check.
6921 If Configure detected no earlier versions of perl installed under
6922 $prefix, then the list will be empty.  Answer 'none' to tell perl
6923 to not search earlier versions.
6924
6925 The default should almost always be sensible, so if you're not sure,
6926 just accept the default.
6927 EOM
6928
6929 rp='List of earlier versions to include in @INC?'
6930 . ./myread
6931 case "$ans" in
6932 [Nn]one|''|' ') inc_version_list=' ' ;;
6933 *) inc_version_list="$ans" ;;
6934 esac
6935 case "$inc_version_list" in
6936 ''|' ') 
6937         inc_version_list_init='0';;
6938 *)      inc_version_list_init=`echo $inc_version_list |
6939                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
6940         ;;
6941 esac
6942 $rm -f getverlist
6943
6944 : determine whether to install perl also as /usr/bin/perl
6945
6946 echo " "
6947 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
6948         $cat <<EOM
6949 Many scripts expect perl to be installed as /usr/bin/perl.
6950 I can install the perl you are about to compile also as /usr/bin/perl
6951 (in addition to $installbin/perl).
6952 EOM
6953         case "$installusrbinperl" in
6954         "$undef"|[nN]*) dflt='n';;
6955         *)              dflt='y';;
6956         esac
6957         rp="Do you want to install perl as /usr/bin/perl?"
6958         . ./myread
6959         case "$ans" in
6960         [yY]*)  val="$define";;
6961         *)      val="$undef" ;;
6962         esac
6963 else
6964         val="$undef"
6965 fi
6966 set installusrbinperl
6967 eval $setvar
6968
6969 : see if dld is available
6970 set dld.h i_dld
6971 eval $inhdr
6972
6973 : see if dlopen exists
6974 xxx_runnm="$runnm"
6975 runnm=false
6976 set dlopen d_dlopen
6977 eval $inlibc
6978 runnm="$xxx_runnm"
6979
6980 : determine which dynamic loading, if any, to compile in
6981 echo " "
6982 dldir="ext/DynaLoader"
6983 case "$usedl" in
6984 $define|y|true)
6985         dflt='y'
6986         usedl="$define"
6987         ;;
6988 $undef|n|false)
6989         dflt='n'
6990         usedl="$undef"
6991         ;;
6992 *) 
6993         dflt='n'
6994         case "$d_dlopen" in
6995             $define) dflt='y' ;;
6996         esac
6997         case "$i_dld" in
6998             $define) dflt='y' ;;
6999         esac
7000         : Does a dl_xxx.xs file exist for this operating system
7001         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
7002         ;;
7003 esac
7004 rp="Do you wish to use dynamic loading?"
7005 . ./myread
7006 usedl="$ans"
7007 case "$ans" in
7008 y*) usedl="$define"
7009         case "$dlsrc" in
7010         '')
7011                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
7012                         dflt="$dldir/dl_${osname}.xs"
7013                 elif $test "$d_dlopen" = "$define" ; then
7014                         dflt="$dldir/dl_dlopen.xs"
7015                 elif $test "$i_dld" = "$define" ; then
7016                         dflt="$dldir/dl_dld.xs"
7017                 else
7018                         dflt=''
7019                 fi
7020                 ;;
7021         *)      dflt="$dldir/$dlsrc"
7022                 ;;
7023         esac
7024     echo "The following dynamic loading files are available:"
7025         : Can not go over to $dldir because getfile has path hard-coded in.
7026         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
7027         rp="Source file to use for dynamic loading"
7028         fn="fne"
7029         gfpth="$src"
7030         . ./getfile
7031         usedl="$define"
7032         : emulate basename
7033         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
7034
7035         $cat << EOM
7036
7037 Some systems may require passing special flags to $cc -c to
7038 compile modules that will be used to create a shared library.
7039 To use no flags, say "none".
7040
7041 EOM
7042     case "$cccdlflags" in
7043     '') case "$gccversion" in
7044                 '') case "$osname" in
7045                         hpux)   dflt='+z' ;;
7046                         next)   dflt='none' ;;
7047                         irix*)  dflt='-KPIC' ;;
7048                         svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
7049                         sunos)  dflt='-pic' ;;
7050                         *)      dflt='none' ;;
7051                     esac
7052                         ;;
7053                 *)  case "$osname" in
7054                         darwin) dflt='none' ;;
7055                         svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
7056                         *)      dflt='-fpic' ;;
7057                     esac ;;
7058             esac ;;
7059         ' ') dflt='none' ;;
7060     *)  dflt="$cccdlflags" ;;
7061     esac
7062     rp="Any special flags to pass to $cc -c to compile shared library modules?"
7063     . ./myread
7064     case "$ans" in
7065     none) cccdlflags=' ' ;;
7066     *) cccdlflags="$ans" ;;
7067     esac
7068
7069     cat << EOM
7070
7071 Some systems use ld to create libraries that can be dynamically loaded,
7072 while other systems (such as those using ELF) use $cc.
7073
7074 EOM
7075         case "$ld" in
7076         '')     $cat >try.c <<'EOM'
7077 /* Test for whether ELF binaries are produced */
7078 #include <fcntl.h>
7079 #include <stdlib.h>
7080 int main() {
7081         char b[4];
7082         int i = open("a.out",O_RDONLY);
7083         if(i == -1) 
7084                 exit(1); /* fail */
7085         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
7086                 exit(0); /* succeed (yes, it's ELF) */
7087         else
7088                 exit(1); /* fail */
7089 }
7090 EOM
7091                 if $cc $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then
7092                         cat <<EOM
7093 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
7094 EOM
7095                         dflt="$cc"
7096                 else
7097                         echo "I'll use ld to build dynamic libraries."
7098                         dflt='ld'
7099                 fi
7100                 rm -f try.c a.out
7101                 ;;
7102         *)      dflt="$ld"
7103                 ;;
7104         esac
7105
7106     rp="What command should be used to create dynamic libraries?"
7107     . ./myread
7108         ld="$ans"
7109
7110     cat << EOM
7111
7112 Some systems may require passing special flags to $ld to create a
7113 library that can be dynamically loaded.  If your ld flags include
7114 -L/other/path options to locate libraries outside your loader's normal
7115 search path, you may need to specify those -L options here as well.  To
7116 use no flags, say "none".
7117
7118 EOM
7119     case "$lddlflags" in
7120     '') case "$osname" in
7121                         beos) dflt='-nostart' ;;
7122                         hpux) dflt='-b';
7123                               case "$gccversion" in
7124                               '') dflt="$dflt +vnocompatwarnings" ;;
7125                               esac
7126                               ;;        
7127                         linux|irix*)    dflt='-shared' ;;
7128                         next)  dflt='none' ;;
7129                         solaris) dflt='-G' ;;
7130                         sunos) dflt='-assert nodefinitions' ;;
7131                         svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
7132                 *)     dflt='none' ;;
7133                         esac
7134                         ;;
7135     *) dflt="$lddlflags" ;;
7136     esac
7137
7138         : Try to guess additional flags to pick up local libraries.
7139         : Be careful not to append to a plain 'none'
7140         case "$dflt" in
7141         none) dflt='' ;;
7142         esac
7143         for thisflag in $ldflags; do
7144                 case "$thisflag" in
7145                 -L*|-R*)
7146                         case " $dflt " in
7147                         *" $thisflag "*) ;;
7148                         *) dflt="$dflt $thisflag" ;;
7149                         esac
7150                         ;;
7151                 esac
7152         done
7153
7154         case "$dflt" in
7155         ''|' ') dflt='none' ;;
7156         esac
7157
7158     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
7159     . ./myread
7160     case "$ans" in
7161     none) lddlflags=' ' ;;
7162     *) lddlflags="$ans" ;;
7163     esac
7164
7165         cat <<EOM
7166
7167 Some systems may require passing special flags to $cc to indicate that
7168 the resulting executable will use dynamic linking.  To use no flags,
7169 say "none".
7170
7171 EOM
7172     case "$ccdlflags" in
7173     '') case "$osname" in
7174                 hpux)   dflt='-Wl,-E' ;;
7175                 linux)  dflt='-rdynamic' ;;
7176                 next)   dflt='none' ;;
7177                 sunos)  dflt='none' ;;
7178                 *)      dflt='none' ;;
7179             esac ;;
7180     ' ')  dflt='none' ;;
7181     *)  dflt="$ccdlflags" ;;
7182     esac
7183     rp="Any special flags to pass to $cc to use dynamic linking?"
7184     . ./myread
7185     case "$ans" in
7186     none) ccdlflags=' ' ;;
7187     *) ccdlflags="$ans" ;;
7188     esac
7189     ;;
7190 *)  usedl="$undef"
7191         ld='ld'
7192     dlsrc='dl_none.xs'
7193     lddlflags=''
7194     ccdlflags=''
7195     ;;
7196 esac
7197
7198 also=''
7199 case "$usedl" in
7200 $undef)
7201         # No dynamic loading being used, so don't bother even to prompt.
7202         useshrplib='false'
7203         ;;
7204 *)      case "$useshrplib" in
7205         '')     case "$osname" in
7206                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
7207                         dflt=y
7208                         also='Building a shared libperl is required for dynamic loading to work on your system.'
7209                         ;;
7210                 next*)
7211                         case "$osvers" in
7212                         4*)     dflt=y
7213                                 also='Building a shared libperl is needed for MAB support.'
7214                                 ;;
7215                         *)      dflt=n
7216                                 ;;
7217                         esac
7218                         ;;
7219                 *)      dflt=n
7220                         ;;
7221                 esac
7222                 ;;
7223         $define|true|[Yy]*)
7224                 dflt=y
7225                 ;;
7226         *)      dflt=n
7227                 ;;
7228         esac
7229         $cat << EOM
7230
7231 The perl executable is normally obtained by linking perlmain.c with
7232 libperl${_a}, any static extensions (usually just DynaLoader), and
7233 any other libraries needed on this system (such as -lm, etc.).  Since
7234 your system supports dynamic loading, it is probably possible to build
7235 a shared libperl.$so.  If you will have more than one executable linked
7236 to libperl.$so, this will significantly reduce the size of each
7237 executable, but it may have a noticeable affect on performance.  The
7238 default is probably sensible for your system.
7239 $also
7240
7241 EOM
7242         rp="Build a shared libperl.$so (y/n)"
7243         . ./myread
7244         case "$ans" in
7245         true|$define|[Yy]*)
7246                 useshrplib='true'  ;;
7247         *)      useshrplib='false' ;;
7248         esac
7249         ;;
7250 esac
7251
7252 case "$useshrplib" in
7253 true)
7254         case "$libperl" in
7255         '')
7256                 # Figure out a good name for libperl.so.  Since it gets stored in
7257                 # a version-specific architecture-dependent library, the version
7258                 # number isn't really that important, except for making cc/ld happy.
7259                 #
7260                 # A name such as libperl.so.3.1
7261                 majmin="libperl.$so.$patchlevel.$subversion"
7262                 # A name such as libperl.so.301
7263                 majonly=`echo $patchlevel $subversion |
7264                         $awk '{printf "%d%02d", $1, $2}'`
7265                 majonly=libperl.$so.$majonly
7266                 # I'd prefer to keep the os-specific stuff here to a minimum, and
7267                 # rely on figuring it out from the naming of libc.
7268                 case "${osname}${osvers}" in
7269                 next4*)
7270                         dflt=libperl.5.$so
7271                         # XXX How handle the --version stuff for MAB?
7272                         ;;
7273                 linux*)  # ld won't link with a bare -lperl otherwise.
7274                         dflt=libperl.$so
7275                         ;;
7276                 cygwin*) # include version
7277                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
7278                         ;;
7279                 *)      # Try to guess based on whether libc has major.minor.
7280                         case "$libc" in
7281                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
7282                         *libc.$so.[0-9]*) dflt=$majonly ;;
7283                         *)      dflt=libperl.$so ;;
7284                         esac
7285                         ;;
7286                 esac
7287                 ;;
7288         *)      dflt=$libperl
7289                 ;;
7290         esac
7291         cat << EOM
7292
7293 I need to select a good name for the shared libperl.  If your system uses
7294 library names with major and minor numbers, then you might want something
7295 like $majmin.  Alternatively, if your system uses a single version
7296 number for shared libraries, then you might want to use $majonly.
7297 Or, your system might be quite happy with a simple libperl.$so.
7298
7299 Since the shared libperl will get installed into a version-specific
7300 architecture-dependent directory, the version number of the shared perl
7301 library probably isn't important, so the default should be o.k.
7302
7303 EOM
7304         rp='What name do you want to give to the shared libperl?'
7305         . ./myread
7306         libperl=$ans
7307         echo "Ok, I'll use $libperl"
7308         ;;
7309 *)
7310         libperl="libperl${_a}"
7311         ;;
7312 esac
7313
7314 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
7315 case "$shrpdir" in
7316 '') ;;
7317 *)      $cat >&4 <<EOM
7318 WARNING:  Use of the shrpdir variable for the installation location of
7319 the shared $libperl is not supported.  It was never documented and
7320 will not work in this version.  Let me (perlbug@perl.org)
7321 know of any problems this may cause.
7322
7323 EOM
7324         case "$shrpdir" in
7325         "$archlibexp/CORE")
7326                 $cat >&4 <<EOM
7327 But your current setting of $shrpdir is
7328 the default anyway, so it's harmless.
7329 EOM
7330                 ;;
7331         *)
7332                 $cat >&4 <<EOM
7333 Further, your current attempted setting of $shrpdir
7334 conflicts with the value of $archlibexp/CORE
7335 that installperl will use.
7336 EOM
7337                 ;;
7338         esac
7339         ;;
7340 esac
7341
7342 # How will the perl executable find the installed shared $libperl?
7343 # Add $xxx to ccdlflags.
7344 # If we can't figure out a command-line option, use $shrpenv to
7345 # set env LD_RUN_PATH.  The main perl makefile uses this.
7346 shrpdir=$archlibexp/CORE
7347 xxx=''
7348 tmp_shrpenv=''
7349 if "$useshrplib"; then
7350     case "$osname" in 
7351         aix)
7352                 # We'll set it in Makefile.SH...
7353                 ;;
7354         solaris|netbsd)
7355                 xxx="-R $shrpdir"
7356                 ;;
7357         freebsd)
7358                 xxx="-Wl,-R$shrpdir"
7359                 ;;
7360         linux|irix*|dec_osf)
7361                 xxx="-Wl,-rpath,$shrpdir"
7362                 ;;
7363         next)
7364                 # next doesn't like the default...
7365                 ;;
7366         beos)
7367                 # beos doesn't like the default, either.
7368                 ;;
7369         hpux*)
7370                 # hpux doesn't like the default, either.
7371                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
7372                 ;;
7373         *)
7374                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
7375                 ;;
7376         esac
7377         case "$xxx" in
7378         '') ;;
7379         *)      
7380                 # Only add $xxx if it isn't already in ccdlflags.
7381                 case " $ccdlflags " in
7382                 *" $xxx "*)     ;;
7383                 *)      ccdlflags="$ccdlflags $xxx"
7384                         cat <<EOM >&4
7385
7386 Adding $xxx to the flags
7387 passed to $ld so that the perl executable will find the 
7388 installed shared $libperl.
7389
7390 EOM
7391                         ;;
7392                 esac
7393                 ;;
7394         esac
7395 fi
7396 # Fix ccdlflags in AIX for building external extensions.
7397 # (For building Perl itself bare -bE:perl.exp is needed,
7398 #  Makefile.SH takes care of this.)
7399 case "$osname" in
7400 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
7401 esac
7402 # Respect a hint or command-line value.
7403 case "$shrpenv" in
7404 '') shrpenv="$tmp_shrpenv" ;;
7405 esac
7406 case "$ldlibpthname" in
7407 '')     ldlibpthname=LD_LIBRARY_PATH ;;
7408 none)   ldlibpthname='' ;;
7409 esac
7410
7411 : determine where manual pages are on this system
7412 echo " "
7413 case "$sysman" in
7414 '') 
7415         syspath='/usr/share/man/man1 /usr/man/man1'
7416         syspath="$syspath /usr/man/mann /usr/man/manl /usr/man/local/man1"
7417         syspath="$syspath /usr/man/u_man/man1"
7418         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
7419         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
7420         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
7421         sysman=`./loc . /usr/man/man1 $syspath`
7422         ;;
7423 esac
7424 if $test -d "$sysman"; then
7425         echo "System manual is in $sysman." >&4
7426 else
7427         echo "Could not find manual pages in source form." >&4
7428 fi
7429
7430 : determine where manual pages go
7431 set man1dir man1dir none
7432 eval $prefixit
7433 $cat <<EOM
7434
7435 $spackage has manual pages available in source form.
7436 EOM
7437 case "$nroff" in
7438 nroff)
7439         echo "However, you don't have nroff, so they're probably useless to you."
7440         case "$man1dir" in
7441         '') man1dir="none";;
7442         esac;;
7443 esac
7444 echo "If you don't want the manual sources installed, answer 'none'."
7445 case "$man1dir" in
7446 ' ') dflt=none
7447         ;;
7448 '')
7449         lookpath="$prefixexp/share/man/man1"
7450         lookpath="$lookpath $prefixexp/man/man1 $prefixexp/man/l_man/man1"
7451         lookpath="$lookpath $prefixexp/man/p_man/man1"
7452         lookpath="$lookpath $prefixexp/man/u_man/man1"
7453         lookpath="$lookpath $prefixexp/man/man.1"
7454         case "$sysman" in
7455         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
7456         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
7457         esac
7458         set dflt
7459         eval $prefixup
7460         ;;
7461 *)  dflt="$man1dir"
7462         ;;
7463 esac
7464 echo " "
7465 fn=dn+~
7466 rp="Where do the main $spackage manual pages (source) go?"
7467 . ./getfile
7468 if $test "X$man1direxp" != "X$ansexp"; then
7469         installman1dir=''
7470 fi
7471 man1dir="$ans"
7472 man1direxp="$ansexp"
7473 case "$man1dir" in
7474 '')     man1dir=' '
7475         installman1dir='';;
7476 esac
7477
7478 : Change installation prefix, if necessary.
7479 if $test X"$prefix" != X"$installprefix"; then
7480         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
7481 else
7482         installman1dir="$man1direxp"
7483 fi
7484
7485 : What suffix to use on installed man pages
7486
7487 case "$man1dir" in
7488 ' ')
7489         man1ext='0'
7490         ;;
7491 *)
7492         rp="What suffix should be used for the main $spackage man pages?"
7493         case "$man1ext" in
7494         '')     case "$man1dir" in
7495                 *1)  dflt=1 ;;
7496                 *1p) dflt=1p ;;
7497                 *1pm) dflt=1pm ;;
7498                 *l) dflt=l;;
7499                 *n) dflt=n;;
7500                 *o) dflt=o;;
7501                 *p) dflt=p;;
7502                 *C) dflt=C;;
7503                 *L) dflt=L;;
7504                 *L1) dflt=L1;;
7505                 *) dflt=1;;
7506                 esac
7507                 ;;
7508         *)      dflt="$man1ext";;
7509         esac
7510         . ./myread
7511         man1ext="$ans"
7512         ;;
7513 esac
7514
7515 : see if we can have long filenames
7516 echo " "
7517 first=123456789abcdef
7518 $rm -f $first
7519 if (echo hi >$first) 2>/dev/null; then
7520         if $test -f 123456789abcde; then
7521                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
7522                 val="$undef"
7523         else
7524                 echo 'You can have filenames longer than 14 characters.'>&4
7525                 val="$define"
7526         fi
7527 else
7528         $cat <<'EOM'
7529 You can't have filenames longer than 14 chars.
7530 You can't even think about them!
7531 EOM
7532         val="$undef"
7533 fi 
7534 set d_flexfnam
7535 eval $setvar
7536 $rm -rf 123456789abcde*
7537
7538 : determine where library module manual pages go
7539 set man3dir man3dir none
7540 eval $prefixit
7541 $cat <<EOM
7542
7543 $spackage has manual pages for many of the library modules.
7544 EOM
7545
7546 case "$nroff" in
7547 nroff)
7548         $cat <<'EOM'
7549 However, you don't have nroff, so they're probably useless to you.
7550 EOM
7551         case "$man3dir" in
7552         '') man3dir="none";;
7553         esac;;
7554 esac
7555
7556 case "$d_flexfnam" in
7557 undef)
7558         $cat <<'EOM'
7559 However, your system can't handle the long file names like File::Basename.3. 
7560 EOM
7561         case "$man3dir" in
7562         '') man3dir="none";;
7563         esac;;
7564 esac
7565
7566 echo "If you don't want the manual sources installed, answer 'none'."
7567 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7568 case "$man3dir" in
7569 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
7570         if $test -d "$privlib/man/man3"; then
7571                 cat <<EOM >&4
7572
7573 WARNING:  Previous versions of perl installed man3 pages into
7574 $privlib/man/man3.  This version will suggest a 
7575 new default of $dflt.  
7576 EOM
7577                 tdflt=$dflt
7578                 dflt='n'
7579                 rp='Do you wish to preserve the old behavior?(y/n)'
7580                 . ./myread
7581                 case "$ans" in
7582                 y*) dflt="$privlib/man/man3" ;;
7583                 *)  dflt=$tdflt ;;
7584                 esac
7585     fi
7586         ;;
7587 *)      dflt="$man3dir" ;;
7588 esac
7589 case "$dflt" in
7590 ' ') dflt=none ;;
7591 esac
7592 echo " "
7593 fn=dn+~
7594 rp="Where do the $package library man pages (source) go?"
7595 . ./getfile
7596 man3dir="$ans"
7597 man3direxp="$ansexp"
7598 case "$man3dir" in
7599 '')     man3dir=' '
7600         installman3dir='';;
7601 esac
7602
7603 : Change installation prefix, if necessary.
7604 if $test X"$prefix" != X"$installprefix"; then
7605         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
7606 else
7607         installman3dir="$man3direxp"
7608 fi
7609
7610 : What suffix to use on installed man pages
7611 case "$man3dir" in
7612 ' ')
7613         man3ext='0'
7614         ;;
7615 *)
7616         rp="What suffix should be used for the $package library man pages?"
7617         case "$man3ext" in
7618         '')     case "$man3dir" in
7619                 *3)  dflt=3 ;;
7620                 *3p) dflt=3p ;;
7621                 *3pm) dflt=3pm ;;
7622                 *l) dflt=l;;
7623                 *n) dflt=n;;
7624                 *o) dflt=o;;
7625                 *p) dflt=p;;
7626                 *C) dflt=C;;
7627                 *L) dflt=L;;
7628                 *L3) dflt=L3;;
7629                 *) dflt=3;;
7630                 esac
7631                 ;;
7632         *)      dflt="$man3ext";;
7633         esac
7634         . ./myread
7635         man3ext="$ans"
7636         ;;
7637 esac
7638
7639 : see if we have to deal with yellow pages, now NIS.
7640 if $test -d /usr/etc/yp || $test -d /etc/yp; then
7641         if $test -f /usr/etc/nibindd; then
7642                 echo " "
7643                 echo "I'm fairly confident you're on a NeXT."
7644                 echo " "
7645                 rp='Do you get the hosts file via NetInfo?'
7646                 dflt=y
7647                 case "$hostcat" in
7648                 nidump*) ;;
7649                 '') ;;
7650                 *) dflt=n;;
7651                 esac
7652                 . ./myread
7653                 case "$ans" in
7654                 y*) hostcat='nidump hosts .';;
7655                 *)      case "$hostcat" in
7656                         nidump*) hostcat='';;
7657                         esac
7658                         ;;
7659                 esac
7660         fi
7661         case "$hostcat" in
7662         nidump*) ;;
7663         *)
7664                 case "$hostcat" in
7665                 *ypcat*) dflt=y;;
7666                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7667                                 dflt=y
7668                         else
7669                                 dflt=n
7670                         fi;;
7671                 *) dflt=n;;
7672                 esac
7673                 echo " "
7674                 rp='Are you getting the hosts file via yellow pages?'
7675                 . ./myread
7676                 case "$ans" in
7677                 y*) hostcat='ypcat hosts';;
7678                 *) hostcat='cat /etc/hosts';;
7679                 esac
7680                 ;;
7681         esac
7682 fi
7683 case "$hostcat" in
7684 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
7685 esac
7686 case "$groupcat" in
7687 '') test -f /etc/group && groupcat='cat /etc/group';;
7688 esac
7689 case "$passcat" in
7690 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
7691 esac
7692
7693 : now get the host name
7694 echo " "
7695 echo "Figuring out host name..." >&4
7696 case "$myhostname" in
7697 '') cont=true
7698         echo 'Maybe "hostname" will work...'
7699         if tans=`sh -c hostname 2>&1` ; then
7700                 myhostname=$tans
7701                 phostname=hostname
7702                 cont=''
7703         fi
7704         ;;
7705 *) cont='';;
7706 esac
7707 if $test "$cont"; then
7708         if ./xenix; then
7709                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
7710                 if tans=`cat /etc/systemid 2>&1` ; then
7711                         myhostname=$tans
7712                         phostname='cat /etc/systemid'
7713                         echo "Whadyaknow.  Xenix always was a bit strange..."
7714                         cont=''
7715                 fi
7716         elif $test -r /etc/systemid; then
7717                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
7718         fi
7719 fi
7720 if $test "$cont"; then
7721         echo 'No, maybe "uuname -l" will work...'
7722         if tans=`sh -c 'uuname -l' 2>&1` ; then
7723                 myhostname=$tans
7724                 phostname='uuname -l'
7725         else
7726                 echo 'Strange.  Maybe "uname -n" will work...'
7727                 if tans=`sh -c 'uname -n' 2>&1` ; then
7728                         myhostname=$tans
7729                         phostname='uname -n'
7730                 else
7731                         echo 'Oh well, maybe I can mine it out of whoami.h...'
7732                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
7733                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
7734                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
7735                         else
7736                                 case "$myhostname" in
7737                                 '') echo "Does this machine have an identity crisis or something?"
7738                                         phostname='';;
7739                                 *)
7740                                         echo "Well, you said $myhostname before..."
7741                                         phostname='echo $myhostname';;
7742                                 esac
7743                         fi
7744                 fi
7745         fi
7746 fi
7747 : you do not want to know about this
7748 set $myhostname
7749 myhostname=$1
7750
7751 : verify guess
7752 if $test "$myhostname" ; then
7753         dflt=y
7754         rp='Your host name appears to be "'$myhostname'".'" Right?"
7755         . ./myread
7756         case "$ans" in
7757         y*) ;;
7758         *) myhostname='';;
7759         esac
7760 fi
7761
7762 : bad guess or no guess
7763 while $test "X$myhostname" = X ; do
7764         dflt=''
7765         rp="Please type the (one word) name of your host:"
7766         . ./myread
7767         myhostname="$ans"
7768 done
7769
7770 : translate upper to lower if necessary
7771 case "$myhostname" in
7772 *[A-Z]*)
7773         echo "(Normalizing case in your host name)"
7774         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
7775         ;;
7776 esac
7777
7778 case "$myhostname" in
7779 *.*)
7780         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
7781         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
7782         echo "(Trimming domain name from host name--host name is now $myhostname)"
7783         ;;
7784 *) case "$mydomain" in
7785         '')
7786                 {
7787                         test "X$hostcat" = "Xypcat hosts" &&
7788                         ypmatch "$myhostname" hosts 2>/dev/null |\
7789                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
7790                         $test -s hosts
7791                 } || {
7792                         test "X$hostcat" != "X" &&
7793                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
7794                                         /[       ]$myhostname[  . ]/p" > hosts
7795                 }
7796                 tmp_re="[       . ]"
7797                 if $test -f hosts; then
7798                         $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
7799                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
7800                         dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
7801                                 hosts | $sort | $uniq | \
7802                                 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
7803                         case `$echo X$dflt` in
7804                         X*\ *)  echo "(Several hosts in the database matched hostname)"
7805                                 dflt=.
7806                                 ;;
7807                         X.) echo "(You do not have fully-qualified names in the hosts database)"
7808                                 ;;
7809                         esac
7810                 else
7811                         echo "(I cannot locate a hosts database anywhere)"
7812                         dflt=.
7813                 fi
7814                 case "$dflt" in
7815                 .)
7816                         tans=`./loc resolv.conf X /etc /usr/etc`
7817                         if $test -f "$tans"; then
7818                                 echo "(Attempting domain name extraction from $tans)"
7819                                 dflt=.`$sed -n -e 's/   / /g' \
7820                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
7821                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7822                                 case "$dflt" in
7823                                 .) dflt=.`$sed -n -e 's/        / /g' \
7824                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
7825                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7826                                         ;;
7827                                 esac
7828                         fi
7829                         ;;
7830                 esac
7831                 case "$dflt" in
7832                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
7833                         dflt=.`sh -c domainname 2>/dev/null`
7834                         case "$dflt" in
7835                         '') dflt='.';;
7836                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
7837                         esac
7838                         ;;
7839                 esac
7840                 case "$dflt$osname" in
7841                 .os390) echo "(Attempting domain name extraction from //'SYS1.TCPPARMS(TCPDATA)')"
7842                         dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "//'SYS1.TCPPARMS(TCPDATA)'" 2>/dev/null`
7843                         ;;
7844                 esac
7845                 case "$dflt" in
7846                 .) echo "(Lost all hope -- silly guess then)"
7847                         dflt='.uucp'
7848                         ;;
7849                 esac
7850                 $rm -f hosts
7851                 ;;
7852         *) dflt="$mydomain";;
7853         esac;;
7854 esac
7855 echo " "
7856 rp="What is your domain name?"
7857 . ./myread
7858 tans="$ans"
7859 case "$ans" in
7860 '') ;;
7861 .*) ;;
7862 *) tans=".$tans";;
7863 esac
7864 mydomain="$tans"
7865
7866 : translate upper to lower if necessary
7867 case "$mydomain" in
7868 *[A-Z]*)
7869         echo "(Normalizing case in your domain name)"
7870         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
7871         ;;
7872 esac
7873
7874 : a little sanity check here
7875 case "$phostname" in
7876 '') ;;
7877 *)
7878         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
7879         $myhostname$mydomain|$myhostname) ;;
7880         *)
7881                 case "$phostname" in
7882                 sed*)
7883                         echo "(That doesn't agree with your whoami.h file, by the way.)"
7884                         ;;
7885                 *)
7886                         echo "(That doesn't agree with your $phostname command, by the way.)"
7887                         ;;
7888                 esac
7889         ;;
7890         esac
7891         ;;
7892 esac
7893
7894 $cat <<EOM
7895
7896 I need to get your e-mail address in Internet format if possible, i.e.
7897 something like user@host.domain. Please answer accurately since I have
7898 no easy means to double check it. The default value provided below
7899 is most probably close to reality but may not be valid from outside
7900 your organization...
7901
7902 EOM
7903 cont=x
7904 while test "$cont"; do
7905         case "$cf_email" in
7906         '') dflt="$cf_by@$myhostname$mydomain";;
7907         *) dflt="$cf_email";;
7908         esac
7909         rp='What is your e-mail address?'
7910         . ./myread
7911         cf_email="$ans"
7912         case "$cf_email" in
7913         *@*.*) cont='' ;;
7914         *)
7915                 rp='Address does not look like an Internet one.  Use it anyway?'
7916                 case "$fastread" in
7917                 yes) dflt=y ;;
7918                 *) dflt=n ;;
7919                 esac
7920                 . ./myread
7921                 case "$ans" in
7922                 y*) cont='' ;;
7923                 *) echo " " ;;
7924                 esac
7925                 ;;
7926         esac
7927 done
7928
7929 $cat <<EOM
7930
7931 If you or somebody else will be maintaining perl at your site, please
7932 fill in the correct e-mail address here so that they may be contacted
7933 if necessary. Currently, the "perlbug" program included with perl
7934 will send mail to this address in addition to perlbug@perl.org. You may
7935 enter "none" for no administrator.
7936
7937 EOM
7938 case "$perladmin" in
7939 '') dflt="$cf_email";;
7940 *) dflt="$perladmin";;
7941 esac
7942 rp='Perl administrator e-mail address'
7943 . ./myread
7944 perladmin="$ans"
7945
7946 : determine whether to only install version-specific parts.
7947 echo " "
7948 $cat <<EOM
7949 Do you want to install only the version-specific parts of the perl
7950 distribution?  Usually you do *not* want to do this.
7951 EOM
7952 case "$versiononly" in
7953 "$define"|[Yy]*|true) dflt='y' ;;
7954 *) dflt='n';
7955 esac
7956 rp="Do you want to install only the version-specific parts of perl?"
7957 . ./myread
7958 case "$ans" in
7959 [yY]*)  val="$define";;
7960 *)      val="$undef" ;;
7961 esac
7962 set versiononly
7963 eval $setvar
7964
7965 : figure out how to guarantee perl startup
7966 case "$startperl" in
7967 '')
7968         case "$sharpbang" in
7969         *!)
7970                 $cat <<EOH
7971
7972 I can use the #! construct to start perl on your system. This will
7973 make startup of perl scripts faster, but may cause problems if you
7974 want to share those scripts and perl is not in a standard place
7975 ($binexp/perl) on all your platforms. The alternative is to force
7976 a shell by starting the script with a single ':' character.
7977
7978 EOH
7979                 case "$versiononly" in
7980                 "$define")      dflt="$binexp/perl$version";;  
7981                 *)              dflt="$binexp/perl";;
7982                 esac
7983                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
7984                 . ./myread
7985                 case "$ans" in
7986                 none)   startperl=": # use perl";;
7987                 *)      startperl="#!$ans"
7988                         if $test 30 -lt `echo "$ans" | wc -c`; then
7989                                 $cat >&4 <<EOM
7990
7991 WARNING:  Some systems limit the #! command to 32 characters.
7992 If you experience difficulty running Perl scripts with #!, try
7993 installing Perl in a directory with a shorter pathname.
7994
7995 EOM
7996                         fi ;;
7997                 esac
7998                 ;;
7999         *) startperl=": # use perl"
8000                 ;;
8001         esac
8002         ;;
8003 esac
8004 echo "I'll use $startperl to start perl scripts."
8005
8006 : figure best path for perl in scripts
8007 case "$perlpath" in
8008 '')
8009         perlpath="$binexp/perl"
8010         case "$startperl" in
8011         *!*) ;;
8012         *)
8013                 $cat <<EOH
8014
8015 I will use the "eval 'exec'" idiom to start Perl on your system.
8016 I can use the full path of your Perl binary for this purpose, but
8017 doing so may cause problems if you want to share those scripts and
8018 Perl is not always in a standard place ($binexp/perl).
8019
8020 EOH
8021                 dflt="$binexp/perl"
8022                 rp="What path shall I use in \"eval 'exec'\"?"
8023                 . ./myread
8024                 perlpath="$ans"
8025                 ;;
8026         esac
8027         ;;
8028 esac
8029 case "$startperl" in
8030 *!*)    ;;
8031 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
8032 esac
8033
8034 : determine where public executable scripts go
8035 set scriptdir scriptdir
8036 eval $prefixit
8037 case "$scriptdir" in
8038 '')
8039         dflt="$bin"
8040         : guess some guesses
8041         $test -d /usr/share/scripts && dflt=/usr/share/scripts
8042         $test -d /usr/share/bin     && dflt=/usr/share/bin
8043         $test -d /usr/local/script  && dflt=/usr/local/script
8044         $test -d /usr/local/scripts && dflt=/usr/local/scripts
8045         $test -d $prefixexp/script  && dflt=$prefixexp/script
8046         set dflt
8047         eval $prefixup
8048         ;;
8049 *)  dflt="$scriptdir"
8050         ;;
8051 esac
8052 $cat <<EOM
8053  
8054 Some installations have a separate directory just for executable scripts so
8055 that they can mount it across multiple architectures but keep the scripts in
8056 one spot.  You might, for example, have a subdirectory of /usr/share for this.
8057 Or you might just lump your scripts in with all your other executables.
8058  
8059 EOM
8060 fn=d~
8061 rp='Where do you keep publicly executable scripts?'
8062 . ./getfile
8063 if $test "X$ansexp" != "X$scriptdirexp"; then
8064         installscript=''
8065 fi
8066 scriptdir="$ans"
8067 scriptdirexp="$ansexp"
8068 : Change installation prefix, if necessary.
8069 if $test X"$prefix" != X"$installprefix"; then
8070         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
8071 else
8072         installscript="$scriptdirexp"
8073 fi
8074
8075 : determine where add-on public executables go
8076 case "$sitebin" in
8077 '')     dflt=$siteprefix/bin ;;
8078 *)      dflt=$sitebin ;;
8079 esac
8080 fn=d~
8081 rp='Pathname where the add-on public executables should be installed?'
8082 . ./getfile
8083 sitebin="$ans"
8084 sitebinexp="$ansexp"
8085 : Change installation prefix, if necessary.
8086 if $test X"$prefix" != X"$installprefix"; then
8087         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
8088 else
8089         installsitebin="$sitebinexp"
8090 fi
8091
8092 : define an is-a-typedef? function
8093 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8094 case "$inclist" in
8095 "") inclist="sys/types.h";;
8096 esac;
8097 eval "varval=\$$var";
8098 case "$varval" in
8099 "")
8100         $rm -f temp.c;
8101         for inc in $inclist; do
8102                 echo "#include <$inc>" >>temp.c;
8103         done;
8104         echo "#ifdef $type" >> temp.c;
8105         echo "printf(\"We have $type\");" >> temp.c;
8106         echo "#endif" >> temp.c;
8107         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8108         if $contains $type temp.E >/dev/null 2>&1; then
8109                 eval "$var=\$type";
8110         else
8111                 eval "$var=\$def";
8112         fi;
8113         $rm -f temp.?;;
8114 *) eval "$var=\$varval";;
8115 esac'
8116
8117 : define an is-a-typedef? function that prompts if the type is not available.
8118 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8119 case "$inclist" in
8120 "") inclist="sys/types.h";;
8121 esac;
8122 eval "varval=\$$var";
8123 case "$varval" in
8124 "")
8125         $rm -f temp.c;
8126         for inc in $inclist; do
8127                 echo "#include <$inc>" >>temp.c;
8128         done;
8129         echo "#ifdef $type" >> temp.c;
8130         echo "printf(\"We have $type\");" >> temp.c;
8131         echo "#endif" >> temp.c;
8132         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8133         echo " " ;
8134         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
8135         if $contains $type temp.E >/dev/null 2>&1; then
8136                 echo "$type found." >&4;
8137                 eval "$var=\$type";
8138         else
8139                 echo "$type NOT found." >&4;
8140                 dflt="$def";
8141                 . ./myread ;
8142                 eval "$var=\$ans";
8143         fi;
8144         $rm -f temp.?;;
8145 *) eval "$var=\$varval";;
8146 esac'
8147
8148 : see what type lseek is declared as in the kernel
8149 rp="What is the type used for lseek's offset on this system?"
8150 set off_t lseektype long stdio.h sys/types.h
8151 eval $typedef_ask
8152
8153 echo " "
8154 echo "Checking to see how big your file offsets are..." >&4
8155 $cat >try.c <<EOCP
8156 #include <sys/types.h>
8157 #include <stdio.h>
8158 int main()
8159 {
8160     printf("%d\n", (int)sizeof($lseektype));
8161     return(0); 
8162 }
8163 EOCP
8164 set try
8165 if eval $compile_ok; then
8166         lseeksize=`$run ./try`
8167         echo "Your file offsets are $lseeksize bytes long."
8168 else
8169         dflt=$longsize
8170         echo " "
8171         echo "(I can't seem to compile the test program.  Guessing...)"
8172         rp="What is the size of your file offsets (in bytes)?"
8173         . ./myread
8174         lseeksize="$ans"
8175 fi
8176 $rm -f try.c try
8177
8178 : see what type file positions are declared as in the library
8179 rp="What is the type for file position used by fsetpos()?"
8180 set fpos_t fpostype long stdio.h sys/types.h
8181 eval $typedef_ask
8182
8183 echo " "
8184 case "$fpostype" in
8185 *_t) zzz="$fpostype"    ;;
8186 *)   zzz="fpos_t"       ;;
8187 esac
8188 echo "Checking the size of $zzz..." >&4 
8189 cat > try.c <<EOCP
8190 #include <sys/types.h>
8191 #include <stdio.h>
8192 int main() {
8193     printf("%d\n", (int)sizeof($fpostype));
8194     exit(0);
8195 }
8196 EOCP
8197 set try
8198 if eval $compile_ok; then
8199         yyy=`$run ./try`
8200         case "$yyy" in
8201         '')     fpossize=4
8202                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8203                 ;;
8204         *)      fpossize=$yyy
8205                 echo "Your $zzz is $fpossize bytes long."
8206                 ;;
8207         esac
8208 else
8209         dflt="$longsize"
8210         echo " " >&4
8211         echo "(I can't compile the test program.  Guessing...)" >&4
8212         rp="What is the size of your file positions (in bytes)?"
8213         . ./myread
8214         fpossize="$ans"
8215 fi
8216
8217
8218
8219 # Backward compatibility (uselfs is deprecated).
8220 case "$uselfs" in
8221 "$define"|true|[yY]*)
8222         cat <<EOM >&4
8223
8224 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
8225 EOM
8226         uselargefiles="$define"
8227         ;;
8228 esac                          
8229
8230 case "$lseeksize:$fpossize" in
8231 8:8) cat <<EOM
8232
8233 You can have files larger than 2 gigabytes.
8234 EOM
8235    val="$define" ;;
8236 *)    case "$uselargefiles" in
8237    "$undef"|false|[nN]*) dflt='n' ;;
8238    *)   dflt='y' ;;
8239    esac
8240    cat <<EOM
8241
8242 Perl can be built to understand large files (files larger than 2 gigabytes)
8243 on some systems.  To do so, Configure can be run with -Duselargefiles.
8244
8245 If this doesn't make any sense to you, just accept the default '$dflt'.
8246 EOM
8247    rp='Try to understand large files, if available?'
8248    . ./myread
8249    case "$ans" in
8250    y|Y)         val="$define" ;;
8251    *)           val="$undef"  ;;
8252    esac
8253    ;;
8254 esac
8255 set uselargefiles
8256 eval $setvar
8257 case "$uselargefiles" in
8258 "$define")
8259 : Look for a hint-file generated 'call-back-unit'.  If the
8260 : user has specified that a large files perl is to be built,
8261 : we may need to set or change some other defaults.
8262         if $test -f uselargefiles.cbu; then
8263                 echo "Your platform has some specific hints for large file builds, using them..."
8264                 . ./uselargefiles.cbu
8265                 echo " "
8266                 echo "Rechecking to see how big your file offsets are..." >&4
8267                 $cat >try.c <<EOCP
8268 #include <sys/types.h>
8269 #include <stdio.h>
8270 int main()
8271 {
8272     printf("%d\n", (int)sizeof($lseektype));
8273     return(0); 
8274 }
8275 EOCP
8276                 set try
8277                 if eval $compile_ok; then
8278                         lseeksize=`$run ./try`
8279                         $echo "Your file offsets are now $lseeksize bytes long."
8280                 else
8281                         dflt="$lseeksize"
8282                         echo " "
8283                         echo "(I can't seem to compile the test program.  Guessing...)"
8284                         rp="What is the size of your file offsets (in bytes)?"
8285                         . ./myread
8286                         lseeksize="$ans"
8287                 fi
8288                 case "$fpostype" in
8289                 *_t) zzz="$fpostype"    ;;
8290                 *)   zzz="fpos_t"       ;;
8291                 esac
8292                 $echo $n "Rechecking the size of $zzz...$c" >&4 
8293                 $cat > try.c <<EOCP
8294 #include <sys/types.h>
8295 #include <stdio.h>
8296 int main() {
8297     printf("%d\n", (int)sizeof($fpostype));
8298     exit(0);
8299 }
8300 EOCP
8301                 set try
8302                 if eval $compile_ok; then
8303                         yyy=`$run ./try`
8304                         dflt="$lseeksize"
8305                         case "$yyy" in
8306                         '')     echo " "
8307                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8308                                 ;;
8309                         *)      fpossize=$yyy
8310                                 echo " $fpossize bytes." >&4
8311                                 ;;
8312                         esac
8313                 else
8314                         dflt="$fpossize"
8315                         echo " "
8316                         echo "(I can't compile the test program.  Guessing...)" >&4
8317                         rp="What is the size of your file positions (in bytes)?"
8318                         . ./myread
8319                         fpossize="$ans"
8320                 fi
8321                 $rm -f try.c try
8322         fi
8323         ;;
8324 esac
8325
8326 case "$vendorprefix" in
8327 '')     d_vendorbin="$undef"
8328         vendorbin=''
8329         vendorbinexp=''
8330         ;;
8331 *)      d_vendorbin="$define"
8332         : determine where vendor-supplied executables go.
8333         case "$vendorbin" in
8334         '') dflt=$vendorprefix/bin ;;
8335         *)      dflt="$vendorbin" ;;
8336         esac
8337         fn=d~+
8338         rp='Pathname for the vendor-supplied executables directory?'
8339         . ./getfile
8340         vendorbin="$ans"
8341         vendorbinexp="$ansexp"
8342         ;;
8343 esac
8344 : Change installation prefix, if necessary.
8345 if $test X"$prefix" != X"$installprefix"; then
8346         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
8347 else
8348         installvendorbin="$vendorbinexp"
8349 fi
8350
8351 : see if qgcvt exists
8352 set qgcvt d_qgcvt
8353 eval $inlibc
8354
8355 echo " "
8356
8357 if $test X"$d_longdbl" = X"$define"; then
8358
8359 echo "Checking how to print long doubles..." >&4
8360
8361 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
8362         $cat >try.c <<'EOCP'
8363 #include <sys/types.h>
8364 #include <stdio.h>
8365 int main() {
8366   double d = 123.456;
8367   printf("%.3f\n", d);
8368 }
8369 EOCP
8370         set try
8371         if eval $compile; then
8372                 yyy=`$run ./try`
8373                 case "$yyy" in
8374                 123.456)
8375                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
8376                         sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
8377                         echo "We will use %f."
8378                         ;;
8379                 esac
8380         fi
8381 fi
8382
8383 if $test X"$sPRIfldbl" = X; then
8384         $cat >try.c <<'EOCP'
8385 #include <sys/types.h>
8386 #include <stdio.h>
8387 int main() {
8388   long double d = 123.456;
8389   printf("%.3Lf\n", d);
8390 }
8391 EOCP
8392         set try
8393         if eval $compile; then
8394                 yyy=`$run ./try`
8395                 case "$yyy" in
8396                 123.456)
8397                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
8398                         sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
8399                         echo "We will use %Lf."
8400                         ;;
8401                 esac
8402         fi
8403 fi
8404
8405 if $test X"$sPRIfldbl" = X; then
8406         $cat >try.c <<'EOCP'
8407 #include <sys/types.h>
8408 #include <stdio.h>
8409 int main() {
8410   long double d = 123.456;
8411   printf("%.3llf\n", d);
8412 }
8413 EOCP
8414         set try
8415         if eval $compile; then
8416                 yyy=`$run ./try`
8417                 case "$yyy" in
8418                 123.456)
8419                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
8420                         sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
8421                         echo "We will use %llf."
8422                         ;;
8423                 esac
8424         fi
8425 fi
8426
8427 if $test X"$sPRIfldbl" = X; then
8428         $cat >try.c <<'EOCP'
8429 #include <sys/types.h>
8430 #include <stdio.h>
8431 int main() {
8432   long double d = 123.456;
8433   printf("%.3lf\n", d);
8434 }
8435 EOCP
8436         set try
8437         if eval $compile; then
8438                 yyy=`$run ./try`
8439                 case "$yyy" in
8440                 123.456)
8441                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
8442                         sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
8443                         echo "We will use %lf."
8444                         ;;
8445                 esac
8446         fi
8447 fi
8448
8449 if $test X"$sPRIfldbl" = X; then
8450         echo "Cannot figure out how to print long doubles." >&4
8451 else
8452         sSCNfldbl=$sPRIfldbl    # expect consistency
8453 fi
8454
8455 $rm -f try try.*
8456
8457 fi # d_longdbl
8458
8459 case "$sPRIfldbl" in
8460 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
8461         d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; 
8462         d_SCNfldbl="$undef";
8463         ;;
8464 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
8465         d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; 
8466         d_SCNfldbl="$define";
8467         ;;
8468 esac
8469
8470 : Check how to convert floats to strings.
8471 echo " "
8472 echo "Checking for an efficient way to convert floats to strings."
8473 echo " " > try.c
8474 case "$uselongdouble" in
8475 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
8476 esac
8477 case "$d_longdbl" in
8478 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
8479 esac
8480 case "$d_PRIgldbl" in
8481 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
8482 esac
8483 $cat >>try.c <<EOP
8484 #ifdef TRY_gconvert
8485 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
8486 char *myname = "gconvert";
8487 #endif
8488 #ifdef TRY_gcvt
8489 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
8490 char *myname = "gcvt";
8491 #endif
8492 #ifdef TRY_qgcvt
8493 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
8494 char *myname = "qgcvt";
8495 #define DOUBLETYPE long double
8496 #endif
8497 #ifdef TRY_sprintf
8498 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
8499 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
8500 #else
8501 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
8502 #endif
8503 char *myname = "sprintf";
8504 #endif
8505
8506 #ifndef DOUBLETYPE
8507 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
8508 #define DOUBLETYPE long double
8509 #else
8510 #define DOUBLETYPE double
8511 #endif
8512 #endif
8513
8514 #include <stdio.h>
8515
8516 #define I_STDLIB $i_stdlib
8517 #ifdef I_STDLIB
8518 #include <stdlib.h>
8519 #endif
8520
8521 int
8522 checkit(expect, got)
8523 char *expect;
8524 char *got;
8525 {
8526     if (strcmp(expect, got)) {
8527                 printf("%s oddity:  Expected %s, got %s\n",
8528                         myname, expect, got);
8529                 exit(1);
8530         }
8531 }
8532
8533 int main()
8534
8535         char buf[64]; 
8536         buf[63] = '\0';
8537
8538         /* This must be 1st test on (which?) platform */
8539         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
8540         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
8541         checkit("0.1", buf);
8542
8543         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
8544         checkit("1", buf);
8545
8546         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
8547         checkit("1.1", buf);
8548
8549         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
8550         checkit("1.01", buf);
8551
8552         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
8553         checkit("1.001", buf);
8554
8555         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
8556         checkit("1.0001", buf);
8557
8558         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
8559         checkit("1.00001", buf);
8560
8561         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
8562         checkit("1.000001", buf);
8563
8564         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
8565         checkit("0", buf);
8566
8567         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
8568         checkit("-1", buf);
8569
8570         /* Some Linux gcvt's give 1.e+5 here. */
8571         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
8572         checkit("100000", buf);
8573         
8574         /* Some Linux gcvt's give -1.e+5 here. */
8575         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
8576         checkit("-100000", buf);
8577
8578         Gconvert((DOUBLETYPE)123.456, 8, 0, buf); 
8579         checkit("123.456", buf);
8580
8581         /* Testing of 1e+129 in bigintpm.t must not get extra '.' here. */
8582         Gconvert((DOUBLETYPE)1e30, 8, 0, buf);
8583         if (strlen(buf) > 5)
8584             checkit("1e+030", buf); /* for Microsoft */
8585         else
8586             checkit("1e+30", buf);
8587
8588         exit(0);
8589 }
8590 EOP
8591 case "$d_Gconvert" in
8592 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
8593 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
8594 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
8595 *) xxx_list='gconvert gcvt sprintf' ;;
8596 esac
8597
8598 case "$d_longdbl$uselongdouble$d_PRIgldbl" in
8599 "$define$define$define")
8600     # for long doubles prefer first qgcvt, then sprintf
8601     xxx_list="`echo $xxx_list|sed s/sprintf//`" 
8602     xxx_list="sprintf $xxx_list"
8603     case "$d_qgcvt" in
8604     "$define") xxx_list="qgcvt $xxx_list" ;;
8605     esac
8606     ;;
8607 esac
8608
8609 for xxx_convert in $xxx_list; do
8610         echo "Trying $xxx_convert..."
8611         $rm -f try try$_o
8612         set try -DTRY_$xxx_convert
8613         if eval $compile; then
8614                 echo "$xxx_convert() found." >&4
8615                 if $run ./try; then
8616                         echo "I'll use $xxx_convert to convert floats into a string." >&4
8617                         break;
8618                 else
8619                         echo "...But $xxx_convert didn't work as I expected."
8620                 fi
8621         else
8622                 echo "$xxx_convert NOT found." >&4
8623         fi
8624 done
8625         
8626 case "$xxx_convert" in
8627 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
8628 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
8629 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
8630 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
8631    "$define$define$define")
8632       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
8633    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
8634    esac
8635    ;;  
8636 esac
8637
8638 : see if _fwalk exists
8639 set fwalk d__fwalk
8640 eval $inlibc
8641
8642 : Initialize h_fcntl
8643 h_fcntl=false
8644
8645 : Initialize h_sysfile
8646 h_sysfile=false
8647
8648 : access call always available on UNIX
8649 set access d_access
8650 eval $inlibc
8651
8652 : locate the flags for 'access()'
8653 case "$d_access" in
8654 "$define")
8655         echo " "
8656         $cat >access.c <<'EOCP'
8657 #include <sys/types.h>
8658 #ifdef I_FCNTL
8659 #include <fcntl.h>
8660 #endif
8661 #ifdef I_SYS_FILE
8662 #include <sys/file.h>
8663 #endif
8664 #ifdef I_UNISTD
8665 #include <unistd.h>
8666 #endif
8667 int main() {
8668         exit(R_OK);
8669 }
8670 EOCP
8671         : check sys/file.h first, no particular reason here
8672         if $test `./findhdr sys/file.h` && \
8673                 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
8674                 h_sysfile=true;
8675                 echo "<sys/file.h> defines the *_OK access constants." >&4
8676         elif $test `./findhdr fcntl.h` && \
8677                 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
8678                 h_fcntl=true;
8679                 echo "<fcntl.h> defines the *_OK access constants." >&4
8680         elif $test `./findhdr unistd.h` && \
8681                 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
8682                 echo "<unistd.h> defines the *_OK access constants." >&4
8683         else
8684                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
8685         fi
8686         ;;
8687 esac
8688 $rm -f access*
8689
8690 : see if accessx exists
8691 set accessx d_accessx
8692 eval $inlibc
8693
8694 : see if alarm exists
8695 set alarm d_alarm
8696 eval $inlibc
8697
8698 : see if atolf exists
8699 set atolf d_atolf
8700 eval $inlibc
8701
8702 : see if atoll exists
8703 set atoll d_atoll
8704 eval $inlibc
8705
8706 : Look for GNU-cc style attribute checking
8707 echo " "
8708 echo "Checking whether your compiler can handle __attribute__ ..." >&4
8709 $cat >attrib.c <<'EOCP'
8710 #include <stdio.h>
8711 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
8712 EOCP
8713 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
8714         if $contains 'warning' attrib.out >/dev/null 2>&1; then
8715                 echo "Your C compiler doesn't fully support __attribute__."
8716                 val="$undef"
8717         else
8718                 echo "Your C compiler supports __attribute__."
8719                 val="$define"
8720         fi
8721 else
8722         echo "Your C compiler doesn't seem to understand __attribute__ at all."
8723         val="$undef"
8724 fi
8725 set d_attribut
8726 eval $setvar
8727 $rm -f attrib*
8728
8729 : see if bcmp exists
8730 set bcmp d_bcmp
8731 eval $inlibc
8732
8733 : see if bcopy exists
8734 set bcopy d_bcopy
8735 eval $inlibc
8736
8737 : see if this is a unistd.h system
8738 set unistd.h i_unistd
8739 eval $inhdr
8740
8741 : see if getpgrp exists
8742 set getpgrp d_getpgrp
8743 eval $inlibc
8744
8745 case "$d_getpgrp" in
8746 "$define")
8747         echo " "
8748         echo "Checking to see which flavor of getpgrp is in use..."
8749         $cat >try.c <<EOP
8750 #$i_unistd I_UNISTD
8751 #include <sys/types.h>
8752 #ifdef I_UNISTD
8753 #  include <unistd.h>
8754 #endif
8755 int main()
8756 {
8757         if (getuid() == 0) {
8758                 printf("(I see you are running Configure as super-user...)\n");
8759                 setuid(1);
8760         }
8761 #ifdef TRY_BSD_PGRP
8762         if (getpgrp(1) == 0)
8763                 exit(0);
8764 #else
8765         if (getpgrp() > 0)
8766                 exit(0);
8767 #endif
8768         exit(1);
8769 }
8770 EOP
8771         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8772                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
8773                 val="$define"
8774         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8775                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
8776                 val="$undef"
8777         else
8778                 echo "I can't seem to compile and run the test program."
8779                 if ./usg; then
8780                         xxx="a USG one, i.e. you use getpgrp()."
8781                 else
8782                         # SVR4 systems can appear rather BSD-ish.
8783                         case "$i_unistd" in
8784                         $undef)
8785                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
8786                                 val="$define"
8787                                 ;;
8788                         $define)
8789                                 xxx="probably a USG one, i.e. you use getpgrp()."
8790                                 val="$undef"
8791                                 ;;
8792                         esac
8793                 fi
8794                 echo "Assuming your getpgrp is $xxx" >&4
8795         fi
8796         ;;
8797 *) val="$undef";;
8798 esac
8799 set d_bsdgetpgrp
8800 eval $setvar
8801 $rm -f try try.*
8802
8803 : see if setpgrp exists
8804 set setpgrp d_setpgrp
8805 eval $inlibc
8806
8807 case "$d_setpgrp" in
8808 "$define")
8809         echo " "
8810         echo "Checking to see which flavor of setpgrp is in use..."
8811         $cat >try.c <<EOP
8812 #$i_unistd I_UNISTD
8813 #include <sys/types.h>
8814 #ifdef I_UNISTD
8815 #  include <unistd.h>
8816 #endif
8817 int main()
8818 {
8819         if (getuid() == 0) {
8820                 printf("(I see you are running Configure as super-user...)\n");
8821                 setuid(1);
8822         }
8823 #ifdef TRY_BSD_PGRP
8824         if (-1 == setpgrp(1, 1))
8825                 exit(0);
8826 #else
8827         if (setpgrp() != -1)
8828                 exit(0);
8829 #endif
8830         exit(1);
8831 }
8832 EOP
8833         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8834                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
8835                 val="$define"
8836         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8837                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
8838                 val="$undef"
8839         else
8840                 echo "(I can't seem to compile and run the test program.)"
8841                 if ./usg; then
8842                         xxx="a USG one, i.e. you use setpgrp()."
8843                 else
8844                         # SVR4 systems can appear rather BSD-ish.
8845                         case "$i_unistd" in
8846                         $undef)
8847                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
8848                                 val="$define"
8849                                 ;;
8850                         $define)
8851                                 xxx="probably a USG one, i.e. you use setpgrp()."
8852                                 val="$undef"
8853                                 ;;
8854                         esac
8855                 fi
8856                 echo "Assuming your setpgrp is $xxx" >&4
8857         fi
8858         ;;
8859 *) val="$undef";;
8860 esac
8861 set d_bsdsetpgrp
8862 eval $setvar
8863 $rm -f try try.*
8864 : see if bzero exists
8865 set bzero d_bzero
8866 eval $inlibc
8867
8868 : see if signal is declared as pointer to function returning int or void
8869 echo " "
8870 xxx=`./findhdr signal.h`
8871 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
8872 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
8873         echo "You have int (*signal())() instead of void." >&4
8874         val="$undef"
8875 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
8876         echo "You have void (*signal())()." >&4
8877         val="$define"
8878 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
8879         echo "You have int (*signal())() instead of void." >&4
8880         val="$undef"
8881 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
8882         echo "You have void (*signal())()." >&4
8883         val="$define"
8884 else
8885         case "$d_voidsig" in
8886         '')
8887         echo "I can't determine whether signal handler returns void or int..." >&4
8888                 dflt=void
8889                 rp="What type does your signal handler return?"
8890                 . ./myread
8891                 case "$ans" in
8892                 v*) val="$define";;
8893                 *) val="$undef";;
8894                 esac;;
8895         "$define")
8896                 echo "As you already told me, signal handler returns void." >&4
8897                 val="$define"
8898                 ;;
8899         *)      echo "As you already told me, signal handler returns int." >&4
8900                 val="$undef"
8901                 ;;
8902         esac
8903 fi
8904 set d_voidsig
8905 eval $setvar
8906 case "$d_voidsig" in
8907 "$define") signal_t="void";;
8908 *) signal_t="int";;
8909 esac
8910 $rm -f $$.tmp
8911
8912 : check for ability to cast large floats to 32-bit ints.
8913 echo " "
8914 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
8915 if $test "$intsize" -ge 4; then
8916         xxx=int
8917 else
8918         xxx=long
8919 fi
8920 $cat >try.c <<EOCP
8921 #include <stdio.h>
8922 #include <sys/types.h>
8923 #include <signal.h>
8924 $signal_t blech(s) int s; { exit(3); }
8925 int main()
8926 {
8927         $xxx i32;
8928         double f, g;
8929         int result = 0;
8930         char str[16];
8931         signal(SIGFPE, blech);
8932
8933         /* Don't let compiler optimize the test away.  Store the number 
8934            in a writable string for gcc to pass to sscanf under HP/UX.
8935         */
8936         sprintf(str, "2147483647");
8937         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
8938         g = 10 * f;
8939         i32  = ($xxx) g;
8940
8941         /* x86 processors will probably give 0x8000 0000, which is a
8942        sign change.  We don't want that.  We want to mimic SPARC
8943            behavior here, which is to preserve the sign and give
8944            back 0x7fff ffff.
8945         */
8946         if (i32 != ($xxx) f)
8947                 result |= 1;
8948         exit(result);
8949 }
8950 EOCP
8951 set try
8952 if eval $compile_ok; then
8953         $run ./try
8954         yyy=$?
8955 else
8956         echo "(I can't seem to compile the test program--assuming it can't)"
8957         yyy=1
8958 fi
8959 case "$yyy" in
8960 0)      val="$define"
8961         echo "Yup, it can."
8962         ;;
8963 *)      val="$undef"
8964         echo "Nope, it can't."
8965         ;;
8966 esac
8967 set d_casti32
8968 eval $setvar
8969 $rm -f try try.*
8970
8971 : check for ability to cast negative floats to unsigned
8972 echo " "
8973 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
8974 $cat >try.c <<EOCP
8975 #include <stdio.h>
8976 #include <sys/types.h>
8977 #include <signal.h>
8978 $signal_t blech(s) int s; { exit(7); }
8979 $signal_t blech_in_list(s) int s; { exit(4); }
8980 unsigned long dummy_long(p) unsigned long p; { return p; }
8981 unsigned int dummy_int(p) unsigned int p; { return p; }
8982 unsigned short dummy_short(p) unsigned short p; { return p; }
8983 int main()
8984 {
8985         double f;
8986         unsigned long along;
8987         unsigned int aint;
8988         unsigned short ashort;
8989         int result = 0;
8990         char str[16];
8991         
8992         /* Frustrate gcc-2.7.2's optimizer which failed this test with
8993            a direct f = -123. assignment.  gcc-2.8.0 reportedly
8994            optimized the whole file away
8995         */
8996         /* Store the number in a writable string for gcc to pass to 
8997            sscanf under HP/UX.
8998         */
8999         sprintf(str, "-123");
9000         sscanf(str, "%lf", &f);  /* f = -123.; */
9001
9002         signal(SIGFPE, blech);
9003         along = (unsigned long)f;
9004         aint = (unsigned int)f;
9005         ashort = (unsigned short)f;
9006         if (along != (unsigned long)-123)
9007                 result |= 1;
9008         if (aint != (unsigned int)-123)
9009                 result |= 1;
9010         if (ashort != (unsigned short)-123)
9011                 result |= 1;
9012         sprintf(str, "1073741824.");
9013         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
9014         f = f + f;
9015         along = 0;
9016         along = (unsigned long)f;
9017         if (along != 0x80000000)
9018                 result |= 2;
9019         f -= 1.;
9020         along = 0;
9021         along = (unsigned long)f;
9022         if (along != 0x7fffffff)
9023                 result |= 1;
9024         f += 2.;
9025         along = 0;
9026         along = (unsigned long)f;
9027         if (along != 0x80000001)
9028                 result |= 2;
9029         if (result)
9030                 exit(result);
9031         signal(SIGFPE, blech_in_list);
9032         sprintf(str, "123.");
9033         sscanf(str, "%lf", &f);  /* f = 123.; */
9034         along = dummy_long((unsigned long)f);
9035         aint = dummy_int((unsigned int)f);
9036         ashort = dummy_short((unsigned short)f);
9037         if (along != (unsigned long)123)
9038                 result |= 4;
9039         if (aint != (unsigned int)123)
9040                 result |= 4;
9041         if (ashort != (unsigned short)123)
9042                 result |= 4;
9043         exit(result);
9044
9045 }
9046 EOCP
9047 set try
9048 if eval $compile_ok; then
9049         $run ./try
9050         castflags=$?
9051 else
9052         echo "(I can't seem to compile the test program--assuming it can't)"
9053         castflags=7
9054 fi
9055 case "$castflags" in
9056 0)      val="$define"
9057         echo "Yup, it can."
9058         ;;
9059 *)      val="$undef"
9060         echo "Nope, it can't."
9061         ;;
9062 esac
9063 set d_castneg
9064 eval $setvar
9065 $rm -f try.*
9066
9067 : see if vprintf exists
9068 echo " "
9069 if set vprintf val -f d_vprintf; eval $csym; $val; then
9070         echo 'vprintf() found.' >&4
9071         val="$define"
9072         $cat >try.c <<'EOF'
9073 #include <varargs.h>
9074
9075 int main() { xxx("foo"); }
9076
9077 xxx(va_alist)
9078 va_dcl
9079 {
9080         va_list args;
9081         char buf[10];
9082
9083         va_start(args);
9084         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
9085 }
9086 EOF
9087         set try
9088         if eval $compile && $run ./try; then
9089                 echo "Your vsprintf() returns (int)." >&4
9090                 val2="$undef"
9091         else
9092                 echo "Your vsprintf() returns (char*)." >&4
9093                 val2="$define"
9094         fi
9095 else
9096         echo 'vprintf() NOT found.' >&4
9097                 val="$undef"
9098                 val2="$undef"
9099 fi
9100 $rm -f try try.*
9101 set d_vprintf
9102 eval $setvar
9103 val=$val2
9104 set d_charvspr
9105 eval $setvar
9106
9107 : see if chown exists
9108 set chown d_chown
9109 eval $inlibc
9110
9111 : see if chroot exists
9112 set chroot d_chroot
9113 eval $inlibc
9114
9115 : see if chsize exists
9116 set chsize d_chsize
9117 eval $inlibc
9118
9119 : see if class exists
9120 set class d_class
9121 eval $inlibc
9122
9123 hasstruct='varname=$1; struct=$2; shift; shift;
9124 while $test $# -ge 2; do
9125         case "$1" in
9126         $define) echo "#include <$2>";;
9127         esac ;
9128     shift 2;
9129 done > try.c;
9130 echo "int main () { struct $struct foo; }" >> try.c;
9131 set try;
9132 if eval $compile; then
9133         val="$define";
9134 else
9135         val="$undef";
9136 fi;
9137 set $varname;
9138 eval $setvar;
9139 $rm -f try.c try.o'
9140
9141 : see if sys/types.h has to be included
9142 set sys/types.h i_systypes
9143 eval $inhdr
9144
9145 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
9146 while $test $# -ge 2; do
9147         case "$1" in
9148         $define) echo "#include <$2>";;
9149         esac ;
9150     shift 2;
9151 done > try.c;
9152 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
9153 set try;
9154 if eval $compile; then
9155         val="$define";
9156 else
9157         val="$undef";
9158 fi;
9159 set $varname;
9160 eval $setvar;
9161 $rm -f try.c try.o'
9162
9163 socketlib=''
9164 sockethdr=''
9165 : see whether socket exists
9166 echo " "
9167 $echo $n "Hmm... $c" >&4
9168 if set socket val -f d_socket; eval $csym; $val; then
9169         echo "Looks like you have Berkeley networking support." >&4
9170         d_socket="$define"
9171         if set setsockopt val -f; eval $csym; $val; then
9172                 d_oldsock="$undef"
9173         else
9174                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
9175                 d_oldsock="$define"
9176         fi
9177 else
9178         if $contains socklib libc.list >/dev/null 2>&1; then
9179                 echo "Looks like you have Berkeley networking support." >&4
9180                 d_socket="$define"
9181                 : we will have to assume that it supports the 4.2 BSD interface
9182                 d_oldsock="$undef"
9183         else
9184                 echo "You don't have Berkeley networking in libc$_a..." >&4
9185                 if test "X$d_socket" = "X$define"; then
9186                    echo "...but you seem to believe that you have sockets." >&4
9187                 else
9188                         for net in net socket
9189                         do
9190                                 if test -f /usr/lib/lib$net$_a; then
9191                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
9192                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
9193                                         if $contains socket libc.list >/dev/null 2>&1; then
9194                                                 d_socket="$define"
9195                                                 socketlib="-l$net"
9196                                                 case "$net" in
9197                                                 net)
9198                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
9199                                                         sockethdr="-I/usr/netinclude"
9200                                                         ;;
9201                                                 esac
9202                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
9203                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
9204                                                         d_oldsock="$undef"
9205                                                 else
9206                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
9207                                                         d_oldsock="$define"
9208                                                 fi
9209                                                 break
9210                                         fi
9211                                 fi
9212                         done
9213                         if test "X$d_socket" != "X$define"; then
9214                            echo "or anywhere else I see." >&4
9215                            d_socket="$undef"
9216                            d_oldsock="$undef"
9217                         fi
9218                 fi
9219         fi
9220 fi
9221
9222 : see if socketpair exists
9223 set socketpair d_sockpair
9224 eval $inlibc
9225
9226
9227 echo " "
9228 echo "Checking the availability of certain socket constants..." >& 4
9229 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
9230         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
9231         $cat >try.c <<EOF
9232 #include <sys/types.h>
9233 #include <sys/socket.h>
9234 int main() {
9235     int i = $ENUM;
9236 }
9237 EOF
9238         val="$undef"
9239         set try; if eval $compile; then
9240                 val="$define"
9241         fi
9242         set d_${enum}; eval $setvar
9243         $rm -f try.c try
9244 done
9245
9246 : see if this is a sys/uio.h system
9247 set sys/uio.h i_sysuio
9248 eval $inhdr
9249
9250
9251 echo " "
9252 echo "Checking to see if your system supports struct cmsghdr..." >&4
9253 set d_cmsghdr_s cmsghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
9254 eval $hasstruct
9255 case "$d_cmsghdr_s" in
9256 "$define")      echo "Yes, it does."   ;;
9257 *)              echo "No, it doesn't." ;;
9258 esac
9259
9260
9261 : check for const keyword
9262 echo " "
9263 echo 'Checking to see if your C compiler knows about "const"...' >&4
9264 $cat >const.c <<'EOCP'
9265 typedef struct spug { int drokk; } spug;
9266 int main()
9267 {
9268         const char *foo;
9269         const spug y;
9270 }
9271 EOCP
9272 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
9273         val="$define"
9274         echo "Yup, it does."
9275 else
9276         val="$undef"
9277         echo "Nope, it doesn't."
9278 fi
9279 set d_const
9280 eval $setvar
9281
9282 : see if crypt exists
9283 echo " "
9284 if set crypt val -f d_crypt; eval $csym; $val; then
9285         echo 'crypt() found.' >&4
9286         val="$define"
9287         cryptlib=''
9288 else
9289         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
9290         if $test -z "$cryptlib"; then
9291                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
9292         else
9293                 cryptlib=-lcrypt
9294         fi
9295         if $test -z "$cryptlib"; then
9296                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
9297         else
9298                 cryptlib=-lcrypt
9299         fi
9300         if $test -z "$cryptlib"; then
9301                 cryptlib=`./loc libcrypt$_a "" $libpth`
9302         else
9303                 cryptlib=-lcrypt
9304         fi
9305         if $test -z "$cryptlib"; then
9306                 echo 'crypt() NOT found.' >&4
9307                 val="$undef"
9308         else
9309                 val="$define"
9310         fi
9311 fi
9312 set d_crypt
9313 eval $setvar
9314
9315 : get csh whereabouts
9316 case "$csh" in
9317 'csh') val="$undef" ;;
9318 *) val="$define" ;;
9319 esac
9320 set d_csh
9321 eval $setvar
9322 : Respect a hint or command line value for full_csh.
9323 case "$full_csh" in
9324 '') full_csh=$csh ;;
9325 esac
9326
9327 : see if cuserid exists
9328 set cuserid d_cuserid
9329 eval $inlibc
9330
9331 : see if this is a limits.h system
9332 set limits.h i_limits
9333 eval $inhdr
9334
9335 : see if this is a float.h system
9336 set float.h i_float
9337 eval $inhdr
9338
9339 : See if number of significant digits in a double precision number is known
9340 echo " "
9341 $cat >dbl_dig.c <<EOM
9342 #$i_limits I_LIMITS
9343 #$i_float I_FLOAT
9344 #ifdef I_LIMITS
9345 #include <limits.h>
9346 #endif
9347 #ifdef I_FLOAT
9348 #include <float.h>
9349 #endif
9350 #ifdef DBL_DIG
9351 printf("Contains DBL_DIG");
9352 #endif
9353 EOM
9354 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
9355 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
9356         echo "DBL_DIG found." >&4
9357         val="$define"
9358 else
9359         echo "DBL_DIG NOT found." >&4
9360         val="$undef"
9361 fi
9362 $rm -f dbl_dig.?
9363 set d_dbl_dig
9364 eval $setvar
9365
9366 hasproto='varname=$1; func=$2; shift; shift;
9367 while $test $# -ge 2; do
9368         case "$1" in
9369         $define) echo "#include <$2>";;
9370         esac ;
9371     shift 2;
9372 done > try.c;
9373 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
9374 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
9375         echo "$func() prototype found.";
9376         val="$define";
9377 else
9378         echo "$func() prototype NOT found.";
9379         val="$undef";
9380 fi;
9381 set $varname;
9382 eval $setvar;
9383 $rm -f try.c tryout.c'
9384
9385 : see if dbm.h is available
9386 : see if dbmclose exists
9387 set dbmclose d_dbmclose
9388 eval $inlibc
9389
9390 case "$d_dbmclose" in
9391 $define)
9392         set dbm.h i_dbm
9393         eval $inhdr
9394         case "$i_dbm" in
9395         $define)
9396                 val="$undef"
9397                 set i_rpcsvcdbm
9398                 eval $setvar
9399                 ;;
9400         *)      set rpcsvc/dbm.h i_rpcsvcdbm
9401                 eval $inhdr
9402                 ;;
9403         esac
9404         ;;
9405 *)      echo "We won't be including <dbm.h>"
9406         val="$undef"
9407         set i_dbm
9408         eval $setvar
9409         val="$undef"
9410         set i_rpcsvcdbm
9411         eval $setvar
9412         ;;
9413 esac
9414
9415 : see if prototype for dbminit is available
9416 echo " "
9417 set d_dbminitproto dbminit $i_dbm dbm.h
9418 eval $hasproto
9419
9420 : see if difftime exists
9421 set difftime d_difftime
9422 eval $inlibc
9423
9424 : see if this is a dirent system
9425 echo " "
9426 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
9427         val="$define"
9428         echo "<dirent.h> found." >&4
9429 else
9430         val="$undef"
9431         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
9432                 echo "<sys/dir.h> found." >&4
9433                 echo " "
9434         else
9435                 xinc=`./findhdr sys/ndir.h`
9436         fi
9437         echo "<dirent.h> NOT found." >&4
9438 fi
9439 set i_dirent
9440 eval $setvar
9441
9442 : Look for type of directory structure.
9443 echo " "
9444 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9445
9446 case "$direntrytype" in
9447 ''|' ')
9448         case "$i_dirent" in
9449         $define) guess1='struct dirent' ;;
9450         *) guess1='struct direct'  ;;
9451         esac
9452         ;;
9453 *)      guess1="$direntrytype"
9454         ;;
9455 esac
9456
9457 case "$guess1" in
9458 'struct dirent') guess2='struct direct' ;;
9459 *) guess2='struct dirent' ;;
9460 esac
9461                 
9462 if $contains "$guess1" try.c >/dev/null 2>&1; then
9463         direntrytype="$guess1"
9464         echo "Your directory entries are $direntrytype." >&4
9465 elif $contains "$guess2" try.c >/dev/null 2>&1; then
9466         direntrytype="$guess2"
9467         echo "Your directory entries seem to be $direntrytype." >&4
9468 else
9469         echo "I don't recognize your system's directory entries." >&4
9470         rp="What type is used for directory entries on this system?"
9471         dflt="$guess1"
9472         . ./myread
9473         direntrytype="$ans"
9474 fi
9475 $rm -f try.c
9476
9477
9478 : see if the directory entry stores field length
9479 echo " "
9480 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9481 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
9482         echo "Good, your directory entry keeps length information in d_namlen." >&4
9483         val="$define"
9484 else
9485         echo "Your directory entry does not know about the d_namlen field." >&4
9486         val="$undef"
9487 fi
9488 set d_dirnamlen
9489 eval $setvar
9490 $rm -f try.c
9491
9492 : see if dlerror exists
9493 xxx_runnm="$runnm"
9494 runnm=false
9495 set dlerror d_dlerror
9496 eval $inlibc
9497 runnm="$xxx_runnm"
9498
9499 : see if dlfcn is available
9500 set dlfcn.h i_dlfcn
9501 eval $inhdr
9502
9503 case "$usedl" in
9504 $define|y|true)
9505         $cat << EOM
9506
9507 On a few systems, the dynamically loaded modules that perl generates and uses
9508 will need a different extension than shared libs. The default will probably
9509 be appropriate.
9510
9511 EOM
9512         case "$dlext" in
9513         '')     dflt="$so" ;;
9514         *)      dflt="$dlext" ;;
9515         esac
9516         rp='What is the extension of dynamically loaded modules'
9517         . ./myread
9518         dlext="$ans"
9519         ;;
9520 *)
9521         dlext="none"
9522         ;;
9523 esac
9524
9525 : Check if dlsym need a leading underscore
9526 echo " "
9527 val="$undef"
9528
9529 case "$dlsrc" in
9530 dl_dlopen.xs)
9531         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
9532         $cat >dyna.c <<'EOM'
9533 fred () { }
9534 EOM
9535
9536 $cat >fred.c<<EOM
9537
9538 #include <stdio.h>
9539 #$i_dlfcn I_DLFCN
9540 #ifdef I_DLFCN
9541 #include <dlfcn.h>      /* the dynamic linker include file for SunOS/Solaris */
9542 #else
9543 #include <sys/types.h>
9544 #include <nlist.h>
9545 #include <link.h>
9546 #endif
9547
9548 extern int fred() ;
9549
9550 int main()
9551 {
9552     void * handle ;
9553     void * symbol ;
9554 #ifndef RTLD_LAZY
9555     int mode = 1 ;
9556 #else
9557     int mode = RTLD_LAZY ;
9558 #endif
9559     handle = dlopen("./dyna.$dlext", mode) ;
9560     if (handle == NULL) {
9561         printf ("1\n") ;
9562         fflush (stdout) ;
9563         exit(0);
9564     }
9565     symbol = dlsym(handle, "fred") ;
9566     if (symbol == NULL) {
9567         /* try putting a leading underscore */
9568         symbol = dlsym(handle, "_fred") ;
9569         if (symbol == NULL) {
9570             printf ("2\n") ;
9571             fflush (stdout) ;
9572             exit(0);
9573         }
9574         printf ("3\n") ;
9575     }
9576     else
9577         printf ("4\n") ;
9578     fflush (stdout) ;
9579     exit(0);
9580 }
9581 EOM
9582         : Call the object file tmp-dyna.o in case dlext=o.
9583         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
9584                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
9585                 $ld -o dyna.$dlext $ldflags $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && 
9586                 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1 && $to dyna.$dlext; then
9587                 xxx=`$run ./fred`
9588                 case $xxx in
9589                 1)      echo "Test program failed using dlopen." >&4
9590                         echo "Perhaps you should not use dynamic loading." >&4;;
9591                 2)      echo "Test program failed using dlsym." >&4
9592                         echo "Perhaps you should not use dynamic loading." >&4;;
9593                 3)      echo "dlsym needs a leading underscore" >&4
9594                         val="$define" ;;
9595                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
9596                 esac
9597         else
9598                 echo "I can't compile and run the test program." >&4
9599                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
9600         fi
9601         ;;
9602 esac
9603                 
9604 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
9605
9606 set d_dlsymun
9607 eval $setvar
9608
9609 : see if prototype for drand48 is available
9610 echo " "
9611 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
9612 eval $hasproto
9613
9614 : see if dup2 exists
9615 set dup2 d_dup2
9616 eval $inlibc
9617
9618 : see if eaccess exists
9619 set eaccess d_eaccess
9620 eval $inlibc
9621
9622 : see if endgrent exists
9623 set endgrent d_endgrent
9624 eval $inlibc
9625
9626 : see if endhostent exists
9627 set endhostent d_endhent
9628 eval $inlibc
9629
9630 : see if endnetent exists
9631 set endnetent d_endnent
9632 eval $inlibc
9633
9634 : see if endprotoent exists
9635 set endprotoent d_endpent
9636 eval $inlibc
9637
9638 : see if endpwent exists
9639 set endpwent d_endpwent
9640 eval $inlibc
9641
9642 : see if endservent exists
9643 set endservent d_endsent
9644 eval $inlibc
9645
9646 : Locate the flags for 'open()'
9647 echo " "
9648 $cat >try.c <<'EOCP'
9649 #include <sys/types.h>
9650 #ifdef I_FCNTL
9651 #include <fcntl.h>
9652 #endif
9653 #ifdef I_SYS_FILE
9654 #include <sys/file.h>
9655 #endif
9656 int main() {
9657         if(O_RDONLY);
9658 #ifdef O_TRUNC
9659         exit(0);
9660 #else
9661         exit(1);
9662 #endif
9663 }
9664 EOCP
9665 : check sys/file.h first to get FREAD on Sun
9666 if $test `./findhdr sys/file.h` && \
9667                 set try -DI_SYS_FILE && eval $compile; then
9668         h_sysfile=true;
9669         echo "<sys/file.h> defines the O_* constants..." >&4
9670         if $run ./try; then
9671                 echo "and you have the 3 argument form of open()." >&4
9672                 val="$define"
9673         else
9674                 echo "but not the 3 argument form of open().  Oh, well." >&4
9675                 val="$undef"
9676         fi
9677 elif $test `./findhdr fcntl.h` && \
9678                 set try -DI_FCNTL && eval $compile; then
9679         h_fcntl=true;
9680         echo "<fcntl.h> defines the O_* constants..." >&4
9681         if $run ./try; then
9682                 echo "and you have the 3 argument form of open()." >&4
9683                 val="$define"
9684         else
9685                 echo "but not the 3 argument form of open().  Oh, well." >&4
9686                 val="$undef"
9687         fi
9688 else
9689         val="$undef"
9690         echo "I can't find the O_* constant definitions!  You got problems." >&4
9691 fi
9692 set d_open3
9693 eval $setvar
9694 $rm -f try try.*
9695
9696 : see which of string.h or strings.h is needed
9697 echo " "
9698 strings=`./findhdr string.h`
9699 if $test "$strings" && $test -r "$strings"; then
9700         echo "Using <string.h> instead of <strings.h>." >&4
9701         val="$define"
9702 else
9703         val="$undef"
9704         strings=`./findhdr strings.h`
9705         if $test "$strings" && $test -r "$strings"; then
9706                 echo "Using <strings.h> instead of <string.h>." >&4
9707         else
9708                 echo "No string header found -- You'll surely have problems." >&4
9709         fi
9710 fi
9711 set i_string
9712 eval $setvar
9713 case "$i_string" in
9714 "$undef") strings=`./findhdr strings.h`;;
9715 *)        strings=`./findhdr string.h`;;
9716 esac
9717
9718 : check for non-blocking I/O stuff
9719 case "$h_sysfile" in
9720 true) echo "#include <sys/file.h>" > head.c;;
9721 *)
9722        case "$h_fcntl" in
9723        true) echo "#include <fcntl.h>" > head.c;;
9724        *) echo "#include <sys/fcntl.h>" > head.c;;
9725        esac
9726        ;;
9727 esac
9728 echo " "
9729 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
9730 case "$o_nonblock" in
9731 '')
9732         $cat head.c > try.c
9733         $cat >>try.c <<'EOCP'
9734 #include <stdio.h>
9735 #include <stdlib.h>
9736 int main() {
9737 #ifdef O_NONBLOCK
9738         printf("O_NONBLOCK\n");
9739         exit(0);
9740 #endif
9741 #ifdef O_NDELAY
9742         printf("O_NDELAY\n");
9743         exit(0);
9744 #endif
9745 #ifdef FNDELAY
9746         printf("FNDELAY\n");
9747         exit(0);
9748 #endif
9749         exit(0);
9750 }
9751 EOCP
9752         set try
9753         if eval $compile_ok; then
9754                 o_nonblock=`$run ./try`
9755                 case "$o_nonblock" in
9756                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
9757                 *) echo "Seems like we can use $o_nonblock.";;
9758                 esac
9759         else
9760                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
9761         fi
9762         ;;
9763 *) echo "Using $hint value $o_nonblock.";;
9764 esac
9765 $rm -f try try.* .out core
9766
9767 echo " "
9768 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
9769 case "$eagain" in
9770 '')
9771         $cat head.c > try.c
9772         $cat >>try.c <<EOCP
9773 #include <errno.h>
9774 #include <sys/types.h>
9775 #include <signal.h>
9776 #include <stdio.h> 
9777 #include <stdlib.h> 
9778 #define MY_O_NONBLOCK $o_nonblock
9779 #ifndef errno  /* XXX need better Configure test */
9780 extern int errno;
9781 #endif
9782 #$i_unistd I_UNISTD
9783 #ifdef I_UNISTD
9784 #include <unistd.h>
9785 #endif
9786 #$i_string I_STRING
9787 #ifdef I_STRING
9788 #include <string.h>
9789 #else
9790 #include <strings.h>
9791 #endif
9792 $signal_t blech(x) int x; { exit(3); }
9793 EOCP
9794         $cat >> try.c <<'EOCP'
9795 int main()
9796 {
9797         int pd[2];
9798         int pu[2];
9799         char buf[1];
9800         char string[100];
9801
9802         pipe(pd);       /* Down: child -> parent */
9803         pipe(pu);       /* Up: parent -> child */
9804         if (0 != fork()) {
9805                 int ret;
9806                 close(pd[1]);   /* Parent reads from pd[0] */
9807                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
9808 #ifdef F_SETFL
9809                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
9810                         exit(1);
9811 #else
9812                 exit(4);
9813 #endif
9814                 signal(SIGALRM, blech);
9815                 alarm(5);
9816                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
9817                         exit(2);
9818                 sprintf(string, "%d\n", ret);
9819                 write(2, string, strlen(string));
9820                 alarm(0);
9821 #ifdef EAGAIN
9822                 if (errno == EAGAIN) {
9823                         printf("EAGAIN\n");
9824                         goto ok;
9825                 }
9826 #endif
9827 #ifdef EWOULDBLOCK
9828                 if (errno == EWOULDBLOCK)
9829                         printf("EWOULDBLOCK\n");
9830 #endif
9831         ok:
9832                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
9833                 sleep(2);                               /* Give it time to close our pipe */
9834                 alarm(5);
9835                 ret = read(pd[0], buf, 1);      /* Should read EOF */
9836                 alarm(0);
9837                 sprintf(string, "%d\n", ret);
9838                 write(3, string, strlen(string));
9839                 exit(0);
9840         }
9841
9842         close(pd[0]);                   /* We write to pd[1] */
9843         close(pu[1]);                   /* We read from pu[0] */
9844         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
9845         close(pd[1]);                   /* Pipe pd is now fully closed! */
9846         exit(0);                                /* Bye bye, thank you for playing! */
9847 }
9848 EOCP
9849         set try
9850         if eval $compile_ok; then
9851                 echo "$startsh" >mtry
9852                 echo "$run ./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
9853                 chmod +x mtry
9854                 ./mtry >/dev/null 2>&1
9855                 case $? in
9856                 0) eagain=`$cat try.out`;;
9857                 1) echo "Could not perform non-blocking setting!";;
9858                 2) echo "I did a successful read() for something that was not there!";;
9859                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
9860                 4) echo "Could not find F_SETFL!";;
9861                 *) echo "Something terribly wrong happened during testing.";;
9862                 esac
9863                 rd_nodata=`$cat try.ret`
9864                 echo "A read() system call with no data present returns $rd_nodata."
9865                 case "$rd_nodata" in
9866                 0|-1) ;;
9867                 *)
9868                         echo "(That's peculiar, fixing that to be -1.)"
9869                         rd_nodata=-1
9870                         ;;
9871                 esac
9872                 case "$eagain" in
9873                 '')
9874                         echo "Forcing errno EAGAIN on read() with no data available."
9875                         eagain=EAGAIN
9876                         ;;
9877                 *)
9878                         echo "Your read() sets errno to $eagain when no data is available."
9879                         ;;
9880                 esac
9881                 status=`$cat try.err`
9882                 case "$status" in
9883                 0) echo "And it correctly returns 0 to signal EOF.";;
9884                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
9885                 *) echo "However, your read() returns '$status' on EOF??";;
9886                 esac
9887                 val="$define"
9888                 if test "$status" = "$rd_nodata"; then
9889                         echo "WARNING: you can't distinguish between EOF and no data!"
9890                         val="$undef"
9891                 fi
9892         else
9893                 echo "I can't compile the test program--assuming errno EAGAIN will do."
9894                 eagain=EAGAIN
9895         fi
9896         set d_eofnblk
9897         eval $setvar
9898         ;;
9899 *)
9900         echo "Using $hint value $eagain."
9901         echo "Your read() returns $rd_nodata when no data is present."
9902         case "$d_eofnblk" in
9903         "$define") echo "And you can see EOF because read() returns 0.";;
9904         "$undef") echo "But you can't see EOF status from read() returned value.";;
9905         *)
9906                 echo "(Assuming you can't see EOF status from read anyway.)"
9907                 d_eofnblk=$undef
9908                 ;;
9909         esac
9910         ;;
9911 esac
9912 $rm -f try try.* .out core head.c mtry
9913
9914 : see if fchdir exists
9915 set fchdir d_fchdir
9916 eval $inlibc
9917
9918 : see if fchmod exists
9919 set fchmod d_fchmod
9920 eval $inlibc
9921
9922 : see if fchown exists
9923 set fchown d_fchown
9924 eval $inlibc
9925
9926 : see if this is an fcntl system
9927 set fcntl d_fcntl
9928 eval $inlibc
9929
9930 echo " "
9931 : See if fcntl-based locking works.
9932 $cat >try.c <<EOCP
9933 #include <stdlib.h>
9934 #include <unistd.h>
9935 #include <fcntl.h>
9936 #include <signal.h>
9937 $signal_t blech(x) int x; { exit(3); }
9938 int main() {
9939 #if defined(F_SETLK) && defined(F_SETLKW)
9940      struct flock flock;
9941      int retval, fd;
9942      fd = open("try.c", O_RDONLY);
9943      flock.l_type = F_RDLCK;
9944      flock.l_whence = SEEK_SET;
9945      flock.l_start = flock.l_len = 0;
9946      signal(SIGALRM, blech);
9947      alarm(10);
9948      retval = fcntl(fd, F_SETLK, &flock);
9949      close(fd);
9950      (retval < 0 ? exit(2) : exit(0));
9951 #else
9952      exit(2);
9953 #endif
9954 }
9955 EOCP
9956 echo "Checking if fcntl-based file locking works... "
9957 case "$d_fcntl" in
9958 "$define")
9959         set try
9960         if eval $compile_ok; then
9961                 if $run ./try; then
9962                         echo "Yes, it seems to work."
9963                         val="$define"
9964                 else
9965                         echo "Nope, it didn't work."
9966                         val="$undef"
9967                         case "$?" in
9968                         3) $cat >&4 <<EOM
9969 ***
9970 *** I had to forcibly timeout from fcntl(..., F_SETLK, ...).
9971 *** This is (almost) impossible.
9972 *** If your NFS lock daemons are not feeling well, something like
9973 *** this may happen, please investigate.  Cannot continue, aborting.
9974 ***
9975 EOM
9976                                 exit 1
9977                                 ;;
9978                         esac
9979                 fi
9980         else
9981                 echo "I'm unable to compile the test program, so I'll assume not."
9982                 val="$undef"
9983         fi
9984         ;;
9985 *) val="$undef";
9986         echo "Nope, since you don't even have fcntl()."
9987         ;;
9988 esac
9989 set d_fcntl_can_lock
9990 eval $setvar
9991 $rm -f try*
9992
9993
9994 : see if sys/select.h has to be included
9995 set sys/select.h i_sysselct
9996 eval $inhdr
9997
9998 : see if we should include time.h, sys/time.h, or both
9999 echo " "
10000 if test "X$timeincl" = X; then
10001         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
10002         $echo $n "I'm now running the test program...$c"
10003         $cat >try.c <<'EOCP'
10004 #include <sys/types.h>
10005 #ifdef I_TIME
10006 #include <time.h>
10007 #endif
10008 #ifdef I_SYSTIME
10009 #ifdef SYSTIMEKERNEL
10010 #define KERNEL
10011 #endif
10012 #include <sys/time.h>
10013 #endif
10014 #ifdef I_SYSSELECT
10015 #include <sys/select.h>
10016 #endif
10017 int main()
10018 {
10019         struct tm foo;
10020 #ifdef S_TIMEVAL
10021         struct timeval bar;
10022 #endif
10023 #ifdef S_TIMEZONE
10024         struct timezone tzp;
10025 #endif
10026         if (foo.tm_sec == foo.tm_sec)
10027                 exit(0);
10028 #ifdef S_TIMEVAL
10029         if (bar.tv_sec == bar.tv_sec)
10030                 exit(0);
10031 #endif
10032         exit(1);
10033 }
10034 EOCP
10035         flags=''
10036         for s_timezone in '-DS_TIMEZONE' ''; do
10037         sysselect=''
10038         for s_timeval in '-DS_TIMEVAL' ''; do
10039         for i_systimek in '' '-DSYSTIMEKERNEL'; do
10040         for i_time in '' '-DI_TIME'; do
10041         for i_systime in '-DI_SYSTIME' ''; do
10042                 case "$flags" in
10043                 '') $echo $n ".$c"
10044                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
10045                         if eval $compile; then
10046                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
10047                                 shift
10048                                 flags="$*"
10049                                 echo " "
10050                                 $echo $n "Succeeded with $flags$c"
10051                         fi
10052                         ;;
10053                 esac
10054         done
10055         done
10056         done
10057         done
10058         done
10059         timeincl=''
10060         echo " "
10061         case "$flags" in
10062         *SYSTIMEKERNEL*) i_systimek="$define"
10063                 timeincl=`./findhdr sys/time.h`
10064                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
10065         *) i_systimek="$undef";;
10066         esac
10067         case "$flags" in
10068         *I_TIME*) i_time="$define"
10069                 timeincl=`./findhdr time.h`" $timeincl"
10070                 echo "We'll include <time.h>." >&4;;
10071         *) i_time="$undef";;
10072         esac
10073         case "$flags" in
10074         *I_SYSTIME*) i_systime="$define"
10075                 timeincl=`./findhdr sys/time.h`" $timeincl"
10076                 echo "We'll include <sys/time.h>." >&4;;
10077         *) i_systime="$undef";;
10078         esac
10079         $rm -f try.c try
10080 fi
10081
10082 : check for fd_set items
10083 $cat <<EOM
10084
10085 Checking to see how well your C compiler handles fd_set and friends ...
10086 EOM
10087 $cat >try.c <<EOCP
10088 #$i_systime I_SYS_TIME
10089 #$i_sysselct I_SYS_SELECT
10090 #$d_socket HAS_SOCKET
10091 #include <sys/types.h>
10092 #ifdef HAS_SOCKET
10093 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
10094 #endif
10095 #ifdef I_SYS_TIME
10096 #include <sys/time.h>
10097 #endif
10098 #ifdef I_SYS_SELECT
10099 #include <sys/select.h>
10100 #endif
10101 int main() {
10102         fd_set fds;
10103
10104 #ifdef TRYBITS
10105         if(fds.fds_bits);
10106 #endif
10107
10108 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
10109         exit(0);
10110 #else
10111         exit(1);
10112 #endif
10113 }
10114 EOCP
10115 set try -DTRYBITS
10116 if eval $compile; then
10117         d_fds_bits="$define"
10118         d_fd_set="$define"
10119         echo "Well, your system knows about the normal fd_set typedef..." >&4
10120         if $run ./try; then
10121                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
10122                 d_fd_macros="$define"
10123         else
10124                 $cat >&4 <<'EOM'
10125 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
10126 EOM
10127                 d_fd_macros="$undef"
10128         fi
10129 else
10130         $cat <<'EOM'
10131 Hmm, your compiler has some difficulty with fd_set.  Checking further...
10132 EOM
10133         set try
10134         if eval $compile; then
10135                 d_fds_bits="$undef"
10136                 d_fd_set="$define"
10137                 echo "Well, your system has some sort of fd_set available..." >&4
10138                 if $run ./try; then
10139                         echo "and you have the normal fd_set macros." >&4
10140                         d_fd_macros="$define"
10141                 else
10142                         $cat <<'EOM'
10143 but not the normal fd_set macros!  Gross!  More work for me...
10144 EOM
10145                         d_fd_macros="$undef"
10146                 fi
10147         else
10148         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
10149                 d_fd_set="$undef"
10150                 d_fds_bits="$undef"
10151                 d_fd_macros="$undef"
10152         fi
10153 fi
10154 $rm -f try try.*
10155
10156 : see if fgetpos exists
10157 set fgetpos d_fgetpos
10158 eval $inlibc
10159
10160 : see if finite exists
10161 set finite d_finite
10162 eval $inlibc
10163
10164 : see if finitel exists
10165 set finitel d_finitel
10166 eval $inlibc
10167
10168 : see if flock exists
10169 set flock d_flock
10170 eval $inlibc
10171
10172 : see if this is a sys/file.h system
10173 val=''
10174 set sys/file.h val
10175 eval $inhdr
10176
10177 : do we need to include sys/file.h ?
10178 case "$val" in
10179 "$define")
10180         echo " "
10181         if $h_sysfile; then
10182                 val="$define"
10183                 echo "We'll be including <sys/file.h>." >&4
10184         else
10185                 val="$undef"
10186                 echo "We won't be including <sys/file.h>." >&4
10187         fi
10188         ;;
10189 *)
10190         h_sysfile=false
10191         ;;
10192 esac
10193 set i_sysfile
10194 eval $setvar
10195
10196 : see if prototype for flock is available
10197 echo " "
10198 set d_flockproto flock $i_sysfile sys/file.h
10199 eval $hasproto
10200
10201 : see if fork exists
10202 set fork d_fork
10203 eval $inlibc
10204
10205 : see if fp_class exists
10206 set fp_class d_fp_class
10207 eval $inlibc
10208
10209 : see if pathconf exists
10210 set pathconf d_pathconf
10211 eval $inlibc
10212
10213 : see if fpathconf exists
10214 set fpathconf d_fpathconf
10215 eval $inlibc
10216
10217 : see if fpclass exists
10218 set fpclass d_fpclass
10219 eval $inlibc
10220
10221 : see if fpclassify exists
10222 set fpclassify d_fpclassify
10223 eval $inlibc
10224
10225 : see if fpclassl exists
10226 set fpclassl d_fpclassl
10227 eval $inlibc
10228
10229
10230 : check for fpos64_t
10231 echo " "
10232 echo "Checking to see if you have fpos64_t..." >&4
10233 $cat >try.c <<EOCP
10234 #include <stdio.h>
10235 int main() { fpos64_t x = 7; }
10236 EOCP
10237 set try
10238 if eval $compile; then
10239         val="$define"
10240         echo "You have fpos64_t."
10241 else
10242         val="$undef"
10243         echo "You do not have fpos64_t."
10244         case "$fpossize" in
10245         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
10246         esac
10247 fi
10248 $rm -f try.* try
10249 set d_fpos64_t
10250 eval $setvar
10251
10252 : see if frexpl exists
10253 set frexpl d_frexpl
10254 eval $inlibc
10255
10256 : see if this is a sys/param system
10257 set sys/param.h i_sysparam
10258 eval $inhdr
10259
10260 : see if this is a sys/mount.h system
10261 set sys/mount.h i_sysmount
10262 eval $inhdr
10263
10264
10265 echo " "
10266 echo "Checking to see if your system supports struct fs_data..." >&4
10267 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
10268 eval $hasstruct
10269 case "$d_fs_data_s" in
10270 "$define")      echo "Yes, it does."   ;;
10271 *)              echo "No, it doesn't." ;;
10272 esac
10273
10274 : see if fseeko exists
10275 set fseeko d_fseeko
10276 eval $inlibc
10277 case "$longsize" in
10278 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
10279 esac
10280
10281 : see if fsetpos exists
10282 set fsetpos d_fsetpos
10283 eval $inlibc
10284
10285
10286 : see if fstatfs exists
10287 set fstatfs d_fstatfs
10288 eval $inlibc
10289
10290
10291 : see if statvfs exists
10292 set statvfs d_statvfs
10293 eval $inlibc
10294
10295 : see if fstatvfs exists
10296 set fstatvfs d_fstatvfs
10297 eval $inlibc
10298
10299
10300 : see if fsync exists
10301 set fsync d_fsync
10302 eval $inlibc
10303
10304 : see if ftello exists
10305 set ftello d_ftello
10306 eval $inlibc
10307 case "$longsize" in
10308 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
10309 esac
10310
10311 : see if getcwd exists
10312 set getcwd d_getcwd
10313 eval $inlibc
10314
10315 : see if getespwnam exists
10316 set getespwnam d_getespwnam
10317 eval $inlibc
10318
10319
10320 : see if getfsstat exists
10321 set getfsstat d_getfsstat
10322 eval $inlibc
10323
10324 : see if getgrent exists
10325 set getgrent d_getgrent
10326 eval $inlibc
10327
10328 : see if gethostbyaddr exists
10329 set gethostbyaddr d_gethbyaddr
10330 eval $inlibc
10331
10332 : see if gethostbyname exists
10333 set gethostbyname d_gethbyname
10334 eval $inlibc
10335
10336 : see if gethostent exists
10337 set gethostent d_gethent
10338 eval $inlibc
10339
10340 : see how we will look up host name
10341 echo " "
10342 call=''
10343 if set gethostname val -f d_gethname; eval $csym; $val; then
10344         echo 'gethostname() found.' >&4
10345         d_gethname="$define"
10346         call=gethostname
10347 fi
10348 if set uname val -f d_uname; eval $csym; $val; then
10349         if ./xenix; then
10350                 $cat <<'EOM'
10351 uname() was found, but you're running xenix, and older versions of xenix
10352 have a broken uname(). If you don't really know whether your xenix is old
10353 enough to have a broken system call, use the default answer.
10354
10355 EOM
10356                 dflt=y
10357                 case "$d_uname" in
10358                 "$define") dflt=n;;
10359                 esac
10360                 rp='Is your uname() broken?'
10361                 . ./myread
10362                 case "$ans" in
10363                 n*) d_uname="$define"; call=uname;;
10364                 esac
10365         else
10366                 echo 'uname() found.' >&4
10367                 d_uname="$define"
10368                 case "$call" in
10369                 '') call=uname ;;
10370                 esac
10371         fi
10372 fi
10373 case "$d_gethname" in
10374 '') d_gethname="$undef";;
10375 esac
10376 case "$d_uname" in
10377 '') d_uname="$undef";;
10378 esac
10379 case "$d_uname$d_gethname" in
10380 *define*)
10381         dflt=n
10382         cat <<EOM
10383  
10384 Every now and then someone has a $call() that lies about the hostname
10385 but can't be fixed for political or economic reasons.  If you wish, I can
10386 pretend $call() isn't there and maybe compute hostname at run-time
10387 thanks to the '$phostname' command.
10388
10389 EOM
10390         rp="Shall I ignore $call() from now on?"
10391         . ./myread
10392         case "$ans" in
10393         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
10394         esac;;
10395 esac
10396 case "$phostname" in
10397 '') aphostname='';;
10398 *) case "$aphostname" in
10399         /*) ;;
10400         *) set X $phostname
10401                 shift
10402                 file=$1
10403                 shift
10404                 file=`./loc $file $file $pth`
10405                 aphostname=`echo $file $*`
10406                 ;;
10407         esac
10408         ;;
10409 esac
10410 case "$d_uname$d_gethname" in
10411 *define*) ;;
10412 *)
10413         case "$phostname" in
10414         '')
10415                 echo "There will be no way for $package to get your hostname." >&4;;
10416         *)
10417         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
10418                 ;;
10419         esac;;
10420 esac
10421 case "$d_phostname" in
10422 '') d_phostname="$undef";;
10423 esac
10424
10425 : see if this is a netdb.h system
10426 set netdb.h i_netdb
10427 eval $inhdr
10428
10429 : see if prototypes for various gethostxxx netdb.h functions are available
10430 echo " "
10431 set d_gethostprotos gethostent $i_netdb netdb.h
10432 eval $hasproto
10433
10434 : see if getitimer exists
10435 set getitimer d_getitimer
10436 eval $inlibc
10437
10438 : see if getlogin exists
10439 set getlogin d_getlogin
10440 eval $inlibc
10441
10442 : see if getmnt exists
10443 set getmnt d_getmnt
10444 eval $inlibc
10445
10446 : see if getmntent exists
10447 set getmntent d_getmntent
10448 eval $inlibc
10449
10450 : see if getnetbyaddr exists
10451 set getnetbyaddr d_getnbyaddr
10452 eval $inlibc
10453
10454 : see if getnetbyname exists
10455 set getnetbyname d_getnbyname
10456 eval $inlibc
10457
10458 : see if getnetent exists
10459 set getnetent d_getnent
10460 eval $inlibc
10461
10462 : see if prototypes for various getnetxxx netdb.h functions are available
10463 echo " "
10464 set d_getnetprotos getnetent $i_netdb netdb.h
10465 eval $hasproto
10466
10467 : see if getpagesize exists
10468 set getpagesize d_getpagsz
10469 eval $inlibc
10470
10471
10472 : see if getprotobyname exists
10473 set getprotobyname d_getpbyname
10474 eval $inlibc
10475
10476 : see if getprotobynumber exists
10477 set getprotobynumber d_getpbynumber
10478 eval $inlibc
10479
10480 : see if getprotoent exists
10481 set getprotoent d_getpent
10482 eval $inlibc
10483
10484 : see if getpgid exists
10485 set getpgid d_getpgid
10486 eval $inlibc
10487
10488 : see if getpgrp2 exists
10489 set getpgrp2 d_getpgrp2
10490 eval $inlibc
10491
10492 : see if getppid exists
10493 set getppid d_getppid
10494 eval $inlibc
10495
10496 : see if getpriority exists
10497 set getpriority d_getprior
10498 eval $inlibc
10499
10500 : see if prototypes for various getprotoxxx netdb.h functions are available
10501 echo " "
10502 set d_getprotoprotos getprotoent $i_netdb netdb.h
10503 eval $hasproto
10504
10505 : see if getprpwnam exists
10506 set getprpwnam d_getprpwnam
10507 eval $inlibc
10508
10509 : see if getpwent exists
10510 set getpwent d_getpwent
10511 eval $inlibc
10512
10513
10514 : see if getservbyname exists
10515 set getservbyname d_getsbyname
10516 eval $inlibc
10517
10518 : see if getservbyport exists
10519 set getservbyport d_getsbyport
10520 eval $inlibc
10521
10522 : see if getservent exists
10523 set getservent d_getsent
10524 eval $inlibc
10525
10526 : see if prototypes for various getservxxx netdb.h functions are available
10527 echo " "
10528 set d_getservprotos getservent $i_netdb netdb.h
10529 eval $hasproto
10530
10531 : see if getspnam exists
10532 set getspnam d_getspnam
10533 eval $inlibc
10534
10535 : see if gettimeofday or ftime exists
10536 set gettimeofday d_gettimeod
10537 eval $inlibc
10538 case "$d_gettimeod" in
10539 "$undef")
10540         set ftime d_ftime 
10541         eval $inlibc
10542         ;;
10543 *)
10544         val="$undef"; set d_ftime; eval $setvar
10545         ;;
10546 esac
10547 case "$d_gettimeod$d_ftime" in
10548 "$undef$undef")
10549         echo " "
10550         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
10551         ;;
10552 esac
10553
10554 : see if this is an grp system
10555 set grp.h i_grp
10556 eval $inhdr
10557
10558 case "$i_grp" in
10559 $define)
10560         xxx=`./findhdr grp.h`
10561         $cppstdin $cppflags $cppminus < $xxx >$$.h
10562
10563         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
10564                 val="$define"
10565         else
10566                 val="$undef"
10567         fi
10568         set d_grpasswd
10569         eval $setvar
10570
10571         $rm -f $$.h
10572         ;;
10573 *)
10574         val="$undef";
10575         set d_grpasswd; eval $setvar
10576         ;;
10577 esac
10578
10579 : see if hasmntopt exists
10580 set hasmntopt d_hasmntopt
10581 eval $inlibc
10582
10583 : see if this is a netinet/in.h or sys/in.h system
10584 set netinet/in.h i_niin sys/in.h i_sysin
10585 eval $inhdr
10586
10587 : see if arpa/inet.h has to be included
10588 set arpa/inet.h i_arpainet
10589 eval $inhdr
10590
10591 : see if htonl --and friends-- exists
10592 val=''
10593 set htonl val
10594 eval $inlibc
10595
10596 : Maybe they are macros.
10597 case "$val" in
10598 $undef)
10599         $cat >htonl.c <<EOM
10600 #include <stdio.h>
10601 #include <sys/types.h>
10602 #$i_niin I_NETINET_IN
10603 #$i_sysin I_SYS_IN
10604 #$i_arpainet I_ARPA_INET
10605 #ifdef I_NETINET_IN
10606 #include <netinet/in.h>
10607 #endif
10608 #ifdef I_SYS_IN
10609 #include <sys/in.h>
10610 #endif
10611 #ifdef I_ARPA_INET
10612 #include <arpa/inet.h>
10613 #endif
10614 #ifdef htonl
10615 printf("Defined as a macro.");
10616 #endif
10617 EOM
10618         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
10619         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
10620                 val="$define"
10621                 echo "But it seems to be defined as a macro." >&4
10622         fi
10623         $rm -f htonl.?
10624         ;;
10625 esac
10626 set d_htonl
10627 eval $setvar
10628
10629 : index or strchr
10630 echo " "
10631 if set index val -f; eval $csym; $val; then
10632         if set strchr val -f d_strchr; eval $csym; $val; then
10633                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
10634                         val="$define"
10635                         vali="$undef"
10636                         echo "strchr() found." >&4
10637                 else
10638                         val="$undef"
10639                         vali="$define"
10640                         echo "index() found." >&4
10641                 fi
10642         else
10643                 val="$undef"
10644                 vali="$define"
10645                 echo "index() found." >&4
10646         fi
10647 else
10648         if set strchr val -f d_strchr; eval $csym; $val; then
10649                 val="$define"
10650                 vali="$undef"
10651                 echo "strchr() found." >&4
10652         else
10653                 echo "No index() or strchr() found!" >&4
10654                 val="$undef"
10655                 vali="$undef"
10656         fi
10657 fi
10658 set d_strchr; eval $setvar
10659 val="$vali"
10660 set d_index; eval $setvar
10661
10662 : check whether inet_aton exists
10663 set inet_aton d_inetaton
10664 eval $inlibc
10665
10666 : Look for isascii
10667 echo " "
10668 $cat >isascii.c <<'EOCP'
10669 #include <stdio.h>
10670 #include <ctype.h>
10671 int main() {
10672         int c = 'A';
10673         if (isascii(c))
10674                 exit(0);
10675         else
10676                 exit(1);
10677 }
10678 EOCP
10679 set isascii
10680 if eval $compile; then
10681         echo "isascii() found." >&4
10682         val="$define"
10683 else
10684         echo "isascii() NOT found." >&4
10685         val="$undef"
10686 fi
10687 set d_isascii
10688 eval $setvar
10689 $rm -f isascii*
10690
10691 : see if isfinite exists
10692 set isfinite d_isfinite
10693 eval $inlibc
10694
10695 : see if isinf exists
10696 set isinf d_isinf
10697 eval $inlibc
10698
10699 : see if isnan exists
10700 set isnan d_isnan
10701 eval $inlibc
10702
10703 : see if isnanl exists
10704 set isnanl d_isnanl
10705 eval $inlibc
10706
10707 : see if killpg exists
10708 set killpg d_killpg
10709 eval $inlibc
10710
10711 : see if lchown exists
10712 echo " "
10713 $cat > try.c <<'EOCP'
10714 /* System header to define __stub macros and hopefully few prototypes,
10715     which can conflict with char lchown(); below.  */
10716 #include <assert.h>
10717 /* Override any gcc2 internal prototype to avoid an error.  */
10718 /* We use char because int might match the return type of a gcc2
10719    builtin and then its argument prototype would still apply.  */
10720 char lchown();
10721 int main() {
10722     /*  The GNU C library defines this for functions which it implements
10723         to always fail with ENOSYS.  Some functions are actually named
10724         something starting with __ and the normal name is an alias.  */
10725 #if defined (__stub_lchown) || defined (__stub___lchown)
10726 choke me
10727 #else
10728 lchown();
10729 #endif
10730 ; return 0; }
10731 EOCP
10732 set try
10733 if eval $compile; then
10734     $echo "lchown() found." >&4
10735     val="$define"
10736 else
10737     $echo "lchown() NOT found." >&4
10738     val="$undef"
10739 fi
10740 set d_lchown
10741 eval $setvar
10742
10743 : See if number of significant digits in a double precision number is known
10744 echo " "
10745 $cat >ldbl_dig.c <<EOM
10746 #$i_limits I_LIMITS
10747 #$i_float I_FLOAT
10748 #ifdef I_LIMITS
10749 #include <limits.h>
10750 #endif
10751 #ifdef I_FLOAT
10752 #include <float.h>
10753 #endif
10754 #ifdef LDBL_DIG
10755 printf("Contains LDBL_DIG");
10756 #endif
10757 EOM
10758 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
10759 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
10760         echo "LDBL_DIG found." >&4
10761         val="$define"
10762 else
10763         echo "LDBL_DIG NOT found." >&4
10764         val="$undef"
10765 fi
10766 $rm -f ldbl_dig.?
10767 set d_ldbl_dig
10768 eval $setvar
10769
10770 : see if link exists
10771 set link d_link
10772 eval $inlibc
10773
10774 : see if localeconv exists
10775 set localeconv d_locconv
10776 eval $inlibc
10777
10778 : see if lockf exists
10779 set lockf d_lockf
10780 eval $inlibc
10781
10782 : see if prototype for lseek is available
10783 echo " "
10784 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
10785 eval $hasproto
10786
10787 : see if lstat exists
10788 set lstat d_lstat
10789 eval $inlibc
10790
10791 : see if madvise exists
10792 set madvise d_madvise
10793 eval $inlibc
10794
10795 : see if mblen exists
10796 set mblen d_mblen
10797 eval $inlibc
10798
10799 : see if mbstowcs exists
10800 set mbstowcs d_mbstowcs
10801 eval $inlibc
10802
10803 : see if mbtowc exists
10804 set mbtowc d_mbtowc
10805 eval $inlibc
10806
10807 : see if memchr exists
10808 set memchr d_memchr
10809 eval $inlibc
10810
10811 : see if memcmp exists
10812 set memcmp d_memcmp
10813 eval $inlibc
10814
10815 : see if memcpy exists
10816 set memcpy d_memcpy
10817 eval $inlibc
10818
10819 : see if memmove exists
10820 set memmove d_memmove
10821 eval $inlibc
10822
10823 : see if memset exists
10824 set memset d_memset
10825 eval $inlibc
10826
10827 : see if mkdir exists
10828 set mkdir d_mkdir
10829 eval $inlibc
10830
10831 : see if mkdtemp exists
10832 set mkdtemp d_mkdtemp
10833 eval $inlibc
10834
10835 : see if mkfifo exists
10836 set mkfifo d_mkfifo
10837 eval $inlibc
10838
10839 : see if mkstemp exists
10840 set mkstemp d_mkstemp
10841 eval $inlibc
10842
10843 : see if mkstemps exists
10844 set mkstemps d_mkstemps
10845 eval $inlibc
10846
10847 : see if mktime exists
10848 set mktime d_mktime
10849 eval $inlibc
10850
10851 : see if this is a sys/mman.h system
10852 set sys/mman.h i_sysmman
10853 eval $inhdr
10854
10855 : see if mmap exists
10856 set mmap d_mmap
10857 eval $inlibc
10858 : see what shmat returns
10859 : default to something harmless
10860 mmaptype='void *'
10861 case "$i_sysmman$d_mmap" in
10862 "$define$define")
10863         $cat >mmap.c <<'END'
10864 #include <sys/mman.h>
10865 void *mmap();
10866 END
10867         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
10868                 mmaptype='void *'
10869         else
10870                 mmaptype='caddr_t'
10871         fi
10872         echo "and it returns ($mmaptype)." >&4
10873         ;;
10874 esac
10875
10876
10877
10878 : see if modfl exists
10879 set modfl d_modfl
10880 eval $inlibc
10881
10882 d_modfl_pow32_bug="$undef"
10883
10884 case "$d_longdbl$d_modfl" in
10885 $define$define)
10886         $cat <<EOM
10887 Checking to see whether your modfl() is okay for large values...
10888 EOM
10889 $cat >try.c <<EOCP
10890 #include <math.h> 
10891 #include <stdio.h>
10892 int main() {
10893     long double nv = 4294967303.15;
10894     long double v, w;
10895     v = modfl(nv, &w);         
10896 #ifdef __GLIBC__
10897     printf("glibc");
10898 #endif
10899     printf(" %"$sPRIfldbl" %"$sPRIfldbl" %"$sPRIfldbl"\n", nv, v, w);
10900     return 0;
10901 }
10902 EOCP
10903         case "$osname:$gccversion" in
10904         aix:)   saveccflags="$ccflags"
10905                 ccflags="$ccflags -qlongdouble" ;; # to avoid core dump
10906         esac
10907         set try
10908         if eval $compile; then
10909                 foo=`$run ./try`
10910                 case "$foo" in
10911                 *" 4294967303.150000 1.150000 4294967302.000000")
10912                         echo >&4 "Your modfl() is broken for large values."
10913                         d_modfl_pow32_bug="$define"
10914                         case "$foo" in
10915                         glibc)  echo >&4 "You should upgrade your glibc to at least 2.2.2 to get a fixed modfl()."
10916                         ;;
10917                         esac
10918                         ;;
10919                 *" 4294967303.150000 0.150000 4294967303.000000")
10920                         echo >&4 "Your modfl() seems okay for large values."
10921                         ;;
10922                 *)      echo >&4 "I don't understand your modfl() at all."
10923                         d_modfl="$undef"
10924                         ;;
10925                 esac
10926                 $rm -f try.* try core core.try.*
10927         else
10928                 echo "I cannot figure out whether your modfl() is okay, assuming it isn't."
10929                 d_modfl="$undef"
10930         fi
10931         case "$osname:$gccversion" in
10932         aix:)   ccflags="$saveccflags" ;; # restore
10933         esac
10934         ;;
10935 esac
10936
10937 : see if mprotect exists
10938 set mprotect d_mprotect
10939 eval $inlibc
10940
10941 : see if msgctl exists
10942 set msgctl d_msgctl
10943 eval $inlibc
10944
10945 : see if msgget exists
10946 set msgget d_msgget
10947 eval $inlibc
10948
10949 : see if msgsnd exists
10950 set msgsnd d_msgsnd
10951 eval $inlibc
10952
10953 : see if msgrcv exists
10954 set msgrcv d_msgrcv
10955 eval $inlibc
10956
10957 : see how much of the 'msg*(2)' library is present.
10958 h_msg=true
10959 echo " "
10960 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
10961 *"$undef"*) h_msg=false;;
10962 esac
10963 case "$osname" in
10964 freebsd)
10965     case "`ipcs 2>&1`" in
10966     "SVID messages"*"not configured"*)
10967         echo "Your $osname does not have the msg*(2) configured." >&4
10968         h_msg=false
10969         val="$undef"
10970         set msgctl d_msgctl
10971         eval $setvar
10972         set msgget d_msgget
10973         eval $setvar
10974         set msgsnd d_msgsnd
10975         eval $setvar
10976         set msgrcv d_msgrcv
10977         eval $setvar
10978         ;;
10979     esac
10980     ;;
10981 esac
10982 : we could also check for sys/ipc.h ...
10983 if $h_msg && $test `./findhdr sys/msg.h`; then
10984         echo "You have the full msg*(2) library." >&4
10985         val="$define"
10986 else
10987         echo "You don't have the full msg*(2) library." >&4
10988         val="$undef"
10989 fi
10990 set d_msg
10991 eval $setvar
10992
10993
10994 echo " "
10995 echo "Checking to see if your system supports struct msghdr..." >&4
10996 set d_msghdr_s msghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
10997 eval $hasstruct
10998 case "$d_msghdr_s" in
10999 "$define")      echo "Yes, it does."   ;;
11000 *)              echo "No, it doesn't." ;;
11001 esac
11002
11003
11004 : see if msync exists
11005 set msync d_msync
11006 eval $inlibc
11007
11008 : see if munmap exists
11009 set munmap d_munmap
11010 eval $inlibc
11011
11012 : see if nice exists
11013 set nice d_nice
11014 eval $inlibc
11015
11016 : see if this is a langinfo.h system
11017 set langinfo.h i_langinfo
11018 eval $inhdr
11019
11020 : see if nl_langinfo exists
11021 set nl_langinfo d_nl_langinfo
11022 eval $inlibc
11023
11024 : check for length of character
11025 echo " "
11026 case "$charsize" in
11027 '')
11028         echo "Checking to see how big your characters are (hey, you never know)..." >&4
11029         $cat >try.c <<'EOCP'
11030 #include <stdio.h>
11031 int main()
11032 {
11033     printf("%d\n", (int)sizeof(char));
11034     exit(0);
11035 }
11036 EOCP
11037         set try
11038         if eval $compile_ok; then
11039                 dflt=`$run ./try`
11040         else
11041                 dflt='1'
11042                 echo "(I can't seem to compile the test program.  Guessing...)"
11043         fi
11044         ;;
11045 *)
11046         dflt="$charsize"
11047         ;;
11048 esac
11049 rp="What is the size of a character (in bytes)?"
11050 . ./myread
11051 charsize="$ans"
11052 $rm -f try.c try
11053
11054 : check for volatile keyword
11055 echo " "
11056 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11057 $cat >try.c <<'EOCP'
11058 int main()
11059 {
11060         typedef struct _goo_struct goo_struct;
11061         goo_struct * volatile goo = ((goo_struct *)0);
11062         struct _goo_struct {
11063                 long long_int;
11064                 int reg_int;
11065                 char char_var;
11066         };
11067         typedef unsigned short foo_t;
11068         char *volatile foo;
11069         volatile int bar;
11070         volatile foo_t blech;
11071         foo = foo;
11072 }
11073 EOCP
11074 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11075         val="$define"
11076         echo "Yup, it does."
11077 else
11078         val="$undef"
11079         echo "Nope, it doesn't."
11080 fi
11081 set d_volatile
11082 eval $setvar
11083 $rm -f try.*
11084
11085
11086 echo " "
11087 $echo "Choosing the C types to be used for Perl's internal types..." >&4
11088
11089 case "$use64bitint:$d_quad:$quadtype" in
11090 define:define:?*)
11091         ivtype="$quadtype"
11092         uvtype="$uquadtype"
11093         ivsize=8
11094         uvsize=8
11095         ;;
11096 *)      ivtype="long"
11097         uvtype="unsigned long"
11098         ivsize=$longsize
11099         uvsize=$longsize
11100         ;;
11101 esac
11102
11103 case "$uselongdouble:$d_longdbl" in
11104 define:define)
11105         nvtype="long double"
11106         nvsize=$longdblsize
11107         ;;
11108 *)      nvtype=double
11109         nvsize=$doublesize
11110         ;;
11111 esac
11112
11113 $echo "(IV will be "$ivtype", $ivsize bytes)"
11114 $echo "(UV will be "$uvtype", $uvsize bytes)"
11115 $echo "(NV will be "$nvtype", $nvsize bytes)"
11116
11117 $cat >try.c <<EOCP
11118 #$i_inttypes I_INTTYPES
11119 #ifdef I_INTTYPES
11120 #include <inttypes.h>
11121 #endif
11122 #include <stdio.h>
11123 int main() {
11124 #ifdef INT8
11125    int8_t i =  INT8_MAX;
11126   uint8_t u = UINT8_MAX;
11127   printf("int8_t\n");
11128 #endif
11129 #ifdef INT16
11130    int16_t i =  INT16_MAX;
11131   uint16_t i = UINT16_MAX;
11132   printf("int16_t\n");
11133 #endif
11134 #ifdef INT32
11135    int32_t i =  INT32_MAX;
11136   uint32_t u = UINT32_MAX;
11137   printf("int32_t\n");
11138 #endif
11139 }
11140 EOCP
11141
11142 case "$i8type" in
11143 '')     case "$charsize" in
11144         1)      i8type=char
11145                 u8type="unsigned char"
11146                 i8size=$charsize
11147                 u8size=$charsize
11148                 ;;
11149         esac
11150         ;;
11151 esac
11152 case "$i8type" in
11153 '')     set try -DINT8
11154         if eval $compile; then
11155                 case "`$run ./try`" in
11156                 int8_t) i8type=int8_t
11157                         u8type=uint8_t
11158                         i8size=1
11159                         u8size=1
11160                         ;;
11161                 esac
11162         fi
11163         ;;
11164 esac
11165 case "$i8type" in
11166 '')     if $test $charsize -ge 1; then
11167                 i8type=char
11168                 u8type="unsigned char"
11169                 i8size=$charsize
11170                 u8size=$charsize
11171         fi
11172         ;;
11173 esac
11174
11175 case "$i16type" in
11176 '')     case "$shortsize" in
11177         2)      i16type=short
11178                 u16type="unsigned short"
11179                 i16size=$shortsize
11180                 u16size=$shortsize
11181                 ;;
11182         esac
11183         ;;
11184 esac
11185 case "$i16type" in
11186 '')     set try -DINT16
11187         if eval $compile; then
11188                 case "`$run ./try`" in
11189                 int16_t)
11190                         i16type=int16_t
11191                         u16type=uint16_t
11192                         i16size=2
11193                         u16size=2
11194                         ;;
11195                 esac
11196         fi
11197         ;;
11198 esac
11199 case "$i16type" in
11200 '')     if $test $shortsize -ge 2; then
11201                 i16type=short
11202                 u16type="unsigned short"
11203                 i16size=$shortsize
11204                 u16size=$shortsize
11205         fi
11206         ;;
11207 esac
11208
11209 case "$i32type" in
11210 '')     case "$longsize" in
11211         4)      i32type=long
11212                 u32type="unsigned long"
11213                 i32size=$longsize
11214                 u32size=$longsize
11215                 ;;
11216         *)      case "$intsize" in
11217                 4)      i32type=int
11218                         u32type="unsigned int"
11219                         i32size=$intsize
11220                         u32size=$intsize
11221                         ;;
11222                 esac
11223                 ;;
11224         esac
11225         ;;
11226 esac
11227 case "$i32type" in
11228 '')     set try -DINT32
11229         if eval $compile; then
11230                 case "`$run ./try`" in
11231                 int32_t)
11232                         i32type=int32_t
11233                         u32type=uint32_t
11234                         i32size=4
11235                         u32size=4
11236                         ;;
11237                 esac
11238         fi
11239         ;;
11240 esac
11241 case "$i32type" in
11242 '')     if $test $intsize -ge 4; then
11243                 i32type=int
11244                 u32type="unsigned int"
11245                 i32size=$intsize
11246                 u32size=$intsize
11247         fi
11248         ;;
11249 esac
11250
11251 case "$i64type" in
11252 '')     case "$d_quad:$quadtype" in
11253         define:?*)
11254                 i64type="$quadtype"
11255                 u64type="$uquadtype"
11256                 i64size=8
11257                 u64size=8
11258                 ;;
11259         esac
11260         ;;
11261 esac
11262
11263 $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
11264 : volatile so that the compiler has to store it out to memory.
11265 if test X"$d_volatile" = X"$define"; then
11266         volatile=volatile
11267 fi
11268 $cat <<EOP >try.c
11269 #include <stdio.h>
11270 #include <sys/types.h>
11271 #include <signal.h>
11272 #ifdef SIGFPE
11273 $volatile int bletched = 0;
11274 $signal_t blech(s) int s; { bletched = 1; }
11275 #endif
11276 int main() {
11277     $uvtype u = 0;
11278     $nvtype d;
11279     int     n = 8 * $uvsize;
11280     int     i;
11281 #ifdef SIGFPE
11282     signal(SIGFPE, blech);
11283 #endif
11284
11285     for (i = 0; i < n; i++) {
11286       u = u << 1 | ($uvtype)1;
11287       d = ($nvtype)u;
11288       if (($uvtype)d != u)
11289         break;
11290       if (d <= 0)
11291         break;
11292       d = ($nvtype)(u - 1);
11293       if (($uvtype)d != (u - 1))
11294         break;
11295 #ifdef SIGFPE
11296       if (bletched) {
11297         break;
11298 #endif
11299       } 
11300     }
11301     printf("%d\n", ((i == n) ? -n : i));
11302     exit(0);
11303 }
11304 EOP
11305 set try
11306
11307 d_nv_preserves_uv="$undef"
11308 if eval $compile; then
11309         d_nv_preserves_uv_bits="`$run ./try`"
11310 fi
11311 case "$d_nv_preserves_uv_bits" in
11312 \-[1-9]*)       
11313         d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
11314         $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11315         d_nv_preserves_uv="$define"
11316         ;;
11317 [1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11318         d_nv_preserves_uv="$undef" ;;
11319 *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
11320         d_nv_preserves_uv_bits="$undef" ;;
11321 esac
11322
11323 $rm -f try.* try
11324
11325
11326 : check for off64_t
11327 echo " "
11328 echo "Checking to see if you have off64_t..." >&4
11329 $cat >try.c <<EOCP
11330 #include <sys/types.h>
11331 #include <unistd.h>
11332 int main() { off64_t x = 7; }
11333 EOCP
11334 set try
11335 if eval $compile; then
11336         val="$define"
11337         echo "You have off64_t."
11338 else
11339         val="$undef"
11340         echo "You do not have off64_t."
11341         case "$lseeksize" in
11342         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
11343         esac
11344 fi
11345 $rm -f try.* try
11346 set d_off64_t
11347 eval $setvar
11348
11349 : see if POSIX threads are available
11350 set pthread.h i_pthread
11351 eval $inhdr
11352
11353
11354
11355
11356 : how to create joinable pthreads
11357 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
11358         echo " "
11359         echo "Checking what constant to use for creating joinable pthreads..." >&4 
11360         $cat >try.c <<'EOCP'
11361 #include <pthread.h>
11362 int main() {
11363     int detachstate = JOINABLE;
11364 }
11365 EOCP
11366         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
11367         if eval $compile; then
11368                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
11369                 val="$undef" # Yes, undef.
11370                 set d_old_pthread_create_joinable
11371                 eval $setvar
11372                 val=""
11373                 set old_pthread_create_joinable
11374                 eval $setvar
11375         else
11376                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
11377                 if eval $compile; then
11378                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
11379                         val="$define"
11380                         set d_old_pthread_create_joinable
11381                         eval $setvar
11382                         val=PTHREAD_CREATE_UNDETACHED
11383                         set old_pthread_create_joinable
11384                         eval $setvar
11385                 else            
11386                         set try -DJOINABLE=__UNDETACHED
11387                         if eval $compile; then
11388                                 echo "You seem to use __UNDETACHED." >&4
11389                                 val="$define"
11390                                 set d_old_pthread_create_joinable
11391                                 eval $setvar
11392                                 val=__UNDETACHED
11393                                 set old_pthread_create_joinable
11394                                 eval $setvar
11395                         else
11396                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
11397                                 val="$define"
11398                                 set d_old_pthread_create_joinable
11399                                 eval $setvar
11400                                 val=0
11401                                 set old_pthread_create_joinable
11402                                 eval $setvar
11403                         fi
11404                 fi
11405         fi
11406         $rm -f try try.*
11407 else
11408     d_old_pthread_create_joinable="$undef"
11409     old_pthread_create_joinable=""
11410 fi
11411
11412 : see if pause exists
11413 set pause d_pause
11414 eval $inlibc
11415
11416 : see if pipe exists
11417 set pipe d_pipe
11418 eval $inlibc
11419
11420 : see if poll exists
11421 set poll d_poll
11422 eval $inlibc
11423
11424 : see if pthread_atfork exists
11425 set pthread_atfork d_pthread_atfork
11426 eval $inlibc
11427
11428
11429 : see whether the various POSIXish _yields exist
11430 $cat >try.c <<EOP
11431 #include <pthread.h>
11432 #include <stdio.h>
11433 int main() {
11434 #ifdef SCHED_YIELD
11435         sched_yield();
11436 #else
11437 #ifdef PTHREAD_YIELD
11438         pthread_yield();
11439 #else
11440 #ifdef PTHREAD_YIELD_NULL
11441         pthread_yield(NULL);
11442 #endif
11443 #endif
11444 #endif
11445 }
11446 EOP
11447 : see if sched_yield exists
11448 set try -DSCHED_YIELD
11449 if eval $compile; then
11450     val="$define"
11451     sched_yield='sched_yield()'
11452 else
11453     val="$undef"
11454 fi
11455 case "$usethreads" in
11456 $define)
11457         case "$val" in
11458         $define) echo 'sched_yield() found.' >&4        ;;
11459         *)       echo 'sched_yield() NOT found.' >&4    ;;
11460         esac
11461 esac
11462 set d_sched_yield
11463 eval $setvar
11464
11465 : see if pthread_yield exists
11466 set try -DPTHREAD_YIELD
11467 if eval $compile; then
11468     val="$define"
11469     case "$sched_yield" in
11470     '') sched_yield='pthread_yield()' ;;
11471     esac
11472 else
11473     set try -DPTHREAD_YIELD_NULL
11474     if eval $compile; then
11475         val="$define"
11476         case "$sched_yield" in
11477         '') sched_yield='pthread_yield(NULL)' ;;
11478         esac
11479     else
11480         val="$undef"
11481     fi
11482 fi
11483 case "$usethreads" in
11484 $define)
11485         case "$val" in
11486         $define) echo 'pthread_yield() found.' >&4      ;;
11487         *)       echo 'pthread_yield() NOT found.' >&4  ;;
11488         esac
11489         ;;
11490 esac
11491 set d_pthread_yield
11492 eval $setvar
11493
11494 case "$sched_yield" in
11495 '') sched_yield=undef ;;
11496 esac
11497
11498 $rm -f try try.*
11499
11500 : see if this is a pwd.h system
11501 set pwd.h i_pwd
11502 eval $inhdr
11503
11504 case "$i_pwd" in
11505 $define)
11506         xxx=`./findhdr pwd.h`
11507         $cppstdin $cppflags $cppminus < $xxx >$$.h
11508
11509         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
11510                 val="$define"
11511         else
11512                 val="$undef"
11513         fi
11514         set d_pwquota
11515         eval $setvar
11516
11517         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
11518                 val="$define"
11519         else
11520                 val="$undef"
11521         fi
11522         set d_pwage
11523         eval $setvar
11524
11525         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
11526                 val="$define"
11527         else
11528                 val="$undef"
11529         fi
11530         set d_pwchange
11531         eval $setvar
11532
11533         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
11534                 val="$define"
11535         else
11536                 val="$undef"
11537         fi
11538         set d_pwclass
11539         eval $setvar
11540
11541         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
11542                 val="$define"
11543         else
11544                 val="$undef"
11545         fi
11546         set d_pwexpire
11547         eval $setvar
11548
11549         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
11550                 val="$define"
11551         else
11552                 val="$undef"
11553         fi
11554         set d_pwcomment
11555         eval $setvar
11556
11557         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
11558                 val="$define"
11559         else
11560                 val="$undef"
11561         fi
11562         set d_pwgecos
11563         eval $setvar
11564
11565         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
11566                 val="$define"
11567         else
11568                 val="$undef"
11569         fi
11570         set d_pwpasswd
11571         eval $setvar
11572
11573         $rm -f $$.h
11574         ;;
11575 *)
11576         val="$undef"; 
11577         set d_pwquota; eval $setvar
11578         set d_pwage; eval $setvar
11579         set d_pwchange; eval $setvar
11580         set d_pwclass; eval $setvar
11581         set d_pwexpire; eval $setvar
11582         set d_pwcomment; eval $setvar
11583         set d_pwgecos; eval $setvar
11584         set d_pwpasswd; eval $setvar
11585         ;;
11586 esac
11587
11588 : see if readdir and friends exist
11589 set readdir d_readdir
11590 eval $inlibc
11591 set seekdir d_seekdir
11592 eval $inlibc
11593 set telldir d_telldir
11594 eval $inlibc
11595 set rewinddir d_rewinddir
11596 eval $inlibc
11597
11598 : see if readlink exists
11599 set readlink d_readlink
11600 eval $inlibc
11601
11602 : see if readv exists
11603 set readv d_readv
11604 eval $inlibc
11605
11606 : see if recvmsg exists
11607 set recvmsg d_recvmsg
11608 eval $inlibc
11609
11610 : see if rename exists
11611 set rename d_rename
11612 eval $inlibc
11613
11614 : see if rmdir exists
11615 set rmdir d_rmdir
11616 eval $inlibc
11617
11618 : see if memory.h is available.
11619 val=''
11620 set memory.h val
11621 eval $inhdr
11622
11623 : See if it conflicts with string.h
11624 case "$val" in
11625 $define)
11626         case "$strings" in
11627         '') ;;
11628         *)
11629                 $cppstdin $cppflags $cppminus < $strings > mem.h
11630                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
11631                         echo " "
11632                         echo "We won't be including <memory.h>."
11633                         val="$undef"
11634                 fi
11635                 $rm -f mem.h
11636                 ;;
11637         esac
11638 esac
11639 set i_memory
11640 eval $setvar
11641
11642 : can bcopy handle overlapping blocks?
11643 echo " "
11644 val="$undef"
11645 case "$d_memmove" in
11646 "$define") echo "I'll use memmove() instead of bcopy() for overlapping copies." ;;
11647 *)      case "$d_bcopy" in
11648         "$define")
11649                 echo "Checking to see if bcopy() can do overlapping copies..." >&4
11650                 $cat >try.c <<EOCP
11651 #$i_memory I_MEMORY
11652 #$i_stdlib I_STDLIB
11653 #$i_string I_STRING
11654 #$i_unistd I_UNISTD
11655 EOCP
11656         $cat >>try.c <<'EOCP'
11657 #include <stdio.h>
11658 #ifdef I_MEMORY
11659 #  include <memory.h>
11660 #endif
11661 #ifdef I_STDLIB
11662 #  include <stdlib.h>
11663 #endif
11664 #ifdef I_STRING
11665 #  include <string.h>
11666 #else
11667 #  include <strings.h>
11668 #endif
11669 #ifdef I_UNISTD
11670 #  include <unistd.h>  /* Needed for NetBSD */
11671 #endif
11672 int main()
11673 {
11674 char buf[128], abc[128];
11675 char *b;
11676 int len;
11677 int off;
11678 int align;
11679
11680 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11681    try to store the string in read-only memory. */
11682 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
11683
11684 for (align = 7; align >= 0; align--) {
11685         for (len = 36; len; len--) {
11686                 b = buf+align;
11687                 bcopy(abc, b, len);
11688                 for (off = 1; off <= len; off++) {
11689                         bcopy(b, b+off, len);
11690                         bcopy(b+off, b, len);
11691                         if (bcmp(b, abc, len))
11692                                 exit(1);
11693                 }
11694         }
11695 }
11696 exit(0);
11697 }
11698 EOCP
11699                 set try
11700                 if eval $compile_ok; then
11701                         if ./try 2>/dev/null; then
11702                                 echo "Yes, it can."
11703                                 val="$define"
11704                         else
11705                                 echo "It can't, sorry."
11706                         fi
11707                 else
11708                         echo "(I can't compile the test program, so we'll assume not...)"
11709                 fi
11710                 ;;
11711         esac
11712         $rm -f try.* try core
11713         ;;
11714 esac
11715 set d_safebcpy
11716 eval $setvar
11717
11718 : can memcpy handle overlapping blocks?
11719 echo " "
11720 val="$undef"
11721 case "$d_memmove" in
11722 "$define") echo "I'll use memmove() instead of memcpy() for overlapping copies." ;;
11723 *)      case "$d_memcpy" in
11724         "$define")
11725                 echo "Checking to see if memcpy() can do overlapping copies..." >&4
11726                 $cat >try.c <<EOCP
11727 #$i_memory I_MEMORY
11728 #$i_stdlib I_STDLIB
11729 #$i_string I_STRING
11730 #$i_unistd I_UNISTD
11731 EOCP
11732         $cat >>try.c <<'EOCP'
11733 #include <stdio.h>
11734 #ifdef I_MEMORY
11735 #  include <memory.h>
11736 #endif
11737 #ifdef I_STDLIB
11738 #  include <stdlib.h>
11739 #endif
11740 #ifdef I_STRING
11741 #  include <string.h>
11742 #else
11743 #  include <strings.h>
11744 #endif
11745 #ifdef I_UNISTD
11746 #  include <unistd.h>  /* Needed for NetBSD */
11747 #endif
11748 int main()
11749 {
11750 char buf[128], abc[128];
11751 char *b;
11752 int len;
11753 int off;
11754 int align;
11755
11756 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11757    try to store the string in read-only memory. */
11758 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
11759
11760 for (align = 7; align >= 0; align--) {
11761         for (len = 36; len; len--) {
11762                 b = buf+align;
11763                 memcpy(b, abc, len);
11764                 for (off = 1; off <= len; off++) {
11765                         memcpy(b+off, b, len);
11766                         memcpy(b, b+off, len);
11767                         if (memcmp(b, abc, len))
11768                                 exit(1);
11769                 }
11770         }
11771 }
11772 exit(0);
11773 }
11774 EOCP
11775                 set try
11776                 if eval $compile_ok; then
11777                         if ./try 2>/dev/null; then
11778                                 echo "Yes, it can."
11779                                 val="$define"
11780                         else
11781                                 echo "It can't, sorry."
11782                         fi
11783                 else
11784                         echo "(I can't compile the test program, so we'll assume not...)"
11785                 fi
11786                 ;;
11787         esac
11788         $rm -f try.* try core
11789         ;;
11790 esac
11791 set d_safemcpy
11792 eval $setvar
11793
11794 : can memcmp be trusted to compare relative magnitude?
11795 val="$undef"
11796 case "$d_memcmp" in
11797 "$define")
11798         echo " "
11799         echo "Checking if your memcmp() can compare relative magnitude..." >&4
11800         $cat >try.c <<EOCP
11801 #$i_memory I_MEMORY
11802 #$i_stdlib I_STDLIB
11803 #$i_string I_STRING
11804 #$i_unistd I_UNISTD
11805 EOCP
11806         $cat >>try.c <<'EOCP'
11807 #include <stdio.h>
11808 #ifdef I_MEMORY
11809 #  include <memory.h>
11810 #endif
11811 #ifdef I_STDLIB
11812 #  include <stdlib.h>
11813 #endif
11814 #ifdef I_STRING
11815 #  include <string.h>
11816 #else
11817 #  include <strings.h>
11818 #endif
11819 #ifdef I_UNISTD
11820 #  include <unistd.h>  /* Needed for NetBSD */
11821 #endif
11822 int main()
11823 {
11824 char a = -1;
11825 char b = 0;
11826 if ((a < b) && memcmp(&a, &b, 1) < 0)
11827         exit(1);
11828 exit(0);
11829 }
11830 EOCP
11831         set try
11832         if eval $compile_ok; then
11833                 if $run ./try 2>/dev/null; then
11834                         echo "Yes, it can."
11835                         val="$define"
11836                 else
11837                         echo "No, it can't (it uses signed chars)."
11838                 fi
11839         else
11840                 echo "(I can't compile the test program, so we'll assume not...)"
11841         fi
11842         ;;
11843 esac
11844 $rm -f try.* try core
11845 set d_sanemcmp
11846 eval $setvar
11847
11848 : see if prototype for sbrk is available
11849 echo " "
11850 set d_sbrkproto sbrk $i_unistd unistd.h
11851 eval $hasproto
11852
11853 : see if select exists
11854 set select d_select
11855 eval $inlibc
11856
11857 : see if semctl exists
11858 set semctl d_semctl
11859 eval $inlibc
11860
11861 : see if semget exists
11862 set semget d_semget
11863 eval $inlibc
11864
11865 : see if semop exists
11866 set semop d_semop
11867 eval $inlibc
11868
11869 : see how much of the 'sem*(2)' library is present.
11870 h_sem=true
11871 echo " "
11872 case "$d_semctl$d_semget$d_semop" in
11873 *"$undef"*) h_sem=false;;
11874 esac
11875 case "$osname" in
11876 freebsd)
11877     case "`ipcs 2>&1`" in
11878     "SVID messages"*"not configured"*)
11879         echo "Your $osname does not have the sem*(2) configured." >&4
11880         h_sem=false
11881         val="$undef"
11882         set semctl d_semctl
11883         eval $setvar
11884         set semget d_semget
11885         eval $setvar
11886         set semop d_semop
11887         eval $setvar
11888         ;;
11889     esac
11890     ;;
11891 esac
11892 : we could also check for sys/ipc.h ...
11893 if $h_sem && $test `./findhdr sys/sem.h`; then
11894         echo "You have the full sem*(2) library." >&4
11895         val="$define"
11896 else
11897         echo "You don't have the full sem*(2) library." >&4
11898         val="$undef"
11899 fi
11900 set d_sem
11901 eval $setvar
11902
11903 : see whether sys/sem.h defines union semun
11904 echo " "
11905 $cat > try.c <<'END'
11906 #include <sys/types.h>
11907 #include <sys/ipc.h>
11908 #include <sys/sem.h>
11909 int main () { union semun semun; semun.buf = 0; }
11910 END
11911 set try
11912 if eval $compile; then
11913     echo "You have union semun in <sys/sem.h>." >&4
11914     val="$define"
11915 else
11916     echo "You do not have union semun in <sys/sem.h>." >&4
11917     val="$undef"
11918 fi
11919 $rm -f try try.c try.h
11920 set d_union_semun
11921 eval $setvar
11922
11923 : see how to do semctl IPC_STAT
11924 case "$d_sem" in
11925 $define)
11926     : see whether semctl IPC_STAT can use union semun
11927     echo " "
11928     $cat > try.h <<END
11929 #ifndef S_IRUSR
11930 #   ifdef S_IREAD
11931 #       define S_IRUSR S_IREAD
11932 #       define S_IWUSR S_IWRITE
11933 #       define S_IXUSR S_IEXEC
11934 #   else
11935 #       define S_IRUSR 0400
11936 #       define S_IWUSR 0200
11937 #       define S_IXUSR 0100
11938 #   endif
11939 #   define S_IRGRP (S_IRUSR>>3)
11940 #   define S_IWGRP (S_IWUSR>>3)
11941 #   define S_IXGRP (S_IXUSR>>3)
11942 #   define S_IROTH (S_IRUSR>>6)
11943 #   define S_IWOTH (S_IWUSR>>6)
11944 #   define S_IXOTH (S_IXUSR>>6)
11945 #endif
11946 #ifndef S_IRWXU
11947 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
11948 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
11949 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
11950 #endif
11951 END
11952
11953     $cat > try.c <<END
11954 #include <sys/types.h>
11955 #include <sys/ipc.h>
11956 #include <sys/sem.h>
11957 #include <sys/stat.h>
11958 #include <stdio.h>
11959 #include <errno.h>
11960 #include "try.h"
11961 #ifndef errno
11962 extern int errno;
11963 #endif
11964 #$d_union_semun HAS_UNION_SEMUN
11965 int main() {
11966     union semun
11967 #ifndef HAS_UNION_SEMUN
11968     {
11969         int val;
11970         struct semid_ds *buf;
11971         unsigned short *array;
11972     }
11973 #endif
11974     arg;
11975     int sem, st;
11976
11977 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
11978     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11979     if (sem > -1) {
11980         struct semid_ds argbuf;
11981         arg.buf = &argbuf;
11982 #       ifdef IPC_STAT
11983         st = semctl(sem, 0, IPC_STAT, arg);
11984         if (st == 0)
11985             printf("semun\n");
11986         else
11987 #       endif /* IPC_STAT */
11988             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11989 #       ifdef IPC_RMID
11990         if (semctl(sem, 0, IPC_RMID, arg) != 0)
11991 #       endif /* IPC_RMID */
11992             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11993     } else
11994 #endif /* IPC_PRIVATE && ... */
11995         printf("semget failed: errno = %d\n", errno);
11996   return 0;
11997 }
11998 END
11999     val="$undef"
12000     set try
12001     if eval $compile; then
12002         xxx=`$run ./try`
12003         case "$xxx" in
12004         semun) val="$define" ;;
12005         esac
12006     fi
12007     $rm -f try try.c
12008     set d_semctl_semun
12009     eval $setvar
12010     case "$d_semctl_semun" in
12011     $define)
12012         echo "You can use union semun for semctl IPC_STAT." >&4
12013         also='also'
12014         ;;
12015     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
12016         also=''
12017         ;;
12018     esac
12019
12020     : see whether semctl IPC_STAT can use struct semid_ds pointer
12021     $cat > try.c <<'END'
12022 #include <sys/types.h>
12023 #include <sys/ipc.h>
12024 #include <sys/sem.h>
12025 #include <sys/stat.h>
12026 #include "try.h"
12027 #include <stdio.h>
12028 #include <errno.h>
12029 #ifndef errno
12030 extern int errno;
12031 #endif
12032 int main() {
12033     struct semid_ds arg;
12034     int sem, st;
12035
12036 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
12037     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12038     if (sem > -1) {
12039 #       ifdef IPC_STAT
12040         st = semctl(sem, 0, IPC_STAT, &arg);
12041         if (st == 0)
12042             printf("semid_ds\n");
12043         else
12044 #       endif /* IPC_STAT */
12045             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12046 #       ifdef IPC_RMID
12047         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
12048 #       endif /* IPC_RMID */
12049             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12050     } else
12051 #endif /* IPC_PRIVATE && ... */
12052         printf("semget failed: errno = %d\n", errno);
12053
12054     return 0;
12055 }
12056 END
12057     val="$undef"
12058     set try
12059     if eval $compile; then
12060         xxx=`$run ./try`
12061         case "$xxx" in
12062         semid_ds) val="$define" ;;
12063         esac
12064     fi
12065     $rm -f try try.c
12066     set d_semctl_semid_ds
12067     eval $setvar
12068     case "$d_semctl_semid_ds" in
12069     $define)
12070         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
12071         ;;
12072     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
12073         ;;
12074     esac
12075     $rm -f try.h
12076     ;;
12077 *)  val="$undef"
12078
12079     # We do not have the full sem*(2) library, so assume we can not
12080     # use either.
12081
12082     set d_semctl_semun
12083     eval $setvar
12084
12085     set d_semctl_semid_ds
12086     eval $setvar
12087     ;;
12088 esac
12089
12090 : see if sendmsg exists
12091 set sendmsg d_sendmsg
12092 eval $inlibc
12093
12094 : see if setegid exists
12095 set setegid d_setegid
12096 eval $inlibc
12097
12098 : see if seteuid exists
12099 set seteuid d_seteuid
12100 eval $inlibc
12101
12102 : see if setgrent exists
12103 set setgrent d_setgrent
12104 eval $inlibc
12105
12106 : see if sethostent exists
12107 set sethostent d_sethent
12108 eval $inlibc
12109
12110 : see if setitimer exists
12111 set setitimer d_setitimer
12112 eval $inlibc
12113
12114 : see if setlinebuf exists
12115 set setlinebuf d_setlinebuf
12116 eval $inlibc
12117
12118 : see if setlocale exists
12119 set setlocale d_setlocale
12120 eval $inlibc
12121
12122 : see if setnetent exists
12123 set setnetent d_setnent
12124 eval $inlibc
12125
12126 : see if setprotoent exists
12127 set setprotoent d_setpent
12128 eval $inlibc
12129
12130 : see if setpgid exists
12131 set setpgid d_setpgid
12132 eval $inlibc
12133
12134 : see if setpgrp2 exists
12135 set setpgrp2 d_setpgrp2
12136 eval $inlibc
12137
12138 : see if setpriority exists
12139 set setpriority d_setprior
12140 eval $inlibc
12141
12142 : see if setproctitle exists
12143 set setproctitle d_setproctitle
12144 eval $inlibc
12145
12146 : see if setpwent exists
12147 set setpwent d_setpwent
12148 eval $inlibc
12149
12150 : see if setregid exists
12151 set setregid d_setregid
12152 eval $inlibc
12153 set setresgid d_setresgid
12154 eval $inlibc
12155
12156 : see if setreuid exists
12157 set setreuid d_setreuid
12158 eval $inlibc
12159 set setresuid d_setresuid
12160 eval $inlibc
12161
12162 : see if setrgid exists
12163 set setrgid d_setrgid
12164 eval $inlibc
12165
12166 : see if setruid exists
12167 set setruid d_setruid
12168 eval $inlibc
12169
12170 : see if setservent exists
12171 set setservent d_setsent
12172 eval $inlibc
12173
12174 : see if setsid exists
12175 set setsid d_setsid
12176 eval $inlibc
12177
12178 : see if setvbuf exists
12179 set setvbuf d_setvbuf
12180 eval $inlibc
12181
12182 : see if sfio.h is available
12183 set sfio.h i_sfio
12184 eval $inhdr
12185
12186
12187 : see if sfio library is available
12188 case "$i_sfio" in
12189 $define)
12190         val=''
12191         set sfreserve val
12192         eval $inlibc
12193         ;;
12194 *)
12195         val="$undef"
12196         ;;
12197 esac
12198 : Ok, but do we want to use it.
12199 case "$val" in
12200 $define)
12201         case "$usesfio" in
12202         true|$define|[yY]*) dflt='y';;
12203         *) dflt='n';;
12204         esac
12205         echo "$package can use the sfio library, but it is experimental."
12206         case "$useperlio" in
12207         "$undef")
12208             echo "For sfio also the PerlIO abstraction layer is needed."
12209             echo "Earlier you said you wouldn't want that."
12210             ;;
12211         esac
12212         rp="You seem to have sfio available, do you want to try using it?"
12213         . ./myread
12214         case "$ans" in
12215         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
12216                 useperlio="$define"
12217                 val="$define"
12218                 ;;
12219         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
12220                 val="$undef"
12221                 ;;
12222         esac
12223         ;;
12224 *)      case "$usesfio" in
12225         true|$define|[yY]*)
12226                 echo "Sorry, cannot find sfio on this machine." >&4
12227                 echo "Ignoring your setting of usesfio=$usesfio." >&4
12228                 val="$undef"
12229                 ;;
12230         esac
12231         ;;
12232 esac
12233 set d_sfio
12234 eval $setvar
12235 case "$d_sfio" in
12236 $define) usesfio='true';;
12237 *) usesfio='false';;
12238 esac
12239 case "$d_sfio" in
12240 $define) ;;
12241 *)      : Remove sfio from list of libraries to use
12242         case "$libs" in
12243         *-lsfio*)
12244                 echo "Removing unneeded -lsfio from library list" >&4
12245                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
12246                 shift
12247                 libs="$*"
12248                 echo "libs = $libs" >&4
12249                 ;;
12250         esac
12251 ;;
12252 esac
12253
12254
12255 : see if shmctl exists
12256 set shmctl d_shmctl
12257 eval $inlibc
12258
12259 : see if shmget exists
12260 set shmget d_shmget
12261 eval $inlibc
12262
12263 : see if shmat exists
12264 set shmat d_shmat
12265 eval $inlibc
12266 : see what shmat returns
12267 case "$d_shmat" in
12268 "$define")
12269         $cat >shmat.c <<'END'
12270 #include <sys/shm.h>
12271 void *shmat();
12272 END
12273         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
12274                 shmattype='void *'
12275         else
12276                 shmattype='char *'
12277         fi
12278         echo "and it returns ($shmattype)." >&4
12279         : see if a prototype for shmat is available
12280         xxx=`./findhdr sys/shm.h`
12281         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
12282         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
12283                 val="$define"
12284         else
12285                 val="$undef"
12286         fi
12287         $rm -f shmat.[co]
12288         ;;
12289 *)
12290         val="$undef"
12291         ;;
12292 esac
12293 set d_shmatprototype
12294 eval $setvar
12295
12296 : see if shmdt exists
12297 set shmdt d_shmdt
12298 eval $inlibc
12299
12300 : see how much of the 'shm*(2)' library is present.
12301 h_shm=true
12302 echo " "
12303 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
12304 *"$undef"*) h_shm=false;;
12305 esac
12306 case "$osname" in
12307 freebsd)
12308     case "`ipcs 2>&1`" in
12309     "SVID shared memory"*"not configured"*)
12310         echo "Your $osname does not have the shm*(2) configured." >&4
12311         h_shm=false
12312         val="$undef"
12313         set shmctl d_shmctl
12314         evat $setvar
12315         set shmget d_shmget
12316         evat $setvar
12317         set shmat d_shmat
12318         evat $setvar
12319         set shmdt d_shmdt
12320         evat $setvar
12321         ;;
12322     esac
12323     ;;
12324 esac
12325 : we could also check for sys/ipc.h ...
12326 if $h_shm && $test `./findhdr sys/shm.h`; then
12327         echo "You have the full shm*(2) library." >&4
12328         val="$define"
12329 else
12330         echo "You don't have the full shm*(2) library." >&4
12331         val="$undef"
12332 fi
12333 set d_shm
12334 eval $setvar
12335
12336 echo " "
12337 : see if we have sigaction
12338 if set sigaction val -f d_sigaction; eval $csym; $val; then
12339         echo 'sigaction() found.' >&4
12340         $cat > try.c <<'EOP'
12341 #include <stdio.h>
12342 #include <sys/types.h>
12343 #include <signal.h>
12344 int main()
12345 {
12346     struct sigaction act, oact;
12347     act.sa_flags = 0;
12348     oact.sa_handler = 0;
12349     /* so that act and oact are used */
12350     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
12351 }
12352 EOP
12353         set try
12354         if eval $compile_ok; then
12355                 val="$define"
12356         else
12357                 echo "But you don't seem to have a useable struct sigaction." >&4
12358                 val="$undef"
12359         fi
12360 else
12361         echo 'sigaction NOT found.' >&4
12362         val="$undef"
12363 fi
12364 set d_sigaction; eval $setvar
12365 $rm -f try try$_o try.c
12366
12367 : see if sigprocmask exists
12368 set sigprocmask d_sigprocmask
12369 eval $inlibc
12370
12371 : see if sigsetjmp exists
12372 echo " "
12373 case "$d_sigsetjmp" in
12374 '')
12375         $cat >try.c <<'EOP'
12376 #include <setjmp.h>
12377 sigjmp_buf env;
12378 int set = 1;
12379 int main()
12380 {
12381         if (sigsetjmp(env,1))
12382                 exit(set);
12383         set = 0;
12384         siglongjmp(env, 1);
12385         exit(1);
12386 }
12387 EOP
12388         set try
12389         if eval $compile; then
12390                 if $run ./try >/dev/null 2>&1; then
12391                         echo "POSIX sigsetjmp found." >&4
12392                         val="$define"
12393                 else
12394                         $cat >&4 <<EOM
12395 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
12396 I'll ignore them.
12397 EOM
12398                         val="$undef"
12399                 fi
12400         else
12401                 echo "sigsetjmp not found." >&4
12402                 val="$undef"
12403         fi
12404         ;;
12405 *) val="$d_sigsetjmp"
12406         case "$d_sigsetjmp" in
12407         $define) echo "POSIX sigsetjmp found." >&4;;
12408         $undef) echo "sigsetjmp not found." >&4;;
12409         esac
12410         ;;
12411 esac
12412 set d_sigsetjmp
12413 eval $setvar
12414 $rm -f try.c try
12415
12416 : see if sockatmark exists
12417 set sockatmark d_sockatmark
12418 eval $inlibc
12419
12420 : see if prototype for sockatmark is available
12421 echo " "
12422 set d_sockatmarkproto sockatmark $d_socket sys/socket.h
12423 eval $hasproto
12424
12425 : see if socks5_init exists
12426 set socks5_init d_socks5_init
12427 eval $inlibc
12428
12429 : see if prototype for setresgid is available
12430 echo " "
12431 set d_sresgproto setresgid $i_unistd unistd.h
12432 eval $hasproto
12433
12434 : see if prototype for setresuid is available
12435 echo " "
12436 set d_sresuproto setresuid $i_unistd unistd.h
12437 eval $hasproto
12438
12439 : see if sys/stat.h is available
12440 set sys/stat.h i_sysstat
12441 eval $inhdr
12442
12443
12444 : see if stat knows about block sizes
12445 echo " "
12446 echo "Checking to see if your struct stat has st_blocks field..." >&4
12447 set d_statblks stat st_blocks $i_sysstat sys/stat.h
12448 eval $hasfield
12449
12450
12451 : see if this is a sys/vfs.h system
12452 set sys/vfs.h i_sysvfs
12453 eval $inhdr
12454
12455
12456 : see if this is a sys/statfs.h system
12457 set sys/statfs.h i_sysstatfs
12458 eval $inhdr
12459
12460
12461 echo " "
12462 echo "Checking to see if your system supports struct statfs..." >&4
12463 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
12464 eval $hasstruct
12465 case "$d_statfs_s" in
12466 "$define")      echo "Yes, it does."   ;;
12467 *)              echo "No, it doesn't." ;;
12468 esac
12469
12470
12471
12472 : see if struct statfs knows about f_flags
12473 case "$d_statfs_s" in
12474 define) 
12475         echo " "
12476         echo "Checking to see if your struct statfs has f_flags field..." >&4
12477         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
12478         eval $hasfield
12479         ;;
12480 *)      val="$undef"
12481         set d_statfs_f_flags
12482         eval $setvar
12483         ;;
12484 esac
12485 case "$d_statfs_f_flags" in
12486 "$define")      echo "Yes, it does."   ;;
12487 *)              echo "No, it doesn't." ;;
12488 esac
12489
12490 : see if _ptr and _cnt from stdio act std
12491 echo " "
12492
12493 if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12494         echo "(Looks like you have stdio.h from BSD.)"
12495         case "$stdio_ptr" in
12496         '') stdio_ptr='((fp)->_p)'
12497                 ptr_lval=$define
12498                 ;;
12499         *)      ptr_lval=$d_stdio_ptr_lval;;
12500         esac
12501         case "$stdio_cnt" in
12502         '') stdio_cnt='((fp)->_r)'
12503                 cnt_lval=$define
12504                 ;;
12505         *)      cnt_lval=$d_stdio_cnt_lval;;
12506         esac
12507         case "$stdio_base" in
12508         '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
12509         esac
12510         case "$stdio_bufsiz" in
12511         '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
12512         esac
12513 elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
12514         echo "(Looks like you have stdio.h from Linux.)"
12515         case "$stdio_ptr" in
12516         '') stdio_ptr='((fp)->_IO_read_ptr)'
12517                 ptr_lval=$define
12518                 ;;
12519         *)      ptr_lval=$d_stdio_ptr_lval;;
12520         esac
12521         case "$stdio_cnt" in
12522         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
12523                 cnt_lval=$undef
12524                 ;;
12525         *)      cnt_lval=$d_stdio_cnt_lval;;
12526         esac
12527         case "$stdio_base" in
12528         '') stdio_base='((fp)->_IO_read_base)';;
12529         esac
12530         case "$stdio_bufsiz" in
12531         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
12532         esac
12533 else
12534         case "$stdio_ptr" in
12535         '') stdio_ptr='((fp)->_ptr)'
12536                 ptr_lval=$define
12537                 ;;
12538         *)      ptr_lval=$d_stdio_ptr_lval;;
12539         esac
12540         case "$stdio_cnt" in
12541         '') stdio_cnt='((fp)->_cnt)'
12542                 cnt_lval=$define
12543                 ;;
12544         *)      cnt_lval=$d_stdio_cnt_lval;;
12545         esac
12546         case "$stdio_base" in
12547         '') stdio_base='((fp)->_base)';;
12548         esac
12549         case "$stdio_bufsiz" in
12550         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
12551         esac
12552 fi
12553
12554 : test whether _ptr and _cnt really work
12555 echo "Checking how std your stdio is..." >&4
12556 $cat >try.c <<EOP
12557 #include <stdio.h>
12558 #define FILE_ptr(fp)    $stdio_ptr
12559 #define FILE_cnt(fp)    $stdio_cnt
12560 int main() {
12561         FILE *fp = fopen("try.c", "r");
12562         char c = getc(fp);
12563         if (
12564                 18 <= FILE_cnt(fp) &&
12565                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12566         )
12567                 exit(0);
12568         exit(1);
12569 }
12570 EOP
12571 val="$undef"
12572 set try
12573 if eval $compile && $to try.c; then
12574         if $run ./try; then
12575                 echo "Your stdio acts pretty std."
12576                 val="$define"
12577         else
12578                 echo "Your stdio isn't very std."
12579         fi
12580 else
12581         echo "Your stdio doesn't appear very std."
12582 fi
12583 $rm -f try.c try
12584 set d_stdstdio
12585 eval $setvar
12586
12587 : Can _ptr be used as an lvalue?
12588 case "$d_stdstdio$ptr_lval" in
12589 $define$define) val=$define ;;
12590 *) val=$undef ;;
12591 esac
12592 set d_stdio_ptr_lval
12593 eval $setvar
12594
12595 : Can _cnt be used as an lvalue?
12596 case "$d_stdstdio$cnt_lval" in
12597 $define$define) val=$define ;;
12598 *) val=$undef ;;
12599 esac
12600 set d_stdio_cnt_lval
12601 eval $setvar
12602
12603
12604 : test whether setting _ptr sets _cnt as a side effect
12605 d_stdio_ptr_lval_sets_cnt="$undef"
12606 d_stdio_ptr_lval_nochange_cnt="$undef"
12607 case "$d_stdio_ptr_lval$d_stdstdio" in
12608 $define$define)
12609         echo "Checking to see what happens if we set the stdio ptr..." >&4
12610 $cat >try.c <<EOP
12611 #include <stdio.h>
12612 /* Can we scream? */
12613 /* Eat dust sed :-) */
12614 /* In the buffer space, no one can hear you scream. */
12615 #define FILE_ptr(fp)    $stdio_ptr
12616 #define FILE_cnt(fp)    $stdio_cnt
12617 #include <sys/types.h>
12618 int main() {
12619         FILE *fp = fopen("try.c", "r");
12620         int c;
12621         char *ptr;
12622         size_t cnt;
12623         if (!fp) {
12624             puts("Fail even to read");
12625             exit(1);
12626         }
12627         c = getc(fp); /* Read away the first # */
12628         if (c == EOF) {
12629             puts("Fail even to read");
12630             exit(1);
12631         }
12632         if (!(
12633                 18 <= FILE_cnt(fp) &&
12634                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12635         )) {
12636                 puts("Fail even to read");
12637                 exit (1);
12638         }
12639         ptr = (char*) FILE_ptr(fp);
12640         cnt = (size_t)FILE_cnt(fp);
12641
12642         FILE_ptr(fp) += 42;
12643
12644         if ((char*)FILE_ptr(fp) != (ptr + 42)) {
12645                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
12646                 exit (1);
12647         }
12648         if (FILE_cnt(fp) <= 20) {
12649                 printf ("Fail (<20 chars to test)");
12650                 exit (1);
12651         }
12652         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
12653                 puts("Fail compare");
12654                 exit (1);
12655         }
12656         if (cnt == FILE_cnt(fp)) {
12657                 puts("Pass_unchanged");
12658                 exit (0);
12659         }       
12660         if (FILE_cnt(fp) == (cnt - 42)) {
12661                 puts("Pass_changed");
12662                 exit (0);
12663         }
12664         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
12665         return 1;
12666
12667 }
12668 EOP
12669         set try
12670         if eval $compile && $to try.c; then
12671                 case `$run ./try` in
12672                 Pass_changed)
12673                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
12674                         d_stdio_ptr_lval_sets_cnt="$define" ;;
12675                 Pass_unchanged)
12676                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
12677                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
12678                 Fail*)
12679                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
12680                 *)
12681                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
12682         esac
12683         else
12684                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
12685         fi
12686         $rm -f try.c try
12687         ;;
12688 esac
12689
12690 : see if _base is also standard
12691 val="$undef"
12692 case "$d_stdstdio" in
12693 $define)
12694         $cat >try.c <<EOP
12695 #include <stdio.h>
12696 #define FILE_base(fp)   $stdio_base
12697 #define FILE_bufsiz(fp) $stdio_bufsiz
12698 int main() {
12699         FILE *fp = fopen("try.c", "r");
12700         char c = getc(fp);
12701         if (
12702                 19 <= FILE_bufsiz(fp) &&
12703                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
12704         )
12705                 exit(0);
12706         exit(1);
12707 }
12708 EOP
12709         set try
12710         if eval $compile && $to try.c; then
12711                 if $run ./try; then
12712                         echo "And its _base field acts std."
12713                         val="$define"
12714                 else
12715                         echo "But its _base field isn't std."
12716                 fi
12717         else
12718                 echo "However, it seems to be lacking the _base field."
12719         fi
12720         $rm -f try.c try
12721         ;;
12722 esac
12723 set d_stdiobase
12724 eval $setvar
12725
12726 $cat >&4 <<EOM
12727 Checking how to access stdio streams by file descriptor number...
12728 EOM
12729 case "$stdio_stream_array" in
12730 '')     $cat >try.c <<EOCP
12731 #include <stdio.h>
12732 int main() {
12733   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
12734     printf("yes\n");
12735 }
12736 EOCP
12737         for s in _iob __iob __sF
12738         do
12739                 set try -DSTDIO_STREAM_ARRAY=$s
12740                 if eval $compile; then
12741                         case "`$run ./try`" in
12742                         yes)    stdio_stream_array=$s; break ;;
12743                         esac
12744                 fi
12745         done
12746         $rm -f try.* try$exe_ext
12747 esac
12748 case "$stdio_stream_array" in
12749 '')     $cat >&4 <<EOM
12750 I can't figure out how to access stdio streams by file descriptor number.
12751 EOM
12752         d_stdio_stream_array="$undef"
12753         ;;
12754 *)      $cat >&4 <<EOM
12755 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
12756 EOM
12757         d_stdio_stream_array="$define"
12758         ;;
12759 esac
12760
12761 : see if strcoll exists
12762 set strcoll d_strcoll
12763 eval $inlibc
12764
12765 : check for structure copying
12766 echo " "
12767 echo "Checking to see if your C compiler can copy structs..." >&4
12768 $cat >try.c <<'EOCP'
12769 int main()
12770 {
12771         struct blurfl {
12772                 int dyick;
12773         } foo, bar;
12774
12775         foo = bar;
12776 }
12777 EOCP
12778 if $cc -c try.c >/dev/null 2>&1 ; then
12779         val="$define"
12780         echo "Yup, it can."
12781 else
12782         val="$undef"
12783         echo "Nope, it can't."
12784 fi
12785 set d_strctcpy
12786 eval $setvar
12787 $rm -f try.*
12788
12789 : see if strerror and/or sys_errlist[] exist
12790 echo " "
12791 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
12792     if set strerror val -f d_strerror; eval $csym; $val; then
12793                 echo 'strerror() found.' >&4
12794                 d_strerror="$define"
12795                 d_strerrm='strerror(e)'
12796                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
12797                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
12798                         d_syserrlst="$define"
12799                 else
12800                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
12801                         d_syserrlst="$undef"
12802                 fi
12803     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
12804                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
12805                 echo 'strerror() found in string header.' >&4
12806                 d_strerror="$define"
12807                 d_strerrm='strerror(e)'
12808                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
12809                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
12810                                 d_syserrlst="$define"
12811                 else
12812                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
12813                         d_syserrlst="$undef"
12814                 fi
12815     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
12816                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
12817                 d_strerror="$undef"
12818                 d_syserrlst="$define"
12819                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
12820     else
12821                 echo 'strerror() and sys_errlist[] NOT found.' >&4
12822                 d_strerror="$undef"
12823                 d_syserrlst="$undef"
12824                 d_strerrm='"unknown"'
12825     fi
12826 fi
12827
12828 : see if strftime exists
12829 set strftime d_strftime
12830 eval $inlibc
12831
12832 : see if strtod exists
12833 set strtod d_strtod
12834 eval $inlibc
12835
12836 : see if strtol exists
12837 set strtol d_strtol
12838 eval $inlibc
12839
12840 : see if strtold exists
12841 set strtold d_strtold
12842 eval $inlibc
12843
12844 : see if strtoll exists
12845 set strtoll d_strtoll
12846 eval $inlibc
12847
12848 case "$d_longlong-$d_strtoll" in
12849 "$define-$define")
12850         $cat <<EOM
12851 Checking whether your strtoll() works okay...
12852 EOM
12853         $cat >try.c <<'EOCP'
12854 #include <errno.h>
12855 #ifdef __hpux
12856 #define strtoll __strtoll
12857 #endif
12858 #ifdef __EMX__
12859 #define strtoll _strtoll
12860 #endif
12861 #include <stdio.h>
12862 extern long long int strtoll(char *s, char **, int); 
12863 static int bad = 0;
12864 int check(char *s, long long ell, int een) {
12865         long long gll;
12866         errno = 0;
12867         gll = strtoll(s, 0, 10);
12868         if (!((gll == ell) && (errno == een)))
12869                 bad++;
12870 }
12871 int main() {
12872         check(" 1",                                      1LL, 0);
12873         check(" 0",                                      0LL, 0);
12874         check("-1",                                     -1LL, 0);
12875         check("-9223372036854775808", -9223372036854775808LL, 0);
12876         check("-9223372036854775808", -9223372036854775808LL, 0);
12877         check(" 9223372036854775807",  9223372036854775807LL, 0);
12878         check("-9223372036854775808", -9223372036854775808LL, 0);
12879         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
12880         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
12881         if (!bad)
12882                 printf("ok\n");
12883 }
12884 EOCP
12885         set try
12886         if eval $compile; then
12887                 yyy=`$run ./try`
12888                 case "$yyy" in
12889                 ok) echo "Your strtoll() seems to be working okay." ;;
12890                 *) cat <<EOM >&4
12891 Your strtoll() doesn't seem to be working okay.
12892 EOM
12893                    d_strtoll="$undef"
12894                    ;;
12895                 esac
12896         else
12897                 echo "(I can't seem to compile the test program--assuming it doesn't)"
12898                 d_strtoll="$undef"
12899         fi
12900         ;;
12901 esac
12902
12903 : see if strtoq exists
12904 set strtoq d_strtoq
12905 eval $inlibc
12906
12907 : see if strtoul exists
12908 set strtoul d_strtoul
12909 eval $inlibc
12910
12911 case "$d_strtoul" in
12912 "$define")
12913         $cat <<EOM
12914 Checking whether your strtoul() works okay...
12915 EOM
12916         $cat >try.c <<'EOCP'
12917 #include <errno.h>
12918 #include <stdio.h>
12919 extern unsigned long int strtoul(char *s, char **, int); 
12920 static int bad = 0;
12921 void check(char *s, unsigned long eul, int een) {
12922         unsigned long gul;
12923         errno = 0;
12924         gul = strtoul(s, 0, 10);
12925         if (!((gul == eul) && (errno == een)))
12926                 bad++;
12927 }
12928 int main() {
12929         check(" 1", 1L, 0);
12930         check(" 0", 0L, 0);
12931 EOCP
12932         case "$longsize" in
12933         8)
12934             $cat >>try.c <<'EOCP'
12935         check("18446744073709551615", 18446744073709551615UL, 0);
12936         check("18446744073709551616", 18446744073709551615UL, ERANGE);
12937 #if 0 /* strtoul() for /^-/ strings is undefined. */
12938         check("-1", 18446744073709551615UL, 0);
12939         check("-18446744073709551614", 2, 0);
12940         check("-18446744073709551615", 1, 0);
12941         check("-18446744073709551616", 18446744073709551615UL, ERANGE);
12942         check("-18446744073709551617", 18446744073709551615UL, ERANGE);
12943 #endif
12944 EOCP
12945                 ;;
12946         4)
12947                     $cat >>try.c <<'EOCP'
12948         check("4294967295", 4294967295UL, 0);
12949         check("4294967296", 4294967295UL, ERANGE);
12950 #if 0 /* strtoul() for /^-/ strings is undefined. */
12951         check("-1", 4294967295UL, 0);
12952         check("-4294967294", 2, 0);
12953         check("-4294967295", 1, 0);
12954         check("-4294967296", 4294967295UL, ERANGE);
12955         check("-4294967297", 4294967295UL, ERANGE);
12956 #endif
12957 EOCP
12958                 ;;
12959         *)
12960 : Should we write these tests to be more portable by sprintf-ing
12961 : ~0 and then manipulating that char string as input for strtol?
12962                 ;;
12963         esac
12964         $cat >>try.c <<'EOCP'
12965         if (!bad)
12966                 printf("ok\n");
12967         return 0;
12968 }
12969 EOCP
12970         set try
12971         if eval $compile; then
12972                 case "`$run ./try`" in
12973                 ok) echo "Your strtoul() seems to be working okay." ;;
12974                 *) cat <<EOM >&4
12975 Your strtoul() doesn't seem to be working okay.
12976 EOM
12977                    d_strtoul="$undef"
12978                    ;;
12979                 esac
12980         fi
12981         ;;
12982 esac
12983
12984 : see if strtoull exists
12985 set strtoull d_strtoull
12986 eval $inlibc
12987
12988 case "$d_longlong-$d_strtoull" in
12989 "$define-$define")
12990         $cat <<EOM
12991 Checking whether your strtoull() works okay...
12992 EOM
12993         $cat >try.c <<'EOCP'
12994 #include <errno.h>
12995 #ifdef __hpux
12996 #define strtoull __strtoull
12997 #endif
12998 #include <stdio.h>
12999 extern unsigned long long int strtoull(char *s, char **, int); 
13000 static int bad = 0;
13001 int check(char *s, long long eull, int een) {
13002         long long gull;
13003         errno = 0;
13004         gull = strtoull(s, 0, 10);
13005         if (!((gull == eull) && (errno == een)))
13006                 bad++;
13007 }
13008 int main() {
13009         check(" 1",                                        1LL, 0);
13010         check(" 0",                                        0LL, 0);
13011         check("18446744073709551615",  18446744073709551615ULL, 0);
13012         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13013 #if 0 /* strtoull() for /^-/ strings is undefined. */
13014         check("-1",                    18446744073709551615ULL, 0);
13015         check("-18446744073709551614",                     2LL, 0);
13016         check("-18446744073709551615",                     1LL, 0);
13017         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13018         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13019 #endif
13020         if (!bad)
13021                 printf("ok\n");
13022 }
13023 EOCP
13024         set try
13025         if eval $compile; then
13026                 case "`$run ./try`" in
13027                 ok) echo "Your strtoull() seems to be working okay." ;;
13028                 *) cat <<EOM >&4
13029 Your strtoull() doesn't seem to be working okay.
13030 EOM
13031                    d_strtoull="$undef"
13032                    ;;
13033                 esac
13034         fi
13035         ;;
13036 esac
13037
13038 : see if strtouq exists
13039 set strtouq d_strtouq
13040 eval $inlibc
13041
13042 case "$d_strtouq" in
13043 "$define")
13044         $cat <<EOM
13045 Checking whether your strtouq() works okay...
13046 EOM
13047         $cat >try.c <<'EOCP'
13048 #include <errno.h>
13049 #include <stdio.h>
13050 extern unsigned long long int strtouq(char *s, char **, int); 
13051 static int bad = 0;
13052 void check(char *s, unsigned long long eull, int een) {
13053         unsigned long long gull;
13054         errno = 0;
13055         gull = strtouq(s, 0, 10);
13056         if (!((gull == eull) && (errno == een)))
13057                 bad++;
13058 }
13059 int main() {
13060         check(" 1",                                        1LL, 0);
13061         check(" 0",                                        0LL, 0);
13062         check("18446744073709551615",  18446744073709551615ULL, 0);
13063         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13064 #if 0 /* strtouq() for /^-/ strings is undefined. */
13065         check("-1",                    18446744073709551615ULL, 0);
13066         check("-18446744073709551614",                     2LL, 0);
13067         check("-18446744073709551615",                     1LL, 0);
13068         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13069         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13070 #endif
13071         if (!bad)
13072                 printf("ok\n");
13073         return 0;
13074 }
13075 EOCP
13076         set try
13077         if eval $compile; then
13078                 case "`$run ./try`" in
13079                 ok) echo "Your strtouq() seems to be working okay." ;;
13080                 *) cat <<EOM >&4
13081 Your strtouq() doesn't seem to be working okay.
13082 EOM
13083                    d_strtouq="$undef"
13084                    ;;
13085                 esac
13086         fi
13087         ;;
13088 esac
13089
13090 : see if strxfrm exists
13091 set strxfrm d_strxfrm
13092 eval $inlibc
13093
13094 : see if symlink exists
13095 set symlink d_symlink
13096 eval $inlibc
13097
13098 : see if syscall exists
13099 set syscall d_syscall
13100 eval $inlibc
13101
13102 : see if prototype for syscall is available
13103 echo " "
13104 set d_syscallproto syscall $i_unistd unistd.h
13105 eval $hasproto
13106
13107 : see if sysconf exists
13108 set sysconf d_sysconf
13109 eval $inlibc
13110
13111 : see if system exists
13112 set system d_system
13113 eval $inlibc
13114
13115 : see if tcgetpgrp exists
13116 set tcgetpgrp d_tcgetpgrp
13117 eval $inlibc
13118
13119 : see if tcsetpgrp exists
13120 set tcsetpgrp d_tcsetpgrp
13121 eval $inlibc
13122
13123 : see if prototype for telldir is available
13124 echo " "
13125 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
13126 eval $hasproto
13127
13128 : see if this is a sys/times.h system
13129 set sys/times.h i_systimes
13130 eval $inhdr
13131
13132 : see if times exists
13133 echo " "
13134 if set times val -f d_times; eval $csym; $val; then
13135         echo 'times() found.' >&4
13136         d_times="$define"
13137         inc=''
13138         case "$i_systimes" in
13139         "$define") inc='sys/times.h';;
13140         esac
13141         rp="What is the type returned by times() on this system?"
13142         set clock_t clocktype long stdio.h sys/types.h $inc
13143         eval $typedef_ask
13144 else
13145         echo 'times() NOT found, hope that will do.' >&4
13146         d_times="$undef"
13147         clocktype='int'
13148 fi
13149
13150 : see if truncate exists
13151 set truncate d_truncate
13152 eval $inlibc
13153
13154 : see if tzname[] exists
13155 echo " "
13156 if set tzname val -a d_tzname; eval $csym; $val; then
13157         val="$define"
13158         echo 'tzname[] found.' >&4
13159 else
13160         val="$undef"
13161         echo 'tzname[] NOT found.' >&4
13162 fi
13163 set d_tzname
13164 eval $setvar
13165
13166 case "$osname" in
13167 next|rhapsody|darwin) multiarch="$define" ;;
13168 esac
13169 case "$multiarch" in
13170 ''|[nN]*) multiarch="$undef" ;;
13171 esac
13172
13173 : check for ordering of bytes in a long
13174 echo " "
13175 case "$usecrosscompile$multiarch" in
13176 *$define*)
13177         $cat <<EOM
13178 You seem to be either cross-compiling or doing a multiarchitecture build,
13179 skipping the byteorder check.
13180
13181 EOM
13182         byteorder='ffff'
13183         ;;
13184 *)
13185         case "$byteorder" in
13186         '')
13187                 $cat <<'EOM'
13188 In the following, larger digits indicate more significance.  A big-endian
13189 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
13190 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
13191 machines may have weird orders like 3412.  A Cray will report 87654321,
13192 an Alpha will report 12345678. If the test program works the default is
13193 probably right.
13194 I'm now running the test program...
13195 EOM
13196                 $cat >try.c <<'EOCP'
13197 #include <stdio.h>
13198 int main()
13199 {
13200         int i;
13201         union {
13202                 unsigned long l;
13203                 char c[sizeof(long)];
13204         } u;
13205
13206         if (sizeof(long) > 4)
13207                 u.l = (0x08070605L << 32) | 0x04030201L;
13208         else
13209                 u.l = 0x04030201L;
13210         for (i = 0; i < sizeof(long); i++)
13211                 printf("%c", u.c[i]+'0');
13212         printf("\n");
13213         exit(0);
13214 }
13215 EOCP
13216                 xxx_prompt=y
13217                 set try
13218                 if eval $compile && ./try > /dev/null; then
13219                         dflt=`$run ./try`
13220                         case "$dflt" in
13221                         [1-4][1-4][1-4][1-4]|12345678|87654321)
13222                                 echo "(The test program ran ok.)"
13223                                 echo "byteorder=$dflt"
13224                                 xxx_prompt=n
13225                         ;;
13226                         ????|????????) echo "(The test program ran ok.)" ;;
13227                         *) echo "(The test program didn't run right for some reason.)" ;;
13228                         esac
13229                 else
13230                         dflt='4321'
13231                         cat <<'EOM'
13232 (I can't seem to compile the test program.  Guessing big-endian...)
13233 EOM
13234                 fi
13235                 case "$xxx_prompt" in
13236                 y)
13237                         rp="What is the order of bytes in a long?"
13238                         . ./myread
13239                         byteorder="$ans"
13240                         ;;
13241                 *)      byteorder=$dflt
13242                         ;;
13243                 esac
13244                 ;;
13245         esac
13246         $rm -f try.c try
13247         ;;
13248 esac
13249
13250
13251 $cat <<EOM
13252
13253 Checking to see whether you can access character data unalignedly...
13254 EOM
13255 $cat >try.c <<EOCP
13256 #include <stdio.h>
13257 #define U32 $u32type
13258 #define BYTEORDER $byteorder
13259 int main() {
13260 #if BYTEORDER == 0x1234 || BYTEORDER == 0x4321
13261     U8 buf[] = "\0\0\0\1\0\0\0\0";
13262     U32 *up;
13263     int i;
13264
13265     if (sizeof(U32) != 4) {
13266         printf("sizeof(U32) is not 4, but %d\n", sizeof(U32));
13267         exit(1);
13268     }
13269
13270     fflush(stdout);
13271
13272     for (i = 0; i < 4; i++) {
13273         up = (U32*)(buf + i);
13274         if (! ((*up == 1 << (8*i)) ||   /* big-endian */
13275                (*up == 1 << (8*(3-i)))  /* little-endian */
13276               )
13277            )
13278         {
13279             printf("read failed (%x)\n", *up);
13280             exit(2);
13281         }
13282     }
13283
13284     /* write test */
13285     for (i = 0; i < 4; i++) {
13286         up = (U32*)(buf + i);
13287         *up = 0xBeef;
13288         if (*up != 0xBeef) {
13289             printf("write failed (%x)\n", *up);
13290             exit(3);
13291         }
13292     }
13293
13294     exit(0);
13295 #else
13296     printf("1\n");
13297     exit(1);
13298 #endif
13299     return 0;
13300 }
13301 EOCP
13302 set try
13303 if eval $compile_ok; then
13304         echo "(Testing for character data alignment may dump core.)" >&4
13305         $run ./try 2>&1 >/dev/null
13306         case "$?" in
13307         0)      cat >&4 <<EOM
13308 You can access character data pretty unalignedly.
13309 EOM
13310                 d_u32align="$undef"
13311                 ;;
13312         *)      cat >&4 <<EOM
13313 It seems that you must access character data in an aligned manner.
13314 EOM
13315                 d_u32align="$define"
13316                 ;;
13317         esac
13318         $rm -f core core.try.* try.core
13319 else
13320         rp='Can you access character data at unaligned addresses?'
13321         dflt='n'
13322         . ./myread
13323         case "$ans" in
13324         [yY]*)  d_u32align="$undef"  ;;
13325         *)      d_u32align="$define" ;;
13326         esac
13327 fi
13328
13329 : see if ualarm exists
13330 set ualarm d_ualarm
13331 eval $inlibc
13332
13333 : see if umask exists
13334 set umask d_umask
13335 eval $inlibc
13336
13337 : see if unordered exists
13338 set unordered d_unordered
13339 eval $inlibc
13340
13341 : see if usleep exists
13342 set usleep d_usleep
13343 eval $inlibc
13344
13345 : see if prototype for usleep is available
13346 echo " "
13347 set d_usleepproto usleep $i_unistd unistd.h
13348 eval $hasproto
13349
13350 : see if ustat exists
13351 set ustat d_ustat
13352 eval $inlibc
13353
13354 : backward compatibility for d_hvfork
13355 if test X$d_hvfork != X; then
13356         d_vfork="$d_hvfork"
13357         d_hvfork=''
13358 fi
13359 : see if there is a vfork
13360 val=''
13361 set vfork val
13362 eval $inlibc
13363
13364 : Ok, but do we want to use it. vfork is reportedly unreliable in 
13365 : perl on Solaris 2.x, and probably elsewhere.
13366 case "$val" in
13367 $define)
13368         echo " "
13369         case "$usevfork" in
13370         false) dflt='n';;
13371         *) dflt='y';;
13372         esac
13373         cat <<'EOM'
13374  
13375 Perl can only use a vfork() that doesn't suffer from strict
13376 restrictions on calling functions or modifying global data in
13377 the child.  For example, glibc-2.1 contains such a vfork()
13378 that is unsuitable.  If your system provides a proper fork()
13379 call, chances are that you do NOT want perl to use vfork().
13380
13381 EOM
13382         rp="Do you still want to use vfork()?"
13383         . ./myread
13384         case "$ans" in
13385         y|Y) ;;
13386         *)
13387                 echo "Ok, we won't use vfork()."
13388                 val="$undef"
13389                 ;;
13390         esac
13391         ;;
13392 esac
13393 set d_vfork
13394 eval $setvar
13395 case "$d_vfork" in
13396 $define) usevfork='true';;
13397 *) usevfork='false';;
13398 esac
13399
13400 : see if this is an sysdir system
13401 set sys/dir.h i_sysdir
13402 eval $inhdr
13403
13404 : see if this is an sysndir system
13405 set sys/ndir.h i_sysndir
13406 eval $inhdr
13407
13408 : see if closedir exists
13409 set closedir d_closedir
13410 eval $inlibc
13411
13412 case "$d_closedir" in
13413 "$define")
13414         echo " "
13415         echo "Checking whether closedir() returns a status..." >&4
13416         cat > try.c <<EOM
13417 #$i_dirent I_DIRENT             /**/
13418 #$i_sysdir I_SYS_DIR            /**/
13419 #$i_sysndir I_SYS_NDIR          /**/
13420 #$i_systypes I_SYS_TYPES        /**/
13421
13422 #if defined(I_SYS_TYPES)
13423 #include <sys/types.h>
13424 #endif
13425 #if defined(I_DIRENT)
13426 #include <dirent.h>
13427 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
13428 #include <sys/dir.h>
13429 #endif
13430 #else
13431 #ifdef I_SYS_NDIR
13432 #include <sys/ndir.h>
13433 #else
13434 #ifdef I_SYS_DIR
13435 #ifdef hp9000s500
13436 #include <ndir.h>       /* may be wrong in the future */
13437 #else
13438 #include <sys/dir.h>
13439 #endif
13440 #endif
13441 #endif
13442 #endif 
13443 int main() { return closedir(opendir(".")); }
13444 EOM
13445         set try
13446         if eval $compile_ok; then
13447                 if $run ./try > /dev/null 2>&1 ; then
13448                         echo "Yes, it does."
13449                         val="$undef"
13450                 else
13451                         echo "No, it doesn't."
13452                         val="$define"
13453                 fi
13454         else
13455                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13456                 val="$define"
13457         fi
13458         ;;
13459 *)
13460         val="$undef";
13461         ;;
13462 esac
13463 set d_void_closedir
13464 eval $setvar
13465 $rm -f try try.*
13466 : see if there is a wait4
13467 set wait4 d_wait4
13468 eval $inlibc
13469
13470 : see if waitpid exists
13471 set waitpid d_waitpid
13472 eval $inlibc
13473
13474 : see if wcstombs exists
13475 set wcstombs d_wcstombs
13476 eval $inlibc
13477
13478 : see if wctomb exists
13479 set wctomb d_wctomb
13480 eval $inlibc
13481
13482 : see if writev exists
13483 set writev d_writev
13484 eval $inlibc
13485
13486 : preserve RCS keywords in files with variable substitution, grrr
13487 Date='$Date'
13488 Id='$Id'
13489 Log='$Log'
13490 RCSfile='$RCSfile'
13491 Revision='$Revision'
13492
13493 : check for alignment requirements
13494 echo " "
13495 case "$usecrosscompile$multiarch" in
13496 *$define*)
13497         $cat <<EOM
13498 You seem to be either cross-compiling or doing a multiarchitecture build,
13499 skipping the memory alignment check.
13500
13501 EOM
13502         case "$alignbytes" in
13503         '') alignbytes=8 ;;
13504         esac
13505         ;;
13506 *)
13507         case "$alignbytes" in
13508         '') echo "Checking alignment constraints..." >&4
13509                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
13510                         $cat >try.c <<'EOCP'
13511 typedef long double NV;
13512 EOCP
13513                 else
13514                         $cat >try.c <<'EOCP'
13515 typedef double NV;
13516 EOCP
13517                 fi
13518                 $cat >>try.c <<'EOCP'
13519 #include <stdio.h>
13520 struct foobar {
13521         char foo;
13522         NV bar;
13523 } try_algn;
13524 int main()
13525 {
13526     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
13527     return(0);
13528 }
13529 EOCP
13530                 set try
13531                 if eval $compile_ok; then
13532                         dflt=`$run ./try`
13533                 else
13534                         dflt='8'
13535                         echo "(I can't seem to compile the test program...)"
13536                 fi
13537                 ;;
13538         *) dflt="$alignbytes"
13539                 ;;
13540         esac
13541         rp="Doubles must be aligned on a how-many-byte boundary?"
13542         . ./myread
13543         alignbytes="$ans"
13544         $rm -f try.c try
13545         ;;
13546 esac
13547
13548
13549 : set the base revision
13550 baserev=5.0
13551
13552 : how do we catenate cpp tokens here?
13553 echo " "
13554 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
13555 $cat >cpp_stuff.c <<'EOCP'
13556 #define RCAT(a,b)a/**/b
13557 #define ACAT(a,b)a ## b
13558 RCAT(Rei,ser)
13559 ACAT(Cir,cus)
13560 EOCP
13561 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
13562 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
13563         echo "Oh!  Smells like ANSI's been here." >&4
13564         echo "We can catify or stringify, separately or together!"
13565         cpp_stuff=42
13566 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
13567         echo "Ah, yes!  The good old days!" >&4
13568         echo "However, in the good old days we don't know how to stringify and"
13569         echo "catify at the same time."
13570         cpp_stuff=1
13571 else
13572         $cat >&4 <<EOM
13573 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
13574 to have to edit the values of CAT[2-5] in config.h...
13575 EOM
13576         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
13577 fi
13578 $rm -f cpp_stuff.*
13579
13580 : see if this is a db.h system
13581 set db.h i_db
13582 eval $inhdr
13583
13584 case "$i_db" in
13585 $define)
13586         : Check db version.
13587         echo " "
13588         echo "Checking Berkeley DB version ..." >&4
13589         $cat >try.c <<EOCP
13590 #$d_const HASCONST
13591 #ifndef HASCONST
13592 #define const
13593 #endif
13594 #include <sys/types.h>
13595 #include <stdio.h>
13596 #include <db.h>
13597 int main(int argc, char *argv[])
13598 {
13599 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
13600     int Major, Minor, Patch ;
13601     unsigned long Version ;
13602     (void)db_version(&Major, &Minor, &Patch) ;
13603     if (argc == 2) {
13604         printf("%d %d %d %d %d %d\n",
13605                DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
13606                Major, Minor, Patch);
13607         exit(0);
13608     }
13609     printf("You have Berkeley DB Version 2 or greater.\n");
13610
13611     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
13612                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
13613     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
13614                 Major, Minor, Patch) ;
13615
13616     /* check that db.h & libdb are compatible */
13617     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
13618         printf("db.h and libdb are incompatible.\n") ;
13619         exit(3);        
13620     }
13621
13622     printf("db.h and libdb are compatible.\n") ;
13623
13624     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
13625                 + DB_VERSION_PATCH ;
13626
13627     /* needs to be >= 2.3.4 */
13628     if (Version < 2003004) {
13629     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
13630         printf("Perl needs Berkeley DB 2.3.4 or greater.\n") ;
13631         exit(2);        
13632     }
13633
13634     exit(0);
13635 #else
13636 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
13637     if (argc == 2) {
13638         printf("1 0 0\n");
13639         exit(0);
13640     }
13641     printf("You have Berkeley DB Version 1.\n");
13642     exit(0);    /* DB version < 2: the coast is clear. */
13643 #else
13644     exit(1);    /* <db.h> not Berkeley DB? */
13645 #endif
13646 #endif
13647 }
13648 EOCP
13649         set try
13650         if eval $compile_ok && $run ./try; then
13651                 echo 'Looks OK.' >&4
13652                 set `$run ./try 1`
13653                 db_version_major=$1
13654                 db_version_minor=$2
13655                 db_version_patch=$3
13656         else
13657                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
13658                 i_db=$undef
13659                 case " $libs " in
13660                 *"-ldb "*)
13661                         : Remove db from list of libraries to use
13662                         echo "Removing unusable -ldb from library list" >&4
13663                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
13664                         shift
13665                         libs="$*"
13666                         echo "libs = $libs" >&4
13667                         ;;
13668                 esac
13669         fi
13670         $rm -f try.*
13671         ;;
13672 esac
13673
13674 case "$i_db" in
13675 define)
13676         : Check the return type needed for hash 
13677         echo " "
13678         echo "Checking return type needed for hash for Berkeley DB ..." >&4
13679         $cat >try.c <<EOCP
13680 #$d_const HASCONST
13681 #ifndef HASCONST
13682 #define const
13683 #endif
13684 #include <sys/types.h>
13685 #include <db.h>
13686
13687 #ifndef DB_VERSION_MAJOR
13688 u_int32_t hash_cb (ptr, size)
13689 const void *ptr;
13690 size_t size;
13691 {
13692 }
13693 HASHINFO info;
13694 int main()
13695 {
13696         info.hash = hash_cb;
13697 }
13698 #endif
13699 EOCP
13700         if $cc $ccflags -c try.c >try.out 2>&1 ; then
13701                 if $contains warning try.out >>/dev/null 2>&1 ; then
13702                         db_hashtype='int'
13703                 else
13704                         db_hashtype='u_int32_t'
13705                 fi
13706         else
13707                 : XXX Maybe we should just give up here.
13708                 db_hashtype=u_int32_t
13709                 $cat try.out >&4
13710                 echo "Help:  I can't seem to compile the db test program." >&4
13711                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
13712         fi
13713         $rm -f try.*
13714         echo "Your version of Berkeley DB uses $db_hashtype for hash."
13715         ;;
13716 *)      db_hashtype=u_int32_t
13717         ;;
13718 esac
13719 case "$i_db" in
13720 define)
13721         : Check the return type needed for prefix 
13722         echo " "
13723         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
13724         cat >try.c <<EOCP
13725 #$d_const HASCONST
13726 #ifndef HASCONST
13727 #define const
13728 #endif
13729 #include <sys/types.h>
13730 #include <db.h>
13731
13732 #ifndef DB_VERSION_MAJOR
13733 size_t prefix_cb (key1, key2)
13734 const DBT *key1;
13735 const DBT *key2;
13736 {
13737 }
13738 BTREEINFO info;
13739 int main()
13740 {
13741         info.prefix = prefix_cb;
13742 }
13743 #endif
13744 EOCP
13745         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
13746                 if $contains warning try.out >>/dev/null 2>&1 ; then
13747                         db_prefixtype='int'
13748                 else
13749                         db_prefixtype='size_t'
13750                 fi
13751         else
13752                 db_prefixtype='size_t'
13753                 : XXX Maybe we should just give up here.
13754                 $cat try.out >&4
13755                 echo "Help:  I can't seem to compile the db test program." >&4
13756                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
13757         fi
13758         $rm -f try.*
13759         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
13760         ;;
13761 *)      db_prefixtype='size_t'
13762         ;;
13763 esac
13764
13765
13766 : How can we generate normalized random numbers ?
13767 echo " "
13768 echo "Looking for a random number function..." >&4
13769 case "$randfunc" in
13770 '')
13771         if set drand48 val -f; eval $csym; $val; then
13772                 dflt="drand48"
13773                 echo "Good, found drand48()." >&4
13774         elif set random val -f; eval $csym; $val; then
13775                 dflt="random"
13776                 echo "OK, found random()." >&4
13777         else
13778                 dflt="rand"
13779                 echo "Yick, looks like I have to use rand()." >&4
13780         fi
13781         echo " "
13782         ;;
13783 *)
13784         dflt="$randfunc"
13785         ;;
13786 esac
13787 cont=true
13788
13789 case "$ccflags" in
13790 *-Dmy_rand=*|*-Dmy_srand=*)
13791         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
13792         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
13793         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
13794         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
13795         ;;
13796 esac
13797
13798 while $test "$cont"; do
13799         rp="Use which function to generate random numbers?"
13800         . ./myread
13801         if $test "$ans" = "$dflt"; then
13802                 : null
13803         else
13804                 randbits=''
13805         fi
13806         randfunc="$ans"
13807         if set $ans val -f; eval $csym; $val; then
13808                 cont=''
13809         else
13810                 dflt=y
13811                 rp="I cannot find function $ans. Use that name anyway?"
13812                 . ./myread
13813                 dflt=rand
13814                 case "$ans" in
13815                         [yY]*) cont='';;
13816                 esac
13817         fi
13818         case "$cont" in
13819         '')
13820                 case "$randfunc" in
13821                 drand48)
13822                         drand01="drand48()"
13823                         seedfunc="srand48"
13824                         randbits=48
13825                         randseedtype=long
13826                         ;;
13827                 rand|random)
13828                         case "$randbits" in
13829                         '')
13830 echo "Checking to see how many bits your $randfunc() function produces..." >&4
13831                                 $cat >try.c <<EOCP
13832 #$i_unistd I_UNISTD
13833 #$i_stdlib I_STDLIB
13834 #include <stdio.h>
13835 #ifdef I_UNISTD
13836 #  include <unistd.h>
13837 #endif
13838 #ifdef I_STDLIB
13839 #  include <stdlib.h>
13840 #endif
13841 int main()
13842 {
13843         register int i;
13844         register unsigned long tmp;
13845         register unsigned long max = 0L;
13846
13847         for (i = 1000; i; i--) {
13848                 tmp = (unsigned long) $randfunc();
13849                 if (tmp > max) max = tmp;
13850         }
13851         for (i = 0; max; i++)
13852                 max /= 2;
13853         printf("%d\n",i);
13854 }
13855 EOCP
13856                                 set try
13857                                 if eval $compile_ok; then
13858                                         dflt=`try`
13859                                 else
13860                                         dflt='?'
13861                                         echo "(I can't seem to compile the test program...)"
13862                                 fi
13863                                 ;;
13864                         *)
13865                                 dflt="$randbits"
13866                                 ;;
13867                         esac
13868                         rp="How many bits does your $randfunc() function produce?"
13869                         . ./myread
13870                         randbits="$ans"
13871                         $rm -f try.c try
13872                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13873                         seedfunc="s$randfunc"
13874                         randseedtype=unsigned
13875                         ;;
13876                 *)
13877                         dflt="31"
13878                         rp="How many bits does your $randfunc() function produce?"
13879                         . ./myread
13880                         randbits="$ans"
13881                         seedfunc="s$randfunc"
13882                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13883                         if set $seedfunc val -f; eval $csym; $val; then
13884                                 echo "(Using $seedfunc() to seed random generator)"
13885                         else
13886                                 echo "(Warning: no $seedfunc() to seed random generator)"
13887                                 seedfunc=rand
13888                         fi
13889                         randseedtype=unsigned
13890                         ;;
13891                 esac
13892                 ;;
13893         esac
13894 done
13895
13896 echo " "
13897 echo "Determining whether or not we are on an EBCDIC system..." >&4
13898 $cat >try.c <<'EOM'
13899 int main()
13900 {
13901   if ('M'==0xd4) return 0;
13902   return 1;
13903 }
13904 EOM
13905
13906 val=$undef
13907 set try
13908 if eval $compile_ok; then
13909         if $run ./try; then
13910                 echo "You seem to speak EBCDIC." >&4
13911                 val="$define"
13912         else
13913                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4
13914         fi
13915 else
13916         echo "I'm unable to compile the test program." >&4
13917         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
13918 fi
13919 $rm -f try try.*
13920 set ebcdic
13921 eval $setvar
13922
13923 echo " "
13924 $cat >&4 <<EOM
13925 Checking how to flush all pending stdio output...
13926 EOM
13927 # I only know how to find the first 32 possibly open files on SunOS.
13928 # See also hints/sunos_4_1.sh and util.c  --AD
13929 case "$osname" in
13930 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
13931 esac
13932 $cat >>try.c <<EOCP
13933 #include <stdio.h>
13934 #$i_unistd I_UNISTD
13935 #ifdef I_UNISTD
13936 # include <unistd.h>
13937 #endif
13938 #$d_sysconf HAS_SYSCONF
13939 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
13940 #ifdef HAS_STDIO_STREAM_ARRAY
13941 # define STDIO_STREAM_ARRAY $stdio_stream_array
13942 #endif
13943 int main() {
13944   FILE* p;
13945   unlink("try.out");
13946   p = fopen("try.out", "w");
13947 #ifdef TRY_FPUTC
13948   fputc('x', p);
13949 #else
13950 # ifdef TRY_FPRINTF
13951   fprintf(p, "x");
13952 # endif
13953 #endif
13954 #ifdef TRY_FFLUSH_NULL
13955   fflush(NULL);
13956 #endif
13957 #ifdef TRY_FFLUSH_ALL
13958   {
13959     long open_max = -1;
13960 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
13961     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
13962 # else
13963 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
13964     open_max = sysconf(_SC_OPEN_MAX);
13965 #  else
13966 #   ifdef FOPEN_MAX
13967     open_max = FOPEN_MAX;
13968 #   else
13969 #    ifdef OPEN_MAX
13970     open_max = OPEN_MAX;
13971 #    else
13972 #     ifdef _NFILE
13973     open_max = _NFILE;
13974 #     endif
13975 #    endif
13976 #   endif
13977 #  endif
13978 # endif 
13979 # ifdef HAS_STDIO_STREAM_ARRAY
13980     if (open_max > 0) {
13981       long i;
13982       for (i = 0; i < open_max; i++)
13983             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
13984                 STDIO_STREAM_ARRAY[i]._file < open_max &&
13985                 STDIO_STREAM_ARRAY[i]._flag)
13986                 fflush(&STDIO_STREAM_ARRAY[i]);
13987     }   
13988   }
13989 # endif
13990 #endif
13991   _exit(42);
13992 }
13993 EOCP
13994 : first we have to find out how _not_ to flush
13995 $to try.c
13996 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
13997     output=''
13998     set try -DTRY_FPUTC
13999     if eval $compile; then
14000             $run ./try 2>/dev/null
14001             code="$?"
14002             $from try.out
14003             if $test ! -s try.out -a "X$code" = X42; then
14004                 output=-DTRY_FPUTC
14005             fi
14006     fi
14007     case "$output" in
14008     '')
14009             set try -DTRY_FPRINTF
14010             if eval $compile; then
14011                     $run ./try 2>/dev/null
14012                     code="$?"
14013                     $from try.out
14014                     if $test ! -s try.out -a "X$code" = X42; then
14015                         output=-DTRY_FPRINTF
14016                     fi
14017             fi
14018         ;;
14019     esac
14020 fi
14021 : check for fflush NULL behaviour
14022 case "$fflushNULL" in
14023 '')     set try -DTRY_FFLUSH_NULL $output
14024         if eval $compile; then
14025                 $run ./try 2>/dev/null
14026                 code="$?"
14027                 $from try.out
14028                 if $test -s try.out -a "X$code" = X42; then
14029                         fflushNULL="`$cat try.out`"
14030                 else
14031                         if $test "X$code" != X42; then
14032                                 $cat >&4 <<EOM
14033 (If this test failed, don't worry, we'll try another method shortly.)
14034 EOM
14035                         fi
14036                 fi
14037         fi
14038         $rm -f core try.core core.try.*
14039         case "$fflushNULL" in
14040         x)      $cat >&4 <<EOM
14041 Your fflush(NULL) works okay for output streams.
14042 Let's see if it clobbers input pipes...
14043 EOM
14044 # As of mid-March 2000 all versions of Solaris appear to have a stdio
14045 # bug that improperly flushes the input end of pipes.  So we avoid the
14046 # autoflush on fork/system/exec support for now. :-(
14047 $cat >tryp.c <<EOCP
14048 #include <stdio.h>
14049 int
14050 main(int argc, char **argv)
14051 {
14052     char buf[1024];
14053     int i;
14054     char *bp = buf;
14055     while (1) {
14056         while ((i = getc(stdin)) != -1
14057                && (*bp++ = i) != '\n'
14058                && bp < &buf[1024])
14059         /* DO NOTHING */ ;
14060         *bp = '\0';
14061         fprintf(stdout, "%s", buf);
14062         fflush(NULL);
14063         if (i == -1)
14064             return 0;
14065         bp = buf;
14066     }
14067 }
14068 EOCP
14069                 fflushNULL="$define"
14070                 set tryp
14071                 if eval $compile; then
14072                     $rm -f tryp.out
14073                     $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14074                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
14075                        $cat >&4 <<EOM
14076 fflush(NULL) seems to behave okay with input streams.
14077 EOM
14078                         fflushNULL="$define"
14079                     else
14080                         $cat >&4 <<EOM
14081 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
14082 EOM
14083                         fflushNULL="$undef"
14084                     fi
14085                 fi
14086                 $rm -f core tryp.c tryp.core core.tryp.*
14087                 ;;
14088         '')     $cat >&4 <<EOM
14089 Your fflush(NULL) isn't working (contrary to ANSI C).
14090 EOM
14091                 fflushNULL="$undef"
14092                 ;;
14093         *)      $cat >&4 <<EOM
14094 Cannot figure out whether your fflush(NULL) works or not.
14095 I'm assuming it doesn't (contrary to ANSI C).
14096 EOM
14097                 fflushNULL="$undef"
14098                 ;;
14099         esac
14100         ;;
14101 $define|true|[yY]*)
14102         fflushNULL="$define"
14103         ;;
14104 *)
14105         fflushNULL="$undef"
14106         ;;
14107 esac
14108 : check explicit looping only if NULL did not work, and if the pipe
14109 : bug does not show up on an explicit flush too
14110 case "$fflushNULL" in
14111 "$undef")
14112         $cat >tryp.c <<EOCP
14113 #include <stdio.h>
14114 int
14115 main(int argc, char **argv)
14116 {
14117     char buf[1024];
14118     int i;
14119     char *bp = buf;
14120     while (1) {
14121         while ((i = getc(stdin)) != -1
14122                && (*bp++ = i) != '\n'
14123                && bp < &buf[1024])
14124         /* DO NOTHING */ ;
14125         *bp = '\0';
14126         fprintf(stdout, "%s", buf);
14127         fflush(stdin);
14128         if (i == -1)
14129             return 0;
14130         bp = buf;
14131     }
14132 }
14133 EOCP
14134         set tryp
14135         if eval $compile; then
14136             $rm -f tryp.out
14137             $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14138             if cmp tryp.c tryp.out >/dev/null 2>&1; then
14139                $cat >&4 <<EOM
14140 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
14141 EOM
14142                 : now check for fflushall behaviour
14143                 case "$fflushall" in
14144                 '')     set try -DTRY_FFLUSH_ALL $output
14145                         if eval $compile; then
14146                                 $cat >&4 <<EOM
14147 (Now testing the other method--but note that this also may fail.)
14148 EOM
14149                                 $run ./try 2>/dev/null
14150                                 code=$?
14151                                 $from try.out
14152                                 if $test -s try.out -a "X$code" = X42; then
14153                                         fflushall="`$cat try.out`"
14154                                 fi
14155                         fi
14156                         $rm -f core try.core core.try.*
14157                         case "$fflushall" in
14158                         x)      $cat >&4 <<EOM
14159 Whew. Flushing explicitly all the stdio streams works.
14160 EOM
14161                                 fflushall="$define"
14162                                 ;;
14163                         '')     $cat >&4 <<EOM
14164 Sigh. Flushing explicitly all the stdio streams doesn't work.
14165 EOM
14166                                 fflushall="$undef"
14167                                 ;;
14168                         *)      $cat >&4 <<EOM
14169 Cannot figure out whether flushing stdio streams explicitly works or not.
14170 I'm assuming it doesn't.
14171 EOM
14172                                 fflushall="$undef"
14173                                 ;;
14174                         esac
14175                         ;;
14176                 "$define"|true|[yY]*)
14177                         fflushall="$define"
14178                         ;;
14179                 *)
14180                         fflushall="$undef"
14181                         ;;
14182                 esac
14183             else
14184                 $cat >&4 <<EOM
14185 All is futile.  Even fflush(stdin) clobbers input pipes!
14186 EOM
14187                 fflushall="$undef"
14188             fi
14189         else
14190             fflushall="$undef"
14191         fi
14192         $rm -f core tryp.c tryp.core core.tryp.*
14193         ;;
14194 *)      fflushall="$undef"
14195         ;;
14196 esac
14197
14198 case "$fflushNULL$fflushall" in
14199 undefundef)
14200         $cat <<EOM
14201 OK, I give up.  I cannot figure out how to flush pending stdio output.
14202 We won't be flushing handles at all before fork/exec/popen.
14203 EOM
14204         ;;
14205 esac
14206 $rm -f try.* try$exe_ext
14207
14208 : Store the full pathname to the ar program for use in the C program
14209 : Respect a hint or command line value for full_ar.
14210 case "$full_ar" in
14211 '') full_ar=$ar ;;
14212 esac
14213
14214 : Store the full pathname to the sed program for use in the C program
14215 full_sed=$sed
14216
14217 : see what type gids are declared as in the kernel
14218 echo " "
14219 echo "Looking for the type for group ids returned by getgid()."
14220 set gid_t gidtype xxx stdio.h sys/types.h
14221 eval $typedef
14222 case "$gidtype" in
14223 xxx)
14224         xxx=`./findhdr sys/user.h`
14225         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
14226         case $1 in
14227         unsigned) dflt="$1 $2" ;;
14228         *) dflt="$1" ;;
14229         esac
14230         ;;
14231 *) dflt="$gidtype";;
14232 esac
14233 case "$gidtype" in
14234 gid_t) echo "gid_t found." ;;
14235 *)      rp="What is the type for group ids returned by getgid()?"
14236         . ./myread
14237         gidtype="$ans"
14238         ;;
14239 esac
14240
14241 echo " "
14242 case "$gidtype" in
14243 *_t) zzz="$gidtype"     ;;
14244 *)   zzz="gid"          ;;
14245 esac
14246 echo "Checking the size of $zzz..." >&4 
14247 cat > try.c <<EOCP
14248 #include <sys/types.h>
14249 #include <stdio.h>
14250 int main() {
14251     printf("%d\n", (int)sizeof($gidtype));
14252     exit(0);
14253 }
14254 EOCP
14255 set try
14256 if eval $compile_ok; then
14257         yyy=`$run ./try`
14258         case "$yyy" in
14259         '')     gidsize=4
14260                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
14261                 ;;
14262         *)      gidsize=$yyy
14263                 echo "Your $zzz is $gidsize bytes long."
14264                 ;;
14265         esac
14266 else
14267         gidsize=4
14268         echo "(I can't compile the test program--guessing $gidsize.)" >&4
14269 fi
14270
14271
14272 echo " "
14273 case "$gidtype" in
14274 *_t) zzz="$gidtype"     ;;
14275 *)   zzz="gid"          ;;
14276 esac
14277 echo "Checking the sign of $zzz..." >&4 
14278 cat > try.c <<EOCP
14279 #include <sys/types.h>
14280 #include <stdio.h>
14281 int main() {
14282         $gidtype foo = -1;
14283         if (foo < 0)
14284                 printf("-1\n");
14285         else
14286                 printf("1\n");
14287 }
14288 EOCP
14289 set try
14290 if eval $compile; then
14291         yyy=`$run ./try`
14292         case "$yyy" in
14293         '')     gidsign=1
14294                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14295                 ;;
14296         *)      gidsign=$yyy
14297                 case "$gidsign" in
14298                  1) echo "Your $zzz is unsigned." ;;
14299                 -1) echo "Your $zzz is signed."   ;;
14300                 esac
14301                 ;;
14302         esac
14303 else
14304         gidsign=1
14305         echo "(I can't compile the test program--guessing unsigned.)" >&4
14306 fi
14307
14308
14309 echo " "
14310
14311 if $test X"$quadtype" != X; then
14312
14313 echo "Checking how to print 64-bit integers..." >&4
14314
14315 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
14316         $cat >try.c <<'EOCP'
14317 #include <sys/types.h>
14318 #include <stdio.h>
14319 int main() {
14320   int q = 12345678901;
14321   printf("%ld\n", q);
14322 }
14323 EOCP
14324         set try
14325         if eval $compile; then
14326                 yyy=`$run ./try`
14327                 case "$yyy" in
14328                 12345678901)
14329                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
14330                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
14331                         echo "We will use %d."
14332                         ;;
14333                 esac
14334         fi
14335 fi
14336
14337 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
14338         $cat >try.c <<'EOCP'
14339 #include <sys/types.h>
14340 #include <stdio.h>
14341 int main() {
14342   long q = 12345678901;
14343   printf("%ld\n", q);
14344 }
14345 EOCP
14346         set try
14347         if eval $compile; then
14348                 yyy=`$run ./try`
14349                 case "$yyy" in
14350                 12345678901)
14351                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
14352                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
14353                         echo "We will use %ld."
14354                         ;;
14355                 esac
14356         fi
14357 fi
14358
14359 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
14360         $cat >try.c <<'EOCP'
14361 #include <sys/types.h>
14362 #include <inttypes.h>
14363 #include <stdio.h>
14364 int main() {
14365   int64_t q = 12345678901;
14366   printf("%" PRId64 "\n", q);
14367 }
14368 EOCP
14369         set try
14370         if eval $compile; then
14371                 yyy=`$run ./try`
14372                 case "$yyy" in
14373                 12345678901)
14374                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
14375                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
14376                         echo "We will use the C9X style."
14377                         ;;
14378                 esac
14379         fi
14380 fi
14381
14382 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14383         $cat >try.c <<EOCP
14384 #include <sys/types.h>
14385 #include <stdio.h>
14386 int main() {
14387   $quadtype q = 12345678901;
14388   printf("%Ld\n", q);
14389 }
14390 EOCP
14391         set try
14392         if eval $compile; then
14393                 yyy=`$run ./try`
14394                 case "$yyy" in
14395                 12345678901)
14396                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
14397                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
14398                         echo "We will use %Ld."
14399                         ;;
14400                 esac
14401         fi
14402 fi
14403
14404 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
14405         $cat >try.c <<'EOCP'
14406 #include <sys/types.h>
14407 #include <stdio.h>
14408 int main() {
14409   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
14410   printf("%lld\n", q);
14411 }
14412 EOCP
14413         set try
14414         if eval $compile; then
14415                 yyy=`$run ./try`
14416                 case "$yyy" in
14417                 12345678901)
14418                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
14419                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
14420                         echo "We will use the %lld style."
14421                         ;;
14422                 esac
14423         fi
14424 fi
14425
14426 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14427         $cat >try.c <<EOCP
14428 #include <sys/types.h>
14429 #include <stdio.h>
14430 int main() {
14431   $quadtype q = 12345678901;
14432   printf("%qd\n", q);
14433 }
14434 EOCP
14435         set try
14436         if eval $compile; then
14437                 yyy=`$run ./try`
14438                 case "$yyy" in
14439                 12345678901)
14440                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
14441                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
14442                         echo "We will use %qd."
14443                         ;;
14444                 esac
14445         fi
14446 fi
14447
14448 if $test X"$sPRId64" = X; then
14449         echo "Cannot figure out how to print 64-bit integers." >&4
14450 fi
14451
14452 $rm -f try try.*
14453
14454 fi
14455
14456 case "$sPRId64" in
14457 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
14458         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; 
14459         ;;
14460 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
14461         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; 
14462         ;;
14463 esac
14464
14465
14466 echo " "
14467 $echo "Checking the format strings to be used for Perl's internal types..." >&4
14468
14469 if $test X"$ivsize" = X8; then
14470         ivdformat="$sPRId64"
14471         uvuformat="$sPRIu64"
14472         uvoformat="$sPRIo64"
14473         uvxformat="$sPRIx64"
14474         uvXUformat="$sPRIXU64"
14475 else
14476         if $test X"$ivsize" = X"$longsize"; then
14477                 ivdformat='"ld"'
14478                 uvuformat='"lu"'
14479                 uvoformat='"lo"'
14480                 uvxformat='"lx"'
14481                 uvXUformat='"lX"'
14482         else
14483                 if $test X"$ivsize" = X"$intsize"; then
14484                         ivdformat='"d"'
14485                         uvuformat='"u"'
14486                         uvoformat='"o"'
14487                         uvxformat='"x"'
14488                         uvXUformat='"X"'
14489                 else
14490                         : far out
14491                         if $test X"$ivsize" = X"$shortsize"; then
14492                                 ivdformat='"hd"'
14493                                 uvuformat='"hu"'
14494                                 uvoformat='"ho"'
14495                                 uvxformat='"hx"'
14496                                 uvXUformat='"hX"'
14497                         fi
14498                 fi
14499         fi
14500 fi
14501
14502 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
14503         nveformat="$sPRIeldbl"
14504         nvfformat="$sPRIfldbl"
14505         nvgformat="$sPRIgldbl"
14506         nvEUformat="$sPRIEUldbl"
14507         nvFUformat="$sPRIFUldbl"
14508         nvGUformat="$sPRIGUldbl"
14509 else
14510         nveformat='"e"'
14511         nvfformat='"f"'
14512         nvgformat='"g"'
14513         nvEUformat='"E"'
14514         nvFUformat='"F"'
14515         nvGUformat='"G"'
14516 fi
14517
14518 case "$ivdformat" in
14519 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
14520     exit 1
14521     ;;
14522 esac
14523
14524
14525 echo " "
14526 $echo "Checking the format string to be used for gids..." >&4
14527
14528 case "$gidsign" in
14529 -1)     if $test X"$gidsize" = X"$ivsize"; then
14530                 gidformat="$ivdformat"
14531         else
14532                 if $test X"$gidsize" = X"$longsize"; then
14533                         gidformat='"ld"'
14534                 else
14535                         if $test X"$gidsize" = X"$intsize"; then
14536                                 gidformat='"d"'
14537                         else
14538                                 if $test X"$gidsize" = X"$shortsize"; then
14539                                         gidformat='"hd"'
14540                                 fi
14541                         fi
14542                 fi
14543         fi
14544         ;;
14545 *)      if $test X"$gidsize" = X"$uvsize"; then
14546                 gidformat="$uvuformat"
14547         else
14548                 if $test X"$gidsize" = X"$longsize"; then
14549                         gidformat='"lu"'
14550                 else
14551                         if $test X"$gidsize" = X"$intsize"; then
14552                                 gidformat='"u"'
14553                         else
14554                                 if $test X"$gidsize" = X"$shortsize"; then
14555                                         gidformat='"hu"'
14556                                 fi
14557                         fi
14558                 fi
14559         fi
14560         ;;
14561 esac
14562
14563 : see if getgroups exists
14564 set getgroups d_getgrps
14565 eval $inlibc
14566
14567 : see if setgroups exists
14568 set setgroups d_setgrps
14569 eval $inlibc
14570
14571
14572 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
14573 echo " "
14574 case "$d_getgrps$d_setgrps" in
14575 *define*)
14576         case "$groupstype" in
14577         '') dflt="$gidtype" ;;
14578         *)  dflt="$groupstype" ;;
14579         esac
14580         $cat <<EOM
14581 What type of pointer is the second argument to getgroups() and setgroups()?
14582 Usually this is the same as group ids, $gidtype, but not always.
14583
14584 EOM
14585         rp='What type pointer is the second argument to getgroups() and setgroups()?'
14586         . ./myread
14587         groupstype="$ans"
14588         ;;
14589 *)  groupstype="$gidtype";;
14590 esac
14591
14592 echo " "
14593 echo "Checking if your $make program sets \$(MAKE)..." >&4
14594 case "$make_set_make" in
14595 '')
14596         $sed 's/^X //' > testmake.mak << 'EOF'
14597 Xall:
14598 X       @echo 'maketemp="$(MAKE)"'
14599 EOF
14600         case "`$make -f testmake.mak 2>/dev/null`" in
14601         *maketemp=*) make_set_make='#' ;;
14602         *)      make_set_make="MAKE=$make" ;;
14603         esac
14604         $rm -f testmake.mak
14605         ;;
14606 esac
14607 case "$make_set_make" in
14608 '#') echo "Yup, it does.";;
14609 *) echo "Nope, it doesn't.";;
14610 esac
14611
14612 : see what type is used for mode_t
14613 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
14614 set mode_t modetype int stdio.h sys/types.h
14615 eval $typedef_ask
14616
14617 : see if stdarg is available
14618 echo " "
14619 if $test `./findhdr stdarg.h`; then
14620         echo "<stdarg.h> found." >&4
14621         valstd="$define"
14622 else
14623         echo "<stdarg.h> NOT found." >&4
14624         valstd="$undef"
14625 fi
14626
14627 : see if varags is available
14628 echo " "
14629 if $test `./findhdr varargs.h`; then
14630         echo "<varargs.h> found." >&4
14631 else
14632         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14633 fi
14634
14635 : set up the varargs testing programs
14636 $cat > varargs.c <<EOP
14637 #ifdef I_STDARG
14638 #include <stdarg.h>
14639 #endif
14640 #ifdef I_VARARGS
14641 #include <varargs.h>
14642 #endif
14643
14644 #ifdef I_STDARG
14645 int f(char *p, ...)
14646 #else
14647 int f(va_alist)
14648 va_dcl
14649 #endif
14650 {
14651         va_list ap;
14652 #ifndef I_STDARG
14653         char *p;
14654 #endif
14655 #ifdef I_STDARG
14656         va_start(ap,p);
14657 #else
14658         va_start(ap);
14659         p = va_arg(ap, char *);
14660 #endif
14661         va_end(ap);
14662 }
14663 EOP
14664 $cat > varargs <<EOP
14665 $startsh
14666 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14667         echo "true"
14668 else
14669         echo "false"
14670 fi
14671 $rm -f varargs$_o
14672 EOP
14673 chmod +x varargs
14674
14675 : now check which varargs header should be included
14676 echo " "
14677 i_varhdr=''
14678 case "$valstd" in
14679 "$define")
14680         if `./varargs I_STDARG`; then
14681                 val='stdarg.h'
14682         elif `./varargs I_VARARGS`; then
14683                 val='varargs.h'
14684         fi
14685         ;;
14686 *)
14687         if `./varargs I_VARARGS`; then
14688                 val='varargs.h'
14689         fi
14690         ;;
14691 esac
14692 case "$val" in
14693 '')
14694 echo "I could not find the definition for va_dcl... You have problems..." >&4
14695         val="$undef"; set i_stdarg; eval $setvar
14696         val="$undef"; set i_varargs; eval $setvar
14697         ;;
14698 *) 
14699         set i_varhdr
14700         eval $setvar
14701         case "$i_varhdr" in
14702         stdarg.h)
14703                 val="$define"; set i_stdarg; eval $setvar
14704                 val="$undef"; set i_varargs; eval $setvar
14705                 ;;
14706         varargs.h)
14707                 val="$undef"; set i_stdarg; eval $setvar
14708                 val="$define"; set i_varargs; eval $setvar
14709                 ;;
14710         esac
14711         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14712 esac
14713 $rm -f varargs*
14714
14715 : see if we need va_copy
14716 echo " "
14717 case "$i_stdarg" in
14718 "$define")
14719         $cat >try.c <<EOCP
14720 #include <stdarg.h>
14721 #include <stdio.h>
14722 #$i_stdlib I_STDLIB
14723 #ifdef I_STDLIB
14724 #include <stdlib.h>
14725 #endif
14726 #include <signal.h>
14727
14728 int
14729 ivfprintf(FILE *f, const char *fmt, va_list *valp)
14730 {
14731   return vfprintf(f, fmt, *valp);
14732 }
14733  
14734 int    
14735 myvfprintf(FILE *f, const  char *fmt, va_list val)
14736 {
14737   return ivfprintf(f, fmt, &val);
14738 }
14739       
14740 int
14741 myprintf(char *fmt, ...) 
14742 {
14743   va_list val;
14744   va_start(val, fmt);
14745   return myvfprintf(stdout, fmt, val); 
14746 }         
14747
14748 int
14749 main(int ac, char **av)
14750 {
14751   signal(SIGSEGV, exit);
14752
14753   myprintf("%s%cs all right, then\n", "that", '\'');                            
14754   exit(0);      
14755 }
14756 EOCP
14757         set try
14758         if eval $compile && $run ./try 2>&1 >/dev/null; then
14759                 case "`$run ./try`" in
14760                 "that's all right, then")
14761                         okay=yes
14762                         ;;
14763                 esac
14764         fi
14765         case "$okay" in
14766         yes)    echo "It seems that you don't need va_copy()." >&4
14767                 need_va_copy="$undef"
14768                 ;;
14769         *)      echo "It seems that va_copy() or similar will be needed." >&4
14770                 need_va_copy="$define"
14771                 ;;
14772         esac
14773         $rm -f try.* core core.* *.core *.core.*
14774         ;;
14775 *)      echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
14776         ;;
14777 esac
14778
14779 : define a fucntion to check prototypes
14780 $cat > protochk <<EOSH
14781 $startsh
14782 cc="$cc"
14783 optimize="$optimize"
14784 ccflags="$ccflags"
14785 prototype="$prototype"
14786 define="$define"
14787 rm=$rm
14788 EOSH
14789
14790 $cat >> protochk <<'EOSH'
14791
14792 $rm -f try.c
14793 foo="$1"
14794 shift
14795 while test $# -ge 2; do
14796         case "$1" in
14797                 $define) echo "#include <$2>" >> try.c ;;
14798                 literal) echo "$2" >> try.c ;;
14799         esac
14800     shift 2
14801 done
14802 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
14803 cat >> try.c <<'EOCP'
14804 #ifdef CAN_PROTOTYPE
14805 #define _(args) args
14806 #else
14807 #define _(args) ()
14808 #endif
14809 EOCP
14810 echo "$foo" >> try.c
14811 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
14812 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
14813 status=$?
14814 $rm -f try.[co]
14815 exit $status
14816 EOSH
14817 chmod +x protochk
14818 $eunicefix protochk
14819
14820 : see what type is used for size_t
14821 rp="What is the type used for the length parameter for string functions?"
14822 set size_t sizetype 'unsigned int' stdio.h sys/types.h
14823 eval $typedef_ask
14824
14825 : check for type of arguments to gethostbyaddr. 
14826 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
14827         case "$d_gethbyaddr" in
14828         $define)
14829                 $cat <<EOM
14830
14831 Checking to see what type of arguments are accepted by gethostbyaddr().
14832 EOM
14833                 hdrs="$define sys/types.h
14834                         $d_socket sys/socket.h 
14835                         $i_niin netinet/in.h 
14836                         $i_netdb netdb.h
14837                         $i_unistd unistd.h"
14838                 : The first arg can 'char *' or 'void *'
14839                 : The second arg is some of integral type
14840                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
14841                         for yyy in size_t long int; do
14842                                 case "$netdb_host_type" in
14843                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
14844                                         if ./protochk "$try" $hdrs; then
14845                                                 echo "Your system accepts $xxx for the first arg."
14846                                                 echo "...and $yyy for the second arg."
14847                                                 netdb_host_type="$xxx"
14848                                                 netdb_hlen_type="$yyy"
14849                                         fi
14850                                         ;;
14851                                 esac
14852                         done
14853                 done
14854                 : In case none of those worked, prompt the user.
14855                 case "$netdb_host_type" in
14856                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
14857                         dflt='char *'
14858                         . ./myread
14859                         netdb_host_type=$ans
14860                         rp='What is the type for the 2nd argument to gethostbyaddr?'
14861                         dflt="$sizetype"
14862                         . ./myread
14863                         netdb_hlen_type=$ans
14864                         ;;
14865                 esac
14866                 ;;
14867         *)      : no gethostbyaddr, so pick harmless defaults
14868                 netdb_host_type='char *'
14869                 netdb_hlen_type="$sizetype"
14870                 ;;
14871         esac
14872         # Remove the "const" if needed. -- but then we'll have a 
14873         # prototype clash!
14874         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
14875 fi
14876
14877 : check for type of argument to gethostbyname. 
14878 if test "X$netdb_name_type" = X ; then
14879         case "$d_gethbyname" in
14880         $define)
14881                 $cat <<EOM
14882
14883 Checking to see what type of argument is accepted by gethostbyname().
14884 EOM
14885                 hdrs="$define sys/types.h
14886                         $d_socket sys/socket.h 
14887                         $i_niin netinet/in.h 
14888                         $i_netdb netdb.h
14889                         $i_unistd unistd.h"
14890                 for xxx in "const char *" "char *"; do
14891                         case "$netdb_name_type" in
14892                         '')     try="extern struct hostent *gethostbyname($xxx);"
14893                                 if ./protochk "$try" $hdrs; then
14894                                         echo "Your system accepts $xxx."
14895                                         netdb_name_type="$xxx"
14896                                 fi
14897                                 ;;
14898                         esac
14899                 done
14900                 : In case none of those worked, prompt the user.
14901                 case "$netdb_name_type" in
14902                 '')     rp='What is the type for the 1st argument to gethostbyname?'
14903                         dflt='char *'
14904                         . ./myread
14905                         netdb_name_type=$ans
14906                         ;;
14907                 esac
14908                 ;;
14909         *)      : no gethostbyname, so pick harmless default
14910                 netdb_name_type='char *'
14911                 ;;
14912         esac
14913 fi
14914
14915 : check for type of 1st argument to getnetbyaddr. 
14916 if test "X$netdb_net_type" = X ; then
14917         case "$d_getnbyaddr" in
14918         $define)
14919                 $cat <<EOM
14920
14921 Checking to see what type of 1st argument is accepted by getnetbyaddr().
14922 EOM
14923                 hdrs="$define sys/types.h
14924                         $d_socket sys/socket.h 
14925                         $i_niin netinet/in.h 
14926                         $i_netdb netdb.h
14927                         $i_unistd unistd.h"
14928                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
14929                         case "$netdb_net_type" in
14930                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
14931                                 if ./protochk "$try" $hdrs; then
14932                                         echo "Your system accepts $xxx."
14933                                         netdb_net_type="$xxx"
14934                                 fi
14935                                 ;;
14936                         esac
14937                 done
14938                 : In case none of those worked, prompt the user.
14939                 case "$netdb_net_type" in
14940                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
14941                         dflt='long'
14942                         . ./myread
14943                         netdb_net_type=$ans
14944                         ;;
14945                 esac
14946                 ;;
14947         *)      : no getnetbyaddr, so pick harmless default
14948                 netdb_net_type='long'
14949                 ;;
14950         esac
14951 fi
14952 : locate the preferred pager for this system
14953 case "$pager" in
14954 '')
14955         dflt=''
14956         case "$pg" in
14957         /*) dflt=$pg;;
14958         [a-zA-Z]:/*) dflt=$pg;;
14959         esac
14960         case "$more" in
14961         /*) dflt=$more;;
14962         [a-zA-Z]:/*) dflt=$more;;
14963         esac
14964         case "$less" in
14965         /*) dflt=$less;;
14966         [a-zA-Z]:/*) dflt=$less;;
14967         esac
14968         case "$dflt" in
14969         '') dflt=/usr/ucb/more;;
14970         esac
14971         ;;
14972 *) dflt="$pager";;
14973 esac
14974 echo " "
14975 fn=f/
14976 rp='What pager is used on your system?'
14977 . ./getfile
14978 pager="$ans"
14979
14980 : see what type pids are declared as in the kernel
14981 rp="What is the type of process ids on this system?"
14982 set pid_t pidtype int stdio.h sys/types.h
14983 eval $typedef_ask
14984
14985 : Find earliest binary compatible site_perl subdirectory perl can use.
14986 case "$bincompat5005" in
14987 "$define") xs_apiversion='5.005' ;;
14988 *) xs_apiversion=$version ;;   # The current site_perl version.
14989 esac
14990 : Find earliest pure perl site_perl subdirectory perl can use.
14991 : The versioned directories started at 5.005.
14992 pm_apiversion='5.005'
14993
14994 : see if ar generates random libraries by itself
14995 echo " "
14996 echo "Checking how to generate random libraries on your machine..." >&4
14997 echo 'int bar1() { return bar2(); }' > bar1.c
14998 echo 'int bar2() { return 2; }' > bar2.c
14999 $cat > foo.c <<'EOP'
15000 int main() { printf("%d\n", bar1()); exit(0); }
15001 EOP
15002 $cc $ccflags -c bar1.c >/dev/null 2>&1
15003 $cc $ccflags -c bar2.c >/dev/null 2>&1
15004 $cc $ccflags -c foo.c >/dev/null 2>&1
15005 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
15006 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15007         $run ./foobar >/dev/null 2>&1; then
15008         echo "$ar appears to generate random libraries itself."
15009         orderlib=false
15010         ranlib=":"
15011 elif $ar ts bar$_a >/dev/null 2>&1 &&
15012         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15013         $run ./foobar >/dev/null 2>&1; then
15014                 echo "a table of contents needs to be added with '$ar ts'."
15015                 orderlib=false
15016                 ranlib="$ar ts"
15017 else
15018         case "$ranlib" in
15019         :) ranlib='';;
15020         '')
15021                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
15022                 $test -f $ranlib || ranlib=''
15023                 ;;
15024         esac
15025         if $test -n "$ranlib"; then
15026                 echo "your system has '$ranlib'; we'll use that."
15027                 orderlib=false
15028         else
15029                 echo "your system doesn't seem to support random libraries"
15030                 echo "so we'll use lorder and tsort to order the libraries."
15031                 orderlib=true
15032                 ranlib=":"
15033         fi
15034 fi
15035 $rm -f foo* bar* 
15036
15037 : check for type of arguments to select. 
15038 case "$selecttype" in
15039 '') case "$d_select" in
15040         $define)
15041                 echo " "
15042                 $cat <<EOM
15043 Checking to see what type of arguments are accepted by select().
15044 EOM
15045                 hdrs="$define sys/types.h
15046                         $i_systime sys/time.h 
15047                         $i_sysselct sys/select.h
15048                         $d_socket sys/socket.h"
15049                 : The first arg can be int, unsigned, or size_t
15050                 : The last arg may or may not be 'const'
15051                 val=''
15052                 : void pointer has been seen but using that
15053                 : breaks the selectminbits test
15054                 for xxx in 'fd_set *' 'int *'; do
15055                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
15056                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
15057                                         case "$val" in
15058                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
15059                                                 if ./protochk "$try" $hdrs; then
15060                                                         echo "Your system accepts $xxx."
15061                                                         val="$xxx"
15062                                                 fi
15063                                                 ;;
15064                                         esac
15065                                 done
15066                         done
15067                 done
15068                 case "$val" in
15069                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
15070                         case "$d_fd_set" in
15071                                 $define) dflt="fd_set *" ;;
15072                                 *)              dflt="int *" ;;
15073                         esac
15074                         . ./myread
15075                         val=$ans
15076                         ;;
15077                 esac
15078                 selecttype="$val"
15079                 ;;
15080         *)      : no select, so pick a harmless default
15081                 selecttype='int *'
15082                 ;;
15083         esac
15084         ;;
15085 esac
15086
15087 : check for the select 'width'
15088 case "$selectminbits" in
15089 '') case "$d_select" in
15090         $define)
15091                 $cat <<EOM
15092
15093 Checking to see on how many bits at a time your select() operates...
15094 EOM
15095                 $cat >try.c <<EOCP
15096 #include <sys/types.h>
15097 #$i_time I_TIME
15098 #$i_systime I_SYS_TIME
15099 #$i_systimek I_SYS_TIME_KERNEL
15100 #ifdef I_TIME
15101 #   include <time.h>
15102 #endif
15103 #ifdef I_SYS_TIME
15104 #   ifdef I_SYS_TIME_KERNEL
15105 #       define KERNEL
15106 #   endif
15107 #   include <sys/time.h>
15108 #   ifdef I_SYS_TIME_KERNEL
15109 #       undef KERNEL
15110 #   endif
15111 #endif
15112 #$i_sysselct I_SYS_SELECT
15113 #ifdef I_SYS_SELECT
15114 #include <sys/select.h>
15115 #endif
15116 #$d_socket HAS_SOCKET
15117 #ifdef HAS_SOCKET
15118 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
15119 #endif
15120 #include <stdio.h>
15121 $selecttype b;
15122 #define S sizeof(*(b))
15123 #define MINBITS 64
15124 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
15125 #define NBITS  (NBYTES * 8)
15126 int main() {
15127     char s[NBYTES];
15128     struct timeval t;
15129     int i;
15130     FILE* fp;
15131     int fd;
15132
15133     fclose(stdin);
15134     fp = fopen("try.c", "r");
15135     if (fp == 0)
15136       exit(1);
15137     fd = fileno(fp);
15138     if (fd < 0)
15139       exit(2);
15140     b = ($selecttype)s;
15141     for (i = 0; i < NBITS; i++)
15142         FD_SET(i, b);
15143     t.tv_sec  = 0;
15144     t.tv_usec = 0;
15145     select(fd + 1, b, 0, 0, &t);
15146     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
15147     printf("%d\n", i + 1);
15148     return 0;
15149 }
15150 EOCP
15151                 set try
15152                 if eval $compile_ok; then
15153                         selectminbits=`$run ./try`
15154                         case "$selectminbits" in
15155                         '')     cat >&4 <<EOM
15156 Cannot figure out on how many bits at a time your select() operates.
15157 I'll play safe and guess it is 32 bits.
15158 EOM
15159                                 selectminbits=32
15160                                 bits="32 bits"
15161                                 ;;
15162                         1)      bits="1 bit" ;;
15163                         *)      bits="$selectminbits bits" ;;
15164                         esac
15165                         echo "Your select() operates on $bits at a time." >&4
15166                 else
15167                         rp='What is the minimum number of bits your select() operates on?'
15168                         case "$byteorder" in
15169                         1234|12345678)  dflt=32 ;;
15170                         *)              dflt=1  ;;
15171                         esac
15172                         . ./myread
15173                         val=$ans
15174                         selectminbits="$val"
15175                 fi
15176                 $rm -f try.* try
15177                 ;;
15178         *)      : no select, so pick a harmless default
15179                 selectminbits='32'
15180                 ;;
15181         esac
15182         ;;
15183 esac
15184
15185 : Trace out the files included by signal.h, then look for SIGxxx names.
15186 : Remove SIGARRAYSIZE used by HPUX.
15187 : Remove SIGSTKSIZE used by Linux.
15188 : Remove SIGSTKSZ used by Posix.
15189 : Remove SIGTYP void lines used by OS2.
15190 : Some cpps, like os390, dont give the file name anywhere
15191 if [ "X$fieldn" = X ]; then
15192         : Just make some guesses.  We check them later.
15193         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
15194 else
15195         xxx=`echo '#include <signal.h>' |
15196         $cppstdin $cppminus $cppflags 2>/dev/null |
15197         $grep '^[       ]*#.*include' | 
15198         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sed 's!\\\\\\\\!/!g' | $sort | $uniq`
15199 fi
15200 : Check this list of files to be sure we have parsed the cpp output ok.
15201 : This will also avoid potentially non-existent files, such 
15202 : as ../foo/bar.h
15203 xxxfiles=''
15204 for xx in $xxx /dev/null ; do
15205         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
15206 done
15207 : If we have found no files, at least try signal.h
15208 case "$xxxfiles" in
15209 '')     xxxfiles=`./findhdr signal.h` ;;
15210 esac
15211 xxx=`awk '
15212 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
15213         print substr($2, 4, 20)
15214 }
15215 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
15216         print substr($3, 4, 20)
15217 }' $xxxfiles`
15218 : Append some common names just in case the awk scan failed.
15219 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
15220 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
15221 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
15222 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
15223 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
15224
15225 : generate a few handy files for later
15226 $cat > signal.c <<'EOCP'
15227 #include <sys/types.h>
15228 #include <signal.h>
15229 #include <stdio.h>
15230 int main() {
15231
15232 /* Strange style to avoid deeply-nested #if/#else/#endif */
15233 #ifndef NSIG
15234 #  ifdef _NSIG
15235 #    define NSIG (_NSIG)
15236 #  endif
15237 #endif
15238
15239 #ifndef NSIG
15240 #  ifdef SIGMAX
15241 #    define NSIG (SIGMAX+1)
15242 #  endif
15243 #endif
15244
15245 #ifndef NSIG
15246 #  ifdef SIG_MAX
15247 #    define NSIG (SIG_MAX+1)
15248 #  endif
15249 #endif
15250
15251 #ifndef NSIG
15252 #  ifdef MAXSIG
15253 #    define NSIG (MAXSIG+1)
15254 #  endif
15255 #endif
15256
15257 #ifndef NSIG
15258 #  ifdef MAX_SIG
15259 #    define NSIG (MAX_SIG+1)
15260 #  endif
15261 #endif
15262
15263 #ifndef NSIG
15264 #  ifdef SIGARRAYSIZE
15265 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
15266 #  endif
15267 #endif
15268
15269 #ifndef NSIG
15270 #  ifdef _sys_nsig
15271 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
15272 #  endif
15273 #endif
15274
15275 /* Default to some arbitrary number that's big enough to get most
15276    of the common signals.
15277 */
15278 #ifndef NSIG
15279 #    define NSIG 50
15280 #endif
15281
15282 printf("NSIG %d\n", NSIG);
15283
15284 #ifndef JUST_NSIG
15285
15286 EOCP
15287
15288 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
15289 {
15290         printf "#ifdef SIG"; printf $1; printf "\n"
15291         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
15292         printf $1; printf ");\n"
15293         printf "#endif\n"
15294 }
15295 END {
15296         printf "#endif /* JUST_NSIG */\n";
15297         printf "exit(0);\n}\n";
15298 }
15299 ' >>signal.c
15300 $cat >signal.awk <<'EOP'
15301 BEGIN { ndups = 0 }
15302 $1 ~ /^NSIG$/ { nsig = $2 }
15303 ($1 !~ /^NSIG$/) && (NF == 2) {
15304     if ($2 > maxsig) { maxsig = $2 }
15305     if (sig_name[$2]) {
15306         dup_name[ndups] = $1
15307         dup_num[ndups] = $2
15308         ndups++ 
15309     }
15310     else {
15311         sig_name[$2] = $1
15312         sig_num[$2] = $2
15313     }
15314 }
15315 END { 
15316     if (nsig == 0) {
15317         nsig = maxsig + 1
15318     }
15319     printf("NSIG %d\n", nsig);
15320     for (n = 1; n < nsig; n++) {
15321         if (sig_name[n]) {
15322             printf("%s %d\n", sig_name[n], sig_num[n])
15323         }
15324         else {
15325             printf("NUM%d %d\n", n, n) 
15326         }
15327     }
15328     for (n = 0; n < ndups; n++) {
15329         printf("%s %d\n", dup_name[n], dup_num[n])
15330     }
15331 }
15332 EOP
15333 $cat >signal_cmd <<EOS
15334 $startsh
15335 if $test -s signal.lst; then
15336     echo "Using your existing signal.lst file"
15337         exit 0
15338 fi
15339 xxx="$xxx"
15340 EOS
15341 $cat >>signal_cmd <<'EOS'
15342
15343 set signal
15344 if eval $compile_ok; then
15345         $run ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15346 else
15347         echo "(I can't seem be able to compile the whole test program)" >&4
15348         echo "(I'll try it in little pieces.)" >&4
15349         set signal -DJUST_NSIG
15350         if eval $compile_ok; then
15351                 $run ./signal$_exe > signal.nsg
15352                 $cat signal.nsg
15353         else
15354                 echo "I can't seem to figure out how many signals you have." >&4
15355                 echo "Guessing 50." >&4
15356                 echo 'NSIG 50' > signal.nsg
15357         fi
15358         : Now look at all the signal names, one at a time.
15359         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
15360                 $cat > signal.c <<EOCP
15361 #include <sys/types.h>
15362 #include <signal.h>
15363 #include <stdio.h>
15364 int main() {
15365 printf("$xx %d\n", SIG${xx});
15366 return 0;
15367 }
15368 EOCP
15369                 set signal
15370                 if eval $compile; then
15371                         echo "SIG${xx} found."
15372                         $run ./signal$_exe  >> signal.ls1
15373                 else
15374                         echo "SIG${xx} NOT found."
15375                 fi
15376         done
15377         if $test -s signal.ls1; then
15378                 $cat signal.nsg signal.ls1 |
15379                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15380         fi
15381
15382 fi
15383 if $test -s signal.lst; then
15384         :
15385 else
15386         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
15387         echo 'kill -l' >signal
15388         set X `csh -f <signal`
15389         $rm -f signal
15390         shift
15391         case $# in
15392         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
15393         esac
15394         echo $@ | $tr ' ' $trnl | \
15395             $awk '{ printf "%s %d\n", $1, ++s; }
15396                   END { printf "NSIG %d\n", ++s }' >signal.lst
15397 fi
15398 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
15399 EOS
15400 chmod a+x signal_cmd
15401 $eunicefix signal_cmd
15402
15403 : generate list of signal names
15404 echo " "
15405 case "$sig_name_init" in
15406 '') doinit=yes ;;
15407 *)  case "$sig_num_init" in
15408     ''|*,*) doinit=yes ;;
15409     esac ;;
15410 esac
15411 case "$doinit" in
15412 yes)
15413         echo "Generating a list of signal names and numbers..." >&4
15414         . ./signal_cmd
15415         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
15416         sig_name=`$awk 'BEGIN { printf "ZERO " }
15417                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
15418         sig_num=`$awk  'BEGIN { printf "0 " }
15419                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
15420         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
15421                              !/^NSIG/   { printf "\"%s\", ", $1 }
15422                              END        { printf "0\n" }' signal.lst`
15423         sig_num_init=`$awk  'BEGIN      { printf "0, " }
15424                              !/^NSIG/   { printf "%d, ", $2}
15425                              END        { printf "0\n"}' signal.lst`
15426         ;;
15427 esac
15428 echo "The following $sig_count signals are available:"
15429 echo " "
15430 echo $sig_name | $awk \
15431 'BEGIN { linelen = 0 }
15432 {
15433         for (i = 1; i <= NF; i++) {
15434                 name = "SIG" $i " "
15435                 linelen = linelen + length(name)
15436                 if (linelen > 70) {
15437                         printf "\n"
15438                         linelen = length(name)
15439                 }
15440                 printf "%s", name
15441         }
15442         printf "\n"
15443 }'
15444 sig_size=`echo $sig_name | awk '{print NF}'`
15445 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
15446
15447 echo " "
15448 case "$sizetype" in
15449 *_t) zzz="$sizetype"    ;;
15450 *)   zzz="filesize"     ;;
15451 esac
15452 echo "Checking the size of $zzz..." >&4 
15453 cat > try.c <<EOCP
15454 #include <sys/types.h>
15455 #include <stdio.h>
15456 int main() {
15457     printf("%d\n", (int)sizeof($sizetype));
15458     exit(0);
15459 }
15460 EOCP
15461 set try
15462 if eval $compile_ok; then
15463         yyy=`$run ./try`
15464         case "$yyy" in
15465         '')     sizesize=4
15466                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
15467                 ;;
15468         *)      sizesize=$yyy
15469                 echo "Your $zzz size is $sizesize bytes."
15470                 ;;
15471         esac
15472 else
15473         sizesize=4
15474         echo "(I can't compile the test program--guessing $sizesize.)" >&4
15475 fi
15476
15477
15478 : check for socklen_t
15479 echo " "
15480 echo "Checking to see if you have socklen_t..." >&4
15481 $cat >try.c <<EOCP
15482 #include <sys/types.h>
15483 #$d_socket HAS_SOCKET
15484 #ifdef HAS_SOCKET
15485 #include <sys/socket.h>
15486 #endif
15487 int main() { socklen_t x = 16; }
15488 EOCP
15489 set try
15490 if eval $compile; then
15491         val="$define"
15492         echo "You have socklen_t."
15493 else
15494         val="$undef"
15495         echo "You do not have socklen_t."
15496         case "$sizetype" in
15497         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
15498         esac
15499 fi
15500 $rm -f try try.*
15501 set d_socklen_t
15502 eval $setvar
15503
15504 : see if this is a socks.h system
15505 set socks.h i_socks
15506 eval $inhdr
15507
15508 : check for type of the size argument to socket calls
15509 case "$d_socket" in
15510 "$define")
15511         $cat <<EOM
15512
15513 Checking to see what type is the last argument of accept().
15514 EOM
15515         yyy=''
15516         case "$d_socklen_t" in
15517         "$define") yyy="$yyy socklen_t"
15518         esac
15519         yyy="$yyy $sizetype int long unsigned"
15520         for xxx in $yyy; do
15521                 case "$socksizetype" in
15522                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
15523                         case "$usesocks" in
15524                         "$define")
15525                                 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
15526                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15527                                         socksizetype="$xxx"
15528                                 fi
15529                                 ;;
15530                         *)      if ./protochk "$try"  $i_systypes sys/types.h $d_socket sys/socket.h; then
15531                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15532                                         socksizetype="$xxx"
15533                                 fi
15534                                 ;;
15535                         esac
15536                         ;;
15537                 esac
15538         done
15539 : In case none of those worked, prompt the user.
15540         case "$socksizetype" in
15541         '')     rp='What is the type for socket address structure sizes?'
15542                 dflt='int'
15543                 . ./myread
15544                 socksizetype=$ans
15545                 ;;
15546         esac
15547         ;;
15548 *)      : no sockets, so pick relatively harmless default
15549         socksizetype='int'
15550         ;;
15551 esac
15552
15553 : see what type is used for signed size_t
15554 set ssize_t ssizetype int stdio.h sys/types.h
15555 eval $typedef
15556 dflt="$ssizetype"
15557 $cat > try.c <<EOM
15558 #include <stdio.h>
15559 #include <sys/types.h>
15560 #define Size_t $sizetype
15561 #define SSize_t $dflt
15562 int main()
15563 {
15564         if (sizeof(Size_t) == sizeof(SSize_t))
15565                 printf("$dflt\n");
15566         else if (sizeof(Size_t) == sizeof(int))
15567                 printf("int\n");
15568         else 
15569                 printf("long\n");
15570         exit(0);
15571 }
15572 EOM
15573 echo " "
15574 set try
15575 if eval $compile_ok && $run ./try > /dev/null; then
15576         ssizetype=`$run ./try`
15577         echo "I'll be using $ssizetype for functions returning a byte count." >&4
15578 else
15579         $cat >&4 <<EOM
15580 Help! I can't compile and run the ssize_t test program: please enlighten me!
15581 (This is probably a misconfiguration in your system or libraries, and
15582 you really ought to fix it.  Still, I'll try anyway.)
15583
15584 I need a type that is the same size as $sizetype, but is guaranteed to
15585 be signed.  Common values are ssize_t, int and long.
15586
15587 EOM
15588         rp="What signed type is the same size as $sizetype?"
15589         . ./myread
15590         ssizetype="$ans"
15591 fi
15592 $rm -f try try.*
15593
15594 : see what type of char stdio uses.
15595 echo " "
15596 echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
15597 if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
15598         echo "Your stdio uses unsigned chars." >&4
15599         stdchar="unsigned char"
15600 else
15601         echo "Your stdio uses signed chars." >&4
15602         stdchar="char"
15603 fi
15604 $rm -f stdioh
15605
15606
15607
15608 : see if time exists
15609 echo " "
15610 if test "X$d_time" = X -o X"$timetype" = X; then
15611     if set time val -f d_time; eval $csym; $val; then
15612                 echo 'time() found.' >&4
15613                 val="$define"
15614                 rp="What is the type returned by time() on this system?"
15615                 set time_t timetype long stdio.h sys/types.h
15616                 eval $typedef_ask
15617     else
15618                 echo 'time() not found, hope that will do.' >&4
15619                 val="$undef"
15620                 timetype='int';
15621     fi
15622     set d_time
15623     eval $setvar
15624 fi
15625
15626 : see what type uids are declared as in the kernel
15627 echo " "
15628 echo "Looking for the type for user ids returned by getuid()."
15629 set uid_t uidtype xxx stdio.h sys/types.h
15630 eval $typedef
15631 case "$uidtype" in
15632 xxx)
15633         xxx=`./findhdr sys/user.h`
15634         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
15635         case $1 in
15636         unsigned) dflt="$1 $2" ;;
15637         *) dflt="$1" ;;
15638         esac
15639         ;;
15640 *) dflt="$uidtype";;
15641 esac
15642 case "$uidtype" in
15643 uid_t)  echo "uid_t found." ;;
15644 *)      rp="What is the type for user ids returned by getuid()?"
15645         . ./myread
15646         uidtype="$ans"
15647         ;;
15648 esac
15649
15650 echo " "
15651 case "$uidtype" in
15652 *_t) zzz="$uidtype"     ;;
15653 *)   zzz="uid"          ;;
15654 esac
15655 echo "Checking the size of $zzz..." >&4 
15656 cat > try.c <<EOCP
15657 #include <sys/types.h>
15658 #include <stdio.h>
15659 int main() {
15660     printf("%d\n", (int)sizeof($uidtype));
15661     exit(0);
15662 }
15663 EOCP
15664 set try
15665 if eval $compile_ok; then
15666         yyy=`$run ./try`
15667         case "$yyy" in
15668         '')     uidsize=4
15669                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
15670                 ;;
15671         *)      uidsize=$yyy
15672                 echo "Your $zzz is $uidsize bytes long."
15673                 ;;
15674         esac
15675 else
15676         uidsize=4
15677         echo "(I can't compile the test program--guessing $uidsize.)" >&4
15678 fi
15679
15680 echo " "
15681 case "$uidtype" in
15682 *_t) zzz="$uidtype"     ;;
15683 *)   zzz="uid"          ;;
15684 esac
15685 echo "Checking the sign of $zzz..." >&4
15686 cat > try.c <<EOCP
15687 #include <sys/types.h>
15688 #include <stdio.h>
15689 int main() {
15690         $uidtype foo = -1;
15691         if (foo < 0)
15692                 printf("-1\n");
15693         else
15694                 printf("1\n");
15695 }
15696 EOCP
15697 set try
15698 if eval $compile; then
15699         yyy=`$run ./try`
15700         case "$yyy" in
15701         '')     uidsign=1
15702                 echo "(I can't execute the test program--guessing unsigned.)" >&4
15703                 ;;
15704         *)      uidsign=$yyy
15705                 case "$uidsign" in
15706                  1) echo "Your $zzz is unsigned." ;;
15707                 -1) echo "Your $zzz is signed."   ;;
15708                 esac
15709                 ;;
15710         esac
15711 else
15712         uidsign=1
15713         echo "(I can't compile the test program--guessing unsigned.)" >&4
15714 fi
15715
15716
15717
15718 echo " "
15719 $echo "Checking the format string to be used for uids..." >&4
15720
15721 case "$uidsign" in
15722 -1)     if $test X"$uidsize" = X"$ivsize"; then
15723                 uidformat="$ivdformat"
15724         else
15725                 if $test X"$uidsize" = X"$longsize"; then
15726                         uidformat='"ld"'
15727                 else
15728                         if $test X"$uidsize" = X"$intsize"; then
15729                                 uidformat='"d"'
15730                         else
15731                                 if $test X"$uidsize" = X"$shortsize"; then
15732                                         uidformat='"hd"'
15733                                 fi
15734                         fi
15735                 fi
15736         fi
15737         ;;
15738 *)      if $test X"$uidsize" = X"$uvsize"; then
15739                 uidformat="$uvuformat"
15740         else
15741                 if $test X"$uidsize" = X"$longsize"; then
15742                         uidformat='"lu"'
15743                 else
15744                         if $test X"$uidsize" = X"$intsize"; then
15745                                 uidformat='"u"'
15746                         else
15747                                 if $test X"$uidsize" = X"$shortsize"; then
15748                                         uidformat='"hu"'
15749                                 fi
15750                         fi
15751                 fi
15752         fi
15753         ;;
15754 esac
15755
15756 : determine compiler compiler
15757 case "$yacc" in
15758 '')
15759         dflt=yacc;;
15760 *)
15761         dflt="$yacc";;
15762 esac
15763 echo " "
15764 comp='yacc'
15765 if $test -f "$byacc"; then
15766         dflt="$byacc"
15767         comp="byacc or $comp"
15768 fi
15769 if $test -f "$bison"; then
15770         comp="$comp or bison -y"
15771 fi
15772 rp="Which compiler compiler ($comp) shall I use?"
15773 . ./myread
15774 yacc="$ans"
15775 case "$yacc" in
15776 *bis*)
15777         case "$yacc" in
15778         *-y*) ;;
15779         *)
15780                 yacc="$yacc -y"
15781                 echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
15782                 ;;
15783         esac
15784         ;;
15785 esac
15786
15787 : see if fcntl.h is there
15788 val=''
15789 set fcntl.h val
15790 eval $inhdr
15791
15792 : see if we can include fcntl.h
15793 case "$val" in
15794 "$define")
15795         echo " "
15796         if $h_fcntl; then
15797                 val="$define"
15798                 echo "We'll be including <fcntl.h>." >&4
15799         else
15800                 val="$undef"
15801                 if $h_sysfile; then
15802         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
15803                 else
15804                         echo "We won't be including <fcntl.h>." >&4
15805                 fi
15806         fi
15807         ;;
15808 *)
15809         h_fcntl=false
15810         val="$undef"
15811         ;;
15812 esac
15813 set i_fcntl
15814 eval $setvar
15815
15816 : see if this is a fp.h system
15817 set fp.h i_fp
15818 eval $inhdr
15819
15820 : see if this is a fp_class.h system
15821 set fp_class.h i_fp_class
15822 eval $inhdr
15823
15824 : see if this is a ieeefp.h system
15825 set ieeefp.h i_ieeefp
15826 eval $inhdr
15827
15828 : see if this is a libutil.h system
15829 set libutil.h i_libutil
15830 eval $inhdr
15831
15832 : see if locale.h is available
15833 set locale.h i_locale
15834 eval $inhdr
15835
15836 : see if mach cthreads are available
15837 if test "X$usethreads" = "X$define"; then
15838         set mach/cthreads.h i_machcthr
15839         eval $inhdr
15840 else
15841         i_machcthr="$undef"
15842 fi
15843
15844
15845
15846 : see if this is a math.h system
15847 set math.h i_math
15848 eval $inhdr
15849
15850 : see if this is a mntent.h system
15851 set mntent.h i_mntent
15852 eval $inhdr
15853
15854 : see if ndbm.h is available
15855 set ndbm.h t_ndbm
15856 eval $inhdr
15857 case "$t_ndbm" in
15858 $define)
15859         : see if dbm_open exists
15860         set dbm_open d_dbm_open
15861         eval $inlibc
15862         case "$d_dbm_open" in
15863         $undef)
15864                 t_ndbm="$undef"
15865                 echo "We won't be including <ndbm.h>"
15866                 ;;
15867         esac
15868         ;;
15869 esac
15870 val="$t_ndbm"
15871 set i_ndbm
15872 eval $setvar
15873
15874 : see if net/errno.h is available
15875 val=''
15876 set net/errno.h val
15877 eval $inhdr
15878
15879 : Unfortunately, it causes problems on some systems.  Arrgh.
15880 case "$val" in
15881 $define)
15882         cat > try.c <<'EOM'
15883 #include <stdio.h>
15884 #include <errno.h>
15885 #include <net/errno.h>
15886 int func()
15887 {
15888         return ENOTSOCK;
15889 }
15890 EOM
15891         if $cc $ccflags -c try.c >/dev/null 2>&1; then
15892                 echo "We'll be including <net/errno.h>." >&4
15893         else
15894                 echo "We won't be including <net/errno.h>." >&4
15895                 val="$undef"
15896         fi
15897         $rm -f try.* try
15898         ;;
15899 esac
15900 set i_neterrno
15901 eval $setvar
15902
15903 : see if netinet/tcp.h is available
15904 set netinet/tcp.h i_netinettcp
15905 eval $inhdr
15906
15907 : see if this is a poll.h system
15908 set poll.h i_poll
15909 eval $inhdr
15910
15911 : see if this is a prot.h system
15912 set prot.h i_prot
15913 eval $inhdr
15914
15915 echo " "
15916 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
15917 $cat <<'EOSH' > Cppsym.know
15918 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
15919 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
15920 alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
15921 ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
15922 BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
15923 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
15924 bull c cadmus clipper CMU COFF COMPILER_VERSION
15925 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
15926 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
15927 Dynix DynixPTX ELF encore EPI EXTENSIONS FAVOR_BSD
15928 FILE_OFFSET_BITS FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
15929 GLIBC GLIBC_MINOR
15930 GNU_SOURCE GNUC GNUC_MINOR GNU_LIBRARY GO32 gould GOULD_PN
15931 H3050R H3050RX hbullx20 hcx host_mips
15932 hp200 hp300 hp700 HP700 hp800 hp9000
15933 hp9000s200 hp9000s300 hp9000s400 hp9000s500
15934 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
15935 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
15936 IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
15937 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
15938 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
15939 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
15940 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
15941 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
15942 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
15943 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
15944 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
15945 MATH_HAS_NO_SIDE_EFFECTS
15946 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
15947 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
15948 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
15949 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
15950 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
15951 NetBSD news1500 news1700 news1800 news1900 news3700
15952 news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
15953 ns32016 ns32332 ns32k nsc32000
15954 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
15955 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
15956 pc532 pdp11 PGC PIC plexus PORTAR posix
15957 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
15958 POSIX_C_SOURCE POSIX_SOURCE POWER
15959 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
15960 riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
15961 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
15962 sony sony_news sonyrisc sparc sparclite spectrum
15963 stardent stdc STDC_EXT stratos sun sun3 sun386
15964 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
15965 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
15966 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
15967 sysV68 sysV88 Tek4132 Tek4300 titan
15968 TM3200 TM5400 TM5600
15969 tower tower32 tower32_200 tower32_600 tower32_700
15970 tower32_800 tower32_850 tss
15971 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
15972 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
15973 unix UNIX95 UNIX99 unixpc unos
15974 USE_BSD USE_FILE_OFFSET64 USE_GNU USE_ISOC9X USE_LARGEFILE USE_LARGEFILE64
15975 USE_MISC USE_POSIX USE_POSIX199309 USE_POSIX199506 USE_POSIX2
15976 USE_REENTRANT USE_SVID USE_UNIX98 USE_XOPEN USE_XOPEN_EXTENDED
15977 USGr4 USGr4_2
15978 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
15979 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
15980 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
15981 z8000
15982 EOSH
15983 # Maybe put other stuff here too.
15984 cat <<EOSH >>Cppsym.know
15985 $osname
15986 EOSH
15987 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
15988 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
15989 $cat Cppsym.know > Cppsym.c
15990 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
15991 $rm -f Cppsym.a Cppsym.b Cppsym.c
15992 cat <<EOSH > Cppsym
15993 $startsh
15994 if $test \$# -gt 0; then
15995     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
15996     if $test -s Cppsym.got; then
15997         $rm -f Cppsym.got
15998         exit 0
15999     fi
16000     $rm -f Cppsym.got
16001     exit 1
16002 else
16003     $tr " " "$trnl" | ./Cppsym.try
16004     exit 0
16005 fi
16006 EOSH
16007 chmod +x Cppsym
16008 $eunicefix Cppsym
16009 cat <<EOSH > Cppsym.try
16010 $startsh
16011 cat <<'EOCP' > try.c
16012 #include <stdio.h>
16013 int main() {
16014 EOCP
16015 $awk \\
16016 EOSH
16017 cat <<'EOSH' >> Cppsym.try
16018 'length($1) > 0 {
16019     printf "#ifdef %s\n#if %s+0\nprintf(\"%s=%%ld\\n\", (long)%s);\n#else\nprintf(\"%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
16020     printf "#ifdef _%s\n#if _%s+0\nprintf(\"_%s=%%ld\\n\", (long)_%s);\n#else\nprintf(\"_%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
16021     printf "#ifdef __%s\n#if __%s+0\nprintf(\"__%s=%%ld\\n\", (long)__%s);\n#else\nprintf(\"__%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
16022     printf "#ifdef __%s__\n#if __%s__+0\nprintf(\"__%s__=%%ld\\n\", (long)__%s__);\n#else\nprintf(\"__%s__\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
16023 }'       >> try.c
16024 echo 'return 0;}' >> try.c
16025 EOSH
16026 cat <<EOSH >> Cppsym.try
16027 ccflags="$ccflags"
16028 case "$osname-$gccversion" in
16029 irix-) ccflags="\$ccflags -woff 1178" ;;
16030 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
16031 esac
16032 $cc -o try $optimize \$ccflags $ldflags try.c $libs && $run ./try
16033 EOSH
16034 chmod +x Cppsym.try
16035 $eunicefix Cppsym.try
16036 ./Cppsym < Cppsym.know > Cppsym.true
16037 : now check the C compiler for additional symbols
16038 postprocess_cc_v=''
16039 case "$osname" in
16040 aix) postprocess_cc_v="|$tr , ' '" ;;
16041 esac
16042 $cat >ccsym <<EOS
16043 $startsh
16044 $cat >tmp.c <<EOF
16045 extern int foo;
16046 EOF
16047 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
16048 do
16049         case "\$i" in
16050         -D*) echo "\$i" | $sed 's/^-D//';;
16051         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
16052         esac
16053 done
16054 $rm -f try.c
16055 EOS
16056 postprocess_cc_v=''
16057 chmod +x ccsym
16058 $eunicefix ccsym
16059 ./ccsym > ccsym1.raw
16060 if $test -s ccsym1.raw; then
16061        $sort ccsym1.raw | $uniq >ccsym.raw
16062 else
16063        mv ccsym1.raw ccsym.raw
16064 fi
16065
16066 $awk '/\=/ { print $0; next }
16067         { print $0"=1" }' ccsym.raw >ccsym.list
16068 $awk '/\=/ { print $0; next }
16069         { print $0"=1" }' Cppsym.true >ccsym.true
16070 $comm -13 ccsym.true ccsym.list >ccsym.own
16071 $comm -12 ccsym.true ccsym.list >ccsym.com
16072 $comm -23 ccsym.true ccsym.list >ccsym.cpp
16073 also=''
16074 if $test -z ccsym.raw; then
16075         echo "Your C compiler doesn't seem to define any symbols!" >&4
16076         echo " "
16077         echo "However, your C preprocessor defines the following symbols:"
16078         $cat Cppsym.true
16079         ccsymbols=''
16080         cppsymbols=`$cat Cppsym.true`
16081         cppsymbols=`echo $cppsymbols`
16082         cppccsymbols="$cppsymbols"
16083 else
16084         if $test -s ccsym.com; then
16085                 echo "Your C compiler and pre-processor define these symbols:"
16086                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
16087                 also='also '
16088                 symbols='ones'
16089                 cppccsymbols=`$cat ccsym.com`
16090                 cppccsymbols=`echo $cppccsymbols`
16091                 $test "$silent" || sleep 1
16092         fi
16093         if $test -s ccsym.cpp; then
16094                 $test "$also" && echo " "
16095                 echo "Your C pre-processor ${also}defines the following symbols:"
16096                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
16097                 also='further '
16098                 cppsymbols=`$cat ccsym.cpp`
16099                 cppsymbols=`echo $cppsymbols`
16100                 $test "$silent" || sleep 1
16101         fi
16102         if $test -s ccsym.own; then
16103                 $test "$also" && echo " "
16104                 echo "Your C compiler ${also}defines the following cpp symbols:"
16105                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
16106                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
16107                 ccsymbols=`$cat ccsym.own`
16108                 ccsymbols=`echo $ccsymbols`
16109                 $test "$silent" || sleep 1
16110         fi
16111 fi
16112
16113 : see if this is a termio system
16114 val="$undef"
16115 val2="$undef"
16116 val3="$undef"
16117 if $test `./findhdr termios.h`; then
16118         set tcsetattr i_termios
16119         eval $inlibc
16120         val3="$i_termios"
16121 fi
16122 echo " "
16123 case "$val3" in
16124 "$define") echo "You have POSIX termios.h... good!" >&4;;
16125 *) if ./Cppsym pyr; then
16126                 case "`/bin/universe`" in
16127                 ucb) if $test `./findhdr sgtty.h`; then
16128                                 val2="$define"
16129                                 echo "<sgtty.h> found." >&4
16130                         else
16131                                 echo "System is pyramid with BSD universe."
16132                                 echo "<sgtty.h> not found--you could have problems." >&4
16133                         fi;;
16134                 *) if $test `./findhdr termio.h`; then
16135                                 val="$define"
16136                                 echo "<termio.h> found." >&4
16137                         else
16138                                 echo "System is pyramid with USG universe."
16139                                 echo "<termio.h> not found--you could have problems." >&4
16140                         fi;;
16141                 esac
16142         elif ./usg; then
16143                 if $test `./findhdr termio.h`; then
16144                         echo "<termio.h> found." >&4
16145                         val="$define"
16146                 elif $test `./findhdr sgtty.h`; then
16147                         echo "<sgtty.h> found." >&4
16148                         val2="$define"
16149                 else
16150 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
16151                 fi
16152         else
16153                 if $test `./findhdr sgtty.h`; then
16154                         echo "<sgtty.h> found." >&4
16155                         val2="$define"
16156                 elif $test `./findhdr termio.h`; then
16157                         echo "<termio.h> found." >&4
16158                         val="$define"
16159                 else
16160 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
16161                 fi
16162         fi;;
16163 esac
16164 set i_termio; eval $setvar
16165 val=$val2; set i_sgtty; eval $setvar
16166 val=$val3; set i_termios; eval $setvar
16167
16168 : see if this is a shadow.h system
16169 set shadow.h i_shadow
16170 eval $inhdr
16171
16172 : see if stddef is available
16173 set stddef.h i_stddef
16174 eval $inhdr
16175
16176 : see if this is a sunmath.h system
16177 set sunmath.h i_sunmath
16178 eval $inhdr
16179
16180 : see if sys/access.h is available
16181 set sys/access.h i_sysaccess
16182 eval $inhdr
16183
16184 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
16185 set sys/filio.h i_sysfilio
16186 eval $inhdr
16187 echo " "
16188 if $test `./findhdr sys/ioctl.h`; then
16189         val="$define"
16190         echo '<sys/ioctl.h> found.' >&4
16191 else
16192         val="$undef"
16193         if $test $i_sysfilio = "$define"; then
16194             echo '<sys/ioctl.h> NOT found.' >&4
16195         else
16196                 $test $i_sgtty = "$define" && xxx="sgtty.h"
16197                 $test $i_termio = "$define" && xxx="termio.h"
16198                 $test $i_termios = "$define" && xxx="termios.h"
16199 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
16200         fi
16201 fi
16202 set i_sysioctl
16203 eval $setvar
16204
16205 : see if socket ioctl defs are in sys/sockio.h
16206 echo " "
16207 xxx=`./findhdr sys/sockio.h`
16208 if $test "$xxx"; then
16209         if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
16210                 val="$define"
16211                 echo "You have socket ioctls defined in <sys/sockio.h>." >&4
16212         else
16213                 val="$undef"
16214                 echo "No socket ioctls found in <sys/sockio.h>." >&4
16215         fi
16216 else
16217         val="$undef"
16218         $cat <<EOM
16219 <sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
16220 EOM
16221 fi
16222 set i_syssockio
16223 eval $setvar
16224
16225
16226 : see if this is a syslog.h system
16227 set syslog.h i_syslog
16228 eval $inhdr
16229
16230
16231 : see if this is a sys/mode.h system
16232 set sys/mode.h i_sysmode
16233 eval $inhdr
16234
16235 : see if sys/resource.h has to be included
16236 set sys/resource.h i_sysresrc
16237 eval $inhdr
16238
16239 : see if sys/security.h is available
16240 set sys/security.h i_syssecrt
16241 eval $inhdr
16242
16243 : see if this is a sys/statvfs.h system
16244 set sys/statvfs.h i_sysstatvfs
16245 eval $inhdr
16246
16247 : see if this is a sys/un.h system
16248 set sys/un.h i_sysun
16249 eval $inhdr
16250
16251
16252 : see if this is a sys/utsname.h system
16253 set sys/utsname.h i_sysutsname
16254 eval $inhdr
16255
16256 : see if this is a syswait system
16257 set sys/wait.h i_syswait
16258 eval $inhdr
16259
16260 : see if this is a ustat.h system
16261 set ustat.h i_ustat
16262 eval $inhdr
16263
16264 : see if this is an utime system
16265 set utime.h i_utime
16266 eval $inhdr
16267
16268 : see if this is a values.h system
16269 set values.h i_values
16270 eval $inhdr
16271
16272 : see if this is a vfork system
16273 case "$d_vfork" in
16274 "$define")
16275         set vfork.h i_vfork
16276         eval $inhdr
16277         ;;
16278 *)
16279         i_vfork="$undef"
16280         ;;
16281 esac
16282
16283 : see if gdbm.h is available
16284 set gdbm.h t_gdbm
16285 eval $inhdr
16286 case "$t_gdbm" in
16287 $define)
16288         : see if gdbm_open exists
16289         set gdbm_open d_gdbm_open
16290         eval $inlibc
16291         case "$d_gdbm_open" in
16292         $undef)
16293                 t_gdbm="$undef"
16294                 echo "We won't be including <gdbm.h>"
16295                 ;;
16296         esac
16297         ;;
16298 esac
16299 val="$t_gdbm"
16300 set i_gdbm
16301 eval $setvar
16302
16303 echo " "
16304 echo "Looking for extensions..." >&4
16305 : If we are using the old config.sh, known_extensions may contain
16306 : old or inaccurate or duplicate values.
16307 known_extensions=''
16308 nonxs_extensions=''
16309 : We do not use find because it might not be available.
16310 : We do not just use MANIFEST because the user may have dropped
16311 : some additional extensions into the source tree and expect them
16312 : to be built.
16313
16314 : Function to recursively find available extensions, ignoring DynaLoader
16315 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
16316 find_extensions='
16317     for xxx in *; do
16318        case "$xxx" in
16319            DynaLoader|dynaload) ;;
16320            *)
16321            if $test -f $xxx/$xxx.xs; then
16322                known_extensions="$known_extensions $1$xxx";
16323            elif $test -f $xxx/Makefile.PL; then
16324                nonxs_extensions="$nonxs_extensions $1$xxx";
16325            else
16326                if $test -d $xxx -a $# -lt 10; then
16327                    set $1$xxx/ $*;
16328                    cd $xxx;
16329                    eval $find_extensions;
16330                    cd ..;
16331                    shift;
16332                fi;
16333            fi
16334            ;;
16335        esac;
16336     done'
16337 tdir=`pwd`
16338 cd $rsrc/ext
16339 set X
16340 shift
16341 eval $find_extensions
16342 set X $nonxs_extensions
16343 shift
16344 nonxs_extensions="$*"
16345 set X $known_extensions
16346 shift
16347 known_extensions="$*"
16348 cd $tdir
16349
16350 : Now see which are supported on this system.
16351 avail_ext=''
16352 for xxx in $known_extensions ; do
16353         case "$xxx" in
16354         DB_File|db_file)
16355                 case "$i_db" in
16356                 $define) avail_ext="$avail_ext $xxx" ;;
16357                 esac
16358                 ;;
16359         GDBM_File|gdbm_fil)
16360                 case "$i_gdbm" in 
16361                 $define) avail_ext="$avail_ext $xxx" ;;
16362                 esac
16363                 ;;
16364         I18N/Langinfo|i18n_lan)
16365                 case "$i_langinfo$d_nl_langinfo" in 
16366                 $define$define) avail_ext="$avail_ext $xxx" ;;
16367                 esac
16368                 ;;
16369         NDBM_File|ndbm_fil)
16370                 case "$i_ndbm" in
16371                 $define)
16372                     case "$osname-$use64bitint" in
16373                     cygwin-*|hpux-define)
16374                         case "$libs" in
16375                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
16376                         esac
16377                         ;;
16378                     *) avail_ext="$avail_ext $xxx" ;;
16379                     esac
16380                     ;;
16381                 esac
16382                 ;;
16383         ODBM_File|odbm_fil) 
16384                 case "${i_dbm}${i_rpcsvcdbm}" in
16385                 *"${define}"*)
16386                     case "$osname-$use64bitint" in
16387                     cygwin-*|hpux-define)
16388                         case "$libs" in
16389                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
16390                         esac
16391                         ;;
16392                     *) avail_ext="$avail_ext $xxx" ;;
16393                     esac
16394                     ;;
16395                 esac
16396                 ;;
16397         POSIX|posix)
16398                 case "$useposix" in
16399                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16400                 esac
16401                 ;;
16402         Opcode|opcode)
16403                 case "$useopcode" in
16404                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16405                 esac
16406                 ;;
16407         Socket|socket)
16408                 case "$d_socket" in 
16409                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16410                 esac
16411                 ;;
16412         Sys/Syslog|sys/syslog)
16413                 : XXX syslog requires socket
16414                 case "$d_socket" in 
16415                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16416                 esac
16417                 ;;
16418         Thread|thread)
16419                 case "$usethreads" in
16420                 true|$define|y)
16421                         case "$useithreads" in
16422                         $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;;
16423                         esac
16424                 esac
16425                 ;;
16426         threads)
16427                 case "$usethreads" in
16428                 true|$define|y)
16429                         case "$useithreads" in
16430                         $define|true|[yY]*) avail_ext="$avail_ext $xxx" ;;
16431                         esac
16432                 esac
16433                 ;;
16434         IPC/SysV|ipc/sysv)
16435                 : XXX Do we need a useipcsysv variable here
16436                 case "${d_msg}${d_sem}${d_shm}" in 
16437                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
16438                 esac
16439                 ;;
16440         *)      avail_ext="$avail_ext $xxx"
16441                 ;;
16442         esac
16443 done
16444
16445 set X $avail_ext
16446 shift
16447 avail_ext="$*"
16448
16449 : Now see which nonxs extensions are supported on this system.
16450 : For now assume all are.
16451 nonxs_ext=''
16452 for xxx in $nonxs_extensions ; do
16453         case "$xxx" in
16454         *)      nonxs_ext="$nonxs_ext $xxx"
16455                 ;;
16456         esac
16457 done
16458
16459 set X $nonxs_ext
16460 shift
16461 nonxs_ext="$*"
16462
16463 case $usedl in
16464 $define)
16465         $cat <<EOM
16466 A number of extensions are supplied with $package.  You may choose to
16467 compile these extensions for dynamic loading (the default), compile
16468 them into the $package executable (static loading), or not include
16469 them at all.  Answer "none" to include no extensions.
16470 Note that DynaLoader is always built and need not be mentioned here.
16471
16472 EOM
16473         case "$dynamic_ext" in
16474         '') dflt="$avail_ext" ;;
16475         *)      dflt="$dynamic_ext"
16476                 # Perhaps we are reusing an old out-of-date config.sh.
16477                 case "$hint" in
16478                 previous)
16479                         if test X"$dynamic_ext" != X"$avail_ext"; then
16480                                 $cat <<EOM
16481 NOTICE:  Your previous config.sh list may be incorrect. 
16482 The extensions now available to you are 
16483         ${avail_ext}
16484 but the default list from your previous config.sh is
16485         ${dynamic_ext} 
16486
16487 EOM
16488                         fi
16489                         ;;
16490                 esac
16491                 ;;
16492         esac
16493         case "$dflt" in
16494         '')     dflt=none;;
16495         esac
16496         rp="What extensions do you wish to load dynamically?"
16497         . ./myread
16498         case "$ans" in
16499         none) dynamic_ext=' ' ;;
16500         *) dynamic_ext="$ans" ;;
16501         esac
16502
16503         case "$static_ext" in
16504         '')
16505                 : Exclude those already listed in dynamic linking
16506                 dflt=''
16507                 for xxx in $avail_ext; do
16508                         case " $dynamic_ext " in
16509                         *" $xxx "*) ;;
16510                         *) dflt="$dflt $xxx" ;;
16511                         esac
16512                 done
16513                 set X $dflt
16514                 shift
16515                 dflt="$*"
16516                 ;;
16517         *)  dflt="$static_ext" 
16518                 ;;
16519         esac
16520
16521         case "$dflt" in
16522         '')     dflt=none;;
16523         esac
16524         rp="What extensions do you wish to load statically?"
16525         . ./myread
16526         case "$ans" in
16527         none) static_ext=' ' ;;
16528         *) static_ext="$ans" ;;
16529         esac
16530         ;;
16531 *)
16532         $cat <<EOM
16533 A number of extensions are supplied with $package.  Answer "none" 
16534 to include no extensions. 
16535 Note that DynaLoader is always built and need not be mentioned here.
16536
16537 EOM
16538         case "$static_ext" in
16539         '') dflt="$avail_ext" ;;
16540         *)      dflt="$static_ext"
16541                 # Perhaps we are reusing an old out-of-date config.sh.
16542                 case "$hint" in
16543                 previous)
16544                         if test X"$static_ext" != X"$avail_ext"; then
16545                                 $cat <<EOM
16546 NOTICE:  Your previous config.sh list may be incorrect. 
16547 The extensions now available to you are 
16548         ${avail_ext}
16549 but the default list from your previous config.sh is
16550         ${static_ext} 
16551
16552 EOM
16553                         fi
16554                         ;;
16555                 esac
16556                 ;;
16557         esac
16558         : Exclude those that are not xs extensions
16559         case "$dflt" in
16560         '')     dflt=none;;
16561         esac
16562         rp="What extensions do you wish to include?"
16563         . ./myread
16564         case "$ans" in
16565         none) static_ext=' ' ;;
16566         *) static_ext="$ans" ;;
16567         esac
16568         ;;
16569 esac
16570
16571 set X $dynamic_ext $static_ext $nonxs_ext
16572 shift
16573 extensions="$*"
16574
16575 : Remove libraries needed only for extensions
16576 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
16577 : The exception is SunOS 4.x, which needs them.
16578 case "${osname}X${osvers}" in
16579 sunos*X4*)
16580     perllibs="$libs"
16581     ;;
16582 *) case "$usedl" in
16583     $define|true|[yY]*)
16584             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'` 
16585             shift
16586             perllibs="$*"
16587             ;;
16588     *)  perllibs="$libs"
16589             ;;
16590     esac
16591     ;;
16592 esac
16593
16594 : Remove build directory name from cppstdin so it can be used from
16595 : either the present location or the final installed location.
16596 echo " "
16597 : Get out of the UU directory to get correct path name.
16598 cd ..
16599 case "$cppstdin" in
16600 `pwd`/cppstdin)
16601         echo "Stripping down cppstdin path name"
16602         cppstdin=cppstdin
16603         ;;
16604 esac
16605 cd UU
16606
16607 : end of configuration questions
16608 echo " "
16609 echo "End of configuration questions."
16610 echo " "
16611
16612 : back to where it started
16613 if test -d ../UU; then
16614         cd ..
16615 fi
16616
16617 : configuration may be patched via a 'config.over' file
16618 if $test -f config.over; then
16619         echo " "
16620         dflt=y
16621         rp='I see a config.over file.  Do you wish to load it?'
16622         . UU/myread
16623         case "$ans" in
16624         n*) echo "OK, I'll ignore it.";;
16625         *)      . ./config.over
16626                 echo "Configuration override changes have been loaded."
16627                 ;;
16628         esac
16629 fi
16630
16631 : in case they want portability, strip down executable paths
16632 case "$d_portable" in
16633 "$define")
16634         echo " "
16635         echo "Stripping down executable paths..." >&4
16636         for file in $loclist $trylist; do
16637                 eval temp=\$$file
16638                 eval $file=`basename $temp`
16639         done
16640         ;;
16641 esac
16642
16643 : create config.sh file
16644 echo " "
16645 echo "Creating config.sh..." >&4
16646 $spitshell <<EOT >config.sh
16647 $startsh
16648 #
16649 # This file was produced by running the Configure script. It holds all the
16650 # definitions figured out by Configure. Should you modify one of these values,
16651 # do not forget to propagate your changes by running "Configure -der". You may
16652 # instead choose to run each of the .SH files by yourself, or "Configure -S".
16653 #
16654
16655 # Package name      : $package
16656 # Source directory  : $src
16657 # Configuration time: $cf_time
16658 # Configured by     : $cf_by
16659 # Target system     : $myuname
16660
16661 Author='$Author'
16662 Date='$Date'
16663 Header='$Header'
16664 Id='$Id'
16665 Locker='$Locker'
16666 Log='$Log'
16667 Mcc='$Mcc'
16668 RCSfile='$RCSfile'
16669 Revision='$Revision'
16670 Source='$Source'
16671 State='$State'
16672 _a='$_a'
16673 _exe='$_exe'
16674 _o='$_o'
16675 afs='$afs'
16676 afsroot='$afsroot'
16677 alignbytes='$alignbytes'
16678 ansi2knr='$ansi2knr'
16679 aphostname='$aphostname'
16680 api_revision='$api_revision'
16681 api_subversion='$api_subversion'
16682 api_version='$api_version'
16683 api_versionstring='$api_versionstring'
16684 ar='$ar'
16685 archlib='$archlib'
16686 archlibexp='$archlibexp'
16687 archname64='$archname64'
16688 archname='$archname'
16689 archobjs='$archobjs'
16690 awk='$awk'
16691 baserev='$baserev'
16692 bash='$bash'
16693 bin='$bin'
16694 bincompat5005='$bincompat5005'
16695 binexp='$binexp'
16696 bison='$bison'
16697 byacc='$byacc'
16698 byteorder='$byteorder'
16699 c='$c'
16700 castflags='$castflags'
16701 cat='$cat'
16702 cc='$cc'
16703 cccdlflags='$cccdlflags'
16704 ccdlflags='$ccdlflags'
16705 ccflags='$ccflags'
16706 ccflags_uselargefiles='$ccflags_uselargefiles'
16707 ccname='$ccname'
16708 ccsymbols='$ccsymbols'
16709 ccversion='$ccversion'
16710 cf_by='$cf_by'
16711 cf_email='$cf_email'
16712 cf_time='$cf_time'
16713 charsize='$charsize'
16714 chgrp='$chgrp'
16715 chmod='$chmod'
16716 chown='$chown'
16717 clocktype='$clocktype'
16718 comm='$comm'
16719 compress='$compress'
16720 contains='$contains'
16721 cp='$cp'
16722 cpio='$cpio'
16723 cpp='$cpp'
16724 cpp_stuff='$cpp_stuff'
16725 cppccsymbols='$cppccsymbols'
16726 cppflags='$cppflags'
16727 cpplast='$cpplast'
16728 cppminus='$cppminus'
16729 cpprun='$cpprun'
16730 cppstdin='$cppstdin'
16731 cppsymbols='$cppsymbols'
16732 cryptlib='$cryptlib'
16733 csh='$csh'
16734 d_Gconvert='$d_Gconvert'
16735 d_PRIEUldbl='$d_PRIEUldbl'
16736 d_PRIFUldbl='$d_PRIFUldbl'
16737 d_PRIGUldbl='$d_PRIGUldbl'
16738 d_PRIXU64='$d_PRIXU64'
16739 d_PRId64='$d_PRId64'
16740 d_PRIeldbl='$d_PRIeldbl'
16741 d_PRIfldbl='$d_PRIfldbl'
16742 d_PRIgldbl='$d_PRIgldbl'
16743 d_PRIi64='$d_PRIi64'
16744 d_PRIo64='$d_PRIo64'
16745 d_PRIu64='$d_PRIu64'
16746 d_PRIx64='$d_PRIx64'
16747 d_SCNfldbl='$d_SCNfldbl'
16748 d__fwalk='$d__fwalk'
16749 d_access='$d_access'
16750 d_accessx='$d_accessx'
16751 d_alarm='$d_alarm'
16752 d_archlib='$d_archlib'
16753 d_atolf='$d_atolf'
16754 d_atoll='$d_atoll'
16755 d_attribut='$d_attribut'
16756 d_bcmp='$d_bcmp'
16757 d_bcopy='$d_bcopy'
16758 d_bincompat5005='$d_bincompat5005'
16759 d_bsd='$d_bsd'
16760 d_bsdgetpgrp='$d_bsdgetpgrp'
16761 d_bsdsetpgrp='$d_bsdsetpgrp'
16762 d_bzero='$d_bzero'
16763 d_casti32='$d_casti32'
16764 d_castneg='$d_castneg'
16765 d_charvspr='$d_charvspr'
16766 d_chown='$d_chown'
16767 d_chroot='$d_chroot'
16768 d_chsize='$d_chsize'
16769 d_class='$d_class'
16770 d_closedir='$d_closedir'
16771 d_cmsghdr_s='$d_cmsghdr_s'
16772 d_const='$d_const'
16773 d_crypt='$d_crypt'
16774 d_csh='$d_csh'
16775 d_cuserid='$d_cuserid'
16776 d_dbl_dig='$d_dbl_dig'
16777 d_dbminitproto='$d_dbminitproto'
16778 d_difftime='$d_difftime'
16779 d_dirnamlen='$d_dirnamlen'
16780 d_dlerror='$d_dlerror'
16781 d_dlopen='$d_dlopen'
16782 d_dlsymun='$d_dlsymun'
16783 d_dosuid='$d_dosuid'
16784 d_drand48proto='$d_drand48proto'
16785 d_dup2='$d_dup2'
16786 d_eaccess='$d_eaccess'
16787 d_endgrent='$d_endgrent'
16788 d_endhent='$d_endhent'
16789 d_endnent='$d_endnent'
16790 d_endpent='$d_endpent'
16791 d_endpwent='$d_endpwent'
16792 d_endsent='$d_endsent'
16793 d_eofnblk='$d_eofnblk'
16794 d_eunice='$d_eunice'
16795 d_fchdir='$d_fchdir'
16796 d_fchmod='$d_fchmod'
16797 d_fchown='$d_fchown'
16798 d_fcntl='$d_fcntl'
16799 d_fcntl_can_lock='$d_fcntl_can_lock'
16800 d_fd_macros='$d_fd_macros'
16801 d_fd_set='$d_fd_set'
16802 d_fds_bits='$d_fds_bits'
16803 d_fgetpos='$d_fgetpos'
16804 d_finite='$d_finite'
16805 d_finitel='$d_finitel'
16806 d_flexfnam='$d_flexfnam'
16807 d_flock='$d_flock'
16808 d_flockproto='$d_flockproto'
16809 d_fork='$d_fork'
16810 d_fp_class='$d_fp_class'
16811 d_fpathconf='$d_fpathconf'
16812 d_fpclass='$d_fpclass'
16813 d_fpclassify='$d_fpclassify'
16814 d_fpclassl='$d_fpclassl'
16815 d_fpos64_t='$d_fpos64_t'
16816 d_frexpl='$d_frexpl'
16817 d_fs_data_s='$d_fs_data_s'
16818 d_fseeko='$d_fseeko'
16819 d_fsetpos='$d_fsetpos'
16820 d_fstatfs='$d_fstatfs'
16821 d_fstatvfs='$d_fstatvfs'
16822 d_fsync='$d_fsync'
16823 d_ftello='$d_ftello'
16824 d_ftime='$d_ftime'
16825 d_getcwd='$d_getcwd'
16826 d_getespwnam='$d_getespwnam'
16827 d_getfsstat='$d_getfsstat'
16828 d_getgrent='$d_getgrent'
16829 d_getgrps='$d_getgrps'
16830 d_gethbyaddr='$d_gethbyaddr'
16831 d_gethbyname='$d_gethbyname'
16832 d_gethent='$d_gethent'
16833 d_gethname='$d_gethname'
16834 d_gethostprotos='$d_gethostprotos'
16835 d_getitimer='$d_getitimer'
16836 d_getlogin='$d_getlogin'
16837 d_getmnt='$d_getmnt'
16838 d_getmntent='$d_getmntent'
16839 d_getnbyaddr='$d_getnbyaddr'
16840 d_getnbyname='$d_getnbyname'
16841 d_getnent='$d_getnent'
16842 d_getnetprotos='$d_getnetprotos'
16843 d_getpagsz='$d_getpagsz'
16844 d_getpbyname='$d_getpbyname'
16845 d_getpbynumber='$d_getpbynumber'
16846 d_getpent='$d_getpent'
16847 d_getpgid='$d_getpgid'
16848 d_getpgrp2='$d_getpgrp2'
16849 d_getpgrp='$d_getpgrp'
16850 d_getppid='$d_getppid'
16851 d_getprior='$d_getprior'
16852 d_getprotoprotos='$d_getprotoprotos'
16853 d_getprpwnam='$d_getprpwnam'
16854 d_getpwent='$d_getpwent'
16855 d_getsbyname='$d_getsbyname'
16856 d_getsbyport='$d_getsbyport'
16857 d_getsent='$d_getsent'
16858 d_getservprotos='$d_getservprotos'
16859 d_getspnam='$d_getspnam'
16860 d_gettimeod='$d_gettimeod'
16861 d_gnulibc='$d_gnulibc'
16862 d_grpasswd='$d_grpasswd'
16863 d_hasmntopt='$d_hasmntopt'
16864 d_htonl='$d_htonl'
16865 d_index='$d_index'
16866 d_inetaton='$d_inetaton'
16867 d_int64_t='$d_int64_t'
16868 d_isascii='$d_isascii'
16869 d_isfinite='$d_isfinite'
16870 d_isinf='$d_isinf'
16871 d_isnan='$d_isnan'
16872 d_isnanl='$d_isnanl'
16873 d_killpg='$d_killpg'
16874 d_lchown='$d_lchown'
16875 d_ldbl_dig='$d_ldbl_dig'
16876 d_link='$d_link'
16877 d_locconv='$d_locconv'
16878 d_lockf='$d_lockf'
16879 d_longdbl='$d_longdbl'
16880 d_longlong='$d_longlong'
16881 d_lseekproto='$d_lseekproto'
16882 d_lstat='$d_lstat'
16883 d_madvise='$d_madvise'
16884 d_mblen='$d_mblen'
16885 d_mbstowcs='$d_mbstowcs'
16886 d_mbtowc='$d_mbtowc'
16887 d_memchr='$d_memchr'
16888 d_memcmp='$d_memcmp'
16889 d_memcpy='$d_memcpy'
16890 d_memmove='$d_memmove'
16891 d_memset='$d_memset'
16892 d_mkdir='$d_mkdir'
16893 d_mkdtemp='$d_mkdtemp'
16894 d_mkfifo='$d_mkfifo'
16895 d_mkstemp='$d_mkstemp'
16896 d_mkstemps='$d_mkstemps'
16897 d_mktime='$d_mktime'
16898 d_mmap='$d_mmap'
16899 d_modfl='$d_modfl'
16900 d_modfl_pow32_bug='$d_modfl_pow32_bug'
16901 d_mprotect='$d_mprotect'
16902 d_msg='$d_msg'
16903 d_msg_ctrunc='$d_msg_ctrunc'
16904 d_msg_dontroute='$d_msg_dontroute'
16905 d_msg_oob='$d_msg_oob'
16906 d_msg_peek='$d_msg_peek'
16907 d_msg_proxy='$d_msg_proxy'
16908 d_msgctl='$d_msgctl'
16909 d_msgget='$d_msgget'
16910 d_msghdr_s='$d_msghdr_s'
16911 d_msgrcv='$d_msgrcv'
16912 d_msgsnd='$d_msgsnd'
16913 d_msync='$d_msync'
16914 d_munmap='$d_munmap'
16915 d_mymalloc='$d_mymalloc'
16916 d_nice='$d_nice'
16917 d_nl_langinfo='$d_nl_langinfo'
16918 d_nv_preserves_uv='$d_nv_preserves_uv'
16919 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
16920 d_off64_t='$d_off64_t'
16921 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
16922 d_oldpthreads='$d_oldpthreads'
16923 d_oldsock='$d_oldsock'
16924 d_open3='$d_open3'
16925 d_pathconf='$d_pathconf'
16926 d_pause='$d_pause'
16927 d_perl_otherlibdirs='$d_perl_otherlibdirs'
16928 d_phostname='$d_phostname'
16929 d_pipe='$d_pipe'
16930 d_poll='$d_poll'
16931 d_portable='$d_portable'
16932 d_pthread_atfork='$d_pthread_atfork'
16933 d_pthread_yield='$d_pthread_yield'
16934 d_pwage='$d_pwage'
16935 d_pwchange='$d_pwchange'
16936 d_pwclass='$d_pwclass'
16937 d_pwcomment='$d_pwcomment'
16938 d_pwexpire='$d_pwexpire'
16939 d_pwgecos='$d_pwgecos'
16940 d_pwpasswd='$d_pwpasswd'
16941 d_pwquota='$d_pwquota'
16942 d_qgcvt='$d_qgcvt'
16943 d_quad='$d_quad'
16944 d_readdir='$d_readdir'
16945 d_readlink='$d_readlink'
16946 d_readv='$d_readv'
16947 d_recvmsg='$d_recvmsg'
16948 d_rename='$d_rename'
16949 d_rewinddir='$d_rewinddir'
16950 d_rmdir='$d_rmdir'
16951 d_safebcpy='$d_safebcpy'
16952 d_safemcpy='$d_safemcpy'
16953 d_sanemcmp='$d_sanemcmp'
16954 d_sbrkproto='$d_sbrkproto'
16955 d_sched_yield='$d_sched_yield'
16956 d_scm_rights='$d_scm_rights'
16957 d_seekdir='$d_seekdir'
16958 d_select='$d_select'
16959 d_sem='$d_sem'
16960 d_semctl='$d_semctl'
16961 d_semctl_semid_ds='$d_semctl_semid_ds'
16962 d_semctl_semun='$d_semctl_semun'
16963 d_semget='$d_semget'
16964 d_semop='$d_semop'
16965 d_sendmsg='$d_sendmsg'
16966 d_setegid='$d_setegid'
16967 d_seteuid='$d_seteuid'
16968 d_setgrent='$d_setgrent'
16969 d_setgrps='$d_setgrps'
16970 d_sethent='$d_sethent'
16971 d_setitimer='$d_setitimer'
16972 d_setlinebuf='$d_setlinebuf'
16973 d_setlocale='$d_setlocale'
16974 d_setnent='$d_setnent'
16975 d_setpent='$d_setpent'
16976 d_setpgid='$d_setpgid'
16977 d_setpgrp2='$d_setpgrp2'
16978 d_setpgrp='$d_setpgrp'
16979 d_setprior='$d_setprior'
16980 d_setproctitle='$d_setproctitle'
16981 d_setpwent='$d_setpwent'
16982 d_setregid='$d_setregid'
16983 d_setresgid='$d_setresgid'
16984 d_setresuid='$d_setresuid'
16985 d_setreuid='$d_setreuid'
16986 d_setrgid='$d_setrgid'
16987 d_setruid='$d_setruid'
16988 d_setsent='$d_setsent'
16989 d_setsid='$d_setsid'
16990 d_setvbuf='$d_setvbuf'
16991 d_sfio='$d_sfio'
16992 d_shm='$d_shm'
16993 d_shmat='$d_shmat'
16994 d_shmatprototype='$d_shmatprototype'
16995 d_shmctl='$d_shmctl'
16996 d_shmdt='$d_shmdt'
16997 d_shmget='$d_shmget'
16998 d_sigaction='$d_sigaction'
16999 d_sigprocmask='$d_sigprocmask'
17000 d_sigsetjmp='$d_sigsetjmp'
17001 d_sockatmark='$d_sockatmark'
17002 d_sockatmarkproto='$d_sockatmarkproto'
17003 d_socket='$d_socket'
17004 d_socklen_t='$d_socklen_t'
17005 d_sockpair='$d_sockpair'
17006 d_socks5_init='$d_socks5_init'
17007 d_sqrtl='$d_sqrtl'
17008 d_sresgproto='$d_sresgproto'
17009 d_sresuproto='$d_sresuproto'
17010 d_statblks='$d_statblks'
17011 d_statfs_f_flags='$d_statfs_f_flags'
17012 d_statfs_s='$d_statfs_s'
17013 d_statvfs='$d_statvfs'
17014 d_stdio_cnt_lval='$d_stdio_cnt_lval'
17015 d_stdio_ptr_lval='$d_stdio_ptr_lval'
17016 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
17017 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
17018 d_stdio_stream_array='$d_stdio_stream_array'
17019 d_stdiobase='$d_stdiobase'
17020 d_stdstdio='$d_stdstdio'
17021 d_strchr='$d_strchr'
17022 d_strcoll='$d_strcoll'
17023 d_strctcpy='$d_strctcpy'
17024 d_strerrm='$d_strerrm'
17025 d_strerror='$d_strerror'
17026 d_strftime='$d_strftime'
17027 d_strtod='$d_strtod'
17028 d_strtol='$d_strtol'
17029 d_strtold='$d_strtold'
17030 d_strtoll='$d_strtoll'
17031 d_strtoq='$d_strtoq'
17032 d_strtoul='$d_strtoul'
17033 d_strtoull='$d_strtoull'
17034 d_strtouq='$d_strtouq'
17035 d_strxfrm='$d_strxfrm'
17036 d_suidsafe='$d_suidsafe'
17037 d_symlink='$d_symlink'
17038 d_syscall='$d_syscall'
17039 d_syscallproto='$d_syscallproto'
17040 d_sysconf='$d_sysconf'
17041 d_sysernlst='$d_sysernlst'
17042 d_syserrlst='$d_syserrlst'
17043 d_system='$d_system'
17044 d_tcgetpgrp='$d_tcgetpgrp'
17045 d_tcsetpgrp='$d_tcsetpgrp'
17046 d_telldir='$d_telldir'
17047 d_telldirproto='$d_telldirproto'
17048 d_time='$d_time'
17049 d_times='$d_times'
17050 d_truncate='$d_truncate'
17051 d_tzname='$d_tzname'
17052 d_u32align='$d_u32align'
17053 d_ualarm='$d_ualarm'
17054 d_umask='$d_umask'
17055 d_uname='$d_uname'
17056 d_union_semun='$d_union_semun'
17057 d_unordered='$d_unordered'
17058 d_usleep='$d_usleep'
17059 d_usleepproto='$d_usleepproto'
17060 d_ustat='$d_ustat'
17061 d_vendorarch='$d_vendorarch'
17062 d_vendorbin='$d_vendorbin'
17063 d_vendorlib='$d_vendorlib'
17064 d_vfork='$d_vfork'
17065 d_void_closedir='$d_void_closedir'
17066 d_voidsig='$d_voidsig'
17067 d_voidtty='$d_voidtty'
17068 d_volatile='$d_volatile'
17069 d_vprintf='$d_vprintf'
17070 d_wait4='$d_wait4'
17071 d_waitpid='$d_waitpid'
17072 d_wcstombs='$d_wcstombs'
17073 d_wctomb='$d_wctomb'
17074 d_writev='$d_writev'
17075 d_xenix='$d_xenix'
17076 date='$date'
17077 db_hashtype='$db_hashtype'
17078 db_prefixtype='$db_prefixtype'
17079 db_version_major='$db_version_major'
17080 db_version_minor='$db_version_minor'
17081 db_version_patch='$db_version_patch'
17082 defvoidused='$defvoidused'
17083 direntrytype='$direntrytype'
17084 dlext='$dlext'
17085 dlsrc='$dlsrc'
17086 doublesize='$doublesize'
17087 drand01='$drand01'
17088 dynamic_ext='$dynamic_ext'
17089 eagain='$eagain'
17090 ebcdic='$ebcdic'
17091 echo='$echo'
17092 egrep='$egrep'
17093 emacs='$emacs'
17094 eunicefix='$eunicefix'
17095 exe_ext='$exe_ext'
17096 expr='$expr'
17097 extensions='$extensions'
17098 extras='$extras'
17099 fflushNULL='$fflushNULL'
17100 fflushall='$fflushall'
17101 find='$find'
17102 firstmakefile='$firstmakefile'
17103 flex='$flex'
17104 fpossize='$fpossize'
17105 fpostype='$fpostype'
17106 freetype='$freetype'
17107 from='$from'
17108 full_ar='$full_ar'
17109 full_csh='$full_csh'
17110 full_sed='$full_sed'
17111 gccosandvers='$gccosandvers'
17112 gccversion='$gccversion'
17113 gidformat='$gidformat'
17114 gidsign='$gidsign'
17115 gidsize='$gidsize'
17116 gidtype='$gidtype'
17117 glibpth='$glibpth'
17118 grep='$grep'
17119 groupcat='$groupcat'
17120 groupstype='$groupstype'
17121 gzip='$gzip'
17122 h_fcntl='$h_fcntl'
17123 h_sysfile='$h_sysfile'
17124 hint='$hint'
17125 hostcat='$hostcat'
17126 i16size='$i16size'
17127 i16type='$i16type'
17128 i32size='$i32size'
17129 i32type='$i32type'
17130 i64size='$i64size'
17131 i64type='$i64type'
17132 i8size='$i8size'
17133 i8type='$i8type'
17134 i_arpainet='$i_arpainet'
17135 i_bsdioctl='$i_bsdioctl'
17136 i_db='$i_db'
17137 i_dbm='$i_dbm'
17138 i_dirent='$i_dirent'
17139 i_dld='$i_dld'
17140 i_dlfcn='$i_dlfcn'
17141 i_fcntl='$i_fcntl'
17142 i_float='$i_float'
17143 i_fp='$i_fp'
17144 i_fp_class='$i_fp_class'
17145 i_gdbm='$i_gdbm'
17146 i_grp='$i_grp'
17147 i_ieeefp='$i_ieeefp'
17148 i_inttypes='$i_inttypes'
17149 i_langinfo='$i_langinfo'
17150 i_libutil='$i_libutil'
17151 i_limits='$i_limits'
17152 i_locale='$i_locale'
17153 i_machcthr='$i_machcthr'
17154 i_malloc='$i_malloc'
17155 i_math='$i_math'
17156 i_memory='$i_memory'
17157 i_mntent='$i_mntent'
17158 i_ndbm='$i_ndbm'
17159 i_netdb='$i_netdb'
17160 i_neterrno='$i_neterrno'
17161 i_netinettcp='$i_netinettcp'
17162 i_niin='$i_niin'
17163 i_poll='$i_poll'
17164 i_prot='$i_prot'
17165 i_pthread='$i_pthread'
17166 i_pwd='$i_pwd'
17167 i_rpcsvcdbm='$i_rpcsvcdbm'
17168 i_sfio='$i_sfio'
17169 i_sgtty='$i_sgtty'
17170 i_shadow='$i_shadow'
17171 i_socks='$i_socks'
17172 i_stdarg='$i_stdarg'
17173 i_stddef='$i_stddef'
17174 i_stdlib='$i_stdlib'
17175 i_string='$i_string'
17176 i_sunmath='$i_sunmath'
17177 i_sysaccess='$i_sysaccess'
17178 i_sysdir='$i_sysdir'
17179 i_sysfile='$i_sysfile'
17180 i_sysfilio='$i_sysfilio'
17181 i_sysin='$i_sysin'
17182 i_sysioctl='$i_sysioctl'
17183 i_syslog='$i_syslog'
17184 i_sysmman='$i_sysmman'
17185 i_sysmode='$i_sysmode'
17186 i_sysmount='$i_sysmount'
17187 i_sysndir='$i_sysndir'
17188 i_sysparam='$i_sysparam'
17189 i_sysresrc='$i_sysresrc'
17190 i_syssecrt='$i_syssecrt'
17191 i_sysselct='$i_sysselct'
17192 i_syssockio='$i_syssockio'
17193 i_sysstat='$i_sysstat'
17194 i_sysstatfs='$i_sysstatfs'
17195 i_sysstatvfs='$i_sysstatvfs'
17196 i_systime='$i_systime'
17197 i_systimek='$i_systimek'
17198 i_systimes='$i_systimes'
17199 i_systypes='$i_systypes'
17200 i_sysuio='$i_sysuio'
17201 i_sysun='$i_sysun'
17202 i_sysutsname='$i_sysutsname'
17203 i_sysvfs='$i_sysvfs'
17204 i_syswait='$i_syswait'
17205 i_termio='$i_termio'
17206 i_termios='$i_termios'
17207 i_time='$i_time'
17208 i_unistd='$i_unistd'
17209 i_ustat='$i_ustat'
17210 i_utime='$i_utime'
17211 i_values='$i_values'
17212 i_varargs='$i_varargs'
17213 i_varhdr='$i_varhdr'
17214 i_vfork='$i_vfork'
17215 ignore_versioned_solibs='$ignore_versioned_solibs'
17216 inc_version_list='$inc_version_list'
17217 inc_version_list_init='$inc_version_list_init'
17218 incpath='$incpath'
17219 inews='$inews'
17220 installarchlib='$installarchlib'
17221 installbin='$installbin'
17222 installman1dir='$installman1dir'
17223 installman3dir='$installman3dir'
17224 installprefix='$installprefix'
17225 installprefixexp='$installprefixexp'
17226 installprivlib='$installprivlib'
17227 installscript='$installscript'
17228 installsitearch='$installsitearch'
17229 installsitebin='$installsitebin'
17230 installsitelib='$installsitelib'
17231 installstyle='$installstyle'
17232 installusrbinperl='$installusrbinperl'
17233 installvendorarch='$installvendorarch'
17234 installvendorbin='$installvendorbin'
17235 installvendorlib='$installvendorlib'
17236 intsize='$intsize'
17237 issymlink='$issymlink'
17238 ivdformat='$ivdformat'
17239 ivsize='$ivsize'
17240 ivtype='$ivtype'
17241 known_extensions='$known_extensions'
17242 ksh='$ksh'
17243 ld='$ld'
17244 lddlflags='$lddlflags'
17245 ldflags='$ldflags'
17246 ldflags_uselargefiles='$ldflags_uselargefiles'
17247 ldlibpthname='$ldlibpthname'
17248 less='$less'
17249 lib_ext='$lib_ext'
17250 libc='$libc'
17251 libperl='$libperl'
17252 libpth='$libpth'
17253 libs='$libs'
17254 libsdirs='$libsdirs'
17255 libsfiles='$libsfiles'
17256 libsfound='$libsfound'
17257 libspath='$libspath'
17258 libswanted='$libswanted'
17259 libswanted_uselargefiles='$libswanted_uselargefiles'
17260 line='$line'
17261 lint='$lint'
17262 lkflags='$lkflags'
17263 ln='$ln'
17264 lns='$lns'
17265 locincpth='$locincpth'
17266 loclibpth='$loclibpth'
17267 longdblsize='$longdblsize'
17268 longlongsize='$longlongsize'
17269 longsize='$longsize'
17270 lp='$lp'
17271 lpr='$lpr'
17272 ls='$ls'
17273 lseeksize='$lseeksize'
17274 lseektype='$lseektype'
17275 mail='$mail'
17276 mailx='$mailx'
17277 make='$make'
17278 make_set_make='$make_set_make'
17279 mallocobj='$mallocobj'
17280 mallocsrc='$mallocsrc'
17281 malloctype='$malloctype'
17282 man1dir='$man1dir'
17283 man1direxp='$man1direxp'
17284 man1ext='$man1ext'
17285 man3dir='$man3dir'
17286 man3direxp='$man3direxp'
17287 man3ext='$man3ext'
17288 mips_type='$mips_type'
17289 mkdir='$mkdir'
17290 mmaptype='$mmaptype'
17291 modetype='$modetype'
17292 more='$more'
17293 multiarch='$multiarch'
17294 mv='$mv'
17295 myarchname='$myarchname'
17296 mydomain='$mydomain'
17297 myhostname='$myhostname'
17298 myuname='$myuname'
17299 n='$n'
17300 need_va_copy='$need_va_copy'
17301 netdb_hlen_type='$netdb_hlen_type'
17302 netdb_host_type='$netdb_host_type'
17303 netdb_name_type='$netdb_name_type'
17304 netdb_net_type='$netdb_net_type'
17305 nm='$nm'
17306 nm_opt='$nm_opt'
17307 nm_so_opt='$nm_so_opt'
17308 nonxs_ext='$nonxs_ext'
17309 nroff='$nroff'
17310 nvEUformat='$nvEUformat'
17311 nvFUformat='$nvFUformat'
17312 nvGUformat='$nvGUformat'
17313 nveformat='$nveformat'
17314 nvfformat='$nvfformat'
17315 nvgformat='$nvgformat'
17316 nvsize='$nvsize'
17317 nvtype='$nvtype'
17318 o_nonblock='$o_nonblock'
17319 obj_ext='$obj_ext'
17320 old_pthread_create_joinable='$old_pthread_create_joinable'
17321 optimize='$optimize'
17322 orderlib='$orderlib'
17323 osname='$osname'
17324 osvers='$osvers'
17325 otherlibdirs='$otherlibdirs'
17326 package='$package'
17327 pager='$pager'
17328 passcat='$passcat'
17329 patchlevel='$patchlevel'
17330 path_sep='$path_sep'
17331 perl5='$perl5'
17332 perl='$perl'
17333 perl_patchlevel='$perl_patchlevel'
17334 perladmin='$perladmin'
17335 perllibs='$perllibs'
17336 perlpath='$perlpath'
17337 pg='$pg'
17338 phostname='$phostname'
17339 pidtype='$pidtype'
17340 plibpth='$plibpth'
17341 pm_apiversion='$pm_apiversion'
17342 pmake='$pmake'
17343 pr='$pr'
17344 prefix='$prefix'
17345 prefixexp='$prefixexp'
17346 privlib='$privlib'
17347 privlibexp='$privlibexp'
17348 prototype='$prototype'
17349 ptrsize='$ptrsize'
17350 quadkind='$quadkind'
17351 quadtype='$quadtype'
17352 randbits='$randbits'
17353 randfunc='$randfunc'
17354 randseedtype='$randseedtype'
17355 ranlib='$ranlib'
17356 rd_nodata='$rd_nodata'
17357 revision='$revision'
17358 rm='$rm'
17359 rmail='$rmail'
17360 run='$run'
17361 runnm='$runnm'
17362 sPRIEUldbl='$sPRIEUldbl'
17363 sPRIFUldbl='$sPRIFUldbl'
17364 sPRIGUldbl='$sPRIGUldbl'
17365 sPRIXU64='$sPRIXU64'
17366 sPRId64='$sPRId64'
17367 sPRIeldbl='$sPRIeldbl'
17368 sPRIfldbl='$sPRIfldbl'
17369 sPRIgldbl='$sPRIgldbl'
17370 sPRIi64='$sPRIi64'
17371 sPRIo64='$sPRIo64'
17372 sPRIu64='$sPRIu64'
17373 sPRIx64='$sPRIx64'
17374 sSCNfldbl='$sSCNfldbl'
17375 sched_yield='$sched_yield'
17376 scriptdir='$scriptdir'
17377 scriptdirexp='$scriptdirexp'
17378 sed='$sed'
17379 seedfunc='$seedfunc'
17380 selectminbits='$selectminbits'
17381 selecttype='$selecttype'
17382 sendmail='$sendmail'
17383 sh='$sh'
17384 shar='$shar'
17385 sharpbang='$sharpbang'
17386 shmattype='$shmattype'
17387 shortsize='$shortsize'
17388 shrpenv='$shrpenv'
17389 shsharp='$shsharp'
17390 sig_count='$sig_count'
17391 sig_name='$sig_name'
17392 sig_name_init='$sig_name_init'
17393 sig_num='$sig_num'
17394 sig_num_init='$sig_num_init'
17395 sig_size='$sig_size'
17396 signal_t='$signal_t'
17397 sitearch='$sitearch'
17398 sitearchexp='$sitearchexp'
17399 sitebin='$sitebin'
17400 sitebinexp='$sitebinexp'
17401 sitelib='$sitelib'
17402 sitelib_stem='$sitelib_stem'
17403 sitelibexp='$sitelibexp'
17404 siteprefix='$siteprefix'
17405 siteprefixexp='$siteprefixexp'
17406 sizesize='$sizesize'
17407 sizetype='$sizetype'
17408 sleep='$sleep'
17409 smail='$smail'
17410 so='$so'
17411 sockethdr='$sockethdr'
17412 socketlib='$socketlib'
17413 socksizetype='$socksizetype'
17414 sort='$sort'
17415 spackage='$spackage'
17416 spitshell='$spitshell'
17417 src='$src'
17418 ssizetype='$ssizetype'
17419 startperl='$startperl'
17420 startsh='$startsh'
17421 static_ext='$static_ext'
17422 stdchar='$stdchar'
17423 stdio_base='$stdio_base'
17424 stdio_bufsiz='$stdio_bufsiz'
17425 stdio_cnt='$stdio_cnt'
17426 stdio_filbuf='$stdio_filbuf'
17427 stdio_ptr='$stdio_ptr'
17428 stdio_stream_array='$stdio_stream_array'
17429 strings='$strings'
17430 submit='$submit'
17431 subversion='$subversion'
17432 sysman='$sysman'
17433 tail='$tail'
17434 tar='$tar'
17435 targetarch='$targetarch'
17436 tbl='$tbl'
17437 tee='$tee'
17438 test='$test'
17439 timeincl='$timeincl'
17440 timetype='$timetype'
17441 to='$to'
17442 touch='$touch'
17443 tr='$tr'
17444 trnl='$trnl'
17445 troff='$troff'
17446 u16size='$u16size'
17447 u16type='$u16type'
17448 u32size='$u32size'
17449 u32type='$u32type'
17450 u64size='$u64size'
17451 u64type='$u64type'
17452 u8size='$u8size'
17453 u8type='$u8type'
17454 uidformat='$uidformat'
17455 uidsign='$uidsign'
17456 uidsize='$uidsize'
17457 uidtype='$uidtype'
17458 uname='$uname'
17459 uniq='$uniq'
17460 uquadtype='$uquadtype'
17461 use5005threads='$use5005threads'
17462 use64bitall='$use64bitall'
17463 use64bitint='$use64bitint'
17464 usecrosscompile='$usecrosscompile'
17465 usedl='$usedl'
17466 useithreads='$useithreads'
17467 uselargefiles='$uselargefiles'
17468 uselongdouble='$uselongdouble'
17469 usemorebits='$usemorebits'
17470 usemultiplicity='$usemultiplicity'
17471 usemymalloc='$usemymalloc'
17472 usenm='$usenm'
17473 useopcode='$useopcode'
17474 useperlio='$useperlio'
17475 useposix='$useposix'
17476 usereentrant='$usereentrant'
17477 usesfio='$usesfio'
17478 useshrplib='$useshrplib'
17479 usesocks='$usesocks'
17480 usethreads='$usethreads'
17481 usevendorprefix='$usevendorprefix'
17482 usevfork='$usevfork'
17483 usrinc='$usrinc'
17484 uuname='$uuname'
17485 uvXUformat='$uvXUformat'
17486 uvoformat='$uvoformat'
17487 uvsize='$uvsize'
17488 uvtype='$uvtype'
17489 uvuformat='$uvuformat'
17490 uvxformat='$uvxformat'
17491 vendorarch='$vendorarch'
17492 vendorarchexp='$vendorarchexp'
17493 vendorbin='$vendorbin'
17494 vendorbinexp='$vendorbinexp'
17495 vendorlib='$vendorlib'
17496 vendorlib_stem='$vendorlib_stem'
17497 vendorlibexp='$vendorlibexp'
17498 vendorprefix='$vendorprefix'
17499 vendorprefixexp='$vendorprefixexp'
17500 version='$version'
17501 version_patchlevel_string='$version_patchlevel_string'
17502 versiononly='$versiononly'
17503 vi='$vi'
17504 voidflags='$voidflags'
17505 xlibpth='$xlibpth'
17506 xs_apiversion='$xs_apiversion'
17507 yacc='$yacc'
17508 yaccflags='$yaccflags'
17509 zcat='$zcat'
17510 zip='$zip'
17511 EOT
17512
17513 : Add in command line options if available
17514 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
17515
17516 : add special variables
17517 $test -f $src/patchlevel.h && \
17518 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
17519 echo "PERL_PATCHLEVEL=$perl_patchlevel" >>config.sh
17520 echo "PERL_CONFIG_SH=true" >>config.sh
17521
17522 : propagate old symbols
17523 if $test -f UU/config.sh; then
17524         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
17525         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
17526         $sort | $uniq -u >UU/oldsyms
17527         set X `cat UU/oldsyms`
17528         shift
17529         case $# in
17530         0) ;;
17531         *)
17532                 cat <<EOM
17533 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
17534 EOM
17535                 echo "# Variables propagated from previous config.sh file." >>config.sh
17536                 for sym in `cat UU/oldsyms`; do
17537                         echo "    Propagating $hint variable "'$'"$sym..."
17538                         eval 'tmp="$'"${sym}"'"'
17539                         echo "$tmp" | \
17540                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
17541                 done
17542                 ;;
17543         esac
17544 fi
17545
17546 : Finish up by extracting the .SH files
17547 case "$alldone" in
17548 exit)
17549         $rm -rf UU
17550         echo "Extraction done."
17551         exit 0
17552         ;;
17553 cont)
17554         ;;
17555 '')
17556         dflt=''
17557         nostick=true
17558         $cat <<EOM
17559
17560 If you'd like to make any changes to the config.sh file before I begin
17561 to configure things, do it as a shell escape now (e.g. !vi config.sh).
17562
17563 EOM
17564         rp="Press return or use a shell escape to edit config.sh:"
17565         . UU/myread
17566         nostick=''
17567         case "$ans" in
17568         '') ;;
17569         *) : in case they cannot read
17570                 sh 1>&4 -c "$ans";;
17571         esac
17572         ;;
17573 esac
17574
17575 : if this fails, just run all the .SH files by hand
17576 . ./config.sh
17577
17578 echo " "
17579 exec 1>&4
17580 pwd=`pwd`
17581 . ./UU/extract
17582 cd $pwd
17583
17584 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
17585         dflt=y
17586         case "$silent" in
17587         true) ;;
17588         *)
17589                 $cat <<EOM
17590
17591 Now you need to generate make dependencies by running "$make depend".
17592 You might prefer to run it in background: "$make depend > makedepend.out &"
17593 It can take a while, so you might not want to run it right now.
17594
17595 EOM
17596                 ;;
17597         esac
17598         rp="Run $make depend now?"
17599         . UU/myread
17600         case "$ans" in
17601         y*)
17602                 $make depend && echo "Now you must run '$make'."
17603                 ;;
17604         *)
17605                 echo "You must run '$make depend' then '$make'."
17606                 ;;
17607         esac
17608 elif test -f [Mm]akefile; then
17609         echo " "
17610         echo "Now you must run a $make."
17611 else
17612         echo "Configure done."
17613 fi
17614
17615 if $test -f Policy.sh; then
17616     $cat <<EOM
17617
17618 If you compile $package on a different machine or from a different object
17619 directory, copy the Policy.sh file from this object directory to the
17620 new one before you run Configure -- this will help you with most of
17621 the policy defaults.
17622
17623 EOM
17624 fi
17625 if $test -f config.msg; then
17626     echo "Hmm.  I also noted the following information while running:"
17627     echo " "
17628     $cat config.msg >&4
17629     $rm -f config.msg
17630 fi
17631 $rm -f kit*isdone ark*isdone
17632 $rm -rf UU
17633
17634 : End of Configure
17635