This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldeltaize Hash::Util.
[perl5.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Fri Mar  8 23:12:53 EET 2002 [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                 case "X${MACHTYPE:-nonesuchmach}" in
69                 *cygwin) ;;
70                 *) p_=\; ;;
71                 esac
72         fi
73 fi
74
75 : Proper PATH setting
76 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
77 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
78 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
79 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
80 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
81 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
82 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
83 paths="$paths /sbin /usr/sbin /usr/libexec"
84 paths="$paths /system/gnu_library/bin"
85
86 for p in $paths
87 do
88         case "$p_$PATH$p_" in
89         *$p_$p$p_*) ;;
90         *) test -d $p && PATH=$PATH$p_$p ;;
91         esac
92 done
93
94 PATH=.$p_$PATH
95 export PATH
96
97 : shall we be using ksh?
98 inksh=''
99 needksh=''
100 avoidksh=''
101 newsh=/bin/ksh
102 changesh=''
103 if (PATH=.; alias -x) >/dev/null 2>&1; then
104                 inksh=true
105 fi
106 if test -f /hp-ux -a -f /bin/ksh; then
107         needksh='to avoid sh bug in "here document" expansion'
108 fi
109 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
110         if test X`/usr/bin/uname -v` = X4; then
111                 avoidksh="to avoid AIX 4's /bin/sh"
112                 newsh=/usr/bin/bsh
113         fi
114 fi
115 if test -f /osf_boot -a -f /usr/sbin/setld; then
116         if test X`/usr/bin/uname -s` = XOSF1; then
117                 avoidksh="to avoid Digital UNIX' ksh"
118                 newsh=/bin/sh
119                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
120         fi
121 fi
122 case "$inksh/$needksh" in
123 /[a-z]*)
124                 ENV=''
125                 changesh=true
126                 reason="$needksh"
127         ;;
128 esac
129 case "$inksh/$avoidksh" in
130 true/[a-z]*)
131         changesh=true
132         reason="$avoidksh"
133         ;;
134 esac
135 case "$inksh/$needksh-$avoidksh-" in
136 true/--)
137                 cat <<EOM
138 (I see you are using the Korn shell.  Some ksh's blow up on $me,
139 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
140 EOM
141         ;;
142 esac
143 case "$changesh" in
144 true)
145         export newsh
146         echo "(Feeding myself to $newsh $reason.)"
147         case "$0" in
148         Configure|*/Configure) exec $newsh $0 "$@";;
149         *) exec $newsh Configure "$@";;
150         esac
151         ;;
152 esac
153
154 : if needed set CDPATH to a harmless value that is not chatty
155 : avoid bash 2.02 problems with empty CDPATH.
156 case "$CDPATH" in
157 '')     ;;
158 *)      case "$SHELL" in
159         *bash*) CDPATH='.' ;;
160         *)              CDPATH='' ;;
161         esac
162         ;;
163 esac
164 : Configure runs within the UU subdirectory
165 test -d UU || mkdir UU
166 cd UU && rm -f ./*
167
168
169 ccname=''
170 ccversion=''
171 ccsymbols=''
172 cppccsymbols=''
173 cppsymbols=''
174 from=''
175 run=''
176 targetarch=''
177 to=''
178 usecrosscompile=''
179 perllibs=''
180 dynamic_ext=''
181 extensions=''
182 known_extensions=''
183 nonxs_ext=''
184 static_ext=''
185 useopcode=''
186 useposix=''
187 extras=''
188 d_bsd=''
189 d_eunice=''
190 d_xenix=''
191 eunicefix=''
192 Mcc=''
193 ar=''
194 awk=''
195 bash=''
196 bison=''
197 byacc=''
198 cat=''
199 chgrp=''
200 chmod=''
201 chown=''
202 comm=''
203 compress=''
204 cp=''
205 cpio=''
206 cpp=''
207 csh=''
208 date=''
209 echo=''
210 egrep=''
211 emacs=''
212 expr=''
213 find=''
214 flex=''
215 gmake=''
216 grep=''
217 gzip=''
218 inews=''
219 ksh=''
220 less=''
221 line=''
222 lint=''
223 ln=''
224 lp=''
225 lpr=''
226 ls=''
227 mail=''
228 mailx=''
229 make=''
230 mkdir=''
231 more=''
232 mv=''
233 nm=''
234 nroff=''
235 perl=''
236 pg=''
237 pmake=''
238 pr=''
239 rm=''
240 rmail=''
241 sed=''
242 sendmail=''
243 shar=''
244 sleep=''
245 smail=''
246 sort=''
247 submit=''
248 tail=''
249 tar=''
250 tbl=''
251 tee=''
252 test=''
253 touch=''
254 tr=''
255 troff=''
256 uname=''
257 uniq=''
258 uuname=''
259 vi=''
260 zcat=''
261 zip=''
262 full_ar=''
263 full_sed=''
264 libswanted=''
265 hint=''
266 myuname=''
267 osname=''
268 osvers=''
269 Author=''
270 Date=''
271 Header=''
272 Id=''
273 Locker=''
274 Log=''
275 RCSfile=''
276 Revision=''
277 Source=''
278 State=''
279 _a=''
280 _exe=''
281 _o=''
282 archobjs=''
283 exe_ext=''
284 firstmakefile=''
285 lib_ext=''
286 obj_ext=''
287 path_sep=''
288 afs=''
289 afsroot=''
290 alignbytes=''
291 ansi2knr=''
292 archlib=''
293 archlibexp=''
294 d_archlib=''
295 installarchlib=''
296 archname=''
297 myarchname=''
298 d_atolf=''
299 d_atoll=''
300 baserev=''
301 bin=''
302 binexp=''
303 installbin=''
304 bincompat5005=''
305 d_bincompat5005=''
306 byteorder=''
307 cc=''
308 ccflags=''
309 cppflags=''
310 ldflags=''
311 lkflags=''
312 locincpth=''
313 optimize=''
314 cf_email=''
315 cf_by=''
316 cf_time=''
317 charsize=''
318 contains=''
319 cpp_stuff=''
320 cpplast=''
321 cppminus=''
322 cpprun=''
323 cppstdin=''
324 d__fwalk=''
325 d_access=''
326 d_accessx=''
327 d_alarm=''
328 d_attribut=''
329 d_bcmp=''
330 d_bcopy=''
331 d_bzero=''
332 d_casti32=''
333 castflags=''
334 d_castneg=''
335 d_chown=''
336 d_chroot=''
337 d_chsize=''
338 d_class=''
339 d_closedir=''
340 d_void_closedir=''
341 d_cmsghdr_s=''
342 d_const=''
343 cryptlib=''
344 d_crypt=''
345 d_csh=''
346 full_csh=''
347 d_cuserid=''
348 d_dbl_dig=''
349 d_dbminitproto=''
350 d_difftime=''
351 d_dirfd=''
352 d_dlerror=''
353 d_dlopen=''
354 d_dlsymun=''
355 d_dosuid=''
356 d_suidsafe=''
357 d_drand48proto=''
358 d_dup2=''
359 d_eaccess=''
360 d_endgrent=''
361 d_endhent=''
362 d_endnent=''
363 d_endpent=''
364 d_endpwent=''
365 d_endsent=''
366 d_fchdir=''
367 d_fchmod=''
368 d_fchown=''
369 d_fcntl=''
370 d_fcntl_can_lock=''
371 d_fd_macros=''
372 d_fd_set=''
373 d_fds_bits=''
374 d_fgetpos=''
375 d_finite=''
376 d_finitel=''
377 d_flexfnam=''
378 d_flock=''
379 d_flockproto=''
380 d_fork=''
381 d_fp_class=''
382 d_fpclass=''
383 d_fpclassify=''
384 d_fpclassl=''
385 d_fpos64_t=''
386 d_frexpl=''
387 d_fs_data_s=''
388 d_fseeko=''
389 d_fsetpos=''
390 d_fstatfs=''
391 d_fsync=''
392 d_ftello=''
393 d_ftime=''
394 d_gettimeod=''
395 d_Gconvert=''
396 d_getcwd=''
397 d_getespwnam=''
398 d_getfsstat=''
399 d_getgrent=''
400 d_getgrps=''
401 d_gethbyaddr=''
402 d_gethbyname=''
403 d_gethent=''
404 aphostname=''
405 d_gethname=''
406 d_phostname=''
407 d_uname=''
408 d_gethostprotos=''
409 d_getitimer=''
410 d_getlogin=''
411 d_getmnt=''
412 d_getmntent=''
413 d_getnbyaddr=''
414 d_getnbyname=''
415 d_getnent=''
416 d_getnetprotos=''
417 d_getpagsz=''
418 d_getpent=''
419 d_getpgid=''
420 d_getpgrp2=''
421 d_bsdgetpgrp=''
422 d_getpgrp=''
423 d_getppid=''
424 d_getprior=''
425 d_getpbyname=''
426 d_getpbynumber=''
427 d_getprotoprotos=''
428 d_getprpwnam=''
429 d_getpwent=''
430 d_getsent=''
431 d_getservprotos=''
432 d_getspnam=''
433 d_getsbyname=''
434 d_getsbyport=''
435 d_gnulibc=''
436 d_hasmntopt=''
437 d_htonl=''
438 d_inetaton=''
439 d_int64_t=''
440 d_isascii=''
441 d_isfinite=''
442 d_isinf=''
443 d_isnan=''
444 d_isnanl=''
445 d_killpg=''
446 d_lchown=''
447 d_ldbl_dig=''
448 d_link=''
449 d_locconv=''
450 d_lockf=''
451 d_longdbl=''
452 longdblsize=''
453 d_longlong=''
454 longlongsize=''
455 d_lseekproto=''
456 d_lstat=''
457 d_madvise=''
458 d_mblen=''
459 d_mbstowcs=''
460 d_mbtowc=''
461 d_memchr=''
462 d_memcmp=''
463 d_memcpy=''
464 d_memmove=''
465 d_memset=''
466 d_mkdir=''
467 d_mkdtemp=''
468 d_mkfifo=''
469 d_mkstemp=''
470 d_mkstemps=''
471 d_mktime=''
472 d_mmap=''
473 mmaptype=''
474 d_modfl=''
475 d_modfl_pow32_bug=''
476 d_mprotect=''
477 d_msg=''
478 d_msgctl=''
479 d_msgget=''
480 d_msghdr_s=''
481 d_msgrcv=''
482 d_msgsnd=''
483 d_msync=''
484 d_munmap=''
485 d_nice=''
486 d_nl_langinfo=''
487 d_off64_t=''
488 d_open3=''
489 d_fpathconf=''
490 d_pathconf=''
491 d_pause=''
492 d_pipe=''
493 d_poll=''
494 d_portable=''
495 d_procselfexe=''
496 procselfexe=''
497 d_old_pthread_create_joinable=''
498 old_pthread_create_joinable=''
499 d_pthread_atfork=''
500 d_pthread_yield=''
501 d_sched_yield=''
502 sched_yield=''
503 d_qgcvt=''
504 d_readdir=''
505 d_rewinddir=''
506 d_seekdir=''
507 d_telldir=''
508 d_readlink=''
509 d_readv=''
510 d_recvmsg=''
511 d_rename=''
512 d_rmdir=''
513 d_safebcpy=''
514 d_safemcpy=''
515 d_sanemcmp=''
516 d_sbrkproto=''
517 d_select=''
518 d_sem=''
519 d_semctl=''
520 d_semget=''
521 d_semop=''
522 d_sendmsg=''
523 d_setegid=''
524 d_seteuid=''
525 d_setgrent=''
526 d_setgrps=''
527 d_sethent=''
528 d_setitimer=''
529 d_setlinebuf=''
530 d_setlocale=''
531 d_setnent=''
532 d_setpent=''
533 d_setpgid=''
534 d_setpgrp2=''
535 d_bsdsetpgrp=''
536 d_setpgrp=''
537 d_setprior=''
538 d_setproctitle=''
539 d_setpwent=''
540 d_setregid=''
541 d_setresgid=''
542 d_setresuid=''
543 d_setreuid=''
544 d_setrgid=''
545 d_setruid=''
546 d_setsent=''
547 d_setsid=''
548 d_setvbuf=''
549 d_sfio=''
550 usesfio=''
551 d_shm=''
552 d_shmat=''
553 d_shmatprototype=''
554 shmattype=''
555 d_shmctl=''
556 d_shmdt=''
557 d_shmget=''
558 d_sigaction=''
559 d_sigprocmask=''
560 d_sigsetjmp=''
561 d_sockatmark=''
562 d_sockatmarkproto=''
563 d_msg_ctrunc=''
564 d_msg_dontroute=''
565 d_msg_oob=''
566 d_msg_peek=''
567 d_msg_proxy=''
568 d_oldsock=''
569 d_scm_rights=''
570 d_socket=''
571 d_sockpair=''
572 sockethdr=''
573 socketlib=''
574 d_socklen_t=''
575 d_socks5_init=''
576 d_sqrtl=''
577 d_sresgproto=''
578 d_sresuproto=''
579 d_statblks=''
580 d_statfs_f_flags=''
581 d_statfs_s=''
582 d_fstatvfs=''
583 d_statvfs=''
584 d_stdio_cnt_lval=''
585 d_stdio_ptr_lval=''
586 d_stdio_ptr_lval_nochange_cnt=''
587 d_stdio_ptr_lval_sets_cnt=''
588 d_stdiobase=''
589 d_stdstdio=''
590 stdio_base=''
591 stdio_bufsiz=''
592 stdio_cnt=''
593 stdio_filbuf=''
594 stdio_ptr=''
595 d_index=''
596 d_strchr=''
597 d_strcoll=''
598 d_strctcpy=''
599 d_strerrm=''
600 d_strerror=''
601 d_sysernlst=''
602 d_syserrlst=''
603 d_strftime=''
604 d_strtod=''
605 d_strtol=''
606 d_strtold=''
607 d_strtoll=''
608 d_strtoq=''
609 d_strtoul=''
610 d_strtoull=''
611 d_strtouq=''
612 d_strxfrm=''
613 d_symlink=''
614 d_syscall=''
615 d_syscallproto=''
616 d_sysconf=''
617 d_system=''
618 d_tcgetpgrp=''
619 d_tcsetpgrp=''
620 d_telldirproto=''
621 d_time=''
622 timetype=''
623 clocktype=''
624 d_times=''
625 d_truncate=''
626 d_tzname=''
627 d_u32align=''
628 d_ualarm=''
629 d_umask=''
630 d_semctl_semid_ds=''
631 d_semctl_semun=''
632 d_union_semun=''
633 d_unordered=''
634 d_usleep=''
635 d_usleepproto=''
636 d_ustat=''
637 d_vfork=''
638 usevfork=''
639 d_voidsig=''
640 signal_t=''
641 d_volatile=''
642 d_charvspr=''
643 d_vprintf=''
644 d_wait4=''
645 d_waitpid=''
646 d_wcstombs=''
647 d_wctomb=''
648 d_writev=''
649 dlext=''
650 cccdlflags=''
651 ccdlflags=''
652 dlsrc=''
653 ld=''
654 lddlflags=''
655 usedl=''
656 doublesize=''
657 ebcdic=''
658 fflushNULL=''
659 fflushall=''
660 fpossize=''
661 fpostype=''
662 gccosandvers=''
663 gccversion=''
664 gidformat=''
665 gidsign=''
666 gidsize=''
667 gidtype=''
668 groupstype=''
669 h_fcntl=''
670 h_sysfile=''
671 i_arpainet=''
672 db_hashtype=''
673 db_prefixtype=''
674 db_version_major=''
675 db_version_minor=''
676 db_version_patch=''
677 i_db=''
678 i_dbm=''
679 i_rpcsvcdbm=''
680 d_dirnamlen=''
681 direntrytype=''
682 i_dirent=''
683 i_dld=''
684 i_dlfcn=''
685 i_fcntl=''
686 i_float=''
687 i_fp=''
688 i_fp_class=''
689 i_gdbm=''
690 d_grpasswd=''
691 i_grp=''
692 i_ieeefp=''
693 i_inttypes=''
694 i_langinfo=''
695 i_libutil=''
696 i_limits=''
697 i_locale=''
698 i_machcthr=''
699 i_malloc=''
700 i_math=''
701 i_memory=''
702 i_mntent=''
703 i_ndbm=''
704 i_netdb=''
705 i_neterrno=''
706 i_netinettcp=''
707 i_niin=''
708 i_sysin=''
709 i_poll=''
710 i_prot=''
711 i_pthread=''
712 d_pwage=''
713 d_pwchange=''
714 d_pwclass=''
715 d_pwcomment=''
716 d_pwexpire=''
717 d_pwgecos=''
718 d_pwpasswd=''
719 d_pwquota=''
720 i_pwd=''
721 i_sfio=''
722 i_shadow=''
723 i_socks=''
724 i_stddef=''
725 i_stdlib=''
726 i_string=''
727 strings=''
728 i_sunmath=''
729 i_sysaccess=''
730 i_sysdir=''
731 i_sysfile=''
732 d_voidtty=''
733 i_bsdioctl=''
734 i_sysfilio=''
735 i_sysioctl=''
736 i_syssockio=''
737 i_syslog=''
738 i_sysmman=''
739 i_sysmode=''
740 i_sysmount=''
741 i_sysndir=''
742 i_sysparam=''
743 i_sysresrc=''
744 i_syssecrt=''
745 i_sysselct=''
746 i_sysstat=''
747 i_sysstatfs=''
748 i_sysstatvfs=''
749 i_systimes=''
750 i_systypes=''
751 i_sysuio=''
752 i_sysun=''
753 i_sysutsname=''
754 i_sysvfs=''
755 i_syswait=''
756 i_sgtty=''
757 i_termio=''
758 i_termios=''
759 d_tm_tm_gmtoff=''
760 d_tm_tm_zone=''
761 i_systime=''
762 i_systimek=''
763 i_time=''
764 timeincl=''
765 i_unistd=''
766 i_ustat=''
767 i_utime=''
768 i_values=''
769 i_stdarg=''
770 i_varargs=''
771 i_varhdr=''
772 i_vfork=''
773 inc_version_list=''
774 inc_version_list_init=''
775 installprefix=''
776 installprefixexp=''
777 installstyle=''
778 installusrbinperl=''
779 intsize=''
780 longsize=''
781 shortsize=''
782 issymlink=''
783 libc=''
784 ldlibpthname=''
785 libperl=''
786 shrpenv=''
787 useshrplib=''
788 glibpth=''
789 libpth=''
790 loclibpth=''
791 plibpth=''
792 xlibpth=''
793 ignore_versioned_solibs=''
794 libs=''
795 libsdirs=''
796 libsfiles=''
797 libsfound=''
798 libspath=''
799 lns=''
800 d_PRIEUldbl=''
801 d_PRIFUldbl=''
802 d_PRIGUldbl=''
803 d_PRIeldbl=''
804 d_PRIfldbl=''
805 d_PRIgldbl=''
806 d_SCNfldbl=''
807 sPRIEUldbl=''
808 sPRIFUldbl=''
809 sPRIGUldbl=''
810 sPRIeldbl=''
811 sPRIfldbl=''
812 sPRIgldbl=''
813 sSCNfldbl=''
814 lseeksize=''
815 lseektype=''
816 make_set_make=''
817 d_mymalloc=''
818 freetype=''
819 mallocobj=''
820 mallocsrc=''
821 malloctype=''
822 usemymalloc=''
823 installman1dir=''
824 man1dir=''
825 man1direxp=''
826 man1ext=''
827 installman3dir=''
828 man3dir=''
829 man3direxp=''
830 man3ext=''
831 modetype=''
832 multiarch=''
833 mydomain=''
834 myhostname=''
835 phostname=''
836 c=''
837 n=''
838 d_eofnblk=''
839 eagain=''
840 o_nonblock=''
841 rd_nodata=''
842 need_va_copy=''
843 netdb_hlen_type=''
844 netdb_host_type=''
845 netdb_name_type=''
846 netdb_net_type=''
847 groupcat=''
848 hostcat=''
849 passcat=''
850 orderlib=''
851 ranlib=''
852 d_perl_otherlibdirs=''
853 otherlibdirs=''
854 package=''
855 spackage=''
856 pager=''
857 api_revision=''
858 api_subversion=''
859 api_version=''
860 api_versionstring=''
861 patchlevel=''
862 perl_patchlevel=''
863 revision=''
864 subversion=''
865 version=''
866 version_patchlevel_string=''
867 perl5=''
868 perladmin=''
869 perlpath=''
870 d_nv_preserves_uv=''
871 d_nv_preserves_uv_bits=''
872 i16size=''
873 i16type=''
874 i32size=''
875 i32type=''
876 i64size=''
877 i64type=''
878 i8size=''
879 i8type=''
880 ivsize=''
881 ivtype=''
882 nvsize=''
883 nvtype=''
884 u16size=''
885 u16type=''
886 u32size=''
887 u32type=''
888 u64size=''
889 u64type=''
890 u8size=''
891 u8type=''
892 uvsize=''
893 uvtype=''
894 ivdformat=''
895 nvEUformat=''
896 nvFUformat=''
897 nvGUformat=''
898 nveformat=''
899 nvfformat=''
900 nvgformat=''
901 uvXUformat=''
902 uvoformat=''
903 uvuformat=''
904 uvxformat=''
905 pidtype=''
906 prefix=''
907 prefixexp=''
908 installprivlib=''
909 privlib=''
910 privlibexp=''
911 prototype=''
912 ptrsize=''
913 d_PRIXU64=''
914 d_PRId64=''
915 d_PRIi64=''
916 d_PRIo64=''
917 d_PRIu64=''
918 d_PRIx64=''
919 sPRIXU64=''
920 sPRId64=''
921 sPRIi64=''
922 sPRIo64=''
923 sPRIu64=''
924 sPRIx64=''
925 d_quad=''
926 quadkind=''
927 quadtype=''
928 uquadtype=''
929 drand01=''
930 randbits=''
931 randfunc=''
932 randseedtype=''
933 seedfunc=''
934 installscript=''
935 scriptdir=''
936 scriptdirexp=''
937 selectminbits=''
938 selecttype=''
939 sh=''
940 sig_count=''
941 sig_name=''
942 sig_name_init=''
943 sig_num=''
944 sig_num_init=''
945 sig_size=''
946 installsitearch=''
947 sitearch=''
948 sitearchexp=''
949 installsitebin=''
950 sitebin=''
951 sitebinexp=''
952 installsitelib=''
953 sitelib=''
954 sitelib_stem=''
955 sitelibexp=''
956 siteprefix=''
957 siteprefixexp=''
958 sizesize=''
959 sizetype=''
960 so=''
961 socksizetype=''
962 sharpbang=''
963 shsharp=''
964 spitshell=''
965 src=''
966 ssizetype=''
967 startperl=''
968 startsh=''
969 stdchar=''
970 d_stdio_stream_array=''
971 stdio_stream_array=''
972 sysman=''
973 trnl=''
974 uidformat=''
975 uidsign=''
976 uidsize=''
977 uidtype=''
978 archname64=''
979 use64bitall=''
980 use64bitint=''
981 ccflags_uselargefiles=''
982 ldflags_uselargefiles=''
983 libswanted_uselargefiles=''
984 uselargefiles=''
985 uselongdouble=''
986 usemorebits=''
987 usemultiplicity=''
988 nm_opt=''
989 nm_so_opt=''
990 runnm=''
991 usenm=''
992 useperlio=''
993 usesocks=''
994 d_oldpthreads=''
995 use5005threads=''
996 useithreads=''
997 usereentrant=''
998 usethreads=''
999 incpath=''
1000 mips_type=''
1001 usrinc=''
1002 d_vendorarch=''
1003 installvendorarch=''
1004 vendorarch=''
1005 vendorarchexp=''
1006 d_vendorbin=''
1007 installvendorbin=''
1008 vendorbin=''
1009 vendorbinexp=''
1010 d_vendorlib=''
1011 installvendorlib=''
1012 vendorlib=''
1013 vendorlib_stem=''
1014 vendorlibexp=''
1015 usevendorprefix=''
1016 vendorprefix=''
1017 vendorprefixexp=''
1018 versiononly=''
1019 defvoidused=''
1020 voidflags=''
1021 pm_apiversion=''
1022 xs_apiversion=''
1023 yacc=''
1024 yaccflags=''
1025 CONFIG=''
1026
1027 define='define'
1028 undef='undef'
1029 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
1030 rmlist=''
1031
1032 : We must find out about Eunice early
1033 eunicefix=':'
1034 if test -f /etc/unixtovms; then
1035         eunicefix=/etc/unixtovms
1036 fi
1037 if test -f /etc/unixtovms.exe; then
1038         eunicefix=/etc/unixtovms.exe
1039 fi
1040
1041 : Set executable suffix now -- needed before hints available
1042 if test -f "/libs/version.library"; then
1043 : Amiga OS
1044     _exe=""
1045 elif test -f "/system/gnu_library/bin/ar.pm"; then
1046 : Stratus VOS
1047     _exe=".pm"
1048 elif test -n "$DJGPP"; then
1049 : DOS DJGPP
1050     _exe=".exe"
1051 elif test -d c:/. ; then
1052 : OS/2 or cygwin
1053     _exe=".exe"
1054 fi
1055
1056 i_whoami=''
1057 ccname=''
1058 ccversion=''
1059 perllibs=''
1060 : set useposix=false in your hint file to disable the POSIX extension.
1061 useposix=true
1062 : set useopcode=false in your hint file to disable the Opcode extension.
1063 useopcode=true
1064 : Trailing extension.  Override this in a hint file, if needed.
1065 : Extra object files, if any, needed on this platform.
1066 archobjs=''
1067 archname=''
1068 : Possible local include directories to search.
1069 : Set locincpth to "" in a hint file to defeat local include searches.
1070 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
1071 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
1072 :
1073 : no include file wanted by default
1074 inclwanted=''
1075
1076 groupstype=''
1077 libnames=''
1078 : change the next line if compiling for Xenix/286 on Xenix/386
1079 xlibpth='/usr/lib/386 /lib/386'
1080 : Possible local library directories to search.
1081 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1082 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1083
1084 : general looking path for locating libraries
1085 glibpth="/lib /usr/lib $xlibpth"
1086 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1087 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1088 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1089
1090 : Private path used by Configure to find libraries.  Its value
1091 : is prepended to libpth. This variable takes care of special
1092 : machines, like the mips.  Usually, it should be empty.
1093 plibpth=''
1094
1095 : default library list
1096 libswanted=''
1097 : some systems want to use only the non-versioned libso:s
1098 ignore_versioned_solibs=''
1099 archname64=''
1100 ccflags_uselargefiles=''
1101 ldflags_uselargefiles=''
1102 libswanted_uselargefiles=''
1103 : set usemultiplicity on the Configure command line to enable multiplicity.
1104 : set usesocks on the Configure command line to enable socks.
1105 : set usethreads on the Configure command line to enable threads.
1106 usereentrant='undef'
1107 : full support for void wanted by default
1108 defvoidused=15
1109
1110 : List of libraries we want.
1111 : If anyone needs -lnet, put it in a hint file.
1112 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1113 libswanted="$libswanted dld ld sun m c cposix posix"
1114 libswanted="$libswanted ndir dir crypt sec"
1115 libswanted="$libswanted ucb bsd BSD PW x util"
1116 : We probably want to search /usr/shlib before most other libraries.
1117 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1118 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1119 glibpth="/usr/shlib $glibpth"
1120 : Do not use vfork unless overridden by a hint file.
1121 usevfork=false
1122
1123 : Find the basic shell for Bourne shell scripts
1124 case "$sh" in
1125 '')
1126         case "$SYSTYPE" in
1127         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1128         *) xxx='/bin/sh';;
1129         esac
1130         if test -f "$xxx"; then
1131                 sh="$xxx"
1132         else
1133                 : Build up a list and do a single loop so we can 'break' out.
1134                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1135                 for xxx in sh bash ksh pdksh ash; do
1136                         for p in $pth; do
1137                                 try="$try ${p}/${xxx}"
1138                         done
1139                 done
1140                 for xxx in $try; do
1141                         if test -f "$xxx"; then
1142                                 sh="$xxx";
1143                                 break
1144                         elif test "X$_exe" != X -a -f "$xxx$_exe"; then
1145                                 sh="$xxx";
1146                                 break
1147                         elif test -f "$xxx.exe"; then
1148                                 sh="$xxx";
1149                                 break
1150                         fi
1151                 done
1152         fi
1153         ;;
1154 esac
1155
1156 case "$sh" in
1157 '')     cat >&2 <<EOM
1158 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1159
1160 Usually it's in /bin/sh.  How did you even get this far?
1161 Please contact me (Perl Maintainers) at perlbug@perl.org and 
1162 we'll try to straighten this all out.
1163 EOM
1164         exit 1
1165         ;;
1166 esac
1167
1168 : see if sh knows # comments
1169 if `$sh -c '#' >/dev/null 2>&1`; then
1170         shsharp=true
1171         spitshell=cat
1172         xcat=/bin/cat
1173         test -f $xcat$_exe || xcat=/usr/bin/cat
1174         if test ! -f $xcat$_exe; then
1175                 for p in `echo $PATH | sed -e "s/$p_/ /g"` $paths; do
1176                         if test -f $p/cat$_exe; then
1177                                 xcat=$p/cat
1178                                 break
1179                         fi
1180                 done
1181                 if test ! -f $xcat$_exe; then
1182                         echo "Can't find cat anywhere!"
1183                         exit 1
1184                 fi
1185         fi
1186         echo "#!$xcat" >sharp
1187         $eunicefix sharp
1188         chmod +x sharp
1189         ./sharp > today
1190         if test -s today; then
1191                 sharpbang='#!'
1192         else
1193                 echo "#! $xcat" > sharp
1194                 $eunicefix sharp
1195                 chmod +x sharp
1196                 ./sharp > today
1197                 if test -s today; then
1198                         sharpbang='#! '
1199                 else
1200                         sharpbang=': use '
1201                 fi
1202         fi
1203 else
1204         echo " "
1205         echo "Your $sh doesn't grok # comments--I will strip them later on."
1206         shsharp=false
1207         cd ..
1208         echo "exec grep -v '^[  ]*#'" >spitshell
1209         chmod +x spitshell
1210         $eunicefix spitshell
1211         spitshell=`pwd`/spitshell
1212         cd UU
1213         echo "I presume that if # doesn't work, #! won't work either!"
1214         sharpbang=': use '
1215 fi
1216 rm -f sharp today
1217
1218 : figure out how to guarantee sh startup
1219 case "$startsh" in
1220 '') startsh=${sharpbang}${sh} ;;
1221 *)
1222 esac
1223 cat >sharp <<EOSS
1224 $startsh
1225 set abc
1226 test "$?abc" != 1
1227 EOSS
1228
1229 chmod +x sharp
1230 $eunicefix sharp
1231 if ./sharp; then
1232         : echo "Yup, it does."
1233 else
1234         echo "Hmm... '$startsh' does not guarantee sh startup..."
1235         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1236 fi
1237 rm -f sharp
1238
1239
1240 : Save command line options in file UU/cmdline.opt for later use in
1241 : generating config.sh.
1242 cat > cmdline.opt <<EOSH
1243 # Configure command line arguments.
1244 config_arg0='$0'
1245 config_args='$*'
1246 config_argc=$#
1247 EOSH
1248 argn=1
1249 args_exp=''
1250 args_sep=''
1251 for arg in "$@"; do
1252         cat >>cmdline.opt <<EOSH
1253 config_arg$argn='$arg'
1254 EOSH
1255         # Extreme backslashitis: replace each ' by '"'"'
1256         cat <<EOC | sed -e "s/'/'"'"'"'"'"'"'/g" > cmdl.opt
1257 $arg
1258 EOC
1259         arg_exp=`cat cmdl.opt`
1260         args_exp="$args_exp$args_sep'$arg_exp'"
1261         argn=`expr $argn + 1`
1262         args_sep=' '
1263 done
1264 # args_exp is good for restarting self: eval "set X $args_exp"; shift; $0 "$@"
1265 # used by ./hints/os2.sh
1266 rm -f cmdl.opt
1267
1268 : produce awk script to parse command line options
1269 cat >options.awk <<'EOF'
1270 BEGIN {
1271         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1272
1273         len = length(optstr);
1274         for (i = 1; i <= len; i++) {
1275                 c = substr(optstr, i, 1);
1276                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1277                 if (a == ":") {
1278                         arg[c] = 1;
1279                         i++;
1280                 }
1281                 opt[c] = 1;
1282         }
1283 }
1284 {
1285         expect = 0;
1286         str = $0;
1287         if (substr(str, 1, 1) != "-") {
1288                 printf("'%s'\n", str);
1289                 next;
1290         }
1291         len = length($0);
1292         for (i = 2; i <= len; i++) {
1293                 c = substr(str, i, 1);
1294                 if (!opt[c]) {
1295                         printf("-%s\n", substr(str, i));
1296                         next;
1297                 }
1298                 printf("-%s\n", c);
1299                 if (arg[c]) {
1300                         if (i < len)
1301                                 printf("'%s'\n", substr(str, i + 1));
1302                         else
1303                                 expect = 1;
1304                         next;
1305                 }
1306         }
1307 }
1308 END {
1309         if (expect)
1310                 print "?";
1311 }
1312 EOF
1313
1314 : process the command line options
1315 set X `for arg in "$@"; do echo "X$arg"; done |
1316         sed -e s/X// | awk -f options.awk`
1317 eval "set $*"
1318 shift
1319 rm -f options.awk
1320
1321 : set up default values
1322 fastread=''
1323 reuseval=false
1324 config_sh=''
1325 alldone=''
1326 error=''
1327 silent=''
1328 extractsh=''
1329 override=''
1330 knowitall=''
1331 rm -f optdef.sh posthint.sh
1332 cat >optdef.sh <<EOS
1333 $startsh
1334 EOS
1335
1336
1337 : option parsing
1338 while test $# -gt 0; do
1339         case "$1" in
1340         -d) shift; fastread=yes;;
1341         -e) shift; alldone=cont;;
1342         -f)
1343                 shift
1344                 cd ..
1345                 if test -r "$1"; then
1346                         config_sh="$1"
1347                 else
1348                         echo "$me: cannot read config file $1." >&2
1349                         error=true
1350                 fi
1351                 cd UU
1352                 shift;;
1353         -h) shift; error=true;;
1354         -r) shift; reuseval=true;;
1355         -s) shift; silent=true; realsilent=true;;
1356         -E) shift; alldone=exit;;
1357         -K) shift; knowitall=true;;
1358         -O) shift; override=true;;
1359         -S) shift; silent=true; extractsh=true;;
1360         -D)
1361                 shift
1362                 case "$1" in
1363                 *=)
1364                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1365                         echo "$me: ignoring -D $1" >&2
1366                         ;;
1367                 *=*) echo "$1" | \
1368                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1369                 *) echo "$1='define'" >> optdef.sh;;
1370                 esac
1371                 shift
1372                 ;;
1373         -U)
1374                 shift
1375                 case "$1" in
1376                 *=) echo "$1" >> optdef.sh;;
1377                 *=*)
1378                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1379                         echo "$me: ignoring -U $1" >&2
1380                         ;;
1381                 *) echo "$1='undef'" >> optdef.sh;;
1382                 esac
1383                 shift
1384                 ;;
1385         -A)
1386             shift
1387             xxx=''
1388             yyy="$1"
1389             zzz=''
1390             uuu=undef
1391             case "$yyy" in
1392             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1393                  case "$zzz" in
1394                  *:*) zzz='' ;;
1395                  *)   xxx=append
1396                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1397                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1398                  esac
1399                  ;;
1400             esac
1401             case "$xxx" in
1402             '')  case "$yyy" in
1403                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1404                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1405                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1406                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1407                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1408                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1409                  esac
1410                  ;;       
1411             esac
1412             case "$xxx" in
1413             append)
1414                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1415             clear)
1416                 echo "$yyy=''"                  >> posthint.sh ;;
1417             define)
1418                 case "$zzz" in
1419                 '') zzz=define ;;
1420                 esac
1421                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1422             eval)
1423                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1424             prepend)
1425                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1426             undef)
1427                 case "$zzz" in
1428                 '') zzz="$uuu" ;;
1429                 esac
1430                 echo "$yyy=$zzz"                >> posthint.sh ;;
1431             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1432             esac
1433             shift
1434             ;;
1435         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1436             exit 0;;
1437         --) break;;
1438         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1439         *) break;;
1440         esac
1441 done
1442
1443 case "$error" in
1444 true)
1445         cat >&2 <<EOM
1446 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1447                  [-U symbol] [-U symbol=] [-A command:symbol...]
1448   -d : use defaults for all answers.
1449   -e : go on without questioning past the production of config.sh.
1450   -f : specify an alternate default configuration file.
1451   -h : print this help message and exit (with an error status).
1452   -r : reuse C symbols value if possible (skips costly nm extraction).
1453   -s : silent mode, only echoes questions and essential information.
1454   -D : define symbol to have some value:
1455          -D symbol         symbol gets the value 'define'
1456          -D symbol=value   symbol gets the value 'value'
1457   -E : stop at the end of questions, after having produced config.sh.
1458   -K : do not use unless you know what you are doing.
1459   -O : let -D and -U override definitions from loaded configuration file.
1460   -S : perform variable substitutions on all .SH files (can mix with -f)
1461   -U : undefine symbol:
1462          -U symbol    symbol gets the value 'undef'
1463          -U symbol=   symbol gets completely empty
1464   -A : manipulate symbol after the platform specific hints have been applied:
1465          -A symbol=value                append " "value to symbol
1466          -A append:symbol=value         append value to symbol
1467          -A define:symbol=value         define symbol to have value
1468          -A clear:symbol                define symbol to be ''
1469          -A define:symbol               define symbol to be 'define'
1470          -A eval:symbol=value           define symbol to be eval of value
1471          -A prepend:symbol=value        prepend value to symbol
1472          -A undef:symbol                define symbol to be 'undef'
1473          -A undef:symbol=               define symbol to be ''
1474   -V : print version number and exit (with a zero status).
1475 EOM
1476         exit 1
1477         ;;
1478 esac
1479
1480 : Sanity checks
1481 case "$fastread$alldone" in
1482 yescont|yesexit) ;;
1483 *)
1484         case "$extractsh" in
1485         true) ;;
1486         *)
1487                 if test ! -t 0; then
1488                         echo "Say 'sh Configure', not 'sh <Configure'"
1489                         exit 1
1490                 fi
1491                 ;;
1492         esac
1493         ;;
1494 esac
1495
1496 exec 4>&1
1497 case "$silent" in
1498 true) exec 1>/dev/null;;
1499 esac
1500
1501 : run the defines and the undefines, if any, but leave the file out there...
1502 touch optdef.sh
1503 . ./optdef.sh
1504 : create the posthint manipulation script and leave the file out there...
1505 touch posthint.sh
1506
1507 : set package name
1508 package=perl5
1509 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1510 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1511 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1512 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1513 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1514 esac
1515
1516 : Some greps do not return status, grrr.
1517 echo "grimblepritz" >grimble
1518 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1519         contains=contains
1520 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1521         contains=grep
1522 else
1523         contains=contains
1524 fi
1525 rm -f grimble
1526 : the following should work in any shell
1527 case "$contains" in
1528 contains*)
1529         echo " "
1530         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1531         cat >contains <<'EOSS'
1532 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1533 EOSS
1534 chmod +x contains
1535 esac
1536
1537 : Find the path to the source tree
1538 case "$src" in
1539 '') case "$0" in
1540     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1541          case "$src" in
1542          /*)    ;;
1543          .)     ;;
1544          *)     src=`cd ../$src && pwd` ;;
1545          esac
1546          ;;
1547     *)   src='.';;
1548     esac;;
1549 esac
1550 case "$src" in
1551 '')     src=/
1552         rsrc=/
1553         ;;
1554 /*) rsrc="$src";;
1555 *) rsrc="../$src";;
1556 esac
1557 if test -f $rsrc/Configure && \
1558         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1559 then
1560    : found it, so we are ok.
1561 else
1562         rsrc=''
1563         for src in . .. ../.. ../../.. ../../../..; do
1564                 if test -f ../$src/Configure && \
1565                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1566                 then
1567                         rsrc=../$src
1568                         break
1569                 fi
1570         done
1571 fi
1572 case "$rsrc" in
1573 '')
1574         cat <<EOM >&4
1575
1576 Sorry, I can't seem to locate the source dir for $package.  Please start
1577 Configure with an explicit path -- i.e. /some/path/Configure.
1578
1579 EOM
1580         exit 1
1581         ;;
1582 ../.)   rsrc='..';;
1583 *)
1584         echo " "
1585         echo "Sources for $package found in \"$src\"." >&4
1586         ;;
1587 esac
1588
1589 : script used to extract .SH files with variable substitutions
1590 cat >extract <<'EOS'
1591 PERL_CONFIG_SH=true
1592 echo "Doing variable substitutions on .SH files..."
1593 if test -f MANIFEST; then
1594         set x `awk '{print $1}' < MANIFEST | grep '\.SH$'`
1595 else
1596         echo "(Looking for .SH files under the source directory.)"
1597         set x `(cd "$src"; find . -name "*.SH" -print)`
1598 fi
1599 shift
1600 case $# in
1601 0) set x `(cd "$src"; echo *.SH)`; shift;;
1602 esac
1603 if test ! -f "$src/$1"; then
1604         shift
1605 fi
1606 mkdir_p='
1607 name=$1;
1608 create="";
1609 while test $name; do
1610         if test ! -d "$name"; then
1611                 create="$name $create";
1612                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1613                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1614         else
1615                 name="";
1616         fi;
1617 done;
1618 for file in $create; do
1619         mkdir $file;
1620 done
1621 '
1622 for file in $*; do
1623         case "$src" in
1624         ".")
1625                 case "$file" in
1626                 */*)
1627                         dir=`expr X$file : 'X\(.*\)/'`
1628                         file=`expr X$file : 'X.*/\(.*\)'`
1629                         (cd "$dir" && . ./$file)
1630                         ;;
1631                 *)
1632                         . ./$file
1633                         ;;
1634                 esac
1635                 ;;
1636         *)
1637                 case "$file" in
1638                 */*)
1639                         dir=`expr X$file : 'X\(.*\)/'`
1640                         file=`expr X$file : 'X.*/\(.*\)'`
1641                         (set x $dir; shift; eval $mkdir_p)
1642                         sh <"$src/$dir/$file"
1643                         ;;
1644                 *)
1645                         sh <"$src/$file"
1646                         ;;
1647                 esac
1648                 ;;
1649         esac
1650 done
1651 if test -f "$src/config_h.SH"; then
1652         if test ! -f config.h; then
1653         : oops, they left it out of MANIFEST, probably, so do it anyway.
1654         . "$src/config_h.SH"
1655         fi
1656 fi
1657 EOS
1658
1659 : extract files and exit if asked to do so
1660 case "$extractsh" in
1661 true)
1662         case "$realsilent" in
1663         true) ;;
1664         *) exec 1>&4;;
1665         esac
1666         case "$config_sh" in
1667         '') config_sh='config.sh';;
1668         esac
1669         echo " "
1670         echo "Fetching answers from $config_sh..."
1671         cd ..
1672         . $config_sh
1673         test "$override" && . ./optdef.sh
1674         echo " "
1675         . UU/extract
1676         rm -rf UU
1677         echo "Extraction done."
1678         exit 0
1679         ;;
1680 esac
1681
1682 : Eunice requires " " instead of "", can you believe it
1683 echo " "
1684 : Here we go...
1685 echo "Beginning of configuration questions for $package."
1686
1687 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1688
1689 : first determine how to suppress newline on echo command
1690 echo " "
1691 echo "Checking echo to see how to suppress newlines..."
1692 (echo "hi there\c" ; echo " ") >.echotmp
1693 if $contains c .echotmp >/dev/null 2>&1 ; then
1694         echo "...using -n."
1695         n='-n'
1696         c=''
1697 else
1698         cat <<'EOM'
1699 ...using \c
1700 EOM
1701         n=''
1702         c='\c'
1703 fi
1704 echo $n "The star should be here-->$c"
1705 echo '*'
1706 rm -f .echotmp
1707
1708 : Now test for existence of everything in MANIFEST
1709 echo " "
1710 if test -f "$rsrc/MANIFEST"; then
1711         echo "First let's make sure your kit is complete.  Checking..." >&4
1712         awk '$1 !~ /PACK[A-Z]+/ {print $1}' "$rsrc/MANIFEST" | (split -l 50 2>/dev/null || split -50)
1713         rm -f missing
1714         tmppwd=`pwd`
1715         for filelist in x??; do
1716                 (cd "$rsrc"; ls `cat "$tmppwd/$filelist"` >/dev/null 2>>"$tmppwd/missing")
1717         done
1718         if test -s missing; then
1719                 cat missing >&4
1720                 cat >&4 <<'EOM'
1721
1722 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1723
1724 You have the option of continuing the configuration process, despite the
1725 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1726 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1727 and contact the author (perlbug@perl.org).
1728
1729 EOM
1730                 echo $n "Continue? [n] $c" >&4
1731                 read ans
1732                 case "$ans" in
1733                 y*)
1734                         echo "Continuing..." >&4
1735                         rm -f missing
1736                         ;;
1737                 *)
1738                         echo "ABORTING..." >&4
1739                         kill $$
1740                         ;;
1741                 esac
1742         else
1743                 echo "Looks good..."
1744         fi
1745 else
1746         echo "There is no MANIFEST file.  I hope your kit is complete !"
1747 fi
1748 rm -f missing x??
1749
1750 echo " "
1751 : Find the appropriate value for a newline for tr
1752 if test -n "$DJGPP"; then
1753        trnl='\012'
1754 fi
1755 if test X"$trnl" = X; then
1756         case "`echo foo|tr '\n' x 2>/dev/null`" in
1757         foox) trnl='\n' ;;
1758         esac
1759 fi
1760 if test X"$trnl" = X; then
1761         case "`echo foo|tr '\012' x 2>/dev/null`" in
1762         foox) trnl='\012' ;;
1763         esac
1764 fi
1765 if test X"$trnl" = X; then
1766         cat <<EOM >&2
1767
1768 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1769
1770 EOM
1771         exit 1
1772 fi
1773
1774 : compute the number of columns on the terminal for proper question formatting
1775 case "$COLUMNS" in
1776 '') COLUMNS='80';;
1777 esac
1778
1779 : set up the echo used in my read
1780 myecho="case \"\$xxxm\" in
1781 '') echo $n \"\$rp $c\" >&4;;
1782 *) case \"\$rp\" in
1783         '') echo $n \"[\$xxxm] $c\";;
1784         *)
1785                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1786                         echo \"\$rp\" >&4
1787                         echo $n \"[\$xxxm] $c\" >&4
1788                 else
1789                         echo $n \"\$rp [\$xxxm] $c\" >&4
1790                 fi
1791                 ;;
1792         esac;;
1793 esac"
1794
1795 : now set up to do reads with possible shell escape and default assignment
1796 cat <<EOSC >myread
1797 $startsh
1798 xxxm=\$dflt
1799 $myecho
1800 ans='!'
1801 case "\$fastread" in
1802 yes) case "\$dflt" in
1803         '') ;;
1804         *) ans='';
1805                 case "\$silent-\$rp" in
1806                 true-) ;;
1807                 *) echo " " >&4;;
1808                 esac;;
1809         esac;;
1810 *) case "\$silent" in
1811         true) case "\$rp" in
1812                 '') ans='';;
1813                 esac;;
1814         esac;;
1815 esac
1816 while expr "X\$ans" : "X!" >/dev/null; do
1817         read answ
1818         set x \$xxxm
1819         shift
1820         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1821         case  "\$answ" in
1822         "!")
1823                 sh 1>&4
1824                 echo " "
1825                 $myecho
1826                 ;;
1827         !*)
1828                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1829                 shift
1830                 sh 1>&4 -c "\$*"
1831                 echo " "
1832                 $myecho
1833                 ;;
1834         "\$ans")
1835                 case "\$ans" in
1836                 \\&*)
1837                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1838                         shift
1839                         case "\$1" in
1840                         -d)
1841                                 fastread=yes
1842                                 echo "(OK, I'll run with -d after this question.)" >&4
1843                                 ;;
1844                         -*)
1845                                 echo "*** Sorry, \$1 not supported yet." >&4
1846                                 ;;
1847                         esac
1848                         $myecho
1849                         ans=!
1850                         ;;
1851                 esac;;
1852         *)
1853                 case "\$aok" in
1854                 y)
1855                         echo "*** Substitution done -- please confirm."
1856                         xxxm="\$ans"
1857                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1858                         xxxm="\$ans"
1859                         ans=!
1860                         ;;
1861                 *)
1862                         echo "*** Error -- try again."
1863                         ans=!
1864                         ;;
1865                 esac
1866                 $myecho
1867                 ;;
1868         esac
1869         case "\$ans\$xxxm\$nostick" in
1870         '')
1871                 ans=!
1872                 $myecho
1873                 ;;
1874         esac
1875 done
1876 case "\$ans" in
1877 '') ans="\$xxxm";;
1878 esac
1879 EOSC
1880
1881 : create .config dir to save info across Configure sessions
1882 test -d ../.config || mkdir ../.config
1883 cat >../.config/README <<EOF
1884 This directory created by Configure to save information that should
1885 persist across sessions for $package.
1886
1887 You may safely delete it if you wish.
1888 EOF
1889
1890 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
1891 case "$usedevel" in
1892 $define|true|[yY]*) ;;
1893 *) case "$xversion" in
1894    *[13579])
1895         cat >&4 <<EOH
1896 *** WHOA THERE!!! ***
1897
1898     This is an UNSTABLE DEVELOPMENT release.
1899     The version of this $package distribution is $xversion, that is, odd,
1900     (as opposed to even) and that signifies a development release.
1901     If you want a maintenance release, you want an even-numbered version.
1902
1903     Do ***NOT*** install this into production use.
1904     Data corruption and crashes are possible.
1905
1906     It is most seriously suggested that you do not continue any further
1907     unless you want to help in developing and debugging Perl.
1908
1909     If you *still* want to build perl, you can answer 'y' now,
1910     or pass -Dusedevel to Configure.
1911
1912 EOH
1913         rp='Do you really want to continue?'
1914         dflt='n'
1915         . ./myread
1916         case "$ans" in
1917         [yY]) echo >&4 "Okay, continuing."
1918               usedevel="$define" ;;
1919         *) echo >&4 "Okay, bye."
1920            exit 1
1921            ;;
1922         esac
1923         ;;
1924     esac
1925     ;;
1926 esac
1927 case "$usedevel" in
1928 $define|true|[yY]*)
1929         case "$versiononly" in
1930         '') versiononly="$define" ;;
1931         esac
1932         case "$installusrbinperl" in
1933         '') installusrbinperl="$undef" ;;
1934         esac
1935         ;;
1936 esac
1937
1938 : general instructions
1939 needman=true
1940 firsttime=true
1941 user=`(logname) 2>/dev/null`
1942 case "$user" in
1943 '') user=`whoami 2>&1`;;
1944 esac
1945 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1946         firsttime=false
1947         echo " "
1948         rp='Would you like to see the instructions?'
1949         dflt=n
1950         . ./myread
1951         case "$ans" in
1952         [yY]*) ;;
1953         *) needman=false;;
1954         esac
1955 fi
1956 if $needman; then
1957         cat <<EOH
1958
1959 This installation shell script will examine your system and ask you questions
1960 to determine how the perl5 package should be installed. If you get
1961 stuck on a question, you may use a ! shell escape to start a subshell or
1962 execute a command.  Many of the questions will have default answers in square
1963 brackets; typing carriage return will give you the default.
1964
1965 On some of the questions which ask for file or directory names you are allowed
1966 to use the ~name construct to specify the login directory belonging to "name",
1967 even if you don't have a shell which knows about that.  Questions where this is
1968 allowed will be marked "(~name ok)".
1969
1970 EOH
1971         rp=''
1972         dflt='Type carriage return to continue'
1973         . ./myread
1974         cat <<'EOH'
1975
1976 The prompter used in this script allows you to use shell variables and
1977 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1978 in the default answer, as if the default line was a set of arguments given to a
1979 script shell.  This means you may also use $* to repeat the whole default line,
1980 so you do not have to re-type everything to add something to the default.
1981
1982 Everytime there is a substitution, you will have to confirm.  If there is an
1983 error (e.g. an unmatched backtick), the default answer will remain unchanged
1984 and you will be prompted again.
1985
1986 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1987 the questions and use the computed defaults (or the previous answers if there
1988 was already a config.sh file). Type 'Configure -h' for a list of options.
1989 You may also start interactively and then answer '& -d' at any prompt to turn
1990 on the non-interactive behaviour for the remainder of the execution.
1991
1992 EOH
1993         . ./myread
1994         cat <<EOH
1995
1996 Much effort has been expended to ensure that this shell script will run on any
1997 Unix system.  If despite that it blows up on yours, your best bet is to edit
1998 Configure and run it again.  If you can't run Configure for some reason,
1999 you'll have to generate a config.sh file by hand.  Whatever problems you
2000 have, let me (perlbug@perl.org) know how I blew it.
2001
2002 This installation script affects things in two ways:
2003
2004 1) it may do direct variable substitutions on some of the files included
2005    in this kit.
2006 2) it builds a config.h file for inclusion in C programs.  You may edit
2007    any of these files as the need arises after running this script.
2008
2009 If you make a mistake on a question, there is no easy way to back up to it
2010 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
2011 files.  Configure will offer to let you do this before it runs the SH files.
2012
2013 EOH
2014         dflt='Type carriage return to continue'
2015         . ./myread
2016         case "$firsttime" in
2017         true) echo $user >>../.config/instruct;;
2018         esac
2019 fi
2020
2021 : find out where common programs are
2022 echo " "
2023 echo "Locating common programs..." >&4
2024 cat <<EOSC >loc
2025 $startsh
2026 case \$# in
2027 0) exit 1;;
2028 esac
2029 thing=\$1
2030 shift
2031 dflt=\$1
2032 shift
2033 for dir in \$*; do
2034         case "\$thing" in
2035         .)
2036         if test -d \$dir/\$thing; then
2037                 echo \$dir
2038                 exit 0
2039         fi
2040         ;;
2041         *)
2042         for thisthing in \$dir/\$thing; do
2043                 : just loop through to pick last item
2044         done
2045         if test -f \$thisthing; then
2046                 echo \$thisthing
2047                 exit 0
2048         elif test "X$_exe" != X -a -f \$thisthing$_exe; then
2049                 echo \$thisthing
2050                 exit 0
2051         elif test -f \$dir/\$thing.exe; then
2052                 if test -n "$DJGPP"; then
2053                         echo \$dir/\$thing.exe
2054                 else
2055                         : on Eunice apparently
2056                         echo \$dir/\$thing
2057                 fi
2058                 exit 0
2059         fi
2060         ;;
2061         esac
2062 done
2063 echo \$dflt
2064 exit 1
2065 EOSC
2066 chmod +x loc
2067 $eunicefix loc
2068 loclist="
2069 awk
2070 cat
2071 chmod
2072 comm
2073 cp
2074 echo
2075 expr
2076 grep
2077 ls
2078 mkdir
2079 rm
2080 sed
2081 sort
2082 touch
2083 tr
2084 uniq
2085 "
2086 trylist="
2087 Mcc
2088 ar
2089 bison
2090 byacc
2091 cpp
2092 csh
2093 date
2094 egrep
2095 gmake
2096 gzip
2097 less
2098 ln
2099 make
2100 more
2101 nm
2102 nroff
2103 pg
2104 test
2105 uname
2106 zip
2107 "
2108 pth=`echo $PATH | sed -e "s/$p_/ /g"`
2109 pth="$pth /lib /usr/lib"
2110 for file in $loclist; do
2111         eval xxx=\$$file
2112         case "$xxx" in
2113         /*|?:[\\/]*)
2114                 if test -f "$xxx"; then
2115                         : ok
2116                 else
2117                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2118                         xxx=`./loc $file $file $pth`
2119                 fi
2120                 ;;
2121         '') xxx=`./loc $file $file $pth`;;
2122         *) xxx=`./loc $xxx $xxx $pth`;;
2123         esac
2124         eval $file=$xxx$_exe
2125         eval _$file=$xxx
2126         case "$xxx" in
2127         /*)
2128                 echo $file is in $xxx.
2129                 ;;
2130         ?:[\\/]*)
2131                 echo $file is in $xxx.
2132                 ;;
2133         *)
2134                 echo "I don't know where '$file' is, and my life depends on it." >&4
2135                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2136                 exit 1
2137                 ;;
2138         esac
2139 done
2140 echo " "
2141 echo "Don't worry if any of the following aren't found..."
2142 say=offhand
2143 for file in $trylist; do
2144         eval xxx=\$$file
2145         case "$xxx" in
2146         /*|?:[\\/]*)
2147                 if test -f "$xxx"; then
2148                         : ok
2149                 else
2150                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2151                         xxx=`./loc $file $file $pth`
2152                 fi
2153                 ;;
2154         '') xxx=`./loc $file $file $pth`;;
2155         *) xxx=`./loc $xxx $xxx $pth`;;
2156         esac
2157         eval $file=$xxx$_exe
2158         eval _$file=$xxx
2159         case "$xxx" in
2160         /*)
2161                 echo $file is in $xxx.
2162                 ;;
2163         ?:[\\/]*)
2164                 echo $file is in $xxx.
2165                 ;;
2166         *)
2167                 echo "I don't see $file out there, $say."
2168                 say=either
2169                 ;;
2170         esac
2171 done
2172 case "$egrep" in
2173 egrep)
2174         echo "Substituting grep for egrep."
2175         egrep=$grep
2176         _egrep=$grep
2177         ;;
2178 esac
2179 case "$ln" in
2180 ln)
2181         echo "Substituting cp for ln."
2182         ln=$cp
2183         _ln=$cp
2184         ;;
2185 esac
2186 case "$make" in
2187 make)   
2188         case "$gmake" in
2189         gmake)
2190         echo "I can't find make or gmake, and my life depends on it." >&4
2191         echo "Go find a public domain implementation or fix your PATH setting!" >&4
2192         exit 1
2193         ;;
2194         esac
2195         ;;
2196 esac    
2197 case "$gmake" in
2198 gmake)  ;;
2199 *)      # We can't have osname yet.
2200         if test -f "/system/gnu_library/bin/ar.pm"; then # Stratus VOS
2201                 # Assume that gmake, if found, is definitely GNU make
2202                 # and prefer it over the system make.
2203                 echo "Substituting gmake for make."
2204                 make=$gmake
2205                 _make=$gmake
2206         fi
2207         ;;
2208 esac
2209 case "$test" in
2210 test)
2211         echo "Hopefully test is built into your sh."
2212         ;;
2213 *)
2214         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2215                 echo "Using the test built into your sh."
2216                 test=test
2217                 _test=test
2218         fi
2219         ;;
2220 esac
2221 case "$echo" in
2222 echo)
2223         echo "Hopefully echo is built into your sh."
2224         ;;
2225 '') ;;
2226 *)
2227         echo " "
2228 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2229         $echo $n "hi there$c" >foo1
2230         echo $n "hi there$c" >foo2
2231         if cmp foo1 foo2 >/dev/null 2>&1; then
2232                 echo "They are compatible.  In fact, they may be identical."
2233         else
2234                 case "$n" in
2235                 '-n') n='' c='\c';;
2236                 *) n='-n' c='';;
2237                 esac
2238                 cat <<FOO
2239 They are not compatible!  You are probably running ksh on a non-USG system.
2240 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2241 have echo built in and we may have to run some Bourne shell scripts.  That
2242 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2243
2244 FOO
2245                 $echo $n "The star should be here-->$c"
2246                 $echo "*"
2247         fi
2248         $rm -f foo1 foo2
2249         ;;
2250 esac
2251
2252 cat <<EOS >trygcc
2253 $startsh
2254 EOS
2255 cat <<'EOSC' >>trygcc
2256 case "$cc" in
2257 '') ;;
2258 *)  $rm -f try try.*
2259     $cat >try.c <<EOM
2260 int main(int argc, char *argv[]) {
2261   return 0;
2262 }
2263 EOM
2264     if $cc -o try $ccflags $ldflags try.c; then
2265        :
2266     else
2267         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2268         despair=yes
2269         trygcc=yes
2270         case "$cc" in
2271         *gcc*) trygcc=no ;;
2272         esac
2273         case "`$cc -v -c try.c 2>&1`" in
2274         *gcc*) trygcc=no ;;
2275         esac
2276         if $test X"$trygcc" = Xyes; then
2277             if gcc -o try -c try.c; then
2278                 echo " "
2279                 echo "You seem to have a working gcc, though." >&4
2280                 rp="Would you like to use it?"
2281                 dflt=y
2282                 if $test -f myread; then
2283                     . ./myread
2284                 else
2285                     if $test -f UU/myread; then
2286                         . ./UU/myread
2287                     else
2288                         echo "Cannot find myread, sorry.  Aborting." >&2
2289                         exit 1
2290                     fi
2291                 fi  
2292                 case "$ans" in
2293                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2294                 esac
2295             fi
2296         fi
2297     fi
2298     $rm -f try try.*
2299     ;;
2300 esac
2301 EOSC
2302
2303 cat <<EOS >checkcc
2304 $startsh
2305 EOS
2306 cat <<'EOSC' >>checkcc
2307 case "$cc" in        
2308 '') ;;
2309 *)  $rm -f try try.*              
2310     $cat >try.c <<EOM
2311 int main(int argc, char *argv[]) {
2312   return 0;
2313 }
2314 EOM
2315     if $cc -o try $ccflags $ldflags try.c; then
2316        :
2317     else
2318         if $test X"$despair" = Xyes; then
2319            echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2320         fi
2321         $cat >&4 <<EOM         
2322 You need to find a working C compiler.
2323 Either (purchase and) install the C compiler supplied by your OS vendor,
2324 or for a free C compiler try http://gcc.gnu.org/
2325 I cannot continue any further, aborting.
2326 EOM
2327         exit 1
2328     fi
2329     $rm -f try try.*
2330     ;;
2331 esac
2332 EOSC
2333
2334 : determine whether symbolic links are supported
2335 echo " "
2336 $touch blurfl
2337 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2338         echo "Symbolic links are supported." >&4
2339         lns="$ln -s"
2340 else
2341         echo "Symbolic links are NOT supported." >&4
2342         lns="$ln"
2343 fi
2344 $rm -f blurfl sym
2345
2346 : determine whether symbolic links are supported
2347 echo " "
2348 case "$lns" in
2349 *"ln"*" -s")
2350         echo "Checking how to test for symbolic links..." >&4
2351         $lns blurfl sym
2352         if $test "X$issymlink" = X; then
2353                 case "$newsh" in
2354                 '') sh     -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2355                 *)  $newsh -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2356                 esac
2357                 if test $? = 0; then
2358                         issymlink="test -h"
2359                 else
2360                         echo "Your builtin 'test -h' may be broken." >&4
2361                         case "$test" in
2362                         /*)     ;;
2363                         *)      pth=`echo $PATH | sed -e "s/$p_/ /g"`
2364                                 for p in $pth
2365                                 do
2366                                         if test -f "$p/$test"; then
2367                                                 test="$p/$test"
2368                                                 break
2369                                         fi
2370                                 done
2371                                 ;;
2372                         esac
2373                         case "$test" in
2374                         /*)
2375                                 echo "Trying external '$test -h'." >&4
2376                                 issymlink="$test -h"
2377                                 if $test ! -h sym >/dev/null 2>&1; then
2378                                         echo "External '$test -h' is broken, too." >&4
2379                                         issymlink=''
2380                                 fi
2381                                 ;;
2382                         *)      issymlink='' ;;
2383                         esac
2384                 fi              
2385         fi
2386         if $test "X$issymlink" = X; then
2387                 if $test -L sym 2>/dev/null; then
2388                         issymlink="$test -L"
2389                         echo "The builtin '$test -L' worked." >&4
2390                 fi
2391         fi
2392         if $test "X$issymlink" != X; then
2393                 echo "You can test for symbolic links with '$issymlink'." >&4
2394         else
2395                 echo "I do not know how you can test for symbolic links." >&4
2396         fi
2397         $rm -f blurfl sym
2398         ;;
2399 *)      echo "No symbolic links, so not testing for their testing..." >&4
2400         ;;
2401 esac
2402 echo " "
2403
2404
2405 case "$mksymlinks" in
2406 $define|true|[yY]*)
2407         case "$src" in
2408         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2409                 exit 1
2410                 ;;
2411         *)      case "$lns:$issymlink" in
2412                 *"ln"*" -s:"*"test -"?)
2413                         echo "Creating the symbolic links..." >&4
2414                         echo "(First creating the subdirectories...)" >&4
2415                         cd ..
2416                         awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | sort -u | while true; do
2417                                 read directory
2418                                 test -z "$directory" && break
2419                                 mkdir -p $directory
2420                         done
2421                         # Sanity check 1.
2422                         if test ! -d t/base; then
2423                                 echo "Failed to create the subdirectories.  Aborting." >&4
2424                                 exit 1
2425                         fi
2426                         echo "(Then creating the symlinks...)" >&4
2427                         awk '{print $1}' $src/MANIFEST | while true; do
2428                                 read filename
2429                                 test -z "$filename" && break
2430                                 if test -f $filename; then
2431                                         if $issymlink $filename; then
2432                                                 rm -f $filename
2433                                         fi
2434                                 fi
2435                                 if test -f $filename; then
2436                                         echo "$filename already exists, not symlinking."
2437                                 else
2438                                         ln -s $src/$filename $filename
2439                                 fi
2440                         done
2441                         # Sanity check 2.
2442                         if test ! -f t/base/lex.t; then
2443                                 echo "Failed to create the symlinks (t/base/lex.t missing).  Aborting." >&4
2444                                 exit 1
2445                         fi
2446                         cd UU
2447                         ;;
2448                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2449                         ;;
2450                 esac
2451                 ;;
2452         esac
2453         ;;
2454 esac
2455
2456
2457 case "$usecrosscompile" in
2458 $define|true|[yY]*)
2459         $echo "Cross-compiling..."
2460         croak=''
2461         case "$cc" in
2462         *-*-gcc) # A cross-compiling gcc, probably.
2463             targetarch=`$echo $cc|$sed 's/-gcc$//'`
2464             ar=$targetarch-ar
2465             # leave out ld, choosing it is more complex
2466             nm=$targetarch-nm
2467             ranlib=$targetarch-ranlib
2468             $echo 'extern int foo;' > try.c
2469             set X `$cc -v -E try.c 2>&1 | $awk '/^#include </,/^End of search /'|$grep '/include'`
2470             shift
2471             if $test $# -gt 0; then
2472                 incpth="$incpth $*"
2473                 incpth="`$echo $incpth|$sed 's/^ //'`"
2474                 echo "Guessing incpth '$incpth'." >&4
2475                 for i in $*; do
2476                     j="`$echo $i|$sed 's,/include$,/lib,'`"
2477                     if $test -d $j; then
2478                         libpth="$libpth $j"
2479                     fi
2480                 done   
2481                 libpth="`$echo $libpth|$sed 's/^ //'`"
2482                 echo "Guessing libpth '$libpth'." >&4
2483             fi
2484             $rm -f try.c
2485             ;;
2486         esac
2487         case "$targetarch" in
2488         '') echo "Targetarch not defined." >&4; croak=y ;;
2489         *)  echo "Using targetarch $targetarch." >&4 ;;
2490         esac
2491         case "$incpth" in
2492         '') echo "Incpth not defined." >&4; croak=y ;;
2493         *)  echo "Using incpth '$incpth'." >&4 ;;
2494         esac
2495         case "$libpth" in
2496         '') echo "Libpth not defined." >&4; croak=y ;;
2497         *)  echo "Using libpth '$libpth'." >&4 ;;
2498         esac
2499         case "$usrinc" in
2500         '') for i in $incpth; do
2501                 if $test -f $i/errno.h -a -f $i/stdio.h -a -f $i/time.h; then
2502                     usrinc=$i
2503                     echo "Guessing usrinc $usrinc." >&4
2504                     break
2505                 fi
2506             done
2507             case "$usrinc" in
2508             '') echo "Usrinc not defined." >&4; croak=y ;;
2509             esac
2510             ;;
2511         *)  echo "Using usrinc $usrinc." >&4 ;;
2512         esac
2513         case "$targethost" in
2514         '') echo "Targethost not defined." >&4; croak=y ;;
2515         *)  echo "Using targethost $targethost." >&4
2516         esac
2517         locincpth=' '
2518         loclibpth=' '
2519         case "$croak" in
2520         y) echo "Cannot continue, aborting." >&4; exit 1 ;;
2521         esac
2522         case "$src" in
2523         /*) run=$src/Cross/run
2524             targetmkdir=$src/Cross/mkdir
2525             to=$src/Cross/to
2526             from=$src/Cross/from
2527             ;;
2528         *)  pwd=`$test -f ../Configure & cd ..; pwd`
2529             run=$pwd/Cross/run
2530             targetmkdir=$pwd/Cross/mkdir
2531             to=$pwd/Cross/to
2532             from=$pwd/Cross/from
2533             ;;
2534         esac
2535         case "$targetrun" in
2536         '') targetrun=ssh ;;
2537         esac
2538         case "$targetto" in
2539         '') targetto=scp ;;
2540         esac
2541         case "$targetfrom" in
2542         '') targetfrom=scp ;;
2543         esac
2544         run=$run-$targetrun
2545         to=$to-$targetto
2546         from=$from-$targetfrom
2547         case "$targetdir" in
2548         '')  targetdir=/tmp
2549              echo "Guessing targetdir $targetdir." >&4
2550              ;;
2551         esac
2552         case "$targetuser" in
2553         '')  targetuser=root
2554              echo "Guessing targetuser $targetuser." >&4
2555              ;;
2556         esac
2557         case "$targetfrom" in
2558         scp)    q=-q ;;
2559         *)      q='' ;;
2560         esac
2561         case "$targetrun" in
2562         ssh|rsh)
2563             cat >$run <<EOF
2564 #!/bin/sh
2565 case "\$1" in
2566 -cwd)
2567   shift
2568   cwd=\$1
2569   shift
2570   ;;
2571 esac
2572 case "\$cwd" in
2573 '') cwd=$targetdir ;;
2574 esac
2575 exe=\$1
2576 shift
2577 if $test ! -f \$exe.xok; then
2578   $to \$exe
2579   $touch \$exe.xok
2580 fi
2581 $targetrun -l $targetuser $targethost "cd \$cwd && ./\$exe \$@"
2582 EOF
2583             ;;
2584         *)  echo "Unknown targetrun '$targetrun'" >&4
2585             exit 1
2586             ;;
2587         esac
2588         case "$targetmkdir" in
2589         */Cross/mkdir)
2590             cat >$targetmkdir <<EOF
2591 #!/bin/sh
2592 $targetrun -l $targetuser $targethost "mkdir -p \$@"
2593 EOF
2594             $chmod a+rx $targetmkdir
2595             ;;
2596         *)  echo "Unknown targetmkdir '$targetmkdir'" >&4
2597             exit 1
2598             ;;
2599         esac
2600         case "$targetto" in
2601         scp|rcp)
2602             cat >$to <<EOF
2603 #!/bin/sh
2604 for f in \$@
2605 do
2606   case "\$f" in
2607   /*)
2608     $targetmkdir \`dirname \$f\`
2609     $targetto $q \$f $targetuser@$targethost:\$f            || exit 1
2610     ;;
2611   *)
2612     $targetmkdir $targetdir/\`dirname \$f\`
2613     $targetto $q \$f $targetuser@$targethost:$targetdir/\$f || exit 1
2614     ;;
2615   esac
2616 done
2617 exit 0
2618 EOF
2619             ;;
2620         cp) cat >$to <<EOF
2621 #!/bin/sh
2622 for f in \$@
2623 do
2624   case "\$f" in
2625   /*)
2626     $mkdir -p $targetdir/\`dirname \$f\`
2627     $cp \$f $targetdir/\$f || exit 1
2628     ;;
2629   *)
2630     $targetmkdir $targetdir/\`dirname \$f\`
2631     $cp \$f $targetdir/\$f || exit 1
2632     ;;
2633   esac
2634 done
2635 exit 0
2636 EOF
2637             ;;
2638         *)  echo "Unknown targetto '$targetto'" >&4
2639             exit 1
2640             ;;
2641         esac
2642         case "$targetfrom" in
2643         scp|rcp)
2644           cat >$from <<EOF
2645 #!/bin/sh
2646 for f in \$@
2647 do
2648   $rm -f \$f
2649   $targetfrom $q $targetuser@$targethost:$targetdir/\$f . || exit 1
2650 done
2651 exit 0
2652 EOF
2653             ;;
2654         cp) cat >$from <<EOF
2655 #!/bin/sh
2656 for f in \$@
2657 do
2658   $rm -f \$f
2659   cp $targetdir/\$f . || exit 1
2660 done
2661 exit 0
2662 EOF
2663             ;;
2664         *)  echo "Unknown targetfrom '$targetfrom'" >&4
2665             exit 1
2666             ;;
2667         esac
2668         if $test ! -f $run; then
2669             echo "Target 'run' script '$run' not found." >&4
2670         else
2671             $chmod a+rx $run
2672         fi
2673         if $test ! -f $to; then
2674             echo "Target 'to' script '$to' not found." >&4
2675         else
2676             $chmod a+rx $to
2677         fi
2678         if $test ! -f $from; then
2679             echo "Target 'from' script '$from' not found." >&4
2680         else
2681             $chmod a+rx $from
2682         fi
2683         if $test ! -f $run -o ! -f $to -o ! -f $from; then
2684             exit 1
2685         fi
2686         cat >&4 <<EOF
2687 Using '$run' for remote execution,
2688 and '$from' and '$to'
2689 for remote file transfer.
2690 EOF
2691         ;;
2692 *)      run=''
2693         to=:
2694         from=:
2695         usecrosscompile='undef'
2696         targetarch=''
2697         ;;
2698 esac
2699
2700 : see whether [:lower:] and [:upper:] are supported character classes
2701 echo " "
2702 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2703 ABYZ)
2704         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2705         up='[:upper:]'
2706         low='[:lower:]'
2707         ;;
2708 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2709         # (0xc9 and 0xd1), therefore that is a nice testing point.
2710         if test "X$up" = X -o "X$low" = X; then
2711             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2712             ij) up='[A-Z]'
2713                 low='[a-z]'
2714                 ;;
2715             esac
2716         fi
2717         if test "X$up" = X -o "X$low" = X; then
2718             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2719             ij) up='A-Z'
2720                 low='a-z'
2721                 ;;
2722             esac
2723         fi
2724         if test "X$up" = X -o "X$low" = X; then
2725             case "`echo IJ | od -x 2>/dev/null`" in
2726             *C9D1*|*c9d1*)
2727                 echo "Hey, this might be EBCDIC." >&4
2728                 if test "X$up" = X -o "X$low" = X; then
2729                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2730                     ij) up='[A-IJ-RS-Z]'
2731                         low='[a-ij-rs-z]'
2732                         ;;
2733                     esac
2734                 fi
2735                 if test "X$up" = X -o "X$low" = X; then
2736                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2737                     ij) up='A-IJ-RS-Z'
2738                         low='a-ij-rs-z'
2739                         ;;
2740                     esac
2741                 fi
2742                 ;;
2743             esac
2744         fi
2745 esac
2746 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2747 ij)
2748     echo "Using $up and $low to convert case." >&4
2749     ;;
2750 *)
2751     echo "I don't know how to translate letters from upper to lower case." >&4
2752     echo "Your tr is not acting any way I know of." >&4
2753     exit 1
2754     ;;
2755 esac
2756 : set up the translation script tr, must be called with ./tr of course
2757 cat >tr <<EOSC
2758 $startsh
2759 case "\$1\$2" in
2760 '[A-Z][a-z]') exec $tr '$up' '$low';;
2761 '[a-z][A-Z]') exec $tr '$low' '$up';;
2762 esac
2763 exec $tr "\$@"
2764 EOSC
2765 chmod +x tr
2766 $eunicefix tr
2767
2768 : Try to determine whether config.sh was made on this system
2769 case "$config_sh" in
2770 '')
2771 myuname=`$uname -a 2>/dev/null`
2772 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2773 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2774 # because the A-Z/a-z are not consecutive.
2775 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2776         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2777 newmyuname="$myuname"
2778 dflt=n
2779 case "$knowitall" in
2780 '')
2781         if test -f ../config.sh; then
2782                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2783                         eval "`grep myuname= ../config.sh`"
2784                 fi
2785                 if test "X$myuname" = "X$newmyuname"; then
2786                         dflt=y
2787                 fi
2788         fi
2789         ;;
2790 *) dflt=y;;
2791 esac
2792
2793 : Get old answers from old config file if Configure was run on the
2794 : same system, otherwise use the hints.
2795 hint=default
2796 cd ..
2797 if test -f config.sh; then
2798         echo " "
2799         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2800         . UU/myread
2801         case "$ans" in
2802         n*|N*) echo "OK, I'll ignore it."
2803                 mv config.sh config.sh.old
2804                 myuname="$newmyuname"
2805                 ;;
2806         *)  echo "Fetching default answers from your old config.sh file..." >&4
2807                 tmp_n="$n"
2808                 tmp_c="$c"
2809                 tmp_sh="$sh"
2810                 . ./config.sh
2811                 cp config.sh UU
2812                 n="$tmp_n"
2813                 c="$tmp_c"
2814                 : Older versions did not always set $sh.  Catch re-use of such
2815                 : an old config.sh.
2816                 case "$sh" in
2817                 '') sh="$tmp_sh" ;;
2818                 esac
2819                 hint=previous
2820                 ;;
2821         esac
2822 fi
2823 . ./UU/checkcc
2824 if test ! -f config.sh; then
2825         $cat <<EOM
2826
2827 First time through, eh?  I have some defaults handy for some systems
2828 that need some extra help getting the Configure answers right:
2829
2830 EOM
2831         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2832         dflt=''
2833         : Half the following guesses are probably wrong... If you have better
2834         : tests or hints, please send them to perlbug@perl.org
2835         : The metaconfig authors would also appreciate a copy...
2836         $test -f /irix && osname=irix
2837         $test -f /xenix && osname=sco_xenix
2838         $test -f /dynix && osname=dynix
2839         $test -f /dnix && osname=dnix
2840         $test -f /lynx.os && osname=lynxos
2841         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2842         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2843         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2844         $test -f /bin/mips && /bin/mips && osname=mips
2845         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2846                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2847         $test -d /usr/apollo/bin && osname=apollo
2848         $test -f /etc/saf/_sactab && osname=svr4
2849         $test -d /usr/include/minix && osname=minix
2850         $test -f /system/gnu_library/bin/ar.pm && osname=vos
2851         if $test -d /MachTen -o -d /MachTen_Folder; then
2852                 osname=machten
2853                 if $test -x /sbin/version; then
2854                         osvers=`/sbin/version | $awk '{print $2}' |
2855                         $sed -e 's/[A-Za-z]$//'`
2856                 elif $test -x /usr/etc/version; then
2857                         osvers=`/usr/etc/version | $awk '{print $2}' |
2858                         $sed -e 's/[A-Za-z]$//'`
2859                 else
2860                         osvers="$2.$3"
2861                 fi
2862         fi
2863
2864         $test -f /sys/posix.dll &&
2865                 $test -f /usr/bin/what &&
2866                 set X `/usr/bin/what /sys/posix.dll` &&
2867                 $test "$3" = UWIN &&
2868                 osname=uwin &&
2869                 osvers="$5"
2870
2871         if $test -f $uname; then
2872                 set X $myuname
2873                 shift
2874
2875                 case "$5" in
2876                 fps*) osname=fps ;;
2877                 mips*)
2878                         case "$4" in
2879                         umips) osname=umips ;;
2880                         *) osname=mips ;;
2881                         esac;;
2882                 [23]100) osname=mips ;;
2883                 next*) osname=next ;;
2884                 i386*)
2885                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2886                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2887                                 osname='sco'
2888                                 osvers=$tmp
2889                         elif $test -f /etc/kconfig; then
2890                                 osname=isc
2891                                 if test "$lns" = "$ln -s"; then
2892                                         osvers=4
2893                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2894                                         osvers=3
2895                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2896                                         osvers=2
2897                                 fi
2898                         fi
2899                         tmp=''
2900                         ;;
2901                 pc*)
2902                         if test -n "$DJGPP"; then
2903                                 osname=dos
2904                                 osvers=djgpp
2905                         fi
2906                         ;;
2907                 esac
2908
2909                 case "$1" in
2910                 aix) osname=aix
2911                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2912                         case "$tmp" in
2913                         'not found') osvers="$4"."$3" ;;
2914                         '<3240'|'<>3240') osvers=3.2.0 ;;
2915                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2916                         '=3250'|'>3250') osvers=3.2.5 ;;
2917                         *) osvers=$tmp;;
2918                         esac
2919                         ;;
2920                 bsd386) osname=bsd386
2921                         osvers=`$uname -r`
2922                         ;;
2923                 cygwin*) osname=cygwin
2924                         osvers="$3"
2925                         ;;
2926                 *dc.osx) osname=dcosx
2927                         osvers="$3"
2928                         ;;
2929                 dnix) osname=dnix
2930                         osvers="$3"
2931                         ;;
2932                 domainos) osname=apollo
2933                         osvers="$3"
2934                         ;;
2935                 dgux) osname=dgux 
2936                         osvers="$3"
2937                         ;;
2938                 dynixptx*) osname=dynixptx
2939                         osvers=`echo "$4"|sed 's/^v//'`
2940                         ;;
2941                 freebsd) osname=freebsd 
2942                         osvers="$3" ;;
2943                 genix) osname=genix ;;
2944                 hp*) osname=hpux 
2945                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2946                         ;;
2947                 irix*) osname=irix
2948                         case "$3" in
2949                         4*) osvers=4 ;;
2950                         5*) osvers=5 ;;
2951                         *)      osvers="$3" ;;
2952                         esac
2953                         ;;
2954                 linux) osname=linux
2955                         case "$3" in
2956                         *)      osvers="$3" ;;
2957                         esac
2958                         ;;
2959                 MiNT) osname=mint
2960                         ;;
2961                 netbsd*) osname=netbsd
2962                         osvers="$3"
2963                         ;;
2964                 news-os) osvers="$3"
2965                         case "$3" in
2966                         4*) osname=newsos4 ;;
2967                         *) osname=newsos ;;
2968                         esac
2969                         ;;
2970                 next*) osname=next ;;
2971                 nonstop-ux) osname=nonstopux ;;
2972                 POSIX-BC | posix-bc ) osname=posix-bc
2973                         osvers="$3"
2974                         ;;
2975                 powerux | power_ux | powermax_os | powermaxos | \
2976                 powerunix | power_unix) osname=powerux
2977                         osvers="$3"
2978                         ;;
2979                 qnx) osname=qnx
2980                         osvers="$4"
2981                         ;;
2982                 solaris) osname=solaris
2983                         case "$3" in
2984                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2985                         *)      osvers="$3" ;;
2986                         esac
2987                         ;;
2988                 sunos) osname=sunos
2989                         case "$3" in
2990                         5*) osname=solaris
2991                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2992                         *)      osvers="$3" ;;
2993                         esac
2994                         ;;
2995                 titanos) osname=titanos
2996                         case "$3" in
2997                         1*) osvers=1 ;;
2998                         2*) osvers=2 ;;
2999                         3*) osvers=3 ;;
3000                         4*) osvers=4 ;;
3001                         *)      osvers="$3" ;;
3002                         esac
3003                         ;;
3004                 ultrix) osname=ultrix
3005                         osvers="$3"
3006                         ;;
3007                 osf1|mls+)      case "$5" in
3008                                 alpha)
3009                                         osname=dec_osf
3010                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
3011                                         case "$osvers" in
3012                                         [1-9].[0-9]*) ;;
3013                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
3014                                         esac
3015                                         ;;
3016                         hp*)    osname=hp_osf1  ;;
3017                         mips)   osname=mips_osf1 ;;
3018                         esac
3019                         ;;
3020                 unixware) osname=svr5
3021                         osvers="$4"
3022                         ;;
3023                 uts)    osname=uts
3024                         osvers="$3"
3025                         ;;
3026                 vos) osvers="$3"
3027                         ;;
3028                 $2) case "$osname" in
3029                         *isc*) ;;
3030                         *freebsd*) ;;
3031                         svr*)
3032                                 : svr4.x or possibly later
3033                                 case "svr$3" in 
3034                                 ${osname}*)
3035                                         osname=svr$3
3036                                         osvers=$4
3037                                         ;;
3038                                 esac
3039                                 case "$osname" in
3040                                 svr4.0)
3041                                         : Check for ESIX
3042                                         if test -f /stand/boot ; then
3043                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
3044                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
3045                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
3046                                                         if test -n "$isesix"; then
3047                                                                 osname=esix4
3048                                                         fi
3049                                                 fi
3050                                         fi
3051                                         ;;
3052                                 esac
3053                                 ;;
3054                         *)      if test -f /etc/systemid; then
3055                                         osname=sco
3056                                         set `echo $3 | $sed 's/\./ /g'` $4
3057                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
3058                                                 osvers=$1.$2.$3
3059                                         elif $test -f $src/hints/sco_$1_$2.sh; then
3060                                                 osvers=$1.$2
3061                                         elif $test -f $src/hints/sco_$1.sh; then
3062                                                 osvers=$1
3063                                         fi
3064                                 else
3065                                         case "$osname" in
3066                                         '') : Still unknown.  Probably a generic Sys V.
3067                                                 osname="sysv"
3068                                                 osvers="$3"
3069                                                 ;;
3070                                         esac
3071                                 fi
3072                                 ;;
3073                         esac
3074                         ;;
3075                 *)      case "$osname" in
3076                         '') : Still unknown.  Probably a generic BSD.
3077                                 osname="$1"
3078                                 osvers="$3"
3079                                 ;;
3080                         esac
3081                         ;;
3082                 esac
3083         else
3084                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
3085                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
3086                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
3087                                 osname=news_os
3088                         fi
3089                         $rm -f UU/kernel.what
3090                 elif test -d c:/.; then
3091                         set X $myuname
3092                         osname=os2
3093                         osvers="$5"
3094                 fi
3095         fi
3096         
3097         case "$targetarch" in
3098         '') ;;
3099         *)  hostarch=$osname
3100             osname=`echo $targetarch|sed 's,^[^-]*-,,'`
3101             osvers=''
3102             ;;
3103         esac
3104
3105         : Now look for a hint file osname_osvers, unless one has been
3106         : specified already.
3107         case "$hintfile" in
3108         ''|' ')
3109                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
3110                 : Also try without trailing minor version numbers.
3111                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
3112                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
3113                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
3114                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
3115                 case "$file" in
3116                 '') dflt=none ;;
3117                 *)  case "$osvers" in
3118                         '') dflt=$file
3119                                 ;;
3120                         *)  if $test -f $src/hints/$file.sh ; then
3121                                         dflt=$file
3122                                 elif $test -f $src/hints/$xfile.sh ; then
3123                                         dflt=$xfile
3124                                 elif $test -f $src/hints/$xxfile.sh ; then
3125                                         dflt=$xxfile
3126                                 elif $test -f $src/hints/$xxxfile.sh ; then
3127                                         dflt=$xxxfile
3128                                 elif $test -f $src/hints/$xxxxfile.sh ; then
3129                                         dflt=$xxxxfile
3130                                 elif $test -f "$src/hints/${osname}.sh" ; then
3131                                         dflt="${osname}"
3132                                 else
3133                                         dflt=none
3134                                 fi
3135                                 ;;
3136                         esac
3137                         ;;
3138                 esac
3139                 if $test -f Policy.sh ; then
3140                         case "$dflt" in
3141                         *Policy*) ;;
3142                         none) dflt="Policy" ;;
3143                         *) dflt="Policy $dflt" ;;
3144                         esac
3145                 fi
3146                 ;;
3147         *)
3148                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
3149                 ;;
3150         esac
3151
3152         if $test -f Policy.sh ; then
3153                 $cat <<EOM
3154
3155 There's also a Policy hint file available, which should make the
3156 site-specific (policy) questions easier to answer.
3157 EOM
3158
3159         fi
3160
3161         $cat <<EOM
3162
3163 You may give one or more space-separated answers, or "none" if appropriate.
3164 A well-behaved OS will have no hints, so answering "none" or just "Policy"
3165 is a good thing.  DO NOT give a wrong version or a wrong OS.
3166
3167 EOM
3168
3169         rp="Which of these apply, if any?"
3170         . UU/myread
3171         tans=$ans
3172         for file in $tans; do
3173                 if $test X$file = XPolicy -a -f Policy.sh; then
3174                         . Policy.sh
3175                         $cat Policy.sh >> UU/config.sh
3176                 elif $test -f $src/hints/$file.sh; then
3177                         . $src/hints/$file.sh
3178                         $cat $src/hints/$file.sh >> UU/config.sh
3179                 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
3180                         : nothing
3181                 else
3182                         : Give one chance to correct a possible typo.
3183                         echo "$file.sh does not exist"
3184                         dflt=$file
3185                         rp="hint to use instead?"
3186                         . UU/myread
3187                         for file in $ans; do
3188                                 if $test -f "$src/hints/$file.sh"; then
3189                                         . $src/hints/$file.sh
3190                                         $cat $src/hints/$file.sh >> UU/config.sh
3191                                 elif $test X$ans = X -o X$ans = Xnone ; then
3192                                         : nothing
3193                                 else
3194                                         echo "$file.sh does not exist -- ignored."
3195                                 fi
3196                         done
3197                 fi
3198         done
3199
3200         hint=recommended
3201         : Remember our hint file for later.
3202         if $test -f "$src/hints/$file.sh" ; then
3203                 hintfile="$file"
3204         else
3205                 hintfile=''
3206         fi
3207 fi
3208 cd UU
3209 ;;
3210 *)
3211         echo " "
3212         echo "Fetching default answers from $config_sh..." >&4
3213         tmp_n="$n"
3214         tmp_c="$c"
3215         cd ..
3216         cp $config_sh config.sh 2>/dev/null
3217         chmod +w config.sh
3218         . ./config.sh
3219         cd UU
3220         cp ../config.sh .
3221         n="$tmp_n"
3222         c="$tmp_c"
3223         hint=previous
3224         ;;
3225 esac
3226 test "$override" && . ./optdef.sh
3227
3228 : Restore computed paths
3229 for file in $loclist $trylist; do
3230         eval $file="\$_$file"
3231 done
3232
3233 cat << EOM
3234
3235 Configure uses the operating system name and version to set some defaults.
3236 The default value is probably right if the name rings a bell. Otherwise,
3237 since spelling matters for me, either accept the default or answer "none"
3238 to leave it blank.
3239
3240 EOM
3241 case "$osname" in
3242         ''|' ')
3243                 case "$hintfile" in
3244                 ''|' '|none) dflt=none ;;
3245                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
3246                 esac
3247                 ;;
3248         *) dflt="$osname" ;;
3249 esac
3250 rp="Operating system name?"
3251 . ./myread
3252 case "$ans" in
3253 none)  osname='' ;;
3254 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
3255 esac
3256 echo " "
3257 case "$osvers" in
3258         ''|' ')
3259                 case "$hintfile" in
3260                 ''|' '|none) dflt=none ;;
3261                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
3262                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
3263                         case "$dflt" in
3264                         ''|' ') dflt=none ;;
3265                         esac
3266                         ;;
3267                 esac
3268                 ;;
3269         *) dflt="$osvers" ;;
3270 esac
3271 rp="Operating system version?"
3272 . ./myread
3273 case "$ans" in
3274 none)  osvers='' ;;
3275 *) osvers="$ans" ;;
3276 esac
3277
3278
3279 . ./posthint.sh
3280
3281 : who configured the system
3282 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
3283 cf_by=`(logname) 2>/dev/null`
3284 case "$cf_by" in
3285 "")
3286         cf_by=`(whoami) 2>/dev/null`
3287         case "$cf_by" in
3288         "") cf_by=unknown ;;
3289         esac ;;
3290 esac
3291
3292 : set up the script used to warn in case of inconsistency
3293 cat <<EOS >whoa
3294 $startsh
3295 EOS
3296 cat <<'EOSC' >>whoa
3297 dflt=y
3298 echo " "
3299 echo "*** WHOA THERE!!! ***" >&4
3300 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
3301 rp="    Keep the $hint value?"
3302 . ./myread
3303 case "$ans" in
3304 y) td=$was; tu=$was;;
3305 esac
3306 EOSC
3307
3308 : function used to set $1 to $val
3309 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
3310 case "$val$was" in
3311 $define$undef) . ./whoa; eval "$var=\$td";;
3312 $undef$define) . ./whoa; eval "$var=\$tu";;
3313 *) eval "$var=$val";;
3314 esac'
3315
3316 case "$usethreads" in
3317 $define|true|[yY]*)     dflt='y';;
3318 *) dflt='n';;
3319 esac
3320 cat <<EOM
3321
3322 Perl can be built to take advantage of threads on some systems.
3323 To do so, Configure can be run with -Dusethreads.
3324
3325 Note that threading is a highly experimental feature, and
3326 some known race conditions still remain.  If you choose to try
3327 it, be very sure to not actually deploy it for production
3328 purposes.  README.threads has more details, and is required
3329 reading if you enable threads.
3330
3331 If this doesn't make any sense to you, just accept the default '$dflt'.
3332 EOM
3333 rp='Build a threading Perl?'
3334 . ./myread
3335 case "$ans" in
3336 y|Y)    val="$define" ;;
3337 *)      val="$undef" ;;
3338 esac
3339 set usethreads
3340 eval $setvar
3341
3342 case "$usethreads" in
3343 $define)
3344         $cat <<EOM
3345
3346 As of 5.5.640, Perl has two different internal threading implementations,
3347 the 5.005 version (5005threads) and an interpreter-based version
3348 (ithreads) that has one interpreter per thread.  Both are very 
3349 experimental.  This arrangement exists to help developers work out
3350 which one is better.
3351
3352 If you're a casual user, you probably don't want interpreter-threads
3353 at this time.  But if you do, the 'threads' module allows their use,
3354 and the 'Thread' module offers an interface to both 5005threads and
3355 ithreads (whichever has been configured).
3356 EOM
3357         : Default to ithreads unless overridden on command line or with
3358         : old config.sh
3359         dflt='y'
3360         case "$use5005threads" in
3361                 $define|true|[yY]*) dflt='n';;
3362         esac
3363         case "$useithreads" in
3364                 $undef|false|[nN]*) dflt='n';;
3365         esac
3366         rp='Use interpreter-based ithreads?'
3367         . ./myread
3368         case "$ans" in
3369         y|Y)    val="$define" ;;
3370         *)      val="$undef" ;;
3371         esac
3372         set useithreads
3373         eval $setvar
3374         : Now set use5005threads to the opposite value.
3375         case "$useithreads" in
3376         $define) val="$undef" ;;
3377         *) val="$define" ;;
3378         esac
3379         set use5005threads
3380         eval $setvar
3381         ;;
3382 *)
3383         useithreads="$undef"
3384         use5005threads="$undef"
3385         ;;
3386 esac
3387
3388 case "$useithreads$use5005threads" in
3389 "$define$define")
3390         $cat >&4 <<EOM
3391
3392 You cannot have both the ithreads and the 5.005 threads enabled
3393 at the same time.  Disabling the 5.005 threads since they are
3394 much less stable than the ithreads.
3395
3396 EOM
3397         use5005threads="$undef"
3398         ;;
3399 esac
3400
3401 case "$d_oldpthreads" in
3402 '')     : Configure tests would be welcome here.  For now, assume undef.
3403         val="$undef" ;;
3404 *)      val="$d_oldpthreads" ;;
3405 esac
3406 set d_oldpthreads
3407 eval $setvar
3408
3409
3410 case "$usethreads" in
3411 "$define"|true|[yY]*)
3412 : Look for a hint-file generated 'call-back-unit'.  If the
3413 : user has specified that a threading perl is to be built,
3414 : we may need to set or change some other defaults.
3415         if $test -f usethreads.cbu; then
3416                 echo "Your platform has some specific hints for threaded builds, using them..."
3417                 . ./usethreads.cbu
3418         else
3419                 $cat <<EOM
3420 (Your platform doesn't have any specific hints for threaded builds.
3421  Assuming POSIX threads, then.)
3422 EOM
3423         fi
3424         ;;
3425 esac
3426
3427 cat <<EOM
3428
3429 Perl can be built so that multiple Perl interpreters can coexist
3430 within the same Perl executable.
3431 EOM
3432
3433 case "$useithreads" in
3434 $define)
3435         cat <<EOM
3436 This multiple interpreter support is required for interpreter-based threads.
3437 EOM
3438         val="$define"
3439         ;;
3440 *)      case "$usemultiplicity" in
3441         $define|true|[yY]*)     dflt='y';;
3442         *) dflt='n';;
3443         esac
3444         echo " "
3445         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
3446         rp='Build Perl for multiplicity?'
3447         . ./myread
3448         case "$ans" in
3449         y|Y)    val="$define" ;;
3450         *)      val="$undef" ;;
3451         esac
3452         ;;
3453 esac
3454 set usemultiplicity
3455 eval $setvar
3456
3457
3458 case "$usemorebits" in
3459 "$define"|true|[yY]*)
3460         use64bitint="$define"
3461         uselongdouble="$define"
3462         usemorebits="$define"
3463         ;;
3464 *)      usemorebits="$undef"
3465         ;;
3466 esac
3467
3468 : make some quick guesses about what we are up against
3469 echo " "
3470 $echo $n "Hmm...  $c"
3471 echo exit 1 >bsd
3472 echo exit 1 >usg
3473 echo exit 1 >v7
3474 echo exit 1 >osf1
3475 echo exit 1 >eunice
3476 echo exit 1 >xenix
3477 echo exit 1 >venix
3478 echo exit 1 >os2
3479 d_bsd="$undef"
3480 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3481 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3482 then
3483         echo "Looks kind of like an OSF/1 system, but we'll see..."
3484         echo exit 0 >osf1
3485 elif test `echo abc | $tr a-z A-Z` = Abc ; then
3486         xxx=`./loc addbib blurfl $pth`
3487         if $test -f $xxx; then
3488         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3489                 echo exit 0 >bsd
3490                 echo exit 0 >usg
3491         else
3492                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3493                         echo "Looks kind of like an extended USG system, but we'll see..."
3494                 else
3495                         echo "Looks kind of like a USG system, but we'll see..."
3496                 fi
3497                 echo exit 0 >usg
3498         fi
3499 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3500         echo "Looks kind of like a BSD system, but we'll see..."
3501         d_bsd="$define"
3502         echo exit 0 >bsd
3503 else
3504         echo "Looks kind of like a Version 7 system, but we'll see..."
3505         echo exit 0 >v7
3506 fi
3507 case "$eunicefix" in
3508 *unixtovms*)
3509         $cat <<'EOI'
3510 There is, however, a strange, musty smell in the air that reminds me of
3511 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3512 EOI
3513         echo exit 0 >eunice
3514         d_eunice="$define"
3515 : it so happens the Eunice I know will not run shell scripts in Unix format
3516         ;;
3517 *)
3518         echo " "
3519         echo "Congratulations.  You aren't running Eunice."
3520         d_eunice="$undef"
3521         ;;
3522 esac
3523 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3524 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
3525 : semicolon as a patch separator
3526 case "$p_" in
3527 :) ;;
3528 *)
3529         $cat <<'EOI'
3530 I have the feeling something is not exactly right, however...don't tell me...
3531 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3532 (Or you may be running DOS with DJGPP.)
3533 EOI
3534         echo exit 0 >os2
3535         ;;
3536 esac
3537 if test -f /xenix; then
3538         echo "Actually, this looks more like a XENIX system..."
3539         echo exit 0 >xenix
3540         d_xenix="$define"
3541 else
3542         echo " "
3543         echo "It's not Xenix..."
3544         d_xenix="$undef"
3545 fi
3546 chmod +x xenix
3547 $eunicefix xenix
3548 if test -f /venix; then
3549         echo "Actually, this looks more like a VENIX system..."
3550         echo exit 0 >venix
3551 else
3552         echo " "
3553         if ./xenix; then
3554                 : null
3555         else
3556                 echo "Nor is it Venix..."
3557         fi
3558 fi
3559 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3560 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3561 $rm -f foo
3562
3563 case "$cc" in
3564 '') dflt=cc;;
3565 *) dflt="$cc";;
3566 esac
3567 rp="Use which C compiler?"
3568 . ./myread
3569 cc="$ans"
3570
3571 : See if they have not cc but they do have gcc
3572 . ./trygcc
3573 : Look for a hint-file generated 'call-back-unit'.  Now that the
3574 : user has specified the compiler, we may need to set or change some
3575 : other defaults.
3576 if $test -f cc.cbu; then
3577     . ./cc.cbu
3578 fi
3579 . ./checkcc
3580
3581 echo " "
3582 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3583 $cat >try.c <<EOM
3584 #include <stdio.h>
3585 int main() {
3586 #ifdef __GNUC__
3587 #ifdef __VERSION__
3588         printf("%s\n", __VERSION__);
3589 #else
3590         printf("%s\n", "1");
3591 #endif
3592 #endif
3593         exit(0);
3594 }
3595 EOM
3596 if $cc -o try $ccflags $ldflags try.c; then
3597         gccversion=`$run ./try`
3598         case "$gccversion" in
3599         '') echo "You are not using GNU cc." ;;
3600         *)  echo "You are using GNU cc $gccversion."
3601             ccname=gcc  
3602             ;;
3603         esac
3604 else
3605         echo " "
3606         echo "*** WHOA THERE!!! ***" >&4
3607         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3608         case "$knowitall" in
3609         '')
3610         echo "    You'd better start hunting for one and let me know about it." >&4
3611                 exit 1
3612                 ;;
3613         esac
3614 fi
3615 $rm -f try try.*
3616 case "$gccversion" in
3617 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3618 esac
3619 case "$gccversion" in
3620 '') gccosandvers='' ;;
3621 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3622    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3623    gccshortvers=''
3624    case "$gccosandvers" in
3625    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3626    $osname$osvers) ;; # looking good
3627    $osname*) cat <<EOM >&4
3628
3629 *** WHOA THERE!!! ***
3630
3631     Your gcc has not been compiled for the exact release of
3632     your operating system ($gccosandvers versus $osname$osvers).
3633
3634     In general it is a good idea to keep gcc synchronized with
3635     the operating system because otherwise serious problems
3636     may ensue when trying to compile software, like Perl.
3637
3638     I'm trying to be optimistic here, though, and will continue.
3639     If later during the configuration and build icky compilation
3640     problems appear (headerfile conflicts being the most common
3641     manifestation), I suggest reinstalling the gcc to match
3642     your operating system release.
3643
3644 EOM
3645       ;;
3646    *) gccosandvers='' ;; # failed to parse, better be silent
3647    esac
3648    ;;
3649 esac
3650 case "$ccname" in
3651 '') ccname="$cc" ;;
3652 esac
3653
3654
3655 : decide how portable to be.  Allow command line overrides.
3656 case "$d_portable" in
3657 "$undef") ;;
3658 *)      d_portable="$define" ;;
3659 esac
3660
3661 : set up shell script to do ~ expansion
3662 cat >filexp <<EOSS
3663 $startsh
3664 : expand filename
3665 case "\$1" in
3666  ~/*|~)
3667         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3668         ;;
3669  ~*)
3670         if $test -f /bin/csh; then
3671                 /bin/csh -f -c "glob \$1"
3672                 failed=\$?
3673                 echo ""
3674                 exit \$failed
3675         else
3676                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3677                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3678                 if $test ! -d "\$dir"; then
3679                         me=\`basename \$0\`
3680                         echo "\$me: can't locate home directory for: \$name" >&2
3681                         exit 1
3682                 fi
3683                 case "\$1" in
3684                 */*)
3685                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3686                         ;;
3687                 *)
3688                         echo \$dir
3689                         ;;
3690                 esac
3691         fi
3692         ;;
3693 *)
3694         echo \$1
3695         ;;
3696 esac
3697 EOSS
3698 chmod +x filexp
3699 $eunicefix filexp
3700
3701 : now set up to get a file name
3702 cat <<EOS >getfile
3703 $startsh
3704 EOS
3705 cat <<'EOSC' >>getfile
3706 tilde=''
3707 fullpath=''
3708 already=''
3709 skip=''
3710 none_ok=''
3711 exp_file=''
3712 nopath_ok=''
3713 orig_rp="$rp"
3714 orig_dflt="$dflt"
3715 case "$gfpth" in
3716 '') gfpth='.' ;;
3717 esac
3718
3719 case "$fn" in
3720 *\(*)
3721         expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3722         fn=`echo $fn | sed 's/(.*)//'`
3723         ;;
3724 esac
3725
3726 case "$fn" in
3727 *:*)
3728         loc_file=`expr $fn : '.*:\(.*\)'`
3729         fn=`expr $fn : '\(.*\):.*'`
3730         ;;
3731 esac
3732
3733 case "$fn" in
3734 *~*) tilde=true;;
3735 esac
3736 case "$fn" in
3737 */*) fullpath=true;;
3738 esac
3739 case "$fn" in
3740 *+*) skip=true;;
3741 esac
3742 case "$fn" in
3743 *n*) none_ok=true;;
3744 esac
3745 case "$fn" in
3746 *e*) exp_file=true;;
3747 esac
3748 case "$fn" in
3749 *p*) nopath_ok=true;;
3750 esac
3751
3752 case "$fn" in
3753 *f*) type='File';;
3754 *d*) type='Directory';;
3755 *l*) type='Locate';;
3756 esac
3757
3758 what="$type"
3759 case "$what" in
3760 Locate) what='File';;
3761 esac
3762
3763 case "$exp_file" in
3764 '')
3765         case "$d_portable" in
3766         "$define") ;;
3767         *) exp_file=true;;
3768         esac
3769         ;;
3770 esac
3771
3772 cd ..
3773 while test "$type"; do
3774         redo=''
3775         rp="$orig_rp"
3776         dflt="$orig_dflt"
3777         case "$tilde" in
3778         true) rp="$rp (~name ok)";;
3779         esac
3780         . UU/myread
3781         if test -f UU/getfile.ok && \
3782                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3783         then
3784                 value="$ans"
3785                 ansexp="$ans"
3786                 break
3787         fi
3788         case "$ans" in
3789         none)
3790                 value=''
3791                 ansexp=''
3792                 case "$none_ok" in
3793                 true) type='';;
3794                 esac
3795                 ;;
3796         *)
3797                 case "$tilde" in
3798                 '') value="$ans"
3799                         ansexp="$ans";;
3800                 *)
3801                         value=`UU/filexp $ans`
3802                         case $? in
3803                         0)
3804                                 if test "$ans" != "$value"; then
3805                                         echo "(That expands to $value on this system.)"
3806                                 fi
3807                                 ;;
3808                         *) value="$ans";;
3809                         esac
3810                         ansexp="$value"
3811                         case "$exp_file" in
3812                         '') value="$ans";;
3813                         esac
3814                         ;;
3815                 esac
3816                 case "$fullpath" in
3817                 true)
3818                         case "$ansexp" in
3819                         /*) value="$ansexp" ;;
3820                         [a-zA-Z]:/*) value="$ansexp" ;;
3821                         *)
3822                                 redo=true
3823                                 case "$already" in
3824                                 true)
3825                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3826                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3827                                         ;;
3828                                 *)
3829                                 echo "Please give a full path name, starting with slash." >&4
3830                                         case "$tilde" in
3831                                         true)
3832                                 echo "Note that using ~name is ok provided it expands well." >&4
3833                                                 already=true
3834                                                 ;;
3835                                         esac
3836                                 esac
3837                                 ;;
3838                         esac
3839                         ;;
3840                 esac
3841                 case "$redo" in
3842                 '')
3843                         case "$type" in
3844                         File)
3845                                 for fp in $gfpth; do
3846                                         if test "X$fp" = X.; then
3847                                             pf="$ansexp"
3848                                         else    
3849                                             pf="$fp/$ansexp"
3850                                         fi
3851                                         if test -f "$pf"; then
3852                                                 type=''
3853                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3854                                         then
3855                                                 echo "($value is not a plain file, but that's ok.)"
3856                                                 type=''
3857                                         fi
3858                                         if test X"$type" = X; then
3859                                             value="$pf"
3860                                             break
3861                                         fi
3862                                 done
3863                                 ;;
3864                         Directory)
3865                                 for fp in $gfpth; do
3866                                         if test "X$fp" = X.; then
3867                                             dir="$ans"
3868                                             direxp="$ansexp"
3869                                         else    
3870                                             dir="$fp/$ansexp"
3871                                             direxp="$fp/$ansexp"
3872                                         fi
3873                                         if test -d "$direxp"; then
3874                                                 type=''
3875                                                 value="$dir"
3876                                                 break
3877                                         fi
3878                                 done
3879                                 ;;
3880                         Locate)
3881                                 if test -d "$ansexp"; then
3882                                         echo "(Looking for $loc_file in directory $value.)"
3883                                         value="$value/$loc_file"
3884                                         ansexp="$ansexp/$loc_file"
3885                                 fi
3886                                 if test -f "$ansexp"; then
3887                                         type=''
3888                                 fi
3889                                 case "$nopath_ok" in
3890                                 true)   case "$value" in
3891                                         */*) ;;
3892                                         *)      echo "Assuming $value will be in people's path."
3893                                                 type=''
3894                                                 ;;
3895                                         esac
3896                                         ;;
3897                                 esac
3898                                 ;;
3899                         esac
3900
3901                         case "$skip" in
3902                         true) type='';
3903                         esac
3904
3905                         case "$type" in
3906                         '') ;;
3907                         *)
3908                                 if test "$fastread" = yes; then
3909                                         dflt=y
3910                                 else
3911                                         dflt=n
3912                                 fi
3913                                 rp="$what $value doesn't exist.  Use that name anyway?"
3914                                 . UU/myread
3915                                 dflt=''
3916                                 case "$ans" in
3917                                 y*) type='';;
3918                                 *) echo " ";;
3919                                 esac
3920                                 ;;
3921                         esac
3922                         ;;
3923                 esac
3924                 ;;
3925         esac
3926 done
3927 cd UU
3928 ans="$value"
3929 rp="$orig_rp"
3930 dflt="$orig_dflt"
3931 rm -f getfile.ok
3932 test "X$gfpthkeep" != Xy && gfpth=""
3933 EOSC
3934
3935 : What should the include directory be ?
3936 echo " "
3937 $echo $n "Hmm...  $c"
3938 dflt='/usr/include'
3939 incpath=''
3940 mips_type=''
3941 if $test -f /bin/mips && /bin/mips; then
3942         echo "Looks like a MIPS system..."
3943         $cat >usr.c <<'EOCP'
3944 #ifdef SYSTYPE_BSD43
3945 /bsd43
3946 #endif
3947 EOCP
3948         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3949                 dflt='/bsd43/usr/include'
3950                 incpath='/bsd43'
3951                 mips_type='BSD 4.3'
3952         else
3953                 mips_type='System V'
3954         fi
3955         $rm -f usr.c usr.out
3956         echo "and you're compiling with the $mips_type compiler and libraries."
3957         xxx_prompt=y
3958         echo "exit 0" >mips
3959 else
3960         echo "Doesn't look like a MIPS system."
3961         xxx_prompt=n
3962         echo "exit 1" >mips
3963 fi
3964 chmod +x mips
3965 $eunicefix mips
3966 case "$usrinc" in
3967 '') ;;
3968 *) dflt="$usrinc";;
3969 esac
3970 case "$xxx_prompt" in
3971 y)      fn=d/
3972         echo " "
3973         rp='Where are the include files you want to use?'
3974         . ./getfile
3975         usrinc="$ans"
3976         ;;
3977 *)      usrinc="$dflt"
3978         ;;
3979 esac
3980
3981 : see how we invoke the C preprocessor
3982 echo " "
3983 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3984 cat <<'EOT' >testcpp.c
3985 #define ABC abc
3986 #define XYZ xyz
3987 ABC.XYZ
3988 EOT
3989 cd ..
3990 if test ! -f cppstdin; then
3991         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3992                 # AIX cc -E doesn't show the absolute headerfile
3993                 # locations but we'll cheat by using the -M flag.
3994                 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
3995         else
3996                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3997         fi
3998 else
3999         echo "Keeping your $hint cppstdin wrapper."
4000 fi
4001 chmod 755 cppstdin
4002 wrapper=`pwd`/cppstdin
4003 ok='false'
4004 cd UU
4005
4006 if $test "X$cppstdin" != "X" && \
4007         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
4008         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4009 then
4010         echo "You used to use $cppstdin $cppminus so we'll use that again."
4011         case "$cpprun" in
4012         '') echo "But let's see if we can live without a wrapper..." ;;
4013         *)
4014                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
4015                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4016                 then
4017                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
4018                         ok='true'
4019                 else
4020                         echo "(However, $cpprun $cpplast does not work, let's see...)"
4021                 fi
4022                 ;;
4023         esac
4024 else
4025         case "$cppstdin" in
4026         '') ;;
4027         *)
4028                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
4029                 ;;
4030         esac
4031 fi
4032
4033 if $ok; then
4034         : nothing
4035 elif echo 'Maybe "'"$cc"' -E" will work...'; \
4036         $cc -E <testcpp.c >testcpp.out 2>&1; \
4037         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4038         echo "Yup, it does."
4039         x_cpp="$cc -E"
4040         x_minus='';
4041 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
4042         $cc -E - <testcpp.c >testcpp.out 2>&1; \
4043         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4044         echo "Yup, it does."
4045         x_cpp="$cc -E"
4046         x_minus='-';
4047 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
4048         $cc -P <testcpp.c >testcpp.out 2>&1; \
4049         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4050         echo "Yipee, that works!"
4051         x_cpp="$cc -P"
4052         x_minus='';
4053 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
4054         $cc -P - <testcpp.c >testcpp.out 2>&1; \
4055         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4056         echo "At long last!"
4057         x_cpp="$cc -P"
4058         x_minus='-';
4059 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
4060         $cpp <testcpp.c >testcpp.out 2>&1; \
4061         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4062         echo "It works!"
4063         x_cpp="$cpp"
4064         x_minus='';
4065 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
4066         $cpp - <testcpp.c >testcpp.out 2>&1; \
4067         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4068         echo "Hooray, it works!  I was beginning to wonder."
4069         x_cpp="$cpp"
4070         x_minus='-';
4071 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
4072         $wrapper <testcpp.c >testcpp.out 2>&1; \
4073         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4074         x_cpp="$wrapper"
4075         x_minus=''
4076         echo "Eureka!"
4077 else
4078         dflt=''
4079         rp="No dice.  I can't find a C preprocessor.  Name one:"
4080         . ./myread
4081         x_cpp="$ans"
4082         x_minus=''
4083         $x_cpp <testcpp.c >testcpp.out 2>&1
4084         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4085                 echo "OK, that will do." >&4
4086         else
4087 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
4088                 exit 1
4089         fi
4090 fi
4091
4092 case "$ok" in
4093 false)
4094         cppstdin="$x_cpp"
4095         cppminus="$x_minus"
4096         cpprun="$x_cpp"
4097         cpplast="$x_minus"
4098         set X $x_cpp
4099         shift
4100         case "$1" in
4101         "$cpp")
4102                 echo "Perhaps can we force $cc -E using a wrapper..."
4103                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
4104                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4105                 then
4106                         echo "Yup, we can."
4107                         cppstdin="$wrapper"
4108                         cppminus='';
4109                 else
4110                         echo "Nope, we'll have to live without it..."
4111                 fi
4112                 ;;
4113         esac
4114         case "$cpprun" in
4115         "$wrapper")
4116                 cpprun=''
4117                 cpplast=''
4118                 ;;
4119         esac
4120         ;;
4121 esac
4122
4123 case "$cppstdin" in
4124 "$wrapper"|'cppstdin') ;;
4125 *) $rm -f $wrapper;;
4126 esac
4127 $rm -f testcpp.c testcpp.out
4128
4129 : Set private lib path
4130 case "$plibpth" in
4131 '') if ./mips; then
4132                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
4133         fi;;
4134 esac
4135 case "$libpth" in
4136 ' ') dlist='';;
4137 '') dlist="$loclibpth $plibpth $glibpth";;
4138 *) dlist="$libpth";;
4139 esac
4140
4141 : Now check and see which directories actually exist, avoiding duplicates
4142 libpth=''
4143 for xxx in $dlist
4144 do
4145     if $test -d $xxx; then
4146                 case " $libpth " in
4147                 *" $xxx "*) ;;
4148                 *) libpth="$libpth $xxx";;
4149                 esac
4150     fi
4151 done
4152 $cat <<'EOM'
4153
4154 Some systems have incompatible or broken versions of libraries.  Among
4155 the directories listed in the question below, please remove any you
4156 know not to be holding relevant libraries, and add any that are needed.
4157 Say "none" for none.
4158
4159 EOM
4160 case "$libpth" in
4161 '') dflt='none';;
4162 *)
4163         set X $libpth
4164         shift
4165         dflt=${1+"$@"}
4166         ;;
4167 esac
4168 rp="Directories to use for library searches?"
4169 . ./myread
4170 case "$ans" in
4171 none) libpth=' ';;
4172 *) libpth="$ans";;
4173 esac
4174
4175 : compute shared library extension
4176 case "$so" in
4177 '')
4178         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4179                 dflt='sl'
4180         else
4181                 dflt='so'
4182         fi
4183         ;;
4184 *) dflt="$so";;
4185 esac
4186 $cat <<EOM
4187
4188 On some systems, shared libraries may be available.  Answer 'none' if
4189 you want to suppress searching of shared libraries for the remainder
4190 of this configuration.
4191
4192 EOM
4193 rp='What is the file extension used for shared libraries?'
4194 . ./myread
4195 so="$ans"
4196
4197 : Define several unixisms.
4198 : Hints files or command line option can be used to override them.
4199 : The convoluted testing is in case hints files set either the old
4200 : or the new name.
4201 case "$_exe" in
4202 '')     case "$exe_ext" in
4203         '')     ;;
4204         *)      _exe="$exe_ext" ;;
4205         esac
4206         ;;
4207 esac
4208 case "$_a" in
4209 '')     case "$lib_ext" in
4210     '') _a='.a';;
4211         *)      _a="$lib_ext" ;;
4212         esac
4213         ;;
4214 esac
4215 case "$_o" in
4216 '') case "$obj_ext" in
4217         '')     _o='.o';;
4218         *)      _o="$obj_ext";;
4219         esac
4220         ;;
4221 esac
4222 case "$p_" in
4223 '') case "$path_sep" in
4224         '')     p_=':';;
4225         *)      p_="$path_sep";;
4226         esac
4227         ;;
4228 esac
4229 exe_ext=$_exe
4230 lib_ext=$_a
4231 obj_ext=$_o
4232 path_sep=$p_
4233
4234 : Which makefile gets called first.  This is used by make depend.
4235 case "$firstmakefile" in
4236 '') firstmakefile='makefile';;
4237 esac
4238
4239 case "$usesocks" in
4240 $define|true|[yY]*)     dflt='y';;
4241 *) dflt='n';;
4242 esac
4243 cat <<EOM
4244
4245 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4246 Configure must be run with -Dusesocks.  If you use SOCKS you also need
4247 to use the PerlIO abstraction layer, this will be implicitly selected.
4248
4249 If this doesn't make any sense to you, just accept the default '$dflt'.
4250 EOM
4251 rp='Build Perl for SOCKS?'
4252 . ./myread
4253 case "$ans" in
4254 y|Y)    val="$define" ;;     
4255 *)      val="$undef" ;;
4256 esac
4257 set usesocks
4258 eval $setvar
4259
4260 case "$usesocks" in
4261 $define|true|[yY]*) useperlio="$define";;
4262 esac
4263
4264 : Looking for optional libraries
4265 echo " "
4266 echo "Checking for optional libraries..." >&4
4267 case "$libs" in
4268 ' '|'') dflt='';;
4269 *) dflt="$libs";;
4270 esac
4271 case "$libswanted" in
4272 '') libswanted='c_s';;
4273 esac
4274 case "$usesocks" in
4275 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
4276 esac
4277 libsfound=''
4278 libsfiles=''
4279 libsdirs=''
4280 libspath=''
4281 for thisdir in $libpth $xlibpth; do
4282   test -d $thisdir && libspath="$libspath $thisdir"
4283 done
4284 for thislib in $libswanted; do
4285         for thisdir in $libspath; do
4286             xxx=''
4287             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4288                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|sed -n '$p'`
4289                 $test -f "$xxx" && eval $libscheck
4290                 $test -f "$xxx" && libstyle=shared
4291             fi
4292             if test ! -f "$xxx"; then
4293                 xxx=$thisdir/lib$thislib.$so
4294                 $test -f "$xxx" && eval $libscheck
4295                 $test -f "$xxx" && libstyle=shared
4296             fi  
4297             if test ! -f "$xxx"; then
4298                 xxx=$thisdir/lib$thislib$_a
4299                 $test -f "$xxx" && eval $libscheck
4300                 $test -f "$xxx" && libstyle=static
4301             fi
4302             if test ! -f "$xxx"; then
4303                 xxx=$thisdir/$thislib$_a
4304                 $test -f "$xxx" && eval $libscheck
4305                 $test -f "$xxx" && libstyle=static
4306             fi
4307             if test ! -f "$xxx"; then
4308                 xxx=$thisdir/lib${thislib}_s$_a
4309                 $test -f "$xxx" && eval $libscheck
4310                 $test -f "$xxx" && libstyle=static
4311                 $test -f "$xxx" && thislib=${thislib}_s
4312             fi
4313             if test ! -f "$xxx"; then
4314                 xxx=$thisdir/Slib$thislib$_a
4315                 $test -f "$xxx" && eval $libscheck
4316                 $test -f "$xxx" && libstyle=static
4317             fi
4318             if $test -f "$xxx"; then
4319                 case "$libstyle" in
4320                 shared) echo "Found -l$thislib (shared)." ;;
4321                 static) echo "Found -l$thislib." ;;
4322                 *)      echo "Found -l$thislib ($libstyle)." ;;
4323                 esac
4324                 case " $dflt " in
4325                 *"-l$thislib "*);;
4326                 *) dflt="$dflt -l$thislib"
4327                    libsfound="$libsfound $xxx"
4328                    yyy=`basename $xxx`
4329                    libsfiles="$libsfiles $yyy"
4330                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
4331                    case " $libsdirs " in
4332                    *" $yyy "*) ;;
4333                    *) libsdirs="$libsdirs $yyy" ;;
4334                    esac
4335                    ;;
4336                 esac
4337                 break
4338             fi  
4339         done
4340         if $test ! -f "$xxx"; then
4341             echo "No -l$thislib."
4342         fi
4343 done
4344 set X $dflt
4345 shift
4346 dflt="$*"
4347 case "$libs" in
4348 '') dflt="$dflt";;
4349 *) dflt="$libs";;
4350 esac
4351 case "$dflt" in
4352 ' '|'') dflt='none';;
4353 esac
4354
4355 $cat <<EOM
4356
4357 In order to compile $package on your machine, a number of libraries
4358 are usually needed.  Include any other special libraries here as well.
4359 Say "none" for none.  The default list is almost always right.
4360 EOM
4361
4362 echo " "
4363 rp="What libraries to use?"
4364 . ./myread
4365 case "$ans" in
4366 none) libs=' ';;
4367 *) libs="$ans";;
4368 esac
4369
4370 : determine optimization, if desired, or use for debug flag also
4371 case "$optimize" in
4372 ' '|$undef) dflt='none';;
4373 '') dflt='-O';;
4374 *) dflt="$optimize";;
4375 esac
4376 $cat <<EOH
4377
4378 By default, $package compiles with the -O flag to use the optimizer.
4379 Alternately, you might want to use the symbolic debugger, which uses
4380 the -g flag (on traditional Unix systems).  Either flag can be
4381 specified here.  To use neither flag, specify the word "none".
4382
4383 EOH
4384 rp="What optimizer/debugger flag should be used?"
4385 . ./myread
4386 optimize="$ans"
4387 case "$optimize" in
4388 'none') optimize=" ";;
4389 esac
4390
4391 dflt=''
4392 : We will not override a previous value, but we might want to
4393 : augment a hint file
4394 case "$hint" in
4395 default|recommended)
4396         case "$gccversion" in
4397         1*) dflt='-fpcc-struct-return' ;;
4398         esac
4399         case "$optimize" in
4400         *-g*) dflt="$dflt -DDEBUGGING";;
4401         esac
4402         case "$gccversion" in
4403         2*) if test -d /etc/conf/kconfig.d &&
4404                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4405                 then
4406                         dflt="$dflt -posix"
4407                 fi
4408                 ;;
4409         esac
4410         case "$gccversion" in
4411         1*) ;;
4412         2.[0-8]*) ;;
4413         ?*)     echo " "
4414                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4415                 echo 'int main(void) { return 0; }' > gcctest.c
4416                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4417                         echo "Yes, it does." 2>&1
4418                         case "$ccflags" in
4419                         *strict-aliasing*) 
4420                                 echo "Leaving current flags $ccflags alone." 2>&1
4421                                 ;;
4422                         *) dflt="$dflt -fno-strict-aliasing" ;;
4423                         esac
4424                 else
4425                         echo "Nope, it doesn't, but that's ok." 2>&1
4426                 fi
4427                 ;;
4428         esac
4429         ;;
4430 esac
4431
4432 case "$mips_type" in
4433 *BSD*|'') inclwanted="$locincpth $usrinc";;
4434 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4435 esac
4436 for thisincl in $inclwanted; do
4437         if $test -d $thisincl; then
4438                 if $test x$thisincl != x$usrinc; then
4439                         case "$dflt" in
4440                         *" -I$thisincl "*);;
4441                         *) dflt="$dflt -I$thisincl ";;
4442                         esac
4443                 fi
4444         fi
4445 done
4446
4447 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4448         xxx=true;
4449 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4450         xxx=true;
4451 else
4452         xxx=false;
4453 fi;
4454 if $xxx; then
4455         case "$dflt" in
4456         *$2*);;
4457         *) dflt="$dflt -D$2";;
4458         esac;
4459 fi'
4460
4461 set signal.h LANGUAGE_C; eval $inctest
4462
4463 case "$usesocks" in
4464 $define)
4465         ccflags="$ccflags -DSOCKS"
4466         ;;
4467 esac
4468
4469 case "$hint" in
4470 default|recommended) dflt="$ccflags $dflt" ;;
4471 *) dflt="$ccflags";;
4472 esac
4473
4474 case "$dflt" in
4475 ''|' ') dflt=none;;
4476 esac
4477
4478 $cat <<EOH
4479
4480 Your C compiler may want other flags.  For this question you should include
4481 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4482 but you should NOT include libraries or ld flags like -lwhatever.  If you
4483 want $package to honor its debug switch, you should include -DDEBUGGING here.
4484 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4485
4486 To use no flags, specify the word "none".
4487
4488 EOH
4489 set X $dflt
4490 shift
4491 dflt=${1+"$@"}
4492 rp="Any additional cc flags?"
4493 . ./myread
4494 case "$ans" in
4495 none) ccflags='';;
4496 *) ccflags="$ans";;
4497 esac
4498
4499 : the following weeds options from ccflags that are of no interest to cpp
4500 case "$cppflags" in
4501 '') cppflags="$ccflags" ;;
4502 *)  cppflags="$cppflags $ccflags" ;;
4503 esac
4504 case "$gccversion" in
4505 1*) cppflags="$cppflags -D__GNUC__"
4506 esac
4507 case "$mips_type" in
4508 '');;
4509 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4510 esac
4511 case "$cppflags" in
4512 '');;
4513 *)
4514         echo " "
4515         echo "Let me guess what the preprocessor flags are..." >&4
4516         set X $cppflags
4517         shift
4518         cppflags=''
4519         $cat >cpp.c <<'EOM'
4520 #define BLURFL foo
4521
4522 BLURFL xx LFRULB
4523 EOM
4524         previous=''
4525         for flag in $*
4526         do
4527                 case "$flag" in
4528                 -*) ftry="$flag";;
4529                 *) ftry="$previous $flag";;
4530                 esac
4531                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4532                         >cpp1.out 2>/dev/null && \
4533                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4534                         >cpp2.out 2>/dev/null && \
4535                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4536                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4537                 then
4538                         cppflags="$cppflags $ftry"
4539                         previous=''
4540                 else
4541                         previous="$flag"
4542                 fi
4543         done
4544         set X $cppflags
4545         shift
4546         cppflags=${1+"$@"}
4547         case "$cppflags" in
4548         *-*)  echo "They appear to be: $cppflags";;
4549         esac
4550         $rm -f cpp.c cpp?.out
4551         ;;
4552 esac
4553
4554 : flags used in final linking phase
4555 case "$ldflags" in
4556 '') if ./venix; then
4557                 dflt='-i -z'
4558         else
4559                 dflt=''
4560         fi
4561         case "$ccflags" in
4562         *-posix*) dflt="$dflt -posix" ;;
4563         esac
4564         ;;
4565 *) dflt="$ldflags";;
4566 esac
4567
4568 : Try to guess additional flags to pick up local libraries.
4569 for thislibdir in $libpth; do
4570         case " $loclibpth " in
4571         *" $thislibdir "*)
4572                 case "$dflt " in 
4573                 *"-L$thislibdir "*) ;;
4574                 *)  dflt="$dflt -L$thislibdir" ;;
4575                 esac
4576                 ;;
4577         esac
4578 done
4579
4580 case "$dflt" in
4581 '') dflt='none' ;;
4582 esac
4583
4584 $cat <<EOH
4585
4586 Your C linker may need flags.  For this question you should
4587 include -L/whatever and any other flags used by the C linker, but you
4588 should NOT include libraries like -lwhatever.
4589
4590 Make sure you include the appropriate -L/path flags if your C linker
4591 does not normally search all of the directories you specified above,
4592 namely
4593         $libpth
4594 To use no flags, specify the word "none".
4595
4596 EOH
4597
4598 rp="Any additional ld flags (NOT including libraries)?"
4599 . ./myread
4600 case "$ans" in
4601 none) ldflags='';;
4602 *) ldflags="$ans";;
4603 esac
4604 rmlist="$rmlist pdp11"
4605
4606 : coherency check
4607 echo " "
4608 echo "Checking your choice of C compiler and flags for coherency..." >&4
4609 $cat > try.c <<'EOF'
4610 #include <stdio.h>
4611 int main() { printf("Ok\n"); exit(0); }
4612 EOF
4613 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
4614 shift
4615 $cat >try.msg <<'EOM'
4616 I've tried to compile and run the following simple program:
4617
4618 EOM
4619 $cat try.c >> try.msg
4620
4621 $cat >> try.msg <<EOM
4622
4623 I used the command:
4624
4625         $*
4626         $run ./try
4627
4628 and I got the following output:
4629
4630 EOM
4631 dflt=y
4632 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
4633         if $sh -c "$run ./try" >>try.msg 2>&1; then
4634                 xxx=`$run ./try`
4635                 case "$xxx" in
4636                 "Ok") dflt=n ;;
4637                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4638                         case " $libs " in
4639                         *" -lsfio "*)
4640                                 cat >> try.msg <<'EOQS'
4641 If $libs contains -lsfio, and sfio is mis-configured, then it
4642 sometimes (apparently) runs and exits with a 0 status, but with no
4643 output!  It may have to do with sfio's use of _exit vs. exit.
4644
4645 EOQS
4646                                 rp="You have a big problem.  Shall I abort Configure"
4647                                 dflt=y
4648                                 ;;
4649                         esac
4650                         ;;
4651                 esac
4652         else
4653                 echo "The program compiled OK, but exited with status $?." >>try.msg
4654                 rp="You have a problem.  Shall I abort Configure"
4655                 dflt=y
4656         fi
4657 else
4658         echo "I can't compile the test program." >>try.msg
4659         rp="You have a BIG problem.  Shall I abort Configure"
4660         dflt=y
4661 fi
4662 case "$dflt" in
4663 y)
4664         $cat try.msg >&4
4665         case "$knowitall" in
4666         '')
4667                 echo "(The supplied flags or libraries might be incorrect.)"
4668                 ;;
4669         *) dflt=n;;
4670         esac
4671         echo " "
4672         . ./myread
4673         case "$ans" in
4674         n*|N*) ;;
4675         *)      echo "Ok.  Stopping Configure." >&4
4676                 exit 1
4677                 ;;
4678         esac
4679         ;;
4680 n) echo "OK, that should do.";;
4681 esac
4682 $rm -f try try.* core
4683
4684 : define a shorthand compile call
4685 compile='
4686 mc_file=$1;
4687 shift;
4688 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
4689 : define a shorthand compile call for compilations that should be ok.
4690 compile_ok='
4691 mc_file=$1;
4692 shift;
4693 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
4694
4695 : check for lengths of integral types
4696 echo " "
4697 case "$intsize" in
4698 '')
4699         echo "Checking to see how big your integers are..." >&4
4700         $cat >try.c <<'EOCP'
4701 #include <stdio.h>
4702 int main()
4703 {
4704         printf("intsize=%d;\n", (int)sizeof(int));
4705         printf("longsize=%d;\n", (int)sizeof(long));
4706         printf("shortsize=%d;\n", (int)sizeof(short));
4707         exit(0);
4708 }
4709 EOCP
4710         set try
4711         if eval $compile_ok && $run ./try > /dev/null; then
4712                 eval `$run ./try`
4713                 echo "Your integers are $intsize bytes long."
4714                 echo "Your long integers are $longsize bytes long."
4715                 echo "Your short integers are $shortsize bytes long."
4716         else
4717                 $cat >&4 <<EOM
4718 !
4719 Help! I can't compile and run the intsize test program: please enlighten me!
4720 (This is probably a misconfiguration in your system or libraries, and
4721 you really ought to fix it.  Still, I'll try anyway.)
4722 !
4723 EOM
4724                 dflt=4
4725                 rp="What is the size of an integer (in bytes)?"
4726                 . ./myread
4727                 intsize="$ans"
4728                 dflt=$intsize
4729                 rp="What is the size of a long integer (in bytes)?"
4730                 . ./myread
4731                 longsize="$ans"
4732                 dflt=2
4733                 rp="What is the size of a short integer (in bytes)?"
4734                 . ./myread
4735                 shortsize="$ans"
4736         fi
4737         ;;
4738 esac
4739 $rm -f try try.*
4740
4741 : check for void type
4742 echo " "
4743 echo "Checking to see how well your C compiler groks the void type..." >&4
4744 case "$voidflags" in
4745 '')
4746         $cat >try.c <<'EOCP'
4747 #if TRY & 1
4748 void sub() {
4749 #else
4750 sub() {
4751 #endif
4752         extern void moo();      /* function returning void */
4753         void (*goo)();          /* ptr to func returning void */
4754 #if TRY & 8
4755         void *hue;              /* generic ptr */
4756 #endif
4757 #if TRY & 2
4758         void (*foo[10])();
4759 #endif
4760
4761 #if TRY & 4
4762         if(goo == moo) {
4763                 exit(0);
4764         }
4765 #endif
4766         exit(0);
4767 }
4768 int main() { sub(); }
4769 EOCP
4770         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
4771                 voidflags=$defvoidused
4772         echo "Good.  It appears to support void to the level $package wants.">&4
4773                 if $contains warning .out >/dev/null 2>&1; then
4774                         echo "However, you might get some warnings that look like this:"
4775                         $cat .out
4776                 fi
4777         else
4778 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
4779                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
4780                         echo "It supports 1..."
4781                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
4782                                 echo "It also supports 2..."
4783                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
4784                                         voidflags=7
4785                                         echo "And it supports 4 but not 8 definitely."
4786                                 else
4787                                         echo "It doesn't support 4..."
4788                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
4789                                                 voidflags=11
4790                                                 echo "But it supports 8."
4791                                         else
4792                                                 voidflags=3
4793                                                 echo "Neither does it support 8."
4794                                         fi
4795                                 fi
4796                         else
4797                                 echo "It does not support 2..."
4798                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
4799                                         voidflags=13
4800                                         echo "But it supports 4 and 8."
4801                                 else
4802                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
4803                                                 voidflags=5
4804                                                 echo "And it supports 4 but has not heard about 8."
4805                                         else
4806                                                 echo "However it supports 8 but not 4."
4807                                         fi
4808                                 fi
4809                         fi
4810                 else
4811                         echo "There is no support at all for void."
4812                         voidflags=0
4813                 fi
4814         fi
4815 esac
4816 case "$voidflags" in
4817 "$defvoidused") ;;
4818 *)      $cat >&4 <<'EOM'
4819   Support flag bits are:
4820     1: basic void declarations.
4821     2: arrays of pointers to functions returning void.
4822     4: operations between pointers to and addresses of void functions.
4823     8: generic void pointers.
4824 EOM
4825         dflt="$voidflags";
4826         rp="Your void support flags add up to what?"
4827         . ./myread
4828         voidflags="$ans"
4829         ;;
4830 esac
4831 $rm -f try.* .out
4832
4833 : check for length of pointer
4834 echo " "
4835 case "$ptrsize" in
4836 '')
4837         echo "Checking to see how big your pointers are..." >&4
4838         if test "$voidflags" -gt 7; then
4839                 echo '#define VOID_PTR char *' > try.c
4840         else
4841                 echo '#define VOID_PTR void *' > try.c
4842         fi
4843         $cat >>try.c <<'EOCP'
4844 #include <stdio.h>
4845 int main()
4846 {
4847     printf("%d\n", (int)sizeof(VOID_PTR));
4848     exit(0);
4849 }
4850 EOCP
4851         set try
4852         if eval $compile_ok; then
4853                 ptrsize=`$run ./try`
4854                 echo "Your pointers are $ptrsize bytes long."
4855         else
4856                 dflt='4'
4857                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
4858                 rp="What is the size of a pointer (in bytes)?"
4859                 . ./myread
4860                 ptrsize="$ans"
4861         fi
4862         ;;
4863 esac
4864 $rm -f try.c try
4865
4866 : check for long long
4867 echo " "
4868 echo "Checking to see if you have long long..." >&4
4869 echo 'int main() { long long x = 7; return 0; }' > try.c
4870 set try
4871 if eval $compile; then
4872         val="$define"
4873         echo "You have long long."
4874 else
4875         val="$undef"
4876         echo "You do not have long long."
4877 fi
4878 $rm try.*
4879 set d_longlong
4880 eval $setvar
4881
4882 : check for length of long long
4883 case "${d_longlong}${longlongsize}" in
4884 $define)
4885         echo " "
4886         echo "Checking to see how big your long longs are..." >&4
4887         $cat >try.c <<'EOCP'
4888 #include <stdio.h>
4889 int main()
4890 {
4891     printf("%d\n", (int)sizeof(long long));
4892     return(0);
4893 }
4894 EOCP
4895         set try
4896         if eval $compile_ok; then
4897                 longlongsize=`$run ./try`
4898                 echo "Your long longs are $longlongsize bytes long."
4899         else
4900                 dflt='8'
4901                 echo " "
4902                 echo "(I can't seem to compile the test program.  Guessing...)"
4903                 rp="What is the size of a long long (in bytes)?"
4904                 . ./myread
4905                 longlongsize="$ans"
4906         fi
4907         if $test "X$longsize" = "X$longlongsize"; then
4908                 echo "(That isn't any different from an ordinary long.)"
4909         fi      
4910         ;;
4911 esac
4912 $rm -f try.* try
4913
4914 : determine filename position in cpp output
4915 echo " "
4916 echo "Computing filename position in cpp output for #include directives..." >&4
4917 case "$osname" in
4918 vos) testaccess=-e ;;
4919 *)   testaccess=-r ;;
4920 esac
4921 echo '#include <stdio.h>' > foo.c
4922 $cat >fieldn <<EOF
4923 $startsh
4924 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4925 $grep '^[       ]*#.*stdio\.h' | \
4926 while read cline; do
4927         pos=1
4928         set \$cline
4929         while $test \$# -gt 0; do
4930                 if $test $testaccess \`echo \$1 | $tr -d '"'\`; then
4931                         echo "\$pos"
4932                         exit 0
4933                 fi
4934                 shift
4935                 pos=\`expr \$pos + 1\`
4936         done
4937 done
4938 EOF
4939 chmod +x fieldn
4940 fieldn=`./fieldn`
4941 $rm -f foo.c fieldn
4942 case $fieldn in
4943 '') pos='???';;
4944 1) pos=first;;
4945 2) pos=second;;
4946 3) pos=third;;
4947 *) pos="${fieldn}th";;
4948 esac
4949 echo "Your cpp writes the filename in the $pos field of the line."
4950
4951 case "$osname" in
4952 vos) cppfilter="tr '\\\\>' '/' |" ;; # path component separator is >
4953 *)   cppfilter='' ;;
4954 esac
4955 : locate header file
4956 $cat >findhdr <<EOF
4957 $startsh
4958 wanted=\$1
4959 name=''
4960 for usrincdir in $usrinc
4961 do
4962         if test -f \$usrincdir/\$wanted; then
4963                 echo "\$usrincdir/\$wanted"
4964                 exit 0
4965         fi
4966 done
4967 awkprg='{ print \$$fieldn }'
4968 echo "#include <\$wanted>" > foo\$\$.c
4969 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4970 $cppfilter $grep "^[    ]*#.*\$wanted" | \
4971 while read cline; do
4972         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4973         case "\$name" in
4974         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4975         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4976         *) exit 2;;
4977         esac;
4978 done;
4979 #
4980 # status = 0: grep returned 0 lines, case statement not executed
4981 # status = 1: headerfile found
4982 # status = 2: while loop executed, no headerfile found
4983 #
4984 status=\$?
4985 $rm -f foo\$\$.c;
4986 if test \$status -eq 1; then
4987         exit 0;
4988 fi
4989 exit 1
4990 EOF
4991 chmod +x findhdr
4992
4993 : define an alternate in-header-list? function
4994 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4995 cont=true; xxf="echo \"<\$1> found.\" >&4";
4996 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4997 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4998 esac;
4999 case $# in 4) instead=instead;; *) instead="at last";; esac;
5000 while $test "$cont"; do
5001         xxx=`./findhdr $1`
5002         var=$2; eval "was=\$$2";
5003         if $test "$xxx" && $test -r "$xxx";
5004         then eval $xxf;
5005         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5006                 cont="";
5007         else eval $xxnf;
5008         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5009         set $yyy; shift; shift; yyy=$@;
5010         case $# in 0) cont="";;
5011         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5012                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5013         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5014                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5015         esac;
5016 done;
5017 while $test "$yyy";
5018 do set $yyy; var=$2; eval "was=\$$2";
5019         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5020         set $yyy; shift; shift; yyy=$@;
5021 done'
5022
5023 : see if inttypes.h is available
5024 : we want a real compile instead of Inhdr because some systems
5025 : have an inttypes.h which includes non-existent headers
5026 echo " "
5027 $cat >try.c <<EOCP
5028 #include <inttypes.h>
5029 int main() {
5030         static int32_t foo32 = 0x12345678;
5031 }
5032 EOCP
5033 set try
5034 if eval $compile; then
5035         echo "<inttypes.h> found." >&4
5036         val="$define"
5037 else
5038         echo "<inttypes.h> NOT found." >&4
5039         val="$undef"
5040 fi
5041 $rm -f try.c try
5042 set i_inttypes
5043 eval $setvar
5044
5045 : check for int64_t
5046 echo " "
5047 echo "Checking to see if you have int64_t..." >&4
5048 $cat >try.c <<EOCP
5049 #include <sys/types.h>
5050 #$i_inttypes I_INTTYPES
5051 #ifdef I_INTTYPES
5052 #include <inttypes.h>
5053 #endif
5054 int main() { int64_t x = 7; }
5055 EOCP
5056 set try
5057 if eval $compile; then
5058         val="$define"
5059         echo "You have int64_t."
5060 else
5061         val="$undef"
5062         echo "You do not have int64_t."
5063 fi
5064 $rm -f try try.*
5065 set d_int64_t
5066 eval $setvar
5067
5068
5069 echo " "
5070 echo "Checking which 64-bit integer type we could use..." >&4
5071
5072 case "$intsize" in
5073 8) val=int
5074    set quadtype
5075    eval $setvar
5076    val='"unsigned int"'
5077    set uquadtype
5078    eval $setvar
5079    quadkind=1
5080    ;;
5081 *) case "$longsize" in
5082    8) val=long
5083       set quadtype
5084       eval $setvar
5085       val='"unsigned long"'
5086       set uquadtype
5087       eval $setvar
5088       quadkind=2
5089       ;;
5090    *) case "$d_longlong:$longlongsize" in
5091       define:8)
5092         val='"long long"'
5093         set quadtype
5094         eval $setvar
5095         val='"unsigned long long"'
5096         set uquadtype
5097         eval $setvar
5098         quadkind=3
5099         ;;
5100       *) case "$d_int64_t" in
5101          define)
5102            val=int64_t
5103            set quadtype
5104            eval $setvar
5105            val=uint64_t
5106            set uquadtype
5107            eval $setvar
5108            quadkind=4
5109            ;;
5110          esac
5111          ;;
5112       esac
5113       ;;
5114    esac
5115    ;;
5116 esac
5117
5118 case "$quadtype" in
5119 '')     echo "Alas, no 64-bit integer types in sight." >&4
5120         d_quad="$undef"
5121         ;;
5122 *)      echo "We could use '$quadtype' for 64-bit integers." >&4
5123         d_quad="$define"
5124         ;;
5125 esac
5126
5127
5128 case "$uselonglong" in
5129 "$define"|true|[yY]*)
5130         cat <<EOM >&4
5131
5132 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
5133 EOM
5134         use64bitint="$define"
5135         ;;
5136 esac                          
5137 case "$use64bits" in
5138 "$define"|true|[yY]*)
5139         cat <<EOM >&4
5140
5141 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
5142 EOM
5143         use64bitint="$define"
5144         ;;
5145 esac                          
5146 case "$use64bitints" in
5147 "$define"|true|[yY]*)
5148         cat <<EOM >&4
5149
5150 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
5151 EOM
5152         use64bitint="$define"
5153         ;;
5154 esac                          
5155 case "$use64bitsint" in
5156 "$define"|true|[yY]*)
5157         cat <<EOM >&4
5158
5159 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
5160 EOM
5161         use64bitint="$define"
5162         ;;
5163 esac                          
5164 case "$uselonglongs" in
5165 "$define"|true|[yY]*)
5166         cat <<EOM >&4
5167
5168 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
5169 EOM
5170         use64bitint="$define"
5171         ;;
5172 esac                          
5173 case "$use64bitsall" in
5174 "$define"|true|[yY]*)
5175         cat <<EOM >&4
5176
5177 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
5178 EOM
5179         use64bitall="$define"
5180         ;;
5181 esac                          
5182
5183 case "$ccflags" in
5184 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
5185 esac
5186 case "$use64bitall" in
5187 "$define"|true|[yY]*) use64bitint="$define" ;;
5188 esac
5189
5190 case "$longsize" in
5191 8) cat <<EOM
5192
5193 You have natively 64-bit long integers.
5194 EOM
5195    val="$define"
5196    ;;
5197 *) case "$use64bitint" in
5198    "$define"|true|[yY]*) dflt='y';;
5199    *) dflt='n';;
5200    esac
5201    case "$d_quad" in
5202    "$define") ;;
5203    *) dflt='n' ;;
5204    esac
5205    cat <<EOM
5206
5207 Perl can be built to take advantage of 64-bit integer types
5208 on some systems.  To do so, Configure can be run with -Duse64bitint.
5209 Choosing this option will most probably introduce binary incompatibilities.
5210
5211 If this doesn't make any sense to you, just accept the default '$dflt'.
5212 (The default has been chosen based on your configuration.)
5213 EOM
5214    rp='Try to use 64-bit integers, if available?'
5215    . ./myread
5216    case "$ans" in
5217    [yY]*) val="$define" ;;
5218    *)     val="$undef"  ;;
5219    esac
5220    ;;
5221 esac
5222 set use64bitint
5223 eval $setvar
5224
5225 case "$use64bitall" in
5226 "$define"|true|[yY]*) dflt='y' ;;
5227 *) case "$longsize" in
5228    8) dflt='y' ;;
5229    *) dflt='n' ;;
5230    esac
5231    ;;
5232 esac    
5233 cat <<EOM
5234
5235 You may also choose to try maximal 64-bitness.  It means using as much
5236 64-bitness as possible on the platform.  This in turn means even more
5237 binary incompatibilities.  On the other hand, your platform may not
5238 have any more 64-bitness available than what you already have chosen.
5239
5240 If this doesn't make any sense to you, just accept the default '$dflt'.
5241 (The default has been chosen based on your configuration.)
5242 EOM
5243 rp='Try to use maximal 64-bit support, if available?'
5244 . ./myread
5245 case "$ans" in
5246 [yY]*) val="$define" ;;
5247 *)     val="$undef"  ;;
5248 esac
5249 set use64bitall
5250 eval $setvar
5251 case "$use64bitall" in
5252 "$define")
5253         case "$use64bitint" in
5254         "$undef")
5255                 cat <<EOM
5256
5257 Since you have chosen a maximally 64-bit build, I'm also turning on
5258 the use of 64-bit integers.
5259 EOM
5260                 use64bitint="$define" ;;
5261         esac
5262         ;;
5263 esac
5264
5265 case "$use64bitall" in
5266 "$define"|true|[yY]*)
5267         case "$ptrsize" in
5268         4)      cat <<EOM >&4
5269
5270 *** You have chosen a maximally 64-bit build, but your pointers
5271 *** are only 4 bytes wide, disabling maximal 64-bitness.
5272
5273 EOM
5274                 use64bitall="$undef"
5275                 case "$use64bitint" in
5276                 "$define"|true|[yY]*) ;;
5277                 *)      cat <<EOM >&4
5278
5279 *** Downgrading from maximal 64-bitness to using 64-bit integers.
5280
5281 EOM
5282                         use64bitint="$define"
5283                         ;;
5284                 esac
5285                 ;;
5286         esac
5287         ;;
5288 esac
5289
5290 case "$use64bitint" in
5291 "$define"|true|[yY]*)
5292 : Look for a hint-file generated 'call-back-unit'.  If the
5293 : user has specified that a 64-bit perl is to be built,
5294 : we may need to set or change some other defaults.
5295         if $test -f use64bitint.cbu; then
5296                 echo "Your platform has some specific hints for 64-bit integers, using them..."
5297                 . ./use64bitint.cbu
5298         fi
5299         case "$longsize" in
5300         4) case "$archname64" in
5301            '') archname64=64int ;;
5302            esac
5303            ;;
5304         esac
5305         ;;
5306 esac
5307
5308 case "$use64bitall" in
5309 "$define"|true|[yY]*)
5310 : Look for a hint-file generated 'call-back-unit'.  If the
5311 : user has specified that a maximally 64-bit perl is to be built,
5312 : we may need to set or change some other defaults.
5313         if $test -f use64bitall.cbu; then
5314                 echo "Your platform has some specific hints for 64-bit builds, using them..."
5315                 . ./use64bitall.cbu
5316         fi
5317         case "$longsize" in
5318         4) case "$archname64" in
5319            ''|64int) archname64=64all ;;
5320            esac
5321            ;;
5322         esac
5323         ;;
5324 esac
5325
5326 echo " "
5327 echo "Checking for GNU C Library..." >&4
5328 cat >try.c <<EOM
5329 #include <stdio.h>
5330 int main()
5331 {
5332 #ifdef __GLIBC__
5333     exit(0);
5334 #else
5335     exit(1);
5336 #endif
5337 }
5338 EOM
5339 set try
5340 if eval $compile_ok && $run ./try; then
5341         val="$define"
5342         echo "You are using the GNU C Library"
5343 else
5344         val="$undef"
5345         echo "You are not using the GNU C Library"
5346 fi
5347 $rm -f try try.*
5348 set d_gnulibc
5349 eval $setvar
5350
5351 : see if nm is to be used to determine whether a symbol is defined or not
5352 case "$usenm" in
5353 '')
5354         dflt=''
5355         case "$d_gnulibc" in
5356         "$define")
5357                 echo " "
5358                 echo "nm probably won't work on the GNU C Library." >&4
5359                 dflt=n
5360                 ;;
5361         esac
5362         case "$dflt" in
5363         '') 
5364                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5365                         echo " "
5366                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5367                         echo "'nm' won't be sufficient on this sytem." >&4
5368                         dflt=n
5369                 fi
5370                 ;;
5371         esac
5372         case "$dflt" in
5373         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5374                 if $test $dflt -gt 20; then
5375                         dflt=y
5376                 else
5377                         dflt=n
5378                 fi
5379                 ;;
5380         esac
5381         ;;
5382 *)
5383         case "$usenm" in
5384         true|$define) dflt=y;;
5385         *) dflt=n;;
5386         esac
5387         ;;
5388 esac
5389 $cat <<EOM
5390
5391 I can use $nm to extract the symbols from your C libraries. This
5392 is a time consuming task which may generate huge output on the disk (up
5393 to 3 megabytes) but that should make the symbols extraction faster. The
5394 alternative is to skip the 'nm' extraction part and to compile a small
5395 test program instead to determine whether each symbol is present. If
5396 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5397 this may be the best solution.
5398
5399 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5400
5401 EOM
5402 rp="Shall I use $nm to extract C symbols from the libraries?"
5403 . ./myread
5404 case "$ans" in
5405 [Nn]*) usenm=false;;
5406 *) usenm=true;;
5407 esac
5408
5409 runnm=$usenm
5410 case "$reuseval" in
5411 true) runnm=false;;
5412 esac
5413
5414 : nm options which may be necessary
5415 case "$nm_opt" in
5416 '') if $test -f /mach_boot; then
5417                 nm_opt=''       # Mach
5418         elif $test -d /usr/ccs/lib; then
5419                 nm_opt='-p'     # Solaris (and SunOS?)
5420         elif $test -f /dgux; then
5421                 nm_opt='-p'     # DG-UX
5422         elif $test -f /lib64/rld; then
5423                 nm_opt='-p'     # 64-bit Irix
5424         else
5425                 nm_opt=''
5426         fi;;
5427 esac
5428
5429 : nm options which may be necessary for shared libraries but illegal
5430 : for archive libraries.  Thank you, Linux.
5431 case "$nm_so_opt" in
5432 '')     case "$myuname" in
5433         *linux*)
5434                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5435                         nm_so_opt='--dynamic'
5436                 fi
5437                 ;;
5438         esac
5439         ;;
5440 esac
5441
5442 case "$runnm" in
5443 true)
5444 : get list of predefined functions in a handy place
5445 echo " "
5446 case "$libc" in
5447 '') libc=unknown
5448         case "$libs" in
5449         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5450         esac
5451         ;;
5452 esac
5453 case "$libs" in
5454 '') ;;
5455 *)  for thislib in $libs; do
5456         case "$thislib" in
5457         -lc|-lc_s)
5458                 : Handle C library specially below.
5459                 ;;
5460         -l*)
5461                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5462                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5463                         :
5464                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5465                         :
5466                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5467                         :
5468                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5469                         :
5470                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5471                         :
5472                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5473                         :
5474                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5475                         :
5476                 else
5477                         try=''
5478                 fi
5479                 libnames="$libnames $try"
5480                 ;;
5481         *) libnames="$libnames $thislib" ;;
5482         esac
5483         done
5484         ;;
5485 esac
5486 xxx=normal
5487 case "$libc" in
5488 unknown)
5489         set /lib/libc.$so
5490         for xxx in $libpth; do
5491                 $test -r $1 || set $xxx/libc.$so
5492                 : The messy sed command sorts on library version numbers.
5493                 $test -r $1 || \
5494                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5495                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5496                                 h
5497                                 s/[0-9][0-9]*/0000&/g
5498                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5499                                 G
5500                                 s/\n/ /' | \
5501                          $sort | $sed -e 's/^.* //'`
5502                 eval set \$$#
5503         done
5504         $test -r $1 || set /usr/ccs/lib/libc.$so
5505         $test -r $1 || set /lib/libsys_s$_a
5506         ;;
5507 *)
5508         set blurfl
5509         ;;
5510 esac
5511 if $test -r "$1"; then
5512         echo "Your (shared) C library seems to be in $1."
5513         libc="$1"
5514 elif $test -r /lib/libc && $test -r /lib/clib; then
5515         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5516         xxx=apollo
5517         libc='/lib/clib /lib/libc'
5518         if $test -r /lib/syslib; then
5519                 echo "(Your math library is in /lib/syslib.)"
5520                 libc="$libc /lib/syslib"
5521         fi
5522 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5523         echo "Your C library seems to be in $libc, as you said before."
5524 elif $test -r $incpath/usr/lib/libc$_a; then
5525         libc=$incpath/usr/lib/libc$_a;
5526         echo "Your C library seems to be in $libc.  That's fine."
5527 elif $test -r /lib/libc$_a; then
5528         libc=/lib/libc$_a;
5529         echo "Your C library seems to be in $libc.  You're normal."
5530 else
5531         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5532                 :
5533         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5534                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5535         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5536                 :
5537         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5538                 :
5539         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5540                 :
5541         else
5542                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5543         fi
5544         if $test -r "$tans"; then
5545                 echo "Your C library seems to be in $tans, of all places."
5546                 libc=$tans
5547         else
5548                 libc='blurfl'
5549         fi
5550 fi
5551 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5552         dflt="$libc"
5553         cat <<EOM
5554
5555 If the guess above is wrong (which it might be if you're using a strange
5556 compiler, or your machine supports multiple models), you can override it here.
5557
5558 EOM
5559 else
5560         dflt=''
5561         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
5562         cat >&4 <<EOM
5563 I can't seem to find your C library.  I've looked in the following places:
5564
5565 EOM
5566         $sed 's/^/      /' libpath
5567         cat <<EOM
5568
5569 None of these seems to contain your C library. I need to get its name...
5570
5571 EOM
5572 fi
5573 fn=f
5574 rp='Where is your C library?'
5575 . ./getfile
5576 libc="$ans"
5577
5578 echo " "
5579 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
5580 set X `cat libnames`
5581 shift
5582 xxx=files
5583 case $# in 1) xxx=file; esac
5584 echo "Extracting names from the following $xxx for later perusal:" >&4
5585 echo " "
5586 $sed 's/^/      /' libnames >&4
5587 echo " "
5588 $echo $n "This may take a while...$c" >&4
5589
5590 for file in $*; do
5591         case $file in
5592         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5593         *) $nm $nm_opt $file 2>/dev/null;;
5594         esac
5595 done >libc.tmp
5596
5597 $echo $n ".$c"
5598 $grep fprintf libc.tmp > libc.ptf
5599 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5600 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5601 xxx='[ADTSIW]'
5602 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5603         eval $xscan;\
5604         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5605                 eval $xrun
5606 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5607         eval $xscan;\
5608         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5609                 eval $xrun
5610 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5611         eval $xscan;\
5612         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5613                 eval $xrun
5614 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5615         eval $xscan;\
5616         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5617                 eval $xrun
5618 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5619         eval $xscan;\
5620         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5621                 eval $xrun
5622 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5623         eval $xscan;\
5624         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5625                 eval $xrun
5626 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5627                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5628         eval $xscan;\
5629         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5630                 eval $xrun
5631 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5632         eval $xscan;\
5633         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5634                 eval $xrun
5635 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5636         eval $xscan;\
5637         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5638                 eval $xrun
5639 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5640         eval $xscan;\
5641         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5642                 eval $xrun
5643 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5644         eval $xscan;\
5645         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5646                 eval $xrun
5647 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5648         eval $xscan;\
5649         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5650                 eval $xrun
5651 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5652         eval $xscan;\
5653         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5654                 eval $xrun
5655 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5656         eval $xscan;\
5657         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5658                 eval $xrun
5659 else
5660         $nm -p $* 2>/dev/null >libc.tmp
5661         $grep fprintf libc.tmp > libc.ptf
5662         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5663                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5664         then
5665                 nm_opt='-p'
5666                 eval $xrun
5667         else
5668                 echo " "
5669                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5670                 com=''
5671                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5672                         for thisname in $libnames $libc; do
5673                                 $ar t $thisname >>libc.tmp
5674                         done
5675                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5676                         echo "Ok." >&4
5677                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5678                         # Repeat libc to extract forwarders to DLL entries too
5679                         for thisname in $libnames $libc; do
5680                                 $ar tv $thisname >>libc.tmp
5681                                 # Revision 50 of EMX has bug in $ar.
5682                                 # it will not extract forwarders to DLL entries
5683                                 # Use emximp which will extract exactly them.
5684                                 emximp -o tmp.imp $thisname \
5685                                     2>/dev/null && \
5686                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5687                                     < tmp.imp >>libc.tmp
5688                                 $rm tmp.imp
5689                         done
5690                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5691                         echo "Ok." >&4
5692                 else
5693                         echo "$ar didn't seem to work right." >&4
5694                         echo "Maybe this is a Cray...trying bld instead..." >&4
5695                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5696                         then
5697                                 for thisname in $libnames; do
5698                                         bld t $libnames | \
5699                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5700                                         $ar t $thisname >>libc.tmp
5701                                 done
5702                                 echo "Ok." >&4
5703                         else
5704                                 echo "That didn't work either.  Giving up." >&4
5705                                 exit 1
5706                         fi
5707                 fi
5708         fi
5709 fi
5710 nm_extract="$com"
5711 if $test -f /lib/syscalls.exp; then
5712         echo " "
5713         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5714         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*[        ]*$/\1/p' /lib/syscalls.exp >>libc.list
5715 fi
5716 ;;
5717 esac
5718 $rm -f libnames libpath
5719
5720 : is a C symbol defined?
5721 csym='tlook=$1;
5722 case "$3" in
5723 -v) tf=libc.tmp; tc=""; tdc="";;
5724 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5725 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5726 esac;
5727 tx=yes;
5728 case "$reuseval-$4" in
5729 true-) ;;
5730 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5731 esac;
5732 case "$tx" in
5733 yes)
5734         case "$runnm" in
5735         true)
5736                 if $contains $tlook $tf >/dev/null 2>&1;
5737                 then tval=true;
5738                 else tval=false;
5739                 fi;;
5740         *)
5741                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5742                 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
5743                 then tval=true;
5744                 else tval=false;
5745                 fi;
5746                 $rm -f t t.c;;
5747         esac;;
5748 *)
5749         case "$tval" in
5750         $define) tval=true;;
5751         *) tval=false;;
5752         esac;;
5753 esac;
5754 eval "$2=$tval"'
5755
5756 : define an is-in-libc? function
5757 inlibc='echo " "; td=$define; tu=$undef;
5758 sym=$1; var=$2; eval "was=\$$2";
5759 tx=yes;
5760 case "$reuseval$was" in
5761 true) ;;
5762 true*) tx=no;;
5763 esac;
5764 case "$tx" in
5765 yes)
5766         set $sym tres -f;
5767         eval $csym;
5768         case "$tres" in
5769         true)
5770                 echo "$sym() found." >&4;
5771                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5772         *)
5773                 echo "$sym() NOT found." >&4;
5774                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5775         esac;;
5776 *)
5777         case "$was" in
5778         $define) echo "$sym() found." >&4;;
5779         *) echo "$sym() NOT found." >&4;;
5780         esac;;
5781 esac'
5782
5783 : see if sqrtl exists
5784 set sqrtl d_sqrtl
5785 eval $inlibc
5786
5787 : check for length of double
5788 echo " "
5789 case "$doublesize" in
5790 '')
5791         echo "Checking to see how big your double precision numbers are..." >&4
5792         $cat >try.c <<'EOCP'
5793 #include <stdio.h>
5794 int main()
5795 {
5796     printf("%d\n", (int)sizeof(double));
5797     exit(0);
5798 }
5799 EOCP
5800         set try
5801         if eval $compile_ok; then
5802                 doublesize=`$run ./try`
5803                 echo "Your double is $doublesize bytes long."
5804         else
5805                 dflt='8'
5806                 echo "(I can't seem to compile the test program.  Guessing...)"
5807                 rp="What is the size of a double precision number (in bytes)?"
5808                 . ./myread
5809                 doublesize="$ans"
5810         fi
5811         ;;
5812 esac
5813 $rm -f try.c try
5814
5815 : check for long doubles
5816 echo " "
5817 echo "Checking to see if you have long double..." >&4
5818 echo 'int main() { long double x = 7.0; }' > try.c
5819 set try
5820 if eval $compile; then
5821         val="$define"
5822         echo "You have long double."
5823 else
5824         val="$undef"
5825         echo "You do not have long double."
5826 fi
5827 $rm try.*
5828 set d_longdbl
5829 eval $setvar
5830
5831 : check for length of long double
5832 case "${d_longdbl}${longdblsize}" in
5833 $define)
5834         echo " "
5835         echo "Checking to see how big your long doubles are..." >&4
5836         $cat >try.c <<'EOCP'
5837 #include <stdio.h>
5838 int main()
5839 {
5840         printf("%d\n", sizeof(long double));
5841 }
5842 EOCP
5843         set try
5844         set try
5845         if eval $compile; then
5846                 longdblsize=`$run ./try`
5847                 echo "Your long doubles are $longdblsize bytes long."
5848         else
5849                 dflt='8'
5850                 echo " "
5851                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
5852                 rp="What is the size of a long double (in bytes)?"
5853                 . ./myread
5854                 longdblsize="$ans"
5855         fi
5856         if $test "X$doublesize" = "X$longdblsize"; then
5857                 echo "(That isn't any different from an ordinary double.)"
5858         fi      
5859         ;;
5860 esac
5861 $rm -f try.* try
5862
5863 echo " "
5864
5865 if $test X"$d_longdbl" = X"$define"; then
5866
5867 echo "Checking how to print long doubles..." >&4
5868
5869 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
5870         $cat >try.c <<'EOCP'
5871 #include <sys/types.h>
5872 #include <stdio.h>
5873 int main() {
5874   double d = 123.456;
5875   printf("%.3f\n", d);
5876 }
5877 EOCP
5878         set try
5879         if eval $compile; then
5880                 yyy=`$run ./try`
5881                 case "$yyy" in
5882                 123.456)
5883                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
5884                         sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
5885                         echo "We will use %f."
5886                         ;;
5887                 esac
5888         fi
5889 fi
5890
5891 if $test X"$sPRIfldbl" = X; then
5892         $cat >try.c <<'EOCP'
5893 #include <sys/types.h>
5894 #include <stdio.h>
5895 int main() {
5896   long double d = 123.456;
5897   printf("%.3Lf\n", d);
5898 }
5899 EOCP
5900         set try
5901         if eval $compile; then
5902                 yyy=`$run ./try`
5903                 case "$yyy" in
5904                 123.456)
5905                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
5906                         sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
5907                         echo "We will use %Lf."
5908                         ;;
5909                 esac
5910         fi
5911 fi
5912
5913 if $test X"$sPRIfldbl" = X; then
5914         $cat >try.c <<'EOCP'
5915 #include <sys/types.h>
5916 #include <stdio.h>
5917 int main() {
5918   long double d = 123.456;
5919   printf("%.3llf\n", d);
5920 }
5921 EOCP
5922         set try
5923         if eval $compile; then
5924                 yyy=`$run ./try`
5925                 case "$yyy" in
5926                 123.456)
5927                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
5928                         sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
5929                         echo "We will use %llf."
5930                         ;;
5931                 esac
5932         fi
5933 fi
5934
5935 if $test X"$sPRIfldbl" = X; then
5936         $cat >try.c <<'EOCP'
5937 #include <sys/types.h>
5938 #include <stdio.h>
5939 int main() {
5940   long double d = 123.456;
5941   printf("%.3lf\n", d);
5942 }
5943 EOCP
5944         set try
5945         if eval $compile; then
5946                 yyy=`$run ./try`
5947                 case "$yyy" in
5948                 123.456)
5949                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
5950                         sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
5951                         echo "We will use %lf."
5952                         ;;
5953                 esac
5954         fi
5955 fi
5956
5957 if $test X"$sPRIfldbl" = X; then
5958         echo "Cannot figure out how to print long doubles." >&4
5959 else
5960         sSCNfldbl=$sPRIfldbl    # expect consistency
5961 fi
5962
5963 $rm -f try try.*
5964
5965 fi # d_longdbl
5966
5967 case "$sPRIfldbl" in
5968 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
5969         d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; 
5970         d_SCNfldbl="$undef";
5971         ;;
5972 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
5973         d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; 
5974         d_SCNfldbl="$define";
5975         ;;
5976 esac
5977
5978 : see if modfl exists
5979 set modfl d_modfl
5980 eval $inlibc
5981
5982 d_modfl_pow32_bug="$undef"
5983
5984 case "$d_longdbl$d_modfl" in
5985 $define$define)
5986         $cat <<EOM
5987 Checking to see whether your modfl() is okay for large values...
5988 EOM
5989 $cat >try.c <<EOCP
5990 #include <math.h> 
5991 #include <stdio.h>
5992 int main() {
5993     long double nv = 4294967303.15;
5994     long double v, w;
5995     v = modfl(nv, &w);         
5996 #ifdef __GLIBC__
5997     printf("glibc");
5998 #endif
5999     printf(" %"$sPRIfldbl" %"$sPRIfldbl" %"$sPRIfldbl"\n", nv, v, w);
6000     return 0;
6001 }
6002 EOCP
6003         case "$osname:$gccversion" in
6004         aix:)   saveccflags="$ccflags"
6005                 ccflags="$ccflags -qlongdouble" ;; # to avoid core dump
6006         esac
6007         set try
6008         if eval $compile; then
6009                 foo=`$run ./try`
6010                 case "$foo" in
6011                 *" 4294967303.150000 1.150000 4294967302.000000")
6012                         echo >&4 "Your modfl() is broken for large values."
6013                         d_modfl_pow32_bug="$define"
6014                         case "$foo" in
6015                         glibc)  echo >&4 "You should upgrade your glibc to at least 2.2.2 to get a fixed modfl()."
6016                         ;;
6017                         esac
6018                         ;;
6019                 *" 4294967303.150000 0.150000 4294967303.000000")
6020                         echo >&4 "Your modfl() seems okay for large values."
6021                         ;;
6022                 *)      echo >&4 "I don't understand your modfl() at all."
6023                         d_modfl="$undef"
6024                         ;;
6025                 esac
6026                 $rm -f try.* try core core.try.*
6027         else
6028                 echo "I cannot figure out whether your modfl() is okay, assuming it isn't."
6029                 d_modfl="$undef"
6030         fi
6031         case "$osname:$gccversion" in
6032         aix:)   ccflags="$saveccflags" ;; # restore
6033         esac
6034         ;;
6035 esac
6036
6037 case "$ccflags" in
6038 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
6039 esac
6040
6041 case "$uselongdouble" in
6042 $define|true|[yY]*)     dflt='y';;
6043 *) dflt='n';;
6044 esac
6045 cat <<EOM
6046
6047 Perl can be built to take advantage of long doubles which
6048 (if available) may give more accuracy and range for floating point numbers.
6049
6050 If this doesn't make any sense to you, just accept the default '$dflt'.
6051 EOM
6052 rp='Try to use long doubles if available?'
6053 . ./myread
6054 case "$ans" in
6055 y|Y)    val="$define"   ;;
6056 *)      val="$undef"    ;;
6057 esac
6058 set uselongdouble
6059 eval $setvar
6060
6061 case "$uselongdouble" in
6062 true|[yY]*) uselongdouble="$define" ;;
6063 esac
6064
6065 case "$uselongdouble" in
6066 $define)
6067 : Look for a hint-file generated 'call-back-unit'.  If the
6068 : user has specified that long doubles should be used,
6069 : we may need to set or change some other defaults.
6070         if $test -f uselongdouble.cbu; then
6071                 echo "Your platform has some specific hints for long doubles, using them..."
6072                 . ./uselongdouble.cbu
6073         else
6074                 $cat <<EOM
6075 (Your platform doesn't have any specific hints for long doubles.)
6076 EOM
6077         fi
6078         ;;
6079 esac
6080
6081 message=X
6082 case "$uselongdouble:$d_sqrtl:$d_modfl" in
6083 $define:$define:$define)
6084         : You have both
6085         ;;
6086 $define:$define:$undef)
6087         message="I could not find modfl"
6088         ;;
6089 $define:$undef:$define)
6090         message="I could not find sqrtl"
6091         ;;
6092 $define:$undef:$undef)
6093         message="I found neither sqrtl nor modfl"
6094         ;;
6095 esac
6096
6097 if $test "$message" != X; then
6098         $cat <<EOM >&4
6099
6100 *** You requested the use of long doubles but you do not seem to have
6101 *** the mathematic functions for long doubles.
6102 *** ($message)
6103 *** I'm disabling the use of long doubles.
6104
6105 EOM
6106
6107         uselongdouble=$undef
6108 fi
6109
6110 case "$useperlio" in
6111 $define|true|[yY]*|'')  dflt='y';;
6112 *) dflt='n';;
6113 esac
6114 cat <<EOM
6115
6116 Previous version of $package used the standard IO mechanisms as
6117 defined in <stdio.h>.  Versions 5.003_02 and later of $package allow
6118 alternate IO mechanisms via the PerlIO abstraction layer, but the
6119 stdio mechanism is still available if needed.  The abstraction layer
6120 can use AT&T's sfio (if you already have sfio installed) or regular stdio.
6121 Using PerlIO with sfio may cause problems with some extension modules.
6122
6123 If this doesn't make any sense to you, just accept the default '$dflt'.
6124 EOM
6125 rp='Use the PerlIO abstraction layer?'
6126 . ./myread
6127 case "$ans" in
6128 y|Y) 
6129         val="$define"
6130         ;;
6131 *)      
6132         echo "Ok, doing things the stdio way."
6133         val="$undef"
6134         ;;
6135 esac
6136 set useperlio
6137 eval $setvar 
6138
6139 case "$usesocks" in
6140 $define|true|[yY]*)
6141         case "$useperlio" in
6142         $define|true|[yY]*) ;;
6143         *)      cat >&4 <<EOM
6144
6145 You are using the SOCKS proxy protocol library which means that you
6146 should also use the PerlIO layer.  You may be headed for trouble.
6147
6148 EOM
6149                 ;;
6150         esac
6151         ;;
6152 esac
6153
6154         
6155 : determine the architecture name
6156 echo " "
6157 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
6158         tarch=`arch`"-$osname"
6159 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
6160         if uname -m > tmparch 2>&1 ; then
6161                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
6162                         -e 's/$/'"-$osname/" tmparch`
6163         else
6164                 tarch="$osname"
6165         fi
6166         $rm -f tmparch
6167 else
6168         tarch="$osname"
6169 fi
6170 case "$myarchname" in
6171 ''|"$tarch") ;;
6172 *)
6173         echo "(Your architecture name used to be $myarchname.)"
6174         archname=''
6175         ;;
6176 esac
6177 case "$targetarch" in
6178 '') ;;
6179 *)  archname=`echo $targetarch|sed 's,^[^-]*-,,'` ;;
6180 esac
6181 myarchname="$tarch"
6182 case "$archname" in
6183 '') dflt="$tarch";;
6184 *) dflt="$archname";;
6185 esac
6186 rp='What is your architecture name'
6187 . ./myread
6188 archname="$ans"
6189 case "$usethreads" in
6190 $define)
6191         echo "Threads selected." >&4
6192         case "$archname" in
6193         *-thread*) echo "...and architecture name already has -thread." >&4
6194                 ;;
6195         *)      archname="$archname-thread"
6196                 echo "...setting architecture name to $archname." >&4
6197                 ;;
6198         esac
6199         ;;
6200 esac
6201 case "$usemultiplicity" in
6202 $define)
6203         echo "Multiplicity selected." >&4
6204         case "$archname" in
6205         *-multi*) echo "...and architecture name already has -multi." >&4
6206                 ;;
6207         *)      archname="$archname-multi"
6208                 echo "...setting architecture name to $archname." >&4
6209                 ;;
6210         esac
6211         ;;
6212 esac
6213 case "$use64bitint$use64bitall" in
6214 *"$define"*)
6215         case "$archname64" in
6216         '')
6217                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
6218                 ;;
6219         *)
6220                 case "$use64bitint" in
6221                 "$define") echo "64 bit integers selected." >&4 ;;
6222                 esac
6223                 case "$use64bitall" in
6224                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
6225                 esac
6226                 case "$archname" in
6227                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
6228                         ;;
6229                 *)      archname="$archname-$archname64"
6230                         echo "...setting architecture name to $archname." >&4
6231                         ;;
6232                 esac
6233                 ;;
6234         esac
6235 esac
6236 case "$uselongdouble" in
6237 $define)
6238         echo "Long doubles selected." >&4
6239         case "$longdblsize" in
6240         $doublesize)
6241                 echo "...but long doubles are equal to doubles, not changing architecture name." >&4
6242                 ;;
6243         *)
6244                 case "$archname" in
6245                 *-ld*) echo "...and architecture name already has -ld." >&4
6246                         ;;
6247                 *)      archname="$archname-ld"
6248                         echo "...setting architecture name to $archname." >&4
6249                         ;;
6250                 esac
6251                 ;;
6252         esac
6253         ;;
6254 esac
6255 case "$useperlio" in
6256 $define)
6257         echo "Perlio selected." >&4
6258         ;;
6259 *)
6260         echo "Perlio not selected, using stdio." >&4
6261         case "$archname" in
6262         *-stdio*) echo "...and architecture name already has -stdio." >&4
6263                 ;;
6264         *)      archname="$archname-stdio"
6265                 echo "...setting architecture name to $archname." >&4
6266                 ;;
6267         esac
6268         ;;
6269 esac
6270
6271 : determine root of directory hierarchy where package will be installed.
6272 case "$prefix" in
6273 '')
6274         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
6275         ;;
6276 *)
6277         dflt="$prefix"
6278         ;;
6279 esac
6280 $cat <<EOM
6281
6282 By default, $package will be installed in $dflt/bin, manual pages
6283 under $dflt/man, etc..., i.e. with $dflt as prefix for all
6284 installation directories. Typically this is something like /usr/local.
6285 If you wish to have binaries under /usr/bin but other parts of the
6286 installation under /usr/local, that's ok: you will be prompted
6287 separately for each of the installation directories, the prefix being
6288 only used to set the defaults.
6289
6290 EOM
6291 fn=d~
6292 rp='Installation prefix to use?'
6293 . ./getfile
6294 oldprefix=''
6295 case "$prefix" in
6296 '') ;;
6297 *)
6298         case "$ans" in
6299         "$prefix") ;;
6300         *) oldprefix="$prefix";;
6301         esac
6302         ;;
6303 esac
6304 prefix="$ans"
6305 prefixexp="$ansexp"
6306
6307 case "$afsroot" in
6308 '')     afsroot=/afs ;;
6309 *)      afsroot=$afsroot ;;
6310 esac
6311
6312 : is AFS running?
6313 echo " "
6314 case "$afs" in
6315 $define|true)   afs=true ;;
6316 $undef|false)   afs=false ;;
6317 *)      if test -d $afsroot; then
6318                 afs=true
6319         else
6320                 afs=false
6321         fi
6322         ;;
6323 esac
6324 if $afs; then
6325         echo "AFS may be running... I'll be extra cautious then..." >&4
6326 else
6327         echo "AFS does not seem to be running..." >&4
6328 fi
6329
6330 : determine installation prefix for where package is to be installed.
6331 if $afs; then 
6332 $cat <<EOM
6333
6334 Since you are running AFS, I need to distinguish the directory in which
6335 files will reside from the directory in which they are installed (and from
6336 which they are presumably copied to the former directory by occult means).
6337
6338 EOM
6339         case "$installprefix" in
6340         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
6341         *) dflt="$installprefix";;
6342         esac
6343 else
6344 $cat <<EOM
6345
6346 In some special cases, particularly when building $package for distribution,
6347 it is convenient to distinguish between the directory in which files should 
6348 be installed from the directory ($prefix) in which they 
6349 will eventually reside.  For most users, these two directories are the same.
6350
6351 EOM
6352         case "$installprefix" in
6353         '') dflt=$prefix ;;
6354         *) dflt=$installprefix;;
6355         esac
6356 fi
6357 fn=d~
6358 rp='What installation prefix should I use for installing files?'
6359 . ./getfile
6360 installprefix="$ans"
6361 installprefixexp="$ansexp"
6362
6363 : set the prefixit variable, to compute a suitable default value
6364 prefixit='case "$3" in
6365 ""|none)
6366         case "$oldprefix" in
6367         "") eval "$1=\"\$$2\"";;
6368         *)
6369                 case "$3" in
6370                 "") eval "$1=";;
6371                 none)
6372                         eval "tp=\"\$$2\"";
6373                         case "$tp" in
6374                         ""|" ") eval "$1=\"\$$2\"";;
6375                         *) eval "$1=";;
6376                         esac;;
6377                 esac;;
6378         esac;;
6379 *)
6380         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
6381         case "$tp" in
6382         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
6383         /*-$oldprefix/*|\~*-$oldprefix/*)
6384                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
6385         *) eval "$1=\"\$$2\"";;
6386         esac;;
6387 esac'
6388
6389 : get the patchlevel
6390 echo " "
6391 echo "Getting the current patchlevel..." >&4
6392 if $test -r $rsrc/patchlevel.h;then
6393         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
6394         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
6395         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6396         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
6397         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
6398         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6399        perl_patchlevel=`grep ',"DEVEL[0-9][0-9]*"' $rsrc/patchlevel.h|sed 's/[^0-9]//g'`
6400 else
6401         revision=0
6402         patchlevel=0
6403         subversion=0
6404         api_revision=0
6405         api_version=0
6406         api_subversion=0
6407         perl_patchlevel=0
6408         $echo "(You do not have patchlevel.h.  Eek.)"
6409 fi
6410 if $test -r $rsrc/.patch ; then  
6411         if $test "`cat $rsrc/.patch`" -gt "$perl_patchlevel" ; then
6412                 perl_patchlevel=`cat $rsrc/.patch`
6413         fi
6414 fi
6415 : Define a handy string here to avoid duplication in myconfig.SH and configpm.
6416 version_patchlevel_string="version $patchlevel subversion $subversion"
6417 case "$perl_patchlevel" in
6418 0|'') ;;
6419 *) version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel" ;;
6420 esac
6421
6422 $echo "(You have $package $version_patchlevel_string.)"
6423
6424 case "$osname" in
6425 dos|vms)
6426         : XXX Should be a Configure test for double-dots in filenames.
6427         version=`echo $revision $patchlevel $subversion | \
6428                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6429         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6430                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6431         ;;
6432 *)
6433         version=`echo $revision $patchlevel $subversion | \
6434                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6435         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6436                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6437         ;;
6438 esac
6439 : Special case the 5.005_xx maintenance series, which used 5.005
6440 : without any subversion label as a subdirectory in $sitelib
6441 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
6442         api_versionstring='5.005'
6443 fi
6444
6445 : determine installation style
6446 : For now, try to deduce it from prefix unless it is already set.
6447 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
6448 case "$installstyle" in
6449 '')     case "$prefix" in
6450                 *perl*) dflt='lib';;
6451                 *) dflt='lib/perl5' ;;
6452         esac
6453         ;;
6454 *)      dflt="$installstyle" ;;
6455 esac
6456 : Probably not worth prompting for this since we prompt for all
6457 : the directories individually, and the prompt would be too long and
6458 : confusing anyway.
6459 installstyle=$dflt
6460
6461 : determine where private library files go
6462 : Usual default is /usr/local/lib/perl5/$version.
6463 : Also allow things like /opt/perl/lib/$version, since 
6464 : /opt/perl/lib/perl5... would be redundant.
6465 : The default "style" setting is made in installstyle.U
6466 case "$installstyle" in
6467 *lib/perl5*) set dflt privlib lib/$package/$version ;;
6468 *)       set dflt privlib lib/$version ;;
6469 esac
6470 eval $prefixit
6471 $cat <<EOM
6472
6473 There are some auxiliary files for $package that need to be put into a
6474 private library directory that is accessible by everyone.
6475
6476 EOM
6477 fn=d~+
6478 rp='Pathname where the private library files will reside?'
6479 . ./getfile
6480 privlib="$ans"
6481 privlibexp="$ansexp"
6482 : Change installation prefix, if necessary.
6483 if $test X"$prefix" != X"$installprefix"; then
6484         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
6485 else
6486         installprivlib="$privlibexp"
6487 fi
6488
6489 : set the prefixup variable, to restore leading tilda escape
6490 prefixup='case "$prefixexp" in
6491 "$prefix") ;;
6492 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
6493 esac'
6494
6495 : determine where public architecture dependent libraries go
6496 set archlib archlib
6497 eval $prefixit
6498 : privlib default is /usr/local/lib/$package/$version
6499 : archlib default is /usr/local/lib/$package/$version/$archname
6500 : privlib may have an optional trailing /share.
6501 tdflt=`echo $privlib | $sed 's,/share$,,'`
6502 tdflt=$tdflt/$archname
6503 case "$archlib" in
6504 '')     dflt=$tdflt
6505         ;;
6506 *)      dflt="$archlib"
6507     ;;
6508 esac
6509 $cat <<EOM
6510
6511 $spackage contains architecture-dependent library files.  If you are
6512 sharing libraries in a heterogeneous environment, you might store
6513 these files in a separate location.  Otherwise, you can just include
6514 them with the rest of the public library files.
6515
6516 EOM
6517 fn=d+~
6518 rp='Where do you want to put the public architecture-dependent libraries?'
6519 . ./getfile
6520 archlib="$ans"
6521 archlibexp="$ansexp"
6522 if $test X"$archlib" = X"$privlib"; then
6523         d_archlib="$undef"
6524 else
6525         d_archlib="$define"
6526 fi
6527 : Change installation prefix, if necessary.
6528 if $test X"$prefix" != X"$installprefix"; then
6529         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
6530 else
6531         installarchlib="$archlibexp"
6532 fi
6533
6534
6535 : Binary compatibility with 5.005 is not possible for builds
6536 : with advanced features
6537 case "$usethreads$usemultiplicity" in
6538 *define*)
6539         bincompat5005="$undef"
6540         d_bincompat5005="$undef"
6541         ;;
6542 *)      $cat <<EOM
6543
6544 This version of Perl can be compiled for binary compatibility with 5.005.
6545 If you decide to do so, you will be able to continue using most of the
6546 extensions that were compiled for Perl 5.005.
6547
6548 EOM
6549         case "$bincompat5005$d_bincompat5005" in
6550         *"$undef"*) dflt=n ;;
6551         *) dflt=y ;;
6552         esac
6553         rp='Binary compatibility with Perl 5.005?'
6554         . ./myread
6555         case "$ans" in
6556         y*) val="$define" ;;
6557         *)  val="$undef" ;;
6558         esac
6559         set d_bincompat5005
6560         eval $setvar
6561         case "$d_bincompat5005" in
6562         "$define")
6563                 bincompat5005="$define"
6564                 ;;
6565         *)      bincompat5005="$undef"
6566                 d_bincompat5005="$undef"
6567                 ;;
6568         esac
6569         ;;
6570 esac
6571
6572
6573 : see if setuid scripts can be secure
6574 $cat <<EOM
6575
6576 Some kernels have a bug that prevents setuid #! scripts from being
6577 secure.  Some sites have disabled setuid #! scripts because of this.
6578
6579 First let's decide if your kernel supports secure setuid #! scripts.
6580 (If setuid #! scripts would be secure but have been disabled anyway,
6581 don't say that they are secure if asked.)
6582
6583 EOM
6584
6585 val="$undef"
6586 if $test -d /dev/fd; then
6587         echo "#!$ls" >reflect
6588         chmod +x,u+s reflect
6589         ./reflect >flect 2>&1
6590         if $contains "/dev/fd" flect >/dev/null; then
6591                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
6592                 val="$define"
6593         else
6594                 $cat <<EOM
6595 If you are not sure if they are secure, I can check but I'll need a
6596 username and password different from the one you are using right now.
6597 If you don't have such a username or don't want me to test, simply
6598 enter 'none'.
6599
6600 EOM
6601                 rp='Other username to test security of setuid scripts with?'
6602                 dflt='none'
6603                 . ./myread
6604                 case "$ans" in
6605                 n|none)
6606                         case "$d_suidsafe" in
6607                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
6608                                 dflt=n;;
6609                         "$undef")
6610                                 echo "Well, the $hint value is *not* secure." >&4
6611                                 dflt=n;;
6612                         *)      echo "Well, the $hint value *is* secure." >&4
6613                                 dflt=y;;
6614                         esac
6615                         ;;
6616                 *)
6617                         $rm -f reflect flect
6618                         echo "#!$ls" >reflect
6619                         chmod +x,u+s reflect
6620                         echo >flect
6621                         chmod a+w flect
6622                         echo '"su" will (probably) prompt you for '"$ans's password."
6623                         su $ans -c './reflect >flect'
6624                         if $contains "/dev/fd" flect >/dev/null; then
6625                                 echo "Okay, it looks like setuid scripts are secure." >&4
6626                                 dflt=y
6627                         else
6628                                 echo "I don't think setuid scripts are secure." >&4
6629                                 dflt=n
6630                         fi
6631                         ;;
6632                 esac
6633                 rp='Does your kernel have *secure* setuid scripts?'
6634                 . ./myread
6635                 case "$ans" in
6636                 [yY]*)  val="$define";;
6637                 *)      val="$undef";;
6638                 esac
6639         fi
6640 else
6641         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
6642         echo "(That's for file descriptors, not floppy disks.)"
6643         val="$undef"
6644 fi
6645 set d_suidsafe
6646 eval $setvar
6647
6648 $rm -f reflect flect
6649
6650 : now see if they want to do setuid emulation
6651 echo " "
6652 val="$undef"
6653 case "$d_suidsafe" in
6654 "$define")
6655         val="$undef"
6656         echo "No need to emulate SUID scripts since they are secure here." >&4
6657         ;;
6658 *)
6659         $cat <<EOM
6660 Some systems have disabled setuid scripts, especially systems where
6661 setuid scripts cannot be secure.  On systems where setuid scripts have
6662 been disabled, the setuid/setgid bits on scripts are currently
6663 useless.  It is possible for $package to detect those bits and emulate
6664 setuid/setgid in a secure fashion.  This emulation will only work if
6665 setuid scripts have been disabled in your kernel.
6666
6667 EOM
6668         case "$d_dosuid" in
6669         "$define") dflt=y ;;
6670         *) dflt=n ;;
6671         esac
6672         rp="Do you want to do setuid/setgid emulation?"
6673         . ./myread
6674         case "$ans" in
6675         [yY]*)  val="$define";;
6676         *)      val="$undef";;
6677         esac
6678         ;;
6679 esac
6680 set d_dosuid
6681 eval $setvar
6682
6683 : see if this is a malloc.h system
6684 set malloc.h i_malloc
6685 eval $inhdr
6686
6687 : see if stdlib is available
6688 set stdlib.h i_stdlib
6689 eval $inhdr
6690
6691 : determine which malloc to compile in
6692 echo " "
6693 case "$usemymalloc" in
6694 [yY]*|true|$define)     dflt='y' ;;
6695 [nN]*|false|$undef)     dflt='n' ;;
6696 *)      case "$ptrsize" in
6697         4) dflt='y' ;;
6698         *) dflt='n' ;;
6699         esac
6700         ;;
6701 esac
6702 rp="Do you wish to attempt to use the malloc that comes with $package?"
6703 . ./myread
6704 usemymalloc="$ans"
6705 case "$ans" in
6706 y*|true)
6707         usemymalloc='y'
6708         mallocsrc='malloc.c'
6709         mallocobj="malloc$_o"
6710         d_mymalloc="$define"
6711         case "$libs" in
6712         *-lmalloc*)
6713                 : Remove malloc from list of libraries to use
6714                 echo "Removing unneeded -lmalloc from library list" >&4
6715                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
6716                 shift
6717                 libs="$*"
6718                 echo "libs = $libs" >&4
6719                 ;;
6720         esac
6721         ;;
6722 *)
6723         usemymalloc='n'
6724         mallocsrc=''
6725         mallocobj=''
6726         d_mymalloc="$undef"
6727         ;;
6728 esac
6729
6730 : compute the return types of malloc and free
6731 echo " "
6732 $cat >malloc.c <<END
6733 #$i_malloc I_MALLOC
6734 #$i_stdlib I_STDLIB
6735 #include <stdio.h>
6736 #include <sys/types.h>
6737 #ifdef I_MALLOC
6738 #include <malloc.h>
6739 #endif
6740 #ifdef I_STDLIB
6741 #include <stdlib.h>
6742 #endif
6743 #ifdef TRY_MALLOC
6744 void *malloc();
6745 #endif
6746 #ifdef TRY_FREE
6747 void free();
6748 #endif
6749 END
6750 case "$malloctype" in
6751 '')
6752         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
6753                 malloctype='void *'
6754         else
6755                 malloctype='char *'
6756         fi
6757         ;;
6758 esac
6759 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6760
6761 case "$freetype" in
6762 '')
6763         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6764                 freetype='void'
6765         else
6766                 freetype='int'
6767         fi
6768         ;;
6769 esac
6770 echo "Your system uses $freetype free(), it would seem." >&4
6771 $rm -f malloc.[co]
6772 $cat <<EOM
6773
6774 After $package is installed, you may wish to install various
6775 add-on modules and utilities.  Typically, these add-ons will
6776 be installed under $prefix with the rest
6777 of this package.  However, you may wish to install such add-ons
6778 elsewhere under a different prefix.
6779
6780 If you do not wish to put everything under a single prefix, that's
6781 ok.  You will be prompted for the individual locations; this siteprefix
6782 is only used to suggest the defaults.
6783
6784 The default should be fine for most people.
6785
6786 EOM
6787 fn=d~+
6788 rp='Installation prefix to use for add-on modules and utilities?'
6789 : XXX Here might be another good place for an installstyle setting.
6790 case "$siteprefix" in
6791 '') dflt=$prefix ;;
6792 *)  dflt=$siteprefix ;;
6793 esac
6794 . ./getfile
6795 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6796 oldsiteprefix=''
6797 case "$siteprefix" in
6798 '') ;;
6799 *)      case "$ans" in
6800         "$prefix") ;;
6801         *) oldsiteprefix="$prefix";;
6802         esac
6803         ;;
6804 esac
6805 siteprefix="$ans"
6806 siteprefixexp="$ansexp"
6807
6808 : determine where site specific libraries go.
6809 : Usual default is /usr/local/lib/perl5/site_perl/$version
6810 : The default "style" setting is made in installstyle.U
6811 : XXX No longer works with Prefixit stuff.
6812 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6813 case "$sitelib" in
6814 '') case "$installstyle" in
6815         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
6816         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
6817         esac
6818         ;;
6819 *)      dflt="$sitelib"
6820         ;;
6821 esac
6822 $cat <<EOM
6823
6824 The installation process will create a directory for
6825 site-specific extensions and modules.  Most users find it convenient
6826 to place all site-specific files in this directory rather than in the
6827 main distribution directory.
6828
6829 EOM
6830 fn=d~+
6831 rp='Pathname for the site-specific library files?'
6832 . ./getfile
6833 sitelib="$ans"
6834 sitelibexp="$ansexp"
6835 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
6836 : Change installation prefix, if necessary.
6837 if $test X"$prefix" != X"$installprefix"; then
6838         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
6839 else
6840         installsitelib="$sitelibexp"
6841 fi
6842
6843 : determine where site specific architecture-dependent libraries go.
6844 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
6845 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6846 : sitelib may have an optional trailing /share.
6847 case "$sitearch" in
6848 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
6849         dflt="$dflt/$archname"
6850         ;;
6851 *)      dflt="$sitearch"
6852         ;;
6853 esac
6854 set sitearch sitearch none
6855 eval $prefixit
6856 $cat <<EOM
6857
6858 The installation process will also create a directory for
6859 architecture-dependent site-specific extensions and modules.
6860
6861 EOM
6862 fn=d~+
6863 rp='Pathname for the site-specific architecture-dependent library files?'
6864 . ./getfile
6865 sitearch="$ans"
6866 sitearchexp="$ansexp"
6867 : Change installation prefix, if necessary.
6868 if $test X"$prefix" != X"$installprefix"; then
6869         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6870 else
6871         installsitearch="$sitearchexp"
6872 fi
6873
6874 $cat <<EOM
6875
6876 The installation process will also create a directory for
6877 vendor-supplied add-ons.  Vendors who supply perl with their system
6878 may find it convenient to place all vendor-supplied files in this
6879 directory rather than in the main distribution directory.  This will
6880 ease upgrades between binary-compatible maintenance versions of perl.
6881
6882 Of course you may also use these directories in whatever way you see
6883 fit.  For example, you might use them to access modules shared over a
6884 company-wide network.
6885
6886 The default answer should be fine for most people.
6887 This causes further questions about vendor add-ons to be skipped
6888 and no vendor-specific directories will be configured for perl.
6889
6890 EOM
6891 rp='Do you want to configure vendor-specific add-on directories?'
6892 case "$usevendorprefix" in
6893 define|true|[yY]*) dflt=y ;;
6894 *)      : User may have set vendorprefix directly on Configure command line.
6895         case "$vendorprefix" in
6896         ''|' ') dflt=n ;;
6897         *)      dflt=y ;;
6898         esac
6899         ;;
6900 esac
6901 . ./myread
6902 case "$ans" in
6903 [yY]*)  fn=d~+
6904         rp='Installation prefix to use for vendor-supplied add-ons?'
6905         case "$vendorprefix" in
6906         '') dflt='' ;;
6907         *)  dflt=$vendorprefix ;;
6908         esac
6909         . ./getfile
6910         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6911         oldvendorprefix=''
6912         case "$vendorprefix" in
6913         '') ;;
6914         *)      case "$ans" in
6915                 "$prefix") ;;
6916                 *) oldvendorprefix="$prefix";;
6917                 esac
6918                 ;;
6919         esac
6920         usevendorprefix="$define"
6921         vendorprefix="$ans"
6922         vendorprefixexp="$ansexp"
6923         ;;
6924 *)      usevendorprefix="$undef"
6925         vendorprefix=''
6926         vendorprefixexp=''
6927         ;;
6928 esac
6929
6930 case "$vendorprefix" in
6931 '')     d_vendorlib="$undef"
6932         vendorlib=''
6933         vendorlibexp=''
6934         ;;
6935 *)      d_vendorlib="$define"
6936         : determine where vendor-supplied modules go.
6937         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6938         case "$vendorlib" in
6939         '')
6940                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6941                 case "$installstyle" in
6942                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6943                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6944                 esac
6945                 ;;
6946         *)      dflt="$vendorlib"
6947                 ;;
6948         esac
6949         fn=d~+
6950         rp='Pathname for the vendor-supplied library files?'
6951         . ./getfile
6952         vendorlib="$ans"
6953         vendorlibexp="$ansexp"
6954         ;;
6955 esac
6956 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6957 : Change installation prefix, if necessary.
6958 if $test X"$prefix" != X"$installprefix"; then
6959         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6960 else
6961         installvendorlib="$vendorlibexp"
6962 fi
6963
6964 case "$vendorprefix" in
6965 '')     d_vendorarch="$undef"
6966         vendorarch=''
6967         vendorarchexp=''
6968         ;;
6969 *)      d_vendorarch="$define"
6970         : determine where vendor-supplied architecture-dependent libraries go.
6971         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
6972         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6973         : vendorlib may have an optional trailing /share.
6974         case "$vendorarch" in
6975         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
6976                 dflt="$dflt/$archname"
6977                 ;;
6978         *)      dflt="$vendorarch" ;;
6979         esac
6980         fn=d~+
6981         rp='Pathname for vendor-supplied architecture-dependent files?'
6982         . ./getfile
6983         vendorarch="$ans"
6984         vendorarchexp="$ansexp"
6985         ;;
6986 esac
6987 : Change installation prefix, if necessary.
6988 if $test X"$prefix" != X"$installprefix"; then
6989         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6990 else
6991         installvendorarch="$vendorarchexp"
6992 fi
6993
6994 : Final catch-all directories to search
6995 $cat <<EOM
6996
6997 Lastly, you can have perl look in other directories for extensions and
6998 modules in addition to those already specified.
6999 These directories will be searched after 
7000         $sitearch 
7001         $sitelib 
7002 EOM
7003 test X"$vendorlib" != "X" && echo '     ' $vendorlib
7004 test X"$vendorarch" != "X" && echo '    ' $vendorarch
7005 echo ' '
7006 case "$otherlibdirs" in
7007 ''|' ') dflt='none' ;;
7008 *)      dflt="$otherlibdirs" ;;
7009 esac
7010 $cat <<EOM
7011 Enter a colon-separated set of extra paths to include in perl's @INC
7012 search path, or enter 'none' for no extra paths.
7013
7014 EOM
7015
7016 rp='Colon-separated list of additional directories for perl to search?'
7017 . ./myread
7018 case "$ans" in
7019 ' '|''|none)    otherlibdirs=' ' ;;     
7020 *)      otherlibdirs="$ans" ;;
7021 esac
7022 case "$otherlibdirs" in
7023 ' ') val=$undef ;;
7024 *)      val=$define ;;
7025 esac
7026 set d_perl_otherlibdirs
7027 eval $setvar
7028
7029 : Cruising for prototypes
7030 echo " "
7031 echo "Checking out function prototypes..." >&4
7032 $cat >prototype.c <<'EOCP'
7033 int main(int argc, char *argv[]) {
7034         exit(0);}
7035 EOCP
7036 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
7037         echo "Your C compiler appears to support function prototypes."
7038         val="$define"
7039 else
7040         echo "Your C compiler doesn't seem to understand function prototypes."
7041         val="$undef"
7042 fi
7043 set prototype
7044 eval $setvar
7045 $rm -f prototype*
7046
7047 case "$prototype" in
7048 "$define") ;;
7049 *)      ansi2knr='ansi2knr'
7050         echo " "
7051         cat <<EOM >&4
7052
7053 $me:  FATAL ERROR:
7054 This version of $package can only be compiled by a compiler that 
7055 understands function prototypes.  Unfortunately, your C compiler 
7056         $cc $ccflags
7057 doesn't seem to understand them.  Sorry about that.
7058
7059 If GNU cc is available for your system, perhaps you could try that instead.  
7060
7061 Eventually, we hope to support building Perl with pre-ANSI compilers.
7062 If you would like to help in that effort, please contact <perlbug@perl.org>.
7063
7064 Aborting Configure now.
7065 EOM
7066         exit 2
7067         ;;
7068 esac
7069
7070 : determine where public executables go
7071 echo " "
7072 set dflt bin bin
7073 eval $prefixit
7074 fn=d~
7075 rp='Pathname where the public executables will reside?'
7076 . ./getfile
7077 if $test "X$ansexp" != "X$binexp"; then
7078         installbin=''
7079 fi
7080 bin="$ans"
7081 binexp="$ansexp"
7082 : Change installation prefix, if necessary.
7083 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
7084 if $test X"$prefix" != X"$installprefix"; then
7085         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
7086 else
7087         installbin="$binexp"
7088 fi
7089
7090 echo " "
7091 case "$extras" in
7092 '') dflt='n';;
7093 *) dflt='y';;
7094 esac
7095 cat <<EOM
7096 Perl can be built with extra modules or bundles of modules which
7097 will be fetched from the CPAN and installed alongside Perl.
7098
7099 Notice that you will need access to the CPAN; either via the Internet,
7100 or a local copy, for example a CD-ROM or a local CPAN mirror.  (You will
7101 be asked later to configure the CPAN.pm module which will in turn do
7102 the installation of the rest of the extra modules or bundles.)
7103
7104 Notice also that if the modules require any external software such as
7105 libraries and headers (the libz library and the zlib.h header for the
7106 Compress::Zlib module, for example) you MUST have any such software
7107 already installed, this configuration process will NOT install such
7108 things for you.
7109
7110 If this doesn't make any sense to you, just accept the default '$dflt'.
7111 EOM
7112 rp='Install any extra modules (y or n)?'
7113 . ./myread
7114 case "$ans" in
7115 y|Y)
7116         cat <<EOM
7117
7118 Please list any extra modules or bundles to be installed from CPAN,
7119 with spaces between the names.  The names can be in any format the
7120 'install' command of CPAN.pm will understand.  (Answer 'none',
7121 without the quotes, to install no extra modules or bundles.)
7122 EOM
7123         rp='Extras?'
7124         dflt="$extras"
7125         . ./myread
7126         extras="$ans"
7127 esac
7128 case "$extras" in
7129 ''|'none')
7130         val=''
7131         $rm -f ../extras.lst
7132         ;;
7133 *)      echo "(Saving the list of extras for later...)"
7134         echo "$extras" > ../extras.lst
7135         val="'$extras'"
7136         ;;
7137 esac
7138 set extras
7139 eval $setvar
7140 echo " "
7141
7142 : Find perl5.005 or later.
7143 echo "Looking for a previously installed perl5.005 or later... "
7144 case "$perl5" in
7145 '')     for tdir in `echo "$binexp$path_sep$PATH" | $sed "s/$path_sep/ /g"`; do
7146                 : Check if this perl is recent and can load a simple module
7147                 if $test -x $tdir/perl$exe_ext && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
7148                         perl5=$tdir/perl
7149                         break;
7150                 elif $test -x $tdir/perl5$exe_ext && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
7151                         perl5=$tdir/perl5
7152                         break;
7153                 fi
7154         done
7155         ;;
7156 *)      perl5="$perl5"
7157         ;;
7158 esac
7159 case "$perl5" in
7160 '')     echo "None found.  That's ok.";;
7161 *)      echo "Using $perl5." ;;
7162 esac
7163
7164 : Determine list of previous versions to include in @INC
7165 $cat > getverlist <<EOPL
7166 #!$perl5 -w
7167 use File::Basename;
7168 \$api_versionstring = "$api_versionstring";
7169 \$version = "$version";
7170 \$stem = "$sitelib_stem";
7171 \$archname = "$archname";
7172 EOPL
7173         $cat >> getverlist <<'EOPL'
7174 # Can't have leading @ because metaconfig interprets it as a command!
7175 ;@inc_version_list=();
7176 # XXX Redo to do opendir/readdir? 
7177 if (-d $stem) {
7178     chdir($stem);
7179     ;@candidates = glob("5.*");
7180 }
7181 else {
7182     ;@candidates = ();
7183 }
7184
7185 # XXX ToDo:  These comparisons must be reworked when two-digit
7186 # subversions come along, so that 5.7.10 compares as greater than
7187 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
7188 # widespread that we can use the built-in version vectors rather
7189 # than reinventing them here.  For 5.6.0, however, we must
7190 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
7191 foreach $d (@candidates) {
7192     if ($d lt $version) {
7193         if ($d ge $api_versionstring) {
7194             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
7195         }
7196         elsif ($d ge "5.005") {
7197             unshift(@inc_version_list, grep { -d } $d);
7198         }
7199     }
7200     else {
7201         # Skip newer version.  I.e. don't look in
7202         # 5.7.0 if we're installing 5.6.1.
7203     }
7204 }
7205
7206 if (@inc_version_list) {
7207     print join(' ', @inc_version_list);
7208 }
7209 else {
7210     # Blank space to preserve value for next Configure run.
7211     print " ";
7212 }
7213 EOPL
7214 chmod +x getverlist
7215 case "$inc_version_list" in
7216 '')     if test -x "$perl5$exe_ext"; then
7217                 dflt=`$perl5 getverlist`
7218         else
7219                 dflt='none'
7220         fi
7221         ;;
7222 $undef) dflt='none' ;;
7223 *)  eval dflt=\"$inc_version_list\" ;;
7224 esac
7225 case "$dflt" in
7226 ''|' ') dflt=none ;;
7227 esac
7228 case "$dflt" in
7229 5.005) case "$bincompat5005" in
7230        $define|true|[yY]*) ;;
7231        *) dflt=none ;;
7232        esac
7233        ;;
7234 esac
7235 $cat <<'EOM'
7236
7237 In order to ease the process of upgrading, this version of perl 
7238 can be configured to use modules built and installed with earlier 
7239 versions of perl that were installed under $prefix.  Specify here
7240 the list of earlier versions that this version of perl should check.
7241 If Configure detected no earlier versions of perl installed under
7242 $prefix, then the list will be empty.  Answer 'none' to tell perl
7243 to not search earlier versions.
7244
7245 The default should almost always be sensible, so if you're not sure,
7246 just accept the default.
7247 EOM
7248
7249 rp='List of earlier versions to include in @INC?'
7250 . ./myread
7251 case "$ans" in
7252 [Nn]one|''|' ') inc_version_list=' ' ;;
7253 *) inc_version_list="$ans" ;;
7254 esac
7255 case "$inc_version_list" in
7256 ''|' ') 
7257         inc_version_list_init='0';;
7258 *)      inc_version_list_init=`echo $inc_version_list |
7259                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
7260         ;;
7261 esac
7262 $rm -f getverlist
7263
7264 : determine whether to install perl also as /usr/bin/perl
7265
7266 echo " "
7267 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
7268         $cat <<EOM
7269 Many scripts expect perl to be installed as /usr/bin/perl.
7270 I can install the perl you are about to compile also as /usr/bin/perl
7271 (in addition to $installbin/perl).
7272 EOM
7273         case "$installusrbinperl" in
7274         "$undef"|[nN]*) dflt='n';;
7275         *)              dflt='y';;
7276         esac
7277         rp="Do you want to install perl as /usr/bin/perl?"
7278         . ./myread
7279         case "$ans" in
7280         [yY]*)  val="$define";;
7281         *)      val="$undef" ;;
7282         esac
7283 else
7284         val="$undef"
7285 fi
7286 set installusrbinperl
7287 eval $setvar
7288
7289 : see if dld is available
7290 set dld.h i_dld
7291 eval $inhdr
7292
7293 : see if dlopen exists
7294 xxx_runnm="$runnm"
7295 runnm=false
7296 set dlopen d_dlopen
7297 eval $inlibc
7298 runnm="$xxx_runnm"
7299
7300 : determine which dynamic loading, if any, to compile in
7301 echo " "
7302 dldir="ext/DynaLoader"
7303 case "$usedl" in
7304 $define|y|true)
7305         dflt='y'
7306         usedl="$define"
7307         ;;
7308 $undef|n|false)
7309         dflt='n'
7310         usedl="$undef"
7311         ;;
7312 *) 
7313         dflt='n'
7314         case "$d_dlopen" in
7315             $define) dflt='y' ;;
7316         esac
7317         case "$i_dld" in
7318             $define) dflt='y' ;;
7319         esac
7320         : Does a dl_xxx.xs file exist for this operating system
7321         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
7322         ;;
7323 esac
7324 rp="Do you wish to use dynamic loading?"
7325 . ./myread
7326 usedl="$ans"
7327 case "$ans" in
7328 y*) usedl="$define"
7329         case "$dlsrc" in
7330         '')
7331                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
7332                         dflt="$dldir/dl_${osname}.xs"
7333                 elif $test "$d_dlopen" = "$define" ; then
7334                         dflt="$dldir/dl_dlopen.xs"
7335                 elif $test "$i_dld" = "$define" ; then
7336                         dflt="$dldir/dl_dld.xs"
7337                 else
7338                         dflt=''
7339                 fi
7340                 ;;
7341         *)      dflt="$dldir/$dlsrc"
7342                 ;;
7343         esac
7344     echo "The following dynamic loading files are available:"
7345         : Can not go over to $dldir because getfile has path hard-coded in.
7346         tdir=`pwd`; cd "$rsrc"; $ls -C $dldir/dl*.xs; cd "$tdir"
7347         rp="Source file to use for dynamic loading"
7348         fn="fne"
7349         gfpth="$src"
7350         . ./getfile
7351         usedl="$define"
7352         : emulate basename
7353         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
7354
7355         $cat << EOM
7356
7357 Some systems may require passing special flags to $cc -c to
7358 compile modules that will be used to create a shared library.
7359 To use no flags, say "none".
7360
7361 EOM
7362     case "$cccdlflags" in
7363     '') case "$gccversion" in
7364                 '') case "$osname" in
7365                         hpux)   dflt='+z' ;;
7366                         next)   dflt='none' ;;
7367                         irix*)  dflt='-KPIC' ;;
7368                         svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
7369                         sunos)  dflt='-pic' ;;
7370                         *)      dflt='none' ;;
7371                     esac
7372                         ;;
7373                 *)  case "$osname" in
7374                         darwin) dflt='none' ;;
7375                         svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
7376                         *)      dflt='-fpic' ;;
7377                     esac ;;
7378             esac ;;
7379         ' ') dflt='none' ;;
7380     *)  dflt="$cccdlflags" ;;
7381     esac
7382     rp="Any special flags to pass to $cc -c to compile shared library modules?"
7383     . ./myread
7384     case "$ans" in
7385     none) cccdlflags=' ' ;;
7386     *) cccdlflags="$ans" ;;
7387     esac
7388
7389     cat << EOM
7390
7391 Some systems use ld to create libraries that can be dynamically loaded,
7392 while other systems (such as those using ELF) use $cc.
7393
7394 EOM
7395         case "$ld" in
7396         '')     $cat >try.c <<'EOM'
7397 /* Test for whether ELF binaries are produced */
7398 #include <fcntl.h>
7399 #include <stdlib.h>
7400 int main() {
7401         char b[4];
7402         int i = open("a.out",O_RDONLY);
7403         if(i == -1) 
7404                 exit(1); /* fail */
7405         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
7406                 exit(0); /* succeed (yes, it's ELF) */
7407         else
7408                 exit(1); /* fail */
7409 }
7410 EOM
7411                 if $cc $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then
7412                         cat <<EOM
7413 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
7414 EOM
7415                         dflt="$cc"
7416                 else
7417                         echo "I'll use ld to build dynamic libraries."
7418                         dflt='ld'
7419                 fi
7420                 rm -f try.c a.out
7421                 ;;
7422         *)      dflt="$ld"
7423                 ;;
7424         esac
7425
7426     rp="What command should be used to create dynamic libraries?"
7427     . ./myread
7428         ld="$ans"
7429
7430     cat << EOM
7431
7432 Some systems may require passing special flags to $ld to create a
7433 library that can be dynamically loaded.  If your ld flags include
7434 -L/other/path options to locate libraries outside your loader's normal
7435 search path, you may need to specify those -L options here as well.  To
7436 use no flags, say "none".
7437
7438 EOM
7439     case "$lddlflags" in
7440     '') case "$osname" in
7441                         beos) dflt='-nostart' ;;
7442                         hpux) dflt='-b';
7443                               case "$gccversion" in
7444                               '') dflt="$dflt +vnocompatwarnings" ;;
7445                               esac
7446                               ;;        
7447                         linux|irix*)    dflt='-shared' ;;
7448                         next)  dflt='none' ;;
7449                         solaris) dflt='-G' ;;
7450                         sunos) dflt='-assert nodefinitions' ;;
7451                         svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
7452                 *)     dflt='none' ;;
7453                         esac
7454                         ;;
7455     *) dflt="$lddlflags" ;;
7456     esac
7457
7458         : Try to guess additional flags to pick up local libraries.
7459         : Be careful not to append to a plain 'none'
7460         case "$dflt" in
7461         none) dflt='' ;;
7462         esac
7463         for thisflag in $ldflags; do
7464                 case "$thisflag" in
7465                 -L*|-R*|-Wl,-R*)
7466                         case " $dflt " in
7467                         *" $thisflag "*) ;;
7468                         *) dflt="$dflt $thisflag" ;;
7469                         esac
7470                         ;;
7471                 esac
7472         done
7473
7474         case "$dflt" in
7475         ''|' ') dflt='none' ;;
7476         esac
7477
7478     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
7479     . ./myread
7480     case "$ans" in
7481     none) lddlflags=' ' ;;
7482     *) lddlflags="$ans" ;;
7483     esac
7484
7485         cat <<EOM
7486
7487 Some systems may require passing special flags to $cc to indicate that
7488 the resulting executable will use dynamic linking.  To use no flags,
7489 say "none".
7490
7491 EOM
7492     case "$ccdlflags" in
7493     '') case "$osname" in
7494                 hpux)   dflt='-Wl,-E' ;;
7495                 linux)  dflt='-rdynamic' ;;
7496                 next)   dflt='none' ;;
7497                 sunos)  dflt='none' ;;
7498                 *)      dflt='none' ;;
7499             esac ;;
7500     ' ')  dflt='none' ;;
7501     *)  dflt="$ccdlflags" ;;
7502     esac
7503     rp="Any special flags to pass to $cc to use dynamic linking?"
7504     . ./myread
7505     case "$ans" in
7506     none) ccdlflags=' ' ;;
7507     *) ccdlflags="$ans" ;;
7508     esac
7509     ;;
7510 *)  usedl="$undef"
7511         ld='ld'
7512     dlsrc='dl_none.xs'
7513     lddlflags=''
7514     ccdlflags=''
7515     ;;
7516 esac
7517
7518 also=''
7519 case "$usedl" in
7520 $undef)
7521         # No dynamic loading being used, so don't bother even to prompt.
7522         useshrplib='false'
7523         ;;
7524 *)      case "$useshrplib" in
7525         '')     case "$osname" in
7526                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
7527                         dflt=y
7528                         also='Building a shared libperl is required for dynamic loading to work on your system.'
7529                         ;;
7530                 next*)
7531                         case "$osvers" in
7532                         4*)     dflt=y
7533                                 also='Building a shared libperl is needed for MAB support.'
7534                                 ;;
7535                         *)      dflt=n
7536                                 ;;
7537                         esac
7538                         ;;
7539                 *)      dflt=n
7540                         ;;
7541                 esac
7542                 ;;
7543         $define|true|[Yy]*)
7544                 dflt=y
7545                 ;;
7546         *)      dflt=n
7547                 ;;
7548         esac
7549         $cat << EOM
7550
7551 The perl executable is normally obtained by linking perlmain.c with
7552 libperl${_a}, any static extensions (usually just DynaLoader), and
7553 any other libraries needed on this system (such as -lm, etc.).  Since
7554 your system supports dynamic loading, it is probably possible to build
7555 a shared libperl.$so.  If you will have more than one executable linked
7556 to libperl.$so, this will significantly reduce the size of each
7557 executable, but it may have a noticeable affect on performance.  The
7558 default is probably sensible for your system.
7559 $also
7560
7561 EOM
7562         rp="Build a shared libperl.$so (y/n)"
7563         . ./myread
7564         case "$ans" in
7565         true|$define|[Yy]*)
7566                 useshrplib='true'  ;;
7567         *)      useshrplib='false' ;;
7568         esac
7569         ;;
7570 esac
7571
7572 case "$useshrplib" in
7573 true)
7574         case "$libperl" in
7575         '')
7576                 # Figure out a good name for libperl.so.  Since it gets stored in
7577                 # a version-specific architecture-dependent library, the version
7578                 # number isn't really that important, except for making cc/ld happy.
7579                 #
7580                 # A name such as libperl.so.3.1
7581                 majmin="libperl.$so.$patchlevel.$subversion"
7582                 # A name such as libperl.so.301
7583                 majonly=`echo $patchlevel $subversion |
7584                         $awk '{printf "%d%02d", $1, $2}'`
7585                 majonly=libperl.$so.$majonly
7586                 # I'd prefer to keep the os-specific stuff here to a minimum, and
7587                 # rely on figuring it out from the naming of libc.
7588                 case "${osname}${osvers}" in
7589                 next4*)
7590                         dflt=libperl.5.$so
7591                         # XXX How handle the --version stuff for MAB?
7592                         ;;
7593                 linux*)  # ld won't link with a bare -lperl otherwise.
7594                         dflt=libperl.$so
7595                         ;;
7596                 cygwin*) # ld links against an importlib
7597                         dflt=libperl$lib_ext
7598                         ;;
7599                 *)      # Try to guess based on whether libc has major.minor.
7600                         case "$libc" in
7601                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
7602                         *libc.$so.[0-9]*) dflt=$majonly ;;
7603                         *)      dflt=libperl.$so ;;
7604                         esac
7605                         ;;
7606                 esac
7607                 ;;
7608         *)      dflt=$libperl
7609                 ;;
7610         esac
7611         cat << EOM
7612
7613 I need to select a good name for the shared libperl.  If your system uses
7614 library names with major and minor numbers, then you might want something
7615 like $majmin.  Alternatively, if your system uses a single version
7616 number for shared libraries, then you might want to use $majonly.
7617 Or, your system might be quite happy with a simple libperl.$so.
7618
7619 Since the shared libperl will get installed into a version-specific
7620 architecture-dependent directory, the version number of the shared perl
7621 library probably isn't important, so the default should be o.k.
7622
7623 EOM
7624         rp='What name do you want to give to the shared libperl?'
7625         . ./myread
7626         libperl=$ans
7627         echo "Ok, I'll use $libperl"
7628         ;;
7629 *)
7630         libperl="libperl${_a}"
7631         ;;
7632 esac
7633
7634 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
7635 case "$shrpdir" in
7636 '') ;;
7637 *)      $cat >&4 <<EOM
7638 WARNING:  Use of the shrpdir variable for the installation location of
7639 the shared $libperl is not supported.  It was never documented and
7640 will not work in this version.  Let me (perlbug@perl.org)
7641 know of any problems this may cause.
7642
7643 EOM
7644         case "$shrpdir" in
7645         "$archlibexp/CORE")
7646                 $cat >&4 <<EOM
7647 But your current setting of $shrpdir is
7648 the default anyway, so it's harmless.
7649 EOM
7650                 ;;
7651         *)
7652                 $cat >&4 <<EOM
7653 Further, your current attempted setting of $shrpdir
7654 conflicts with the value of $archlibexp/CORE
7655 that installperl will use.
7656 EOM
7657                 ;;
7658         esac
7659         ;;
7660 esac
7661
7662 # How will the perl executable find the installed shared $libperl?
7663 # Add $xxx to ccdlflags.
7664 # If we can't figure out a command-line option, use $shrpenv to
7665 # set env LD_RUN_PATH.  The main perl makefile uses this.
7666 shrpdir=$archlibexp/CORE
7667 xxx=''
7668 tmp_shrpenv=''
7669 if "$useshrplib"; then
7670     case "$osname" in 
7671         aix)
7672                 # We'll set it in Makefile.SH...
7673                 ;;
7674         solaris)
7675                 xxx="-R $shrpdir"
7676                 ;;
7677         freebsd|netbsd)
7678                 xxx="-Wl,-R$shrpdir"
7679                 ;;
7680         bsdos|linux|irix*|dec_osf)
7681                 xxx="-Wl,-rpath,$shrpdir"
7682                 ;;
7683         next)
7684                 # next doesn't like the default...
7685                 ;;
7686         beos)
7687                 # beos doesn't like the default, either.
7688                 ;;
7689         hpux*)
7690                 # hpux doesn't like the default, either.
7691                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
7692                 ;;
7693         *)
7694                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
7695                 ;;
7696         esac
7697         case "$xxx" in
7698         '') ;;
7699         *)      
7700                 # Only add $xxx if it isn't already in ccdlflags.
7701                 case " $ccdlflags " in
7702                 *" $xxx "*)     ;;
7703                 *)      ccdlflags="$ccdlflags $xxx"
7704                         cat <<EOM >&4
7705
7706 Adding $xxx to the flags
7707 passed to $ld so that the perl executable will find the 
7708 installed shared $libperl.
7709
7710 EOM
7711                         ;;
7712                 esac
7713                 ;;
7714         esac
7715 fi
7716 # Fix ccdlflags in AIX for building external extensions.
7717 # (For building Perl itself bare -bE:perl.exp is needed,
7718 #  Makefile.SH takes care of this.)
7719 case "$osname" in
7720 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
7721 esac
7722 # Respect a hint or command-line value.
7723 case "$shrpenv" in
7724 '') shrpenv="$tmp_shrpenv" ;;
7725 esac
7726 case "$ldlibpthname" in
7727 '')     ldlibpthname=LD_LIBRARY_PATH ;;
7728 none)   ldlibpthname='' ;;
7729 esac
7730
7731 : determine where manual pages are on this system
7732 echo " "
7733 case "$sysman" in
7734 '') 
7735         syspath='/usr/share/man/man1 /usr/man/man1'
7736         syspath="$syspath /usr/man/mann /usr/man/manl /usr/man/local/man1"
7737         syspath="$syspath /usr/man/u_man/man1"
7738         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
7739         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
7740         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
7741         sysman=`./loc . /usr/man/man1 $syspath`
7742         ;;
7743 esac
7744 if $test -d "$sysman"; then
7745         echo "System manual is in $sysman." >&4
7746 else
7747         echo "Could not find manual pages in source form." >&4
7748 fi
7749
7750 : determine where manual pages go
7751 set man1dir man1dir none
7752 eval $prefixit
7753 $cat <<EOM
7754
7755 $spackage has manual pages available in source form.
7756 EOM
7757 case "$nroff" in
7758 nroff)
7759         echo "However, you don't have nroff, so they're probably useless to you."
7760         case "$man1dir" in
7761         '') man1dir="none";;
7762         esac;;
7763 esac
7764 echo "If you don't want the manual sources installed, answer 'none'."
7765 case "$man1dir" in
7766 ' ') dflt=none
7767         ;;
7768 '')
7769         lookpath="$prefixexp/share/man/man1"
7770         lookpath="$lookpath $prefixexp/man/man1 $prefixexp/man/l_man/man1"
7771         lookpath="$lookpath $prefixexp/man/p_man/man1"
7772         lookpath="$lookpath $prefixexp/man/u_man/man1"
7773         lookpath="$lookpath $prefixexp/man/man.1"
7774         case "$sysman" in
7775         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
7776         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
7777         esac
7778         set dflt
7779         eval $prefixup
7780         ;;
7781 *)  dflt="$man1dir"
7782         ;;
7783 esac
7784 echo " "
7785 fn=dn+~
7786 rp="Where do the main $spackage manual pages (source) go?"
7787 . ./getfile
7788 if $test "X$man1direxp" != "X$ansexp"; then
7789         installman1dir=''
7790 fi
7791 man1dir="$ans"
7792 man1direxp="$ansexp"
7793 case "$man1dir" in
7794 '')     man1dir=' '
7795         installman1dir='';;
7796 esac
7797
7798 : Change installation prefix, if necessary.
7799 if $test X"$prefix" != X"$installprefix"; then
7800         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
7801 else
7802         installman1dir="$man1direxp"
7803 fi
7804
7805 : What suffix to use on installed man pages
7806
7807 case "$man1dir" in
7808 ' ')
7809         man1ext='0'
7810         ;;
7811 *)
7812         rp="What suffix should be used for the main $spackage man pages?"
7813         case "$man1ext" in
7814         '')     case "$man1dir" in
7815                 *1)  dflt=1 ;;
7816                 *1p) dflt=1p ;;
7817                 *1pm) dflt=1pm ;;
7818                 *l) dflt=l;;
7819                 *n) dflt=n;;
7820                 *o) dflt=o;;
7821                 *p) dflt=p;;
7822                 *C) dflt=C;;
7823                 *L) dflt=L;;
7824                 *L1) dflt=L1;;
7825                 *) dflt=1;;
7826                 esac
7827                 ;;
7828         *)      dflt="$man1ext";;
7829         esac
7830         . ./myread
7831         man1ext="$ans"
7832         ;;
7833 esac
7834
7835 : see if we can have long filenames
7836 echo " "
7837 first=123456789abcdef
7838 $rm -f $first
7839 if (echo hi >$first) 2>/dev/null; then
7840         if $test -f 123456789abcde; then
7841                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
7842                 val="$undef"
7843         else
7844                 echo 'You can have filenames longer than 14 characters.'>&4
7845                 val="$define"
7846         fi
7847 else
7848         $cat <<'EOM'
7849 You can't have filenames longer than 14 chars.
7850 You can't even think about them!
7851 EOM
7852         val="$undef"
7853 fi 
7854 set d_flexfnam
7855 eval $setvar
7856 $rm -rf 123456789abcde*
7857
7858 : determine where library module manual pages go
7859 set man3dir man3dir none
7860 eval $prefixit
7861 $cat <<EOM
7862
7863 $spackage has manual pages for many of the library modules.
7864 EOM
7865
7866 case "$nroff" in
7867 nroff)
7868         $cat <<'EOM'
7869 However, you don't have nroff, so they're probably useless to you.
7870 EOM
7871         case "$man3dir" in
7872         '') man3dir="none";;
7873         esac;;
7874 esac
7875
7876 case "$d_flexfnam" in
7877 undef)
7878         $cat <<'EOM'
7879 However, your system can't handle the long file names like File::Basename.3. 
7880 EOM
7881         case "$man3dir" in
7882         '') man3dir="none";;
7883         esac;;
7884 esac
7885
7886 echo "If you don't want the manual sources installed, answer 'none'."
7887 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7888 case "$man3dir" in
7889 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
7890         if $test -d "$privlib/man/man3"; then
7891                 cat <<EOM >&4
7892
7893 WARNING:  Previous versions of perl installed man3 pages into
7894 $privlib/man/man3.  This version will suggest a 
7895 new default of $dflt.  
7896 EOM
7897                 tdflt=$dflt
7898                 dflt='n'
7899                 rp='Do you wish to preserve the old behavior?(y/n)'
7900                 . ./myread
7901                 case "$ans" in
7902                 y*) dflt="$privlib/man/man3" ;;
7903                 *)  dflt=$tdflt ;;
7904                 esac
7905     fi
7906         ;;
7907 *)      dflt="$man3dir" ;;
7908 esac
7909 case "$dflt" in
7910 ' ') dflt=none ;;
7911 esac
7912 echo " "
7913 fn=dn+~
7914 rp="Where do the $package library man pages (source) go?"
7915 . ./getfile
7916 man3dir="$ans"
7917 man3direxp="$ansexp"
7918 case "$man3dir" in
7919 '')     man3dir=' '
7920         installman3dir='';;
7921 esac
7922
7923 : Change installation prefix, if necessary.
7924 if $test X"$prefix" != X"$installprefix"; then
7925         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
7926 else
7927         installman3dir="$man3direxp"
7928 fi
7929
7930 : What suffix to use on installed man pages
7931 case "$man3dir" in
7932 ' ')
7933         man3ext='0'
7934         ;;
7935 *)
7936         rp="What suffix should be used for the $package library man pages?"
7937         case "$man3ext" in
7938         '')     case "$man3dir" in
7939                 *3)  dflt=3 ;;
7940                 *3p) dflt=3p ;;
7941                 *3pm) dflt=3pm ;;
7942                 *l) dflt=l;;
7943                 *n) dflt=n;;
7944                 *o) dflt=o;;
7945                 *p) dflt=p;;
7946                 *C) dflt=C;;
7947                 *L) dflt=L;;
7948                 *L3) dflt=L3;;
7949                 *) dflt=3;;
7950                 esac
7951                 ;;
7952         *)      dflt="$man3ext";;
7953         esac
7954         . ./myread
7955         man3ext="$ans"
7956         ;;
7957 esac
7958
7959 : see if we have to deal with yellow pages, now NIS.
7960 if $test -d /usr/etc/yp || $test -d /etc/yp || $test -d /usr/lib/yp; then
7961         if $test -f /usr/etc/nibindd; then
7962                 echo " "
7963                 echo "I'm fairly confident you're on a NeXT."
7964                 echo " "
7965                 rp='Do you get the hosts file via NetInfo?'
7966                 dflt=y
7967                 case "$hostcat" in
7968                 nidump*) ;;
7969                 '') ;;
7970                 *) dflt=n;;
7971                 esac
7972                 . ./myread
7973                 case "$ans" in
7974                 y*) hostcat='nidump hosts .';;
7975                 *)      case "$hostcat" in
7976                         nidump*) hostcat='';;
7977                         esac
7978                         ;;
7979                 esac
7980         fi
7981         case "$hostcat" in
7982         nidump*) ;;
7983         *)
7984                 case "$hostcat" in
7985                 *ypcat*) dflt=y;;
7986                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7987                                 dflt=y
7988                         else
7989                                 dflt=n
7990                         fi;;
7991                 *) dflt=n;;
7992                 esac
7993                 echo " "
7994                 rp='Are you getting the hosts file via yellow pages?'
7995                 . ./myread
7996                 case "$ans" in
7997                 y*) hostcat='ypcat hosts';;
7998                 *) hostcat='cat /etc/hosts';;
7999                 esac
8000                 ;;
8001         esac
8002 fi
8003 case "$hostcat" in
8004 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
8005 esac
8006 case "$groupcat" in
8007 '') test -f /etc/group && groupcat='cat /etc/group';;
8008 esac
8009 case "$passcat" in
8010 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
8011 esac
8012
8013 : now get the host name
8014 echo " "
8015 echo "Figuring out host name..." >&4
8016 case "$myhostname" in
8017 '') cont=true
8018         echo 'Maybe "hostname" will work...'
8019         if tans=`sh -c hostname 2>&1` ; then
8020                 myhostname=$tans
8021                 phostname=hostname
8022                 cont=''
8023         fi
8024         ;;
8025 *) cont='';;
8026 esac
8027 if $test "$cont"; then
8028         if ./xenix; then
8029                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
8030                 if tans=`cat /etc/systemid 2>&1` ; then
8031                         myhostname=$tans
8032                         phostname='cat /etc/systemid'
8033                         echo "Whadyaknow.  Xenix always was a bit strange..."
8034                         cont=''
8035                 fi
8036         elif $test -r /etc/systemid; then
8037                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
8038         fi
8039 fi
8040 if $test "$cont"; then
8041         echo 'No, maybe "uuname -l" will work...'
8042         if tans=`sh -c 'uuname -l' 2>&1` ; then
8043                 myhostname=$tans
8044                 phostname='uuname -l'
8045         else
8046                 echo 'Strange.  Maybe "uname -n" will work...'
8047                 if tans=`sh -c 'uname -n' 2>&1` ; then
8048                         myhostname=$tans
8049                         phostname='uname -n'
8050                 else
8051                         echo 'Oh well, maybe I can mine it out of whoami.h...'
8052                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
8053                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
8054                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
8055                         else
8056                                 case "$myhostname" in
8057                                 '') echo "Does this machine have an identity crisis or something?"
8058                                         phostname='';;
8059                                 *)
8060                                         echo "Well, you said $myhostname before..."
8061                                         phostname='echo $myhostname';;
8062                                 esac
8063                         fi
8064                 fi
8065         fi
8066 fi
8067 case "$myhostname" in
8068 '') myhostname=noname ;;
8069 esac
8070 : you do not want to know about this
8071 set $myhostname
8072 myhostname=$1
8073
8074 : verify guess
8075 if $test "$myhostname" ; then
8076         dflt=y
8077         rp='Your host name appears to be "'$myhostname'".'" Right?"
8078         . ./myread
8079         case "$ans" in
8080         y*) ;;
8081         *) myhostname='';;
8082         esac
8083 fi
8084
8085 : bad guess or no guess
8086 while $test "X$myhostname" = X ; do
8087         dflt=''
8088         rp="Please type the (one word) name of your host:"
8089         . ./myread
8090         myhostname="$ans"
8091 done
8092
8093 : translate upper to lower if necessary
8094 case "$myhostname" in
8095 *[A-Z]*)
8096         echo "(Normalizing case in your host name)"
8097         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
8098         ;;
8099 esac
8100
8101 case "$myhostname" in
8102 *.*)
8103         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
8104         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
8105         echo "(Trimming domain name from host name--host name is now $myhostname)"
8106         ;;
8107 *) case "$mydomain" in
8108         '')
8109                 {
8110                         test "X$hostcat" = "Xypcat hosts" &&
8111                         ypmatch "$myhostname" hosts 2>/dev/null |\
8112                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
8113                         $test -s hosts
8114                 } || {
8115                         test "X$hostcat" != "X" &&
8116                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
8117                                         /[       ]$myhostname[  . ]/p" > hosts
8118                 }
8119                 tmp_re="[       . ]"
8120                 if $test -f hosts; then
8121                         $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
8122                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
8123                         dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
8124                                 hosts | $sort | $uniq | \
8125                                 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
8126                         case `$echo X$dflt` in
8127                         X*\ *)  echo "(Several hosts in the database matched hostname)"
8128                                 dflt=.
8129                                 ;;
8130                         X.) echo "(You do not have fully-qualified names in the hosts database)"
8131                                 ;;
8132                         esac
8133                 else
8134                         echo "(I cannot locate a hosts database anywhere)"
8135                         dflt=.
8136                 fi
8137                 case "$dflt" in
8138                 .)
8139                         tans=`./loc resolv.conf X /etc /usr/etc`
8140                         if $test -f "$tans"; then
8141                                 echo "(Attempting domain name extraction from $tans)"
8142                                 dflt=.`$sed -n -e 's/   / /g' \
8143                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
8144                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
8145                                 case "$dflt" in
8146                                 .) dflt=.`$sed -n -e 's/        / /g' \
8147                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
8148                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
8149                                         ;;
8150                                 esac
8151                         fi
8152                         ;;
8153                 esac
8154                 case "$dflt" in
8155                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
8156                         dflt=.`sh -c domainname 2>/dev/null`
8157                         case "$dflt" in
8158                         '') dflt='.';;
8159                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
8160                         esac
8161                         ;;
8162                 esac
8163                 case "$dflt$osname" in
8164                 .os390) echo "(Attempting domain name extraction from //'SYS1.TCPPARMS(TCPDATA)')"
8165                         dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "//'SYS1.TCPPARMS(TCPDATA)'" 2>/dev/null`
8166                         ;;
8167                 esac
8168                 case "$dflt" in
8169                 .) echo "(Lost all hope -- silly guess then)"
8170                         dflt='.nonet'
8171                         ;;
8172                 esac
8173                 $rm -f hosts
8174                 ;;
8175         *) dflt="$mydomain";;
8176         esac;;
8177 esac
8178 echo " "
8179 rp="What is your domain name?"
8180 . ./myread
8181 tans="$ans"
8182 case "$ans" in
8183 '') ;;
8184 .*) ;;
8185 *) tans=".$tans";;
8186 esac
8187 mydomain="$tans"
8188
8189 : translate upper to lower if necessary
8190 case "$mydomain" in
8191 *[A-Z]*)
8192         echo "(Normalizing case in your domain name)"
8193         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
8194         ;;
8195 esac
8196
8197 : a little sanity check here
8198 case "$phostname" in
8199 '') ;;
8200 *)
8201         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
8202         $myhostname$mydomain|$myhostname) ;;
8203         *)
8204                 case "$phostname" in
8205                 sed*)
8206                         echo "(That doesn't agree with your whoami.h file, by the way.)"
8207                         ;;
8208                 *)
8209                         echo "(That doesn't agree with your $phostname command, by the way.)"
8210                         ;;
8211                 esac
8212         ;;
8213         esac
8214         ;;
8215 esac
8216
8217 $cat <<EOM
8218
8219 I need to get your e-mail address in Internet format if possible, i.e.
8220 something like user@host.domain. Please answer accurately since I have
8221 no easy means to double check it. The default value provided below
8222 is most probably close to reality but may not be valid from outside
8223 your organization...
8224
8225 EOM
8226 cont=x
8227 while test "$cont"; do
8228         case "$cf_email" in
8229         '') dflt="$cf_by@$myhostname$mydomain";;
8230         *) dflt="$cf_email";;
8231         esac
8232         rp='What is your e-mail address?'
8233         . ./myread
8234         cf_email="$ans"
8235         case "$cf_email" in
8236         *@*.*) cont='' ;;
8237         *)
8238                 rp='Address does not look like an Internet one.  Use it anyway?'
8239                 case "$fastread" in
8240                 yes) dflt=y ;;
8241                 *) dflt=n ;;
8242                 esac
8243                 . ./myread
8244                 case "$ans" in
8245                 y*) cont='' ;;
8246                 *) echo " " ;;
8247                 esac
8248                 ;;
8249         esac
8250 done
8251
8252 $cat <<EOM
8253
8254 If you or somebody else will be maintaining perl at your site, please
8255 fill in the correct e-mail address here so that they may be contacted
8256 if necessary. Currently, the "perlbug" program included with perl
8257 will send mail to this address in addition to perlbug@perl.org. You may
8258 enter "none" for no administrator.
8259
8260 EOM
8261 case "$perladmin" in
8262 '') dflt="$cf_email";;
8263 *) dflt="$perladmin";;
8264 esac
8265 rp='Perl administrator e-mail address'
8266 . ./myread
8267 perladmin="$ans"
8268
8269 : determine whether to only install version-specific parts.
8270 echo " "
8271 $cat <<EOM
8272 Do you want to install only the version-specific parts of the perl
8273 distribution?  Usually you do *not* want to do this.
8274 EOM
8275 case "$versiononly" in
8276 "$define"|[Yy]*|true) dflt='y' ;;
8277 *) dflt='n';
8278 esac
8279 rp="Do you want to install only the version-specific parts of perl?"
8280 . ./myread
8281 case "$ans" in
8282 [yY]*)  val="$define";;
8283 *)      val="$undef" ;;
8284 esac
8285 set versiononly
8286 eval $setvar
8287
8288 : figure out how to guarantee perl startup
8289 case "$startperl" in
8290 '')
8291         case "$sharpbang" in
8292         *!)
8293                 $cat <<EOH
8294
8295 I can use the #! construct to start perl on your system. This will
8296 make startup of perl scripts faster, but may cause problems if you
8297 want to share those scripts and perl is not in a standard place
8298 ($binexp/perl) on all your platforms. The alternative is to force
8299 a shell by starting the script with a single ':' character.
8300
8301 EOH
8302                 case "$versiononly" in
8303                 "$define")      dflt="$binexp/perl$version";;  
8304                 *)              dflt="$binexp/perl";;
8305                 esac
8306                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
8307                 . ./myread
8308                 case "$ans" in
8309                 none)   startperl=": # use perl";;
8310                 *)      startperl="#!$ans"
8311                         if $test 30 -lt `echo "$ans" | wc -c`; then
8312                                 $cat >&4 <<EOM
8313
8314 WARNING:  Some systems limit the #! command to 32 characters.
8315 If you experience difficulty running Perl scripts with #!, try
8316 installing Perl in a directory with a shorter pathname.
8317
8318 EOM
8319                         fi ;;
8320                 esac
8321                 ;;
8322         *) startperl=": # use perl"
8323                 ;;
8324         esac
8325         ;;
8326 esac
8327 echo "I'll use $startperl to start perl scripts."
8328
8329 : figure best path for perl in scripts
8330 case "$perlpath" in
8331 '')
8332         case "$versiononly" in
8333         "$define")      perlpath="$binexp/perl$version";;
8334         *)              perlpath="$binexp/perl";;
8335         esac
8336         case "$startperl" in
8337         *!*) ;;
8338         *)
8339                 $cat <<EOH
8340
8341 I will use the "eval 'exec'" idiom to start Perl on your system.
8342 I can use the full path of your Perl binary for this purpose, but
8343 doing so may cause problems if you want to share those scripts and
8344 Perl is not always in a standard place ($binexp/perl).
8345
8346 EOH
8347                 dflt="$binexp/perl"
8348                 rp="What path shall I use in \"eval 'exec'\"?"
8349                 . ./myread
8350                 perlpath="$ans"
8351                 ;;
8352         esac
8353         ;;
8354 esac
8355 case "$startperl" in
8356 *!*)    ;;
8357 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
8358 esac
8359
8360 : determine where public executable scripts go
8361 set scriptdir scriptdir
8362 eval $prefixit
8363 case "$scriptdir" in
8364 '')
8365         dflt="$bin"
8366         : guess some guesses
8367         $test -d /usr/share/scripts && dflt=/usr/share/scripts
8368         $test -d /usr/share/bin     && dflt=/usr/share/bin
8369         $test -d /usr/local/script  && dflt=/usr/local/script
8370         $test -d /usr/local/scripts && dflt=/usr/local/scripts
8371         $test -d $prefixexp/script  && dflt=$prefixexp/script
8372         set dflt
8373         eval $prefixup
8374         ;;
8375 *)  dflt="$scriptdir"
8376         ;;
8377 esac
8378 $cat <<EOM
8379  
8380 Some installations have a separate directory just for executable scripts so
8381 that they can mount it across multiple architectures but keep the scripts in
8382 one spot.  You might, for example, have a subdirectory of /usr/share for this.
8383 Or you might just lump your scripts in with all your other executables.
8384  
8385 EOM
8386 fn=d~
8387 rp='Where do you keep publicly executable scripts?'
8388 . ./getfile
8389 if $test "X$ansexp" != "X$scriptdirexp"; then
8390         installscript=''
8391 fi
8392 scriptdir="$ans"
8393 scriptdirexp="$ansexp"
8394 : Change installation prefix, if necessary.
8395 if $test X"$prefix" != X"$installprefix"; then
8396         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
8397 else
8398         installscript="$scriptdirexp"
8399 fi
8400
8401 : determine where add-on public executables go
8402 case "$sitebin" in
8403 '')     dflt=$siteprefix/bin ;;
8404 *)      dflt=$sitebin ;;
8405 esac
8406 fn=d~
8407 rp='Pathname where the add-on public executables should be installed?'
8408 . ./getfile
8409 sitebin="$ans"
8410 sitebinexp="$ansexp"
8411 : Change installation prefix, if necessary.
8412 if $test X"$prefix" != X"$installprefix"; then
8413         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
8414 else
8415         installsitebin="$sitebinexp"
8416 fi
8417
8418 : define an is-a-typedef? function
8419 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8420 case "$inclist" in
8421 "") inclist="sys/types.h";;
8422 esac;
8423 eval "varval=\$$var";
8424 case "$varval" in
8425 "")
8426         $rm -f temp.c;
8427         for inc in $inclist; do
8428                 echo "#include <$inc>" >>temp.c;
8429         done;
8430         echo "#ifdef $type" >> temp.c;
8431         echo "printf(\"We have $type\");" >> temp.c;
8432         echo "#endif" >> temp.c;
8433         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8434         if $contains $type temp.E >/dev/null 2>&1; then
8435                 eval "$var=\$type";
8436         else
8437                 eval "$var=\$def";
8438         fi;
8439         $rm -f temp.?;;
8440 *) eval "$var=\$varval";;
8441 esac'
8442
8443 : define an is-a-typedef? function that prompts if the type is not available.
8444 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8445 case "$inclist" in
8446 "") inclist="sys/types.h";;
8447 esac;
8448 eval "varval=\$$var";
8449 case "$varval" in
8450 "")
8451         $rm -f temp.c;
8452         for inc in $inclist; do
8453                 echo "#include <$inc>" >>temp.c;
8454         done;
8455         echo "#ifdef $type" >> temp.c;
8456         echo "printf(\"We have $type\");" >> temp.c;
8457         echo "#endif" >> temp.c;
8458         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8459         echo " " ;
8460         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
8461         if $contains $type temp.E >/dev/null 2>&1; then
8462                 echo "$type found." >&4;
8463                 eval "$var=\$type";
8464         else
8465                 echo "$type NOT found." >&4;
8466                 dflt="$def";
8467                 . ./myread ;
8468                 eval "$var=\$ans";
8469         fi;
8470         $rm -f temp.?;;
8471 *) eval "$var=\$varval";;
8472 esac'
8473
8474 : see what type lseek is declared as in the kernel
8475 rp="What is the type used for lseek's offset on this system?"
8476 set off_t lseektype long stdio.h sys/types.h
8477 eval $typedef_ask
8478
8479 echo " "
8480 echo "Checking to see how big your file offsets are..." >&4
8481 $cat >try.c <<EOCP
8482 #include <sys/types.h>
8483 #include <stdio.h>
8484 int main()
8485 {
8486     printf("%d\n", (int)sizeof($lseektype));
8487     return(0); 
8488 }
8489 EOCP
8490 set try
8491 if eval $compile_ok; then
8492         lseeksize=`$run ./try`
8493         echo "Your file offsets are $lseeksize bytes long."
8494 else
8495         dflt=$longsize
8496         echo " "
8497         echo "(I can't seem to compile the test program.  Guessing...)"
8498         rp="What is the size of your file offsets (in bytes)?"
8499         . ./myread
8500         lseeksize="$ans"
8501 fi
8502 $rm -f try.c try
8503
8504 : see what type file positions are declared as in the library
8505 rp="What is the type for file position used by fsetpos()?"
8506 set fpos_t fpostype long stdio.h sys/types.h
8507 eval $typedef_ask
8508
8509 echo " "
8510 case "$fpostype" in
8511 *_t) zzz="$fpostype"    ;;
8512 *)   zzz="fpos_t"       ;;
8513 esac
8514 echo "Checking the size of $zzz..." >&4 
8515 cat > try.c <<EOCP
8516 #include <sys/types.h>
8517 #include <stdio.h>
8518 int main() {
8519     printf("%d\n", (int)sizeof($fpostype));
8520     exit(0);
8521 }
8522 EOCP
8523 set try
8524 if eval $compile_ok; then
8525         yyy=`$run ./try`
8526         case "$yyy" in
8527         '')     fpossize=4
8528                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8529                 ;;
8530         *)      fpossize=$yyy
8531                 echo "Your $zzz is $fpossize bytes long."
8532                 ;;
8533         esac
8534 else
8535         dflt="$longsize"
8536         echo " " >&4
8537         echo "(I can't compile the test program.  Guessing...)" >&4
8538         rp="What is the size of your file positions (in bytes)?"
8539         . ./myread
8540         fpossize="$ans"
8541 fi
8542
8543
8544
8545 # Backward compatibility (uselfs is deprecated).
8546 case "$uselfs" in
8547 "$define"|true|[yY]*)
8548         cat <<EOM >&4
8549
8550 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
8551 EOM
8552         uselargefiles="$define"
8553         ;;
8554 esac                          
8555
8556 case "$lseeksize:$fpossize" in
8557 8:8) cat <<EOM
8558
8559 You can have files larger than 2 gigabytes.
8560 EOM
8561    val="$define" ;;
8562 *)    case "$uselargefiles" in
8563    "$undef"|false|[nN]*) dflt='n' ;;
8564    *)   dflt='y' ;;
8565    esac
8566    cat <<EOM
8567
8568 Perl can be built to understand large files (files larger than 2 gigabytes)
8569 on some systems.  To do so, Configure can be run with -Duselargefiles.
8570
8571 If this doesn't make any sense to you, just accept the default '$dflt'.
8572 EOM
8573    rp='Try to understand large files, if available?'
8574    . ./myread
8575    case "$ans" in
8576    y|Y)         val="$define" ;;
8577    *)           val="$undef"  ;;
8578    esac
8579    ;;
8580 esac
8581 set uselargefiles
8582 eval $setvar
8583 case "$uselargefiles" in
8584 "$define")
8585 : Look for a hint-file generated 'call-back-unit'.  If the
8586 : user has specified that a large files perl is to be built,
8587 : we may need to set or change some other defaults.
8588         if $test -f uselargefiles.cbu; then
8589                 echo "Your platform has some specific hints for large file builds, using them..."
8590                 . ./uselargefiles.cbu
8591                 echo " "
8592                 echo "Rechecking to see how big your file offsets are..." >&4
8593                 $cat >try.c <<EOCP
8594 #include <sys/types.h>
8595 #include <stdio.h>
8596 int main()
8597 {
8598     printf("%d\n", (int)sizeof($lseektype));
8599     return(0); 
8600 }
8601 EOCP
8602                 set try
8603                 if eval $compile_ok; then
8604                         lseeksize=`$run ./try`
8605                         $echo "Your file offsets are now $lseeksize bytes long."
8606                 else
8607                         dflt="$lseeksize"
8608                         echo " "
8609                         echo "(I can't seem to compile the test program.  Guessing...)"
8610                         rp="What is the size of your file offsets (in bytes)?"
8611                         . ./myread
8612                         lseeksize="$ans"
8613                 fi
8614                 case "$fpostype" in
8615                 *_t) zzz="$fpostype"    ;;
8616                 *)   zzz="fpos_t"       ;;
8617                 esac
8618                 $echo $n "Rechecking the size of $zzz...$c" >&4 
8619                 $cat > try.c <<EOCP
8620 #include <sys/types.h>
8621 #include <stdio.h>
8622 int main() {
8623     printf("%d\n", (int)sizeof($fpostype));
8624     exit(0);
8625 }
8626 EOCP
8627                 set try
8628                 if eval $compile_ok; then
8629                         yyy=`$run ./try`
8630                         dflt="$lseeksize"
8631                         case "$yyy" in
8632                         '')     echo " "
8633                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8634                                 ;;
8635                         *)      fpossize=$yyy
8636                                 echo " $fpossize bytes." >&4
8637                                 ;;
8638                         esac
8639                 else
8640                         dflt="$fpossize"
8641                         echo " "
8642                         echo "(I can't compile the test program.  Guessing...)" >&4
8643                         rp="What is the size of your file positions (in bytes)?"
8644                         . ./myread
8645                         fpossize="$ans"
8646                 fi
8647                 $rm -f try.c try
8648         fi
8649         ;;
8650 esac
8651
8652 case "$vendorprefix" in
8653 '')     d_vendorbin="$undef"
8654         vendorbin=''
8655         vendorbinexp=''
8656         ;;
8657 *)      d_vendorbin="$define"
8658         : determine where vendor-supplied executables go.
8659         case "$vendorbin" in
8660         '') dflt=$vendorprefix/bin ;;
8661         *)      dflt="$vendorbin" ;;
8662         esac
8663         fn=d~+
8664         rp='Pathname for the vendor-supplied executables directory?'
8665         . ./getfile
8666         vendorbin="$ans"
8667         vendorbinexp="$ansexp"
8668         ;;
8669 esac
8670 : Change installation prefix, if necessary.
8671 if $test X"$prefix" != X"$installprefix"; then
8672         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
8673 else
8674         installvendorbin="$vendorbinexp"
8675 fi
8676
8677 : see if qgcvt exists
8678 set qgcvt d_qgcvt
8679 eval $inlibc
8680
8681 : Check how to convert floats to strings.
8682
8683 if test "X$d_Gconvert" = X; then
8684
8685 echo " "
8686 echo "Checking for an efficient way to convert floats to strings."
8687 echo " " > try.c
8688 case "$uselongdouble" in
8689 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
8690 esac
8691 case "$d_longdbl" in
8692 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
8693 esac
8694 case "$d_PRIgldbl" in
8695 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
8696 esac
8697 $cat >>try.c <<EOP
8698 #ifdef TRY_gconvert
8699 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
8700 char *myname = "gconvert";
8701 #endif
8702 #ifdef TRY_gcvt
8703 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
8704 char *myname = "gcvt";
8705 #endif
8706 #ifdef TRY_qgcvt
8707 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
8708 char *myname = "qgcvt";
8709 #define DOUBLETYPE long double
8710 #endif
8711 #ifdef TRY_sprintf
8712 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
8713 #ifdef HAS_PRIgldbl
8714 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
8715 #else
8716 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(double)(x))
8717 #endif
8718 #else
8719 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
8720 #endif
8721 char *myname = "sprintf";
8722 #endif
8723
8724 #ifndef DOUBLETYPE
8725 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
8726 #define DOUBLETYPE long double
8727 #else
8728 #define DOUBLETYPE double
8729 #endif
8730 #endif
8731
8732 #include <stdio.h>
8733
8734 #define I_STDLIB $i_stdlib
8735 #ifdef I_STDLIB
8736 #include <stdlib.h>
8737 #endif
8738
8739 int
8740 checkit(expect, got)
8741 char *expect;
8742 char *got;
8743 {
8744     if (strcmp(expect, got)) {
8745                 printf("%s oddity:  Expected %s, got %s\n",
8746                         myname, expect, got);
8747                 exit(1);
8748         }
8749 }
8750
8751 int main()
8752
8753         char buf[64]; 
8754         buf[63] = '\0';
8755
8756         /* This must be 1st test on (which?) platform */
8757         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
8758         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
8759         checkit("0.1", buf);
8760
8761         Gconvert((DOUBLETYPE)0.01, 8, 0, buf); 
8762         checkit("0.01", buf);
8763
8764         Gconvert((DOUBLETYPE)0.001, 8, 0, buf); 
8765         checkit("0.001", buf);
8766
8767         Gconvert((DOUBLETYPE)0.0001, 8, 0, buf); 
8768         checkit("0.0001", buf);
8769
8770         Gconvert((DOUBLETYPE)0.00009, 8, 0, buf);
8771         if (strlen(buf) > 5)
8772             checkit("9e-005", buf); /* for Microsoft ?? */
8773         else
8774             checkit("9e-05", buf);
8775
8776         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
8777         checkit("1", buf);
8778
8779         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
8780         checkit("1.1", buf);
8781
8782         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
8783         checkit("1.01", buf);
8784
8785         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
8786         checkit("1.001", buf);
8787
8788         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
8789         checkit("1.0001", buf);
8790
8791         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
8792         checkit("1.00001", buf);
8793
8794         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
8795         checkit("1.000001", buf);
8796
8797         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
8798         checkit("0", buf);
8799
8800         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
8801         checkit("-1", buf);
8802
8803         /* Some Linux gcvt's give 1.e+5 here. */
8804         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
8805         checkit("100000", buf);
8806         
8807         /* Some Linux gcvt's give -1.e+5 here. */
8808         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
8809         checkit("-100000", buf);
8810
8811         Gconvert((DOUBLETYPE)123.456, 8, 0, buf); 
8812         checkit("123.456", buf);
8813
8814         /* Testing of 1e+129 in bigintpm.t must not get extra '.' here. */
8815         Gconvert((DOUBLETYPE)1e34, 8, 0, buf);
8816         /* 34 should be enough to scare even long double
8817          * places into using the e notation. */
8818         if (strlen(buf) > 5)
8819             checkit("1e+034", buf); /* for Microsoft */
8820         else
8821             checkit("1e+34", buf);
8822
8823         /* For Perl, if you add additional tests here, also add them to
8824          * t/base/num.t for benefit of platforms not using Configure or
8825          * overriding d_Gconvert */
8826
8827         exit(0);
8828 }
8829 EOP
8830 : first add preferred functions to our list
8831 xxx_list=""
8832 for xxx_convert in $gconvert_preference; do
8833     case $xxx_convert in
8834     gcvt|gconvert|sprintf) xxx_list="$xxx_list $xxx_convert" ;;
8835     *) echo "Discarding unrecognized gconvert_preference $xxx_convert" >&4 ;;
8836     esac 
8837 done
8838 : then add any others
8839 for xxx_convert in gconvert gcvt sprintf; do
8840     case "$xxx_list" in
8841     *$xxx_convert*) ;;
8842     *) xxx_list="$xxx_list $xxx_convert" ;;
8843     esac 
8844 done
8845
8846 case "$d_longdbl$uselongdouble" in
8847 "$define$define")
8848     : again, add prefered functions to our list first
8849     xxx_ld_list=""
8850     for xxx_convert in $gconvert_ld_preference; do
8851         case $xxx_convert in
8852         qgcvt|gcvt|gconvert|sprintf) xxx_ld_list="$xxx_ld_list $xxx_convert" ;;
8853         *) echo "Discarding unrecognized gconvert_ld_preference $xxx_convert" ;;
8854         esac
8855     done
8856     : then add qgcvt, sprintf--then, in xxx_list order, gconvert and gcvt
8857     for xxx_convert in qgcvt sprintf $xxx_list; do
8858         case "$xxx_ld_list" in
8859         $xxx_convert*|*" $xxx_convert"*) ;;
8860         *) xxx_ld_list="$xxx_ld_list $xxx_convert" ;;
8861         esac
8862     done
8863     : if sprintf cannot do long doubles, move it to the end
8864     if test "$d_PRIgldbl" != "$define"; then
8865         xxx_ld_list="`echo $xxx_ld_list|sed s/sprintf//` sprintf"
8866     fi
8867     : if no qgcvt, remove it
8868     if test "$d_qgcvt" != "$define"; then
8869         xxx_ld_list="`echo $xxx_ld_list|sed s/qgcvt//`"
8870     fi
8871     : use the ld_list
8872     xxx_list="$xxx_ld_list"
8873     ;;
8874 esac
8875
8876 for xxx_convert in $xxx_list; do
8877         echo "Trying $xxx_convert..."
8878         $rm -f try try$_o
8879         set try -DTRY_$xxx_convert
8880         if eval $compile; then
8881                 echo "$xxx_convert() found." >&4
8882                 if $run ./try; then
8883                         echo "I'll use $xxx_convert to convert floats into a string." >&4
8884                         break;
8885                 else
8886                         echo "...But $xxx_convert didn't work as I expected."
8887                         xxx_convert=''
8888                 fi
8889         else
8890                 echo "$xxx_convert NOT found." >&4
8891         fi
8892 done
8893
8894 if test X$xxx_convert = X; then
8895     echo "*** WHOA THERE!!! ***" >&4
8896     echo "None of ($xxx_list)  seemed to work properly.  I'll use sprintf." >&4
8897     xxx_convert=sprintf
8898 fi
8899
8900 case "$xxx_convert" in
8901 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
8902 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
8903 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
8904 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
8905    "$define$define$define")
8906       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
8907    "$define$define$undef")
8908       d_Gconvert='sprintf((b),"%.*g",(n),(double)(x))' ;;
8909    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
8910    esac
8911    ;;  
8912 esac
8913
8914 fi
8915
8916 : see if _fwalk exists
8917 set fwalk d__fwalk
8918 eval $inlibc
8919
8920 : Initialize h_fcntl
8921 h_fcntl=false
8922
8923 : Initialize h_sysfile
8924 h_sysfile=false
8925
8926 : access call always available on UNIX
8927 set access d_access
8928 eval $inlibc
8929
8930 : locate the flags for 'access()'
8931 case "$d_access" in
8932 "$define")
8933         echo " "
8934         $cat >access.c <<'EOCP'
8935 #include <sys/types.h>
8936 #ifdef I_FCNTL
8937 #include <fcntl.h>
8938 #endif
8939 #ifdef I_SYS_FILE
8940 #include <sys/file.h>
8941 #endif
8942 #ifdef I_UNISTD
8943 #include <unistd.h>
8944 #endif
8945 int main() {
8946         exit(R_OK);
8947 }
8948 EOCP
8949         : check sys/file.h first, no particular reason here
8950         if $test `./findhdr sys/file.h` && \
8951                 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
8952                 h_sysfile=true;
8953                 echo "<sys/file.h> defines the *_OK access constants." >&4
8954         elif $test `./findhdr fcntl.h` && \
8955                 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
8956                 h_fcntl=true;
8957                 echo "<fcntl.h> defines the *_OK access constants." >&4
8958         elif $test `./findhdr unistd.h` && \
8959                 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
8960                 echo "<unistd.h> defines the *_OK access constants." >&4
8961         else
8962                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
8963         fi
8964         ;;
8965 esac
8966 $rm -f access*
8967
8968 : see if accessx exists
8969 set accessx d_accessx
8970 eval $inlibc
8971
8972 : see if alarm exists
8973 set alarm d_alarm
8974 eval $inlibc
8975
8976 : see if atolf exists
8977 set atolf d_atolf
8978 eval $inlibc
8979
8980 : see if atoll exists
8981 set atoll d_atoll
8982 eval $inlibc
8983
8984 : Look for GNU-cc style attribute checking
8985 echo " "
8986 echo "Checking whether your compiler can handle __attribute__ ..." >&4
8987 $cat >attrib.c <<'EOCP'
8988 #include <stdio.h>
8989 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
8990 EOCP
8991 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
8992         if $contains 'warning' attrib.out >/dev/null 2>&1; then
8993                 echo "Your C compiler doesn't fully support __attribute__."
8994                 val="$undef"
8995         else
8996                 echo "Your C compiler supports __attribute__."
8997                 val="$define"
8998         fi
8999 else
9000         echo "Your C compiler doesn't seem to understand __attribute__ at all."
9001         val="$undef"
9002 fi
9003 set d_attribut
9004 eval $setvar
9005 $rm -f attrib*
9006
9007 : see if bcmp exists
9008 set bcmp d_bcmp
9009 eval $inlibc
9010
9011 : see if bcopy exists
9012 set bcopy d_bcopy
9013 eval $inlibc
9014
9015 : see if this is a unistd.h system
9016 set unistd.h i_unistd
9017 eval $inhdr
9018
9019 : see if getpgrp exists
9020 set getpgrp d_getpgrp
9021 eval $inlibc
9022
9023 case "$d_getpgrp" in
9024 "$define")
9025         echo " "
9026         echo "Checking to see which flavor of getpgrp is in use..."
9027         $cat >try.c <<EOP
9028 #$i_unistd I_UNISTD
9029 #include <sys/types.h>
9030 #ifdef I_UNISTD
9031 #  include <unistd.h>
9032 #endif
9033 int main()
9034 {
9035         if (getuid() == 0) {
9036                 printf("(I see you are running Configure as super-user...)\n");
9037                 setuid(1);
9038         }
9039 #ifdef TRY_BSD_PGRP
9040         if (getpgrp(1) == 0)
9041                 exit(0);
9042 #else
9043         if (getpgrp() > 0)
9044                 exit(0);
9045 #endif
9046         exit(1);
9047 }
9048 EOP
9049         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
9050                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
9051                 val="$define"
9052         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
9053                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
9054                 val="$undef"
9055         else
9056                 echo "I can't seem to compile and run the test program."
9057                 if ./usg; then
9058                         xxx="a USG one, i.e. you use getpgrp()."
9059                 else
9060                         # SVR4 systems can appear rather BSD-ish.
9061                         case "$i_unistd" in
9062                         $undef)
9063                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
9064                                 val="$define"
9065                                 ;;
9066                         $define)
9067                                 xxx="probably a USG one, i.e. you use getpgrp()."
9068                                 val="$undef"
9069                                 ;;
9070                         esac
9071                 fi
9072                 echo "Assuming your getpgrp is $xxx" >&4
9073         fi
9074         ;;
9075 *) val="$undef";;
9076 esac
9077 set d_bsdgetpgrp
9078 eval $setvar
9079 $rm -f try try.*
9080
9081 : see if setpgrp exists
9082 set setpgrp d_setpgrp
9083 eval $inlibc
9084
9085 case "$d_setpgrp" in
9086 "$define")
9087         echo " "
9088         echo "Checking to see which flavor of setpgrp is in use..."
9089         $cat >try.c <<EOP
9090 #$i_unistd I_UNISTD
9091 #include <sys/types.h>
9092 #ifdef I_UNISTD
9093 #  include <unistd.h>
9094 #endif
9095 int main()
9096 {
9097         if (getuid() == 0) {
9098                 printf("(I see you are running Configure as super-user...)\n");
9099                 setuid(1);
9100         }
9101 #ifdef TRY_BSD_PGRP
9102         if (-1 == setpgrp(1, 1))
9103                 exit(0);
9104 #else
9105         if (setpgrp() != -1)
9106                 exit(0);
9107 #endif
9108         exit(1);
9109 }
9110 EOP
9111         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
9112                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
9113                 val="$define"
9114         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
9115                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
9116                 val="$undef"
9117         else
9118                 echo "(I can't seem to compile and run the test program.)"
9119                 if ./usg; then
9120                         xxx="a USG one, i.e. you use setpgrp()."
9121                 else
9122                         # SVR4 systems can appear rather BSD-ish.
9123                         case "$i_unistd" in
9124                         $undef)
9125                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
9126                                 val="$define"
9127                                 ;;
9128                         $define)
9129                                 xxx="probably a USG one, i.e. you use setpgrp()."
9130                                 val="$undef"
9131                                 ;;
9132                         esac
9133                 fi
9134                 echo "Assuming your setpgrp is $xxx" >&4
9135         fi
9136         ;;
9137 *) val="$undef";;
9138 esac
9139 set d_bsdsetpgrp
9140 eval $setvar
9141 $rm -f try try.*
9142 : see if bzero exists
9143 set bzero d_bzero
9144 eval $inlibc
9145
9146 : see if signal is declared as pointer to function returning int or void
9147 echo " "
9148 xxx=`./findhdr signal.h`
9149 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
9150 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
9151         echo "You have int (*signal())() instead of void." >&4
9152         val="$undef"
9153 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
9154         echo "You have void (*signal())()." >&4
9155         val="$define"
9156 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
9157         echo "You have int (*signal())() instead of void." >&4
9158         val="$undef"
9159 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
9160         echo "You have void (*signal())()." >&4
9161         val="$define"
9162 else
9163         case "$d_voidsig" in
9164         '')
9165         echo "I can't determine whether signal handler returns void or int..." >&4
9166                 dflt=void
9167                 rp="What type does your signal handler return?"
9168                 . ./myread
9169                 case "$ans" in
9170                 v*) val="$define";;
9171                 *) val="$undef";;
9172                 esac;;
9173         "$define")
9174                 echo "As you already told me, signal handler returns void." >&4
9175                 val="$define"
9176                 ;;
9177         *)      echo "As you already told me, signal handler returns int." >&4
9178                 val="$undef"
9179                 ;;
9180         esac
9181 fi
9182 set d_voidsig
9183 eval $setvar
9184 case "$d_voidsig" in
9185 "$define") signal_t="void";;
9186 *) signal_t="int";;
9187 esac
9188 $rm -f $$.tmp
9189
9190 : check for ability to cast large floats to 32-bit ints.
9191 echo " "
9192 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
9193 if $test "$intsize" -ge 4; then
9194         xxx=int
9195 else
9196         xxx=long
9197 fi
9198 $cat >try.c <<EOCP
9199 #include <stdio.h>
9200 #include <sys/types.h>
9201 #include <signal.h>
9202 $signal_t blech(s) int s; { exit(3); }
9203 int main()
9204 {
9205         $xxx i32;
9206         double f, g;
9207         int result = 0;
9208         char str[16];
9209         signal(SIGFPE, blech);
9210
9211         /* Don't let compiler optimize the test away.  Store the number 
9212            in a writable string for gcc to pass to sscanf under HP/UX.
9213         */
9214         sprintf(str, "2147483647");
9215         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
9216         g = 10 * f;
9217         i32  = ($xxx) g;
9218
9219         /* x86 processors will probably give 0x8000 0000, which is a
9220        sign change.  We don't want that.  We want to mimic SPARC
9221            behavior here, which is to preserve the sign and give
9222            back 0x7fff ffff.
9223         */
9224         if (i32 != ($xxx) f)
9225                 result |= 1;
9226         exit(result);
9227 }
9228 EOCP
9229 set try
9230 if eval $compile_ok; then
9231         $run ./try
9232         yyy=$?
9233 else
9234         echo "(I can't seem to compile the test program--assuming it can't)"
9235         yyy=1
9236 fi
9237 case "$yyy" in
9238 0)      val="$define"
9239         echo "Yup, it can."
9240         ;;
9241 *)      val="$undef"
9242         echo "Nope, it can't."
9243         ;;
9244 esac
9245 set d_casti32
9246 eval $setvar
9247 $rm -f try try.*
9248
9249 : check for ability to cast negative floats to unsigned
9250 echo " "
9251 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
9252 $cat >try.c <<EOCP
9253 #include <stdio.h>
9254 #include <sys/types.h>
9255 #include <signal.h>
9256 $signal_t blech(s) int s; { exit(7); }
9257 $signal_t blech_in_list(s) int s; { exit(4); }
9258 unsigned long dummy_long(p) unsigned long p; { return p; }
9259 unsigned int dummy_int(p) unsigned int p; { return p; }
9260 unsigned short dummy_short(p) unsigned short p; { return p; }
9261 int main()
9262 {
9263         double f;
9264         unsigned long along;
9265         unsigned int aint;
9266         unsigned short ashort;
9267         int result = 0;
9268         char str[16];
9269         
9270         /* Frustrate gcc-2.7.2's optimizer which failed this test with
9271            a direct f = -123. assignment.  gcc-2.8.0 reportedly
9272            optimized the whole file away
9273         */
9274         /* Store the number in a writable string for gcc to pass to 
9275            sscanf under HP/UX.
9276         */
9277         sprintf(str, "-123");
9278         sscanf(str, "%lf", &f);  /* f = -123.; */
9279
9280         signal(SIGFPE, blech);
9281         along = (unsigned long)f;
9282         aint = (unsigned int)f;
9283         ashort = (unsigned short)f;
9284         if (along != (unsigned long)-123)
9285                 result |= 1;
9286         if (aint != (unsigned int)-123)
9287                 result |= 1;
9288         if (ashort != (unsigned short)-123)
9289                 result |= 1;
9290         sprintf(str, "1073741824.");
9291         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
9292         f = f + f;
9293         along = 0;
9294         along = (unsigned long)f;
9295         if (along != 0x80000000)
9296                 result |= 2;
9297         f -= 1.;
9298         along = 0;
9299         along = (unsigned long)f;
9300         if (along != 0x7fffffff)
9301                 result |= 1;
9302         f += 2.;
9303         along = 0;
9304         along = (unsigned long)f;
9305         if (along != 0x80000001)
9306                 result |= 2;
9307         if (result)
9308                 exit(result);
9309         signal(SIGFPE, blech_in_list);
9310         sprintf(str, "123.");
9311         sscanf(str, "%lf", &f);  /* f = 123.; */
9312         along = dummy_long((unsigned long)f);
9313         aint = dummy_int((unsigned int)f);
9314         ashort = dummy_short((unsigned short)f);
9315         if (along != (unsigned long)123)
9316                 result |= 4;
9317         if (aint != (unsigned int)123)
9318                 result |= 4;
9319         if (ashort != (unsigned short)123)
9320                 result |= 4;
9321         exit(result);
9322
9323 }
9324 EOCP
9325 set try
9326 if eval $compile_ok; then
9327         $run ./try
9328         castflags=$?
9329 else
9330         echo "(I can't seem to compile the test program--assuming it can't)"
9331         castflags=7
9332 fi
9333 case "$castflags" in
9334 0)      val="$define"
9335         echo "Yup, it can."
9336         ;;
9337 *)      val="$undef"
9338         echo "Nope, it can't."
9339         ;;
9340 esac
9341 set d_castneg
9342 eval $setvar
9343 $rm -f try.*
9344
9345 : see if vprintf exists
9346 echo " "
9347 if set vprintf val -f d_vprintf; eval $csym; $val; then
9348         echo 'vprintf() found.' >&4
9349         val="$define"
9350         $cat >try.c <<'EOF'
9351 #include <varargs.h>
9352
9353 int main() { xxx("foo"); }
9354
9355 xxx(va_alist)
9356 va_dcl
9357 {
9358         va_list args;
9359         char buf[10];
9360
9361         va_start(args);
9362         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
9363 }
9364 EOF
9365         set try
9366         if eval $compile && $run ./try; then
9367                 echo "Your vsprintf() returns (int)." >&4
9368                 val2="$undef"
9369         else
9370                 echo "Your vsprintf() returns (char*)." >&4
9371                 val2="$define"
9372         fi
9373 else
9374         echo 'vprintf() NOT found.' >&4
9375                 val="$undef"
9376                 val2="$undef"
9377 fi
9378 $rm -f try try.*
9379 set d_vprintf
9380 eval $setvar
9381 val=$val2
9382 set d_charvspr
9383 eval $setvar
9384
9385 : see if chown exists
9386 set chown d_chown
9387 eval $inlibc
9388
9389 : see if chroot exists
9390 set chroot d_chroot
9391 eval $inlibc
9392
9393 : see if chsize exists
9394 set chsize d_chsize
9395 eval $inlibc
9396
9397 : see if class exists
9398 set class d_class
9399 eval $inlibc
9400
9401 hasstruct='varname=$1; struct=$2; shift; shift;
9402 while $test $# -ge 2; do
9403         case "$1" in
9404         $define) echo "#include <$2>";;
9405         esac ;
9406     shift 2;
9407 done > try.c;
9408 echo "int main () { struct $struct foo; }" >> try.c;
9409 set try;
9410 if eval $compile; then
9411         val="$define";
9412 else
9413         val="$undef";
9414 fi;
9415 set $varname;
9416 eval $setvar;
9417 $rm -f try.c try.o'
9418
9419 : see if sys/types.h has to be included
9420 set sys/types.h i_systypes
9421 eval $inhdr
9422
9423 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
9424 while $test $# -ge 2; do
9425         case "$1" in
9426         $define) echo "#include <$2>";;
9427         esac ;
9428     shift 2;
9429 done > try.c;
9430 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
9431 set try;
9432 if eval $compile; then
9433         val="$define";
9434 else
9435         val="$undef";
9436 fi;
9437 set $varname;
9438 eval $setvar;
9439 $rm -f try.c try.o'
9440
9441 socketlib=''
9442 sockethdr=''
9443 : see whether socket exists
9444 echo " "
9445 $echo $n "Hmm... $c" >&4
9446 if set socket val -f d_socket; eval $csym; $val; then
9447         echo "Looks like you have Berkeley networking support." >&4
9448         d_socket="$define"
9449         if set setsockopt val -f; eval $csym; $val; then
9450                 d_oldsock="$undef"
9451         else
9452                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
9453                 d_oldsock="$define"
9454         fi
9455 else
9456         if $contains socklib libc.list >/dev/null 2>&1; then
9457                 echo "Looks like you have Berkeley networking support." >&4
9458                 d_socket="$define"
9459                 : we will have to assume that it supports the 4.2 BSD interface
9460                 d_oldsock="$undef"
9461         else
9462                 echo "You don't have Berkeley networking in libc$_a..." >&4
9463                 if test "X$d_socket" = "X$define"; then
9464                    echo "...but you seem to believe that you have sockets." >&4
9465                 else
9466                         for net in net socket
9467                         do
9468                                 if test -f /usr/lib/lib$net$_a; then
9469                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
9470                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
9471                                         if $contains socket libc.list >/dev/null 2>&1; then
9472                                                 d_socket="$define"
9473                                                 socketlib="-l$net"
9474                                                 case "$net" in
9475                                                 net)
9476                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
9477                                                         sockethdr="-I/usr/netinclude"
9478                                                         ;;
9479                                                 esac
9480                                                 echo "Found Berkeley sockets interface in lib$net." >&4 
9481                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
9482                                                         d_oldsock="$undef"
9483                                                 else
9484                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
9485                                                         d_oldsock="$define"
9486                                                 fi
9487                                                 break
9488                                         fi
9489                                 fi
9490                         done
9491                         if test "X$d_socket" != "X$define"; then
9492                            echo "or anywhere else I see." >&4
9493                            d_socket="$undef"
9494                            d_oldsock="$undef"
9495                         fi
9496                 fi
9497         fi
9498 fi
9499
9500 : see if socketpair exists
9501 set socketpair d_sockpair
9502 eval $inlibc
9503
9504
9505 echo " "
9506 echo "Checking the availability of certain socket constants..." >&4
9507 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
9508         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
9509         $cat >try.c <<EOF
9510 #include <sys/types.h>
9511 #include <sys/socket.h>
9512 int main() {
9513     int i = $ENUM;
9514 }
9515 EOF
9516         val="$undef"
9517         set try; if eval $compile; then
9518                 val="$define"
9519         fi
9520         set d_${enum}; eval $setvar
9521         $rm -f try.c try
9522 done
9523
9524 : see if this is a sys/uio.h system
9525 set sys/uio.h i_sysuio
9526 eval $inhdr
9527
9528
9529 echo " "
9530 echo "Checking to see if your system supports struct cmsghdr..." >&4
9531 set d_cmsghdr_s cmsghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
9532 eval $hasstruct
9533 case "$d_cmsghdr_s" in
9534 "$define")      echo "Yes, it does."   ;;
9535 *)              echo "No, it doesn't." ;;
9536 esac
9537
9538
9539 : check for const keyword
9540 echo " "
9541 echo 'Checking to see if your C compiler knows about "const"...' >&4
9542 $cat >const.c <<'EOCP'
9543 typedef struct spug { int drokk; } spug;
9544 int main()
9545 {
9546         const char *foo;
9547         const spug y;
9548 }
9549 EOCP
9550 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
9551         val="$define"
9552         echo "Yup, it does."
9553 else
9554         val="$undef"
9555         echo "Nope, it doesn't."
9556 fi
9557 set d_const
9558 eval $setvar
9559
9560 : see if crypt exists
9561 echo " "
9562 set crypt d_crypt
9563 eval $inlibc
9564 case "$d_crypt" in
9565 $define) cryptlib='' ;;
9566 *)      if set crypt val -f d_crypt; eval $csym; $val; then
9567                 echo 'crypt() found.' >&4
9568                 val="$define"
9569                 cryptlib=''
9570         else
9571                 cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
9572                 if $test -z "$cryptlib"; then
9573                         cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
9574                 else
9575                         cryptlib=-lcrypt
9576                 fi
9577                 if $test -z "$cryptlib"; then
9578                         cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
9579                 else
9580                         cryptlib=-lcrypt
9581                 fi
9582                 if $test -z "$cryptlib"; then
9583                         cryptlib=`./loc libcrypt$_a "" $libpth`
9584                 else
9585                         cryptlib=-lcrypt
9586                 fi
9587                 if $test -z "$cryptlib"; then
9588                         echo 'crypt() NOT found.' >&4
9589                         val="$undef"
9590                 else
9591                         val="$define"
9592                 fi
9593         fi
9594         set d_crypt
9595         eval $setvar
9596         ;;
9597 esac
9598
9599 : get csh whereabouts
9600 case "$csh" in
9601 'csh') val="$undef" ;;
9602 *) val="$define" ;;
9603 esac
9604 set d_csh
9605 eval $setvar
9606 : Respect a hint or command line value for full_csh.
9607 case "$full_csh" in
9608 '') full_csh=$csh ;;
9609 esac
9610
9611 : see if cuserid exists
9612 set cuserid d_cuserid
9613 eval $inlibc
9614
9615 : see if this is a limits.h system
9616 set limits.h i_limits
9617 eval $inhdr
9618
9619 : see if this is a float.h system
9620 set float.h i_float
9621 eval $inhdr
9622
9623 : See if number of significant digits in a double precision number is known
9624 echo " "
9625 $cat >dbl_dig.c <<EOM
9626 #$i_limits I_LIMITS
9627 #$i_float I_FLOAT
9628 #ifdef I_LIMITS
9629 #include <limits.h>
9630 #endif
9631 #ifdef I_FLOAT
9632 #include <float.h>
9633 #endif
9634 #ifdef DBL_DIG
9635 printf("Contains DBL_DIG");
9636 #endif
9637 EOM
9638 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
9639 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
9640         echo "DBL_DIG found." >&4
9641         val="$define"
9642 else
9643         echo "DBL_DIG NOT found." >&4
9644         val="$undef"
9645 fi
9646 $rm -f dbl_dig.?
9647 set d_dbl_dig
9648 eval $setvar
9649
9650 hasproto='varname=$1; func=$2; shift; shift;
9651 while $test $# -ge 2; do
9652         case "$1" in
9653         $define) echo "#include <$2>";;
9654         esac ;
9655     shift 2;
9656 done > try.c;
9657 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
9658 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
9659         echo "$func() prototype found.";
9660         val="$define";
9661 else
9662         echo "$func() prototype NOT found.";
9663         val="$undef";
9664 fi;
9665 set $varname;
9666 eval $setvar;
9667 $rm -f try.c tryout.c'
9668
9669 : see if dbm.h is available
9670 : see if dbmclose exists
9671 set dbmclose d_dbmclose
9672 eval $inlibc
9673
9674 case "$d_dbmclose" in
9675 $define)
9676         set dbm.h i_dbm
9677         eval $inhdr
9678         case "$i_dbm" in
9679         $define)
9680                 val="$undef"
9681                 set i_rpcsvcdbm
9682                 eval $setvar
9683                 ;;
9684         *)      set rpcsvc/dbm.h i_rpcsvcdbm
9685                 eval $inhdr
9686                 ;;
9687         esac
9688         ;;
9689 *)      echo "We won't be including <dbm.h>"
9690         val="$undef"
9691         set i_dbm
9692         eval $setvar
9693         val="$undef"
9694         set i_rpcsvcdbm
9695         eval $setvar
9696         ;;
9697 esac
9698
9699 : see if prototype for dbminit is available
9700 echo " "
9701 set d_dbminitproto dbminit $i_dbm dbm.h
9702 eval $hasproto
9703
9704 : see if difftime exists
9705 set difftime d_difftime
9706 eval $inlibc
9707
9708 : see if this is a dirent system
9709 echo " "
9710 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
9711         val="$define"
9712         echo "<dirent.h> found." >&4
9713 else
9714         val="$undef"
9715         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
9716                 echo "<sys/dir.h> found." >&4
9717                 echo " "
9718         else
9719                 xinc=`./findhdr sys/ndir.h`
9720         fi
9721         echo "<dirent.h> NOT found." >&4
9722 fi
9723 set i_dirent
9724 eval $setvar
9725
9726 : Look for type of directory structure.
9727 echo " "
9728 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9729
9730 case "$direntrytype" in
9731 ''|' ')
9732         case "$i_dirent" in
9733         $define) guess1='struct dirent' ;;
9734         *) guess1='struct direct'  ;;
9735         esac
9736         ;;
9737 *)      guess1="$direntrytype"
9738         ;;
9739 esac
9740
9741 case "$guess1" in
9742 'struct dirent') guess2='struct direct' ;;
9743 *) guess2='struct dirent' ;;
9744 esac
9745                 
9746 if $contains "$guess1" try.c >/dev/null 2>&1; then
9747         direntrytype="$guess1"
9748         echo "Your directory entries are $direntrytype." >&4
9749 elif $contains "$guess2" try.c >/dev/null 2>&1; then
9750         direntrytype="$guess2"
9751         echo "Your directory entries seem to be $direntrytype." >&4
9752 else
9753         echo "I don't recognize your system's directory entries." >&4
9754         rp="What type is used for directory entries on this system?"
9755         dflt="$guess1"
9756         . ./myread
9757         direntrytype="$ans"
9758 fi
9759 $rm -f try.c
9760
9761
9762 : see if the directory entry stores field length
9763 echo " "
9764 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9765 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
9766         echo "Good, your directory entry keeps length information in d_namlen." >&4
9767         val="$define"
9768 else
9769         echo "Your directory entry does not know about the d_namlen field." >&4
9770         val="$undef"
9771 fi
9772 set d_dirnamlen
9773 eval $setvar
9774 $rm -f try.c
9775
9776 : see if this is an sysdir system
9777 set sys/dir.h i_sysdir
9778 eval $inhdr
9779
9780 : see if this is an sysndir system
9781 set sys/ndir.h i_sysndir
9782 eval $inhdr
9783
9784 : Look for dirfd
9785 echo " "
9786 $cat >dirfd.c <<EOM
9787 #include <stdio.h>
9788 #$i_dirent I_DIRENT             /**/
9789 #$i_sysdir I_SYS_DIR            /**/
9790 #$i_sysndir I_SYS_NDIR          /**/
9791 #$i_systypes I_SYS_TYPES        /**/
9792 #if defined(I_SYS_TYPES)
9793 #include <sys/types.h>
9794 #endif
9795 #if defined(I_DIRENT)
9796 #include <dirent.h>
9797 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
9798 #include <sys/dir.h>
9799 #endif
9800 #else
9801 #ifdef I_SYS_NDIR
9802 #include <sys/ndir.h>
9803 #else
9804 #ifdef I_SYS_DIR
9805 #ifdef hp9000s500
9806 #include <ndir.h>       /* may be wrong in the future */
9807 #else
9808 #include <sys/dir.h>
9809 #endif
9810 #endif
9811 #endif
9812 #endif 
9813 int main() {
9814         DIR *dirp = opendir(".");
9815         if (dirfd(dirp) >= 0)
9816                 exit(0);
9817         else
9818                 exit(1);
9819 }
9820 EOM
9821 set dirfd
9822 if eval $compile; then
9823         val="$define"
9824 fi
9825 case "$val" in
9826 $define)        echo "dirfd() found." >&4       ;;
9827 *)              echo "dirfd() NOT found." >&4   ;;
9828 esac
9829 set d_dirfd
9830 eval $setvar
9831 $rm -f dirfd*
9832
9833 : see if dlerror exists
9834 xxx_runnm="$runnm"
9835 runnm=false
9836 set dlerror d_dlerror
9837 eval $inlibc
9838 runnm="$xxx_runnm"
9839
9840 : see if dlfcn is available
9841 set dlfcn.h i_dlfcn
9842 eval $inhdr
9843
9844 case "$usedl" in
9845 $define|y|true)
9846         $cat << EOM
9847
9848 On a few systems, the dynamically loaded modules that perl generates and uses
9849 will need a different extension than shared libs. The default will probably
9850 be appropriate.
9851
9852 EOM
9853         case "$dlext" in
9854         '')     dflt="$so" ;;
9855         *)      dflt="$dlext" ;;
9856         esac
9857         rp='What is the extension of dynamically loaded modules'
9858         . ./myread
9859         dlext="$ans"
9860         ;;
9861 *)
9862         dlext="none"
9863         ;;
9864 esac
9865
9866 : Check if dlsym need a leading underscore
9867 echo " "
9868 val="$undef"
9869
9870 case "$dlsrc" in
9871 dl_dlopen.xs)
9872         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
9873         $cat >dyna.c <<'EOM'
9874 fred () { }
9875 EOM
9876
9877 $cat >fred.c<<EOM
9878
9879 #include <stdio.h>
9880 #$i_dlfcn I_DLFCN
9881 #ifdef I_DLFCN
9882 #include <dlfcn.h>      /* the dynamic linker include file for SunOS/Solaris */
9883 #else
9884 #include <sys/types.h>
9885 #include <nlist.h>
9886 #include <link.h>
9887 #endif
9888
9889 extern int fred() ;
9890
9891 int main()
9892 {
9893     void * handle ;
9894     void * symbol ;
9895 #ifndef RTLD_LAZY
9896     int mode = 1 ;
9897 #else
9898     int mode = RTLD_LAZY ;
9899 #endif
9900     handle = dlopen("./dyna.$dlext", mode) ;
9901     if (handle == NULL) {
9902         printf ("1\n") ;
9903         fflush (stdout) ;
9904         exit(0);
9905     }
9906     symbol = dlsym(handle, "fred") ;
9907     if (symbol == NULL) {
9908         /* try putting a leading underscore */
9909         symbol = dlsym(handle, "_fred") ;
9910         if (symbol == NULL) {
9911             printf ("2\n") ;
9912             fflush (stdout) ;
9913             exit(0);
9914         }
9915         printf ("3\n") ;
9916     }
9917     else
9918         printf ("4\n") ;
9919     fflush (stdout) ;
9920     exit(0);
9921 }
9922 EOM
9923         : Call the object file tmp-dyna.o in case dlext=o.
9924         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
9925                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
9926                 $ld -o dyna.$dlext $ldflags $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && 
9927                 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1 && $to dyna.$dlext; then
9928                 xxx=`$run ./fred`
9929                 case $xxx in
9930                 1)      echo "Test program failed using dlopen." >&4
9931                         echo "Perhaps you should not use dynamic loading." >&4;;
9932                 2)      echo "Test program failed using dlsym." >&4
9933                         echo "Perhaps you should not use dynamic loading." >&4;;
9934                 3)      echo "dlsym needs a leading underscore" >&4
9935                         val="$define" ;;
9936                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
9937                 esac
9938         else
9939                 echo "I can't compile and run the test program." >&4
9940                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
9941         fi
9942         ;;
9943 esac
9944                 
9945 $rm -f fred fred.* dyna.$dlext dyna.* tmp-dyna.*
9946
9947 set d_dlsymun
9948 eval $setvar
9949
9950 : see if prototype for drand48 is available
9951 echo " "
9952 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
9953 eval $hasproto
9954
9955 : see if dup2 exists
9956 set dup2 d_dup2
9957 eval $inlibc
9958
9959 : see if eaccess exists
9960 set eaccess d_eaccess
9961 eval $inlibc
9962
9963 : see if endgrent exists
9964 set endgrent d_endgrent
9965 eval $inlibc
9966
9967 : see if endhostent exists
9968 set endhostent d_endhent
9969 eval $inlibc
9970
9971 : see if endnetent exists
9972 set endnetent d_endnent
9973 eval $inlibc
9974
9975 : see if endprotoent exists
9976 set endprotoent d_endpent
9977 eval $inlibc
9978
9979 : see if endpwent exists
9980 set endpwent d_endpwent
9981 eval $inlibc
9982
9983 : see if endservent exists
9984 set endservent d_endsent
9985 eval $inlibc
9986
9987 : Locate the flags for 'open()'
9988 echo " "
9989 $cat >try.c <<'EOCP'
9990 #include <sys/types.h>
9991 #ifdef I_FCNTL
9992 #include <fcntl.h>
9993 #endif
9994 #ifdef I_SYS_FILE
9995 #include <sys/file.h>
9996 #endif
9997 int main() {
9998         if(O_RDONLY);
9999 #ifdef O_TRUNC
10000         exit(0);
10001 #else
10002         exit(1);
10003 #endif
10004 }
10005 EOCP
10006 : check sys/file.h first to get FREAD on Sun
10007 if $test `./findhdr sys/file.h` && \
10008                 set try -DI_SYS_FILE && eval $compile; then
10009         h_sysfile=true;
10010         echo "<sys/file.h> defines the O_* constants..." >&4
10011         if $run ./try; then
10012                 echo "and you have the 3 argument form of open()." >&4
10013                 val="$define"
10014         else
10015                 echo "but not the 3 argument form of open().  Oh, well." >&4
10016                 val="$undef"
10017         fi
10018 elif $test `./findhdr fcntl.h` && \
10019                 set try -DI_FCNTL && eval $compile; then
10020         h_fcntl=true;
10021         echo "<fcntl.h> defines the O_* constants..." >&4
10022         if $run ./try; then
10023                 echo "and you have the 3 argument form of open()." >&4
10024                 val="$define"
10025         else
10026                 echo "but not the 3 argument form of open().  Oh, well." >&4
10027                 val="$undef"
10028         fi
10029 else
10030         val="$undef"
10031         echo "I can't find the O_* constant definitions!  You got problems." >&4
10032 fi
10033 set d_open3
10034 eval $setvar
10035 $rm -f try try.*
10036
10037 : see which of string.h or strings.h is needed
10038 echo " "
10039 strings=`./findhdr string.h`
10040 if $test "$strings" && $test -r "$strings"; then
10041         echo "Using <string.h> instead of <strings.h>." >&4
10042         val="$define"
10043 else
10044         val="$undef"
10045         strings=`./findhdr strings.h`
10046         if $test "$strings" && $test -r "$strings"; then
10047                 echo "Using <strings.h> instead of <string.h>." >&4
10048         else
10049                 echo "No string header found -- You'll surely have problems." >&4
10050         fi
10051 fi
10052 set i_string
10053 eval $setvar
10054 case "$i_string" in
10055 "$undef") strings=`./findhdr strings.h`;;
10056 *)        strings=`./findhdr string.h`;;
10057 esac
10058
10059 : see if this is a sys/file.h system
10060 val=''
10061 set sys/file.h val
10062 eval $inhdr
10063
10064 : do we need to include sys/file.h ?
10065 case "$val" in
10066 "$define")
10067         echo " "
10068         if $h_sysfile; then
10069                 val="$define"
10070                 echo "We'll be including <sys/file.h>." >&4
10071         else
10072                 val="$undef"
10073                 echo "We won't be including <sys/file.h>." >&4
10074         fi
10075         ;;
10076 *)
10077         h_sysfile=false
10078         ;;
10079 esac
10080 set i_sysfile
10081 eval $setvar
10082
10083 : see if fcntl.h is there
10084 val=''
10085 set fcntl.h val
10086 eval $inhdr
10087
10088 : see if we can include fcntl.h
10089 case "$val" in
10090 "$define")
10091         echo " "
10092         if $h_fcntl; then
10093                 val="$define"
10094                 echo "We'll be including <fcntl.h>." >&4
10095         else
10096                 val="$undef"
10097                 if $h_sysfile; then
10098         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
10099                 else
10100                         echo "We won't be including <fcntl.h>." >&4
10101                 fi
10102         fi
10103         ;;
10104 *)
10105         h_fcntl=false
10106         val="$undef"
10107         ;;
10108 esac
10109 set i_fcntl
10110 eval $setvar
10111
10112 : check for non-blocking I/O stuff
10113 case "$h_sysfile" in
10114 true) echo "#include <sys/file.h>" > head.c;;
10115 *)
10116        case "$h_fcntl" in
10117        true) echo "#include <fcntl.h>" > head.c;;
10118        *) echo "#include <sys/fcntl.h>" > head.c;;
10119        esac
10120        ;;
10121 esac
10122 echo " "
10123 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
10124 case "$o_nonblock" in
10125 '')
10126         $cat head.c > try.c
10127         $cat >>try.c <<EOCP
10128 #include <stdio.h>
10129 #include <stdlib.h>
10130 #$i_fcntl I_FCNTL
10131 #ifdef I_FCNTL
10132 #include <fcntl.h>
10133 #endif
10134 int main() {
10135 #ifdef O_NONBLOCK
10136         printf("O_NONBLOCK\n");
10137         exit(0);
10138 #endif
10139 #ifdef O_NDELAY
10140         printf("O_NDELAY\n");
10141         exit(0);
10142 #endif
10143 #ifdef FNDELAY
10144         printf("FNDELAY\n");
10145         exit(0);
10146 #endif
10147         exit(0);
10148 }
10149 EOCP
10150         set try
10151         if eval $compile_ok; then
10152                 o_nonblock=`$run ./try`
10153                 case "$o_nonblock" in
10154                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
10155                 *) echo "Seems like we can use $o_nonblock.";;
10156                 esac
10157         else
10158                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
10159         fi
10160         ;;
10161 *) echo "Using $hint value $o_nonblock.";;
10162 esac
10163 $rm -f try try.* .out core
10164
10165 echo " "
10166 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
10167 case "$eagain" in
10168 '')
10169         $cat head.c > try.c
10170         $cat >>try.c <<EOCP
10171 #include <errno.h>
10172 #include <sys/types.h>
10173 #include <signal.h>
10174 #include <stdio.h> 
10175 #include <stdlib.h> 
10176 #$i_fcntl I_FCNTL
10177 #ifdef I_FCNTL
10178 #include <fcntl.h>
10179 #endif
10180 #define MY_O_NONBLOCK $o_nonblock
10181 #ifndef errno  /* XXX need better Configure test */
10182 extern int errno;
10183 #endif
10184 #$i_unistd I_UNISTD
10185 #ifdef I_UNISTD
10186 #include <unistd.h>
10187 #endif
10188 #$i_string I_STRING
10189 #ifdef I_STRING
10190 #include <string.h>
10191 #else
10192 #include <strings.h>
10193 #endif
10194 $signal_t blech(x) int x; { exit(3); }
10195 EOCP
10196         $cat >> try.c <<'EOCP'
10197 int main()
10198 {
10199         int pd[2];
10200         int pu[2];
10201         char buf[1];
10202         char string[100];
10203
10204         pipe(pd);       /* Down: child -> parent */
10205         pipe(pu);       /* Up: parent -> child */
10206         if (0 != fork()) {
10207                 int ret;
10208                 close(pd[1]);   /* Parent reads from pd[0] */
10209                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
10210 #ifdef F_SETFL
10211                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
10212                         exit(1);
10213 #else
10214                 exit(4);
10215 #endif
10216                 signal(SIGALRM, blech);
10217                 alarm(5);
10218                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
10219                         exit(2);
10220                 sprintf(string, "%d\n", ret);
10221                 write(2, string, strlen(string));
10222                 alarm(0);
10223 #ifdef EAGAIN
10224                 if (errno == EAGAIN) {
10225                         printf("EAGAIN\n");
10226                         goto ok;
10227                 }
10228 #endif
10229 #ifdef EWOULDBLOCK
10230                 if (errno == EWOULDBLOCK)
10231                         printf("EWOULDBLOCK\n");
10232 #endif
10233         ok:
10234                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
10235                 sleep(2);                               /* Give it time to close our pipe */
10236                 alarm(5);
10237                 ret = read(pd[0], buf, 1);      /* Should read EOF */
10238                 alarm(0);
10239                 sprintf(string, "%d\n", ret);
10240                 write(4, string, strlen(string));
10241                 exit(0);
10242         }
10243
10244         close(pd[0]);                   /* We write to pd[1] */
10245         close(pu[1]);                   /* We read from pu[0] */
10246         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
10247         close(pd[1]);                   /* Pipe pd is now fully closed! */
10248         exit(0);                                /* Bye bye, thank you for playing! */
10249 }
10250 EOCP
10251         set try
10252         if eval $compile_ok; then
10253                 echo "$startsh" >mtry
10254                 echo "$run ./try >try.out 2>try.ret 4>try.err || exit 4" >>mtry
10255                 chmod +x mtry
10256                 ./mtry >/dev/null 2>&1
10257                 case $? in
10258                 0) eagain=`$cat try.out`;;
10259                 1) echo "Could not perform non-blocking setting!";;
10260                 2) echo "I did a successful read() for something that was not there!";;
10261                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
10262                 4) echo "Could not find F_SETFL!";;
10263                 *) echo "Something terribly wrong happened during testing.";;
10264                 esac
10265                 rd_nodata=`$cat try.ret`
10266                 echo "A read() system call with no data present returns $rd_nodata."
10267                 case "$rd_nodata" in
10268                 0|-1) ;;
10269                 *)
10270                         echo "(That's peculiar, fixing that to be -1.)"
10271                         rd_nodata=-1
10272                         ;;
10273                 esac
10274                 case "$eagain" in
10275                 '')
10276                         echo "Forcing errno EAGAIN on read() with no data available."
10277                         eagain=EAGAIN
10278                         ;;
10279                 *)
10280                         echo "Your read() sets errno to $eagain when no data is available."
10281                         ;;
10282                 esac
10283                 status=`$cat try.err`
10284                 case "$status" in
10285                 0) echo "And it correctly returns 0 to signal EOF.";;
10286                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
10287                 *) echo "However, your read() returns '$status' on EOF??";;
10288                 esac
10289                 val="$define"
10290                 if test "$status" = "$rd_nodata"; then
10291                         echo "WARNING: you can't distinguish between EOF and no data!"
10292                         val="$undef"
10293                 fi
10294         else
10295                 echo "I can't compile the test program--assuming errno EAGAIN will do."
10296                 eagain=EAGAIN
10297         fi
10298         set d_eofnblk
10299         eval $setvar
10300         ;;
10301 *)
10302         echo "Using $hint value $eagain."
10303         echo "Your read() returns $rd_nodata when no data is present."
10304         case "$d_eofnblk" in
10305         "$define") echo "And you can see EOF because read() returns 0.";;
10306         "$undef") echo "But you can't see EOF status from read() returned value.";;
10307         *)
10308                 echo "(Assuming you can't see EOF status from read anyway.)"
10309                 d_eofnblk=$undef
10310                 ;;
10311         esac
10312         ;;
10313 esac
10314 $rm -f try try.* .out core head.c mtry
10315
10316 : see if fchdir exists
10317 set fchdir d_fchdir
10318 eval $inlibc
10319
10320 : see if fchmod exists
10321 set fchmod d_fchmod
10322 eval $inlibc
10323
10324 : see if fchown exists
10325 set fchown d_fchown
10326 eval $inlibc
10327
10328 : see if this is an fcntl system
10329 set fcntl d_fcntl
10330 eval $inlibc
10331
10332 echo " "
10333 : See if fcntl-based locking works.
10334 $cat >try.c <<EOCP
10335 #include <stdlib.h>
10336 #include <unistd.h>
10337 #include <fcntl.h>
10338 #include <signal.h>
10339 $signal_t blech(x) int x; { exit(3); }
10340 int main() {
10341 #if defined(F_SETLK) && defined(F_SETLKW)
10342      struct flock flock;
10343      int retval, fd;
10344      fd = open("try.c", O_RDONLY);
10345      flock.l_type = F_RDLCK;
10346      flock.l_whence = SEEK_SET;
10347      flock.l_start = flock.l_len = 0;
10348      signal(SIGALRM, blech);
10349      alarm(10);
10350      retval = fcntl(fd, F_SETLK, &flock);
10351      close(fd);
10352      (retval < 0 ? exit(2) : exit(0));
10353 #else
10354      exit(2);
10355 #endif
10356 }
10357 EOCP
10358 echo "Checking if fcntl-based file locking works... "
10359 case "$d_fcntl" in
10360 "$define")
10361         set try
10362         if eval $compile_ok; then
10363                 if $run ./try; then
10364                         echo "Yes, it seems to work."
10365                         val="$define"
10366                 else
10367                         echo "Nope, it didn't work."
10368                         val="$undef"
10369                         case "$?" in
10370                         3) $cat >&4 <<EOM
10371 ***
10372 *** I had to forcibly timeout from fcntl(..., F_SETLK, ...).
10373 *** This is (almost) impossible.
10374 *** If your NFS lock daemons are not feeling well, something like
10375 *** this may happen, please investigate.  Cannot continue, aborting.
10376 ***
10377 EOM
10378                                 exit 1
10379                                 ;;
10380                         esac
10381                 fi
10382         else
10383                 echo "I'm unable to compile the test program, so I'll assume not."
10384                 val="$undef"
10385         fi
10386         ;;
10387 *) val="$undef";
10388         echo "Nope, since you don't even have fcntl()."
10389         ;;
10390 esac
10391 set d_fcntl_can_lock
10392 eval $setvar
10393 $rm -f try*
10394
10395
10396 : see if sys/select.h has to be included
10397 set sys/select.h i_sysselct
10398 eval $inhdr
10399
10400 : see if we should include time.h, sys/time.h, or both
10401 echo " "
10402 if test "X$timeincl" = X; then
10403         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
10404         $echo $n "I'm now running the test program...$c"
10405         $cat >try.c <<'EOCP'
10406 #include <sys/types.h>
10407 #ifdef I_TIME
10408 #include <time.h>
10409 #endif
10410 #ifdef I_SYSTIME
10411 #ifdef SYSTIMEKERNEL
10412 #define KERNEL
10413 #endif
10414 #include <sys/time.h>
10415 #endif
10416 #ifdef I_SYSSELECT
10417 #include <sys/select.h>
10418 #endif
10419 int main()
10420 {
10421         struct tm foo;
10422 #ifdef S_TIMEVAL
10423         struct timeval bar;
10424 #endif
10425 #ifdef S_TIMEZONE
10426         struct timezone tzp;
10427 #endif
10428         if (foo.tm_sec == foo.tm_sec)
10429                 exit(0);
10430 #ifdef S_TIMEVAL
10431         if (bar.tv_sec == bar.tv_sec)
10432                 exit(0);
10433 #endif
10434         exit(1);
10435 }
10436 EOCP
10437         flags=''
10438         for s_timezone in '-DS_TIMEZONE' ''; do
10439         sysselect=''
10440         for s_timeval in '-DS_TIMEVAL' ''; do
10441         for i_systimek in '' '-DSYSTIMEKERNEL'; do
10442         for i_time in '' '-DI_TIME'; do
10443         for i_systime in '-DI_SYSTIME' ''; do
10444                 case "$flags" in
10445                 '') $echo $n ".$c"
10446                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
10447                         if eval $compile; then
10448                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
10449                                 shift
10450                                 flags="$*"
10451                                 echo " "
10452                                 $echo $n "Succeeded with $flags$c"
10453                         fi
10454                         ;;
10455                 esac
10456         done
10457         done
10458         done
10459         done
10460         done
10461         timeincl=''
10462         echo " "
10463         case "$flags" in
10464         *SYSTIMEKERNEL*) i_systimek="$define"
10465                 timeincl=`./findhdr sys/time.h`
10466                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
10467         *) i_systimek="$undef";;
10468         esac
10469         case "$flags" in
10470         *I_TIME*) i_time="$define"
10471                 timeincl=`./findhdr time.h`" $timeincl"
10472                 echo "We'll include <time.h>." >&4;;
10473         *) i_time="$undef";;
10474         esac
10475         case "$flags" in
10476         *I_SYSTIME*) i_systime="$define"
10477                 timeincl=`./findhdr sys/time.h`" $timeincl"
10478                 echo "We'll include <sys/time.h>." >&4;;
10479         *) i_systime="$undef";;
10480         esac
10481         $rm -f try.c try
10482 fi
10483 : see if struct tm knows about tm_zone
10484 case "$i_systime$i_time" in
10485 *$define*) 
10486         echo " "
10487         echo "Checking to see if your struct tm has tm_zone field..." >&4
10488         set d_tm_tm_zone tm tm_zone $i_systime sys/time.h $i_time time.h
10489         eval $hasfield
10490         ;;
10491 *)      val="$undef"
10492         set d_tm_tm_zone
10493         eval $setvar
10494         ;;
10495 esac
10496 case "$d_tm_tm_zone" in
10497 "$define")      echo "Yes, it does."   ;;
10498 *)              echo "No, it doesn't." ;;
10499 esac
10500 : see if struct tm knows about tm_gmtoff
10501 case "$i_systime$i_time" in
10502 *$define*) 
10503         echo " "
10504         echo "Checking to see if your struct tm has tm_gmtoff field..." >&4
10505         set d_tm_tm_gmtoff tm tm_gmtoff $i_systime sys/time.h $i_time time.h
10506         eval $hasfield
10507         ;;
10508 *)      val="$undef"
10509         set d_tm_tm_gmtoff
10510         eval $setvar
10511         ;;
10512 esac
10513 case "$d_tm_tm_gmtoff" in
10514 "$define")      echo "Yes, it does."   ;;
10515 *)              echo "No, it doesn't." ;;
10516 esac
10517
10518 : check for fd_set items
10519 $cat <<EOM
10520
10521 Checking to see how well your C compiler handles fd_set and friends ...
10522 EOM
10523 $cat >try.c <<EOCP
10524 #$i_systime I_SYS_TIME
10525 #$i_sysselct I_SYS_SELECT
10526 #$d_socket HAS_SOCKET
10527 #include <sys/types.h>
10528 #ifdef HAS_SOCKET
10529 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
10530 #endif
10531 #ifdef I_SYS_TIME
10532 #include <sys/time.h>
10533 #endif
10534 #ifdef I_SYS_SELECT
10535 #include <sys/select.h>
10536 #endif
10537 int main() {
10538         fd_set fds;
10539
10540 #ifdef TRYBITS
10541         if(fds.fds_bits);
10542 #endif
10543
10544 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
10545         exit(0);
10546 #else
10547         exit(1);
10548 #endif
10549 }
10550 EOCP
10551 set try -DTRYBITS
10552 if eval $compile; then
10553         d_fds_bits="$define"
10554         d_fd_set="$define"
10555         echo "Well, your system knows about the normal fd_set typedef..." >&4
10556         if $run ./try; then
10557                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
10558                 d_fd_macros="$define"
10559         else
10560                 $cat >&4 <<'EOM'
10561 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
10562 EOM
10563                 d_fd_macros="$undef"
10564         fi
10565 else
10566         $cat <<'EOM'
10567 Hmm, your compiler has some difficulty with fd_set.  Checking further...
10568 EOM
10569         set try
10570         if eval $compile; then
10571                 d_fds_bits="$undef"
10572                 d_fd_set="$define"
10573                 echo "Well, your system has some sort of fd_set available..." >&4
10574                 if $run ./try; then
10575                         echo "and you have the normal fd_set macros." >&4
10576                         d_fd_macros="$define"
10577                 else
10578                         $cat <<'EOM'
10579 but not the normal fd_set macros!  Gross!  More work for me...
10580 EOM
10581                         d_fd_macros="$undef"
10582                 fi
10583         else
10584         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
10585                 d_fd_set="$undef"
10586                 d_fds_bits="$undef"
10587                 d_fd_macros="$undef"
10588         fi
10589 fi
10590 $rm -f try try.*
10591
10592 : see if fgetpos exists
10593 set fgetpos d_fgetpos
10594 eval $inlibc
10595
10596 : see if finite exists
10597 set finite d_finite
10598 eval $inlibc
10599
10600 : see if finitel exists
10601 set finitel d_finitel
10602 eval $inlibc
10603
10604 : see if flock exists
10605 set flock d_flock
10606 eval $inlibc
10607
10608 : see if prototype for flock is available
10609 echo " "
10610 set d_flockproto flock $i_sysfile sys/file.h
10611 eval $hasproto
10612
10613 : see if fork exists
10614 set fork d_fork
10615 eval $inlibc
10616
10617 : see if fp_class exists
10618 set fp_class d_fp_class
10619 eval $inlibc
10620
10621 : see if pathconf exists
10622 set pathconf d_pathconf
10623 eval $inlibc
10624
10625 : see if fpathconf exists
10626 set fpathconf d_fpathconf
10627 eval $inlibc
10628
10629 : see if fpclass exists
10630 set fpclass d_fpclass
10631 eval $inlibc
10632
10633 : see if fpclassify exists
10634 set fpclassify d_fpclassify
10635 eval $inlibc
10636
10637 : see if fpclassl exists
10638 set fpclassl d_fpclassl
10639 eval $inlibc
10640
10641
10642 : check for fpos64_t
10643 echo " "
10644 echo "Checking to see if you have fpos64_t..." >&4
10645 $cat >try.c <<EOCP
10646 #include <stdio.h>
10647 int main() { fpos64_t x = 7; }
10648 EOCP
10649 set try
10650 if eval $compile; then
10651         val="$define"
10652         echo "You have fpos64_t."
10653 else
10654         val="$undef"
10655         echo "You do not have fpos64_t."
10656         case "$fpossize" in
10657         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
10658         esac
10659 fi
10660 $rm -f try.* try
10661 set d_fpos64_t
10662 eval $setvar
10663
10664 : see if frexpl exists
10665 set frexpl d_frexpl
10666 eval $inlibc
10667
10668 : see if this is a sys/param system
10669 set sys/param.h i_sysparam
10670 eval $inhdr
10671
10672 : see if this is a sys/mount.h system
10673 set sys/mount.h i_sysmount
10674 eval $inhdr
10675
10676
10677 echo " "
10678 echo "Checking to see if your system supports struct fs_data..." >&4
10679 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
10680 eval $hasstruct
10681 case "$d_fs_data_s" in
10682 "$define")      echo "Yes, it does."   ;;
10683 *)              echo "No, it doesn't." ;;
10684 esac
10685
10686 : see if fseeko exists
10687 set fseeko d_fseeko
10688 eval $inlibc
10689 case "$longsize" in
10690 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
10691 esac
10692
10693 : see if fsetpos exists
10694 set fsetpos d_fsetpos
10695 eval $inlibc
10696
10697
10698 : see if fstatfs exists
10699 set fstatfs d_fstatfs
10700 eval $inlibc
10701
10702
10703 : see if statvfs exists
10704 set statvfs d_statvfs
10705 eval $inlibc
10706
10707 : see if fstatvfs exists
10708 set fstatvfs d_fstatvfs
10709 eval $inlibc
10710
10711
10712 : see if fsync exists
10713 set fsync d_fsync
10714 eval $inlibc
10715
10716 : see if ftello exists
10717 set ftello d_ftello
10718 eval $inlibc
10719 case "$longsize" in
10720 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
10721 esac
10722
10723 : see if getcwd exists
10724 set getcwd d_getcwd
10725 eval $inlibc
10726
10727 : see if getespwnam exists
10728 set getespwnam d_getespwnam
10729 eval $inlibc
10730
10731
10732 : see if getfsstat exists
10733 set getfsstat d_getfsstat
10734 eval $inlibc
10735
10736 : see if getgrent exists
10737 set getgrent d_getgrent
10738 eval $inlibc
10739
10740 : see if gethostbyaddr exists
10741 set gethostbyaddr d_gethbyaddr
10742 eval $inlibc
10743
10744 : see if gethostbyname exists
10745 set gethostbyname d_gethbyname
10746 eval $inlibc
10747
10748 : see if gethostent exists
10749 set gethostent d_gethent
10750 eval $inlibc
10751
10752 : see how we will look up host name
10753 echo " "
10754 call=''
10755 if set gethostname val -f d_gethname; eval $csym; $val; then
10756         echo 'gethostname() found.' >&4
10757         d_gethname="$define"
10758         call=gethostname
10759 fi
10760 if set uname val -f d_uname; eval $csym; $val; then
10761         if ./xenix; then
10762                 $cat <<'EOM'
10763 uname() was found, but you're running xenix, and older versions of xenix
10764 have a broken uname(). If you don't really know whether your xenix is old
10765 enough to have a broken system call, use the default answer.
10766
10767 EOM
10768                 dflt=y
10769                 case "$d_uname" in
10770                 "$define") dflt=n;;
10771                 esac
10772                 rp='Is your uname() broken?'
10773                 . ./myread
10774                 case "$ans" in
10775                 n*) d_uname="$define"; call=uname;;
10776                 esac
10777         else
10778                 echo 'uname() found.' >&4
10779                 d_uname="$define"
10780                 case "$call" in
10781                 '') call=uname ;;
10782                 esac
10783         fi
10784 fi
10785 case "$d_gethname" in
10786 '') d_gethname="$undef";;
10787 esac
10788 case "$d_uname" in
10789 '') d_uname="$undef";;
10790 esac
10791 case "$d_uname$d_gethname" in
10792 *define*)
10793         dflt=n
10794         cat <<EOM
10795  
10796 Every now and then someone has a $call() that lies about the hostname
10797 but can't be fixed for political or economic reasons.  If you wish, I can
10798 pretend $call() isn't there and maybe compute hostname at run-time
10799 thanks to the '$phostname' command.
10800
10801 EOM
10802         rp="Shall I ignore $call() from now on?"
10803         . ./myread
10804         case "$ans" in
10805         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
10806         esac;;
10807 esac
10808 case "$phostname" in
10809 '') aphostname='';;
10810 *) case "$aphostname" in
10811         /*) ;;
10812         *) set X $phostname
10813                 shift
10814                 file=$1
10815                 shift
10816                 file=`./loc $file $file $pth`
10817                 aphostname=`echo $file $*`
10818                 ;;
10819         esac
10820         ;;
10821 esac
10822 case "$d_uname$d_gethname" in
10823 *define*) ;;
10824 *)
10825         case "$phostname" in
10826         '')
10827                 echo "There will be no way for $package to get your hostname." >&4;;
10828         *)
10829         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
10830                 ;;
10831         esac;;
10832 esac
10833 case "$d_phostname" in
10834 '') d_phostname="$undef";;
10835 esac
10836
10837 : see if this is a netdb.h system
10838 set netdb.h i_netdb
10839 eval $inhdr
10840
10841 : see if prototypes for various gethostxxx netdb.h functions are available
10842 echo " "
10843 set d_gethostprotos gethostent $i_netdb netdb.h
10844 eval $hasproto
10845
10846 : see if getitimer exists
10847 set getitimer d_getitimer
10848 eval $inlibc
10849
10850 : see if getlogin exists
10851 set getlogin d_getlogin
10852 eval $inlibc
10853
10854 : see if getmnt exists
10855 set getmnt d_getmnt
10856 eval $inlibc
10857
10858 : see if getmntent exists
10859 set getmntent d_getmntent
10860 eval $inlibc
10861
10862 : see if getnetbyaddr exists
10863 set getnetbyaddr d_getnbyaddr
10864 eval $inlibc
10865
10866 : see if getnetbyname exists
10867 set getnetbyname d_getnbyname
10868 eval $inlibc
10869
10870 : see if getnetent exists
10871 set getnetent d_getnent
10872 eval $inlibc
10873
10874 : see if prototypes for various getnetxxx netdb.h functions are available
10875 echo " "
10876 set d_getnetprotos getnetent $i_netdb netdb.h
10877 eval $hasproto
10878
10879 : see if getpagesize exists
10880 set getpagesize d_getpagsz
10881 eval $inlibc
10882
10883
10884 : see if getprotobyname exists
10885 set getprotobyname d_getpbyname
10886 eval $inlibc
10887
10888 : see if getprotobynumber exists
10889 set getprotobynumber d_getpbynumber
10890 eval $inlibc
10891
10892 : see if getprotoent exists
10893 set getprotoent d_getpent
10894 eval $inlibc
10895
10896 : see if getpgid exists
10897 set getpgid d_getpgid
10898 eval $inlibc
10899
10900 : see if getpgrp2 exists
10901 set getpgrp2 d_getpgrp2
10902 eval $inlibc
10903
10904 : see if getppid exists
10905 set getppid d_getppid
10906 eval $inlibc
10907
10908 : see if getpriority exists
10909 set getpriority d_getprior
10910 eval $inlibc
10911
10912 : see if prototypes for various getprotoxxx netdb.h functions are available
10913 echo " "
10914 set d_getprotoprotos getprotoent $i_netdb netdb.h
10915 eval $hasproto
10916
10917 : see if getprpwnam exists
10918 set getprpwnam d_getprpwnam
10919 eval $inlibc
10920
10921 : see if getpwent exists
10922 set getpwent d_getpwent
10923 eval $inlibc
10924
10925
10926 : see if getservbyname exists
10927 set getservbyname d_getsbyname
10928 eval $inlibc
10929
10930 : see if getservbyport exists
10931 set getservbyport d_getsbyport
10932 eval $inlibc
10933
10934 : see if getservent exists
10935 set getservent d_getsent
10936 eval $inlibc
10937
10938 : see if prototypes for various getservxxx netdb.h functions are available
10939 echo " "
10940 set d_getservprotos getservent $i_netdb netdb.h
10941 eval $hasproto
10942
10943 : see if getspnam exists
10944 set getspnam d_getspnam
10945 eval $inlibc
10946
10947 : see if gettimeofday or ftime exists
10948 set gettimeofday d_gettimeod
10949 eval $inlibc
10950 case "$d_gettimeod" in
10951 "$undef")
10952         set ftime d_ftime 
10953         eval $inlibc
10954         ;;
10955 *)
10956         val="$undef"; set d_ftime; eval $setvar
10957         ;;
10958 esac
10959 case "$d_gettimeod$d_ftime" in
10960 "$undef$undef")
10961         echo " "
10962         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
10963         ;;
10964 esac
10965
10966 : see if this is an grp system
10967 set grp.h i_grp
10968 eval $inhdr
10969
10970 case "$i_grp" in
10971 $define)
10972         xxx=`./findhdr grp.h`
10973         $cppstdin $cppflags $cppminus < $xxx >$$.h
10974
10975         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
10976                 val="$define"
10977         else
10978                 val="$undef"
10979         fi
10980         set d_grpasswd
10981         eval $setvar
10982
10983         $rm -f $$.h
10984         ;;
10985 *)
10986         val="$undef";
10987         set d_grpasswd; eval $setvar
10988         ;;
10989 esac
10990
10991 : see if hasmntopt exists
10992 set hasmntopt d_hasmntopt
10993 eval $inlibc
10994
10995 : see if this is a netinet/in.h or sys/in.h system
10996 set netinet/in.h i_niin sys/in.h i_sysin
10997 eval $inhdr
10998
10999 : see if arpa/inet.h has to be included
11000 set arpa/inet.h i_arpainet
11001 eval $inhdr
11002
11003 : see if htonl --and friends-- exists
11004 val=''
11005 set htonl val
11006 eval $inlibc
11007
11008 : Maybe they are macros.
11009 case "$val" in
11010 $undef)
11011         $cat >htonl.c <<EOM
11012 #include <stdio.h>
11013 #include <sys/types.h>
11014 #$i_niin I_NETINET_IN
11015 #$i_sysin I_SYS_IN
11016 #$i_arpainet I_ARPA_INET
11017 #ifdef I_NETINET_IN
11018 #include <netinet/in.h>
11019 #endif
11020 #ifdef I_SYS_IN
11021 #include <sys/in.h>
11022 #endif
11023 #ifdef I_ARPA_INET
11024 #include <arpa/inet.h>
11025 #endif
11026 #ifdef htonl
11027 printf("Defined as a macro.");
11028 #endif
11029 EOM
11030         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
11031         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
11032                 val="$define"
11033                 echo "But it seems to be defined as a macro." >&4
11034         fi
11035         $rm -f htonl.?
11036         ;;
11037 esac
11038 set d_htonl
11039 eval $setvar
11040
11041 : index or strchr
11042 echo " "
11043 if set index val -f; eval $csym; $val; then
11044         if set strchr val -f d_strchr; eval $csym; $val; then
11045                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
11046                         val="$define"
11047                         vali="$undef"
11048                         echo "strchr() found." >&4
11049                 else
11050                         val="$undef"
11051                         vali="$define"
11052                         echo "index() found." >&4
11053                 fi
11054         else
11055                 val="$undef"
11056                 vali="$define"
11057                 echo "index() found." >&4
11058         fi
11059 else
11060         if set strchr val -f d_strchr; eval $csym; $val; then
11061                 val="$define"
11062                 vali="$undef"
11063                 echo "strchr() found." >&4
11064         else
11065                 echo "No index() or strchr() found!" >&4
11066                 val="$undef"
11067                 vali="$undef"
11068         fi
11069 fi
11070 set d_strchr; eval $setvar
11071 val="$vali"
11072 set d_index; eval $setvar
11073
11074 : check whether inet_aton exists
11075 set inet_aton d_inetaton
11076 eval $inlibc
11077
11078 : Look for isascii
11079 echo " "
11080 $cat >isascii.c <<'EOCP'
11081 #include <stdio.h>
11082 #include <ctype.h>
11083 int main() {
11084         int c = 'A';
11085         if (isascii(c))
11086                 exit(0);
11087         else
11088                 exit(1);
11089 }
11090 EOCP
11091 set isascii
11092 if eval $compile; then
11093         echo "isascii() found." >&4
11094         val="$define"
11095 else
11096         echo "isascii() NOT found." >&4
11097         val="$undef"
11098 fi
11099 set d_isascii
11100 eval $setvar
11101 $rm -f isascii*
11102
11103 : see if isfinite exists
11104 set isfinite d_isfinite
11105 eval $inlibc
11106
11107 : see if isinf exists
11108 set isinf d_isinf
11109 eval $inlibc
11110
11111 : see if isnan exists
11112 set isnan d_isnan
11113 eval $inlibc
11114
11115 : see if isnanl exists
11116 set isnanl d_isnanl
11117 eval $inlibc
11118
11119 : see if killpg exists
11120 set killpg d_killpg
11121 eval $inlibc
11122
11123 : see if lchown exists
11124 echo " "
11125 $cat > try.c <<'EOCP'
11126 /* System header to define __stub macros and hopefully few prototypes,
11127     which can conflict with char lchown(); below.  */
11128 #include <assert.h>
11129 /* Override any gcc2 internal prototype to avoid an error.  */
11130 /* We use char because int might match the return type of a gcc2
11131    builtin and then its argument prototype would still apply.  */
11132 char lchown();
11133 int main() {
11134     /*  The GNU C library defines this for functions which it implements
11135         to always fail with ENOSYS.  Some functions are actually named
11136         something starting with __ and the normal name is an alias.  */
11137 #if defined (__stub_lchown) || defined (__stub___lchown)
11138 choke me
11139 #else
11140 lchown();
11141 #endif
11142 ; return 0; }
11143 EOCP
11144 set try
11145 if eval $compile; then
11146     $echo "lchown() found." >&4
11147     val="$define"
11148 else
11149     $echo "lchown() NOT found." >&4
11150     val="$undef"
11151 fi
11152 set d_lchown
11153 eval $setvar
11154
11155 : See if number of significant digits in a double precision number is known
11156 echo " "
11157 $cat >ldbl_dig.c <<EOM
11158 #$i_limits I_LIMITS
11159 #$i_float I_FLOAT
11160 #ifdef I_LIMITS
11161 #include <limits.h>
11162 #endif
11163 #ifdef I_FLOAT
11164 #include <float.h>
11165 #endif
11166 #ifdef LDBL_DIG
11167 printf("Contains LDBL_DIG");
11168 #endif
11169 EOM
11170 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
11171 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
11172         echo "LDBL_DIG found." >&4
11173         val="$define"
11174 else
11175         echo "LDBL_DIG NOT found." >&4
11176         val="$undef"
11177 fi
11178 $rm -f ldbl_dig.?
11179 set d_ldbl_dig
11180 eval $setvar
11181
11182 : see if link exists
11183 set link d_link
11184 eval $inlibc
11185
11186 : see if localeconv exists
11187 set localeconv d_locconv
11188 eval $inlibc
11189
11190 : see if lockf exists
11191 set lockf d_lockf
11192 eval $inlibc
11193
11194 : see if prototype for lseek is available
11195 echo " "
11196 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
11197 eval $hasproto
11198
11199 : see if lstat exists
11200 set lstat d_lstat
11201 eval $inlibc
11202
11203 : see if madvise exists
11204 set madvise d_madvise
11205 eval $inlibc
11206
11207 : see if mblen exists
11208 set mblen d_mblen
11209 eval $inlibc
11210
11211 : see if mbstowcs exists
11212 set mbstowcs d_mbstowcs
11213 eval $inlibc
11214
11215 : see if mbtowc exists
11216 set mbtowc d_mbtowc
11217 eval $inlibc
11218
11219 : see if memchr exists
11220 set memchr d_memchr
11221 eval $inlibc
11222
11223 : see if memcmp exists
11224 set memcmp d_memcmp
11225 eval $inlibc
11226
11227 : see if memcpy exists
11228 set memcpy d_memcpy
11229 eval $inlibc
11230
11231 : see if memmove exists
11232 set memmove d_memmove
11233 eval $inlibc
11234
11235 : see if memset exists
11236 set memset d_memset
11237 eval $inlibc
11238
11239 : see if mkdir exists
11240 set mkdir d_mkdir
11241 eval $inlibc
11242
11243 : see if mkdtemp exists
11244 set mkdtemp d_mkdtemp
11245 eval $inlibc
11246
11247 : see if mkfifo exists
11248 set mkfifo d_mkfifo
11249 eval $inlibc
11250
11251 : see if mkstemp exists
11252 set mkstemp d_mkstemp
11253 eval $inlibc
11254
11255 : see if mkstemps exists
11256 set mkstemps d_mkstemps
11257 eval $inlibc
11258
11259 : see if mktime exists
11260 set mktime d_mktime
11261 eval $inlibc
11262
11263 : see if this is a sys/mman.h system
11264 set sys/mman.h i_sysmman
11265 eval $inhdr
11266
11267 : see if mmap exists
11268 set mmap d_mmap
11269 eval $inlibc
11270 : see what shmat returns
11271 : default to something harmless
11272 mmaptype='void *'
11273 case "$i_sysmman$d_mmap" in
11274 "$define$define")
11275         $cat >mmap.c <<'END'
11276 #include <sys/mman.h>
11277 void *mmap();
11278 END
11279         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
11280                 mmaptype='void *'
11281         else
11282                 mmaptype='caddr_t'
11283         fi
11284         echo "and it returns ($mmaptype)." >&4
11285         ;;
11286 esac
11287
11288
11289
11290 : see if mprotect exists
11291 set mprotect d_mprotect
11292 eval $inlibc
11293
11294 : see if msgctl exists
11295 set msgctl d_msgctl
11296 eval $inlibc
11297
11298 : see if msgget exists
11299 set msgget d_msgget
11300 eval $inlibc
11301
11302 : see if msgsnd exists
11303 set msgsnd d_msgsnd
11304 eval $inlibc
11305
11306 : see if msgrcv exists
11307 set msgrcv d_msgrcv
11308 eval $inlibc
11309
11310 : see how much of the 'msg*(2)' library is present.
11311 h_msg=true
11312 echo " "
11313 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
11314 *"$undef"*) h_msg=false;;
11315 esac
11316 case "$osname" in
11317 freebsd)
11318     case "`ipcs 2>&1`" in
11319     "SVID messages"*"not configured"*)
11320         echo "Your $osname does not have the msg*(2) configured." >&4
11321         h_msg=false
11322         val="$undef"
11323         set msgctl d_msgctl
11324         eval $setvar
11325         set msgget d_msgget
11326         eval $setvar
11327         set msgsnd d_msgsnd
11328         eval $setvar
11329         set msgrcv d_msgrcv
11330         eval $setvar
11331         ;;
11332     esac
11333     ;;
11334 esac
11335 : we could also check for sys/ipc.h ...
11336 if $h_msg && $test `./findhdr sys/msg.h`; then
11337         echo "You have the full msg*(2) library." >&4
11338         val="$define"
11339 else
11340         echo "You don't have the full msg*(2) library." >&4
11341         val="$undef"
11342 fi
11343 set d_msg
11344 eval $setvar
11345
11346
11347 echo " "
11348 echo "Checking to see if your system supports struct msghdr..." >&4
11349 set d_msghdr_s msghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
11350 eval $hasstruct
11351 case "$d_msghdr_s" in
11352 "$define")      echo "Yes, it does."   ;;
11353 *)              echo "No, it doesn't." ;;
11354 esac
11355
11356
11357 : see if msync exists
11358 set msync d_msync
11359 eval $inlibc
11360
11361 : see if munmap exists
11362 set munmap d_munmap
11363 eval $inlibc
11364
11365 : see if nice exists
11366 set nice d_nice
11367 eval $inlibc
11368
11369 : see if this is a langinfo.h system
11370 set langinfo.h i_langinfo
11371 eval $inhdr
11372
11373 : see if nl_langinfo exists
11374 set nl_langinfo d_nl_langinfo
11375 eval $inlibc
11376
11377 : check for length of character
11378 echo " "
11379 case "$charsize" in
11380 '')
11381         echo "Checking to see how big your characters are (hey, you never know)..." >&4
11382         $cat >try.c <<'EOCP'
11383 #include <stdio.h>
11384 int main()
11385 {
11386     printf("%d\n", (int)sizeof(char));
11387     exit(0);
11388 }
11389 EOCP
11390         set try
11391         if eval $compile_ok; then
11392                 dflt=`$run ./try`
11393         else
11394                 dflt='1'
11395                 echo "(I can't seem to compile the test program.  Guessing...)"
11396         fi
11397         ;;
11398 *)
11399         dflt="$charsize"
11400         ;;
11401 esac
11402 rp="What is the size of a character (in bytes)?"
11403 . ./myread
11404 charsize="$ans"
11405 $rm -f try.c try
11406
11407 : check for volatile keyword
11408 echo " "
11409 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11410 $cat >try.c <<'EOCP'
11411 int main()
11412 {
11413         typedef struct _goo_struct goo_struct;
11414         goo_struct * volatile goo = ((goo_struct *)0);
11415         struct _goo_struct {
11416                 long long_int;
11417                 int reg_int;
11418                 char char_var;
11419         };
11420         typedef unsigned short foo_t;
11421         char *volatile foo;
11422         volatile int bar;
11423         volatile foo_t blech;
11424         foo = foo;
11425 }
11426 EOCP
11427 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11428         val="$define"
11429         echo "Yup, it does."
11430 else
11431         val="$undef"
11432         echo "Nope, it doesn't."
11433 fi
11434 set d_volatile
11435 eval $setvar
11436 $rm -f try.*
11437
11438
11439 echo " "
11440 $echo "Choosing the C types to be used for Perl's internal types..." >&4
11441
11442 case "$use64bitint:$d_quad:$quadtype" in
11443 define:define:?*)
11444         ivtype="$quadtype"
11445         uvtype="$uquadtype"
11446         ivsize=8
11447         uvsize=8
11448         ;;
11449 *)      ivtype="long"
11450         uvtype="unsigned long"
11451         ivsize=$longsize
11452         uvsize=$longsize
11453         ;;
11454 esac
11455
11456 case "$uselongdouble:$d_longdbl" in
11457 define:define)
11458         nvtype="long double"
11459         nvsize=$longdblsize
11460         ;;
11461 *)      nvtype=double
11462         nvsize=$doublesize
11463         ;;
11464 esac
11465
11466 $echo "(IV will be "$ivtype", $ivsize bytes)"
11467 $echo "(UV will be "$uvtype", $uvsize bytes)"
11468 $echo "(NV will be "$nvtype", $nvsize bytes)"
11469
11470 $cat >try.c <<EOCP
11471 #$i_inttypes I_INTTYPES
11472 #ifdef I_INTTYPES
11473 #include <inttypes.h>
11474 #endif
11475 #include <stdio.h>
11476 int main() {
11477 #ifdef INT8
11478    int8_t i =  INT8_MAX;
11479   uint8_t u = UINT8_MAX;
11480   printf("int8_t\n");
11481 #endif
11482 #ifdef INT16
11483    int16_t i =  INT16_MAX;
11484   uint16_t i = UINT16_MAX;
11485   printf("int16_t\n");
11486 #endif
11487 #ifdef INT32
11488    int32_t i =  INT32_MAX;
11489   uint32_t u = UINT32_MAX;
11490   printf("int32_t\n");
11491 #endif
11492 }
11493 EOCP
11494
11495 case "$i8type" in
11496 '')     case "$charsize" in
11497         1)      i8type=char
11498                 u8type="unsigned char"
11499                 i8size=$charsize
11500                 u8size=$charsize
11501                 ;;
11502         esac
11503         ;;
11504 esac
11505 case "$i8type" in
11506 '')     set try -DINT8
11507         if eval $compile; then
11508                 case "`$run ./try`" in
11509                 int8_t) i8type=int8_t
11510                         u8type=uint8_t
11511                         i8size=1
11512                         u8size=1
11513                         ;;
11514                 esac
11515         fi
11516         ;;
11517 esac
11518 case "$i8type" in
11519 '')     if $test $charsize -ge 1; then
11520                 i8type=char
11521                 u8type="unsigned char"
11522                 i8size=$charsize
11523                 u8size=$charsize
11524         fi
11525         ;;
11526 esac
11527
11528 case "$i16type" in
11529 '')     case "$shortsize" in
11530         2)      i16type=short
11531                 u16type="unsigned short"
11532                 i16size=$shortsize
11533                 u16size=$shortsize
11534                 ;;
11535         esac
11536         ;;
11537 esac
11538 case "$i16type" in
11539 '')     set try -DINT16
11540         if eval $compile; then
11541                 case "`$run ./try`" in
11542                 int16_t)
11543                         i16type=int16_t
11544                         u16type=uint16_t
11545                         i16size=2
11546                         u16size=2
11547                         ;;
11548                 esac
11549         fi
11550         ;;
11551 esac
11552 case "$i16type" in
11553 '')     if $test $shortsize -ge 2; then
11554                 i16type=short
11555                 u16type="unsigned short"
11556                 i16size=$shortsize
11557                 u16size=$shortsize
11558         fi
11559         ;;
11560 esac
11561
11562 case "$i32type" in
11563 '')     case "$longsize" in
11564         4)      i32type=long
11565                 u32type="unsigned long"
11566                 i32size=$longsize
11567                 u32size=$longsize
11568                 ;;
11569         *)      case "$intsize" in
11570                 4)      i32type=int
11571                         u32type="unsigned int"
11572                         i32size=$intsize
11573                         u32size=$intsize
11574                         ;;
11575                 esac
11576                 ;;
11577         esac
11578         ;;
11579 esac
11580 case "$i32type" in
11581 '')     set try -DINT32
11582         if eval $compile; then
11583                 case "`$run ./try`" in
11584                 int32_t)
11585                         i32type=int32_t
11586                         u32type=uint32_t
11587                         i32size=4
11588                         u32size=4
11589                         ;;
11590                 esac
11591         fi
11592         ;;
11593 esac
11594 case "$i32type" in
11595 '')     if $test $intsize -ge 4; then
11596                 i32type=int
11597                 u32type="unsigned int"
11598                 i32size=$intsize
11599                 u32size=$intsize
11600         fi
11601         ;;
11602 esac
11603
11604 case "$i64type" in
11605 '')     case "$d_quad:$quadtype" in
11606         define:?*)
11607                 i64type="$quadtype"
11608                 u64type="$uquadtype"
11609                 i64size=8
11610                 u64size=8
11611                 ;;
11612         esac
11613         ;;
11614 esac
11615
11616 $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
11617 : volatile so that the compiler has to store it out to memory.
11618 if test X"$d_volatile" = X"$define"; then
11619         volatile=volatile
11620 fi
11621 $cat <<EOP >try.c
11622 #include <stdio.h>
11623 #include <sys/types.h>
11624 #include <signal.h>
11625 #ifdef SIGFPE
11626 $volatile int bletched = 0;
11627 $signal_t blech(s) int s; { bletched = 1; }
11628 #endif
11629 int main() {
11630     $uvtype u = 0;
11631     $nvtype d;
11632     int     n = 8 * $uvsize;
11633     int     i;
11634 #ifdef SIGFPE
11635     signal(SIGFPE, blech);
11636 #endif
11637
11638     for (i = 0; i < n; i++) {
11639       u = u << 1 | ($uvtype)1;
11640       d = ($nvtype)u;
11641       if (($uvtype)d != u)
11642         break;
11643       if (d <= 0)
11644         break;
11645       d = ($nvtype)(u - 1);
11646       if (($uvtype)d != (u - 1))
11647         break;
11648 #ifdef SIGFPE
11649       if (bletched) {
11650         break;
11651 #endif
11652       } 
11653     }
11654     printf("%d\n", ((i == n) ? -n : i));
11655     exit(0);
11656 }
11657 EOP
11658 set try
11659
11660 d_nv_preserves_uv="$undef"
11661 if eval $compile; then
11662         d_nv_preserves_uv_bits="`$run ./try`"
11663 fi
11664 case "$d_nv_preserves_uv_bits" in
11665 \-[1-9]*)       
11666         d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
11667         $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11668         d_nv_preserves_uv="$define"
11669         ;;
11670 [1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11671         d_nv_preserves_uv="$undef" ;;
11672 *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
11673         d_nv_preserves_uv_bits="$undef" ;;
11674 esac
11675
11676 $rm -f try.* try
11677
11678
11679 : check for off64_t
11680 echo " "
11681 echo "Checking to see if you have off64_t..." >&4
11682 $cat >try.c <<EOCP
11683 #include <sys/types.h>
11684 #include <unistd.h>
11685 int main() { off64_t x = 7; }
11686 EOCP
11687 set try
11688 if eval $compile; then
11689         val="$define"
11690         echo "You have off64_t."
11691 else
11692         val="$undef"
11693         echo "You do not have off64_t."
11694         case "$lseeksize" in
11695         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
11696         esac
11697 fi
11698 $rm -f try.* try
11699 set d_off64_t
11700 eval $setvar
11701
11702 : see if POSIX threads are available
11703 set pthread.h i_pthread
11704 eval $inhdr
11705
11706
11707
11708
11709 : how to create joinable pthreads
11710 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
11711         echo " "
11712         echo "Checking what constant to use for creating joinable pthreads..." >&4 
11713         $cat >try.c <<'EOCP'
11714 #include <pthread.h>
11715 int main() {
11716     int detachstate = JOINABLE;
11717 }
11718 EOCP
11719         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
11720         if eval $compile; then
11721                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
11722                 val="$undef" # Yes, undef.
11723                 set d_old_pthread_create_joinable
11724                 eval $setvar
11725                 val=""
11726                 set old_pthread_create_joinable
11727                 eval $setvar
11728         else
11729                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
11730                 if eval $compile; then
11731                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
11732                         val="$define"
11733                         set d_old_pthread_create_joinable
11734                         eval $setvar
11735                         val=PTHREAD_CREATE_UNDETACHED
11736                         set old_pthread_create_joinable
11737                         eval $setvar
11738                 else            
11739                         set try -DJOINABLE=__UNDETACHED
11740                         if eval $compile; then
11741                                 echo "You seem to use __UNDETACHED." >&4
11742                                 val="$define"
11743                                 set d_old_pthread_create_joinable
11744                                 eval $setvar
11745                                 val=__UNDETACHED
11746                                 set old_pthread_create_joinable
11747                                 eval $setvar
11748                         else
11749                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
11750                                 val="$define"
11751                                 set d_old_pthread_create_joinable
11752                                 eval $setvar
11753                                 val=0
11754                                 set old_pthread_create_joinable
11755                                 eval $setvar
11756                         fi
11757                 fi
11758         fi
11759         $rm -f try try.*
11760 else
11761     d_old_pthread_create_joinable="$undef"
11762     old_pthread_create_joinable=""
11763 fi
11764
11765 : see if pause exists
11766 set pause d_pause
11767 eval $inlibc
11768
11769 : see if pipe exists
11770 set pipe d_pipe
11771 eval $inlibc
11772
11773 : see if poll exists
11774 set poll d_poll
11775 eval $inlibc
11776
11777 : see if readlink exists
11778 set readlink d_readlink
11779 eval $inlibc
11780
11781 echo " "
11782 procselfexe=''
11783 val="$undef"
11784 case "$d_readlink" in
11785 "$define")
11786         if $issymlink /proc/self/exe ; then
11787                 $ls -l /proc/self/exe > reflect
11788                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11789                         echo "You have Linux-like /proc/self/exe."
11790                         procselfexe='"/proc/self/exe"'
11791                         val="$define"
11792                 fi
11793         fi
11794         if $issymlink /proc/curproc/file ; then
11795                 $ls -l /proc/curproc/file > reflect
11796                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11797                         echo "You have BSD-like /proc/curproc/file."
11798                         procselfexe='"/proc/curproc/file"'
11799                         val="$define"
11800                 fi
11801         fi
11802         ;;
11803 esac
11804 $rm -f reflect
11805 set d_procselfexe
11806 eval $setvar
11807
11808 : see whether the pthread_atfork exists
11809 $cat >try.c <<EOP
11810 #include <pthread.h>
11811 #include <stdio.h>
11812 int main() {
11813 #ifdef  PTHREAD_ATFORK
11814         pthread_atfork(NULL,NULL,NULL);
11815 #endif
11816 }
11817 EOP
11818
11819 : see if pthread_atfork exists
11820 set try -DPTHREAD_ATFORK
11821 if eval $compile; then
11822     val="$define"
11823 else
11824     val="$undef"
11825 fi
11826 case "$usethreads" in
11827 $define)
11828         case "$val" in
11829         $define) echo 'pthread_atfork found.' >&4        ;;
11830         *)       echo 'pthread_atfork NOT found.' >&4    ;;
11831         esac
11832 esac
11833 set d_pthread_atfork
11834 eval $setvar
11835
11836
11837 : see whether the various POSIXish _yields exist
11838 $cat >try.c <<EOP
11839 #include <pthread.h>
11840 #include <stdio.h>
11841 int main() {
11842 #ifdef SCHED_YIELD
11843         sched_yield();
11844 #else
11845 #ifdef PTHREAD_YIELD
11846         pthread_yield();
11847 #else
11848 #ifdef PTHREAD_YIELD_NULL
11849         pthread_yield(NULL);
11850 #endif
11851 #endif
11852 #endif
11853 }
11854 EOP
11855 : see if sched_yield exists
11856 set try -DSCHED_YIELD
11857 if eval $compile; then
11858     val="$define"
11859     sched_yield='sched_yield()'
11860 else
11861     val="$undef"
11862 fi
11863 case "$usethreads" in
11864 $define)
11865         case "$val" in
11866         $define) echo 'sched_yield() found.' >&4        ;;
11867         *)       echo 'sched_yield() NOT found.' >&4    ;;
11868         esac
11869 esac
11870 set d_sched_yield
11871 eval $setvar
11872
11873 : see if pthread_yield exists
11874 set try -DPTHREAD_YIELD
11875 if eval $compile; then
11876     val="$define"
11877     case "$sched_yield" in
11878     '') sched_yield='pthread_yield()' ;;
11879     esac
11880 else
11881     set try -DPTHREAD_YIELD_NULL
11882     if eval $compile; then
11883         val="$define"
11884         case "$sched_yield" in
11885         '') sched_yield='pthread_yield(NULL)' ;;
11886         esac
11887     else
11888         val="$undef"
11889     fi
11890 fi
11891 case "$usethreads" in
11892 $define)
11893         case "$val" in
11894         $define) echo 'pthread_yield() found.' >&4      ;;
11895         *)       echo 'pthread_yield() NOT found.' >&4  ;;
11896         esac
11897         ;;
11898 esac
11899 set d_pthread_yield
11900 eval $setvar
11901
11902 case "$sched_yield" in
11903 '') sched_yield=undef ;;
11904 esac
11905
11906 $rm -f try try.*
11907
11908 : see if this is a pwd.h system
11909 set pwd.h i_pwd
11910 eval $inhdr
11911
11912 case "$i_pwd" in
11913 $define)
11914         xxx=`./findhdr pwd.h`
11915         $cppstdin $cppflags $cppminus < $xxx >$$.h
11916
11917         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
11918                 val="$define"
11919         else
11920                 val="$undef"
11921         fi
11922         set d_pwquota
11923         eval $setvar
11924
11925         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
11926                 val="$define"
11927         else
11928                 val="$undef"
11929         fi
11930         set d_pwage
11931         eval $setvar
11932
11933         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
11934                 val="$define"
11935         else
11936                 val="$undef"
11937         fi
11938         set d_pwchange
11939         eval $setvar
11940
11941         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
11942                 val="$define"
11943         else
11944                 val="$undef"
11945         fi
11946         set d_pwclass
11947         eval $setvar
11948
11949         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
11950                 val="$define"
11951         else
11952                 val="$undef"
11953         fi
11954         set d_pwexpire
11955         eval $setvar
11956
11957         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
11958                 val="$define"
11959         else
11960                 val="$undef"
11961         fi
11962         set d_pwcomment
11963         eval $setvar
11964
11965         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
11966                 val="$define"
11967         else
11968                 val="$undef"
11969         fi
11970         set d_pwgecos
11971         eval $setvar
11972
11973         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
11974                 val="$define"
11975         else
11976                 val="$undef"
11977         fi
11978         set d_pwpasswd
11979         eval $setvar
11980
11981         $rm -f $$.h
11982         ;;
11983 *)
11984         val="$undef"; 
11985         set d_pwquota; eval $setvar
11986         set d_pwage; eval $setvar
11987         set d_pwchange; eval $setvar
11988         set d_pwclass; eval $setvar
11989         set d_pwexpire; eval $setvar
11990         set d_pwcomment; eval $setvar
11991         set d_pwgecos; eval $setvar
11992         set d_pwpasswd; eval $setvar
11993         ;;
11994 esac
11995
11996 : see if readdir and friends exist
11997 set readdir d_readdir
11998 eval $inlibc
11999 set seekdir d_seekdir
12000 eval $inlibc
12001 set telldir d_telldir
12002 eval $inlibc
12003 set rewinddir d_rewinddir
12004 eval $inlibc
12005
12006 : see if readv exists
12007 set readv d_readv
12008 eval $inlibc
12009
12010 : see if recvmsg exists
12011 set recvmsg d_recvmsg
12012 eval $inlibc
12013
12014 : see if rename exists
12015 set rename d_rename
12016 eval $inlibc
12017
12018 : see if rmdir exists
12019 set rmdir d_rmdir
12020 eval $inlibc
12021
12022 : see if memory.h is available.
12023 val=''
12024 set memory.h val
12025 eval $inhdr
12026
12027 : See if it conflicts with string.h
12028 case "$val" in
12029 $define)
12030         case "$strings" in
12031         '') ;;
12032         *)
12033                 $cppstdin $cppflags $cppminus < $strings > mem.h
12034                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
12035                         echo " "
12036                         echo "We won't be including <memory.h>."
12037                         val="$undef"
12038                 fi
12039                 $rm -f mem.h
12040                 ;;
12041         esac
12042 esac
12043 set i_memory
12044 eval $setvar
12045
12046 : can bcopy handle overlapping blocks?
12047 echo " "
12048 val="$undef"
12049 case "$d_memmove" in
12050 "$define") echo "I'll use memmove() instead of bcopy() for overlapping copies." ;;
12051 *)      case "$d_bcopy" in
12052         "$define")
12053                 echo "Checking to see if bcopy() can do overlapping copies..." >&4
12054                 $cat >try.c <<EOCP
12055 #$i_memory I_MEMORY
12056 #$i_stdlib I_STDLIB
12057 #$i_string I_STRING
12058 #$i_unistd I_UNISTD
12059 EOCP
12060         $cat >>try.c <<'EOCP'
12061 #include <stdio.h>
12062 #ifdef I_MEMORY
12063 #  include <memory.h>
12064 #endif
12065 #ifdef I_STDLIB
12066 #  include <stdlib.h>
12067 #endif
12068 #ifdef I_STRING
12069 #  include <string.h>
12070 #else
12071 #  include <strings.h>
12072 #endif
12073 #ifdef I_UNISTD
12074 #  include <unistd.h>  /* Needed for NetBSD */
12075 #endif
12076 int main()
12077 {
12078 char buf[128], abc[128];
12079 char *b;
12080 int len;
12081 int off;
12082 int align;
12083
12084 /* Copy "abcde..." string to char abc[] so that gcc doesn't
12085    try to store the string in read-only memory. */
12086 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
12087
12088 for (align = 7; align >= 0; align--) {
12089         for (len = 36; len; len--) {
12090                 b = buf+align;
12091                 bcopy(abc, b, len);
12092                 for (off = 1; off <= len; off++) {
12093                         bcopy(b, b+off, len);
12094                         bcopy(b+off, b, len);
12095                         if (bcmp(b, abc, len))
12096                                 exit(1);
12097                 }
12098         }
12099 }
12100 exit(0);
12101 }
12102 EOCP
12103                 set try
12104                 if eval $compile_ok; then
12105                         if ./try 2>/dev/null; then
12106                                 echo "Yes, it can."
12107                                 val="$define"
12108                         else
12109                                 echo "It can't, sorry."
12110                         fi
12111                 else
12112                         echo "(I can't compile the test program, so we'll assume not...)"
12113                 fi
12114                 ;;
12115         esac
12116         $rm -f try.* try core
12117         ;;
12118 esac
12119 set d_safebcpy
12120 eval $setvar
12121
12122 : can memcpy handle overlapping blocks?
12123 echo " "
12124 val="$undef"
12125 case "$d_memmove" in
12126 "$define") echo "I'll use memmove() instead of memcpy() for overlapping copies." ;;
12127 *)      case "$d_memcpy" in
12128         "$define")
12129                 echo "Checking to see if memcpy() can do overlapping copies..." >&4
12130                 $cat >try.c <<EOCP
12131 #$i_memory I_MEMORY
12132 #$i_stdlib I_STDLIB
12133 #$i_string I_STRING
12134 #$i_unistd I_UNISTD
12135 EOCP
12136         $cat >>try.c <<'EOCP'
12137 #include <stdio.h>
12138 #ifdef I_MEMORY
12139 #  include <memory.h>
12140 #endif
12141 #ifdef I_STDLIB
12142 #  include <stdlib.h>
12143 #endif
12144 #ifdef I_STRING
12145 #  include <string.h>
12146 #else
12147 #  include <strings.h>
12148 #endif
12149 #ifdef I_UNISTD
12150 #  include <unistd.h>  /* Needed for NetBSD */
12151 #endif
12152 int main()
12153 {
12154 char buf[128], abc[128];
12155 char *b;
12156 int len;
12157 int off;
12158 int align;
12159
12160 /* Copy "abcde..." string to char abc[] so that gcc doesn't
12161    try to store the string in read-only memory. */
12162 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
12163
12164 for (align = 7; align >= 0; align--) {
12165         for (len = 36; len; len--) {
12166                 b = buf+align;
12167                 memcpy(b, abc, len);
12168                 for (off = 1; off <= len; off++) {
12169                         memcpy(b+off, b, len);
12170                         memcpy(b, b+off, len);
12171                         if (memcmp(b, abc, len))
12172                                 exit(1);
12173                 }
12174         }
12175 }
12176 exit(0);
12177 }
12178 EOCP
12179                 set try
12180                 if eval $compile_ok; then
12181                         if ./try 2>/dev/null; then
12182                                 echo "Yes, it can."
12183                                 val="$define"
12184                         else
12185                                 echo "It can't, sorry."
12186                         fi
12187                 else
12188                         echo "(I can't compile the test program, so we'll assume not...)"
12189                 fi
12190                 ;;
12191         esac
12192         $rm -f try.* try core
12193         ;;
12194 esac
12195 set d_safemcpy
12196 eval $setvar
12197
12198 : can memcmp be trusted to compare relative magnitude?
12199 val="$undef"
12200 case "$d_memcmp" in
12201 "$define")
12202         echo " "
12203         echo "Checking if your memcmp() can compare relative magnitude..." >&4
12204         $cat >try.c <<EOCP
12205 #$i_memory I_MEMORY
12206 #$i_stdlib I_STDLIB
12207 #$i_string I_STRING
12208 #$i_unistd I_UNISTD
12209 EOCP
12210         $cat >>try.c <<'EOCP'
12211 #include <stdio.h>
12212 #ifdef I_MEMORY
12213 #  include <memory.h>
12214 #endif
12215 #ifdef I_STDLIB
12216 #  include <stdlib.h>
12217 #endif
12218 #ifdef I_STRING
12219 #  include <string.h>
12220 #else
12221 #  include <strings.h>
12222 #endif
12223 #ifdef I_UNISTD
12224 #  include <unistd.h>  /* Needed for NetBSD */
12225 #endif
12226 int main()
12227 {
12228 char a = -1;
12229 char b = 0;
12230 if ((a < b) && memcmp(&a, &b, 1) < 0)
12231         exit(1);
12232 exit(0);
12233 }
12234 EOCP
12235         set try
12236         if eval $compile_ok; then
12237                 if $run ./try 2>/dev/null; then
12238                         echo "Yes, it can."
12239                         val="$define"
12240                 else
12241                         echo "No, it can't (it uses signed chars)."
12242                 fi
12243         else
12244                 echo "(I can't compile the test program, so we'll assume not...)"
12245         fi
12246         ;;
12247 esac
12248 $rm -f try.* try core
12249 set d_sanemcmp
12250 eval $setvar
12251
12252 : see if prototype for sbrk is available
12253 echo " "
12254 set d_sbrkproto sbrk $i_unistd unistd.h
12255 eval $hasproto
12256
12257 : see if select exists
12258 set select d_select
12259 eval $inlibc
12260
12261 : see if semctl exists
12262 set semctl d_semctl
12263 eval $inlibc
12264
12265 : see if semget exists
12266 set semget d_semget
12267 eval $inlibc
12268
12269 : see if semop exists
12270 set semop d_semop
12271 eval $inlibc
12272
12273 : see how much of the 'sem*(2)' library is present.
12274 h_sem=true
12275 echo " "
12276 case "$d_semctl$d_semget$d_semop" in
12277 *"$undef"*) h_sem=false;;
12278 esac
12279 case "$osname" in
12280 freebsd)
12281     case "`ipcs 2>&1`" in
12282     "SVID messages"*"not configured"*)
12283         echo "Your $osname does not have the sem*(2) configured." >&4
12284         h_sem=false
12285         val="$undef"
12286         set semctl d_semctl
12287         eval $setvar
12288         set semget d_semget
12289         eval $setvar
12290         set semop d_semop
12291         eval $setvar
12292         ;;
12293     esac
12294     ;;
12295 esac
12296 : we could also check for sys/ipc.h ...
12297 if $h_sem && $test `./findhdr sys/sem.h`; then
12298         echo "You have the full sem*(2) library." >&4
12299         val="$define"
12300 else
12301         echo "You don't have the full sem*(2) library." >&4
12302         val="$undef"
12303 fi
12304 set d_sem
12305 eval $setvar
12306
12307 : see whether sys/sem.h defines union semun
12308 echo " "
12309 $cat > try.c <<'END'
12310 #include <sys/types.h>
12311 #include <sys/ipc.h>
12312 #include <sys/sem.h>
12313 int main () { union semun semun; semun.buf = 0; }
12314 END
12315 set try
12316 if eval $compile; then
12317     echo "You have union semun in <sys/sem.h>." >&4
12318     val="$define"
12319 else
12320     echo "You do not have union semun in <sys/sem.h>." >&4
12321     val="$undef"
12322 fi
12323 $rm -f try try.c try.h
12324 set d_union_semun
12325 eval $setvar
12326
12327 : see how to do semctl IPC_STAT
12328 case "$d_sem" in
12329 $define)
12330     : see whether semctl IPC_STAT can use union semun
12331     echo " "
12332     $cat > try.h <<END
12333 #ifndef S_IRUSR
12334 #   ifdef S_IREAD
12335 #       define S_IRUSR S_IREAD
12336 #       define S_IWUSR S_IWRITE
12337 #       define S_IXUSR S_IEXEC
12338 #   else
12339 #       define S_IRUSR 0400
12340 #       define S_IWUSR 0200
12341 #       define S_IXUSR 0100
12342 #   endif
12343 #   define S_IRGRP (S_IRUSR>>3)
12344 #   define S_IWGRP (S_IWUSR>>3)
12345 #   define S_IXGRP (S_IXUSR>>3)
12346 #   define S_IROTH (S_IRUSR>>6)
12347 #   define S_IWOTH (S_IWUSR>>6)
12348 #   define S_IXOTH (S_IXUSR>>6)
12349 #endif
12350 #ifndef S_IRWXU
12351 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
12352 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
12353 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
12354 #endif
12355 END
12356
12357     $cat > try.c <<END
12358 #include <sys/types.h>
12359 #include <sys/ipc.h>
12360 #include <sys/sem.h>
12361 #include <sys/stat.h>
12362 #include <stdio.h>
12363 #include <errno.h>
12364 #include "try.h"
12365 #ifndef errno
12366 extern int errno;
12367 #endif
12368 #$d_union_semun HAS_UNION_SEMUN
12369 int main() {
12370     union semun
12371 #ifndef HAS_UNION_SEMUN
12372     {
12373         int val;
12374         struct semid_ds *buf;
12375         unsigned short *array;
12376     }
12377 #endif
12378     arg;
12379     int sem, st;
12380
12381 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
12382     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12383     if (sem > -1) {
12384         struct semid_ds argbuf;
12385         arg.buf = &argbuf;
12386 #       ifdef IPC_STAT
12387         st = semctl(sem, 0, IPC_STAT, arg);
12388         if (st == 0)
12389             printf("semun\n");
12390         else
12391 #       endif /* IPC_STAT */
12392             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12393 #       ifdef IPC_RMID
12394         if (semctl(sem, 0, IPC_RMID, arg) != 0)
12395 #       endif /* IPC_RMID */
12396             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12397     } else
12398 #endif /* IPC_PRIVATE && ... */
12399         printf("semget failed: errno = %d\n", errno);
12400   return 0;
12401 }
12402 END
12403     val="$undef"
12404     set try
12405     if eval $compile; then
12406         xxx=`$run ./try`
12407         case "$xxx" in
12408         semun) val="$define" ;;
12409         esac
12410     fi
12411     $rm -f try try.c
12412     set d_semctl_semun
12413     eval $setvar
12414     case "$d_semctl_semun" in
12415     $define)
12416         echo "You can use union semun for semctl IPC_STAT." >&4
12417         also='also'
12418         ;;
12419     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
12420         also=''
12421         ;;
12422     esac
12423
12424     : see whether semctl IPC_STAT can use struct semid_ds pointer
12425     $cat > try.c <<'END'
12426 #include <sys/types.h>
12427 #include <sys/ipc.h>
12428 #include <sys/sem.h>
12429 #include <sys/stat.h>
12430 #include "try.h"
12431 #include <stdio.h>
12432 #include <errno.h>
12433 #ifndef errno
12434 extern int errno;
12435 #endif
12436 int main() {
12437     struct semid_ds arg;
12438     int sem, st;
12439
12440 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
12441     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12442     if (sem > -1) {
12443 #       ifdef IPC_STAT
12444         st = semctl(sem, 0, IPC_STAT, &arg);
12445         if (st == 0)
12446             printf("semid_ds\n");
12447         else
12448 #       endif /* IPC_STAT */
12449             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12450 #       ifdef IPC_RMID
12451         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
12452 #       endif /* IPC_RMID */
12453             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12454     } else
12455 #endif /* IPC_PRIVATE && ... */
12456         printf("semget failed: errno = %d\n", errno);
12457
12458     return 0;
12459 }
12460 END
12461     val="$undef"
12462     set try
12463     if eval $compile; then
12464         xxx=`$run ./try`
12465         case "$xxx" in
12466         semid_ds) val="$define" ;;
12467         esac
12468     fi
12469     $rm -f try try.c
12470     set d_semctl_semid_ds
12471     eval $setvar
12472     case "$d_semctl_semid_ds" in
12473     $define)
12474         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
12475         ;;
12476     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
12477         ;;
12478     esac
12479     $rm -f try.h
12480     ;;
12481 *)  val="$undef"
12482
12483     # We do not have the full sem*(2) library, so assume we can not
12484     # use either.
12485
12486     set d_semctl_semun
12487     eval $setvar
12488
12489     set d_semctl_semid_ds
12490     eval $setvar
12491     ;;
12492 esac
12493
12494 : see if sendmsg exists
12495 set sendmsg d_sendmsg
12496 eval $inlibc
12497
12498 : see if setegid exists
12499 set setegid d_setegid
12500 eval $inlibc
12501
12502 : see if seteuid exists
12503 set seteuid d_seteuid
12504 eval $inlibc
12505
12506 : see if setgrent exists
12507 set setgrent d_setgrent
12508 eval $inlibc
12509
12510 : see if sethostent exists
12511 set sethostent d_sethent
12512 eval $inlibc
12513
12514 : see if setitimer exists
12515 set setitimer d_setitimer
12516 eval $inlibc
12517
12518 : see if setlinebuf exists
12519 set setlinebuf d_setlinebuf
12520 eval $inlibc
12521
12522 : see if setlocale exists
12523 set setlocale d_setlocale
12524 eval $inlibc
12525
12526 : see if setnetent exists
12527 set setnetent d_setnent
12528 eval $inlibc
12529
12530 : see if setprotoent exists
12531 set setprotoent d_setpent
12532 eval $inlibc
12533
12534 : see if setpgid exists
12535 set setpgid d_setpgid
12536 eval $inlibc
12537
12538 : see if setpgrp2 exists
12539 set setpgrp2 d_setpgrp2
12540 eval $inlibc
12541
12542 : see if setpriority exists
12543 set setpriority d_setprior
12544 eval $inlibc
12545
12546 : see if setproctitle exists
12547 set setproctitle d_setproctitle
12548 eval $inlibc
12549
12550 : see if setpwent exists
12551 set setpwent d_setpwent
12552 eval $inlibc
12553
12554 : see if setregid exists
12555 set setregid d_setregid
12556 eval $inlibc
12557 set setresgid d_setresgid
12558 eval $inlibc
12559
12560 : see if setreuid exists
12561 set setreuid d_setreuid
12562 eval $inlibc
12563 set setresuid d_setresuid
12564 eval $inlibc
12565
12566 : see if setrgid exists
12567 set setrgid d_setrgid
12568 eval $inlibc
12569
12570 : see if setruid exists
12571 set setruid d_setruid
12572 eval $inlibc
12573
12574 : see if setservent exists
12575 set setservent d_setsent
12576 eval $inlibc
12577
12578 : see if setsid exists
12579 set setsid d_setsid
12580 eval $inlibc
12581
12582 : see if setvbuf exists
12583 set setvbuf d_setvbuf
12584 eval $inlibc
12585
12586 : see if sfio.h is available
12587 set sfio.h i_sfio
12588 eval $inhdr
12589
12590
12591 : see if sfio library is available
12592 case "$i_sfio" in
12593 $define)
12594         val=''
12595         set sfreserve val
12596         eval $inlibc
12597         ;;
12598 *)
12599         val="$undef"
12600         ;;
12601 esac
12602 : Ok, but do we want to use it.
12603 case "$val" in
12604 $define)
12605         case "$usesfio" in
12606         true|$define|[yY]*) dflt='y';;
12607         *) dflt='n';;
12608         esac
12609         echo "$package can use the sfio library, but it is experimental."
12610         case "$useperlio" in
12611         "$undef")
12612             echo "For sfio also the PerlIO abstraction layer is needed."
12613             echo "Earlier you said you wouldn't want that."
12614             ;;
12615         esac
12616         rp="You seem to have sfio available, do you want to try using it?"
12617         . ./myread
12618         case "$ans" in
12619         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
12620                 useperlio="$define"
12621                 val="$define"
12622                 ;;
12623         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
12624                 val="$undef"
12625                 ;;
12626         esac
12627         ;;
12628 *)      case "$usesfio" in
12629         true|$define|[yY]*)
12630                 echo "Sorry, cannot find sfio on this machine." >&4
12631                 echo "Ignoring your setting of usesfio=$usesfio." >&4
12632                 val="$undef"
12633                 ;;
12634         esac
12635         ;;
12636 esac
12637 set d_sfio
12638 eval $setvar
12639 case "$d_sfio" in
12640 $define) usesfio='true';;
12641 *) usesfio='false';;
12642 esac
12643 case "$d_sfio" in
12644 $define) ;;
12645 *)      : Remove sfio from list of libraries to use
12646         case "$libs" in
12647         *-lsfio*)
12648                 echo "Removing unneeded -lsfio from library list" >&4
12649                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
12650                 shift
12651                 libs="$*"
12652                 echo "libs = $libs" >&4
12653                 ;;
12654         esac
12655 ;;
12656 esac
12657
12658
12659 : see if shmctl exists
12660 set shmctl d_shmctl
12661 eval $inlibc
12662
12663 : see if shmget exists
12664 set shmget d_shmget
12665 eval $inlibc
12666
12667 : see if shmat exists
12668 set shmat d_shmat
12669 eval $inlibc
12670 : see what shmat returns
12671 case "$d_shmat" in
12672 "$define")
12673         $cat >shmat.c <<'END'
12674 #include <sys/shm.h>
12675 void *shmat();
12676 END
12677         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
12678                 shmattype='void *'
12679         else
12680                 shmattype='char *'
12681         fi
12682         echo "and it returns ($shmattype)." >&4
12683         : see if a prototype for shmat is available
12684         xxx=`./findhdr sys/shm.h`
12685         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
12686         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
12687                 val="$define"
12688         else
12689                 val="$undef"
12690         fi
12691         $rm -f shmat.[co]
12692         ;;
12693 *)
12694         val="$undef"
12695         ;;
12696 esac
12697 set d_shmatprototype
12698 eval $setvar
12699
12700 : see if shmdt exists
12701 set shmdt d_shmdt
12702 eval $inlibc
12703
12704 : see how much of the 'shm*(2)' library is present.
12705 h_shm=true
12706 echo " "
12707 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
12708 *"$undef"*) h_shm=false;;
12709 esac
12710 case "$osname" in
12711 freebsd)
12712     case "`ipcs 2>&1`" in
12713     "SVID shared memory"*"not configured"*)
12714         echo "Your $osname does not have the shm*(2) configured." >&4
12715         h_shm=false
12716         val="$undef"
12717         set shmctl d_shmctl
12718         evat $setvar
12719         set shmget d_shmget
12720         evat $setvar
12721         set shmat d_shmat
12722         evat $setvar
12723         set shmdt d_shmdt
12724         evat $setvar
12725         ;;
12726     esac
12727     ;;
12728 esac
12729 : we could also check for sys/ipc.h ...
12730 if $h_shm && $test `./findhdr sys/shm.h`; then
12731         echo "You have the full shm*(2) library." >&4
12732         val="$define"
12733 else
12734         echo "You don't have the full shm*(2) library." >&4
12735         val="$undef"
12736 fi
12737 set d_shm
12738 eval $setvar
12739
12740 echo " "
12741 : see if we have sigaction
12742 if set sigaction val -f d_sigaction; eval $csym; $val; then
12743         echo 'sigaction() found.' >&4
12744         $cat > try.c <<'EOP'
12745 #include <stdio.h>
12746 #include <sys/types.h>
12747 #include <signal.h>
12748 int main()
12749 {
12750     struct sigaction act, oact;
12751     act.sa_flags = 0;
12752     oact.sa_handler = 0;
12753     /* so that act and oact are used */
12754     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
12755 }
12756 EOP
12757         set try
12758         if eval $compile_ok; then
12759                 val="$define"
12760         else
12761                 echo "But you don't seem to have a useable struct sigaction." >&4
12762                 val="$undef"
12763         fi
12764 else
12765         echo 'sigaction NOT found.' >&4
12766         val="$undef"
12767 fi
12768 set d_sigaction; eval $setvar
12769 $rm -f try try$_o try.c
12770
12771 : see if sigprocmask exists
12772 set sigprocmask d_sigprocmask
12773 eval $inlibc
12774
12775 : see if sigsetjmp exists
12776 echo " "
12777 case "$d_sigsetjmp" in
12778 '')
12779         $cat >try.c <<'EOP'
12780 #include <setjmp.h>
12781 sigjmp_buf env;
12782 int set = 1;
12783 int main()
12784 {
12785         if (sigsetjmp(env,1))
12786                 exit(set);
12787         set = 0;
12788         siglongjmp(env, 1);
12789         exit(1);
12790 }
12791 EOP
12792         set try
12793         if eval $compile; then
12794                 if $run ./try >/dev/null 2>&1; then
12795                         echo "POSIX sigsetjmp found." >&4
12796                         val="$define"
12797                 else
12798                         $cat >&4 <<EOM
12799 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
12800 I'll ignore them.
12801 EOM
12802                         val="$undef"
12803                 fi
12804         else
12805                 echo "sigsetjmp not found." >&4
12806                 val="$undef"
12807         fi
12808         ;;
12809 *) val="$d_sigsetjmp"
12810         case "$d_sigsetjmp" in
12811         $define) echo "POSIX sigsetjmp found." >&4;;
12812         $undef) echo "sigsetjmp not found." >&4;;
12813         esac
12814         ;;
12815 esac
12816 set d_sigsetjmp
12817 eval $setvar
12818 $rm -f try.c try
12819
12820 : see if sockatmark exists
12821 set sockatmark d_sockatmark
12822 eval $inlibc
12823
12824 : see if prototype for sockatmark is available
12825 echo " "
12826 set d_sockatmarkproto sockatmark $d_socket sys/socket.h
12827 eval $hasproto
12828
12829 : see if socks5_init exists
12830 set socks5_init d_socks5_init
12831 eval $inlibc
12832
12833 : see if prototype for setresgid is available
12834 echo " "
12835 set d_sresgproto setresgid $i_unistd unistd.h
12836 eval $hasproto
12837
12838 : see if prototype for setresuid is available
12839 echo " "
12840 set d_sresuproto setresuid $i_unistd unistd.h
12841 eval $hasproto
12842
12843 : see if sys/stat.h is available
12844 set sys/stat.h i_sysstat
12845 eval $inhdr
12846
12847
12848 : see if stat knows about block sizes
12849 echo " "
12850 echo "Checking to see if your struct stat has st_blocks field..." >&4
12851 set d_statblks stat st_blocks $i_sysstat sys/stat.h
12852 eval $hasfield
12853
12854
12855 : see if this is a sys/vfs.h system
12856 set sys/vfs.h i_sysvfs
12857 eval $inhdr
12858
12859
12860 : see if this is a sys/statfs.h system
12861 set sys/statfs.h i_sysstatfs
12862 eval $inhdr
12863
12864
12865 echo " "
12866 echo "Checking to see if your system supports struct statfs..." >&4
12867 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
12868 eval $hasstruct
12869 case "$d_statfs_s" in
12870 "$define")      echo "Yes, it does."   ;;
12871 *)              echo "No, it doesn't." ;;
12872 esac
12873
12874
12875
12876 : see if struct statfs knows about f_flags
12877 case "$d_statfs_s" in
12878 define) 
12879         echo " "
12880         echo "Checking to see if your struct statfs has f_flags field..." >&4
12881         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
12882         eval $hasfield
12883         ;;
12884 *)      val="$undef"
12885         set d_statfs_f_flags
12886         eval $setvar
12887         ;;
12888 esac
12889 case "$d_statfs_f_flags" in
12890 "$define")      echo "Yes, it does."   ;;
12891 *)              echo "No, it doesn't." ;;
12892 esac
12893
12894 : see if _ptr and _cnt from stdio act std
12895 echo " "
12896
12897 if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12898         echo "(Looks like you have stdio.h from BSD.)"
12899         case "$stdio_ptr" in
12900         '') stdio_ptr='((fp)->_p)'
12901                 ptr_lval=$define
12902                 ;;
12903         *)      ptr_lval=$d_stdio_ptr_lval;;
12904         esac
12905         case "$stdio_cnt" in
12906         '') stdio_cnt='((fp)->_r)'
12907                 cnt_lval=$define
12908                 ;;
12909         *)      cnt_lval=$d_stdio_cnt_lval;;
12910         esac
12911         case "$stdio_base" in
12912         '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
12913         esac
12914         case "$stdio_bufsiz" in
12915         '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
12916         esac
12917 elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
12918         echo "(Looks like you have stdio.h from Linux.)"
12919         case "$stdio_ptr" in
12920         '') stdio_ptr='((fp)->_IO_read_ptr)'
12921                 ptr_lval=$define
12922                 ;;
12923         *)      ptr_lval=$d_stdio_ptr_lval;;
12924         esac
12925         case "$stdio_cnt" in
12926         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
12927                 cnt_lval=$undef
12928                 ;;
12929         *)      cnt_lval=$d_stdio_cnt_lval;;
12930         esac
12931         case "$stdio_base" in
12932         '') stdio_base='((fp)->_IO_read_base)';;
12933         esac
12934         case "$stdio_bufsiz" in
12935         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
12936         esac
12937 else
12938         case "$stdio_ptr" in
12939         '') stdio_ptr='((fp)->_ptr)'
12940                 ptr_lval=$define
12941                 ;;
12942         *)      ptr_lval=$d_stdio_ptr_lval;;
12943         esac
12944         case "$stdio_cnt" in
12945         '') stdio_cnt='((fp)->_cnt)'
12946                 cnt_lval=$define
12947                 ;;
12948         *)      cnt_lval=$d_stdio_cnt_lval;;
12949         esac
12950         case "$stdio_base" in
12951         '') stdio_base='((fp)->_base)';;
12952         esac
12953         case "$stdio_bufsiz" in
12954         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
12955         esac
12956 fi
12957
12958 : test whether _ptr and _cnt really work
12959 echo "Checking how std your stdio is..." >&4
12960 $cat >try.c <<EOP
12961 #include <stdio.h>
12962 #define FILE_ptr(fp)    $stdio_ptr
12963 #define FILE_cnt(fp)    $stdio_cnt
12964 int main() {
12965         FILE *fp = fopen("try.c", "r");
12966         char c = getc(fp);
12967         if (
12968                 18 <= FILE_cnt(fp) &&
12969                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12970         )
12971                 exit(0);
12972         exit(1);
12973 }
12974 EOP
12975 val="$undef"
12976 set try
12977 if eval $compile && $to try.c; then
12978         if $run ./try; then
12979                 echo "Your stdio acts pretty std."
12980                 val="$define"
12981         else
12982                 echo "Your stdio isn't very std."
12983         fi
12984 else
12985         echo "Your stdio doesn't appear very std."
12986 fi
12987 $rm -f try.c try
12988 set d_stdstdio
12989 eval $setvar
12990
12991 : Can _ptr be used as an lvalue?
12992 case "$d_stdstdio$ptr_lval" in
12993 $define$define) val=$define ;;
12994 *) val=$undef ;;
12995 esac
12996 set d_stdio_ptr_lval
12997 eval $setvar
12998
12999 : Can _cnt be used as an lvalue?
13000 case "$d_stdstdio$cnt_lval" in
13001 $define$define) val=$define ;;
13002 *) val=$undef ;;
13003 esac
13004 set d_stdio_cnt_lval
13005 eval $setvar
13006
13007
13008 : test whether setting _ptr sets _cnt as a side effect
13009 d_stdio_ptr_lval_sets_cnt="$undef"
13010 d_stdio_ptr_lval_nochange_cnt="$undef"
13011 case "$d_stdio_ptr_lval$d_stdstdio" in
13012 $define$define)
13013         echo "Checking to see what happens if we set the stdio ptr..." >&4
13014 $cat >try.c <<EOP
13015 #include <stdio.h>
13016 /* Can we scream? */
13017 /* Eat dust sed :-) */
13018 /* In the buffer space, no one can hear you scream. */
13019 #define FILE_ptr(fp)    $stdio_ptr
13020 #define FILE_cnt(fp)    $stdio_cnt
13021 #include <sys/types.h>
13022 int main() {
13023         FILE *fp = fopen("try.c", "r");
13024         int c;
13025         char *ptr;
13026         size_t cnt;
13027         if (!fp) {
13028             puts("Fail even to read");
13029             exit(1);
13030         }
13031         c = getc(fp); /* Read away the first # */
13032         if (c == EOF) {
13033             puts("Fail even to read");
13034             exit(1);
13035         }
13036         if (!(
13037                 18 <= FILE_cnt(fp) &&
13038                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
13039         )) {
13040                 puts("Fail even to read");
13041                 exit (1);
13042         }
13043         ptr = (char*) FILE_ptr(fp);
13044         cnt = (size_t)FILE_cnt(fp);
13045
13046         FILE_ptr(fp) += 42;
13047
13048         if ((char*)FILE_ptr(fp) != (ptr + 42)) {
13049                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
13050                 exit (1);
13051         }
13052         if (FILE_cnt(fp) <= 20) {
13053                 printf ("Fail (<20 chars to test)");
13054                 exit (1);
13055         }
13056         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
13057                 puts("Fail compare");
13058                 exit (1);
13059         }
13060         if (cnt == FILE_cnt(fp)) {
13061                 puts("Pass_unchanged");
13062                 exit (0);
13063         }       
13064         if (FILE_cnt(fp) == (cnt - 42)) {
13065                 puts("Pass_changed");
13066                 exit (0);
13067         }
13068         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
13069         return 1;
13070
13071 }
13072 EOP
13073         set try
13074         if eval $compile && $to try.c; then
13075                 case `$run ./try` in
13076                 Pass_changed)
13077                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
13078                         d_stdio_ptr_lval_sets_cnt="$define" ;;
13079                 Pass_unchanged)
13080                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
13081                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
13082                 Fail*)
13083                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
13084                 *)
13085                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
13086         esac
13087         else
13088                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
13089         fi
13090         $rm -f try.c try
13091         ;;
13092 esac
13093
13094 : see if _base is also standard
13095 val="$undef"
13096 case "$d_stdstdio" in
13097 $define)
13098         $cat >try.c <<EOP
13099 #include <stdio.h>
13100 #define FILE_base(fp)   $stdio_base
13101 #define FILE_bufsiz(fp) $stdio_bufsiz
13102 int main() {
13103         FILE *fp = fopen("try.c", "r");
13104         char c = getc(fp);
13105         if (
13106                 19 <= FILE_bufsiz(fp) &&
13107                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
13108         )
13109                 exit(0);
13110         exit(1);
13111 }
13112 EOP
13113         set try
13114         if eval $compile && $to try.c; then
13115                 if $run ./try; then
13116                         echo "And its _base field acts std."
13117                         val="$define"
13118                 else
13119                         echo "But its _base field isn't std."
13120                 fi
13121         else
13122                 echo "However, it seems to be lacking the _base field."
13123         fi
13124         $rm -f try.c try
13125         ;;
13126 esac
13127 set d_stdiobase
13128 eval $setvar
13129
13130 $cat >&4 <<EOM
13131 Checking how to access stdio streams by file descriptor number...
13132 EOM
13133 case "$stdio_stream_array" in
13134 '')     $cat >try.c <<EOCP
13135 #include <stdio.h>
13136 int main() {
13137   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
13138     printf("yes\n");
13139 }
13140 EOCP
13141         for s in _iob __iob __sF
13142         do
13143                 set try -DSTDIO_STREAM_ARRAY=$s
13144                 if eval $compile; then
13145                         case "`$run ./try`" in
13146                         yes)    stdio_stream_array=$s; break ;;
13147                         esac
13148                 fi
13149         done
13150         $rm -f try.* try$exe_ext
13151 esac
13152 case "$stdio_stream_array" in
13153 '')     $cat >&4 <<EOM
13154 I can't figure out how to access stdio streams by file descriptor number.
13155 EOM
13156         d_stdio_stream_array="$undef"
13157         ;;
13158 *)      $cat >&4 <<EOM
13159 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
13160 EOM
13161         d_stdio_stream_array="$define"
13162         ;;
13163 esac
13164
13165 : see if strcoll exists
13166 set strcoll d_strcoll
13167 eval $inlibc
13168
13169 : check for structure copying
13170 echo " "
13171 echo "Checking to see if your C compiler can copy structs..." >&4
13172 $cat >try.c <<'EOCP'
13173 int main()
13174 {
13175         struct blurfl {
13176                 int dyick;
13177         } foo, bar;
13178
13179         foo = bar;
13180 }
13181 EOCP
13182 if $cc -c try.c >/dev/null 2>&1 ; then
13183         val="$define"
13184         echo "Yup, it can."
13185 else
13186         val="$undef"
13187         echo "Nope, it can't."
13188 fi
13189 set d_strctcpy
13190 eval $setvar
13191 $rm -f try.*
13192
13193 : see if strerror and/or sys_errlist[] exist
13194 echo " "
13195 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
13196     if set strerror val -f d_strerror; eval $csym; $val; then
13197                 echo 'strerror() found.' >&4
13198                 d_strerror="$define"
13199                 d_strerrm='strerror(e)'
13200                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
13201                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
13202                         d_syserrlst="$define"
13203                 else
13204                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
13205                         d_syserrlst="$undef"
13206                 fi
13207     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
13208                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
13209                 echo 'strerror() found in string header.' >&4
13210                 d_strerror="$define"
13211                 d_strerrm='strerror(e)'
13212                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
13213                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
13214                                 d_syserrlst="$define"
13215                 else
13216                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
13217                         d_syserrlst="$undef"
13218                 fi
13219     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
13220                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
13221                 d_strerror="$undef"
13222                 d_syserrlst="$define"
13223                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
13224     else
13225                 echo 'strerror() and sys_errlist[] NOT found.' >&4
13226                 d_strerror="$undef"
13227                 d_syserrlst="$undef"
13228                 d_strerrm='"unknown"'
13229     fi
13230 fi
13231
13232 : see if strftime exists
13233 set strftime d_strftime
13234 eval $inlibc
13235
13236 : see if strtod exists
13237 set strtod d_strtod
13238 eval $inlibc
13239
13240 : see if strtol exists
13241 set strtol d_strtol
13242 eval $inlibc
13243
13244 : see if strtold exists
13245 set strtold d_strtold
13246 eval $inlibc
13247
13248 : see if strtoll exists
13249 set strtoll d_strtoll
13250 eval $inlibc
13251
13252 case "$d_longlong-$d_strtoll" in
13253 "$define-$define")
13254         $cat <<EOM
13255 Checking whether your strtoll() works okay...
13256 EOM
13257         $cat >try.c <<'EOCP'
13258 #include <errno.h>
13259 #ifdef __hpux
13260 #define strtoll __strtoll
13261 #endif
13262 #ifdef __EMX__
13263 #define strtoll _strtoll
13264 #endif
13265 #include <stdio.h>
13266 extern long long int strtoll(char *s, char **, int); 
13267 static int bad = 0;
13268 int check(char *s, long long ell, int een) {
13269         long long gll;
13270         errno = 0;
13271         gll = strtoll(s, 0, 10);
13272         if (!((gll == ell) && (errno == een)))
13273                 bad++;
13274 }
13275 int main() {
13276         check(" 1",                                      1LL, 0);
13277         check(" 0",                                      0LL, 0);
13278         check("-1",                                     -1LL, 0);
13279         check("-9223372036854775808", -9223372036854775808LL, 0);
13280         check("-9223372036854775808", -9223372036854775808LL, 0);
13281         check(" 9223372036854775807",  9223372036854775807LL, 0);
13282         check("-9223372036854775808", -9223372036854775808LL, 0);
13283         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
13284         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
13285         if (!bad)
13286                 printf("ok\n");
13287 }
13288 EOCP
13289         set try
13290         if eval $compile; then
13291                 yyy=`$run ./try`
13292                 case "$yyy" in
13293                 ok) echo "Your strtoll() seems to be working okay." ;;
13294                 *) cat <<EOM >&4
13295 Your strtoll() doesn't seem to be working okay.
13296 EOM
13297                    d_strtoll="$undef"
13298                    ;;
13299                 esac
13300         else
13301                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13302                 d_strtoll="$undef"
13303         fi
13304         ;;
13305 esac
13306
13307 : see if strtoq exists
13308 set strtoq d_strtoq
13309 eval $inlibc
13310
13311 : see if strtoul exists
13312 set strtoul d_strtoul
13313 eval $inlibc
13314
13315 case "$d_strtoul" in
13316 "$define")
13317         $cat <<EOM
13318 Checking whether your strtoul() works okay...
13319 EOM
13320         $cat >try.c <<'EOCP'
13321 #include <errno.h>
13322 #include <stdio.h>
13323 extern unsigned long int strtoul(char *s, char **, int); 
13324 static int bad = 0;
13325 void check(char *s, unsigned long eul, int een) {
13326         unsigned long gul;
13327         errno = 0;
13328         gul = strtoul(s, 0, 10);
13329         if (!((gul == eul) && (errno == een)))
13330                 bad++;
13331 }
13332 int main() {
13333         check(" 1", 1L, 0);
13334         check(" 0", 0L, 0);
13335 EOCP
13336         case "$longsize" in
13337         8)
13338             $cat >>try.c <<'EOCP'
13339         check("18446744073709551615", 18446744073709551615UL, 0);
13340         check("18446744073709551616", 18446744073709551615UL, ERANGE);
13341 #if 0 /* strtoul() for /^-/ strings is undefined. */
13342         check("-1", 18446744073709551615UL, 0);
13343         check("-18446744073709551614", 2, 0);
13344         check("-18446744073709551615", 1, 0);
13345         check("-18446744073709551616", 18446744073709551615UL, ERANGE);
13346         check("-18446744073709551617", 18446744073709551615UL, ERANGE);
13347 #endif
13348 EOCP
13349                 ;;
13350         4)
13351                     $cat >>try.c <<'EOCP'
13352         check("4294967295", 4294967295UL, 0);
13353         check("4294967296", 4294967295UL, ERANGE);
13354 #if 0 /* strtoul() for /^-/ strings is undefined. */
13355         check("-1", 4294967295UL, 0);
13356         check("-4294967294", 2, 0);
13357         check("-4294967295", 1, 0);
13358         check("-4294967296", 4294967295UL, ERANGE);
13359         check("-4294967297", 4294967295UL, ERANGE);
13360 #endif
13361 EOCP
13362                 ;;
13363         *)
13364 : Should we write these tests to be more portable by sprintf-ing
13365 : ~0 and then manipulating that char string as input for strtol?
13366                 ;;
13367         esac
13368         $cat >>try.c <<'EOCP'
13369         if (!bad)
13370                 printf("ok\n");
13371         return 0;
13372 }
13373 EOCP
13374         set try
13375         if eval $compile; then
13376                 case "`$run ./try`" in
13377                 ok) echo "Your strtoul() seems to be working okay." ;;
13378                 *) cat <<EOM >&4
13379 Your strtoul() doesn't seem to be working okay.
13380 EOM
13381                    d_strtoul="$undef"
13382                    ;;
13383                 esac
13384         fi
13385         ;;
13386 esac
13387
13388 : see if strtoull exists
13389 set strtoull d_strtoull
13390 eval $inlibc
13391
13392 case "$d_longlong-$d_strtoull" in
13393 "$define-$define")
13394         $cat <<EOM
13395 Checking whether your strtoull() works okay...
13396 EOM
13397         $cat >try.c <<'EOCP'
13398 #include <errno.h>
13399 #ifdef __hpux
13400 #define strtoull __strtoull
13401 #endif
13402 #include <stdio.h>
13403 extern unsigned long long int strtoull(char *s, char **, int); 
13404 static int bad = 0;
13405 int check(char *s, long long eull, int een) {
13406         long long gull;
13407         errno = 0;
13408         gull = strtoull(s, 0, 10);
13409         if (!((gull == eull) && (errno == een)))
13410                 bad++;
13411 }
13412 int main() {
13413         check(" 1",                                        1LL, 0);
13414         check(" 0",                                        0LL, 0);
13415         check("18446744073709551615",  18446744073709551615ULL, 0);
13416         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13417 #if 0 /* strtoull() for /^-/ strings is undefined. */
13418         check("-1",                    18446744073709551615ULL, 0);
13419         check("-18446744073709551614",                     2LL, 0);
13420         check("-18446744073709551615",                     1LL, 0);
13421         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13422         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13423 #endif
13424         if (!bad)
13425                 printf("ok\n");
13426 }
13427 EOCP
13428         set try
13429         if eval $compile; then
13430                 case "`$run ./try`" in
13431                 ok) echo "Your strtoull() seems to be working okay." ;;
13432                 *) cat <<EOM >&4
13433 Your strtoull() doesn't seem to be working okay.
13434 EOM
13435                    d_strtoull="$undef"
13436                    ;;
13437                 esac
13438         fi
13439         ;;
13440 esac
13441
13442 : see if strtouq exists
13443 set strtouq d_strtouq
13444 eval $inlibc
13445
13446 case "$d_strtouq" in
13447 "$define")
13448         $cat <<EOM
13449 Checking whether your strtouq() works okay...
13450 EOM
13451         $cat >try.c <<'EOCP'
13452 #include <errno.h>
13453 #include <stdio.h>
13454 extern unsigned long long int strtouq(char *s, char **, int); 
13455 static int bad = 0;
13456 void check(char *s, unsigned long long eull, int een) {
13457         unsigned long long gull;
13458         errno = 0;
13459         gull = strtouq(s, 0, 10);
13460         if (!((gull == eull) && (errno == een)))
13461                 bad++;
13462 }
13463 int main() {
13464         check(" 1",                                        1LL, 0);
13465         check(" 0",                                        0LL, 0);
13466         check("18446744073709551615",  18446744073709551615ULL, 0);
13467         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13468 #if 0 /* strtouq() for /^-/ strings is undefined. */
13469         check("-1",                    18446744073709551615ULL, 0);
13470         check("-18446744073709551614",                     2LL, 0);
13471         check("-18446744073709551615",                     1LL, 0);
13472         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13473         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13474 #endif
13475         if (!bad)
13476                 printf("ok\n");
13477         return 0;
13478 }
13479 EOCP
13480         set try
13481         if eval $compile; then
13482                 case "`$run ./try`" in
13483                 ok) echo "Your strtouq() seems to be working okay." ;;
13484                 *) cat <<EOM >&4
13485 Your strtouq() doesn't seem to be working okay.
13486 EOM
13487                    d_strtouq="$undef"
13488                    ;;
13489                 esac
13490         fi
13491         ;;
13492 esac
13493
13494 : see if strxfrm exists
13495 set strxfrm d_strxfrm
13496 eval $inlibc
13497
13498 : see if symlink exists
13499 set symlink d_symlink
13500 eval $inlibc
13501
13502 : see if syscall exists
13503 set syscall d_syscall
13504 eval $inlibc
13505
13506 : see if prototype for syscall is available
13507 echo " "
13508 set d_syscallproto syscall $i_unistd unistd.h
13509 eval $hasproto
13510
13511 : see if sysconf exists
13512 set sysconf d_sysconf
13513 eval $inlibc
13514
13515 : see if system exists
13516 set system d_system
13517 eval $inlibc
13518
13519 : see if tcgetpgrp exists
13520 set tcgetpgrp d_tcgetpgrp
13521 eval $inlibc
13522
13523 : see if tcsetpgrp exists
13524 set tcsetpgrp d_tcsetpgrp
13525 eval $inlibc
13526
13527 : see if prototype for telldir is available
13528 echo " "
13529 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
13530 eval $hasproto
13531
13532 : see if this is a sys/times.h system
13533 set sys/times.h i_systimes
13534 eval $inhdr
13535
13536 : see if times exists
13537 echo " "
13538 if set times val -f d_times; eval $csym; $val; then
13539         echo 'times() found.' >&4
13540         d_times="$define"
13541         inc=''
13542         case "$i_systimes" in
13543         "$define") inc='sys/times.h';;
13544         esac
13545         rp="What is the type returned by times() on this system?"
13546         set clock_t clocktype long stdio.h sys/types.h $inc
13547         eval $typedef_ask
13548 else
13549         echo 'times() NOT found, hope that will do.' >&4
13550         d_times="$undef"
13551         clocktype='int'
13552 fi
13553
13554 : see if truncate exists
13555 set truncate d_truncate
13556 eval $inlibc
13557
13558 : see if tzname[] exists
13559 echo " "
13560 if set tzname val -a d_tzname; eval $csym; $val; then
13561         val="$define"
13562         echo 'tzname[] found.' >&4
13563 else
13564         val="$undef"
13565         echo 'tzname[] NOT found.' >&4
13566 fi
13567 set d_tzname
13568 eval $setvar
13569
13570 case "$osname" in
13571 next|rhapsody|darwin) multiarch="$define" ;;
13572 esac
13573 case "$multiarch" in
13574 ''|[nN]*) multiarch="$undef" ;;
13575 esac
13576
13577 : check for ordering of bytes in a long
13578 echo " "
13579 case "$usecrosscompile$multiarch" in
13580 *$define*)
13581         $cat <<EOM
13582 You seem to be either cross-compiling or doing a multiarchitecture build,
13583 skipping the byteorder check.
13584
13585 EOM
13586         byteorder='ffff'
13587         ;;
13588 *)
13589         case "$byteorder" in
13590         '')
13591                 $cat <<'EOM'
13592 In the following, larger digits indicate more significance.  A big-endian
13593 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
13594 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
13595 machines may have weird orders like 3412.  A Cray will report 87654321,
13596 an Alpha will report 12345678. If the test program works the default is
13597 probably right.
13598 I'm now running the test program...
13599 EOM
13600                 $cat >try.c <<'EOCP'
13601 #include <stdio.h>
13602 int main()
13603 {
13604         int i;
13605         union {
13606                 unsigned long l;
13607                 char c[sizeof(long)];
13608         } u;
13609
13610         if (sizeof(long) > 4)
13611                 u.l = (0x08070605L << 32) | 0x04030201L;
13612         else
13613                 u.l = 0x04030201L;
13614         for (i = 0; i < sizeof(long); i++)
13615                 printf("%c", u.c[i]+'0');
13616         printf("\n");
13617         exit(0);
13618 }
13619 EOCP
13620                 xxx_prompt=y
13621                 set try
13622                 if eval $compile && ./try > /dev/null; then
13623                         dflt=`$run ./try`
13624                         case "$dflt" in
13625                         [1-4][1-4][1-4][1-4]|12345678|87654321)
13626                                 echo "(The test program ran ok.)"
13627                                 echo "byteorder=$dflt"
13628                                 xxx_prompt=n
13629                         ;;
13630                         ????|????????) echo "(The test program ran ok.)" ;;
13631                         *) echo "(The test program didn't run right for some reason.)" ;;
13632                         esac
13633                 else
13634                         dflt='4321'
13635                         cat <<'EOM'
13636 (I can't seem to compile the test program.  Guessing big-endian...)
13637 EOM
13638                 fi
13639                 case "$xxx_prompt" in
13640                 y)
13641                         rp="What is the order of bytes in a long?"
13642                         . ./myread
13643                         byteorder="$ans"
13644                         ;;
13645                 *)      byteorder=$dflt
13646                         ;;
13647                 esac
13648                 ;;
13649         esac
13650         $rm -f try.c try
13651         ;;
13652 esac
13653
13654
13655 $cat <<EOM
13656
13657 Checking to see whether you can access character data unalignedly...
13658 EOM
13659 case "$d_u32align" in
13660 '')   $cat >try.c <<EOCP
13661 #include <stdio.h>
13662 #define U32 $u32type
13663 #define BYTEORDER 0x$byteorder
13664 #define U8 $u8type
13665 #include <signal.h>
13666 #ifdef SIGBUS
13667 $signal_t bletch(s) int s; { exit(4); }
13668 #endif
13669 int main() {
13670 #if BYTEORDER == 0x1234 || BYTEORDER == 0x4321
13671     U8 buf[8];
13672     U32 *up;
13673     int i;
13674
13675     if (sizeof(U32) != 4) {
13676         printf("sizeof(U32) is not 4, but %d\n", sizeof(U32));
13677         exit(1);
13678     }
13679
13680     fflush(stdout);
13681
13682 #ifdef SIGBUS
13683     signal(SIGBUS, bletch);
13684 #endif
13685
13686     buf[0] = 0;
13687     buf[1] = 0;
13688     buf[2] = 0;
13689     buf[3] = 1;
13690     buf[5] = 0;
13691     buf[6] = 0;
13692     buf[7] = 0;
13693     buf[8] = 1;
13694
13695     for (i = 0; i < 4; i++) {
13696         up = (U32*)(buf + i);
13697         if (! ((*up == 1 << (8*i)) ||   /* big-endian */
13698                (*up == 1 << (8*(3-i)))  /* little-endian */
13699               )
13700            )
13701         {
13702             printf("read failed (%x)\n", *up);
13703             exit(2);
13704         }
13705     }
13706
13707     /* write test */
13708     for (i = 0; i < 4; i++) {
13709         up = (U32*)(buf + i);
13710         *up = 0xBeef;
13711         if (*up != 0xBeef) {
13712             printf("write failed (%x)\n", *up);
13713             exit(3);
13714         }
13715     }
13716
13717     exit(0);
13718 #else
13719     printf("1\n");
13720     exit(1);
13721 #endif
13722     return 0;
13723 }
13724 EOCP
13725 set try
13726 if eval $compile_ok; then
13727         echo "(Testing for character data alignment may crash the test.  That's okay.)" >&4
13728         $run ./try 2>&1 >/dev/null
13729         case "$?" in
13730         0)      cat >&4 <<EOM
13731 You can access character data pretty unalignedly.
13732 EOM
13733                 d_u32align="$undef"
13734                 ;;
13735         *)      cat >&4 <<EOM
13736 It seems that you must access character data in an aligned manner.
13737 EOM
13738                 d_u32align="$define"
13739                 ;;
13740         esac
13741 else
13742         rp='Can you access character data at unaligned addresses?'
13743         dflt='n'
13744         . ./myread
13745         case "$ans" in
13746         [yY]*)  d_u32align="$undef"  ;;
13747         *)      d_u32align="$define" ;;
13748         esac
13749 fi
13750 $rm -f core core.try.* try.core
13751 ;;
13752 esac
13753
13754 : see if ualarm exists
13755 set ualarm d_ualarm
13756 eval $inlibc
13757
13758 : see if umask exists
13759 set umask d_umask
13760 eval $inlibc
13761
13762 : see if unordered exists
13763 set unordered d_unordered
13764 eval $inlibc
13765
13766 : see if usleep exists
13767 set usleep d_usleep
13768 eval $inlibc
13769
13770 : see if prototype for usleep is available
13771 echo " "
13772 set d_usleepproto usleep $i_unistd unistd.h
13773 eval $hasproto
13774
13775 : see if ustat exists
13776 set ustat d_ustat
13777 eval $inlibc
13778
13779 : backward compatibility for d_hvfork
13780 if test X$d_hvfork != X; then
13781         d_vfork="$d_hvfork"
13782         d_hvfork=''
13783 fi
13784 : see if there is a vfork
13785 val=''
13786 set vfork val
13787 eval $inlibc
13788
13789 : Ok, but do we want to use it. vfork is reportedly unreliable in 
13790 : perl on Solaris 2.x, and probably elsewhere.
13791 case "$val" in
13792 $define)
13793         echo " "
13794         case "$usevfork" in
13795         false) dflt='n';;
13796         *) dflt='y';;
13797         esac
13798         cat <<'EOM'
13799  
13800 Perl can only use a vfork() that doesn't suffer from strict
13801 restrictions on calling functions or modifying global data in
13802 the child.  For example, glibc-2.1 contains such a vfork()
13803 that is unsuitable.  If your system provides a proper fork()
13804 call, chances are that you do NOT want perl to use vfork().
13805
13806 EOM
13807         rp="Do you still want to use vfork()?"
13808         . ./myread
13809         case "$ans" in
13810         y|Y) ;;
13811         *)
13812                 echo "Ok, we won't use vfork()."
13813                 val="$undef"
13814                 ;;
13815         esac
13816         ;;
13817 esac
13818 set d_vfork
13819 eval $setvar
13820 case "$d_vfork" in
13821 $define) usevfork='true';;
13822 *) usevfork='false';;
13823 esac
13824
13825 : see if closedir exists
13826 set closedir d_closedir
13827 eval $inlibc
13828
13829 case "$d_closedir" in
13830 "$define")
13831         echo " "
13832         echo "Checking whether closedir() returns a status..." >&4
13833         cat > try.c <<EOM
13834 #$i_dirent I_DIRENT             /**/
13835 #$i_sysdir I_SYS_DIR            /**/
13836 #$i_sysndir I_SYS_NDIR          /**/
13837 #$i_systypes I_SYS_TYPES        /**/
13838
13839 #if defined(I_SYS_TYPES)
13840 #include <sys/types.h>
13841 #endif
13842 #if defined(I_DIRENT)
13843 #include <dirent.h>
13844 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
13845 #include <sys/dir.h>
13846 #endif
13847 #else
13848 #ifdef I_SYS_NDIR
13849 #include <sys/ndir.h>
13850 #else
13851 #ifdef I_SYS_DIR
13852 #ifdef hp9000s500
13853 #include <ndir.h>       /* may be wrong in the future */
13854 #else
13855 #include <sys/dir.h>
13856 #endif
13857 #endif
13858 #endif
13859 #endif 
13860 int main() { return closedir(opendir(".")); }
13861 EOM
13862         set try
13863         if eval $compile_ok; then
13864                 if $run ./try > /dev/null 2>&1 ; then
13865                         echo "Yes, it does."
13866                         val="$undef"
13867                 else
13868                         echo "No, it doesn't."
13869                         val="$define"
13870                 fi
13871         else
13872                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13873                 val="$define"
13874         fi
13875         ;;
13876 *)
13877         val="$undef";
13878         ;;
13879 esac
13880 set d_void_closedir
13881 eval $setvar
13882 $rm -f try try.*
13883 : see if there is a wait4
13884 set wait4 d_wait4
13885 eval $inlibc
13886
13887 : see if waitpid exists
13888 set waitpid d_waitpid
13889 eval $inlibc
13890
13891 : see if wcstombs exists
13892 set wcstombs d_wcstombs
13893 eval $inlibc
13894
13895 : see if wctomb exists
13896 set wctomb d_wctomb
13897 eval $inlibc
13898
13899 : see if writev exists
13900 set writev d_writev
13901 eval $inlibc
13902
13903 : preserve RCS keywords in files with variable substitution, grrr
13904 Date='$Date'
13905 Id='$Id'
13906 Log='$Log'
13907 RCSfile='$RCSfile'
13908 Revision='$Revision'
13909
13910 : check for alignment requirements
13911 echo " "
13912 case "$usecrosscompile$multiarch" in
13913 *$define*)
13914         $cat <<EOM
13915 You seem to be either cross-compiling or doing a multiarchitecture build,
13916 skipping the memory alignment check.
13917
13918 EOM
13919         case "$alignbytes" in
13920         '') alignbytes=8 ;;
13921         esac
13922         ;;
13923 *)
13924         case "$alignbytes" in
13925         '') echo "Checking alignment constraints..." >&4
13926                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
13927                         $cat >try.c <<'EOCP'
13928 typedef long double NV;
13929 EOCP
13930                 else
13931                         $cat >try.c <<'EOCP'
13932 typedef double NV;
13933 EOCP
13934                 fi
13935                 $cat >>try.c <<'EOCP'
13936 #include <stdio.h>
13937 struct foobar {
13938         char foo;
13939         NV bar;
13940 } try_algn;
13941 int main()
13942 {
13943     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
13944     return(0);
13945 }
13946 EOCP
13947                 set try
13948                 if eval $compile_ok; then
13949                         dflt=`$run ./try`
13950                 else
13951                         dflt='8'
13952                         echo "(I can't seem to compile the test program...)"
13953                 fi
13954                 ;;
13955         *) dflt="$alignbytes"
13956                 ;;
13957         esac
13958         rp="Doubles must be aligned on a how-many-byte boundary?"
13959         . ./myread
13960         alignbytes="$ans"
13961         $rm -f try.c try
13962         ;;
13963 esac
13964
13965
13966 : set the base revision
13967 baserev=5.0
13968
13969 : how do we catenate cpp tokens here?
13970 echo " "
13971 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
13972 $cat >cpp_stuff.c <<'EOCP'
13973 #define RCAT(a,b)a/**/b
13974 #define ACAT(a,b)a ## b
13975 RCAT(Rei,ser)
13976 ACAT(Cir,cus)
13977 EOCP
13978 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
13979 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
13980         echo "Oh!  Smells like ANSI's been here." >&4
13981         echo "We can catify or stringify, separately or together!"
13982         cpp_stuff=42
13983 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
13984         echo "Ah, yes!  The good old days!" >&4
13985         echo "However, in the good old days we don't know how to stringify and"
13986         echo "catify at the same time."
13987         cpp_stuff=1
13988 else
13989         $cat >&4 <<EOM
13990 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
13991 to have to edit the values of CAT[2-5] in config.h...
13992 EOM
13993         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
13994 fi
13995 $rm -f cpp_stuff.*
13996
13997 : see if this is a db.h system
13998 set db.h i_db
13999 eval $inhdr
14000
14001 case "$i_db" in
14002 $define)
14003         : Check db version.
14004         echo " "
14005         echo "Checking Berkeley DB version ..." >&4
14006         $cat >try.c <<EOCP
14007 #$d_const HASCONST
14008 #ifndef HASCONST
14009 #define const
14010 #endif
14011 #include <sys/types.h>
14012 #include <stdio.h>
14013 #include <db.h>
14014 int main(int argc, char *argv[])
14015 {
14016 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
14017     int Major, Minor, Patch ;
14018     unsigned long Version ;
14019     (void)db_version(&Major, &Minor, &Patch) ;
14020     if (argc == 2) {
14021         printf("%d %d %d %d %d %d\n",
14022                DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
14023                Major, Minor, Patch);
14024         exit(0);
14025     }
14026     printf("You have Berkeley DB Version 2 or greater.\n");
14027
14028     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
14029                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
14030     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
14031                 Major, Minor, Patch) ;
14032
14033     /* check that db.h & libdb are compatible */
14034     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
14035         printf("db.h and libdb are incompatible.\n") ;
14036         exit(3);        
14037     }
14038
14039     printf("db.h and libdb are compatible.\n") ;
14040
14041     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
14042                 + DB_VERSION_PATCH ;
14043
14044     /* needs to be >= 2.3.4 */
14045     if (Version < 2003004) {
14046     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
14047         printf("Perl needs Berkeley DB 2.3.4 or greater.\n") ;
14048         exit(2);        
14049     }
14050
14051     exit(0);
14052 #else
14053 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
14054     if (argc == 2) {
14055         printf("1 0 0\n");
14056         exit(0);
14057     }
14058     printf("You have Berkeley DB Version 1.\n");
14059     exit(0);    /* DB version < 2: the coast is clear. */
14060 #else
14061     exit(1);    /* <db.h> not Berkeley DB? */
14062 #endif
14063 #endif
14064 }
14065 EOCP
14066         set try
14067         if eval $compile_ok && $run ./try; then
14068                 echo 'Looks OK.' >&4
14069                 set `$run ./try 1`
14070                 db_version_major=$1
14071                 db_version_minor=$2
14072                 db_version_patch=$3
14073         else
14074                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
14075                 i_db=$undef
14076                 case " $libs " in
14077                 *"-ldb "*)
14078                         : Remove db from list of libraries to use
14079                         echo "Removing unusable -ldb from library list" >&4
14080                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
14081                         shift
14082                         libs="$*"
14083                         echo "libs = $libs" >&4
14084                         ;;
14085                 esac
14086         fi
14087         $rm -f try.*
14088         ;;
14089 esac
14090
14091 case "$i_db" in
14092 define)
14093         : Check the return type needed for hash 
14094         echo " "
14095         echo "Checking return type needed for hash for Berkeley DB ..." >&4
14096         $cat >try.c <<EOCP
14097 #$d_const HASCONST
14098 #ifndef HASCONST
14099 #define const
14100 #endif
14101 #include <sys/types.h>
14102 #include <db.h>
14103
14104 #ifndef DB_VERSION_MAJOR
14105 u_int32_t hash_cb (ptr, size)
14106 const void *ptr;
14107 size_t size;
14108 {
14109 }
14110 HASHINFO info;
14111 int main()
14112 {
14113         info.hash = hash_cb;
14114 }
14115 #endif
14116 EOCP
14117         if $cc $ccflags -c try.c >try.out 2>&1 ; then
14118                 if $contains warning try.out >>/dev/null 2>&1 ; then
14119                         db_hashtype='int'
14120                 else
14121                         db_hashtype='u_int32_t'
14122                 fi
14123         else
14124                 : XXX Maybe we should just give up here.
14125                 db_hashtype=u_int32_t
14126                 $cat try.out >&4
14127                 echo "Help:  I can't seem to compile the db test program." >&4
14128                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
14129         fi
14130         $rm -f try.*
14131         echo "Your version of Berkeley DB uses $db_hashtype for hash."
14132         ;;
14133 *)      db_hashtype=u_int32_t
14134         ;;
14135 esac
14136 case "$i_db" in
14137 define)
14138         : Check the return type needed for prefix 
14139         echo " "
14140         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
14141         cat >try.c <<EOCP
14142 #$d_const HASCONST
14143 #ifndef HASCONST
14144 #define const
14145 #endif
14146 #include <sys/types.h>
14147 #include <db.h>
14148
14149 #ifndef DB_VERSION_MAJOR
14150 size_t prefix_cb (key1, key2)
14151 const DBT *key1;
14152 const DBT *key2;
14153 {
14154 }
14155 BTREEINFO info;
14156 int main()
14157 {
14158         info.prefix = prefix_cb;
14159 }
14160 #endif
14161 EOCP
14162         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
14163                 if $contains warning try.out >>/dev/null 2>&1 ; then
14164                         db_prefixtype='int'
14165                 else
14166                         db_prefixtype='size_t'
14167                 fi
14168         else
14169                 db_prefixtype='size_t'
14170                 : XXX Maybe we should just give up here.
14171                 $cat try.out >&4
14172                 echo "Help:  I can't seem to compile the db test program." >&4
14173                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
14174         fi
14175         $rm -f try.*
14176         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
14177         ;;
14178 *)      db_prefixtype='size_t'
14179         ;;
14180 esac
14181
14182
14183 : How can we generate normalized random numbers ?
14184 echo " "
14185 echo "Looking for a random number function..." >&4
14186 case "$randfunc" in
14187 '')
14188         if set drand48 val -f; eval $csym; $val; then
14189                 dflt="drand48"
14190                 echo "Good, found drand48()." >&4
14191         elif set random val -f; eval $csym; $val; then
14192                 dflt="random"
14193                 echo "OK, found random()." >&4
14194         else
14195                 dflt="rand"
14196                 echo "Yick, looks like I have to use rand()." >&4
14197         fi
14198         echo " "
14199         ;;
14200 *)
14201         dflt="$randfunc"
14202         ;;
14203 esac
14204 cont=true
14205
14206 case "$ccflags" in
14207 *-Dmy_rand=*|*-Dmy_srand=*)
14208         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
14209         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
14210         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
14211         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
14212         ;;
14213 esac
14214
14215 while $test "$cont"; do
14216         rp="Use which function to generate random numbers?"
14217         . ./myread
14218         if $test "$ans" = "$dflt"; then
14219                 : null
14220         else
14221                 randbits=''
14222         fi
14223         randfunc="$ans"
14224         if set $ans val -f; eval $csym; $val; then
14225                 cont=''
14226         else
14227                 dflt=y
14228                 rp="I cannot find function $ans. Use that name anyway?"
14229                 . ./myread
14230                 dflt=rand
14231                 case "$ans" in
14232                         [yY]*) cont='';;
14233                 esac
14234         fi
14235         case "$cont" in
14236         '')
14237                 case "$randfunc" in
14238                 drand48)
14239                         drand01="drand48()"
14240                         seedfunc="srand48"
14241                         randbits=48
14242                         randseedtype=long
14243                         ;;
14244                 rand|random)
14245                         case "$randbits" in
14246                         '')
14247 echo "Checking to see how many bits your $randfunc() function produces..." >&4
14248                                 $cat >try.c <<EOCP
14249 #$i_unistd I_UNISTD
14250 #$i_stdlib I_STDLIB
14251 #include <stdio.h>
14252 #ifdef I_UNISTD
14253 #  include <unistd.h>
14254 #endif
14255 #ifdef I_STDLIB
14256 #  include <stdlib.h>
14257 #endif
14258 int main()
14259 {
14260         register int i;
14261         register unsigned long tmp;
14262         register unsigned long max = 0L;
14263
14264         for (i = 1000; i; i--) {
14265                 tmp = (unsigned long) $randfunc();
14266                 if (tmp > max) max = tmp;
14267         }
14268         for (i = 0; max; i++)
14269                 max /= 2;
14270         printf("%d\n",i);
14271 }
14272 EOCP
14273                                 set try
14274                                 if eval $compile_ok; then
14275                                         dflt=`try`
14276                                 else
14277                                         dflt='?'
14278                                         echo "(I can't seem to compile the test program...)"
14279                                 fi
14280                                 ;;
14281                         *)
14282                                 dflt="$randbits"
14283                                 ;;
14284                         esac
14285                         rp="How many bits does your $randfunc() function produce?"
14286                         . ./myread
14287                         randbits="$ans"
14288                         $rm -f try.c try
14289                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
14290                         seedfunc="s$randfunc"
14291                         randseedtype=unsigned
14292                         ;;
14293                 *)
14294                         dflt="31"
14295                         rp="How many bits does your $randfunc() function produce?"
14296                         . ./myread
14297                         randbits="$ans"
14298                         seedfunc="s$randfunc"
14299                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
14300                         if set $seedfunc val -f; eval $csym; $val; then
14301                                 echo "(Using $seedfunc() to seed random generator)"
14302                         else
14303                                 echo "(Warning: no $seedfunc() to seed random generator)"
14304                                 seedfunc=rand
14305                         fi
14306                         randseedtype=unsigned
14307                         ;;
14308                 esac
14309                 ;;
14310         esac
14311 done
14312
14313 echo " "
14314 echo "Determining whether or not we are on an EBCDIC system..." >&4
14315 $cat >try.c <<'EOM'
14316 int main()
14317 {
14318   if ('M'==0xd4) return 0;
14319   return 1;
14320 }
14321 EOM
14322
14323 val=$undef
14324 set try
14325 if eval $compile_ok; then
14326         if $run ./try; then
14327                 echo "You seem to speak EBCDIC." >&4
14328                 val="$define"
14329         else
14330                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4
14331         fi
14332 else
14333         echo "I'm unable to compile the test program." >&4
14334         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
14335 fi
14336 $rm -f try try.*
14337 set ebcdic
14338 eval $setvar
14339
14340 echo " "
14341 $cat >&4 <<EOM
14342 Checking how to flush all pending stdio output...
14343 EOM
14344 # I only know how to find the first 32 possibly open files on SunOS.
14345 # See also hints/sunos_4_1.sh and util.c  --AD
14346 case "$osname" in
14347 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
14348 esac
14349 $cat >>try.c <<EOCP
14350 #include <stdio.h>
14351 #$i_unistd I_UNISTD
14352 #ifdef I_UNISTD
14353 # include <unistd.h>
14354 #endif
14355 #$d_sysconf HAS_SYSCONF
14356 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
14357 #ifdef HAS_STDIO_STREAM_ARRAY
14358 # define STDIO_STREAM_ARRAY $stdio_stream_array
14359 #endif
14360 int main() {
14361   FILE* p;
14362   unlink("try.out");
14363   p = fopen("try.out", "w");
14364 #ifdef TRY_FPUTC
14365   fputc('x', p);
14366 #else
14367 # ifdef TRY_FPRINTF
14368   fprintf(p, "x");
14369 # endif
14370 #endif
14371 #ifdef TRY_FFLUSH_NULL
14372   fflush(NULL);
14373 #endif
14374 #ifdef TRY_FFLUSH_ALL
14375   {
14376     long open_max = -1;
14377 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
14378     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
14379 # else
14380 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
14381     open_max = sysconf(_SC_OPEN_MAX);
14382 #  else
14383 #   ifdef FOPEN_MAX
14384     open_max = FOPEN_MAX;
14385 #   else
14386 #    ifdef OPEN_MAX
14387     open_max = OPEN_MAX;
14388 #    else
14389 #     ifdef _NFILE
14390     open_max = _NFILE;
14391 #     endif
14392 #    endif
14393 #   endif
14394 #  endif
14395 # endif 
14396 # ifdef HAS_STDIO_STREAM_ARRAY
14397     if (open_max > 0) {
14398       long i;
14399       for (i = 0; i < open_max; i++)
14400             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
14401                 STDIO_STREAM_ARRAY[i]._file < open_max &&
14402                 STDIO_STREAM_ARRAY[i]._flag)
14403                 fflush(&STDIO_STREAM_ARRAY[i]);
14404     }   
14405   }
14406 # endif
14407 #endif
14408   _exit(42);
14409 }
14410 EOCP
14411 : first we have to find out how _not_ to flush
14412 $to try.c
14413 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
14414     output=''
14415     set try -DTRY_FPUTC
14416     if eval $compile; then
14417             $run ./try 2>/dev/null
14418             code="$?"
14419             $from try.out
14420             if $test ! -s try.out -a "X$code" = X42; then
14421                 output=-DTRY_FPUTC
14422             fi
14423     fi
14424     case "$output" in
14425     '')
14426             set try -DTRY_FPRINTF
14427             if eval $compile; then
14428                     $run ./try 2>/dev/null
14429                     code="$?"
14430                     $from try.out
14431                     if $test ! -s try.out -a "X$code" = X42; then
14432                         output=-DTRY_FPRINTF
14433                     fi
14434             fi
14435         ;;
14436     esac
14437 fi
14438 : check for fflush NULL behaviour
14439 case "$fflushNULL" in
14440 '')     set try -DTRY_FFLUSH_NULL $output
14441         if eval $compile; then
14442                 $run ./try 2>/dev/null
14443                 code="$?"
14444                 $from try.out
14445                 if $test -s try.out -a "X$code" = X42; then
14446                         fflushNULL="`$cat try.out`"
14447                 else
14448                         if $test "X$code" != X42; then
14449                                 $cat >&4 <<EOM
14450 (If this test failed, don't worry, we'll try another method shortly.)
14451 EOM
14452                         fi
14453                 fi
14454         fi
14455         $rm -f core try.core core.try.*
14456         case "$fflushNULL" in
14457         x)      $cat >&4 <<EOM
14458 Your fflush(NULL) works okay for output streams.
14459 Let's see if it clobbers input pipes...
14460 EOM
14461 # As of mid-March 2000 all versions of Solaris appear to have a stdio
14462 # bug that improperly flushes the input end of pipes.  So we avoid the
14463 # autoflush on fork/system/exec support for now. :-(
14464 $cat >tryp.c <<EOCP
14465 #include <stdio.h>
14466 int
14467 main(int argc, char **argv)
14468 {
14469     char buf[1024];
14470     int i;
14471     char *bp = buf;
14472     while (1) {
14473         while ((i = getc(stdin)) != -1
14474                && (*bp++ = i) != '\n'
14475                && bp < &buf[1024])
14476         /* DO NOTHING */ ;
14477         *bp = '\0';
14478         fprintf(stdout, "%s", buf);
14479         fflush(NULL);
14480         if (i == -1)
14481             return 0;
14482         bp = buf;
14483     }
14484 }
14485 EOCP
14486                 fflushNULL="$define"
14487                 set tryp
14488                 if eval $compile; then
14489                     $rm -f tryp.out
14490                     $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14491                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
14492                        $cat >&4 <<EOM
14493 fflush(NULL) seems to behave okay with input streams.
14494 EOM
14495                         fflushNULL="$define"
14496                     else
14497                         $cat >&4 <<EOM
14498 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
14499 EOM
14500                         fflushNULL="$undef"
14501                     fi
14502                 fi
14503                 $rm -f core tryp.c tryp.core core.tryp.*
14504                 ;;
14505         '')     $cat >&4 <<EOM
14506 Your fflush(NULL) isn't working (contrary to ANSI C).
14507 EOM
14508                 fflushNULL="$undef"
14509                 ;;
14510         *)      $cat >&4 <<EOM
14511 Cannot figure out whether your fflush(NULL) works or not.
14512 I'm assuming it doesn't (contrary to ANSI C).
14513 EOM
14514                 fflushNULL="$undef"
14515                 ;;
14516         esac
14517         ;;
14518 $define|true|[yY]*)
14519         fflushNULL="$define"
14520         ;;
14521 *)
14522         fflushNULL="$undef"
14523         ;;
14524 esac
14525 : check explicit looping only if NULL did not work, and if the pipe
14526 : bug does not show up on an explicit flush too
14527 case "$fflushNULL" in
14528 "$undef")
14529         $cat >tryp.c <<EOCP
14530 #include <stdio.h>
14531 int
14532 main(int argc, char **argv)
14533 {
14534     char buf[1024];
14535     int i;
14536     char *bp = buf;
14537     while (1) {
14538         while ((i = getc(stdin)) != -1
14539                && (*bp++ = i) != '\n'
14540                && bp < &buf[1024])
14541         /* DO NOTHING */ ;
14542         *bp = '\0';
14543         fprintf(stdout, "%s", buf);
14544         fflush(stdin);
14545         if (i == -1)
14546             return 0;
14547         bp = buf;
14548     }
14549 }
14550 EOCP
14551         set tryp
14552         if eval $compile; then
14553             $rm -f tryp.out
14554             $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14555             if cmp tryp.c tryp.out >/dev/null 2>&1; then
14556                $cat >&4 <<EOM
14557 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
14558 EOM
14559                 : now check for fflushall behaviour
14560                 case "$fflushall" in
14561                 '')     set try -DTRY_FFLUSH_ALL $output
14562                         if eval $compile; then
14563                                 $cat >&4 <<EOM
14564 (Now testing the other method--but note that this also may fail.)
14565 EOM
14566                                 $run ./try 2>/dev/null
14567                                 code=$?
14568                                 $from try.out
14569                                 if $test -s try.out -a "X$code" = X42; then
14570                                         fflushall="`$cat try.out`"
14571                                 fi
14572                         fi
14573                         $rm -f core try.core core.try.*
14574                         case "$fflushall" in
14575                         x)      $cat >&4 <<EOM
14576 Whew. Flushing explicitly all the stdio streams works.
14577 EOM
14578                                 fflushall="$define"
14579                                 ;;
14580                         '')     $cat >&4 <<EOM
14581 Sigh. Flushing explicitly all the stdio streams doesn't work.
14582 EOM
14583                                 fflushall="$undef"
14584                                 ;;
14585                         *)      $cat >&4 <<EOM
14586 Cannot figure out whether flushing stdio streams explicitly works or not.
14587 I'm assuming it doesn't.
14588 EOM
14589                                 fflushall="$undef"
14590                                 ;;
14591                         esac
14592                         ;;
14593                 "$define"|true|[yY]*)
14594                         fflushall="$define"
14595                         ;;
14596                 *)
14597                         fflushall="$undef"
14598                         ;;
14599                 esac
14600             else
14601                 $cat >&4 <<EOM
14602 All is futile.  Even fflush(stdin) clobbers input pipes!
14603 EOM
14604                 fflushall="$undef"
14605             fi
14606         else
14607             fflushall="$undef"
14608         fi
14609         $rm -f core tryp.c tryp.core core.tryp.*
14610         ;;
14611 *)      fflushall="$undef"
14612         ;;
14613 esac
14614
14615 case "$fflushNULL$fflushall" in
14616 undefundef)
14617         $cat <<EOM
14618 OK, I give up.  I cannot figure out how to flush pending stdio output.
14619 We won't be flushing handles at all before fork/exec/popen.
14620 EOM
14621         ;;
14622 esac
14623 $rm -f try.* try$exe_ext
14624
14625 : Store the full pathname to the ar program for use in the C program
14626 : Respect a hint or command line value for full_ar.
14627 case "$full_ar" in
14628 '') full_ar=$ar ;;
14629 esac
14630
14631 : Store the full pathname to the sed program for use in the C program
14632 full_sed=$sed
14633
14634 : see what type gids are declared as in the kernel
14635 echo " "
14636 echo "Looking for the type for group ids returned by getgid()."
14637 set gid_t gidtype xxx stdio.h sys/types.h
14638 eval $typedef
14639 case "$gidtype" in
14640 xxx)
14641         xxx=`./findhdr sys/user.h`
14642         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
14643         case $1 in
14644         unsigned) dflt="$1 $2" ;;
14645         *) dflt="$1" ;;
14646         esac
14647         ;;
14648 *) dflt="$gidtype";;
14649 esac
14650 case "$gidtype" in
14651 gid_t) echo "gid_t found." ;;
14652 *)      rp="What is the type for group ids returned by getgid()?"
14653         . ./myread
14654         gidtype="$ans"
14655         ;;
14656 esac
14657
14658 echo " "
14659 case "$gidtype" in
14660 *_t) zzz="$gidtype"     ;;
14661 *)   zzz="gid"          ;;
14662 esac
14663 echo "Checking the size of $zzz..." >&4 
14664 cat > try.c <<EOCP
14665 #include <sys/types.h>
14666 #include <stdio.h>
14667 int main() {
14668     printf("%d\n", (int)sizeof($gidtype));
14669     exit(0);
14670 }
14671 EOCP
14672 set try
14673 if eval $compile_ok; then
14674         yyy=`$run ./try`
14675         case "$yyy" in
14676         '')     gidsize=4
14677                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
14678                 ;;
14679         *)      gidsize=$yyy
14680                 echo "Your $zzz is $gidsize bytes long."
14681                 ;;
14682         esac
14683 else
14684         gidsize=4
14685         echo "(I can't compile the test program--guessing $gidsize.)" >&4
14686 fi
14687
14688
14689 echo " "
14690 case "$gidtype" in
14691 *_t) zzz="$gidtype"     ;;
14692 *)   zzz="gid"          ;;
14693 esac
14694 echo "Checking the sign of $zzz..." >&4 
14695 cat > try.c <<EOCP
14696 #include <sys/types.h>
14697 #include <stdio.h>
14698 int main() {
14699         $gidtype foo = -1;
14700         if (foo < 0)
14701                 printf("-1\n");
14702         else
14703                 printf("1\n");
14704 }
14705 EOCP
14706 set try
14707 if eval $compile; then
14708         yyy=`$run ./try`
14709         case "$yyy" in
14710         '')     gidsign=1
14711                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14712                 ;;
14713         *)      gidsign=$yyy
14714                 case "$gidsign" in
14715                  1) echo "Your $zzz is unsigned." ;;
14716                 -1) echo "Your $zzz is signed."   ;;
14717                 esac
14718                 ;;
14719         esac
14720 else
14721         gidsign=1
14722         echo "(I can't compile the test program--guessing unsigned.)" >&4
14723 fi
14724
14725
14726 echo " "
14727
14728 if $test X"$quadtype" != X; then
14729
14730 echo "Checking how to print 64-bit integers..." >&4
14731
14732 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
14733         $cat >try.c <<'EOCP'
14734 #include <sys/types.h>
14735 #include <stdio.h>
14736 int main() {
14737   int q = 12345678901;
14738   printf("%ld\n", q);
14739 }
14740 EOCP
14741         set try
14742         if eval $compile; then
14743                 yyy=`$run ./try`
14744                 case "$yyy" in
14745                 12345678901)
14746                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
14747                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
14748                         echo "We will use %d."
14749                         ;;
14750                 esac
14751         fi
14752 fi
14753
14754 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
14755         $cat >try.c <<'EOCP'
14756 #include <sys/types.h>
14757 #include <stdio.h>
14758 int main() {
14759   long q = 12345678901;
14760   printf("%ld\n", q);
14761 }
14762 EOCP
14763         set try
14764         if eval $compile; then
14765                 yyy=`$run ./try`
14766                 case "$yyy" in
14767                 12345678901)
14768                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
14769                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
14770                         echo "We will use %ld."
14771                         ;;
14772                 esac
14773         fi
14774 fi
14775
14776 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
14777         $cat >try.c <<'EOCP'
14778 #include <sys/types.h>
14779 #include <inttypes.h>
14780 #include <stdio.h>
14781 int main() {
14782   int64_t q = 12345678901;
14783   printf("%" PRId64 "\n", q);
14784 }
14785 EOCP
14786         set try
14787         if eval $compile; then
14788                 yyy=`$run ./try`
14789                 case "$yyy" in
14790                 12345678901)
14791                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
14792                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
14793                         echo "We will use the C9X style."
14794                         ;;
14795                 esac
14796         fi
14797 fi
14798
14799 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14800         $cat >try.c <<EOCP
14801 #include <sys/types.h>
14802 #include <stdio.h>
14803 int main() {
14804   $quadtype q = 12345678901;
14805   printf("%Ld\n", q);
14806 }
14807 EOCP
14808         set try
14809         if eval $compile; then
14810                 yyy=`$run ./try`
14811                 case "$yyy" in
14812                 12345678901)
14813                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
14814                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
14815                         echo "We will use %Ld."
14816                         ;;
14817                 esac
14818         fi
14819 fi
14820
14821 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
14822         $cat >try.c <<'EOCP'
14823 #include <sys/types.h>
14824 #include <stdio.h>
14825 int main() {
14826   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
14827   printf("%lld\n", q);
14828 }
14829 EOCP
14830         set try
14831         if eval $compile; then
14832                 yyy=`$run ./try`
14833                 case "$yyy" in
14834                 12345678901)
14835                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
14836                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
14837                         echo "We will use the %lld style."
14838                         ;;
14839                 esac
14840         fi
14841 fi
14842
14843 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14844         $cat >try.c <<EOCP
14845 #include <sys/types.h>
14846 #include <stdio.h>
14847 int main() {
14848   $quadtype q = 12345678901;
14849   printf("%qd\n", q);
14850 }
14851 EOCP
14852         set try
14853         if eval $compile; then
14854                 yyy=`$run ./try`
14855                 case "$yyy" in
14856                 12345678901)
14857                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
14858                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
14859                         echo "We will use %qd."
14860                         ;;
14861                 esac
14862         fi
14863 fi
14864
14865 if $test X"$sPRId64" = X; then
14866         echo "Cannot figure out how to print 64-bit integers." >&4
14867 fi
14868
14869 $rm -f try try.*
14870
14871 fi
14872
14873 case "$sPRId64" in
14874 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
14875         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; 
14876         ;;
14877 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
14878         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; 
14879         ;;
14880 esac
14881
14882
14883 echo " "
14884 $echo "Checking the format strings to be used for Perl's internal types..." >&4
14885
14886 if $test X"$ivsize" = X8; then
14887         ivdformat="$sPRId64"
14888         uvuformat="$sPRIu64"
14889         uvoformat="$sPRIo64"
14890         uvxformat="$sPRIx64"
14891         uvXUformat="$sPRIXU64"
14892 else
14893         if $test X"$ivsize" = X"$longsize"; then
14894                 ivdformat='"ld"'
14895                 uvuformat='"lu"'
14896                 uvoformat='"lo"'
14897                 uvxformat='"lx"'
14898                 uvXUformat='"lX"'
14899         else
14900                 if $test X"$ivsize" = X"$intsize"; then
14901                         ivdformat='"d"'
14902                         uvuformat='"u"'
14903                         uvoformat='"o"'
14904                         uvxformat='"x"'
14905                         uvXUformat='"X"'
14906                 else
14907                         : far out
14908                         if $test X"$ivsize" = X"$shortsize"; then
14909                                 ivdformat='"hd"'
14910                                 uvuformat='"hu"'
14911                                 uvoformat='"ho"'
14912                                 uvxformat='"hx"'
14913                                 uvXUformat='"hX"'
14914                         fi
14915                 fi
14916         fi
14917 fi
14918
14919 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
14920         nveformat="$sPRIeldbl"
14921         nvfformat="$sPRIfldbl"
14922         nvgformat="$sPRIgldbl"
14923         nvEUformat="$sPRIEUldbl"
14924         nvFUformat="$sPRIFUldbl"
14925         nvGUformat="$sPRIGUldbl"
14926 else
14927         nveformat='"e"'
14928         nvfformat='"f"'
14929         nvgformat='"g"'
14930         nvEUformat='"E"'
14931         nvFUformat='"F"'
14932         nvGUformat='"G"'
14933 fi
14934
14935 case "$ivdformat" in
14936 '') echo "$0: Fatal: failed to find format strings, cannot continue." >&4
14937     exit 1
14938     ;;
14939 esac
14940
14941
14942 echo " "
14943 $echo "Checking the format string to be used for gids..." >&4
14944
14945 case "$gidsign" in
14946 -1)     if $test X"$gidsize" = X"$ivsize"; then
14947                 gidformat="$ivdformat"
14948         else
14949                 if $test X"$gidsize" = X"$longsize"; then
14950                         gidformat='"ld"'
14951                 else
14952                         if $test X"$gidsize" = X"$intsize"; then
14953                                 gidformat='"d"'
14954                         else
14955                                 if $test X"$gidsize" = X"$shortsize"; then
14956                                         gidformat='"hd"'
14957                                 fi
14958                         fi
14959                 fi
14960         fi
14961         ;;
14962 *)      if $test X"$gidsize" = X"$uvsize"; then
14963                 gidformat="$uvuformat"
14964         else
14965                 if $test X"$gidsize" = X"$longsize"; then
14966                         gidformat='"lu"'
14967                 else
14968                         if $test X"$gidsize" = X"$intsize"; then
14969                                 gidformat='"u"'
14970                         else
14971                                 if $test X"$gidsize" = X"$shortsize"; then
14972                                         gidformat='"hu"'
14973                                 fi
14974                         fi
14975                 fi
14976         fi
14977         ;;
14978 esac
14979
14980 : see if getgroups exists
14981 set getgroups d_getgrps
14982 eval $inlibc
14983
14984 : see if setgroups exists
14985 set setgroups d_setgrps
14986 eval $inlibc
14987
14988
14989 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
14990 echo " "
14991 case "$d_getgrps$d_setgrps" in
14992 *define*)
14993         case "$groupstype" in
14994         '') dflt="$gidtype" ;;
14995         *)  dflt="$groupstype" ;;
14996         esac
14997         $cat <<EOM
14998 What type of pointer is the second argument to getgroups() and setgroups()?
14999 Usually this is the same as group ids, $gidtype, but not always.
15000
15001 EOM
15002         rp='What type pointer is the second argument to getgroups() and setgroups()?'
15003         . ./myread
15004         groupstype="$ans"
15005         ;;
15006 *)  groupstype="$gidtype";;
15007 esac
15008
15009 echo " "
15010 echo "Checking if your $make program sets \$(MAKE)..." >&4
15011 case "$make_set_make" in
15012 '')
15013         $sed 's/^X //' > testmake.mak << 'EOF'
15014 Xall:
15015 X       @echo 'maketemp="$(MAKE)"'
15016 EOF
15017         case "`$make -f testmake.mak 2>/dev/null`" in
15018         *maketemp=*) make_set_make='#' ;;
15019         *)      make_set_make="MAKE=$make" ;;
15020         esac
15021         $rm -f testmake.mak
15022         ;;
15023 esac
15024 case "$make_set_make" in
15025 '#') echo "Yup, it does.";;
15026 *) echo "Nope, it doesn't.";;
15027 esac
15028
15029 : see what type is used for mode_t
15030 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
15031 set mode_t modetype int stdio.h sys/types.h
15032 eval $typedef_ask
15033
15034 : see if stdarg is available
15035 echo " "
15036 if $test `./findhdr stdarg.h`; then
15037         echo "<stdarg.h> found." >&4
15038         valstd="$define"
15039 else
15040         echo "<stdarg.h> NOT found." >&4
15041         valstd="$undef"
15042 fi
15043
15044 : see if varags is available
15045 echo " "
15046 if $test `./findhdr varargs.h`; then
15047         echo "<varargs.h> found." >&4
15048 else
15049         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
15050 fi
15051
15052 : set up the varargs testing programs
15053 $cat > varargs.c <<EOP
15054 #ifdef I_STDARG
15055 #include <stdarg.h>
15056 #endif
15057 #ifdef I_VARARGS
15058 #include <varargs.h>
15059 #endif
15060
15061 #ifdef I_STDARG
15062 int f(char *p, ...)
15063 #else
15064 int f(va_alist)
15065 va_dcl
15066 #endif
15067 {
15068         va_list ap;
15069 #ifndef I_STDARG
15070         char *p;
15071 #endif
15072 #ifdef I_STDARG
15073         va_start(ap,p);
15074 #else
15075         va_start(ap);
15076         p = va_arg(ap, char *);
15077 #endif
15078         va_end(ap);
15079 }
15080 EOP
15081 $cat > varargs <<EOP
15082 $startsh
15083 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
15084         echo "true"
15085 else
15086         echo "false"
15087 fi
15088 $rm -f varargs$_o
15089 EOP
15090 chmod +x varargs
15091
15092 : now check which varargs header should be included
15093 echo " "
15094 i_varhdr=''
15095 case "$valstd" in
15096 "$define")
15097         if `./varargs I_STDARG`; then
15098                 val='stdarg.h'
15099         elif `./varargs I_VARARGS`; then
15100                 val='varargs.h'
15101         fi
15102         ;;
15103 *)
15104         if `./varargs I_VARARGS`; then
15105                 val='varargs.h'
15106         fi
15107         ;;
15108 esac
15109 case "$val" in
15110 '')
15111 echo "I could not find the definition for va_dcl... You have problems..." >&4
15112         val="$undef"; set i_stdarg; eval $setvar
15113         val="$undef"; set i_varargs; eval $setvar
15114         ;;
15115 *) 
15116         set i_varhdr
15117         eval $setvar
15118         case "$i_varhdr" in
15119         stdarg.h)
15120                 val="$define"; set i_stdarg; eval $setvar
15121                 val="$undef"; set i_varargs; eval $setvar
15122                 ;;
15123         varargs.h)
15124                 val="$undef"; set i_stdarg; eval $setvar
15125                 val="$define"; set i_varargs; eval $setvar
15126                 ;;
15127         esac
15128         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
15129 esac
15130 $rm -f varargs*
15131
15132 : see if we need va_copy
15133 echo " "
15134 case "$i_stdarg" in
15135 "$define")
15136         $cat >try.c <<EOCP
15137 #include <stdarg.h>
15138 #include <stdio.h>
15139 #$i_stdlib I_STDLIB
15140 #ifdef I_STDLIB
15141 #include <stdlib.h>
15142 #endif
15143 #include <signal.h>
15144
15145 int
15146 ivfprintf(FILE *f, const char *fmt, va_list *valp)
15147 {
15148   return vfprintf(f, fmt, *valp);
15149 }
15150  
15151 int    
15152 myvfprintf(FILE *f, const  char *fmt, va_list val)
15153 {
15154   return ivfprintf(f, fmt, &val);
15155 }
15156       
15157 int
15158 myprintf(char *fmt, ...) 
15159 {
15160   va_list val;
15161   va_start(val, fmt);
15162   return myvfprintf(stdout, fmt, val); 
15163 }         
15164
15165 int
15166 main(int ac, char **av)
15167 {
15168   signal(SIGSEGV, exit);
15169
15170   myprintf("%s%cs all right, then\n", "that", '\'');                            
15171   exit(0);      
15172 }
15173 EOCP
15174         set try
15175         if eval $compile && $run ./try 2>&1 >/dev/null; then
15176                 case "`$run ./try`" in
15177                 "that's all right, then")
15178                         okay=yes
15179                         ;;
15180                 esac
15181         fi
15182         case "$okay" in
15183         yes)    echo "It seems that you don't need va_copy()." >&4
15184                 need_va_copy="$undef"
15185                 ;;
15186         *)      echo "It seems that va_copy() or similar will be needed." >&4
15187                 need_va_copy="$define"
15188                 ;;
15189         esac
15190         $rm -f try.* core core.* *.core *.core.*
15191         ;;
15192 *)      echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
15193         ;;
15194 esac
15195
15196 : define a fucntion to check prototypes
15197 $cat > protochk <<EOSH
15198 $startsh
15199 cc="$cc"
15200 optimize="$optimize"
15201 ccflags="$ccflags"
15202 prototype="$prototype"
15203 define="$define"
15204 rm=$rm
15205 EOSH
15206
15207 $cat >> protochk <<'EOSH'
15208
15209 $rm -f try.c
15210 foo="$1"
15211 shift
15212 while test $# -ge 2; do
15213         case "$1" in
15214                 $define) echo "#include <$2>" >> try.c ;;
15215                 literal) echo "$2" >> try.c ;;
15216         esac
15217     shift 2
15218 done
15219 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
15220 cat >> try.c <<'EOCP'
15221 #ifdef CAN_PROTOTYPE
15222 #define _(args) args
15223 #else
15224 #define _(args) ()
15225 #endif
15226 EOCP
15227 echo "$foo" >> try.c
15228 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
15229 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
15230 status=$?
15231 $rm -f try.[co]
15232 exit $status
15233 EOSH
15234 chmod +x protochk
15235 $eunicefix protochk
15236
15237 : see what type is used for size_t
15238 rp="What is the type used for the length parameter for string functions?"
15239 set size_t sizetype 'unsigned int' stdio.h sys/types.h
15240 eval $typedef_ask
15241
15242 : check for type of arguments to gethostbyaddr. 
15243 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
15244         case "$d_gethbyaddr" in
15245         $define)
15246                 $cat <<EOM
15247
15248 Checking to see what type of arguments are accepted by gethostbyaddr().
15249 EOM
15250                 hdrs="$define sys/types.h
15251                         $d_socket sys/socket.h 
15252                         $i_niin netinet/in.h 
15253                         $i_netdb netdb.h
15254                         $i_unistd unistd.h"
15255                 : The first arg can 'char *' or 'void *'
15256                 : The second arg is some of integral type
15257                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
15258                         for yyy in size_t long int; do
15259                                 case "$netdb_host_type" in
15260                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
15261                                         if ./protochk "$try" $hdrs; then
15262                                                 echo "Your system accepts $xxx for the first arg."
15263                                                 echo "...and $yyy for the second arg."
15264                                                 netdb_host_type="$xxx"
15265                                                 netdb_hlen_type="$yyy"
15266                                         fi
15267                                         ;;
15268                                 esac
15269                         done
15270                 done
15271                 : In case none of those worked, prompt the user.
15272                 case "$netdb_host_type" in
15273                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
15274                         dflt='char *'
15275                         . ./myread
15276                         netdb_host_type=$ans
15277                         rp='What is the type for the 2nd argument to gethostbyaddr?'
15278                         dflt="$sizetype"
15279                         . ./myread
15280                         netdb_hlen_type=$ans
15281                         ;;
15282                 esac
15283                 ;;
15284         *)      : no gethostbyaddr, so pick harmless defaults
15285                 netdb_host_type='char *'
15286                 netdb_hlen_type="$sizetype"
15287                 ;;
15288         esac
15289         # Remove the "const" if needed. -- but then we'll have a 
15290         # prototype clash!
15291         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
15292 fi
15293
15294 : check for type of argument to gethostbyname. 
15295 if test "X$netdb_name_type" = X ; then
15296         case "$d_gethbyname" in
15297         $define)
15298                 $cat <<EOM
15299
15300 Checking to see what type of argument is accepted by gethostbyname().
15301 EOM
15302                 hdrs="$define sys/types.h
15303                         $d_socket sys/socket.h 
15304                         $i_niin netinet/in.h 
15305                         $i_netdb netdb.h
15306                         $i_unistd unistd.h"
15307                 for xxx in "const char *" "char *"; do
15308                         case "$netdb_name_type" in
15309                         '')     try="extern struct hostent *gethostbyname($xxx);"
15310                                 if ./protochk "$try" $hdrs; then
15311                                         echo "Your system accepts $xxx."
15312                                         netdb_name_type="$xxx"
15313                                 fi
15314                                 ;;
15315                         esac
15316                 done
15317                 : In case none of those worked, prompt the user.
15318                 case "$netdb_name_type" in
15319                 '')     rp='What is the type for the 1st argument to gethostbyname?'
15320                         dflt='char *'
15321                         . ./myread
15322                         netdb_name_type=$ans
15323                         ;;
15324                 esac
15325                 ;;
15326         *)      : no gethostbyname, so pick harmless default
15327                 netdb_name_type='char *'
15328                 ;;
15329         esac
15330 fi
15331
15332 : check for type of 1st argument to getnetbyaddr. 
15333 if test "X$netdb_net_type" = X ; then
15334         case "$d_getnbyaddr" in
15335         $define)
15336                 $cat <<EOM
15337
15338 Checking to see what type of 1st argument is accepted by getnetbyaddr().
15339 EOM
15340                 hdrs="$define sys/types.h
15341                         $d_socket sys/socket.h 
15342                         $i_niin netinet/in.h 
15343                         $i_netdb netdb.h
15344                         $i_unistd unistd.h"
15345                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
15346                         case "$netdb_net_type" in
15347                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
15348                                 if ./protochk "$try" $hdrs; then
15349                                         echo "Your system accepts $xxx."
15350                                         netdb_net_type="$xxx"
15351                                 fi
15352                                 ;;
15353                         esac
15354                 done
15355                 : In case none of those worked, prompt the user.
15356                 case "$netdb_net_type" in
15357                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
15358                         dflt='long'
15359                         . ./myread
15360                         netdb_net_type=$ans
15361                         ;;
15362                 esac
15363                 ;;
15364         *)      : no getnetbyaddr, so pick harmless default
15365                 netdb_net_type='long'
15366                 ;;
15367         esac
15368 fi
15369 : locate the preferred pager for this system
15370 case "$pager" in
15371 '')
15372         dflt=''
15373         case "$pg" in
15374         /*) dflt=$pg;;
15375         [a-zA-Z]:/*) dflt=$pg;;
15376         esac
15377         case "$more" in
15378         /*) dflt=$more;;
15379         [a-zA-Z]:/*) dflt=$more;;
15380         esac
15381         case "$less" in
15382         /*) dflt=$less;;
15383         [a-zA-Z]:/*) dflt=$less;;
15384         esac
15385         case "$dflt" in
15386         '') dflt=/usr/ucb/more;;
15387         esac
15388         ;;
15389 *) dflt="$pager";;
15390 esac
15391 echo " "
15392 fn=f/
15393 rp='What pager is used on your system?'
15394 . ./getfile
15395 pager="$ans"
15396
15397 : see what type pids are declared as in the kernel
15398 rp="What is the type of process ids on this system?"
15399 set pid_t pidtype int stdio.h sys/types.h
15400 eval $typedef_ask
15401
15402 : Find earliest binary compatible site_perl subdirectory perl can use.
15403 case "$bincompat5005" in
15404 "$define") xs_apiversion='5.005' ;;
15405 *) xs_apiversion=$version ;;   # The current site_perl version.
15406 esac
15407 : Find earliest pure perl site_perl subdirectory perl can use.
15408 : The versioned directories started at 5.005.
15409 pm_apiversion='5.005'
15410
15411 : see if ar generates random libraries by itself
15412 echo " "
15413 echo "Checking how to generate random libraries on your machine..." >&4
15414 echo 'int bar1() { return bar2(); }' > bar1.c
15415 echo 'int bar2() { return 2; }' > bar2.c
15416 $cat > foo.c <<'EOP'
15417 int main() { printf("%d\n", bar1()); exit(0); }
15418 EOP
15419 $cc $ccflags -c bar1.c >/dev/null 2>&1
15420 $cc $ccflags -c bar2.c >/dev/null 2>&1
15421 $cc $ccflags -c foo.c >/dev/null 2>&1
15422 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
15423 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15424         $run ./foobar >/dev/null 2>&1; then
15425         echo "$ar appears to generate random libraries itself."
15426         orderlib=false
15427         ranlib=":"
15428 elif $ar ts bar$_a >/dev/null 2>&1 &&
15429         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15430         $run ./foobar >/dev/null 2>&1; then
15431                 echo "a table of contents needs to be added with '$ar ts'."
15432                 orderlib=false
15433                 ranlib="$ar ts"
15434 else
15435         case "$ranlib" in
15436         :) ranlib='';;
15437         '')
15438                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
15439                 $test -f $ranlib || ranlib=''
15440                 ;;
15441         esac
15442         if $test -n "$ranlib"; then
15443                 echo "your system has '$ranlib'; we'll use that."
15444                 orderlib=false
15445         else
15446                 echo "your system doesn't seem to support random libraries"
15447                 echo "so we'll use lorder and tsort to order the libraries."
15448                 orderlib=true
15449                 ranlib=":"
15450         fi
15451 fi
15452 $rm -f foo* bar* 
15453
15454 : check for type of arguments to select. 
15455 case "$selecttype" in
15456 '') case "$d_select" in
15457         $define)
15458                 echo " "
15459                 $cat <<EOM
15460 Checking to see what type of arguments are accepted by select().
15461 EOM
15462                 hdrs="$define sys/types.h
15463                         $i_systime sys/time.h 
15464                         $i_sysselct sys/select.h
15465                         $d_socket sys/socket.h"
15466                 : The first arg can be int, unsigned, or size_t
15467                 : The last arg may or may not be 'const'
15468                 val=''
15469                 : void pointer has been seen but using that
15470                 : breaks the selectminbits test
15471                 for xxx in 'fd_set *' 'int *'; do
15472                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
15473                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
15474                                         case "$val" in
15475                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
15476                                                 if ./protochk "$try" $hdrs; then
15477                                                         echo "Your system accepts $xxx."
15478                                                         val="$xxx"
15479                                                 fi
15480                                                 ;;
15481                                         esac
15482                                 done
15483                         done
15484                 done
15485                 case "$val" in
15486                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
15487                         case "$d_fd_set" in
15488                                 $define) dflt="fd_set *" ;;
15489                                 *)              dflt="int *" ;;
15490                         esac
15491                         . ./myread
15492                         val=$ans
15493                         ;;
15494                 esac
15495                 selecttype="$val"
15496                 ;;
15497         *)      : no select, so pick a harmless default
15498                 selecttype='int *'
15499                 ;;
15500         esac
15501         ;;
15502 esac
15503
15504 : check for the select 'width'
15505 case "$selectminbits" in
15506 '') case "$d_select" in
15507         $define)
15508                 $cat <<EOM
15509
15510 Checking to see on how many bits at a time your select() operates...
15511 EOM
15512                 $cat >try.c <<EOCP
15513 #include <sys/types.h>
15514 #$i_time I_TIME
15515 #$i_systime I_SYS_TIME
15516 #$i_systimek I_SYS_TIME_KERNEL
15517 #ifdef I_TIME
15518 #   include <time.h>
15519 #endif
15520 #ifdef I_SYS_TIME
15521 #   ifdef I_SYS_TIME_KERNEL
15522 #       define KERNEL
15523 #   endif
15524 #   include <sys/time.h>
15525 #   ifdef I_SYS_TIME_KERNEL
15526 #       undef KERNEL
15527 #   endif
15528 #endif
15529 #$i_sysselct I_SYS_SELECT
15530 #ifdef I_SYS_SELECT
15531 #include <sys/select.h>
15532 #endif
15533 #$d_socket HAS_SOCKET
15534 #ifdef HAS_SOCKET
15535 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
15536 #endif
15537 #include <stdio.h>
15538 $selecttype b;
15539 #define S sizeof(*(b))
15540 #define MINBITS 64
15541 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
15542 #define NBITS  (NBYTES * 8)
15543 int main() {
15544     char s[NBYTES];
15545     struct timeval t;
15546     int i;
15547     FILE* fp;
15548     int fd;
15549
15550     fclose(stdin);
15551     fp = fopen("try.c", "r");
15552     if (fp == 0)
15553       exit(1);
15554     fd = fileno(fp);
15555     if (fd < 0)
15556       exit(2);
15557     b = ($selecttype)s;
15558     for (i = 0; i < NBITS; i++)
15559         FD_SET(i, b);
15560     t.tv_sec  = 0;
15561     t.tv_usec = 0;
15562     select(fd + 1, b, 0, 0, &t);
15563     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
15564     printf("%d\n", i + 1);
15565     return 0;
15566 }
15567 EOCP
15568                 set try
15569                 if eval $compile_ok; then
15570                         selectminbits=`$run ./try`
15571                         case "$selectminbits" in
15572                         '')     cat >&4 <<EOM
15573 Cannot figure out on how many bits at a time your select() operates.
15574 I'll play safe and guess it is 32 bits.
15575 EOM
15576                                 selectminbits=32
15577                                 bits="32 bits"
15578                                 ;;
15579                         1)      bits="1 bit" ;;
15580                         *)      bits="$selectminbits bits" ;;
15581                         esac
15582                         echo "Your select() operates on $bits at a time." >&4
15583                 else
15584                         rp='What is the minimum number of bits your select() operates on?'
15585                         case "$byteorder" in
15586                         1234|12345678)  dflt=32 ;;
15587                         *)              dflt=1  ;;
15588                         esac
15589                         . ./myread
15590                         val=$ans
15591                         selectminbits="$val"
15592                 fi
15593                 $rm -f try.* try
15594                 ;;
15595         *)      : no select, so pick a harmless default
15596                 selectminbits='32'
15597                 ;;
15598         esac
15599         ;;
15600 esac
15601
15602 : Trace out the files included by signal.h, then look for SIGxxx names.
15603 : Remove SIGARRAYSIZE used by HPUX.
15604 : Remove SIGSTKSIZE used by Linux.
15605 : Remove SIGSTKSZ used by Posix.
15606 : Remove SIGTYP void lines used by OS2.
15607 : Some cpps, like os390, dont give the file name anywhere
15608 if [ "X$fieldn" = X ]; then
15609         : Just make some guesses.  We check them later.
15610         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
15611 else
15612         xxx=`echo '#include <signal.h>' |
15613         $cppstdin $cppminus $cppflags 2>/dev/null |
15614         $grep '^[       ]*#.*include' | 
15615         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sed 's!\\\\\\\\!/!g' | $sort | $uniq`
15616 fi
15617 : Check this list of files to be sure we have parsed the cpp output ok.
15618 : This will also avoid potentially non-existent files, such 
15619 : as ../foo/bar.h
15620 xxxfiles=''
15621 for xx in $xxx /dev/null ; do
15622         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
15623 done
15624 : If we have found no files, at least try signal.h
15625 case "$xxxfiles" in
15626 '')     xxxfiles=`./findhdr signal.h` ;;
15627 esac
15628 xxx=`awk '
15629 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
15630         print substr($2, 4, 20)
15631 }
15632 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
15633         print substr($3, 4, 20)
15634 }' $xxxfiles`
15635 : Append some common names just in case the awk scan failed.
15636 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
15637 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
15638 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
15639 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
15640 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
15641
15642 : generate a few handy files for later
15643 $cat > signal.c <<'EOCP'
15644 #include <sys/types.h>
15645 #include <signal.h>
15646 #include <stdio.h>
15647 int main() {
15648
15649 /* Strange style to avoid deeply-nested #if/#else/#endif */
15650 #ifndef NSIG
15651 #  ifdef _NSIG
15652 #    define NSIG (_NSIG)
15653 #  endif
15654 #endif
15655
15656 #ifndef NSIG
15657 #  ifdef SIGMAX
15658 #    define NSIG (SIGMAX+1)
15659 #  endif
15660 #endif
15661
15662 #ifndef NSIG
15663 #  ifdef SIG_MAX
15664 #    define NSIG (SIG_MAX+1)
15665 #  endif
15666 #endif
15667
15668 #ifndef NSIG
15669 #  ifdef MAXSIG
15670 #    define NSIG (MAXSIG+1)
15671 #  endif
15672 #endif
15673
15674 #ifndef NSIG
15675 #  ifdef MAX_SIG
15676 #    define NSIG (MAX_SIG+1)
15677 #  endif
15678 #endif
15679
15680 #ifndef NSIG
15681 #  ifdef SIGARRAYSIZE
15682 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
15683 #  endif
15684 #endif
15685
15686 #ifndef NSIG
15687 #  ifdef _sys_nsig
15688 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
15689 #  endif
15690 #endif
15691
15692 /* Default to some arbitrary number that's big enough to get most
15693    of the common signals.
15694 */
15695 #ifndef NSIG
15696 #    define NSIG 50
15697 #endif
15698
15699 printf("NSIG %d\n", NSIG);
15700
15701 #ifndef JUST_NSIG
15702
15703 EOCP
15704
15705 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
15706 {
15707         printf "#ifdef SIG"; printf $1; printf "\n"
15708         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
15709         printf $1; printf ");\n"
15710         printf "#endif\n"
15711 }
15712 END {
15713         printf "#endif /* JUST_NSIG */\n";
15714         printf "exit(0);\n}\n";
15715 }
15716 ' >>signal.c
15717 $cat >signal.awk <<'EOP'
15718 BEGIN { ndups = 0 }
15719 $1 ~ /^NSIG$/ { nsig = $2 }
15720 ($1 !~ /^NSIG$/) && (NF == 2) {
15721     if ($2 > maxsig) { maxsig = $2 }
15722     if (sig_name[$2]) {
15723         dup_name[ndups] = $1
15724         dup_num[ndups] = $2
15725         ndups++ 
15726     }
15727     else {
15728         sig_name[$2] = $1
15729         sig_num[$2] = $2
15730     }
15731 }
15732 END { 
15733     if (nsig == 0) {
15734         nsig = maxsig + 1
15735     }
15736     printf("NSIG %d\n", nsig);
15737     for (n = 1; n < nsig; n++) {
15738         if (sig_name[n]) {
15739             printf("%s %d\n", sig_name[n], sig_num[n])
15740         }
15741         else {
15742             printf("NUM%d %d\n", n, n) 
15743         }
15744     }
15745     for (n = 0; n < ndups; n++) {
15746         printf("%s %d\n", dup_name[n], dup_num[n])
15747     }
15748 }
15749 EOP
15750 $cat >signal_cmd <<EOS
15751 $startsh
15752 if $test -s signal.lst; then
15753     echo "Using your existing signal.lst file"
15754         exit 0
15755 fi
15756 xxx="$xxx"
15757 EOS
15758 $cat >>signal_cmd <<'EOS'
15759
15760 set signal
15761 if eval $compile_ok; then
15762         $run ./signal$_exe | ($sort -n -k 2 2>/dev/null || $sort -n +1) | $uniq | $awk -f signal.awk >signal.lst
15763 else
15764         echo "(I can't seem be able to compile the whole test program)" >&4
15765         echo "(I'll try it in little pieces.)" >&4
15766         set signal -DJUST_NSIG
15767         if eval $compile_ok; then
15768                 $run ./signal$_exe > signal.nsg
15769                 $cat signal.nsg
15770         else
15771                 echo "I can't seem to figure out how many signals you have." >&4
15772                 echo "Guessing 50." >&4
15773                 echo 'NSIG 50' > signal.nsg
15774         fi
15775         : Now look at all the signal names, one at a time.
15776         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
15777                 $cat > signal.c <<EOCP
15778 #include <sys/types.h>
15779 #include <signal.h>
15780 #include <stdio.h>
15781 int main() {
15782 printf("$xx %d\n", SIG${xx});
15783 return 0;
15784 }
15785 EOCP
15786                 set signal
15787                 if eval $compile; then
15788                         echo "SIG${xx} found."
15789                         $run ./signal$_exe  >> signal.ls1
15790                 else
15791                         echo "SIG${xx} NOT found."
15792                 fi
15793         done
15794         if $test -s signal.ls1; then
15795                 $cat signal.nsg signal.ls1 |
15796                         $sort -n | $uniq | $awk -f signal.awk >signal.lst
15797         fi
15798
15799 fi
15800 if $test -s signal.lst; then
15801         :
15802 else
15803         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
15804         echo 'kill -l' >signal
15805         set X `csh -f <signal`
15806         $rm -f signal
15807         shift
15808         case $# in
15809         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
15810         esac
15811         echo $@ | $tr ' ' $trnl | \
15812             $awk '{ printf "%s %d\n", $1, ++s; }
15813                   END { printf "NSIG %d\n", ++s }' >signal.lst
15814 fi
15815 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
15816 EOS
15817 chmod a+x signal_cmd
15818 $eunicefix signal_cmd
15819
15820 : generate list of signal names
15821 echo " "
15822 case "$sig_name_init" in
15823 '') doinit=yes ;;
15824 *)  case "$sig_num_init" in
15825     ''|*,*) doinit=yes ;;
15826     esac ;;
15827 esac
15828 case "$doinit" in
15829 yes)
15830         echo "Generating a list of signal names and numbers..." >&4
15831         . ./signal_cmd
15832         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
15833         sig_name=`$awk 'BEGIN { printf "ZERO " }
15834                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
15835         sig_num=`$awk  'BEGIN { printf "0 " }
15836                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
15837         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
15838                              !/^NSIG/   { printf "\"%s\", ", $1 }
15839                              END        { printf "0\n" }' signal.lst`
15840         sig_num_init=`$awk  'BEGIN      { printf "0, " }
15841                              !/^NSIG/   { printf "%d, ", $2}
15842                              END        { printf "0\n"}' signal.lst`
15843         ;;
15844 esac
15845 echo "The following $sig_count signals are available:"
15846 echo " "
15847 echo $sig_name | $awk \
15848 'BEGIN { linelen = 0 }
15849 {
15850         for (i = 1; i <= NF; i++) {
15851                 name = "SIG" $i " "
15852                 linelen = linelen + length(name)
15853                 if (linelen > 70) {
15854                         printf "\n"
15855                         linelen = length(name)
15856                 }
15857                 printf "%s", name
15858         }
15859         printf "\n"
15860 }'
15861 sig_size=`echo $sig_name | awk '{print NF}'`
15862 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
15863
15864 echo " "
15865 case "$sizetype" in
15866 *_t) zzz="$sizetype"    ;;
15867 *)   zzz="filesize"     ;;
15868 esac
15869 echo "Checking the size of $zzz..." >&4 
15870 cat > try.c <<EOCP
15871 #include <sys/types.h>
15872 #include <stdio.h>
15873 int main() {
15874     printf("%d\n", (int)sizeof($sizetype));
15875     exit(0);
15876 }
15877 EOCP
15878 set try
15879 if eval $compile_ok; then
15880         yyy=`$run ./try`
15881         case "$yyy" in
15882         '')     sizesize=4
15883                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
15884                 ;;
15885         *)      sizesize=$yyy
15886                 echo "Your $zzz size is $sizesize bytes."
15887                 ;;
15888         esac
15889 else
15890         sizesize=4
15891         echo "(I can't compile the test program--guessing $sizesize.)" >&4
15892 fi
15893
15894
15895 : check for socklen_t
15896 echo " "
15897 echo "Checking to see if you have socklen_t..." >&4
15898 $cat >try.c <<EOCP
15899 #include <sys/types.h>
15900 #$d_socket HAS_SOCKET
15901 #ifdef HAS_SOCKET
15902 #include <sys/socket.h>
15903 #endif
15904 int main() { socklen_t x = 16; }
15905 EOCP
15906 set try
15907 if eval $compile; then
15908         val="$define"
15909         echo "You have socklen_t."
15910 else
15911         val="$undef"
15912         echo "You do not have socklen_t."
15913         case "$sizetype" in
15914         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
15915         esac
15916 fi
15917 $rm -f try try.*
15918 set d_socklen_t
15919 eval $setvar
15920
15921 : see if this is a socks.h system
15922 set socks.h i_socks
15923 eval $inhdr
15924
15925 : check for type of the size argument to socket calls
15926 case "$d_socket" in
15927 "$define")
15928         $cat <<EOM
15929
15930 Checking to see what type is the last argument of accept().
15931 EOM
15932         yyy=''
15933         case "$d_socklen_t" in
15934         "$define") yyy="$yyy socklen_t"
15935         esac
15936         yyy="$yyy $sizetype int long unsigned"
15937         for xxx in $yyy; do
15938                 case "$socksizetype" in
15939                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
15940                         case "$usesocks" in
15941                         "$define")
15942                                 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
15943                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15944                                         socksizetype="$xxx"
15945                                 fi
15946                                 ;;
15947                         *)      if ./protochk "$try"  $i_systypes sys/types.h $d_socket sys/socket.h; then
15948                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15949                                         socksizetype="$xxx"
15950                                 fi
15951                                 ;;
15952                         esac
15953                         ;;
15954                 esac
15955         done
15956 : In case none of those worked, prompt the user.
15957         case "$socksizetype" in
15958         '')     rp='What is the type for socket address structure sizes?'
15959                 dflt='int'
15960                 . ./myread
15961                 socksizetype=$ans
15962                 ;;
15963         esac
15964         ;;
15965 *)      : no sockets, so pick relatively harmless default
15966         socksizetype='int'
15967         ;;
15968 esac
15969
15970 : see what type is used for signed size_t
15971 set ssize_t ssizetype int stdio.h sys/types.h
15972 eval $typedef
15973 dflt="$ssizetype"
15974 $cat > try.c <<EOM
15975 #include <stdio.h>
15976 #include <sys/types.h>
15977 #define Size_t $sizetype
15978 #define SSize_t $dflt
15979 int main()
15980 {
15981         if (sizeof(Size_t) == sizeof(SSize_t))
15982                 printf("$dflt\n");
15983         else if (sizeof(Size_t) == sizeof(int))
15984                 printf("int\n");
15985         else 
15986                 printf("long\n");
15987         exit(0);
15988 }
15989 EOM
15990 echo " "
15991 set try
15992 if eval $compile_ok && $run ./try > /dev/null; then
15993         ssizetype=`$run ./try`
15994         echo "I'll be using $ssizetype for functions returning a byte count." >&4
15995 else
15996         $cat >&4 <<EOM
15997 Help! I can't compile and run the ssize_t test program: please enlighten me!
15998 (This is probably a misconfiguration in your system or libraries, and
15999 you really ought to fix it.  Still, I'll try anyway.)
16000
16001 I need a type that is the same size as $sizetype, but is guaranteed to
16002 be signed.  Common values are ssize_t, int and long.
16003
16004 EOM
16005         rp="What signed type is the same size as $sizetype?"
16006         . ./myread
16007         ssizetype="$ans"
16008 fi
16009 $rm -f try try.*
16010
16011 : see what type of char stdio uses.
16012 echo " "
16013 echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
16014 if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
16015         echo "Your stdio uses unsigned chars." >&4
16016         stdchar="unsigned char"
16017 else
16018         echo "Your stdio uses signed chars." >&4
16019         stdchar="char"
16020 fi
16021 $rm -f stdioh
16022
16023
16024
16025 : see if time exists
16026 echo " "
16027 if test "X$d_time" = X -o X"$timetype" = X; then
16028     if set time val -f d_time; eval $csym; $val; then
16029                 echo 'time() found.' >&4
16030                 val="$define"
16031                 rp="What is the type returned by time() on this system?"
16032                 set time_t timetype long stdio.h sys/types.h
16033                 eval $typedef_ask
16034     else
16035                 echo 'time() not found, hope that will do.' >&4
16036                 val="$undef"
16037                 timetype='int';
16038     fi
16039     set d_time
16040     eval $setvar
16041 fi
16042
16043 : see what type uids are declared as in the kernel
16044 echo " "
16045 echo "Looking for the type for user ids returned by getuid()."
16046 set uid_t uidtype xxx stdio.h sys/types.h
16047 eval $typedef
16048 case "$uidtype" in
16049 xxx)
16050         xxx=`./findhdr sys/user.h`
16051         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
16052         case $1 in
16053         unsigned) dflt="$1 $2" ;;
16054         *) dflt="$1" ;;
16055         esac
16056         ;;
16057 *) dflt="$uidtype";;
16058 esac
16059 case "$uidtype" in
16060 uid_t)  echo "uid_t found." ;;
16061 *)      rp="What is the type for user ids returned by getuid()?"
16062         . ./myread
16063         uidtype="$ans"
16064         ;;
16065 esac
16066
16067 echo " "
16068 case "$uidtype" in
16069 *_t) zzz="$uidtype"     ;;
16070 *)   zzz="uid"          ;;
16071 esac
16072 echo "Checking the size of $zzz..." >&4 
16073 cat > try.c <<EOCP
16074 #include <sys/types.h>
16075 #include <stdio.h>
16076 int main() {
16077     printf("%d\n", (int)sizeof($uidtype));
16078     exit(0);
16079 }
16080 EOCP
16081 set try
16082 if eval $compile_ok; then
16083         yyy=`$run ./try`
16084         case "$yyy" in
16085         '')     uidsize=4
16086                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
16087                 ;;
16088         *)      uidsize=$yyy
16089                 echo "Your $zzz is $uidsize bytes long."
16090                 ;;
16091         esac
16092 else
16093         uidsize=4
16094         echo "(I can't compile the test program--guessing $uidsize.)" >&4
16095 fi
16096
16097 echo " "
16098 case "$uidtype" in
16099 *_t) zzz="$uidtype"     ;;
16100 *)   zzz="uid"          ;;
16101 esac
16102 echo "Checking the sign of $zzz..." >&4
16103 cat > try.c <<EOCP
16104 #include <sys/types.h>
16105 #include <stdio.h>
16106 int main() {
16107         $uidtype foo = -1;
16108         if (foo < 0)
16109                 printf("-1\n");
16110         else
16111                 printf("1\n");
16112 }
16113 EOCP
16114 set try
16115 if eval $compile; then
16116         yyy=`$run ./try`
16117         case "$yyy" in
16118         '')     uidsign=1
16119                 echo "(I can't execute the test program--guessing unsigned.)" >&4
16120                 ;;
16121         *)      uidsign=$yyy
16122                 case "$uidsign" in
16123                  1) echo "Your $zzz is unsigned." ;;
16124                 -1) echo "Your $zzz is signed."   ;;
16125                 esac
16126                 ;;
16127         esac
16128 else
16129         uidsign=1
16130         echo "(I can't compile the test program--guessing unsigned.)" >&4
16131 fi
16132
16133
16134
16135 echo " "
16136 $echo "Checking the format string to be used for uids..." >&4
16137
16138 case "$uidsign" in
16139 -1)     if $test X"$uidsize" = X"$ivsize"; then
16140                 uidformat="$ivdformat"
16141         else
16142                 if $test X"$uidsize" = X"$longsize"; then
16143                         uidformat='"ld"'
16144                 else
16145                         if $test X"$uidsize" = X"$intsize"; then
16146                                 uidformat='"d"'
16147                         else
16148                                 if $test X"$uidsize" = X"$shortsize"; then
16149                                         uidformat='"hd"'
16150                                 fi
16151                         fi
16152                 fi
16153         fi
16154         ;;
16155 *)      if $test X"$uidsize" = X"$uvsize"; then
16156                 uidformat="$uvuformat"
16157         else
16158                 if $test X"$uidsize" = X"$longsize"; then
16159                         uidformat='"lu"'
16160                 else
16161                         if $test X"$uidsize" = X"$intsize"; then
16162                                 uidformat='"u"'
16163                         else
16164                                 if $test X"$uidsize" = X"$shortsize"; then
16165                                         uidformat='"hu"'
16166                                 fi
16167                         fi
16168                 fi
16169         fi
16170         ;;
16171 esac
16172
16173 : determine compiler compiler
16174 case "$yacc" in
16175 '')
16176         dflt=yacc;;
16177 *)
16178         dflt="$yacc";;
16179 esac
16180 echo " "
16181 comp='yacc'
16182 if $test -f "$byacc$_exe"; then
16183         dflt="$byacc"
16184         comp="byacc or $comp"
16185 fi
16186 if $test -f "$bison$_exe"; then
16187         comp="$comp or bison -y"
16188 fi
16189 rp="Which compiler compiler ($comp) shall I use?"
16190 . ./myread
16191 yacc="$ans"
16192 case "$yacc" in
16193 *bis*)
16194         case "$yacc" in
16195         *-y*) ;;
16196         *)
16197                 yacc="$yacc -y"
16198                 echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
16199                 ;;
16200         esac
16201         ;;
16202 esac
16203
16204 : see if this is a fp.h system
16205 set fp.h i_fp
16206 eval $inhdr
16207
16208 : see if this is a fp_class.h system
16209 set fp_class.h i_fp_class
16210 eval $inhdr
16211
16212 : see if this is a ieeefp.h system
16213 case "$i_ieeefp" in
16214 '' ) set ieeefp.h i_ieeefp
16215      eval $inhdr
16216      ;;
16217 esac
16218
16219 : see if this is a libutil.h system
16220 set libutil.h i_libutil
16221 eval $inhdr
16222
16223 : see if locale.h is available
16224 set locale.h i_locale
16225 eval $inhdr
16226
16227 : see if mach cthreads are available
16228 if test "X$usethreads" = "X$define"; then
16229         set mach/cthreads.h i_machcthr
16230         eval $inhdr
16231 else
16232         i_machcthr="$undef"
16233 fi
16234
16235
16236
16237 : see if this is a math.h system
16238 set math.h i_math
16239 eval $inhdr
16240
16241 : see if this is a mntent.h system
16242 set mntent.h i_mntent
16243 eval $inhdr
16244
16245 : see if ndbm.h is available
16246 set ndbm.h t_ndbm
16247 eval $inhdr
16248
16249 case "$t_ndbm" in
16250 $undef)
16251     # Some Linux distributions such as RedHat 7.1 put the
16252     # ndbm.h header in /usr/include/gdbm/ndbm.h.
16253     if $test -f /usr/include/gdbm/ndbm.h; then
16254         echo '<gdbm/ndbm.h> found.'
16255         ccflags="$ccflags -I/usr/include/gdbm"
16256         cppflags="$cppflags -I/usr/include/gdbm"
16257         t_ndbm=$define
16258     fi
16259     ;;
16260 esac
16261
16262 case "$t_ndbm" in
16263 $define)
16264         : see if dbm_open exists
16265         set dbm_open d_dbm_open
16266         eval $inlibc
16267         case "$d_dbm_open" in
16268         $undef)
16269                 t_ndbm="$undef"
16270                 echo "We won't be including <ndbm.h>"
16271                 ;;
16272         esac
16273         ;;
16274 esac
16275 val="$t_ndbm"
16276 set i_ndbm
16277 eval $setvar
16278
16279 : see if net/errno.h is available
16280 val=''
16281 set net/errno.h val
16282 eval $inhdr
16283
16284 : Unfortunately, it causes problems on some systems.  Arrgh.
16285 case "$val" in
16286 $define)
16287         cat > try.c <<'EOM'
16288 #include <stdio.h>
16289 #include <errno.h>
16290 #include <net/errno.h>
16291 int func()
16292 {
16293         return ENOTSOCK;
16294 }
16295 EOM
16296         if $cc $ccflags -c try.c >/dev/null 2>&1; then
16297                 echo "We'll be including <net/errno.h>." >&4
16298         else
16299                 echo "We won't be including <net/errno.h>." >&4
16300                 val="$undef"
16301         fi
16302         $rm -f try.* try
16303         ;;
16304 esac
16305 set i_neterrno
16306 eval $setvar
16307
16308 : see if netinet/tcp.h is available
16309 set netinet/tcp.h i_netinettcp
16310 eval $inhdr
16311
16312 : see if this is a poll.h system
16313 set poll.h i_poll
16314 eval $inhdr
16315
16316 : see if this is a prot.h system
16317 set prot.h i_prot
16318 eval $inhdr
16319
16320 echo " "
16321 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
16322 $cat <<'EOSH' > Cppsym.know
16323 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
16324 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
16325 alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
16326 ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
16327 BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
16328 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
16329 bull c cadmus clipper CMU COFF COMPILER_VERSION
16330 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
16331 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
16332 Dynix DynixPTX ELF encore EPI EXTENSIONS FAVOR_BSD
16333 FILE_OFFSET_BITS FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
16334 GLIBC GLIBC_MINOR
16335 GNU_SOURCE GNUC GNUC_MINOR GNU_LIBRARY GO32 gould GOULD_PN
16336 H3050R H3050RX hbullx20 hcx host_mips
16337 hp200 hp300 hp700 HP700 hp800 hp9000
16338 hp9000s200 hp9000s300 hp9000s400 hp9000s500
16339 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
16340 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
16341 IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
16342 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
16343 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
16344 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
16345 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
16346 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
16347 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
16348 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
16349 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
16350 MATH_HAS_NO_SIDE_EFFECTS
16351 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
16352 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
16353 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
16354 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
16355 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
16356 NetBSD news1500 news1700 news1800 news1900 news3700
16357 news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
16358 ns32016 ns32332 ns32k nsc32000
16359 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
16360 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
16361 pc532 pdp11 PGC PIC plexus PORTAR posix
16362 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
16363 POSIX_C_SOURCE POSIX_SOURCE POWER
16364 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
16365 riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
16366 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
16367 sony sony_news sonyrisc sparc sparclite spectrum
16368 stardent stdc STDC_EXT stratos sun sun3 sun386
16369 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
16370 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
16371 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
16372 sysV68 sysV88 Tek4132 Tek4300 titan
16373 TM3200 TM5400 TM5600
16374 tower tower32 tower32_200 tower32_600 tower32_700
16375 tower32_800 tower32_850 tss
16376 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
16377 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
16378 unix UNIX95 UNIX99 unixpc unos
16379 USE_BSD USE_FILE_OFFSET64 USE_GNU USE_ISOC9X USE_LARGEFILE USE_LARGEFILE64
16380 USE_MISC USE_POSIX USE_POSIX199309 USE_POSIX199506 USE_POSIX2
16381 USE_REENTRANT USE_SVID USE_UNIX98 USE_XOPEN USE_XOPEN_EXTENDED
16382 USGr4 USGr4_2
16383 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
16384 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
16385 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
16386 z8000
16387 EOSH
16388 # Maybe put other stuff here too.
16389 cat <<EOSH >>Cppsym.know
16390 $osname
16391 EOSH
16392 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
16393 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
16394 $cat Cppsym.know > Cppsym.c
16395 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
16396 $rm -f Cppsym.a Cppsym.b Cppsym.c
16397 cat <<EOSH > Cppsym
16398 $startsh
16399 if $test \$# -gt 0; then
16400     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
16401     if $test -s Cppsym.got; then
16402         $rm -f Cppsym.got
16403         exit 0
16404     fi
16405     $rm -f Cppsym.got
16406     exit 1
16407 else
16408     $tr " " "$trnl" | ./Cppsym.try
16409     exit 0
16410 fi
16411 EOSH
16412 chmod +x Cppsym
16413 $eunicefix Cppsym
16414 cat <<EOSH > Cppsym.try
16415 $startsh
16416 cat <<'EOCP' > try.c
16417 #include <stdio.h>
16418 int main() {
16419 EOCP
16420 $awk \\
16421 EOSH
16422 cat <<'EOSH' >> Cppsym.try
16423 'length($1) > 0 {
16424     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
16425     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
16426     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
16427     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
16428 }'       >> try.c
16429 echo 'return 0;}' >> try.c
16430 EOSH
16431 cat <<EOSH >> Cppsym.try
16432 ccflags="$ccflags"
16433 case "$osname-$gccversion" in
16434 irix-) ccflags="\$ccflags -woff 1178" ;;
16435 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
16436 esac
16437 $cc -o try $optimize \$ccflags $ldflags try.c $libs && $run ./try
16438 EOSH
16439 chmod +x Cppsym.try
16440 $eunicefix Cppsym.try
16441 ./Cppsym < Cppsym.know > Cppsym.true
16442 : now check the C compiler for additional symbols
16443 postprocess_cc_v=''
16444 case "$osname" in
16445 aix) postprocess_cc_v="|$tr , ' '" ;;
16446 esac
16447 $cat >ccsym <<EOS
16448 $startsh
16449 $cat >tmp.c <<EOF
16450 extern int foo;
16451 EOF
16452 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
16453 do
16454         case "\$i" in
16455         -D*) echo "\$i" | $sed 's/^-D//';;
16456         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
16457         esac
16458 done
16459 $rm -f try.c
16460 EOS
16461 postprocess_cc_v=''
16462 chmod +x ccsym
16463 $eunicefix ccsym
16464 ./ccsym > ccsym1.raw
16465 if $test -s ccsym1.raw; then
16466        $sort ccsym1.raw | $uniq >ccsym.raw
16467 else
16468        mv ccsym1.raw ccsym.raw
16469 fi
16470
16471 $awk '/\=/ { print $0; next }
16472         { print $0"=1" }' ccsym.raw >ccsym.list
16473 $awk '/\=/ { print $0; next }
16474         { print $0"=1" }' Cppsym.true >ccsym.true
16475 $comm -13 ccsym.true ccsym.list >ccsym.own
16476 $comm -12 ccsym.true ccsym.list >ccsym.com
16477 $comm -23 ccsym.true ccsym.list >ccsym.cpp
16478 also=''
16479 if $test -z ccsym.raw; then
16480         echo "Your C compiler doesn't seem to define any symbols!" >&4
16481         echo " "
16482         echo "However, your C preprocessor defines the following symbols:"
16483         $cat Cppsym.true
16484         ccsymbols=''
16485         cppsymbols=`$cat Cppsym.true`
16486         cppsymbols=`echo $cppsymbols`
16487         cppccsymbols="$cppsymbols"
16488 else
16489         if $test -s ccsym.com; then
16490                 echo "Your C compiler and pre-processor define these symbols:"
16491                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
16492                 also='also '
16493                 symbols='ones'
16494                 cppccsymbols=`$cat ccsym.com`
16495                 cppccsymbols=`echo $cppccsymbols`
16496                 $test "$silent" || sleep 1
16497         fi
16498         if $test -s ccsym.cpp; then
16499                 $test "$also" && echo " "
16500                 echo "Your C pre-processor ${also}defines the following symbols:"
16501                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
16502                 also='further '
16503                 cppsymbols=`$cat ccsym.cpp`
16504                 cppsymbols=`echo $cppsymbols`
16505                 $test "$silent" || sleep 1
16506         fi
16507         if $test -s ccsym.own; then
16508                 $test "$also" && echo " "
16509                 echo "Your C compiler ${also}defines the following cpp symbols:"
16510                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
16511                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
16512                 ccsymbols=`$cat ccsym.own`
16513                 ccsymbols=`echo $ccsymbols`
16514                 $test "$silent" || sleep 1
16515         fi
16516 fi
16517
16518 : see if this is a termio system
16519 val="$undef"
16520 val2="$undef"
16521 val3="$undef"
16522 if $test `./findhdr termios.h`; then
16523         set tcsetattr i_termios
16524         eval $inlibc
16525         val3="$i_termios"
16526 fi
16527 echo " "
16528 case "$val3" in
16529 "$define") echo "You have POSIX termios.h... good!" >&4;;
16530 *) if ./Cppsym pyr; then
16531                 case "`/bin/universe`" in
16532                 ucb) if $test `./findhdr sgtty.h`; then
16533                                 val2="$define"
16534                                 echo "<sgtty.h> found." >&4
16535                         else
16536                                 echo "System is pyramid with BSD universe."
16537                                 echo "<sgtty.h> not found--you could have problems." >&4
16538                         fi;;
16539                 *) if $test `./findhdr termio.h`; then
16540                                 val="$define"
16541                                 echo "<termio.h> found." >&4
16542                         else
16543                                 echo "System is pyramid with USG universe."
16544                                 echo "<termio.h> not found--you could have problems." >&4
16545                         fi;;
16546                 esac
16547         elif ./usg; then
16548                 if $test `./findhdr termio.h`; then
16549                         echo "<termio.h> found." >&4
16550                         val="$define"
16551                 elif $test `./findhdr sgtty.h`; then
16552                         echo "<sgtty.h> found." >&4
16553                         val2="$define"
16554                 else
16555 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
16556                 fi
16557         else
16558                 if $test `./findhdr sgtty.h`; then
16559                         echo "<sgtty.h> found." >&4
16560                         val2="$define"
16561                 elif $test `./findhdr termio.h`; then
16562                         echo "<termio.h> found." >&4
16563                         val="$define"
16564                 else
16565 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
16566                 fi
16567         fi;;
16568 esac
16569 set i_termio; eval $setvar
16570 val=$val2; set i_sgtty; eval $setvar
16571 val=$val3; set i_termios; eval $setvar
16572
16573 : see if this is a shadow.h system
16574 set shadow.h i_shadow
16575 eval $inhdr
16576
16577 : see if stddef is available
16578 set stddef.h i_stddef
16579 eval $inhdr
16580
16581 : see if this is a sunmath.h system
16582 set sunmath.h i_sunmath
16583 eval $inhdr
16584
16585 : see if sys/access.h is available
16586 set sys/access.h i_sysaccess
16587 eval $inhdr
16588
16589 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
16590 set sys/filio.h i_sysfilio
16591 eval $inhdr
16592 echo " "
16593 if $test `./findhdr sys/ioctl.h`; then
16594         val="$define"
16595         echo '<sys/ioctl.h> found.' >&4
16596 else
16597         val="$undef"
16598         if $test $i_sysfilio = "$define"; then
16599             echo '<sys/ioctl.h> NOT found.' >&4
16600         else
16601                 $test $i_sgtty = "$define" && xxx="sgtty.h"
16602                 $test $i_termio = "$define" && xxx="termio.h"
16603                 $test $i_termios = "$define" && xxx="termios.h"
16604 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
16605         fi
16606 fi
16607 set i_sysioctl
16608 eval $setvar
16609
16610 : see if socket ioctl defs are in sys/sockio.h
16611 echo " "
16612 xxx=`./findhdr sys/sockio.h`
16613 if $test "$xxx"; then
16614         if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
16615                 val="$define"
16616                 echo "You have socket ioctls defined in <sys/sockio.h>." >&4
16617         else
16618                 val="$undef"
16619                 echo "No socket ioctls found in <sys/sockio.h>." >&4
16620         fi
16621 else
16622         val="$undef"
16623         $cat <<EOM
16624 <sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
16625 EOM
16626 fi
16627 set i_syssockio
16628 eval $setvar
16629
16630
16631 : see if this is a syslog.h system
16632 set syslog.h i_syslog
16633 eval $inhdr
16634
16635
16636 : see if this is a sys/mode.h system
16637 set sys/mode.h i_sysmode
16638 eval $inhdr
16639
16640 : see if sys/resource.h has to be included
16641 set sys/resource.h i_sysresrc
16642 eval $inhdr
16643
16644 : see if sys/security.h is available
16645 set sys/security.h i_syssecrt
16646 eval $inhdr
16647
16648 : see if this is a sys/statvfs.h system
16649 set sys/statvfs.h i_sysstatvfs
16650 eval $inhdr
16651
16652 : see if this is a sys/un.h system
16653 set sys/un.h i_sysun
16654 eval $inhdr
16655
16656
16657 : see if this is a sys/utsname.h system
16658 set sys/utsname.h i_sysutsname
16659 eval $inhdr
16660
16661 : see if this is a syswait system
16662 set sys/wait.h i_syswait
16663 eval $inhdr
16664
16665 : see if this is a ustat.h system
16666 set ustat.h i_ustat
16667 eval $inhdr
16668
16669 : see if this is an utime system
16670 set utime.h i_utime
16671 eval $inhdr
16672
16673 : see if this is a values.h system
16674 set values.h i_values
16675 eval $inhdr
16676
16677 : see if this is a vfork system
16678 case "$d_vfork" in
16679 "$define")
16680         set vfork.h i_vfork
16681         eval $inhdr
16682         ;;
16683 *)
16684         i_vfork="$undef"
16685         ;;
16686 esac
16687
16688 : see if gdbm.h is available
16689 set gdbm.h t_gdbm
16690 eval $inhdr
16691 case "$t_gdbm" in
16692 $define)
16693         : see if gdbm_open exists
16694         set gdbm_open d_gdbm_open
16695         eval $inlibc
16696         case "$d_gdbm_open" in
16697         $undef)
16698                 t_gdbm="$undef"
16699                 echo "We won't be including <gdbm.h>"
16700                 ;;
16701         esac
16702         ;;
16703 esac
16704 val="$t_gdbm"
16705 set i_gdbm
16706 eval $setvar
16707
16708 echo " "
16709 echo "Looking for extensions..." >&4
16710 : If we are using the old config.sh, known_extensions may contain
16711 : old or inaccurate or duplicate values.
16712 known_extensions=''
16713 nonxs_extensions=''
16714 : We do not use find because it might not be available.
16715 : We do not just use MANIFEST because the user may have dropped
16716 : some additional extensions into the source tree and expect them
16717 : to be built.
16718
16719 : Function to recursively find available extensions, ignoring DynaLoader
16720 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
16721 find_extensions='
16722     for xxx in *; do
16723        case "$xxx" in
16724            DynaLoader|dynaload) ;;
16725            *)
16726            if $test -f $xxx/$xxx.xs; then
16727                known_extensions="$known_extensions $1$xxx";
16728            elif $test -f $xxx/Makefile.PL; then
16729                nonxs_extensions="$nonxs_extensions $1$xxx";
16730            else
16731                if $test -d $xxx -a $# -lt 10; then
16732                    set $1$xxx/ $*;
16733                    cd "$xxx";
16734                    eval $find_extensions;
16735                    cd ..;
16736                    shift;
16737                fi;
16738            fi
16739            ;;
16740        esac;
16741     done'
16742 tdir=`pwd`
16743 cd "$rsrc/ext"
16744 set X
16745 shift
16746 eval $find_extensions
16747 # Special case:  Add in threads/shared since it is not picked up by the
16748 # recursive find above (and adding in general recursive finding breaks
16749 # SDBM_File/sdbm).  A.D.  10/25/2001.
16750 # Encode::XX need explicit mentions for the same reason.
16751 # --jhi 2002-03-04
16752 known_extensions="$known_extensions threads/shared Encode/CN Encode/JP Encode/KR Encode/TW"
16753 set X $nonxs_extensions
16754 shift
16755 nonxs_extensions="$*"
16756 set X $known_extensions
16757 shift
16758 known_extensions="$*"
16759 cd "$tdir"
16760
16761 : Now see which are supported on this system.
16762 avail_ext=''
16763 for xxx in $known_extensions ; do
16764         case "$xxx" in
16765         DB_File|db_file)
16766                 case "$i_db" in
16767                 $define) avail_ext="$avail_ext $xxx" ;;
16768                 esac
16769                 ;;
16770         GDBM_File|gdbm_fil)
16771                 case "$i_gdbm" in 
16772                 $define) avail_ext="$avail_ext $xxx" ;;
16773                 esac
16774                 ;;
16775         I18N/Langinfo|i18n_lan)
16776                 case "$i_langinfo$d_nl_langinfo" in 
16777                 $define$define) avail_ext="$avail_ext $xxx" ;;
16778                 esac
16779                 ;;
16780         NDBM_File|ndbm_fil)
16781                 case "$i_ndbm" in
16782                 $define)
16783                     case "$osname-$use64bitint" in
16784                     cygwin-*|hpux-define)
16785                         case "$libs" in
16786                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
16787                         esac
16788                         ;;
16789                     *) avail_ext="$avail_ext $xxx" ;;
16790                     esac
16791                     ;;
16792                 esac
16793                 ;;
16794         ODBM_File|odbm_fil) 
16795                 case "${i_dbm}${i_rpcsvcdbm}" in
16796                 *"${define}"*)
16797                     case "$osname-$use64bitint" in
16798                     cygwin-*|hpux-define)
16799                         case "$libs" in
16800                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
16801                         esac
16802                         ;;
16803                     *) avail_ext="$avail_ext $xxx" ;;
16804                     esac
16805                     ;;
16806                 esac
16807                 ;;
16808         POSIX|posix)
16809                 case "$useposix" in
16810                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16811                 esac
16812                 ;;
16813         Opcode|opcode)
16814                 case "$useopcode" in
16815                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16816                 esac
16817                 ;;
16818         Socket|socket)
16819                 case "$d_socket" in 
16820                 true|$define|y)
16821                     case "$osname" in
16822                     beos) ;; # not unless BONE
16823                     *) avail_ext="$avail_ext $xxx" ;;
16824                     esac
16825                     ;;
16826                 esac
16827                 ;;
16828         Sys/Syslog|sys/syslog)
16829                 : XXX syslog requires socket
16830                 case "$d_socket" in 
16831                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16832                 esac
16833                 ;;
16834         Thread|thread)
16835                 case "$usethreads" in
16836                 true|$define|y)
16837                         case "$useithreads" in
16838                         $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;;
16839                         esac
16840                 esac
16841                 ;;
16842         threads|threads/shared)
16843                 case "$usethreads" in
16844                 true|$define|y)
16845                         case "$useithreads" in
16846                         $define|true|[yY]*) avail_ext="$avail_ext $xxx" ;;
16847                         esac
16848                 esac
16849                 ;;
16850         IPC/SysV|ipc/sysv)
16851                 : XXX Do we need a useipcsysv variable here
16852                 case "${d_msg}${d_sem}${d_shm}" in 
16853                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
16854                 esac
16855                 ;;
16856         *)      avail_ext="$avail_ext $xxx"
16857                 ;;
16858         esac
16859 done
16860
16861 set X $avail_ext
16862 shift
16863 avail_ext="$*"
16864
16865 : Now see which nonxs extensions are supported on this system.
16866 : For now assume all are.
16867 nonxs_ext=''
16868 for xxx in $nonxs_extensions ; do
16869         case "$xxx" in
16870         *)      nonxs_ext="$nonxs_ext $xxx"
16871                 ;;
16872         esac
16873 done
16874
16875 set X $nonxs_ext
16876 shift
16877 nonxs_ext="$*"
16878
16879 case $usedl in
16880 $define)
16881         $cat <<EOM
16882 A number of extensions are supplied with $package.  You may choose to
16883 compile these extensions for dynamic loading (the default), compile
16884 them into the $package executable (static loading), or not include
16885 them at all.  Answer "none" to include no extensions.
16886 Note that DynaLoader is always built and need not be mentioned here.
16887
16888 EOM
16889         case "$dynamic_ext" in
16890         '') dflt="$avail_ext" ;;
16891         *)      dflt="$dynamic_ext"
16892                 # Perhaps we are reusing an old out-of-date config.sh.
16893                 case "$hint" in
16894                 previous)
16895                         if test X"$dynamic_ext" != X"$avail_ext"; then
16896                                 $cat <<EOM
16897 NOTICE:  Your previous config.sh list may be incorrect. 
16898 The extensions now available to you are 
16899         ${avail_ext}
16900 but the default list from your previous config.sh is
16901         ${dynamic_ext} 
16902
16903 EOM
16904                         fi
16905                         ;;
16906                 esac
16907                 ;;
16908         esac
16909         case "$dflt" in
16910         '')     dflt=none;;
16911         esac
16912         rp="What extensions do you wish to load dynamically?"
16913         . ./myread
16914         case "$ans" in
16915         none) dynamic_ext=' ' ;;
16916         *) dynamic_ext="$ans" ;;
16917         esac
16918
16919         case "$static_ext" in
16920         '')
16921                 : Exclude those already listed in dynamic linking
16922                 dflt=''
16923                 for xxx in $avail_ext; do
16924                         case " $dynamic_ext " in
16925                         *" $xxx "*) ;;
16926                         *) dflt="$dflt $xxx" ;;
16927                         esac
16928                 done
16929                 set X $dflt
16930                 shift
16931                 dflt="$*"
16932                 ;;
16933         *)  dflt="$static_ext" 
16934                 ;;
16935         esac
16936
16937         case "$dflt" in
16938         '')     dflt=none;;
16939         esac
16940         rp="What extensions do you wish to load statically?"
16941         . ./myread
16942         case "$ans" in
16943         none) static_ext=' ' ;;
16944         *) static_ext="$ans" ;;
16945         esac
16946         ;;
16947 *)
16948         $cat <<EOM
16949 A number of extensions are supplied with $package.  Answer "none" 
16950 to include no extensions. 
16951 Note that DynaLoader is always built and need not be mentioned here.
16952
16953 EOM
16954         case "$static_ext" in
16955         '') dflt="$avail_ext" ;;
16956         *)      dflt="$static_ext"
16957                 # Perhaps we are reusing an old out-of-date config.sh.
16958                 case "$hint" in
16959                 previous)
16960                         if test X"$static_ext" != X"$avail_ext"; then
16961                                 $cat <<EOM
16962 NOTICE:  Your previous config.sh list may be incorrect. 
16963 The extensions now available to you are 
16964         ${avail_ext}
16965 but the default list from your previous config.sh is
16966         ${static_ext} 
16967
16968 EOM
16969                         fi
16970                         ;;
16971                 esac
16972                 ;;
16973         esac
16974         : Exclude those that are not xs extensions
16975         case "$dflt" in
16976         '')     dflt=none;;
16977         esac
16978         rp="What extensions do you wish to include?"
16979         . ./myread
16980         case "$ans" in
16981         none) static_ext=' ' ;;
16982         *) static_ext="$ans" ;;
16983         esac
16984         ;;
16985 esac
16986
16987 set X $dynamic_ext $static_ext $nonxs_ext
16988 shift
16989 extensions="$*"
16990
16991 : Remove libraries needed only for extensions
16992 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
16993 : The exception is SunOS 4.x, which needs them.
16994 case "${osname}X${osvers}" in
16995 sunos*X4*)
16996     perllibs="$libs"
16997     ;;
16998 *) case "$usedl" in
16999     $define|true|[yY]*)
17000             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'` 
17001             shift
17002             perllibs="$*"
17003             ;;
17004     *)  perllibs="$libs"
17005             ;;
17006     esac
17007     ;;
17008 esac
17009
17010 : Remove build directory name from cppstdin so it can be used from
17011 : either the present location or the final installed location.
17012 echo " "
17013 : Get out of the UU directory to get correct path name.
17014 cd ..
17015 case "$cppstdin" in
17016 `pwd`/cppstdin)
17017         echo "Stripping down cppstdin path name"
17018         cppstdin=cppstdin
17019         ;;
17020 esac
17021 cd UU
17022
17023 : end of configuration questions
17024 echo " "
17025 echo "End of configuration questions."
17026 echo " "
17027
17028 : back to where it started
17029 if test -d ../UU; then
17030         cd ..
17031 fi
17032
17033 : configuration may be patched via a 'config.arch' file
17034 if $test -f config.arch; then
17035         echo "I see a config.arch file, loading it."
17036         . ./config.arch
17037 fi
17038
17039 : configuration may be patched via a 'config.over' file
17040 if $test -f config.over; then
17041         echo " "
17042         dflt=y
17043         rp='I see a config.over file.  Do you wish to load it?'
17044         . UU/myread
17045         case "$ans" in
17046         n*) echo "OK, I'll ignore it.";;
17047         *)      . ./config.over
17048                 echo "Configuration override changes have been loaded."
17049                 ;;
17050         esac
17051 fi
17052
17053 : in case they want portability, strip down executable paths
17054 case "$d_portable" in
17055 "$define")
17056         echo " "
17057         echo "Stripping down executable paths..." >&4
17058         for file in $loclist $trylist; do
17059                 eval temp=\$$file
17060                 eval $file=`basename $temp`
17061         done
17062         ;;
17063 esac
17064
17065 : create config.sh file
17066 echo " "
17067 echo "Creating config.sh..." >&4
17068 $spitshell <<EOT >config.sh
17069 $startsh
17070 #
17071 # This file was produced by running the Configure script. It holds all the
17072 # definitions figured out by Configure. Should you modify one of these values,
17073 # do not forget to propagate your changes by running "Configure -der". You may
17074 # instead choose to run each of the .SH files by yourself, or "Configure -S".
17075 #
17076
17077 # Package name      : $package
17078 # Source directory  : $src
17079 # Configuration time: $cf_time
17080 # Configured by     : $cf_by
17081 # Target system     : $myuname
17082
17083 Author='$Author'
17084 Date='$Date'
17085 Header='$Header'
17086 Id='$Id'
17087 Locker='$Locker'
17088 Log='$Log'
17089 Mcc='$Mcc'
17090 RCSfile='$RCSfile'
17091 Revision='$Revision'
17092 Source='$Source'
17093 State='$State'
17094 _a='$_a'
17095 _exe='$_exe'
17096 _o='$_o'
17097 afs='$afs'
17098 afsroot='$afsroot'
17099 alignbytes='$alignbytes'
17100 ansi2knr='$ansi2knr'
17101 aphostname='$aphostname'
17102 api_revision='$api_revision'
17103 api_subversion='$api_subversion'
17104 api_version='$api_version'
17105 api_versionstring='$api_versionstring'
17106 ar='$ar'
17107 archlib='$archlib'
17108 archlibexp='$archlibexp'
17109 archname64='$archname64'
17110 archname='$archname'
17111 archobjs='$archobjs'
17112 awk='$awk'
17113 baserev='$baserev'
17114 bash='$bash'
17115 bin='$bin'
17116 bincompat5005='$bincompat5005'
17117 binexp='$binexp'
17118 bison='$bison'
17119 byacc='$byacc'
17120 byteorder='$byteorder'
17121 c='$c'
17122 castflags='$castflags'
17123 cat='$cat'
17124 cc='$cc'
17125 cccdlflags='$cccdlflags'
17126 ccdlflags='$ccdlflags'
17127 ccflags='$ccflags'
17128 ccflags_uselargefiles='$ccflags_uselargefiles'
17129 ccname='$ccname'
17130 ccsymbols='$ccsymbols'
17131 ccversion='$ccversion'
17132 cf_by='$cf_by'
17133 cf_email='$cf_email'
17134 cf_time='$cf_time'
17135 charsize='$charsize'
17136 chgrp='$chgrp'
17137 chmod='$chmod'
17138 chown='$chown'
17139 clocktype='$clocktype'
17140 comm='$comm'
17141 compress='$compress'
17142 contains='$contains'
17143 cp='$cp'
17144 cpio='$cpio'
17145 cpp='$cpp'
17146 cpp_stuff='$cpp_stuff'
17147 cppccsymbols='$cppccsymbols'
17148 cppflags='$cppflags'
17149 cpplast='$cpplast'
17150 cppminus='$cppminus'
17151 cpprun='$cpprun'
17152 cppstdin='$cppstdin'
17153 cppsymbols='$cppsymbols'
17154 cryptlib='$cryptlib'
17155 csh='$csh'
17156 d_Gconvert='$d_Gconvert'
17157 d_PRIEUldbl='$d_PRIEUldbl'
17158 d_PRIFUldbl='$d_PRIFUldbl'
17159 d_PRIGUldbl='$d_PRIGUldbl'
17160 d_PRIXU64='$d_PRIXU64'
17161 d_PRId64='$d_PRId64'
17162 d_PRIeldbl='$d_PRIeldbl'
17163 d_PRIfldbl='$d_PRIfldbl'
17164 d_PRIgldbl='$d_PRIgldbl'
17165 d_PRIi64='$d_PRIi64'
17166 d_PRIo64='$d_PRIo64'
17167 d_PRIu64='$d_PRIu64'
17168 d_PRIx64='$d_PRIx64'
17169 d_SCNfldbl='$d_SCNfldbl'
17170 d__fwalk='$d__fwalk'
17171 d_access='$d_access'
17172 d_accessx='$d_accessx'
17173 d_alarm='$d_alarm'
17174 d_archlib='$d_archlib'
17175 d_atolf='$d_atolf'
17176 d_atoll='$d_atoll'
17177 d_attribut='$d_attribut'
17178 d_bcmp='$d_bcmp'
17179 d_bcopy='$d_bcopy'
17180 d_bincompat5005='$d_bincompat5005'
17181 d_bsd='$d_bsd'
17182 d_bsdgetpgrp='$d_bsdgetpgrp'
17183 d_bsdsetpgrp='$d_bsdsetpgrp'
17184 d_bzero='$d_bzero'
17185 d_casti32='$d_casti32'
17186 d_castneg='$d_castneg'
17187 d_charvspr='$d_charvspr'
17188 d_chown='$d_chown'
17189 d_chroot='$d_chroot'
17190 d_chsize='$d_chsize'
17191 d_class='$d_class'
17192 d_closedir='$d_closedir'
17193 d_cmsghdr_s='$d_cmsghdr_s'
17194 d_const='$d_const'
17195 d_crypt='$d_crypt'
17196 d_csh='$d_csh'
17197 d_cuserid='$d_cuserid'
17198 d_dbl_dig='$d_dbl_dig'
17199 d_dbminitproto='$d_dbminitproto'
17200 d_difftime='$d_difftime'
17201 d_dirfd='$d_dirfd'
17202 d_dirnamlen='$d_dirnamlen'
17203 d_dlerror='$d_dlerror'
17204 d_dlopen='$d_dlopen'
17205 d_dlsymun='$d_dlsymun'
17206 d_dosuid='$d_dosuid'
17207 d_drand48proto='$d_drand48proto'
17208 d_dup2='$d_dup2'
17209 d_eaccess='$d_eaccess'
17210 d_endgrent='$d_endgrent'
17211 d_endhent='$d_endhent'
17212 d_endnent='$d_endnent'
17213 d_endpent='$d_endpent'
17214 d_endpwent='$d_endpwent'
17215 d_endsent='$d_endsent'
17216 d_eofnblk='$d_eofnblk'
17217 d_eunice='$d_eunice'
17218 d_fchdir='$d_fchdir'
17219 d_fchmod='$d_fchmod'
17220 d_fchown='$d_fchown'
17221 d_fcntl='$d_fcntl'
17222 d_fcntl_can_lock='$d_fcntl_can_lock'
17223 d_fd_macros='$d_fd_macros'
17224 d_fd_set='$d_fd_set'
17225 d_fds_bits='$d_fds_bits'
17226 d_fgetpos='$d_fgetpos'
17227 d_finite='$d_finite'
17228 d_finitel='$d_finitel'
17229 d_flexfnam='$d_flexfnam'
17230 d_flock='$d_flock'
17231 d_flockproto='$d_flockproto'
17232 d_fork='$d_fork'
17233 d_fp_class='$d_fp_class'
17234 d_fpathconf='$d_fpathconf'
17235 d_fpclass='$d_fpclass'
17236 d_fpclassify='$d_fpclassify'
17237 d_fpclassl='$d_fpclassl'
17238 d_fpos64_t='$d_fpos64_t'
17239 d_frexpl='$d_frexpl'
17240 d_fs_data_s='$d_fs_data_s'
17241 d_fseeko='$d_fseeko'
17242 d_fsetpos='$d_fsetpos'
17243 d_fstatfs='$d_fstatfs'
17244 d_fstatvfs='$d_fstatvfs'
17245 d_fsync='$d_fsync'
17246 d_ftello='$d_ftello'
17247 d_ftime='$d_ftime'
17248 d_getcwd='$d_getcwd'
17249 d_getespwnam='$d_getespwnam'
17250 d_getfsstat='$d_getfsstat'
17251 d_getgrent='$d_getgrent'
17252 d_getgrps='$d_getgrps'
17253 d_gethbyaddr='$d_gethbyaddr'
17254 d_gethbyname='$d_gethbyname'
17255 d_gethent='$d_gethent'
17256 d_gethname='$d_gethname'
17257 d_gethostprotos='$d_gethostprotos'
17258 d_getitimer='$d_getitimer'
17259 d_getlogin='$d_getlogin'
17260 d_getmnt='$d_getmnt'
17261 d_getmntent='$d_getmntent'
17262 d_getnbyaddr='$d_getnbyaddr'
17263 d_getnbyname='$d_getnbyname'
17264 d_getnent='$d_getnent'
17265 d_getnetprotos='$d_getnetprotos'
17266 d_getpagsz='$d_getpagsz'
17267 d_getpbyname='$d_getpbyname'
17268 d_getpbynumber='$d_getpbynumber'
17269 d_getpent='$d_getpent'
17270 d_getpgid='$d_getpgid'
17271 d_getpgrp2='$d_getpgrp2'
17272 d_getpgrp='$d_getpgrp'
17273 d_getppid='$d_getppid'
17274 d_getprior='$d_getprior'
17275 d_getprotoprotos='$d_getprotoprotos'
17276 d_getprpwnam='$d_getprpwnam'
17277 d_getpwent='$d_getpwent'
17278 d_getsbyname='$d_getsbyname'
17279 d_getsbyport='$d_getsbyport'
17280 d_getsent='$d_getsent'
17281 d_getservprotos='$d_getservprotos'
17282 d_getspnam='$d_getspnam'
17283 d_gettimeod='$d_gettimeod'
17284 d_gnulibc='$d_gnulibc'
17285 d_grpasswd='$d_grpasswd'
17286 d_hasmntopt='$d_hasmntopt'
17287 d_htonl='$d_htonl'
17288 d_index='$d_index'
17289 d_inetaton='$d_inetaton'
17290 d_int64_t='$d_int64_t'
17291 d_isascii='$d_isascii'
17292 d_isfinite='$d_isfinite'
17293 d_isinf='$d_isinf'
17294 d_isnan='$d_isnan'
17295 d_isnanl='$d_isnanl'
17296 d_killpg='$d_killpg'
17297 d_lchown='$d_lchown'
17298 d_ldbl_dig='$d_ldbl_dig'
17299 d_link='$d_link'
17300 d_locconv='$d_locconv'
17301 d_lockf='$d_lockf'
17302 d_longdbl='$d_longdbl'
17303 d_longlong='$d_longlong'
17304 d_lseekproto='$d_lseekproto'
17305 d_lstat='$d_lstat'
17306 d_madvise='$d_madvise'
17307 d_mblen='$d_mblen'
17308 d_mbstowcs='$d_mbstowcs'
17309 d_mbtowc='$d_mbtowc'
17310 d_memchr='$d_memchr'
17311 d_memcmp='$d_memcmp'
17312 d_memcpy='$d_memcpy'
17313 d_memmove='$d_memmove'
17314 d_memset='$d_memset'
17315 d_mkdir='$d_mkdir'
17316 d_mkdtemp='$d_mkdtemp'
17317 d_mkfifo='$d_mkfifo'
17318 d_mkstemp='$d_mkstemp'
17319 d_mkstemps='$d_mkstemps'
17320 d_mktime='$d_mktime'
17321 d_mmap='$d_mmap'
17322 d_modfl='$d_modfl'
17323 d_modfl_pow32_bug='$d_modfl_pow32_bug'
17324 d_mprotect='$d_mprotect'
17325 d_msg='$d_msg'
17326 d_msg_ctrunc='$d_msg_ctrunc'
17327 d_msg_dontroute='$d_msg_dontroute'
17328 d_msg_oob='$d_msg_oob'
17329 d_msg_peek='$d_msg_peek'
17330 d_msg_proxy='$d_msg_proxy'
17331 d_msgctl='$d_msgctl'
17332 d_msgget='$d_msgget'
17333 d_msghdr_s='$d_msghdr_s'
17334 d_msgrcv='$d_msgrcv'
17335 d_msgsnd='$d_msgsnd'
17336 d_msync='$d_msync'
17337 d_munmap='$d_munmap'
17338 d_mymalloc='$d_mymalloc'
17339 d_nice='$d_nice'
17340 d_nl_langinfo='$d_nl_langinfo'
17341 d_nv_preserves_uv='$d_nv_preserves_uv'
17342 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
17343 d_off64_t='$d_off64_t'
17344 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
17345 d_oldpthreads='$d_oldpthreads'
17346 d_oldsock='$d_oldsock'
17347 d_open3='$d_open3'
17348 d_pathconf='$d_pathconf'
17349 d_pause='$d_pause'
17350 d_perl_otherlibdirs='$d_perl_otherlibdirs'
17351 d_phostname='$d_phostname'
17352 d_pipe='$d_pipe'
17353 d_poll='$d_poll'
17354 d_portable='$d_portable'
17355 d_procselfexe='$d_procselfexe'
17356 d_pthread_atfork='$d_pthread_atfork'
17357 d_pthread_yield='$d_pthread_yield'
17358 d_pwage='$d_pwage'
17359 d_pwchange='$d_pwchange'
17360 d_pwclass='$d_pwclass'
17361 d_pwcomment='$d_pwcomment'
17362 d_pwexpire='$d_pwexpire'
17363 d_pwgecos='$d_pwgecos'
17364 d_pwpasswd='$d_pwpasswd'
17365 d_pwquota='$d_pwquota'
17366 d_qgcvt='$d_qgcvt'
17367 d_quad='$d_quad'
17368 d_readdir='$d_readdir'
17369 d_readlink='$d_readlink'
17370 d_readv='$d_readv'
17371 d_recvmsg='$d_recvmsg'
17372 d_rename='$d_rename'
17373 d_rewinddir='$d_rewinddir'
17374 d_rmdir='$d_rmdir'
17375 d_safebcpy='$d_safebcpy'
17376 d_safemcpy='$d_safemcpy'
17377 d_sanemcmp='$d_sanemcmp'
17378 d_sbrkproto='$d_sbrkproto'
17379 d_sched_yield='$d_sched_yield'
17380 d_scm_rights='$d_scm_rights'
17381 d_seekdir='$d_seekdir'
17382 d_select='$d_select'
17383 d_sem='$d_sem'
17384 d_semctl='$d_semctl'
17385 d_semctl_semid_ds='$d_semctl_semid_ds'
17386 d_semctl_semun='$d_semctl_semun'
17387 d_semget='$d_semget'
17388 d_semop='$d_semop'
17389 d_sendmsg='$d_sendmsg'
17390 d_setegid='$d_setegid'
17391 d_seteuid='$d_seteuid'
17392 d_setgrent='$d_setgrent'
17393 d_setgrps='$d_setgrps'
17394 d_sethent='$d_sethent'
17395 d_setitimer='$d_setitimer'
17396 d_setlinebuf='$d_setlinebuf'
17397 d_setlocale='$d_setlocale'
17398 d_setnent='$d_setnent'
17399 d_setpent='$d_setpent'
17400 d_setpgid='$d_setpgid'
17401 d_setpgrp2='$d_setpgrp2'
17402 d_setpgrp='$d_setpgrp'
17403 d_setprior='$d_setprior'
17404 d_setproctitle='$d_setproctitle'
17405 d_setpwent='$d_setpwent'
17406 d_setregid='$d_setregid'
17407 d_setresgid='$d_setresgid'
17408 d_setresuid='$d_setresuid'
17409 d_setreuid='$d_setreuid'
17410 d_setrgid='$d_setrgid'
17411 d_setruid='$d_setruid'
17412 d_setsent='$d_setsent'
17413 d_setsid='$d_setsid'
17414 d_setvbuf='$d_setvbuf'
17415 d_sfio='$d_sfio'
17416 d_shm='$d_shm'
17417 d_shmat='$d_shmat'
17418 d_shmatprototype='$d_shmatprototype'
17419 d_shmctl='$d_shmctl'
17420 d_shmdt='$d_shmdt'
17421 d_shmget='$d_shmget'
17422 d_sigaction='$d_sigaction'
17423 d_sigprocmask='$d_sigprocmask'
17424 d_sigsetjmp='$d_sigsetjmp'
17425 d_sockatmark='$d_sockatmark'
17426 d_sockatmarkproto='$d_sockatmarkproto'
17427 d_socket='$d_socket'
17428 d_socklen_t='$d_socklen_t'
17429 d_sockpair='$d_sockpair'
17430 d_socks5_init='$d_socks5_init'
17431 d_sqrtl='$d_sqrtl'
17432 d_sresgproto='$d_sresgproto'
17433 d_sresuproto='$d_sresuproto'
17434 d_statblks='$d_statblks'
17435 d_statfs_f_flags='$d_statfs_f_flags'
17436 d_statfs_s='$d_statfs_s'
17437 d_statvfs='$d_statvfs'
17438 d_stdio_cnt_lval='$d_stdio_cnt_lval'
17439 d_stdio_ptr_lval='$d_stdio_ptr_lval'
17440 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
17441 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
17442 d_stdio_stream_array='$d_stdio_stream_array'
17443 d_stdiobase='$d_stdiobase'
17444 d_stdstdio='$d_stdstdio'
17445 d_strchr='$d_strchr'
17446 d_strcoll='$d_strcoll'
17447 d_strctcpy='$d_strctcpy'
17448 d_strerrm='$d_strerrm'
17449 d_strerror='$d_strerror'
17450 d_strftime='$d_strftime'
17451 d_strtod='$d_strtod'
17452 d_strtol='$d_strtol'
17453 d_strtold='$d_strtold'
17454 d_strtoll='$d_strtoll'
17455 d_strtoq='$d_strtoq'
17456 d_strtoul='$d_strtoul'
17457 d_strtoull='$d_strtoull'
17458 d_strtouq='$d_strtouq'
17459 d_strxfrm='$d_strxfrm'
17460 d_suidsafe='$d_suidsafe'
17461 d_symlink='$d_symlink'
17462 d_syscall='$d_syscall'
17463 d_syscallproto='$d_syscallproto'
17464 d_sysconf='$d_sysconf'
17465 d_sysernlst='$d_sysernlst'
17466 d_syserrlst='$d_syserrlst'
17467 d_system='$d_system'
17468 d_tcgetpgrp='$d_tcgetpgrp'
17469 d_tcsetpgrp='$d_tcsetpgrp'
17470 d_telldir='$d_telldir'
17471 d_telldirproto='$d_telldirproto'
17472 d_time='$d_time'
17473 d_times='$d_times'
17474 d_tm_tm_gmtoff='$d_tm_tm_gmtoff'
17475 d_tm_tm_zone='$d_tm_tm_zone'
17476 d_truncate='$d_truncate'
17477 d_tzname='$d_tzname'
17478 d_u32align='$d_u32align'
17479 d_ualarm='$d_ualarm'
17480 d_umask='$d_umask'
17481 d_uname='$d_uname'
17482 d_union_semun='$d_union_semun'
17483 d_unordered='$d_unordered'
17484 d_usleep='$d_usleep'
17485 d_usleepproto='$d_usleepproto'
17486 d_ustat='$d_ustat'
17487 d_vendorarch='$d_vendorarch'
17488 d_vendorbin='$d_vendorbin'
17489 d_vendorlib='$d_vendorlib'
17490 d_vfork='$d_vfork'
17491 d_void_closedir='$d_void_closedir'
17492 d_voidsig='$d_voidsig'
17493 d_voidtty='$d_voidtty'
17494 d_volatile='$d_volatile'
17495 d_vprintf='$d_vprintf'
17496 d_wait4='$d_wait4'
17497 d_waitpid='$d_waitpid'
17498 d_wcstombs='$d_wcstombs'
17499 d_wctomb='$d_wctomb'
17500 d_writev='$d_writev'
17501 d_xenix='$d_xenix'
17502 date='$date'
17503 db_hashtype='$db_hashtype'
17504 db_prefixtype='$db_prefixtype'
17505 db_version_major='$db_version_major'
17506 db_version_minor='$db_version_minor'
17507 db_version_patch='$db_version_patch'
17508 defvoidused='$defvoidused'
17509 direntrytype='$direntrytype'
17510 dlext='$dlext'
17511 dlsrc='$dlsrc'
17512 doublesize='$doublesize'
17513 drand01='$drand01'
17514 dynamic_ext='$dynamic_ext'
17515 eagain='$eagain'
17516 ebcdic='$ebcdic'
17517 echo='$echo'
17518 egrep='$egrep'
17519 emacs='$emacs'
17520 eunicefix='$eunicefix'
17521 exe_ext='$exe_ext'
17522 expr='$expr'
17523 extensions='$extensions'
17524 extras='$extras'
17525 fflushNULL='$fflushNULL'
17526 fflushall='$fflushall'
17527 find='$find'
17528 firstmakefile='$firstmakefile'
17529 flex='$flex'
17530 fpossize='$fpossize'
17531 fpostype='$fpostype'
17532 freetype='$freetype'
17533 from='$from'
17534 full_ar='$full_ar'
17535 full_csh='$full_csh'
17536 full_sed='$full_sed'
17537 gccosandvers='$gccosandvers'
17538 gccversion='$gccversion'
17539 gidformat='$gidformat'
17540 gidsign='$gidsign'
17541 gidsize='$gidsize'
17542 gidtype='$gidtype'
17543 glibpth='$glibpth'
17544 gmake='$gmake'
17545 grep='$grep'
17546 groupcat='$groupcat'
17547 groupstype='$groupstype'
17548 gzip='$gzip'
17549 h_fcntl='$h_fcntl'
17550 h_sysfile='$h_sysfile'
17551 hint='$hint'
17552 hostcat='$hostcat'
17553 i16size='$i16size'
17554 i16type='$i16type'
17555 i32size='$i32size'
17556 i32type='$i32type'
17557 i64size='$i64size'
17558 i64type='$i64type'
17559 i8size='$i8size'
17560 i8type='$i8type'
17561 i_arpainet='$i_arpainet'
17562 i_bsdioctl='$i_bsdioctl'
17563 i_db='$i_db'
17564 i_dbm='$i_dbm'
17565 i_dirent='$i_dirent'
17566 i_dld='$i_dld'
17567 i_dlfcn='$i_dlfcn'
17568 i_fcntl='$i_fcntl'
17569 i_float='$i_float'
17570 i_fp='$i_fp'
17571 i_fp_class='$i_fp_class'
17572 i_gdbm='$i_gdbm'
17573 i_grp='$i_grp'
17574 i_ieeefp='$i_ieeefp'
17575 i_inttypes='$i_inttypes'
17576 i_langinfo='$i_langinfo'
17577 i_libutil='$i_libutil'
17578 i_limits='$i_limits'
17579 i_locale='$i_locale'
17580 i_machcthr='$i_machcthr'
17581 i_malloc='$i_malloc'
17582 i_math='$i_math'
17583 i_memory='$i_memory'
17584 i_mntent='$i_mntent'
17585 i_ndbm='$i_ndbm'
17586 i_netdb='$i_netdb'
17587 i_neterrno='$i_neterrno'
17588 i_netinettcp='$i_netinettcp'
17589 i_niin='$i_niin'
17590 i_poll='$i_poll'
17591 i_prot='$i_prot'
17592 i_pthread='$i_pthread'
17593 i_pwd='$i_pwd'
17594 i_rpcsvcdbm='$i_rpcsvcdbm'
17595 i_sfio='$i_sfio'
17596 i_sgtty='$i_sgtty'
17597 i_shadow='$i_shadow'
17598 i_socks='$i_socks'
17599 i_stdarg='$i_stdarg'
17600 i_stddef='$i_stddef'
17601 i_stdlib='$i_stdlib'
17602 i_string='$i_string'
17603 i_sunmath='$i_sunmath'
17604 i_sysaccess='$i_sysaccess'
17605 i_sysdir='$i_sysdir'
17606 i_sysfile='$i_sysfile'
17607 i_sysfilio='$i_sysfilio'
17608 i_sysin='$i_sysin'
17609 i_sysioctl='$i_sysioctl'
17610 i_syslog='$i_syslog'
17611 i_sysmman='$i_sysmman'
17612 i_sysmode='$i_sysmode'
17613 i_sysmount='$i_sysmount'
17614 i_sysndir='$i_sysndir'
17615 i_sysparam='$i_sysparam'
17616 i_sysresrc='$i_sysresrc'
17617 i_syssecrt='$i_syssecrt'
17618 i_sysselct='$i_sysselct'
17619 i_syssockio='$i_syssockio'
17620 i_sysstat='$i_sysstat'
17621 i_sysstatfs='$i_sysstatfs'
17622 i_sysstatvfs='$i_sysstatvfs'
17623 i_systime='$i_systime'
17624 i_systimek='$i_systimek'
17625 i_systimes='$i_systimes'
17626 i_systypes='$i_systypes'
17627 i_sysuio='$i_sysuio'
17628 i_sysun='$i_sysun'
17629 i_sysutsname='$i_sysutsname'
17630 i_sysvfs='$i_sysvfs'
17631 i_syswait='$i_syswait'
17632 i_termio='$i_termio'
17633 i_termios='$i_termios'
17634 i_time='$i_time'
17635 i_unistd='$i_unistd'
17636 i_ustat='$i_ustat'
17637 i_utime='$i_utime'
17638 i_values='$i_values'
17639 i_varargs='$i_varargs'
17640 i_varhdr='$i_varhdr'
17641 i_vfork='$i_vfork'
17642 ignore_versioned_solibs='$ignore_versioned_solibs'
17643 inc_version_list='$inc_version_list'
17644 inc_version_list_init='$inc_version_list_init'
17645 incpath='$incpath'
17646 inews='$inews'
17647 installarchlib='$installarchlib'
17648 installbin='$installbin'
17649 installman1dir='$installman1dir'
17650 installman3dir='$installman3dir'
17651 installprefix='$installprefix'
17652 installprefixexp='$installprefixexp'
17653 installprivlib='$installprivlib'
17654 installscript='$installscript'
17655 installsitearch='$installsitearch'
17656 installsitebin='$installsitebin'
17657 installsitelib='$installsitelib'
17658 installstyle='$installstyle'
17659 installusrbinperl='$installusrbinperl'
17660 installvendorarch='$installvendorarch'
17661 installvendorbin='$installvendorbin'
17662 installvendorlib='$installvendorlib'
17663 intsize='$intsize'
17664 issymlink='$issymlink'
17665 ivdformat='$ivdformat'
17666 ivsize='$ivsize'
17667 ivtype='$ivtype'
17668 known_extensions='$known_extensions'
17669 ksh='$ksh'
17670 ld='$ld'
17671 lddlflags='$lddlflags'
17672 ldflags='$ldflags'
17673 ldflags_uselargefiles='$ldflags_uselargefiles'
17674 ldlibpthname='$ldlibpthname'
17675 less='$less'
17676 lib_ext='$lib_ext'
17677 libc='$libc'
17678 libperl='$libperl'
17679 libpth='$libpth'
17680 libs='$libs'
17681 libsdirs='$libsdirs'
17682 libsfiles='$libsfiles'
17683 libsfound='$libsfound'
17684 libspath='$libspath'
17685 libswanted='$libswanted'
17686 libswanted_uselargefiles='$libswanted_uselargefiles'
17687 line='$line'
17688 lint='$lint'
17689 lkflags='$lkflags'
17690 ln='$ln'
17691 lns='$lns'
17692 locincpth='$locincpth'
17693 loclibpth='$loclibpth'
17694 longdblsize='$longdblsize'
17695 longlongsize='$longlongsize'
17696 longsize='$longsize'
17697 lp='$lp'
17698 lpr='$lpr'
17699 ls='$ls'
17700 lseeksize='$lseeksize'
17701 lseektype='$lseektype'
17702 mail='$mail'
17703 mailx='$mailx'
17704 make='$make'
17705 make_set_make='$make_set_make'
17706 mallocobj='$mallocobj'
17707 mallocsrc='$mallocsrc'
17708 malloctype='$malloctype'
17709 man1dir='$man1dir'
17710 man1direxp='$man1direxp'
17711 man1ext='$man1ext'
17712 man3dir='$man3dir'
17713 man3direxp='$man3direxp'
17714 man3ext='$man3ext'
17715 mips_type='$mips_type'
17716 mkdir='$mkdir'
17717 mmaptype='$mmaptype'
17718 modetype='$modetype'
17719 more='$more'
17720 multiarch='$multiarch'
17721 mv='$mv'
17722 myarchname='$myarchname'
17723 mydomain='$mydomain'
17724 myhostname='$myhostname'
17725 myuname='$myuname'
17726 n='$n'
17727 need_va_copy='$need_va_copy'
17728 netdb_hlen_type='$netdb_hlen_type'
17729 netdb_host_type='$netdb_host_type'
17730 netdb_name_type='$netdb_name_type'
17731 netdb_net_type='$netdb_net_type'
17732 nm='$nm'
17733 nm_opt='$nm_opt'
17734 nm_so_opt='$nm_so_opt'
17735 nonxs_ext='$nonxs_ext'
17736 nroff='$nroff'
17737 nvEUformat='$nvEUformat'
17738 nvFUformat='$nvFUformat'
17739 nvGUformat='$nvGUformat'
17740 nveformat='$nveformat'
17741 nvfformat='$nvfformat'
17742 nvgformat='$nvgformat'
17743 nvsize='$nvsize'
17744 nvtype='$nvtype'
17745 o_nonblock='$o_nonblock'
17746 obj_ext='$obj_ext'
17747 old_pthread_create_joinable='$old_pthread_create_joinable'
17748 optimize='$optimize'
17749 orderlib='$orderlib'
17750 osname='$osname'
17751 osvers='$osvers'
17752 otherlibdirs='$otherlibdirs'
17753 package='$package'
17754 pager='$pager'
17755 passcat='$passcat'
17756 patchlevel='$patchlevel'
17757 path_sep='$path_sep'
17758 perl5='$perl5'
17759 perl='$perl'
17760 perl_patchlevel='$perl_patchlevel'
17761 perladmin='$perladmin'
17762 perllibs='$perllibs'
17763 perlpath='$perlpath'
17764 pg='$pg'
17765 phostname='$phostname'
17766 pidtype='$pidtype'
17767 plibpth='$plibpth'
17768 pm_apiversion='$pm_apiversion'
17769 pmake='$pmake'
17770 pr='$pr'
17771 prefix='$prefix'
17772 prefixexp='$prefixexp'
17773 privlib='$privlib'
17774 privlibexp='$privlibexp'
17775 procselfexe='$procselfexe'
17776 prototype='$prototype'
17777 ptrsize='$ptrsize'
17778 quadkind='$quadkind'
17779 quadtype='$quadtype'
17780 randbits='$randbits'
17781 randfunc='$randfunc'
17782 randseedtype='$randseedtype'
17783 ranlib='$ranlib'
17784 rd_nodata='$rd_nodata'
17785 revision='$revision'
17786 rm='$rm'
17787 rmail='$rmail'
17788 run='$run'
17789 runnm='$runnm'
17790 sPRIEUldbl='$sPRIEUldbl'
17791 sPRIFUldbl='$sPRIFUldbl'
17792 sPRIGUldbl='$sPRIGUldbl'
17793 sPRIXU64='$sPRIXU64'
17794 sPRId64='$sPRId64'
17795 sPRIeldbl='$sPRIeldbl'
17796 sPRIfldbl='$sPRIfldbl'
17797 sPRIgldbl='$sPRIgldbl'
17798 sPRIi64='$sPRIi64'
17799 sPRIo64='$sPRIo64'
17800 sPRIu64='$sPRIu64'
17801 sPRIx64='$sPRIx64'
17802 sSCNfldbl='$sSCNfldbl'
17803 sched_yield='$sched_yield'
17804 scriptdir='$scriptdir'
17805 scriptdirexp='$scriptdirexp'
17806 sed='$sed'
17807 seedfunc='$seedfunc'
17808 selectminbits='$selectminbits'
17809 selecttype='$selecttype'
17810 sendmail='$sendmail'
17811 sh='$sh'
17812 shar='$shar'
17813 sharpbang='$sharpbang'
17814 shmattype='$shmattype'
17815 shortsize='$shortsize'
17816 shrpenv='$shrpenv'
17817 shsharp='$shsharp'
17818 sig_count='$sig_count'
17819 sig_name='$sig_name'
17820 sig_name_init='$sig_name_init'
17821 sig_num='$sig_num'
17822 sig_num_init='$sig_num_init'
17823 sig_size='$sig_size'
17824 signal_t='$signal_t'
17825 sitearch='$sitearch'
17826 sitearchexp='$sitearchexp'
17827 sitebin='$sitebin'
17828 sitebinexp='$sitebinexp'
17829 sitelib='$sitelib'
17830 sitelib_stem='$sitelib_stem'
17831 sitelibexp='$sitelibexp'
17832 siteprefix='$siteprefix'
17833 siteprefixexp='$siteprefixexp'
17834 sizesize='$sizesize'
17835 sizetype='$sizetype'
17836 sleep='$sleep'
17837 smail='$smail'
17838 so='$so'
17839 sockethdr='$sockethdr'
17840 socketlib='$socketlib'
17841 socksizetype='$socksizetype'
17842 sort='$sort'
17843 spackage='$spackage'
17844 spitshell='$spitshell'
17845 src='$src'
17846 ssizetype='$ssizetype'
17847 startperl='$startperl'
17848 startsh='$startsh'
17849 static_ext='$static_ext'
17850 stdchar='$stdchar'
17851 stdio_base='$stdio_base'
17852 stdio_bufsiz='$stdio_bufsiz'
17853 stdio_cnt='$stdio_cnt'
17854 stdio_filbuf='$stdio_filbuf'
17855 stdio_ptr='$stdio_ptr'
17856 stdio_stream_array='$stdio_stream_array'
17857 strings='$strings'
17858 submit='$submit'
17859 subversion='$subversion'
17860 sysman='$sysman'
17861 tail='$tail'
17862 tar='$tar'
17863 targetarch='$targetarch'
17864 tbl='$tbl'
17865 tee='$tee'
17866 test='$test'
17867 timeincl='$timeincl'
17868 timetype='$timetype'
17869 to='$to'
17870 touch='$touch'
17871 tr='$tr'
17872 trnl='$trnl'
17873 troff='$troff'
17874 u16size='$u16size'
17875 u16type='$u16type'
17876 u32size='$u32size'
17877 u32type='$u32type'
17878 u64size='$u64size'
17879 u64type='$u64type'
17880 u8size='$u8size'
17881 u8type='$u8type'
17882 uidformat='$uidformat'
17883 uidsign='$uidsign'
17884 uidsize='$uidsize'
17885 uidtype='$uidtype'
17886 uname='$uname'
17887 uniq='$uniq'
17888 uquadtype='$uquadtype'
17889 use5005threads='$use5005threads'
17890 use64bitall='$use64bitall'
17891 use64bitint='$use64bitint'
17892 usecrosscompile='$usecrosscompile'
17893 usedl='$usedl'
17894 useithreads='$useithreads'
17895 uselargefiles='$uselargefiles'
17896 uselongdouble='$uselongdouble'
17897 usemorebits='$usemorebits'
17898 usemultiplicity='$usemultiplicity'
17899 usemymalloc='$usemymalloc'
17900 usenm='$usenm'
17901 useopcode='$useopcode'
17902 useperlio='$useperlio'
17903 useposix='$useposix'
17904 usereentrant='$usereentrant'
17905 usesfio='$usesfio'
17906 useshrplib='$useshrplib'
17907 usesocks='$usesocks'
17908 usethreads='$usethreads'
17909 usevendorprefix='$usevendorprefix'
17910 usevfork='$usevfork'
17911 usrinc='$usrinc'
17912 uuname='$uuname'
17913 uvXUformat='$uvXUformat'
17914 uvoformat='$uvoformat'
17915 uvsize='$uvsize'
17916 uvtype='$uvtype'
17917 uvuformat='$uvuformat'
17918 uvxformat='$uvxformat'
17919 vendorarch='$vendorarch'
17920 vendorarchexp='$vendorarchexp'
17921 vendorbin='$vendorbin'
17922 vendorbinexp='$vendorbinexp'
17923 vendorlib='$vendorlib'
17924 vendorlib_stem='$vendorlib_stem'
17925 vendorlibexp='$vendorlibexp'
17926 vendorprefix='$vendorprefix'
17927 vendorprefixexp='$vendorprefixexp'
17928 version='$version'
17929 version_patchlevel_string='$version_patchlevel_string'
17930 versiononly='$versiononly'
17931 vi='$vi'
17932 voidflags='$voidflags'
17933 xlibpth='$xlibpth'
17934 xs_apiversion='$xs_apiversion'
17935 yacc='$yacc'
17936 yaccflags='$yaccflags'
17937 zcat='$zcat'
17938 zip='$zip'
17939 EOT
17940
17941 : Add in command line options if available
17942 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
17943
17944 : add special variables
17945 $test -f $src/patchlevel.h && \
17946 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
17947 echo "PERL_PATCHLEVEL=$perl_patchlevel" >>config.sh
17948 echo "PERL_CONFIG_SH=true" >>config.sh
17949
17950 : propagate old symbols
17951 if $test -f UU/config.sh; then
17952         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
17953         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
17954         $sort | $uniq -u >UU/oldsyms
17955         set X `cat UU/oldsyms`
17956         shift
17957         case $# in
17958         0) ;;
17959         *)
17960                 cat <<EOM
17961 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
17962 EOM
17963                 echo "# Variables propagated from previous config.sh file." >>config.sh
17964                 for sym in `cat UU/oldsyms`; do
17965                         echo "    Propagating $hint variable "'$'"$sym..."
17966                         eval 'tmp="$'"${sym}"'"'
17967                         echo "$tmp" | \
17968                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
17969                 done
17970                 ;;
17971         esac
17972 fi
17973
17974 : Finish up by extracting the .SH files
17975 case "$alldone" in
17976 exit)
17977         $rm -rf UU
17978         echo "Extraction done."
17979         exit 0
17980         ;;
17981 cont)
17982         ;;
17983 '')
17984         dflt=''
17985         nostick=true
17986         $cat <<EOM
17987
17988 If you'd like to make any changes to the config.sh file before I begin
17989 to configure things, do it as a shell escape now (e.g. !vi config.sh).
17990
17991 EOM
17992         rp="Press return or use a shell escape to edit config.sh:"
17993         . UU/myread
17994         nostick=''
17995         case "$ans" in
17996         '') ;;
17997         *) : in case they cannot read
17998                 sh 1>&4 -c "$ans";;
17999         esac
18000         ;;
18001 esac
18002
18003 : if this fails, just run all the .SH files by hand
18004 . ./config.sh
18005
18006 echo " "
18007 exec 1>&4
18008 pwd=`pwd`
18009 . ./UU/extract
18010 cd "$pwd"
18011
18012 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
18013         dflt=y
18014         case "$silent" in
18015         true) ;;
18016         *)
18017                 $cat <<EOM
18018
18019 Now you need to generate make dependencies by running "$make depend".
18020 You might prefer to run it in background: "$make depend > makedepend.out &"
18021 It can take a while, so you might not want to run it right now.
18022
18023 EOM
18024                 ;;
18025         esac
18026         rp="Run $make depend now?"
18027         . UU/myread
18028         case "$ans" in
18029         y*)
18030                 $make depend && echo "Now you must run '$make'."
18031                 ;;
18032         *)
18033                 echo "You must run '$make depend' then '$make'."
18034                 ;;
18035         esac
18036 elif test -f [Mm]akefile; then
18037         echo " "
18038         echo "Now you must run a $make."
18039 else
18040         echo "Configure done."
18041 fi
18042
18043 if $test -f Policy.sh; then
18044     $cat <<EOM
18045
18046 If you compile $package on a different machine or from a different object
18047 directory, copy the Policy.sh file from this object directory to the
18048 new one before you run Configure -- this will help you with most of
18049 the policy defaults.
18050
18051 EOM
18052 fi
18053 if $test -f config.msg; then
18054     echo "Hmm.  I also noted the following information while running:"
18055     echo " "
18056     $cat config.msg >&4
18057     $rm -f config.msg
18058 fi
18059 $rm -f kit*isdone ark*isdone
18060 $rm -rf UU
18061
18062 : End of Configure
18063