[patch] .s MakeMaker suffix
[p5sagit/p5-mst-13.2.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Tue Jun 19 02:14:42 EET DST 2001 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.org)
25
26 cat >c1$$ <<EOF
27 ARGGGHHHH!!!!!
28
29 SCO csh still thinks true is false.  Write to SCO today and tell them that next
30 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
31
32 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
33 we'd have to do is go in and swap the && and || tokens, wherever they are.)
34
35 [End of diatribe. We now return you to your regularly scheduled programming...]
36 EOF
37 cat >c2$$ <<EOF
38
39 OOPS!  You naughty creature!  You didn't run Configure with sh!
40 I will attempt to remedy the situation by running sh for you...
41 EOF
42
43 true || cat c1$$ c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f c1$$ c2$$
49
50 : compute my invocation name
51 me=$0
52 case "$0" in
53 */*)
54         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
55         test "$me" || me=$0
56         ;;
57 esac
58
59 : Proper separator for the PATH environment variable
60 p_=:
61 : On OS/2 this directory should exist if this is not floppy only system :-]
62 if test -d c:/. ; then
63     if test -n "$OS2_SHELL"; then
64                 p_=\;
65                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
66                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
67         elif test -n "$DJGPP"; then
68                 p_=\;
69         fi
70 fi
71
72 : Proper PATH setting
73 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
74 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
75 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
76 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
77 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
78 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
79 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
80 paths="$paths /sbin /usr/sbin /usr/libexec"
81
82 for p in $paths
83 do
84         case "$p_$PATH$p_" in
85         *$p_$p$p_*) ;;
86         *) test -d $p && PATH=$PATH$p_$p ;;
87         esac
88 done
89
90 PATH=.$p_$PATH
91 export PATH
92
93 : shall we be using ksh?
94 inksh=''
95 needksh=''
96 avoidksh=''
97 newsh=/bin/ksh
98 changesh=''
99 if (PATH=.; alias -x) >/dev/null 2>&1; then
100                 inksh=true
101 fi
102 if test -f /hp-ux -a -f /bin/ksh; then
103         needksh='to avoid sh bug in "here document" expansion'
104 fi
105 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
106         if test X`/usr/bin/uname -v` = X4; then
107                 avoidksh="to avoid AIX 4's /bin/sh"
108                 newsh=/usr/bin/bsh
109         fi
110 fi
111 if test -f /osf_boot -a -f /usr/sbin/setld; then
112         if test X`/usr/bin/uname -s` = XOSF1; then
113                 avoidksh="to avoid Digital UNIX' ksh"
114                 newsh=/bin/sh
115                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
116         fi
117 fi
118 case "$inksh/$needksh" in
119 /[a-z]*)
120                 ENV=''
121                 changesh=true
122                 reason="$needksh"
123         ;;
124 esac
125 case "$inksh/$avoidksh" in
126 true/[a-z]*)
127         changesh=true
128         reason="$avoidksh"
129         ;;
130 esac
131 case "$inksh/$needksh-$avoidksh-" in
132 true/--)
133                 cat <<EOM
134 (I see you are using the Korn shell.  Some ksh's blow up on $me,
135 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
136 EOM
137         ;;
138 esac
139 case "$changesh" in
140 true)
141         echo "(Feeding myself to $newsh $reason.)"
142         case "$0" in
143         Configure|*/Configure) exec $newsh $0 "$@";;
144         *) exec $newsh Configure "$@";;
145         esac
146         ;;
147 esac
148
149 : if needed set CDPATH to a harmless value that is not chatty
150 : avoid bash 2.02 problems with empty CDPATH.
151 case "$CDPATH" in
152 '')     ;;
153 *)      case "$SHELL" in
154         *bash*) CDPATH='.' ;;
155         *)              CDPATH='' ;;
156         esac
157         ;;
158 esac
159 : Configure runs within the UU subdirectory
160 test -d UU || mkdir UU
161 cd UU && rm -f ./*
162
163 ccname=''
164 ccversion=''
165 ccsymbols=''
166 cppccsymbols=''
167 cppsymbols=''
168 from=''
169 run=''
170 targetarch=''
171 to=''
172 usecrosscompile=''
173 perllibs=''
174 dynamic_ext=''
175 extensions=''
176 known_extensions=''
177 nonxs_ext=''
178 static_ext=''
179 useopcode=''
180 useposix=''
181 d_bsd=''
182 d_eunice=''
183 d_xenix=''
184 eunicefix=''
185 Mcc=''
186 ar=''
187 awk=''
188 bash=''
189 bison=''
190 byacc=''
191 cat=''
192 chgrp=''
193 chmod=''
194 chown=''
195 comm=''
196 compress=''
197 cp=''
198 cpio=''
199 cpp=''
200 csh=''
201 date=''
202 echo=''
203 egrep=''
204 emacs=''
205 expr=''
206 find=''
207 flex=''
208 grep=''
209 gzip=''
210 inews=''
211 ksh=''
212 less=''
213 line=''
214 lint=''
215 ln=''
216 lp=''
217 lpr=''
218 ls=''
219 mail=''
220 mailx=''
221 make=''
222 mkdir=''
223 more=''
224 mv=''
225 nm=''
226 nroff=''
227 perl=''
228 pg=''
229 pmake=''
230 pr=''
231 rm=''
232 rmail=''
233 sed=''
234 sendmail=''
235 shar=''
236 sleep=''
237 smail=''
238 sort=''
239 submit=''
240 tail=''
241 tar=''
242 tbl=''
243 tee=''
244 test=''
245 touch=''
246 tr=''
247 troff=''
248 uname=''
249 uniq=''
250 uuname=''
251 vi=''
252 zcat=''
253 zip=''
254 full_ar=''
255 full_sed=''
256 libswanted=''
257 hint=''
258 myuname=''
259 osname=''
260 osvers=''
261 Author=''
262 Date=''
263 Header=''
264 Id=''
265 Locker=''
266 Log=''
267 RCSfile=''
268 Revision=''
269 Source=''
270 State=''
271 _a=''
272 _exe=''
273 _o=''
274 archobjs=''
275 exe_ext=''
276 firstmakefile=''
277 lib_ext=''
278 obj_ext=''
279 path_sep=''
280 afs=''
281 afsroot=''
282 alignbytes=''
283 ansi2knr=''
284 archlib=''
285 archlibexp=''
286 d_archlib=''
287 installarchlib=''
288 archname=''
289 myarchname=''
290 d_atolf=''
291 d_atoll=''
292 baserev=''
293 bin=''
294 binexp=''
295 installbin=''
296 bincompat5005=''
297 d_bincompat5005=''
298 byteorder=''
299 cc=''
300 ccflags=''
301 cppflags=''
302 ldflags=''
303 lkflags=''
304 locincpth=''
305 optimize=''
306 cf_email=''
307 cf_by=''
308 cf_time=''
309 charsize=''
310 contains=''
311 cpp_stuff=''
312 cpplast=''
313 cppminus=''
314 cpprun=''
315 cppstdin=''
316 d__fwalk=''
317 d_access=''
318 d_accessx=''
319 d_alarm=''
320 d_attribut=''
321 d_bcmp=''
322 d_bcopy=''
323 d_bzero=''
324 d_casti32=''
325 castflags=''
326 d_castneg=''
327 d_chown=''
328 d_chroot=''
329 d_chsize=''
330 d_closedir=''
331 d_void_closedir=''
332 d_cmsghdr_s=''
333 d_const=''
334 cryptlib=''
335 d_crypt=''
336 d_csh=''
337 full_csh=''
338 d_cuserid=''
339 d_dbl_dig=''
340 d_dbminitproto=''
341 d_difftime=''
342 d_dlerror=''
343 d_dlopen=''
344 d_dlsymun=''
345 d_dosuid=''
346 d_suidsafe=''
347 d_drand48proto=''
348 d_dup2=''
349 d_eaccess=''
350 d_endgrent=''
351 d_endhent=''
352 d_endnent=''
353 d_endpent=''
354 d_endpwent=''
355 d_endsent=''
356 d_fchmod=''
357 d_fchown=''
358 d_fcntl=''
359 d_fcntl_can_lock=''
360 d_fd_macros=''
361 d_fd_set=''
362 d_fds_bits=''
363 d_fgetpos=''
364 d_flexfnam=''
365 d_flock=''
366 d_flockproto=''
367 d_fork=''
368 d_fpos64_t=''
369 d_frexpl=''
370 d_fs_data_s=''
371 d_fseeko=''
372 d_fsetpos=''
373 d_fstatfs=''
374 d_fsync=''
375 d_ftello=''
376 d_ftime=''
377 d_gettimeod=''
378 d_Gconvert=''
379 d_getcwd=''
380 d_getespwnam=''
381 d_getfsstat=''
382 d_getgrent=''
383 d_getgrps=''
384 d_gethbyaddr=''
385 d_gethbyname=''
386 d_gethent=''
387 aphostname=''
388 d_gethname=''
389 d_phostname=''
390 d_uname=''
391 d_gethostprotos=''
392 d_getitimer=''
393 d_getlogin=''
394 d_getmnt=''
395 d_getmntent=''
396 d_getnbyaddr=''
397 d_getnbyname=''
398 d_getnent=''
399 d_getnetprotos=''
400 d_getpagsz=''
401 d_getpent=''
402 d_getpgid=''
403 d_getpgrp2=''
404 d_bsdgetpgrp=''
405 d_getpgrp=''
406 d_getppid=''
407 d_getprior=''
408 d_getpbyname=''
409 d_getpbynumber=''
410 d_getprotoprotos=''
411 d_getprpwnam=''
412 d_getpwent=''
413 d_getsent=''
414 d_getservprotos=''
415 d_getspnam=''
416 d_getsbyname=''
417 d_getsbyport=''
418 d_gnulibc=''
419 d_hasmntopt=''
420 d_htonl=''
421 d_iconv=''
422 d_inetaton=''
423 d_int64_t=''
424 d_isascii=''
425 d_isnan=''
426 d_isnanl=''
427 d_killpg=''
428 d_lchown=''
429 d_ldbl_dig=''
430 d_link=''
431 d_locconv=''
432 d_lockf=''
433 d_longdbl=''
434 longdblsize=''
435 d_longlong=''
436 longlongsize=''
437 d_lseekproto=''
438 d_lstat=''
439 d_madvise=''
440 d_mblen=''
441 d_mbstowcs=''
442 d_mbtowc=''
443 d_memchr=''
444 d_memcmp=''
445 d_memcpy=''
446 d_memmove=''
447 d_memset=''
448 d_mkdir=''
449 d_mkdtemp=''
450 d_mkfifo=''
451 d_mkstemp=''
452 d_mkstemps=''
453 d_mktime=''
454 d_mmap=''
455 mmaptype=''
456 d_modfl=''
457 d_modfl_pow32_bug=''
458 d_mprotect=''
459 d_msg=''
460 d_msgctl=''
461 d_msgget=''
462 d_msghdr_s=''
463 d_msgrcv=''
464 d_msgsnd=''
465 d_msync=''
466 d_munmap=''
467 d_nice=''
468 d_off64_t=''
469 d_open3=''
470 d_fpathconf=''
471 d_pathconf=''
472 d_pause=''
473 d_pipe=''
474 d_poll=''
475 d_portable=''
476 d_old_pthread_create_joinable=''
477 old_pthread_create_joinable=''
478 d_pthread_yield=''
479 d_sched_yield=''
480 sched_yield=''
481 d_qgcvt=''
482 d_readdir=''
483 d_rewinddir=''
484 d_seekdir=''
485 d_telldir=''
486 d_readlink=''
487 d_readv=''
488 d_realpath=''
489 d_recvmsg=''
490 d_rename=''
491 d_rmdir=''
492 d_safebcpy=''
493 d_safemcpy=''
494 d_sanemcmp=''
495 d_sbrkproto=''
496 d_select=''
497 d_sem=''
498 d_semctl=''
499 d_semget=''
500 d_semop=''
501 d_sendmsg=''
502 d_setegid=''
503 d_seteuid=''
504 d_setgrent=''
505 d_setgrps=''
506 d_sethent=''
507 d_setitimer=''
508 d_setlinebuf=''
509 d_setlocale=''
510 d_setnent=''
511 d_setpent=''
512 d_setpgid=''
513 d_setpgrp2=''
514 d_bsdsetpgrp=''
515 d_setpgrp=''
516 d_setprior=''
517 d_setproctitle=''
518 d_setpwent=''
519 d_setregid=''
520 d_setresgid=''
521 d_setresuid=''
522 d_setreuid=''
523 d_setrgid=''
524 d_setruid=''
525 d_setsent=''
526 d_setsid=''
527 d_setvbuf=''
528 d_sfio=''
529 usesfio=''
530 d_shm=''
531 d_shmat=''
532 d_shmatprototype=''
533 shmattype=''
534 d_shmctl=''
535 d_shmdt=''
536 d_shmget=''
537 d_sigaction=''
538 d_sigprocmask=''
539 d_sigsetjmp=''
540 d_sockatmark=''
541 d_sockatmarkproto=''
542 d_msg_ctrunc=''
543 d_msg_dontroute=''
544 d_msg_oob=''
545 d_msg_peek=''
546 d_msg_proxy=''
547 d_oldsock=''
548 d_scm_rights=''
549 d_socket=''
550 d_sockpair=''
551 sockethdr=''
552 socketlib=''
553 d_socklen_t=''
554 d_socks5_init=''
555 d_sqrtl=''
556 d_sresgproto=''
557 d_sresuproto=''
558 d_statblks=''
559 d_statfs_f_flags=''
560 d_statfs_s=''
561 d_fstatvfs=''
562 d_statvfs=''
563 d_stdio_cnt_lval=''
564 d_stdio_ptr_lval=''
565 d_stdio_ptr_lval_nochange_cnt=''
566 d_stdio_ptr_lval_sets_cnt=''
567 d_stdiobase=''
568 d_stdstdio=''
569 stdio_base=''
570 stdio_bufsiz=''
571 stdio_cnt=''
572 stdio_filbuf=''
573 stdio_ptr=''
574 d_index=''
575 d_strchr=''
576 d_strcoll=''
577 d_strctcpy=''
578 d_strerrm=''
579 d_strerror=''
580 d_sysernlst=''
581 d_syserrlst=''
582 d_strftime=''
583 d_strtod=''
584 d_strtol=''
585 d_strtold=''
586 d_strtoll=''
587 d_strtoq=''
588 d_strtoul=''
589 d_strtoull=''
590 d_strtouq=''
591 d_strxfrm=''
592 d_symlink=''
593 d_syscall=''
594 d_syscallproto=''
595 d_sysconf=''
596 d_system=''
597 d_tcgetpgrp=''
598 d_tcsetpgrp=''
599 d_telldirproto=''
600 d_time=''
601 timetype=''
602 clocktype=''
603 d_times=''
604 d_truncate=''
605 d_tzname=''
606 d_u32align=''
607 d_ualarm=''
608 d_umask=''
609 d_semctl_semid_ds=''
610 d_semctl_semun=''
611 d_union_semun=''
612 d_usleep=''
613 d_usleepproto=''
614 d_ustat=''
615 d_vfork=''
616 usevfork=''
617 d_voidsig=''
618 signal_t=''
619 d_volatile=''
620 d_charvspr=''
621 d_vprintf=''
622 d_wait4=''
623 d_waitpid=''
624 d_wcstombs=''
625 d_wctomb=''
626 d_writev=''
627 dlext=''
628 cccdlflags=''
629 ccdlflags=''
630 dlsrc=''
631 ld=''
632 lddlflags=''
633 usedl=''
634 doublesize=''
635 ebcdic=''
636 fflushNULL=''
637 fflushall=''
638 fpossize=''
639 fpostype=''
640 gccosandvers=''
641 gccversion=''
642 gidformat=''
643 gidsign=''
644 gidsize=''
645 gidtype=''
646 groupstype=''
647 h_fcntl=''
648 h_sysfile=''
649 i_arpainet=''
650 db_hashtype=''
651 db_prefixtype=''
652 db_version_major=''
653 db_version_minor=''
654 db_version_patch=''
655 i_db=''
656 i_dbm=''
657 i_rpcsvcdbm=''
658 d_dirnamlen=''
659 direntrytype=''
660 i_dirent=''
661 i_dld=''
662 i_dlfcn=''
663 i_fcntl=''
664 i_float=''
665 i_gdbm=''
666 d_grpasswd=''
667 i_grp=''
668 i_iconv=''
669 i_ieeefp=''
670 i_inttypes=''
671 i_libutil=''
672 i_limits=''
673 i_locale=''
674 i_machcthr=''
675 i_malloc=''
676 i_math=''
677 i_memory=''
678 i_mntent=''
679 i_ndbm=''
680 i_netdb=''
681 i_neterrno=''
682 i_netinettcp=''
683 i_niin=''
684 i_sysin=''
685 i_poll=''
686 i_prot=''
687 i_pthread=''
688 d_pwage=''
689 d_pwchange=''
690 d_pwclass=''
691 d_pwcomment=''
692 d_pwexpire=''
693 d_pwgecos=''
694 d_pwpasswd=''
695 d_pwquota=''
696 i_pwd=''
697 i_sfio=''
698 i_shadow=''
699 i_socks=''
700 i_stddef=''
701 i_stdlib=''
702 i_string=''
703 strings=''
704 i_sunmath=''
705 i_sysaccess=''
706 i_sysdir=''
707 i_sysfile=''
708 d_voidtty=''
709 i_bsdioctl=''
710 i_sysfilio=''
711 i_sysioctl=''
712 i_syssockio=''
713 i_syslog=''
714 i_sysmman=''
715 i_sysmode=''
716 i_sysmount=''
717 i_sysndir=''
718 i_sysparam=''
719 i_sysresrc=''
720 i_syssecrt=''
721 i_sysselct=''
722 i_sysstat=''
723 i_sysstatfs=''
724 i_sysstatvfs=''
725 i_systimes=''
726 i_systypes=''
727 i_sysuio=''
728 i_sysun=''
729 i_sysutsname=''
730 i_sysvfs=''
731 i_syswait=''
732 i_sgtty=''
733 i_termio=''
734 i_termios=''
735 i_systime=''
736 i_systimek=''
737 i_time=''
738 timeincl=''
739 i_unistd=''
740 i_ustat=''
741 i_utime=''
742 i_values=''
743 i_stdarg=''
744 i_varargs=''
745 i_varhdr=''
746 i_vfork=''
747 inc_version_list=''
748 inc_version_list_init=''
749 installprefix=''
750 installprefixexp=''
751 installstyle=''
752 installusrbinperl=''
753 intsize=''
754 longsize=''
755 shortsize=''
756 issymlink=''
757 libc=''
758 ldlibpthname=''
759 libperl=''
760 shrpenv=''
761 useshrplib=''
762 glibpth=''
763 libpth=''
764 loclibpth=''
765 plibpth=''
766 xlibpth=''
767 ignore_versioned_solibs=''
768 libs=''
769 libsdirs=''
770 libsfiles=''
771 libsfound=''
772 libspath=''
773 lns=''
774 d_PRIEUldbl=''
775 d_PRIFUldbl=''
776 d_PRIGUldbl=''
777 d_PRIeldbl=''
778 d_PRIfldbl=''
779 d_PRIgldbl=''
780 d_SCNfldbl=''
781 sPRIEUldbl=''
782 sPRIFUldbl=''
783 sPRIGUldbl=''
784 sPRIeldbl=''
785 sPRIfldbl=''
786 sPRIgldbl=''
787 sSCNfldbl=''
788 lseeksize=''
789 lseektype=''
790 make_set_make=''
791 d_mymalloc=''
792 freetype=''
793 mallocobj=''
794 mallocsrc=''
795 malloctype=''
796 usemymalloc=''
797 installman1dir=''
798 man1dir=''
799 man1direxp=''
800 man1ext=''
801 installman3dir=''
802 man3dir=''
803 man3direxp=''
804 man3ext=''
805 modetype=''
806 multiarch=''
807 mydomain=''
808 myhostname=''
809 phostname=''
810 c=''
811 n=''
812 d_eofnblk=''
813 eagain=''
814 o_nonblock=''
815 rd_nodata=''
816 need_va_copy=''
817 netdb_hlen_type=''
818 netdb_host_type=''
819 netdb_name_type=''
820 netdb_net_type=''
821 groupcat=''
822 hostcat=''
823 passcat=''
824 orderlib=''
825 ranlib=''
826 d_perl_otherlibdirs=''
827 otherlibdirs=''
828 package=''
829 spackage=''
830 pager=''
831 api_revision=''
832 api_subversion=''
833 api_version=''
834 api_versionstring=''
835 patchlevel=''
836 perl_patchlevel=''
837 revision=''
838 subversion=''
839 version=''
840 perl5=''
841 perladmin=''
842 perlpath=''
843 d_nv_preserves_uv=''
844 d_nv_preserves_uv_bits=''
845 i16size=''
846 i16type=''
847 i32size=''
848 i32type=''
849 i64size=''
850 i64type=''
851 i8size=''
852 i8type=''
853 ivsize=''
854 ivtype=''
855 nvsize=''
856 nvtype=''
857 u16size=''
858 u16type=''
859 u32size=''
860 u32type=''
861 u64size=''
862 u64type=''
863 u8size=''
864 u8type=''
865 uvsize=''
866 uvtype=''
867 ivdformat=''
868 nvEUformat=''
869 nvFUformat=''
870 nvGUformat=''
871 nveformat=''
872 nvfformat=''
873 nvgformat=''
874 uvXUformat=''
875 uvoformat=''
876 uvuformat=''
877 uvxformat=''
878 pidtype=''
879 prefix=''
880 prefixexp=''
881 installprivlib=''
882 privlib=''
883 privlibexp=''
884 prototype=''
885 ptrsize=''
886 d_PRIXU64=''
887 d_PRId64=''
888 d_PRIi64=''
889 d_PRIo64=''
890 d_PRIu64=''
891 d_PRIx64=''
892 sPRIXU64=''
893 sPRId64=''
894 sPRIi64=''
895 sPRIo64=''
896 sPRIu64=''
897 sPRIx64=''
898 d_quad=''
899 quadkind=''
900 quadtype=''
901 uquadtype=''
902 drand01=''
903 randbits=''
904 randfunc=''
905 randseedtype=''
906 seedfunc=''
907 installscript=''
908 scriptdir=''
909 scriptdirexp=''
910 selectminbits=''
911 selecttype=''
912 sh=''
913 sig_count=''
914 sig_name=''
915 sig_name_init=''
916 sig_num=''
917 sig_num_init=''
918 sig_size=''
919 installsitearch=''
920 sitearch=''
921 sitearchexp=''
922 installsitebin=''
923 sitebin=''
924 sitebinexp=''
925 installsitelib=''
926 sitelib=''
927 sitelib_stem=''
928 sitelibexp=''
929 siteprefix=''
930 siteprefixexp=''
931 sizesize=''
932 sizetype=''
933 so=''
934 socksizetype=''
935 sharpbang=''
936 shsharp=''
937 spitshell=''
938 src=''
939 ssizetype=''
940 startperl=''
941 startsh=''
942 stdchar=''
943 d_stdio_stream_array=''
944 stdio_stream_array=''
945 sysman=''
946 trnl=''
947 uidformat=''
948 uidsign=''
949 uidsize=''
950 uidtype=''
951 archname64=''
952 use64bitall=''
953 use64bitint=''
954 ccflags_uselargefiles=''
955 ldflags_uselargefiles=''
956 libswanted_uselargefiles=''
957 uselargefiles=''
958 uselongdouble=''
959 usemorebits=''
960 usemultiplicity=''
961 nm_opt=''
962 nm_so_opt=''
963 runnm=''
964 usenm=''
965 useperlio=''
966 usesocks=''
967 d_oldpthreads=''
968 use5005threads=''
969 useithreads=''
970 usereentrant=''
971 usethreads=''
972 incpath=''
973 mips_type=''
974 usrinc=''
975 d_vendorarch=''
976 installvendorarch=''
977 vendorarch=''
978 vendorarchexp=''
979 d_vendorbin=''
980 installvendorbin=''
981 vendorbin=''
982 vendorbinexp=''
983 d_vendorlib=''
984 installvendorlib=''
985 vendorlib=''
986 vendorlib_stem=''
987 vendorlibexp=''
988 usevendorprefix=''
989 vendorprefix=''
990 vendorprefixexp=''
991 versiononly=''
992 defvoidused=''
993 voidflags=''
994 pm_apiversion=''
995 xs_apiversion=''
996 yacc=''
997 yaccflags=''
998 CONFIG=''
999
1000 define='define'
1001 undef='undef'
1002 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
1003 rmlist=''
1004
1005 : We must find out about Eunice early
1006 eunicefix=':'
1007 if test -f /etc/unixtovms; then
1008         eunicefix=/etc/unixtovms
1009 fi
1010 if test -f /etc/unixtovms.exe; then
1011         eunicefix=/etc/unixtovms.exe
1012 fi
1013
1014 i_whoami=''
1015 ccname=''
1016 ccversion=''
1017 perllibs=''
1018 : set useposix=false in your hint file to disable the POSIX extension.
1019 useposix=true
1020 : set useopcode=false in your hint file to disable the Opcode extension.
1021 useopcode=true
1022 : Trailing extension.  Override this in a hint file, if needed.
1023 _exe=''
1024 : Extra object files, if any, needed on this platform.
1025 archobjs=''
1026 archname=''
1027 : Possible local include directories to search.
1028 : Set locincpth to "" in a hint file to defeat local include searches.
1029 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
1030 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
1031 :
1032 : no include file wanted by default
1033 inclwanted=''
1034
1035 groupstype=''
1036 libnames=''
1037 : change the next line if compiling for Xenix/286 on Xenix/386
1038 xlibpth='/usr/lib/386 /lib/386'
1039 : Possible local library directories to search.
1040 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1041 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1042
1043 : general looking path for locating libraries
1044 glibpth="/lib /usr/lib $xlibpth"
1045 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1046 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1047 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1048
1049 : Private path used by Configure to find libraries.  Its value
1050 : is prepended to libpth. This variable takes care of special
1051 : machines, like the mips.  Usually, it should be empty.
1052 plibpth=''
1053
1054 : default library list
1055 libswanted=''
1056 : some systems want to use only the non-versioned libso:s
1057 ignore_versioned_solibs=''
1058 archname64=''
1059 ccflags_uselargefiles=''
1060 ldflags_uselargefiles=''
1061 libswanted_uselargefiles=''
1062 : set usemultiplicity on the Configure command line to enable multiplicity.
1063 : set usesocks on the Configure command line to enable socks.
1064 : set usethreads on the Configure command line to enable threads.
1065 usereentrant='undef'
1066 : full support for void wanted by default
1067 defvoidused=15
1068
1069 : List of libraries we want.
1070 : If anyone needs -lnet, put it in a hint file.
1071 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1072 libswanted="$libswanted dld ld sun m c cposix posix"
1073 libswanted="$libswanted ndir dir crypt sec"
1074 libswanted="$libswanted ucb bsd BSD PW x iconv util"
1075 : We probably want to search /usr/shlib before most other libraries.
1076 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1077 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1078 glibpth="/usr/shlib $glibpth"
1079 : Do not use vfork unless overridden by a hint file.
1080 usevfork=false
1081
1082 : Find the basic shell for Bourne shell scripts
1083 case "$sh" in
1084 '')
1085         case "$SYSTYPE" in
1086         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1087         *) xxx='/bin/sh';;
1088         esac
1089         if test -f "$xxx"; then
1090                 sh="$xxx"
1091         else
1092                 : Build up a list and do a single loop so we can 'break' out.
1093                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1094                 for xxx in sh bash ksh pdksh ash; do
1095                         for p in $pth; do
1096                                 try="$try ${p}/${xxx}"
1097                         done
1098                 done
1099                 for xxx in $try; do
1100                         if test -f "$xxx"; then
1101                                 sh="$xxx";
1102                                 break
1103                         elif test -f "$xxx.exe"; then
1104                                 sh="$xxx";
1105                                 break
1106                         fi
1107                 done
1108         fi
1109         ;;
1110 esac
1111
1112 case "$sh" in
1113 '')     cat <<EOM >&2
1114 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1115
1116 Usually it's in /bin/sh.  How did you even get this far?
1117 Please contact me (Perl Maintainers) at perlbug@perl.org and 
1118 we'll try to straighten this all out.
1119 EOM
1120         exit 1
1121         ;;
1122 esac
1123
1124 : see if sh knows # comments
1125 if `$sh -c '#' >/dev/null 2>&1`; then
1126         shsharp=true
1127         spitshell=cat
1128         xcat=/bin/cat
1129         test -f $xcat || xcat=/usr/bin/cat
1130         echo "#!$xcat" >sharp
1131         $eunicefix sharp
1132         chmod +x sharp
1133         ./sharp > today
1134         if test -s today; then
1135                 sharpbang='#!'
1136         else
1137                 echo "#! $xcat" > sharp
1138                 $eunicefix sharp
1139                 chmod +x sharp
1140                 ./sharp > today
1141                 if test -s today; then
1142                         sharpbang='#! '
1143                 else
1144                         sharpbang=': use '
1145                 fi
1146         fi
1147 else
1148         echo " "
1149         echo "Your $sh doesn't grok # comments--I will strip them later on."
1150         shsharp=false
1151         cd ..
1152         echo "exec grep -v '^[  ]*#'" >spitshell
1153         chmod +x spitshell
1154         $eunicefix spitshell
1155         spitshell=`pwd`/spitshell
1156         cd UU
1157         echo "I presume that if # doesn't work, #! won't work either!"
1158         sharpbang=': use '
1159 fi
1160 rm -f sharp today
1161
1162 : figure out how to guarantee sh startup
1163 case "$startsh" in
1164 '') startsh=${sharpbang}${sh} ;;
1165 *)
1166 esac
1167 cat >sharp <<EOSS
1168 $startsh
1169 set abc
1170 test "$?abc" != 1
1171 EOSS
1172
1173 chmod +x sharp
1174 $eunicefix sharp
1175 if ./sharp; then
1176         : echo "Yup, it does."
1177 else
1178         echo "Hmm... '$startsh' does not guarantee sh startup..."
1179         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1180 fi
1181 rm -f sharp
1182
1183
1184 : Save command line options in file UU/cmdline.opt for later use in
1185 : generating config.sh.
1186 cat > cmdline.opt <<EOSH
1187 # Configure command line arguments.
1188 config_arg0='$0'
1189 config_args='$*'
1190 config_argc=$#
1191 EOSH
1192 argn=1
1193 for arg in "$@"; do
1194         cat >>cmdline.opt <<EOSH
1195 config_arg$argn='$arg'
1196 EOSH
1197         argn=`expr $argn + 1`
1198 done
1199
1200 : produce awk script to parse command line options
1201 cat >options.awk <<'EOF'
1202 BEGIN {
1203         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1204
1205         len = length(optstr);
1206         for (i = 1; i <= len; i++) {
1207                 c = substr(optstr, i, 1);
1208                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1209                 if (a == ":") {
1210                         arg[c] = 1;
1211                         i++;
1212                 }
1213                 opt[c] = 1;
1214         }
1215 }
1216 {
1217         expect = 0;
1218         str = $0;
1219         if (substr(str, 1, 1) != "-") {
1220                 printf("'%s'\n", str);
1221                 next;
1222         }
1223         len = length($0);
1224         for (i = 2; i <= len; i++) {
1225                 c = substr(str, i, 1);
1226                 if (!opt[c]) {
1227                         printf("-%s\n", substr(str, i));
1228                         next;
1229                 }
1230                 printf("-%s\n", c);
1231                 if (arg[c]) {
1232                         if (i < len)
1233                                 printf("'%s'\n", substr(str, i + 1));
1234                         else
1235                                 expect = 1;
1236                         next;
1237                 }
1238         }
1239 }
1240 END {
1241         if (expect)
1242                 print "?";
1243 }
1244 EOF
1245
1246 : process the command line options
1247 set X `for arg in "$@"; do echo "X$arg"; done |
1248         sed -e s/X// | awk -f options.awk`
1249 eval "set $*"
1250 shift
1251 rm -f options.awk
1252
1253 : set up default values
1254 fastread=''
1255 reuseval=false
1256 config_sh=''
1257 alldone=''
1258 error=''
1259 silent=''
1260 extractsh=''
1261 override=''
1262 knowitall=''
1263 rm -f optdef.sh posthint.sh
1264 cat >optdef.sh <<EOS
1265 $startsh
1266 EOS
1267
1268
1269 : option parsing
1270 while test $# -gt 0; do
1271         case "$1" in
1272         -d) shift; fastread=yes;;
1273         -e) shift; alldone=cont;;
1274         -f)
1275                 shift
1276                 cd ..
1277                 if test -r "$1"; then
1278                         config_sh="$1"
1279                 else
1280                         echo "$me: cannot read config file $1." >&2
1281                         error=true
1282                 fi
1283                 cd UU
1284                 shift;;
1285         -h) shift; error=true;;
1286         -r) shift; reuseval=true;;
1287         -s) shift; silent=true; realsilent=true;;
1288         -E) shift; alldone=exit;;
1289         -K) shift; knowitall=true;;
1290         -O) shift; override=true;;
1291         -S) shift; silent=true; extractsh=true;;
1292         -D)
1293                 shift
1294                 case "$1" in
1295                 *=)
1296                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1297                         echo "$me: ignoring -D $1" >&2
1298                         ;;
1299                 *=*) echo "$1" | \
1300                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1301                 *) echo "$1='define'" >> optdef.sh;;
1302                 esac
1303                 shift
1304                 ;;
1305         -U)
1306                 shift
1307                 case "$1" in
1308                 *=) echo "$1" >> optdef.sh;;
1309                 *=*)
1310                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1311                         echo "$me: ignoring -U $1" >&2
1312                         ;;
1313                 *) echo "$1='undef'" >> optdef.sh;;
1314                 esac
1315                 shift
1316                 ;;
1317         -A)
1318             shift
1319             xxx=''
1320             yyy="$1"
1321             zzz=''
1322             uuu=undef
1323             case "$yyy" in
1324             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1325                  case "$zzz" in
1326                  *:*) zzz='' ;;
1327                  *)   xxx=append
1328                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1329                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1330                  esac
1331                  ;;
1332             esac
1333             case "$xxx" in
1334             '')  case "$yyy" in
1335                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1336                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1337                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1338                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1339                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1340                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1341                  esac
1342                  ;;       
1343             esac
1344             case "$xxx" in
1345             append)
1346                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1347             clear)
1348                 echo "$yyy=''"                  >> posthint.sh ;;
1349             define)
1350                 case "$zzz" in
1351                 '') zzz=define ;;
1352                 esac
1353                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1354             eval)
1355                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1356             prepend)
1357                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1358             undef)
1359                 case "$zzz" in
1360                 '') zzz="$uuu" ;;
1361                 esac
1362                 echo "$yyy=$zzz"                >> posthint.sh ;;
1363             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1364             esac
1365             shift
1366             ;;
1367         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1368             exit 0;;
1369         --) break;;
1370         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1371         *) break;;
1372         esac
1373 done
1374
1375 case "$error" in
1376 true)
1377         cat >&2 <<EOM
1378 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1379                  [-U symbol] [-U symbol=] [-A command:symbol...]
1380   -d : use defaults for all answers.
1381   -e : go on without questioning past the production of config.sh.
1382   -f : specify an alternate default configuration file.
1383   -h : print this help message and exit (with an error status).
1384   -r : reuse C symbols value if possible (skips costly nm extraction).
1385   -s : silent mode, only echoes questions and essential information.
1386   -D : define symbol to have some value:
1387          -D symbol         symbol gets the value 'define'
1388          -D symbol=value   symbol gets the value 'value'
1389   -E : stop at the end of questions, after having produced config.sh.
1390   -K : do not use unless you know what you are doing.
1391   -O : let -D and -U override definitions from loaded configuration file.
1392   -S : perform variable substitutions on all .SH files (can mix with -f)
1393   -U : undefine symbol:
1394          -U symbol    symbol gets the value 'undef'
1395          -U symbol=   symbol gets completely empty
1396   -A : manipulate symbol after the platform specific hints have been applied:
1397          -A symbol=value                append " "value to symbol
1398          -A append:symbol=value         append value to symbol
1399          -A define:symbol=value         define symbol to have value
1400          -A clear:symbol                define symbol to be ''
1401          -A define:symbol               define symbol to be 'define'
1402          -A eval:symbol=value           define symbol to be eval of value
1403          -A prepend:symbol=value        prepend value to symbol
1404          -A undef:symbol                define symbol to be 'undef'
1405          -A undef:symbol=               define symbol to be ''
1406   -V : print version number and exit (with a zero status).
1407 EOM
1408         exit 1
1409         ;;
1410 esac
1411
1412 : Sanity checks
1413 case "$fastread$alldone" in
1414 yescont|yesexit) ;;
1415 *)
1416         case "$extractsh" in
1417         true) ;;
1418         *)
1419                 if test ! -t 0; then
1420                         echo "Say 'sh Configure', not 'sh <Configure'"
1421                         exit 1
1422                 fi
1423                 ;;
1424         esac
1425         ;;
1426 esac
1427
1428 exec 4>&1
1429 case "$silent" in
1430 true) exec 1>/dev/null;;
1431 esac
1432
1433 : run the defines and the undefines, if any, but leave the file out there...
1434 touch optdef.sh
1435 . ./optdef.sh
1436 : create the posthint manipulation script and leave the file out there...
1437 touch posthint.sh
1438
1439 : set package name
1440 package=perl5
1441 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1442 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1443 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1444 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1445 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1446 esac
1447
1448 : Some greps do not return status, grrr.
1449 echo "grimblepritz" >grimble
1450 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1451         contains=contains
1452 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1453         contains=grep
1454 else
1455         contains=contains
1456 fi
1457 rm -f grimble
1458 : the following should work in any shell
1459 case "$contains" in
1460 contains*)
1461         echo " "
1462         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1463         cat >contains <<'EOSS'
1464 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1465 EOSS
1466 chmod +x contains
1467 esac
1468
1469 : Find the path to the source tree
1470 case "$src" in
1471 '') case "$0" in
1472     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1473          case "$src" in
1474          /*)    ;;
1475          .)     ;;
1476          *)     src=`cd ../$src && pwd` ;;
1477          esac
1478          ;;
1479     *)   src='.';;
1480     esac;;
1481 esac
1482 case "$src" in
1483 '')     src=/
1484         rsrc=/
1485         ;;
1486 /*) rsrc="$src";;
1487 *) rsrc="../$src";;
1488 esac
1489 if test -f $rsrc/Configure && \
1490         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1491 then
1492    : found it, so we are ok.
1493 else
1494         rsrc=''
1495         for src in . .. ../.. ../../.. ../../../..; do
1496                 if test -f ../$src/Configure && \
1497                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1498                 then
1499                         rsrc=../$src
1500                         break
1501                 fi
1502         done
1503 fi
1504 case "$rsrc" in
1505 '')
1506         cat <<EOM >&4
1507
1508 Sorry, I can't seem to locate the source dir for $package.  Please start
1509 Configure with an explicit path -- i.e. /some/path/Configure.
1510
1511 EOM
1512         exit 1
1513         ;;
1514 ../.)   rsrc='..';;
1515 *)
1516         echo " "
1517         echo "Sources for $package found in \"$src\"." >&4
1518         ;;
1519 esac
1520
1521 : script used to extract .SH files with variable substitutions
1522 cat >extract <<'EOS'
1523 PERL_CONFIG_SH=true
1524 echo "Doing variable substitutions on .SH files..."
1525 if test -f MANIFEST; then
1526         set x `awk '{print $1}' < MANIFEST | grep '\.SH$'`
1527 else
1528         echo "(Looking for .SH files under the source directory.)"
1529         set x `(cd $src; find . -name "*.SH" -print)`
1530 fi
1531 shift
1532 case $# in
1533 0) set x `(cd $src; echo *.SH)`; shift;;
1534 esac
1535 if test ! -f $src/$1; then
1536         shift
1537 fi
1538 mkdir_p='
1539 name=$1;
1540 create="";
1541 while test $name; do
1542         if test ! -d "$name"; then
1543                 create="$name $create";
1544                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1545                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1546         else
1547                 name="";
1548         fi;
1549 done;
1550 for file in $create; do
1551         mkdir $file;
1552 done
1553 '
1554 for file in $*; do
1555         case "$src" in
1556         ".")
1557                 case "$file" in
1558                 */*)
1559                         dir=`expr X$file : 'X\(.*\)/'`
1560                         file=`expr X$file : 'X.*/\(.*\)'`
1561                         (cd $dir && . ./$file)
1562                         ;;
1563                 *)
1564                         . ./$file
1565                         ;;
1566                 esac
1567                 ;;
1568         *)
1569                 case "$file" in
1570                 */*)
1571                         dir=`expr X$file : 'X\(.*\)/'`
1572                         file=`expr X$file : 'X.*/\(.*\)'`
1573                         (set x $dir; shift; eval $mkdir_p)
1574                         sh <$src/$dir/$file
1575                         ;;
1576                 *)
1577                         sh <$src/$file
1578                         ;;
1579                 esac
1580                 ;;
1581         esac
1582 done
1583 if test -f $src/config_h.SH; then
1584         if test ! -f config.h; then
1585         : oops, they left it out of MANIFEST, probably, so do it anyway.
1586         . $src/config_h.SH
1587         fi
1588 fi
1589 EOS
1590
1591 : extract files and exit if asked to do so
1592 case "$extractsh" in
1593 true)
1594         case "$realsilent" in
1595         true) ;;
1596         *) exec 1>&4;;
1597         esac
1598         case "$config_sh" in
1599         '') config_sh='config.sh';;
1600         esac
1601         echo " "
1602         echo "Fetching answers from $config_sh..."
1603         cd ..
1604         . $config_sh
1605         test "$override" && . ./optdef.sh
1606         echo " "
1607         . UU/extract
1608         rm -rf UU
1609         echo "Extraction done."
1610         exit 0
1611         ;;
1612 esac
1613
1614 : Eunice requires " " instead of "", can you believe it
1615 echo " "
1616 : Here we go...
1617 echo "Beginning of configuration questions for $package."
1618
1619 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1620
1621 : first determine how to suppress newline on echo command
1622 echo " "
1623 echo "Checking echo to see how to suppress newlines..."
1624 (echo "hi there\c" ; echo " ") >.echotmp
1625 if $contains c .echotmp >/dev/null 2>&1 ; then
1626         echo "...using -n."
1627         n='-n'
1628         c=''
1629 else
1630         cat <<'EOM'
1631 ...using \c
1632 EOM
1633         n=''
1634         c='\c'
1635 fi
1636 echo $n "The star should be here-->$c"
1637 echo '*'
1638 rm -f .echotmp
1639
1640 : Now test for existence of everything in MANIFEST
1641 echo " "
1642 if test -f $rsrc/MANIFEST; then
1643         echo "First let's make sure your kit is complete.  Checking..." >&4
1644         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1645         rm -f missing
1646         tmppwd=`pwd`
1647         for filelist in x??; do
1648                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1649         done
1650         if test -s missing; then
1651                 cat missing >&4
1652                 cat >&4 <<'EOM'
1653
1654 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1655
1656 You have the option of continuing the configuration process, despite the
1657 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1658 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1659 and contact the author (perlbug@perl.org).
1660
1661 EOM
1662                 echo $n "Continue? [n] $c" >&4
1663                 read ans
1664                 case "$ans" in
1665                 y*)
1666                         echo "Continuing..." >&4
1667                         rm -f missing
1668                         ;;
1669                 *)
1670                         echo "ABORTING..." >&4
1671                         kill $$
1672                         ;;
1673                 esac
1674         else
1675                 echo "Looks good..."
1676         fi
1677 else
1678         echo "There is no MANIFEST file.  I hope your kit is complete !"
1679 fi
1680 rm -f missing x??
1681
1682 echo " "
1683 : Find the appropriate value for a newline for tr
1684 if test -n "$DJGPP"; then
1685        trnl='\012'
1686 fi
1687 if test X"$trnl" = X; then
1688         case "`echo foo|tr '\n' x 2>/dev/null`" in
1689         foox) trnl='\n' ;;
1690         esac
1691 fi
1692 if test X"$trnl" = X; then
1693         case "`echo foo|tr '\012' x 2>/dev/null`" in
1694         foox) trnl='\012' ;;
1695         esac
1696 fi
1697 if test X"$trnl" = X; then
1698         cat <<EOM >&2
1699
1700 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1701
1702 EOM
1703         exit 1
1704 fi
1705
1706 : compute the number of columns on the terminal for proper question formatting
1707 case "$COLUMNS" in
1708 '') COLUMNS='80';;
1709 esac
1710
1711 : set up the echo used in my read
1712 myecho="case \"\$xxxm\" in
1713 '') echo $n \"\$rp $c\" >&4;;
1714 *) case \"\$rp\" in
1715         '') echo $n \"[\$xxxm] $c\";;
1716         *)
1717                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1718                         echo \"\$rp\" >&4
1719                         echo $n \"[\$xxxm] $c\" >&4
1720                 else
1721                         echo $n \"\$rp [\$xxxm] $c\" >&4
1722                 fi
1723                 ;;
1724         esac;;
1725 esac"
1726
1727 : now set up to do reads with possible shell escape and default assignment
1728 cat <<EOSC >myread
1729 $startsh
1730 xxxm=\$dflt
1731 $myecho
1732 ans='!'
1733 case "\$fastread" in
1734 yes) case "\$dflt" in
1735         '') ;;
1736         *) ans='';
1737                 case "\$silent-\$rp" in
1738                 true-) ;;
1739                 *) echo " " >&4;;
1740                 esac;;
1741         esac;;
1742 *) case "\$silent" in
1743         true) case "\$rp" in
1744                 '') ans='';;
1745                 esac;;
1746         esac;;
1747 esac
1748 while expr "X\$ans" : "X!" >/dev/null; do
1749         read answ
1750         set x \$xxxm
1751         shift
1752         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1753         case  "\$answ" in
1754         "!")
1755                 sh 1>&4
1756                 echo " "
1757                 $myecho
1758                 ;;
1759         !*)
1760                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1761                 shift
1762                 sh 1>&4 -c "\$*"
1763                 echo " "
1764                 $myecho
1765                 ;;
1766         "\$ans")
1767                 case "\$ans" in
1768                 \\&*)
1769                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1770                         shift
1771                         case "\$1" in
1772                         -d)
1773                                 fastread=yes
1774                                 echo "(OK, I'll run with -d after this question.)" >&4
1775                                 ;;
1776                         -*)
1777                                 echo "*** Sorry, \$1 not supported yet." >&4
1778                                 ;;
1779                         esac
1780                         $myecho
1781                         ans=!
1782                         ;;
1783                 esac;;
1784         *)
1785                 case "\$aok" in
1786                 y)
1787                         echo "*** Substitution done -- please confirm."
1788                         xxxm="\$ans"
1789                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1790                         xxxm="\$ans"
1791                         ans=!
1792                         ;;
1793                 *)
1794                         echo "*** Error -- try again."
1795                         ans=!
1796                         ;;
1797                 esac
1798                 $myecho
1799                 ;;
1800         esac
1801         case "\$ans\$xxxm\$nostick" in
1802         '')
1803                 ans=!
1804                 $myecho
1805                 ;;
1806         esac
1807 done
1808 case "\$ans" in
1809 '') ans="\$xxxm";;
1810 esac
1811 EOSC
1812
1813 : create .config dir to save info across Configure sessions
1814 test -d ../.config || mkdir ../.config
1815 cat >../.config/README <<EOF
1816 This directory created by Configure to save information that should
1817 persist across sessions for $package.
1818
1819 You may safely delete it if you wish.
1820 EOF
1821
1822 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
1823 case "$usedevel" in
1824 $define|true|[yY]*) ;;
1825 *) case "$xversion" in
1826    *[13579])
1827         cat >&4 <<EOH
1828 *** WHOA THERE!!! ***
1829
1830     This is an UNSTABLE DEVELOPMENT release.
1831     The version of this $package distribution is $xversion, that is, odd,
1832     (as opposed to even) and that signifies a development release.
1833     If you want a maintenance release, you want an even-numbered version.
1834
1835     Do ***NOT*** install this into production use.
1836     Data corruption and crashes are possible.
1837
1838     It is most seriously suggested that you do not continue any further
1839     unless you want to help in developing and debugging Perl.
1840
1841     If you *still* want to build perl, you can answer 'y' now,
1842     or pass -Dusedevel to Configure.
1843
1844 EOH
1845         rp='Do you really want to continue?'
1846         dflt='n'
1847         . ./myread
1848         case "$ans" in
1849         [yY]) echo >&4 "Okay, continuing."
1850               usedevel="$define" ;;
1851         *) echo >&4 "Okay, bye."
1852            exit 1
1853            ;;
1854         esac
1855         ;;
1856     esac
1857     ;;
1858 esac
1859 case "$usedevel" in
1860 $define|true|[yY]*)
1861         case "$versiononly" in
1862         '') versiononly="$define" ;;
1863         esac
1864         case "$installusrbinperl" in
1865         '') installusrbinperl="$undef" ;;
1866         esac
1867         ;;
1868 esac
1869
1870 : general instructions
1871 needman=true
1872 firsttime=true
1873 user=`(logname) 2>/dev/null`
1874 case "$user" in
1875 '') user=`whoami 2>&1`;;
1876 esac
1877 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1878         firsttime=false
1879         echo " "
1880         rp='Would you like to see the instructions?'
1881         dflt=n
1882         . ./myread
1883         case "$ans" in
1884         [yY]*) ;;
1885         *) needman=false;;
1886         esac
1887 fi
1888 if $needman; then
1889         cat <<EOH
1890
1891 This installation shell script will examine your system and ask you questions
1892 to determine how the perl5 package should be installed. If you get
1893 stuck on a question, you may use a ! shell escape to start a subshell or
1894 execute a command.  Many of the questions will have default answers in square
1895 brackets; typing carriage return will give you the default.
1896
1897 On some of the questions which ask for file or directory names you are allowed
1898 to use the ~name construct to specify the login directory belonging to "name",
1899 even if you don't have a shell which knows about that.  Questions where this is
1900 allowed will be marked "(~name ok)".
1901
1902 EOH
1903         rp=''
1904         dflt='Type carriage return to continue'
1905         . ./myread
1906         cat <<'EOH'
1907
1908 The prompter used in this script allows you to use shell variables and
1909 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1910 in the default answer, as if the default line was a set of arguments given to a
1911 script shell.  This means you may also use $* to repeat the whole default line,
1912 so you do not have to re-type everything to add something to the default.
1913
1914 Everytime there is a substitution, you will have to confirm.  If there is an
1915 error (e.g. an unmatched backtick), the default answer will remain unchanged
1916 and you will be prompted again.
1917
1918 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1919 the questions and use the computed defaults (or the previous answers if there
1920 was already a config.sh file). Type 'Configure -h' for a list of options.
1921 You may also start interactively and then answer '& -d' at any prompt to turn
1922 on the non-interactive behaviour for the remainder of the execution.
1923
1924 EOH
1925         . ./myread
1926         cat <<EOH
1927
1928 Much effort has been expended to ensure that this shell script will run on any
1929 Unix system.  If despite that it blows up on yours, your best bet is to edit
1930 Configure and run it again.  If you can't run Configure for some reason,
1931 you'll have to generate a config.sh file by hand.  Whatever problems you
1932 have, let me (perlbug@perl.org) know how I blew it.
1933
1934 This installation script affects things in two ways:
1935
1936 1) it may do direct variable substitutions on some of the files included
1937    in this kit.
1938 2) it builds a config.h file for inclusion in C programs.  You may edit
1939    any of these files as the need arises after running this script.
1940
1941 If you make a mistake on a question, there is no easy way to back up to it
1942 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1943 files.  Configure will offer to let you do this before it runs the SH files.
1944
1945 EOH
1946         dflt='Type carriage return to continue'
1947         . ./myread
1948         case "$firsttime" in
1949         true) echo $user >>../.config/instruct;;
1950         esac
1951 fi
1952
1953 : find out where common programs are
1954 echo " "
1955 echo "Locating common programs..." >&4
1956 cat <<EOSC >loc
1957 $startsh
1958 case \$# in
1959 0) exit 1;;
1960 esac
1961 thing=\$1
1962 shift
1963 dflt=\$1
1964 shift
1965 for dir in \$*; do
1966         case "\$thing" in
1967         .)
1968         if test -d \$dir/\$thing; then
1969                 echo \$dir
1970                 exit 0
1971         fi
1972         ;;
1973         *)
1974         for thisthing in \$dir/\$thing; do
1975                 : just loop through to pick last item
1976         done
1977         if test -f \$thisthing; then
1978                 echo \$thisthing
1979                 exit 0
1980         elif test -f \$dir/\$thing.exe; then
1981                 if test -n "$DJGPP"; then
1982                         echo \$dir/\$thing.exe
1983                 else
1984                         : on Eunice apparently
1985                         echo \$dir/\$thing
1986                 fi
1987                 exit 0
1988         fi
1989         ;;
1990         esac
1991 done
1992 echo \$dflt
1993 exit 1
1994 EOSC
1995 chmod +x loc
1996 $eunicefix loc
1997 loclist="
1998 awk
1999 cat
2000 comm
2001 cp
2002 echo
2003 expr
2004 grep
2005 ls
2006 make
2007 mkdir
2008 rm
2009 sed
2010 sort
2011 touch
2012 tr
2013 uniq
2014 "
2015 trylist="
2016 Mcc
2017 ar
2018 bison
2019 byacc
2020 cpp
2021 csh
2022 date
2023 egrep
2024 gzip
2025 less
2026 ln
2027 more
2028 nm
2029 nroff
2030 pg
2031 test
2032 uname
2033 zip
2034 "
2035 pth=`echo $PATH | sed -e "s/$p_/ /g"`
2036 pth="$pth /lib /usr/lib"
2037 for file in $loclist; do
2038         eval xxx=\$$file
2039         case "$xxx" in
2040         /*|?:[\\/]*)
2041                 if test -f "$xxx"; then
2042                         : ok
2043                 else
2044                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2045                         xxx=`./loc $file $file $pth`
2046                 fi
2047                 ;;
2048         '') xxx=`./loc $file $file $pth`;;
2049         *) xxx=`./loc $xxx $xxx $pth`;;
2050         esac
2051         eval $file=$xxx
2052         eval _$file=$xxx
2053         case "$xxx" in
2054         /*)
2055                 echo $file is in $xxx.
2056                 ;;
2057         ?:[\\/]*)
2058                 echo $file is in $xxx.
2059                 ;;
2060         *)
2061                 echo "I don't know where '$file' is, and my life depends on it." >&4
2062                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2063                 exit 1
2064                 ;;
2065         esac
2066 done
2067 echo " "
2068 echo "Don't worry if any of the following aren't found..."
2069 say=offhand
2070 for file in $trylist; do
2071         eval xxx=\$$file
2072         case "$xxx" in
2073         /*|?:[\\/]*)
2074                 if test -f "$xxx"; then
2075                         : ok
2076                 else
2077                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2078                         xxx=`./loc $file $file $pth`
2079                 fi
2080                 ;;
2081         '') xxx=`./loc $file $file $pth`;;
2082         *) xxx=`./loc $xxx $xxx $pth`;;
2083         esac
2084         eval $file=$xxx
2085         eval _$file=$xxx
2086         case "$xxx" in
2087         /*)
2088                 echo $file is in $xxx.
2089                 ;;
2090         ?:[\\/]*)
2091                 echo $file is in $xxx.
2092                 ;;
2093         *)
2094                 echo "I don't see $file out there, $say."
2095                 say=either
2096                 ;;
2097         esac
2098 done
2099 case "$egrep" in
2100 egrep)
2101         echo "Substituting grep for egrep."
2102         egrep=$grep
2103         ;;
2104 esac
2105 case "$ln" in
2106 ln)
2107         echo "Substituting cp for ln."
2108         ln=$cp
2109         ;;
2110 esac
2111 case "$test" in
2112 test)
2113         echo "Hopefully test is built into your sh."
2114         ;;
2115 *)
2116         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2117                 echo "Using the test built into your sh."
2118                 test=test
2119                 _test=test
2120         fi
2121         ;;
2122 esac
2123 case "$echo" in
2124 echo)
2125         echo "Hopefully echo is built into your sh."
2126         ;;
2127 '') ;;
2128 *)
2129         echo " "
2130 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2131         $echo $n "hi there$c" >foo1
2132         echo $n "hi there$c" >foo2
2133         if cmp foo1 foo2 >/dev/null 2>&1; then
2134                 echo "They are compatible.  In fact, they may be identical."
2135         else
2136                 case "$n" in
2137                 '-n') n='' c='\c';;
2138                 *) n='-n' c='';;
2139                 esac
2140                 cat <<FOO
2141 They are not compatible!  You are probably running ksh on a non-USG system.
2142 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2143 have echo built in and we may have to run some Bourne shell scripts.  That
2144 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2145
2146 FOO
2147                 $echo $n "The star should be here-->$c"
2148                 $echo "*"
2149         fi
2150         $rm -f foo1 foo2
2151         ;;
2152 esac
2153
2154 cat <<EOS >checkcc
2155 $startsh
2156 EOS
2157 cat <<'EOSC' >>checkcc
2158 case "$cc" in
2159 '') ;;
2160 *)  $rm -f try try.*
2161     $cat >try.c <<EOM
2162 int main(int argc, char *argv[]) {
2163   return 0;
2164 }
2165 EOM
2166     if $cc -o try $ccflags $ldflags try.c; then
2167        :
2168     else
2169         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2170         despair=yes
2171         trygcc=yes
2172         case "$cc" in
2173         *gcc*) trygcc=no ;;
2174         esac
2175         case "`$cc -v -c try.c 2>&1`" in
2176         *gcc*) trygcc=no ;;
2177         esac
2178         if $test X"$trygcc" = Xyes; then
2179             if gcc -o try -c try.c; then
2180                 echo " "
2181                 echo "You seem to have a working gcc, though." >&4
2182                 rp="Would you like to use it?"
2183                 dflt=y
2184                 if $test -f myread; then
2185                     . ./myread
2186                 else
2187                     if $test -f UU/myread; then
2188                         . ./UU/myread
2189                     else
2190                         echo "Cannot find myread, sorry.  Aborting." >&2
2191                         exit 1
2192                     fi
2193                 fi  
2194                 case "$ans" in
2195                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2196                 esac
2197             fi
2198         fi
2199         if $test X"$despair" = Xyes; then
2200             $cat >&4 <<EOM
2201 You need to find a working C compiler.
2202 Either (purchase and) install the C compiler supplied by your OS vendor,
2203 or for a free C compiler try http://gcc.gnu.org/
2204 I cannot continue any further, aborting.
2205 EOM
2206             exit 1
2207         fi
2208     fi
2209     $rm -f try try.*
2210     ;;
2211 esac
2212 EOSC
2213
2214 : determine whether symbolic links are supported
2215 echo " "
2216 $touch blurfl
2217 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2218         echo "Symbolic links are supported." >&4
2219         lns="$ln -s"
2220 else
2221         echo "Symbolic links are NOT supported." >&4
2222         lns="$ln"
2223 fi
2224 $rm -f blurfl sym
2225
2226 : determine whether symbolic links are supported
2227 echo " "
2228 case "$lns" in
2229 *"ln -s")
2230         echo "Checking how to test for symbolic links..." >&4
2231         $lns blurfl sym
2232         if $test "X$issymlink" = X; then
2233                 sh -c "PATH= test -h sym" >/dev/null 2>&1
2234                 if test $? = 0; then
2235                         issymlink="test -h"
2236                 fi              
2237         fi
2238         if $test "X$issymlink" = X; then
2239                 if  $test -h >/dev/null 2>&1; then
2240                         issymlink="$test -h"
2241                         echo "Your builtin 'test -h' may be broken, I'm using external '$test -h'." >&4
2242                 fi              
2243         fi
2244         if $test "X$issymlink" = X; then
2245                 if $test -L sym 2>/dev/null; then
2246                         issymlink="$test -L"
2247                 fi
2248         fi
2249         if $test "X$issymlink" != X; then
2250                 echo "You can test for symbolic links with '$issymlink'." >&4
2251         else
2252                 echo "I do not know how you can test for symbolic links." >&4
2253         fi
2254         $rm -f blurfl sym
2255         ;;
2256 *)      echo "No symbolic links, so not testing for their testing..." >&4
2257         ;;
2258 esac
2259 echo " "
2260
2261
2262 case "$mksymlinks" in
2263 $define|true|[yY]*)
2264         case "$src" in
2265         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2266                 exit 1
2267                 ;;
2268         *)      case "$lns:$issymlink" in
2269                 *"ln -s:"*"test -"?)
2270                         echo "Creating the symbolic links..." >&4
2271                         echo "(First creating the subdirectories...)" >&4
2272                         cd ..
2273                         awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | sort -u | while true; do
2274                                 read directory
2275                                 test -z "$directory" && break
2276                                 mkdir -p $directory
2277                         done
2278                         # Sanity check 1.
2279                         if test ! -d t/base; then
2280                                 echo "Failed to create the subdirectories.  Aborting." >&4
2281                                 exit 1
2282                         fi
2283                         echo "(Then creating the symlinks...)" >&4
2284                         awk '{print $1}' $src/MANIFEST | while true; do
2285                                 read filename
2286                                 test -z "$filename" && break
2287                                 if test -f $filename; then
2288                                         if $issymlink $filename; then
2289                                                 rm -f $filename
2290                                         fi
2291                                 fi
2292                                 if test -f $filename; then
2293                                         echo "$filename already exists, not symlinking."
2294                                 else
2295                                         ln -s $src/$filename $filename
2296                                 fi
2297                         done
2298                         # Sanity check 2.
2299                         if test ! -f t/base/commonsense.t; then
2300                                 echo "Failed to create the symlinks.  Aborting." >&4
2301                                 exit 1
2302                         fi
2303                         cd UU
2304                         ;;
2305                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2306                         ;;
2307                 esac
2308                 ;;
2309         esac
2310         ;;
2311 esac
2312
2313
2314 case "$usecrosscompile" in
2315 $define|true|[yY]*)
2316         $echo "Cross-compiling..."
2317         croak=''
2318         case "$cc" in
2319         *-*-gcc) # A cross-compiling gcc, probably.
2320             targetarch=`$echo $cc|$sed 's/-gcc$//'`
2321             ar=$targetarch-ar
2322             # leave out ld, choosing it is more complex
2323             nm=$targetarch-nm
2324             ranlib=$targetarch-ranlib
2325             $echo 'extern int foo;' > try.c
2326             set X `$cc -v -E perl.c 2>&1 | $awk '/^#include </,/^End of search /'|$grep '/include'`
2327             shift
2328             if $test $# -gt 0; then
2329                 incpth="$incpth $*"
2330                 incpth="$echo $incpth|$sed 's/^ //'"
2331                 echo "Guessing incpth $incpth" >&4
2332                 for i in $*; do
2333                     j=`$echo $i|$sed 's,/include$,/lib,'`
2334                     if $test -d $j; then
2335                         libpth="$libpth $j"
2336                     fi
2337                 done   
2338                 libpth="$echo $libpth|$sed 's/^ //'"
2339                 echo "Guessing libpth $libpth." >&4
2340             fi
2341             $rm -f try.c
2342             ;;
2343         esac
2344         case "$targetarch" in
2345         '') echo "Targetarch not defined." >&4; croak=y ;;
2346         *)  echo "Using targetarch $targetarch." >&4 ;;
2347         esac
2348         case "$incpth" in
2349         '') echo "Incpth not defined." >&4; croak=y ;;
2350         *)  echo "Using incpth $incpth." >&4 ;;
2351         esac
2352         case "$libpth" in
2353         '') echo "Libpth not defined." >&4; croak=y ;;
2354         *)  echo "Using libpth $libpth." >&4 ;;
2355         esac
2356         case "$usrinc" in
2357         '') for i in $incpth; do
2358                 if $test -f $i/errno.h -a -f $i/stdio.h -a -f $i/time.h; then
2359                     usrinc=$i
2360                     echo "Guessing usrinc $usrinc." >&4
2361                     break
2362                 fi
2363             done
2364             case "$usrinc" in
2365             '') echo "Usrinc not defined." >&4; croak=y ;;
2366             esac
2367             ;;
2368         *)  echo "Using usrinc $usrinc." >&4 ;;
2369         esac
2370         case "$targethost" in
2371         '') echo "Targethost not defined." >&4; croak=y ;;
2372         *)  echo "Using targethost $targethost." >&4
2373         esac
2374         locincpth=' '
2375         loclibpth=' '
2376         case "$croak" in
2377         y) echo "Cannot continue, aborting." >&4; exit 1 ;;
2378         esac
2379         case "$src" in
2380         /*) run=$src/Cross/run
2381             to=$src/Cross/to
2382             from=$src/Cross/from
2383             ;;
2384         *)  pwd=`$test -f ../Configure & cd ..; pwd`
2385             run=$pwd/Cross/run
2386             to=$pwd/Cross/to
2387             from=$pwd/Cross/from
2388             ;;
2389         esac
2390         case "$targetrun" in
2391         '') targetrun=ssh ;;
2392         esac
2393         case "$targetto" in
2394         '') targetto=scp ;;
2395         esac
2396         case "$targetfrom" in
2397         '') targetfrom=scp ;;
2398         esac
2399         run=$run-$targetrun
2400         to=$to-$targetto
2401         from=$from-$targetfrom
2402         case "$targetdir" in
2403         '')  targetdir=/tmp
2404              echo "Guessing targetdir $targetdir." >&4
2405              ;;
2406         esac
2407         case "$targetuser" in
2408         '')  targetuser=root
2409              echo "Guessing targetuser $targetuser." >&4
2410              ;;
2411         esac
2412         case "$targetfrom" in
2413         scp)    q=-q ;;
2414         *)      q='' ;;
2415         esac
2416         case "$targetrun" in
2417         ssh|rsh)
2418             cat >$run <<EOF
2419 #!/bin/sh
2420 exe=\$1
2421 shift
2422 $to \$exe
2423 $targetrun -l $targetuser $targethost "cd $targetdir && ./\$exe \$@"
2424 EOF
2425             ;;
2426         *)  echo "Unknown targetrun '$targetrun'" >&4
2427             exit 1
2428             ;;
2429         esac
2430         case "$targetto" in
2431         scp|rcp)
2432             cat >$to <<EOF
2433 #!/bin/sh
2434 for f in \$@
2435 do
2436   $targetto $q \$f $targetuser@$targethost:$targetdir/. || exit 1
2437 done
2438 exit 0
2439 EOF
2440             ;;
2441         cp) cat >$to <<EOF
2442 #!/bin/sh
2443 cp \$@ $targetdir/.
2444 EOF
2445             ;;
2446         *)  echo "Unknown targetto '$targetto'" >&4
2447             exit 1
2448             ;;
2449         esac
2450         case "$targetfrom" in
2451         scp|rcp)
2452           cat >$from <<EOF
2453 #!/bin/sh
2454 for f in \$@
2455 do
2456   $targetfrom $q $targetuser@$targethost:$targetdir/\$f . || exit 1
2457 done
2458 exit 0
2459 EOF
2460             ;;
2461         cp) cat >$from <<EOF
2462 #!/bin/sh
2463 for f in \$@
2464 do
2465   cp $targetdir/\$f . || exit 1
2466 done
2467 exit 0
2468 EOF
2469             ;;
2470         *)  echo "Unknown targetfrom '$targetfrom'" >&4
2471             exit 1
2472             ;;
2473         esac
2474         if $test ! -f $run; then
2475             echo "Target 'run' script '$run' not found." >&4
2476         else
2477             chmod a+rx $run
2478         fi
2479         if $test ! -f $to; then
2480             echo "Target 'to' script '$to' not found." >&4
2481         else
2482             chmod a+rx $to
2483         fi
2484         if $test ! -f $from; then
2485             echo "Target 'from' script '$from' not found." >&4
2486         else
2487             chmod a+rx $from
2488         fi
2489         if $test ! -f $run -o ! -f $to -o ! -f $from; then
2490             exit 1
2491         fi
2492         cat >&4 <<EOF
2493 Using '$run' for remote execution, and '$from' and '$to'
2494 for remote file transfer.
2495 EOF
2496         ;;
2497 *)      run=''
2498         to=:
2499         from=:
2500         usecrosscompile='undef'
2501         targetarch=''
2502         ;;
2503 esac
2504
2505 : see whether [:lower:] and [:upper:] are supported character classes
2506 echo " "
2507 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2508 ABYZ)
2509         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2510         up='[:upper:]'
2511         low='[:lower:]'
2512         ;;
2513 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2514         # (0xc9 and 0xd1), therefore that is a nice testing point.
2515         if test "X$up" = X -o "X$low" = X; then
2516             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2517             ij) up='[A-Z]'
2518                 low='[a-z]'
2519                 ;;
2520             esac
2521         fi
2522         if test "X$up" = X -o "X$low" = X; then
2523             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2524             ij) up='A-Z'
2525                 low='a-z'
2526                 ;;
2527             esac
2528         fi
2529         if test "X$up" = X -o "X$low" = X; then
2530             case "`echo IJ | od -x 2>/dev/null`" in
2531             *C9D1*|*c9d1*)
2532                 echo "Hey, this might be EBCDIC." >&4
2533                 if test "X$up" = X -o "X$low" = X; then
2534                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2535                     ij) up='[A-IJ-RS-Z]'
2536                         low='[a-ij-rs-z]'
2537                         ;;
2538                     esac
2539                 fi
2540                 if test "X$up" = X -o "X$low" = X; then
2541                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2542                     ij) up='A-IJ-RS-Z'
2543                         low='a-ij-rs-z'
2544                         ;;
2545                     esac
2546                 fi
2547                 ;;
2548             esac
2549         fi
2550 esac
2551 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2552 ij)
2553     echo "Using $up and $low to convert case." >&4
2554     ;;
2555 *)
2556     echo "I don't know how to translate letters from upper to lower case." >&4
2557     echo "Your tr is not acting any way I know of." >&4
2558     exit 1
2559     ;;
2560 esac
2561 : set up the translation script tr, must be called with ./tr of course
2562 cat >tr <<EOSC
2563 $startsh
2564 case "\$1\$2" in
2565 '[A-Z][a-z]') exec $tr '$up' '$low';;
2566 '[a-z][A-Z]') exec $tr '$low' '$up';;
2567 esac
2568 exec $tr "\$@"
2569 EOSC
2570 chmod +x tr
2571 $eunicefix tr
2572
2573 : Try to determine whether config.sh was made on this system
2574 case "$config_sh" in
2575 '')
2576 myuname=`$uname -a 2>/dev/null`
2577 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2578 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2579 # because the A-Z/a-z are not consecutive.
2580 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2581         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2582 newmyuname="$myuname"
2583 dflt=n
2584 case "$knowitall" in
2585 '')
2586         if test -f ../config.sh; then
2587                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2588                         eval "`grep myuname= ../config.sh`"
2589                 fi
2590                 if test "X$myuname" = "X$newmyuname"; then
2591                         dflt=y
2592                 fi
2593         fi
2594         ;;
2595 *) dflt=y;;
2596 esac
2597
2598 : Get old answers from old config file if Configure was run on the
2599 : same system, otherwise use the hints.
2600 hint=default
2601 cd ..
2602 if test -f config.sh; then
2603         echo " "
2604         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2605         . UU/myread
2606         case "$ans" in
2607         n*|N*) echo "OK, I'll ignore it."
2608                 mv config.sh config.sh.old
2609                 myuname="$newmyuname"
2610                 ;;
2611         *)  echo "Fetching default answers from your old config.sh file..." >&4
2612                 tmp_n="$n"
2613                 tmp_c="$c"
2614                 tmp_sh="$sh"
2615                 . ./config.sh
2616                 cp config.sh UU
2617                 n="$tmp_n"
2618                 c="$tmp_c"
2619                 : Older versions did not always set $sh.  Catch re-use of such
2620                 : an old config.sh.
2621                 case "$sh" in
2622                 '') sh="$tmp_sh" ;;
2623                 esac
2624                 hint=previous
2625                 ;;
2626         esac
2627 fi
2628 . ./UU/checkcc
2629 if test ! -f config.sh; then
2630         $cat <<EOM
2631
2632 First time through, eh?  I have some defaults handy for some systems
2633 that need some extra help getting the Configure answers right:
2634
2635 EOM
2636         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2637         dflt=''
2638         : Half the following guesses are probably wrong... If you have better
2639         : tests or hints, please send them to perlbug@perl.org
2640         : The metaconfig authors would also appreciate a copy...
2641         $test -f /irix && osname=irix
2642         $test -f /xenix && osname=sco_xenix
2643         $test -f /dynix && osname=dynix
2644         $test -f /dnix && osname=dnix
2645         $test -f /lynx.os && osname=lynxos
2646         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2647         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2648         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2649         $test -f /bin/mips && /bin/mips && osname=mips
2650         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2651                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2652         $test -d /usr/apollo/bin && osname=apollo
2653         $test -f /etc/saf/_sactab && osname=svr4
2654         $test -d /usr/include/minix && osname=minix
2655         if $test -d /MachTen -o -d /MachTen_Folder; then
2656                 osname=machten
2657                 if $test -x /sbin/version; then
2658                         osvers=`/sbin/version | $awk '{print $2}' |
2659                         $sed -e 's/[A-Za-z]$//'`
2660                 elif $test -x /usr/etc/version; then
2661                         osvers=`/usr/etc/version | $awk '{print $2}' |
2662                         $sed -e 's/[A-Za-z]$//'`
2663                 else
2664                         osvers="$2.$3"
2665                 fi
2666         fi
2667
2668         $test -f /sys/posix.dll &&
2669                 $test -f /usr/bin/what &&
2670                 set X `/usr/bin/what /sys/posix.dll` &&
2671                 $test "$3" = UWIN &&
2672                 osname=uwin &&
2673                 osvers="$5"
2674
2675         if $test -f $uname; then
2676                 set X $myuname
2677                 shift
2678
2679                 case "$5" in
2680                 fps*) osname=fps ;;
2681                 mips*)
2682                         case "$4" in
2683                         umips) osname=umips ;;
2684                         *) osname=mips ;;
2685                         esac;;
2686                 [23]100) osname=mips ;;
2687                 next*) osname=next ;;
2688                 i386*)
2689                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2690                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2691                                 osname='sco'
2692                                 osvers=$tmp
2693                         elif $test -f /etc/kconfig; then
2694                                 osname=isc
2695                                 if test "$lns" = "$ln -s"; then
2696                                         osvers=4
2697                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2698                                         osvers=3
2699                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2700                                         osvers=2
2701                                 fi
2702                         fi
2703                         tmp=''
2704                         ;;
2705                 pc*)
2706                         if test -n "$DJGPP"; then
2707                                 osname=dos
2708                                 osvers=djgpp
2709                         fi
2710                         ;;
2711                 esac
2712
2713                 case "$1" in
2714                 aix) osname=aix
2715                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2716                         case "$tmp" in
2717                         'not found') osvers="$4"."$3" ;;
2718                         '<3240'|'<>3240') osvers=3.2.0 ;;
2719                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2720                         '=3250'|'>3250') osvers=3.2.5 ;;
2721                         *) osvers=$tmp;;
2722                         esac
2723                         ;;
2724                 bsd386) osname=bsd386
2725                         osvers=`$uname -r`
2726                         ;;
2727                 cygwin*) osname=cygwin
2728                         osvers="$3"
2729                         ;;
2730                 *dc.osx) osname=dcosx
2731                         osvers="$3"
2732                         ;;
2733                 dnix) osname=dnix
2734                         osvers="$3"
2735                         ;;
2736                 domainos) osname=apollo
2737                         osvers="$3"
2738                         ;;
2739                 dgux) osname=dgux 
2740                         osvers="$3"
2741                         ;;
2742                 dynixptx*) osname=dynixptx
2743                         osvers=`echo "$4"|sed 's/^v//'`
2744                         ;;
2745                 freebsd) osname=freebsd 
2746                         osvers="$3" ;;
2747                 genix) osname=genix ;;
2748                 hp*) osname=hpux 
2749                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2750                         ;;
2751                 irix*) osname=irix
2752                         case "$3" in
2753                         4*) osvers=4 ;;
2754                         5*) osvers=5 ;;
2755                         *)      osvers="$3" ;;
2756                         esac
2757                         ;;
2758                 linux) osname=linux
2759                         case "$3" in
2760                         *)      osvers="$3" ;;
2761                         esac
2762                         ;;
2763                 MiNT) osname=mint
2764                         ;;
2765                 netbsd*) osname=netbsd
2766                         osvers="$3"
2767                         ;;
2768                 news-os) osvers="$3"
2769                         case "$3" in
2770                         4*) osname=newsos4 ;;
2771                         *) osname=newsos ;;
2772                         esac
2773                         ;;
2774                 next*) osname=next ;;
2775                 nonstop-ux) osname=nonstopux ;;
2776                 POSIX-BC | posix-bc ) osname=posix-bc
2777                         osvers="$3"
2778                         ;;
2779                 powerux | power_ux | powermax_os | powermaxos | \
2780                 powerunix | power_unix) osname=powerux
2781                         osvers="$3"
2782                         ;;
2783                 qnx) osname=qnx
2784                         osvers="$4"
2785                         ;;
2786                 solaris) osname=solaris
2787                         case "$3" in
2788                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2789                         *)      osvers="$3" ;;
2790                         esac
2791                         ;;
2792                 sunos) osname=sunos
2793                         case "$3" in
2794                         5*) osname=solaris
2795                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2796                         *)      osvers="$3" ;;
2797                         esac
2798                         ;;
2799                 titanos) osname=titanos
2800                         case "$3" in
2801                         1*) osvers=1 ;;
2802                         2*) osvers=2 ;;
2803                         3*) osvers=3 ;;
2804                         4*) osvers=4 ;;
2805                         *)      osvers="$3" ;;
2806                         esac
2807                         ;;
2808                 ultrix) osname=ultrix
2809                         osvers="$3"
2810                         ;;
2811                 osf1|mls+)      case "$5" in
2812                                 alpha)
2813                                         osname=dec_osf
2814                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
2815                                         case "$osvers" in
2816                                         [1-9].[0-9]*) ;;
2817                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
2818                                         esac
2819                                         ;;
2820                         hp*)    osname=hp_osf1  ;;
2821                         mips)   osname=mips_osf1 ;;
2822                         esac
2823                         ;;
2824                 unixware) osname=svr5
2825                         osvers="$4"
2826                         ;;
2827                 uts) osname=uts
2828                         osvers="$3"
2829                         ;;
2830                 $2) case "$osname" in
2831                         *isc*) ;;
2832                         *freebsd*) ;;
2833                         svr*)
2834                                 : svr4.x or possibly later
2835                                 case "svr$3" in 
2836                                 ${osname}*)
2837                                         osname=svr$3
2838                                         osvers=$4
2839                                         ;;
2840                                 esac
2841                                 case "$osname" in
2842                                 svr4.0)
2843                                         : Check for ESIX
2844                                         if test -f /stand/boot ; then
2845                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2846                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2847                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2848                                                         if test -n "$isesix"; then
2849                                                                 osname=esix4
2850                                                         fi
2851                                                 fi
2852                                         fi
2853                                         ;;
2854                                 esac
2855                                 ;;
2856                         *)      if test -f /etc/systemid; then
2857                                         osname=sco
2858                                         set `echo $3 | $sed 's/\./ /g'` $4
2859                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2860                                                 osvers=$1.$2.$3
2861                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2862                                                 osvers=$1.$2
2863                                         elif $test -f $src/hints/sco_$1.sh; then
2864                                                 osvers=$1
2865                                         fi
2866                                 else
2867                                         case "$osname" in
2868                                         '') : Still unknown.  Probably a generic Sys V.
2869                                                 osname="sysv"
2870                                                 osvers="$3"
2871                                                 ;;
2872                                         esac
2873                                 fi
2874                                 ;;
2875                         esac
2876                         ;;
2877                 *)      case "$osname" in
2878                         '') : Still unknown.  Probably a generic BSD.
2879                                 osname="$1"
2880                                 osvers="$3"
2881                                 ;;
2882                         esac
2883                         ;;
2884                 esac
2885         else
2886                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2887                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2888                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2889                                 osname=news_os
2890                         fi
2891                         $rm -f UU/kernel.what
2892                 elif test -d c:/.; then
2893                         set X $myuname
2894                         osname=os2
2895                         osvers="$5"
2896                 fi
2897         fi
2898         
2899         case "$targetarch" in
2900         '') ;;
2901         *)  hostarch=$osname
2902             osname=`echo $targetarch|sed 's,^[^-]*-,,'`
2903             osvers=''
2904             ;;
2905         esac
2906
2907         : Now look for a hint file osname_osvers, unless one has been
2908         : specified already.
2909         case "$hintfile" in
2910         ''|' ')
2911                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
2912                 : Also try without trailing minor version numbers.
2913                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
2914                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
2915                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
2916                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
2917                 case "$file" in
2918                 '') dflt=none ;;
2919                 *)  case "$osvers" in
2920                         '') dflt=$file
2921                                 ;;
2922                         *)  if $test -f $src/hints/$file.sh ; then
2923                                         dflt=$file
2924                                 elif $test -f $src/hints/$xfile.sh ; then
2925                                         dflt=$xfile
2926                                 elif $test -f $src/hints/$xxfile.sh ; then
2927                                         dflt=$xxfile
2928                                 elif $test -f $src/hints/$xxxfile.sh ; then
2929                                         dflt=$xxxfile
2930                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2931                                         dflt=$xxxxfile
2932                                 elif $test -f "$src/hints/${osname}.sh" ; then
2933                                         dflt="${osname}"
2934                                 else
2935                                         dflt=none
2936                                 fi
2937                                 ;;
2938                         esac
2939                         ;;
2940                 esac
2941                 if $test -f Policy.sh ; then
2942                         case "$dflt" in
2943                         *Policy*) ;;
2944                         none) dflt="Policy" ;;
2945                         *) dflt="Policy $dflt" ;;
2946                         esac
2947                 fi
2948                 ;;
2949         *)
2950                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2951                 ;;
2952         esac
2953
2954         if $test -f Policy.sh ; then
2955                 $cat <<EOM
2956
2957 There's also a Policy hint file available, which should make the
2958 site-specific (policy) questions easier to answer.
2959 EOM
2960
2961         fi
2962
2963         $cat <<EOM
2964
2965 You may give one or more space-separated answers, or "none" if appropriate.
2966 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2967 is a good thing.  DO NOT give a wrong version or a wrong OS.
2968
2969 EOM
2970
2971         rp="Which of these apply, if any?"
2972         . UU/myread
2973         tans=$ans
2974         for file in $tans; do
2975                 if $test X$file = XPolicy -a -f Policy.sh; then
2976                         . Policy.sh
2977                         $cat Policy.sh >> UU/config.sh
2978                 elif $test -f $src/hints/$file.sh; then
2979                         . $src/hints/$file.sh
2980                         $cat $src/hints/$file.sh >> UU/config.sh
2981                 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
2982                         : nothing
2983                 else
2984                         : Give one chance to correct a possible typo.
2985                         echo "$file.sh does not exist"
2986                         dflt=$file
2987                         rp="hint to use instead?"
2988                         . UU/myread
2989                         for file in $ans; do
2990                                 if $test -f "$src/hints/$file.sh"; then
2991                                         . $src/hints/$file.sh
2992                                         $cat $src/hints/$file.sh >> UU/config.sh
2993                                 elif $test X$ans = X -o X$ans = Xnone ; then
2994                                         : nothing
2995                                 else
2996                                         echo "$file.sh does not exist -- ignored."
2997                                 fi
2998                         done
2999                 fi
3000         done
3001
3002         hint=recommended
3003         : Remember our hint file for later.
3004         if $test -f "$src/hints/$file.sh" ; then
3005                 hintfile="$file"
3006         else
3007                 hintfile=''
3008         fi
3009 fi
3010 cd UU
3011 ;;
3012 *)
3013         echo " "
3014         echo "Fetching default answers from $config_sh..." >&4
3015         tmp_n="$n"
3016         tmp_c="$c"
3017         cd ..
3018         cp $config_sh config.sh 2>/dev/null
3019         chmod +w config.sh
3020         . ./config.sh
3021         cd UU
3022         cp ../config.sh .
3023         n="$tmp_n"
3024         c="$tmp_c"
3025         hint=previous
3026         ;;
3027 esac
3028 test "$override" && . ./optdef.sh
3029
3030 : Restore computed paths
3031 for file in $loclist $trylist; do
3032         eval $file="\$_$file"
3033 done
3034
3035 cat << EOM
3036
3037 Configure uses the operating system name and version to set some defaults.
3038 The default value is probably right if the name rings a bell. Otherwise,
3039 since spelling matters for me, either accept the default or answer "none"
3040 to leave it blank.
3041
3042 EOM
3043 case "$osname" in
3044         ''|' ')
3045                 case "$hintfile" in
3046                 ''|' '|none) dflt=none ;;
3047                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
3048                 esac
3049                 ;;
3050         *) dflt="$osname" ;;
3051 esac
3052 rp="Operating system name?"
3053 . ./myread
3054 case "$ans" in
3055 none)  osname='' ;;
3056 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
3057 esac
3058 echo " "
3059 case "$osvers" in
3060         ''|' ')
3061                 case "$hintfile" in
3062                 ''|' '|none) dflt=none ;;
3063                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
3064                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
3065                         case "$dflt" in
3066                         ''|' ') dflt=none ;;
3067                         esac
3068                         ;;
3069                 esac
3070                 ;;
3071         *) dflt="$osvers" ;;
3072 esac
3073 rp="Operating system version?"
3074 . ./myread
3075 case "$ans" in
3076 none)  osvers='' ;;
3077 *) osvers="$ans" ;;
3078 esac
3079
3080
3081 . ./posthint.sh
3082
3083 : who configured the system
3084 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
3085 cf_by=`(logname) 2>/dev/null`
3086 case "$cf_by" in
3087 "")
3088         cf_by=`(whoami) 2>/dev/null`
3089         case "$cf_by" in
3090         "") cf_by=unknown ;;
3091         esac ;;
3092 esac
3093
3094 : set up the script used to warn in case of inconsistency
3095 cat <<EOS >whoa
3096 $startsh
3097 EOS
3098 cat <<'EOSC' >>whoa
3099 dflt=y
3100 echo " "
3101 echo "*** WHOA THERE!!! ***" >&4
3102 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
3103 rp="    Keep the $hint value?"
3104 . ./myread
3105 case "$ans" in
3106 y) td=$was; tu=$was;;
3107 esac
3108 EOSC
3109
3110 : function used to set $1 to $val
3111 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
3112 case "$val$was" in
3113 $define$undef) . ./whoa; eval "$var=\$td";;
3114 $undef$define) . ./whoa; eval "$var=\$tu";;
3115 *) eval "$var=$val";;
3116 esac'
3117
3118 case "$usethreads" in
3119 $define|true|[yY]*)     dflt='y';;
3120 *) dflt='n';;
3121 esac
3122 cat <<EOM
3123
3124 Perl can be built to take advantage of threads on some systems.
3125 To do so, Configure can be run with -Dusethreads.
3126
3127 Note that threading is a highly experimental feature, and
3128 some known race conditions still remain.  If you choose to try
3129 it, be very sure to not actually deploy it for production
3130 purposes.  README.threads has more details, and is required
3131 reading if you enable threads.
3132
3133 If this doesn't make any sense to you, just accept the default '$dflt'.
3134 EOM
3135 rp='Build a threading Perl?'
3136 . ./myread
3137 case "$ans" in
3138 y|Y)    val="$define" ;;
3139 *)      val="$undef" ;;
3140 esac
3141 set usethreads
3142 eval $setvar
3143
3144 case "$usethreads" in
3145 $define)
3146         $cat <<EOM
3147
3148 As of 5.5.640, Perl has two different internal threading implementations,
3149 the 5.005 version (5005threads) and an interpreter-based version
3150 (ithreads) that has one interpreter per thread.  Both are very 
3151 experimental.  This arrangement exists to help developers work out
3152 which one is better.
3153
3154 If you're a casual user, you probably don't want interpreter-threads
3155 at this time.  There doesn't yet exist a way to create threads from
3156 within Perl in this model, i.e., "use Thread;" will NOT work.
3157 EOM
3158         : Default to ithreads unless overridden on command line or with
3159         : old config.sh
3160         dflt='y'
3161         case "$use5005threads" in
3162                 $define|true|[yY]*) dflt='n';;
3163         esac
3164         case "$useithreads" in
3165                 $undef|false|[nN]*) dflt='n';;
3166         esac
3167         rp='Use interpreter-based ithreads?'
3168         . ./myread
3169         case "$ans" in
3170         y|Y)    val="$define" ;;
3171         *)      val="$undef" ;;
3172         esac
3173         set useithreads
3174         eval $setvar
3175         : Now set use5005threads to the opposite value.
3176         case "$useithreads" in
3177         $define) val="$undef" ;;
3178         *) val="$define" ;;
3179         esac
3180         set use5005threads
3181         eval $setvar
3182         ;;
3183 *)
3184         useithreads="$undef"
3185         use5005threads="$undef"
3186         ;;
3187 esac
3188
3189 case "$useithreads$use5005threads" in
3190 "$define$define")
3191         $cat >&4 <<EOM
3192
3193 You cannot have both the ithreads and the 5.005 threads enabled
3194 at the same time.  Disabling the 5.005 threads since they are
3195 much less stable than the ithreads.
3196
3197 EOM
3198         use5005threads="$undef"
3199         ;;
3200 esac
3201
3202 case "$d_oldpthreads" in
3203 '')     : Configure tests would be welcome here.  For now, assume undef.
3204         val="$undef" ;;
3205 *)      val="$d_oldpthreads" ;;
3206 esac
3207 set d_oldpthreads
3208 eval $setvar
3209
3210
3211 case "$usethreads" in
3212 "$define"|true|[yY]*)
3213 : Look for a hint-file generated 'call-back-unit'.  If the
3214 : user has specified that a threading perl is to be built,
3215 : we may need to set or change some other defaults.
3216         if $test -f usethreads.cbu; then
3217                 echo "Your platform has some specific hints for threaded builds, using them..."
3218                 . ./usethreads.cbu
3219         else
3220                 $cat <<EOM
3221 (Your platform doesn't have any specific hints for threaded builds.
3222  Assuming POSIX threads, then.)
3223 EOM
3224         fi
3225         ;;
3226 esac
3227
3228 cat <<EOM
3229
3230 Perl can be built so that multiple Perl interpreters can coexist
3231 within the same Perl executable.
3232 EOM
3233
3234 case "$useithreads" in
3235 $define)
3236         cat <<EOM
3237 This multiple interpreter support is required for interpreter-based threads.
3238 EOM
3239         val="$define"
3240         ;;
3241 *)      case "$usemultiplicity" in
3242         $define|true|[yY]*)     dflt='y';;
3243         *) dflt='n';;
3244         esac
3245         echo " "
3246         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
3247         rp='Build Perl for multiplicity?'
3248         . ./myread
3249         case "$ans" in
3250         y|Y)    val="$define" ;;
3251         *)      val="$undef" ;;
3252         esac
3253         ;;
3254 esac
3255 set usemultiplicity
3256 eval $setvar
3257
3258 : make some quick guesses about what we are up against
3259 echo " "
3260 $echo $n "Hmm...  $c"
3261 echo exit 1 >bsd
3262 echo exit 1 >usg
3263 echo exit 1 >v7
3264 echo exit 1 >osf1
3265 echo exit 1 >eunice
3266 echo exit 1 >xenix
3267 echo exit 1 >venix
3268 echo exit 1 >os2
3269 d_bsd="$undef"
3270 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3271 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3272 then
3273         echo "Looks kind of like an OSF/1 system, but we'll see..."
3274         echo exit 0 >osf1
3275 elif test `echo abc | $tr a-z A-Z` = Abc ; then
3276         xxx=`./loc addbib blurfl $pth`
3277         if $test -f $xxx; then
3278         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3279                 echo exit 0 >bsd
3280                 echo exit 0 >usg
3281         else
3282                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3283                         echo "Looks kind of like an extended USG system, but we'll see..."
3284                 else
3285                         echo "Looks kind of like a USG system, but we'll see..."
3286                 fi
3287                 echo exit 0 >usg
3288         fi
3289 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3290         echo "Looks kind of like a BSD system, but we'll see..."
3291         d_bsd="$define"
3292         echo exit 0 >bsd
3293 else
3294         echo "Looks kind of like a Version 7 system, but we'll see..."
3295         echo exit 0 >v7
3296 fi
3297 case "$eunicefix" in
3298 *unixtovms*)
3299         $cat <<'EOI'
3300 There is, however, a strange, musty smell in the air that reminds me of
3301 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3302 EOI
3303         echo exit 0 >eunice
3304         d_eunice="$define"
3305 : it so happens the Eunice I know will not run shell scripts in Unix format
3306         ;;
3307 *)
3308         echo " "
3309         echo "Congratulations.  You aren't running Eunice."
3310         d_eunice="$undef"
3311         ;;
3312 esac
3313 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3314 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
3315 : semicolon as a patch separator
3316 case "$p_" in
3317 :) ;;
3318 *)
3319         $cat <<'EOI'
3320 I have the feeling something is not exactly right, however...don't tell me...
3321 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3322 (Or you may be running DOS with DJGPP.)
3323 EOI
3324         echo exit 0 >os2
3325         ;;
3326 esac
3327 if test -f /xenix; then
3328         echo "Actually, this looks more like a XENIX system..."
3329         echo exit 0 >xenix
3330         d_xenix="$define"
3331 else
3332         echo " "
3333         echo "It's not Xenix..."
3334         d_xenix="$undef"
3335 fi
3336 chmod +x xenix
3337 $eunicefix xenix
3338 if test -f /venix; then
3339         echo "Actually, this looks more like a VENIX system..."
3340         echo exit 0 >venix
3341 else
3342         echo " "
3343         if ./xenix; then
3344                 : null
3345         else
3346                 echo "Nor is it Venix..."
3347         fi
3348 fi
3349 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3350 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3351 $rm -f foo
3352
3353 case "$cc" in
3354 '') dflt=cc;;
3355 *) dflt="$cc";;
3356 esac
3357 rp="Use which C compiler?"
3358 . ./myread
3359 cc="$ans"
3360 : Look for a hint-file generated 'call-back-unit'.  Now that the
3361 : user has specified the compiler, we may need to set or change some
3362 : other defaults.
3363 if $test -f cc.cbu; then
3364     . ./cc.cbu
3365 fi
3366 . ./checkcc
3367
3368 echo " "
3369 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3370 $cat >try.c <<EOM
3371 #include <stdio.h>
3372 int main() {
3373 #ifdef __GNUC__
3374 #ifdef __VERSION__
3375         printf("%s\n", __VERSION__);
3376 #else
3377         printf("%s\n", "1");
3378 #endif
3379 #endif
3380         exit(0);
3381 }
3382 EOM
3383 if $cc -o try $ccflags $ldflags try.c; then
3384         gccversion=`$run ./try`
3385         case "$gccversion" in
3386         '') echo "You are not using GNU cc." ;;
3387         *)  echo "You are using GNU cc $gccversion."
3388             ccname=gcc  
3389             ;;
3390         esac
3391 else
3392         echo " "
3393         echo "*** WHOA THERE!!! ***" >&4
3394         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3395         case "$knowitall" in
3396         '')
3397         echo "    You'd better start hunting for one and let me know about it." >&4
3398                 exit 1
3399                 ;;
3400         esac
3401 fi
3402 $rm -f try try.*
3403 case "$gccversion" in
3404 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3405 esac
3406 case "$gccversion" in
3407 '') gccosandvers='' ;;
3408 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3409    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3410    gccshortvers=''
3411    case "$gccosandvers" in
3412    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3413    $osname$osvers) ;; # looking good
3414    $osname*) cat <<EOM >&4
3415
3416 *** WHOA THERE!!! ***
3417
3418     Your gcc has not been compiled for the exact release of
3419     your operating system ($gccosandvers versus $osname$osvers).
3420
3421     In general it is a good idea to keep gcc synchronized with
3422     the operating system because otherwise serious problems
3423     may ensue when trying to compile software, like Perl.
3424
3425     I'm trying to be optimistic here, though, and will continue.
3426     If later during the configuration and build icky compilation
3427     problems appear (headerfile conflicts being the most common
3428     manifestation), I suggest reinstalling the gcc to match
3429     your operating system release.
3430
3431 EOM
3432       ;;
3433    *) gccosandvers='' ;; # failed to parse, better be silent
3434    esac
3435    ;;
3436 esac
3437 case "$ccname" in
3438 '') ccname="$cc" ;;
3439 esac
3440
3441 case "$gccversion" in
3442 '') ;;
3443 *)  case "$ccflags" in
3444     *-Wall*) ;;
3445     *) ccflags="$ccflags -Wall" ;;
3446     esac
3447     ;;
3448 esac
3449
3450 : see how we invoke the C preprocessor
3451 echo " "
3452 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3453 cat <<'EOT' >testcpp.c
3454 #define ABC abc
3455 #define XYZ xyz
3456 ABC.XYZ
3457 EOT
3458 cd ..
3459 if test ! -f cppstdin; then
3460         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3461                 # AIX cc -E doesn't show the absolute headerfile
3462                 # locations but we'll cheat by using the -M flag.
3463                 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
3464         else
3465                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3466         fi
3467 else
3468         echo "Keeping your $hint cppstdin wrapper."
3469 fi
3470 chmod 755 cppstdin
3471 wrapper=`pwd`/cppstdin
3472 ok='false'
3473 cd UU
3474
3475 if $test "X$cppstdin" != "X" && \
3476         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3477         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3478 then
3479         echo "You used to use $cppstdin $cppminus so we'll use that again."
3480         case "$cpprun" in
3481         '') echo "But let's see if we can live without a wrapper..." ;;
3482         *)
3483                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3484                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3485                 then
3486                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3487                         ok='true'
3488                 else
3489                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3490                 fi
3491                 ;;
3492         esac
3493 else
3494         case "$cppstdin" in
3495         '') ;;
3496         *)
3497                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3498                 ;;
3499         esac
3500 fi
3501
3502 if $ok; then
3503         : nothing
3504 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3505         $cc -E <testcpp.c >testcpp.out 2>&1; \
3506         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3507         echo "Yup, it does."
3508         x_cpp="$cc -E"
3509         x_minus='';
3510 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3511         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3512         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3513         echo "Yup, it does."
3514         x_cpp="$cc -E"
3515         x_minus='-';
3516 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3517         $cc -P <testcpp.c >testcpp.out 2>&1; \
3518         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3519         echo "Yipee, that works!"
3520         x_cpp="$cc -P"
3521         x_minus='';
3522 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3523         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3524         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3525         echo "At long last!"
3526         x_cpp="$cc -P"
3527         x_minus='-';
3528 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3529         $cpp <testcpp.c >testcpp.out 2>&1; \
3530         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3531         echo "It works!"
3532         x_cpp="$cpp"
3533         x_minus='';
3534 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3535         $cpp - <testcpp.c >testcpp.out 2>&1; \
3536         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3537         echo "Hooray, it works!  I was beginning to wonder."
3538         x_cpp="$cpp"
3539         x_minus='-';
3540 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3541         $wrapper <testcpp.c >testcpp.out 2>&1; \
3542         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3543         x_cpp="$wrapper"
3544         x_minus=''
3545         echo "Eureka!"
3546 else
3547         dflt=''
3548         rp="No dice.  I can't find a C preprocessor.  Name one:"
3549         . ./myread
3550         x_cpp="$ans"
3551         x_minus=''
3552         $x_cpp <testcpp.c >testcpp.out 2>&1
3553         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3554                 echo "OK, that will do." >&4
3555         else
3556 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3557                 exit 1
3558         fi
3559 fi
3560
3561 case "$ok" in
3562 false)
3563         cppstdin="$x_cpp"
3564         cppminus="$x_minus"
3565         cpprun="$x_cpp"
3566         cpplast="$x_minus"
3567         set X $x_cpp
3568         shift
3569         case "$1" in
3570         "$cpp")
3571                 echo "Perhaps can we force $cc -E using a wrapper..."
3572                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3573                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3574                 then
3575                         echo "Yup, we can."
3576                         cppstdin="$wrapper"
3577                         cppminus='';
3578                 else
3579                         echo "Nope, we'll have to live without it..."
3580                 fi
3581                 ;;
3582         esac
3583         case "$cpprun" in
3584         "$wrapper")
3585                 cpprun=''
3586                 cpplast=''
3587                 ;;
3588         esac
3589         ;;
3590 esac
3591
3592 case "$cppstdin" in
3593 "$wrapper"|'cppstdin') ;;
3594 *) $rm -f $wrapper;;
3595 esac
3596 $rm -f testcpp.c testcpp.out
3597
3598 : decide how portable to be.  Allow command line overrides.
3599 case "$d_portable" in
3600 "$undef") ;;
3601 *)      d_portable="$define" ;;
3602 esac
3603
3604 : set up shell script to do ~ expansion
3605 cat >filexp <<EOSS
3606 $startsh
3607 : expand filename
3608 case "\$1" in
3609  ~/*|~)
3610         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3611         ;;
3612  ~*)
3613         if $test -f /bin/csh; then
3614                 /bin/csh -f -c "glob \$1"
3615                 failed=\$?
3616                 echo ""
3617                 exit \$failed
3618         else
3619                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3620                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3621                 if $test ! -d "\$dir"; then
3622                         me=\`basename \$0\`
3623                         echo "\$me: can't locate home directory for: \$name" >&2
3624                         exit 1
3625                 fi
3626                 case "\$1" in
3627                 */*)
3628                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3629                         ;;
3630                 *)
3631                         echo \$dir
3632                         ;;
3633                 esac
3634         fi
3635         ;;
3636 *)
3637         echo \$1
3638         ;;
3639 esac
3640 EOSS
3641 chmod +x filexp
3642 $eunicefix filexp
3643
3644 : now set up to get a file name
3645 cat <<EOS >getfile
3646 $startsh
3647 EOS
3648 cat <<'EOSC' >>getfile
3649 tilde=''
3650 fullpath=''
3651 already=''
3652 skip=''
3653 none_ok=''
3654 exp_file=''
3655 nopath_ok=''
3656 orig_rp="$rp"
3657 orig_dflt="$dflt"
3658 case "$gfpth" in
3659 '') gfpth='.' ;;
3660 esac
3661
3662 case "$fn" in
3663 *\(*)
3664         expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3665         fn=`echo $fn | sed 's/(.*)//'`
3666         ;;
3667 esac
3668
3669 case "$fn" in
3670 *:*)
3671         loc_file=`expr $fn : '.*:\(.*\)'`
3672         fn=`expr $fn : '\(.*\):.*'`
3673         ;;
3674 esac
3675
3676 case "$fn" in
3677 *~*) tilde=true;;
3678 esac
3679 case "$fn" in
3680 */*) fullpath=true;;
3681 esac
3682 case "$fn" in
3683 *+*) skip=true;;
3684 esac
3685 case "$fn" in
3686 *n*) none_ok=true;;
3687 esac
3688 case "$fn" in
3689 *e*) exp_file=true;;
3690 esac
3691 case "$fn" in
3692 *p*) nopath_ok=true;;
3693 esac
3694
3695 case "$fn" in
3696 *f*) type='File';;
3697 *d*) type='Directory';;
3698 *l*) type='Locate';;
3699 esac
3700
3701 what="$type"
3702 case "$what" in
3703 Locate) what='File';;
3704 esac
3705
3706 case "$exp_file" in
3707 '')
3708         case "$d_portable" in
3709         "$define") ;;
3710         *) exp_file=true;;
3711         esac
3712         ;;
3713 esac
3714
3715 cd ..
3716 while test "$type"; do
3717         redo=''
3718         rp="$orig_rp"
3719         dflt="$orig_dflt"
3720         case "$tilde" in
3721         true) rp="$rp (~name ok)";;
3722         esac
3723         . UU/myread
3724         if test -f UU/getfile.ok && \
3725                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3726         then
3727                 value="$ans"
3728                 ansexp="$ans"
3729                 break
3730         fi
3731         case "$ans" in
3732         none)
3733                 value=''
3734                 ansexp=''
3735                 case "$none_ok" in
3736                 true) type='';;
3737                 esac
3738                 ;;
3739         *)
3740                 case "$tilde" in
3741                 '') value="$ans"
3742                         ansexp="$ans";;
3743                 *)
3744                         value=`UU/filexp $ans`
3745                         case $? in
3746                         0)
3747                                 if test "$ans" != "$value"; then
3748                                         echo "(That expands to $value on this system.)"
3749                                 fi
3750                                 ;;
3751                         *) value="$ans";;
3752                         esac
3753                         ansexp="$value"
3754                         case "$exp_file" in
3755                         '') value="$ans";;
3756                         esac
3757                         ;;
3758                 esac
3759                 case "$fullpath" in
3760                 true)
3761                         case "$ansexp" in
3762                         /*) value="$ansexp" ;;
3763                         [a-zA-Z]:/*) value="$ansexp" ;;
3764                         *)
3765                                 redo=true
3766                                 case "$already" in
3767                                 true)
3768                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3769                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3770                                         ;;
3771                                 *)
3772                                 echo "Please give a full path name, starting with slash." >&4
3773                                         case "$tilde" in
3774                                         true)
3775                                 echo "Note that using ~name is ok provided it expands well." >&4
3776                                                 already=true
3777                                                 ;;
3778                                         esac
3779                                 esac
3780                                 ;;
3781                         esac
3782                         ;;
3783                 esac
3784                 case "$redo" in
3785                 '')
3786                         case "$type" in
3787                         File)
3788                                 for fp in $gfpth; do
3789                                         if test "X$fp" = X.; then
3790                                             pf="$ansexp"
3791                                         else    
3792                                             pf="$fp/$ansexp"
3793                                         fi
3794                                         if test -f "$pf"; then
3795                                                 type=''
3796                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3797                                         then
3798                                                 echo "($value is not a plain file, but that's ok.)"
3799                                                 type=''
3800                                         fi
3801                                         if test X"$type" = X; then
3802                                             value="$pf"
3803                                             break
3804                                         fi
3805                                 done
3806                                 ;;
3807                         Directory)
3808                                 for fp in $gfpth; do
3809                                         if test "X$fp" = X.; then
3810                                             dir="$ans"
3811                                             direxp="$ansexp"
3812                                         else    
3813                                             dir="$fp/$ansexp"
3814                                             direxp="$fp/$ansexp"
3815                                         fi
3816                                         if test -d "$direxp"; then
3817                                                 type=''
3818                                                 value="$dir"
3819                                                 break
3820                                         fi
3821                                 done
3822                                 ;;
3823                         Locate)
3824                                 if test -d "$ansexp"; then
3825                                         echo "(Looking for $loc_file in directory $value.)"
3826                                         value="$value/$loc_file"
3827                                         ansexp="$ansexp/$loc_file"
3828                                 fi
3829                                 if test -f "$ansexp"; then
3830                                         type=''
3831                                 fi
3832                                 case "$nopath_ok" in
3833                                 true)   case "$value" in
3834                                         */*) ;;
3835                                         *)      echo "Assuming $value will be in people's path."
3836                                                 type=''
3837                                                 ;;
3838                                         esac
3839                                         ;;
3840                                 esac
3841                                 ;;
3842                         esac
3843
3844                         case "$skip" in
3845                         true) type='';
3846                         esac
3847
3848                         case "$type" in
3849                         '') ;;
3850                         *)
3851                                 if test "$fastread" = yes; then
3852                                         dflt=y
3853                                 else
3854                                         dflt=n
3855                                 fi
3856                                 rp="$what $value doesn't exist.  Use that name anyway?"
3857                                 . UU/myread
3858                                 dflt=''
3859                                 case "$ans" in
3860                                 y*) type='';;
3861                                 *) echo " ";;
3862                                 esac
3863                                 ;;
3864                         esac
3865                         ;;
3866                 esac
3867                 ;;
3868         esac
3869 done
3870 cd UU
3871 ans="$value"
3872 rp="$orig_rp"
3873 dflt="$orig_dflt"
3874 rm -f getfile.ok
3875 test "X$gfpthkeep" != Xy && gfpth=""
3876 EOSC
3877
3878 : What should the include directory be ?
3879 echo " "
3880 $echo $n "Hmm...  $c"
3881 dflt='/usr/include'
3882 incpath=''
3883 mips_type=''
3884 if $test -f /bin/mips && /bin/mips; then
3885         echo "Looks like a MIPS system..."
3886         $cat >usr.c <<'EOCP'
3887 #ifdef SYSTYPE_BSD43
3888 /bsd43
3889 #endif
3890 EOCP
3891         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3892                 dflt='/bsd43/usr/include'
3893                 incpath='/bsd43'
3894                 mips_type='BSD 4.3'
3895         else
3896                 mips_type='System V'
3897         fi
3898         $rm -f usr.c usr.out
3899         echo "and you're compiling with the $mips_type compiler and libraries."
3900         xxx_prompt=y
3901         echo "exit 0" >mips
3902 else
3903         echo "Doesn't look like a MIPS system."
3904         xxx_prompt=n
3905         echo "exit 1" >mips
3906 fi
3907 chmod +x mips
3908 $eunicefix mips
3909 case "$usrinc" in
3910 '') ;;
3911 *) dflt="$usrinc";;
3912 esac
3913 case "$xxx_prompt" in
3914 y)      fn=d/
3915         echo " "
3916         rp='Where are the include files you want to use?'
3917         . ./getfile
3918         usrinc="$ans"
3919         ;;
3920 *)      usrinc="$dflt"
3921         ;;
3922 esac
3923
3924 : Set private lib path
3925 case "$plibpth" in
3926 '') if ./mips; then
3927                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3928         fi;;
3929 esac
3930 case "$libpth" in
3931 ' ') dlist='';;
3932 '') dlist="$loclibpth $plibpth $glibpth";;
3933 *) dlist="$libpth";;
3934 esac
3935
3936 : Now check and see which directories actually exist, avoiding duplicates
3937 libpth=''
3938 for xxx in $dlist
3939 do
3940     if $test -d $xxx; then
3941                 case " $libpth " in
3942                 *" $xxx "*) ;;
3943                 *) libpth="$libpth $xxx";;
3944                 esac
3945     fi
3946 done
3947 $cat <<'EOM'
3948
3949 Some systems have incompatible or broken versions of libraries.  Among
3950 the directories listed in the question below, please remove any you
3951 know not to be holding relevant libraries, and add any that are needed.
3952 Say "none" for none.
3953
3954 EOM
3955 case "$libpth" in
3956 '') dflt='none';;
3957 *)
3958         set X $libpth
3959         shift
3960         dflt=${1+"$@"}
3961         ;;
3962 esac
3963 rp="Directories to use for library searches?"
3964 . ./myread
3965 case "$ans" in
3966 none) libpth=' ';;
3967 *) libpth="$ans";;
3968 esac
3969
3970 : compute shared library extension
3971 case "$so" in
3972 '')
3973         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3974                 dflt='sl'
3975         else
3976                 dflt='so'
3977         fi
3978         ;;
3979 *) dflt="$so";;
3980 esac
3981 $cat <<EOM
3982
3983 On some systems, shared libraries may be available.  Answer 'none' if
3984 you want to suppress searching of shared libraries for the remainder
3985 of this configuration.
3986
3987 EOM
3988 rp='What is the file extension used for shared libraries?'
3989 . ./myread
3990 so="$ans"
3991
3992 : Define several unixisms.
3993 : Hints files or command line option can be used to override them.
3994 : The convoluted testing is in case hints files set either the old
3995 : or the new name.
3996 case "$_exe" in
3997 '')     case "$exe_ext" in
3998     '') ;;
3999         *)      _exe="$exe_ext" ;;
4000         esac
4001         ;;
4002 esac
4003 case "$_a" in
4004 '')     case "$lib_ext" in
4005     '') _a='.a';;
4006         *)      _a="$lib_ext" ;;
4007         esac
4008         ;;
4009 esac
4010 case "$_o" in
4011 '') case "$obj_ext" in
4012         '')     _o='.o';;
4013         *)      _o="$obj_ext";;
4014         esac
4015         ;;
4016 esac
4017 case "$p_" in
4018 '') case "$path_sep" in
4019         '')     p_=':';;
4020         *)      p_="$path_sep";;
4021         esac
4022         ;;
4023 esac
4024 exe_ext=$_exe
4025 lib_ext=$_a
4026 obj_ext=$_o
4027 path_sep=$p_
4028
4029 : Which makefile gets called first.  This is used by make depend.
4030 case "$firstmakefile" in
4031 '') firstmakefile='makefile';;
4032 esac
4033
4034 case "$usesocks" in
4035 $define|true|[yY]*)     dflt='y';;
4036 *) dflt='n';;
4037 esac
4038 cat <<EOM
4039
4040 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4041 Configure must be run with -Dusesocks.  If you use SOCKS you also need
4042 to use the PerlIO abstraction layer, this will be implicitly selected.
4043
4044 If this doesn't make any sense to you, just accept the default '$dflt'.
4045 EOM
4046 rp='Build Perl for SOCKS?'
4047 . ./myread
4048 case "$ans" in
4049 y|Y)    val="$define" ;;     
4050 *)      val="$undef" ;;
4051 esac
4052 set usesocks
4053 eval $setvar
4054
4055 case "$usesocks" in
4056 $define|true|[yY]*) useperlio="$define";;
4057 esac
4058
4059 : Looking for optional libraries
4060 echo " "
4061 echo "Checking for optional libraries..." >&4
4062 case "$libs" in
4063 ' '|'') dflt='';;
4064 *) dflt="$libs";;
4065 esac
4066 case "$libswanted" in
4067 '') libswanted='c_s';;
4068 esac
4069 case "$usesocks" in
4070 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
4071 esac
4072 libsfound=''
4073 libsfiles=''
4074 libsdirs=''
4075 libspath=''
4076 for thisdir in $libpth $xlibpth; do
4077   test -d $thisdir && libspath="$libspath $thisdir"
4078 done
4079 for thislib in $libswanted; do
4080         for thisdir in $libspath; do
4081             xxx=''
4082             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4083                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
4084                 $test -f "$xxx" && eval $libscheck
4085                 $test -f "$xxx" && libstyle=shared
4086             fi
4087             if test ! -f "$xxx"; then
4088                 xxx=$thisdir/lib$thislib.$so
4089                 $test -f "$xxx" && eval $libscheck
4090                 $test -f "$xxx" && libstyle=shared
4091             fi  
4092             if test ! -f "$xxx"; then
4093                 xxx=$thisdir/lib$thislib$_a
4094                 $test -f "$xxx" && eval $libscheck
4095                 $test -f "$xxx" && libstyle=static
4096             fi
4097             if test ! -f "$xxx"; then
4098                 xxx=$thisdir/$thislib$_a
4099                 $test -f "$xxx" && eval $libscheck
4100                 $test -f "$xxx" && libstyle=static
4101             fi
4102             if test ! -f "$xxx"; then
4103                 xxx=$thisdir/lib${thislib}_s$_a
4104                 $test -f "$xxx" && eval $libscheck
4105                 $test -f "$xxx" && libstyle=static
4106                 $test -f "$xxx" && thislib=${thislib}_s
4107             fi
4108             if test ! -f "$xxx"; then
4109                 xxx=$thisdir/Slib$thislib$_a
4110                 $test -f "$xxx" && eval $libscheck
4111                 $test -f "$xxx" && libstyle=static
4112             fi
4113             if $test -f "$xxx"; then
4114                 case "$libstyle" in
4115                 shared) echo "Found -l$thislib (shared)." ;;
4116                 static) echo "Found -l$thislib." ;;
4117                 *)      echo "Found -l$thislib ($libstyle)." ;;
4118                 esac
4119                 case " $dflt " in
4120                 *"-l$thislib "*);;
4121                 *) dflt="$dflt -l$thislib"
4122                    libsfound="$libsfound $xxx"
4123                    yyy=`basename $xxx`
4124                    libsfiles="$libsfiles $yyy"
4125                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
4126                    case " $libsdirs " in
4127                    *" $yyy "*) ;;
4128                    *) libsdirs="$libsdirs $yyy" ;;
4129                    esac
4130                    ;;
4131                 esac
4132                 break
4133             fi  
4134         done
4135         if $test ! -f "$xxx"; then
4136             echo "No -l$thislib."
4137         fi
4138 done
4139 set X $dflt
4140 shift
4141 dflt="$*"
4142 case "$libs" in
4143 '') dflt="$dflt";;
4144 *) dflt="$libs";;
4145 esac
4146 case "$dflt" in
4147 ' '|'') dflt='none';;
4148 esac
4149
4150 $cat <<EOM
4151
4152 In order to compile $package on your machine, a number of libraries
4153 are usually needed.  Include any other special libraries here as well.
4154 Say "none" for none.  The default list is almost always right.
4155 EOM
4156
4157 echo " "
4158 rp="What libraries to use?"
4159 . ./myread
4160 case "$ans" in
4161 none) libs=' ';;
4162 *) libs="$ans";;
4163 esac
4164
4165 : determine optimization, if desired, or use for debug flag also
4166 case "$optimize" in
4167 ' '|$undef) dflt='none';;
4168 '') dflt='-O';;
4169 *) dflt="$optimize";;
4170 esac
4171 $cat <<EOH
4172
4173 By default, $package compiles with the -O flag to use the optimizer.
4174 Alternately, you might want to use the symbolic debugger, which uses
4175 the -g flag (on traditional Unix systems).  Either flag can be
4176 specified here.  To use neither flag, specify the word "none".
4177
4178 EOH
4179 rp="What optimizer/debugger flag should be used?"
4180 . ./myread
4181 optimize="$ans"
4182 case "$optimize" in
4183 'none') optimize=" ";;
4184 esac
4185
4186 dflt=''
4187 : We will not override a previous value, but we might want to
4188 : augment a hint file
4189 case "$hint" in
4190 default|recommended)
4191         case "$gccversion" in
4192         1*) dflt='-fpcc-struct-return' ;;
4193         esac
4194         case "$optimize" in
4195         *-g*) dflt="$dflt -DDEBUGGING";;
4196         esac
4197         case "$gccversion" in
4198         2*) if test -d /etc/conf/kconfig.d &&
4199                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4200                 then
4201                         dflt="$dflt -posix"
4202                 fi
4203                 ;;
4204         esac
4205         case "$gccversion" in
4206         1*) ;;
4207         2.[0-8]*) ;;
4208         ?*)     echo " "
4209                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4210                 echo 'int main(void) { return 0; }' > gcctest.c
4211                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4212                         echo "Yes, it does." 2>&1
4213                         case "$ccflags" in
4214                         *strict-aliasing*) 
4215                                 echo "Leaving current flags $ccflags alone." 2>&1
4216                                 ;;
4217                         *) dflt="$dflt -fno-strict-aliasing" ;;
4218                         esac
4219                 else
4220                         echo "Nope, it doesn't, but that's ok." 2>&1
4221                 fi
4222                 ;;
4223         esac
4224         ;;
4225 esac
4226
4227 case "$mips_type" in
4228 *BSD*|'') inclwanted="$locincpth $usrinc";;
4229 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4230 esac
4231 for thisincl in $inclwanted; do
4232         if $test -d $thisincl; then
4233                 if $test x$thisincl != x$usrinc; then
4234                         case "$dflt" in
4235                         *" -I$thisincl "*);;
4236                         *) dflt="$dflt -I$thisincl ";;
4237                         esac
4238                 fi
4239         fi
4240 done
4241
4242 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4243         xxx=true;
4244 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4245         xxx=true;
4246 else
4247         xxx=false;
4248 fi;
4249 if $xxx; then
4250         case "$dflt" in
4251         *$2*);;
4252         *) dflt="$dflt -D$2";;
4253         esac;
4254 fi'
4255
4256 set signal.h LANGUAGE_C; eval $inctest
4257
4258 case "$usesocks" in
4259 $define)
4260         ccflags="$ccflags -DSOCKS"
4261         ;;
4262 esac
4263
4264 case "$hint" in
4265 default|recommended) dflt="$ccflags $dflt" ;;
4266 *) dflt="$ccflags";;
4267 esac
4268
4269 case "$dflt" in
4270 ''|' ') dflt=none;;
4271 esac
4272
4273 $cat <<EOH
4274
4275 Your C compiler may want other flags.  For this question you should include
4276 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4277 but you should NOT include libraries or ld flags like -lwhatever.  If you
4278 want $package to honor its debug switch, you should include -DDEBUGGING here.
4279 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4280
4281 To use no flags, specify the word "none".
4282
4283 EOH
4284 set X $dflt
4285 shift
4286 dflt=${1+"$@"}
4287 rp="Any additional cc flags?"
4288 . ./myread
4289 case "$ans" in
4290 none) ccflags='';;
4291 *) ccflags="$ans";;
4292 esac
4293
4294 : the following weeds options from ccflags that are of no interest to cpp
4295 case "$cppflags" in
4296 '') cppflags="$ccflags" ;;
4297 *)  cppflags="$cppflags $ccflags" ;;
4298 esac
4299 case "$gccversion" in
4300 1*) cppflags="$cppflags -D__GNUC__"
4301 esac
4302 case "$mips_type" in
4303 '');;
4304 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4305 esac
4306 case "$cppflags" in
4307 '');;
4308 *)
4309         echo " "
4310         echo "Let me guess what the preprocessor flags are..." >&4
4311         set X $cppflags
4312         shift
4313         cppflags=''
4314         $cat >cpp.c <<'EOM'
4315 #define BLURFL foo
4316
4317 BLURFL xx LFRULB
4318 EOM
4319         previous=''
4320         for flag in $*
4321         do
4322                 case "$flag" in
4323                 -*) ftry="$flag";;
4324                 *) ftry="$previous $flag";;
4325                 esac
4326                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4327                         >cpp1.out 2>/dev/null && \
4328                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4329                         >cpp2.out 2>/dev/null && \
4330                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4331                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4332                 then
4333                         cppflags="$cppflags $ftry"
4334                         previous=''
4335                 else
4336                         previous="$flag"
4337                 fi
4338         done
4339         set X $cppflags
4340         shift
4341         cppflags=${1+"$@"}
4342         case "$cppflags" in
4343         *-*)  echo "They appear to be: $cppflags";;
4344         esac
4345         $rm -f cpp.c cpp?.out
4346         ;;
4347 esac
4348
4349 : flags used in final linking phase
4350 case "$ldflags" in
4351 '') if ./venix; then
4352                 dflt='-i -z'
4353         else
4354                 dflt=''
4355         fi
4356         case "$ccflags" in
4357         *-posix*) dflt="$dflt -posix" ;;
4358         esac
4359         ;;
4360 *) dflt="$ldflags";;
4361 esac
4362
4363 : Try to guess additional flags to pick up local libraries.
4364 for thislibdir in $libpth; do
4365         case " $loclibpth " in
4366         *" $thislibdir "*)
4367                 case "$dflt " in 
4368                 *"-L$thislibdir "*) ;;
4369                 *)  dflt="$dflt -L$thislibdir" ;;
4370                 esac
4371                 ;;
4372         esac
4373 done
4374
4375 case "$dflt" in
4376 '') dflt='none' ;;
4377 esac
4378
4379 $cat <<EOH
4380
4381 Your C linker may need flags.  For this question you should
4382 include -L/whatever and any other flags used by the C linker, but you
4383 should NOT include libraries like -lwhatever.
4384
4385 Make sure you include the appropriate -L/path flags if your C linker
4386 does not normally search all of the directories you specified above,
4387 namely
4388         $libpth
4389 To use no flags, specify the word "none".
4390
4391 EOH
4392
4393 rp="Any additional ld flags (NOT including libraries)?"
4394 . ./myread
4395 case "$ans" in
4396 none) ldflags='';;
4397 *) ldflags="$ans";;
4398 esac
4399 rmlist="$rmlist pdp11"
4400
4401 : coherency check
4402 echo " "
4403 echo "Checking your choice of C compiler and flags for coherency..." >&4
4404 $cat > try.c <<'EOF'
4405 #include <stdio.h>
4406 int main() { printf("Ok\n"); exit(0); }
4407 EOF
4408 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
4409 shift
4410 $cat >try.msg <<'EOM'
4411 I've tried to compile and run the following simple program:
4412
4413 EOM
4414 $cat try.c >> try.msg
4415
4416 $cat >> try.msg <<EOM
4417
4418 I used the command:
4419
4420         $*
4421         $run ./try
4422
4423 and I got the following output:
4424
4425 EOM
4426 dflt=y
4427 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
4428         if $sh -c "$run ./try" >>try.msg 2>&1; then
4429                 xxx=`$run ./try`
4430                 case "$xxx" in
4431                 "Ok") dflt=n ;;
4432                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4433                         case " $libs " in
4434                         *" -lsfio "*)
4435                                 cat >> try.msg <<'EOQS'
4436 If $libs contains -lsfio, and sfio is mis-configured, then it
4437 sometimes (apparently) runs and exits with a 0 status, but with no
4438 output!  It may have to do with sfio's use of _exit vs. exit.
4439
4440 EOQS
4441                                 rp="You have a big problem.  Shall I abort Configure"
4442                                 dflt=y
4443                                 ;;
4444                         esac
4445                         ;;
4446                 esac
4447         else
4448                 echo "The program compiled OK, but exited with status $?." >>try.msg
4449                 rp="You have a problem.  Shall I abort Configure"
4450                 dflt=y
4451         fi
4452 else
4453         echo "I can't compile the test program." >>try.msg
4454         rp="You have a BIG problem.  Shall I abort Configure"
4455         dflt=y
4456 fi
4457 case "$dflt" in
4458 y)
4459         $cat try.msg >&4
4460         case "$knowitall" in
4461         '')
4462                 echo "(The supplied flags or libraries might be incorrect.)"
4463                 ;;
4464         *) dflt=n;;
4465         esac
4466         echo " "
4467         . ./myread
4468         case "$ans" in
4469         n*|N*) ;;
4470         *)      echo "Ok.  Stopping Configure." >&4
4471                 exit 1
4472                 ;;
4473         esac
4474         ;;
4475 n) echo "OK, that should do.";;
4476 esac
4477 $rm -f try try.* core
4478
4479 : define an is-a-typedef? function
4480 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4481 case "$inclist" in
4482 "") inclist="sys/types.h";;
4483 esac;
4484 eval "varval=\$$var";
4485 case "$varval" in
4486 "")
4487         $rm -f temp.c;
4488         for inc in $inclist; do
4489                 echo "#include <$inc>" >>temp.c;
4490         done;
4491         echo "#ifdef $type" >> temp.c;
4492         echo "printf(\"We have $type\");" >> temp.c;
4493         echo "#endif" >> temp.c;
4494         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4495         if $contains $type temp.E >/dev/null 2>&1; then
4496                 eval "$var=\$type";
4497         else
4498                 eval "$var=\$def";
4499         fi;
4500         $rm -f temp.?;;
4501 *) eval "$var=\$varval";;
4502 esac'
4503
4504 : define an is-a-typedef? function that prompts if the type is not available.
4505 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4506 case "$inclist" in
4507 "") inclist="sys/types.h";;
4508 esac;
4509 eval "varval=\$$var";
4510 case "$varval" in
4511 "")
4512         $rm -f temp.c;
4513         for inc in $inclist; do
4514                 echo "#include <$inc>" >>temp.c;
4515         done;
4516         echo "#ifdef $type" >> temp.c;
4517         echo "printf(\"We have $type\");" >> temp.c;
4518         echo "#endif" >> temp.c;
4519         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4520         echo " " ;
4521         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
4522         if $contains $type temp.E >/dev/null 2>&1; then
4523                 echo "$type found." >&4;
4524                 eval "$var=\$type";
4525         else
4526                 echo "$type NOT found." >&4;
4527                 dflt="$def";
4528                 . ./myread ;
4529                 eval "$var=\$ans";
4530         fi;
4531         $rm -f temp.?;;
4532 *) eval "$var=\$varval";;
4533 esac'
4534
4535 : define a shorthand compile call
4536 compile='
4537 mc_file=$1;
4538 shift;
4539 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
4540 : define a shorthand compile call for compilations that should be ok.
4541 compile_ok='
4542 mc_file=$1;
4543 shift;
4544 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
4545
4546 : check for lengths of integral types
4547 echo " "
4548 case "$intsize" in
4549 '')
4550         echo "Checking to see how big your integers are..." >&4
4551         $cat >try.c <<'EOCP'
4552 #include <stdio.h>
4553 int main()
4554 {
4555         printf("intsize=%d;\n", (int)sizeof(int));
4556         printf("longsize=%d;\n", (int)sizeof(long));
4557         printf("shortsize=%d;\n", (int)sizeof(short));
4558         exit(0);
4559 }
4560 EOCP
4561         set try
4562         if eval $compile_ok && $run ./try > /dev/null; then
4563                 eval `$run ./try`
4564                 echo "Your integers are $intsize bytes long."
4565                 echo "Your long integers are $longsize bytes long."
4566                 echo "Your short integers are $shortsize bytes long."
4567         else
4568                 $cat >&4 <<EOM
4569 !
4570 Help! I can't compile and run the intsize test program: please enlighten me!
4571 (This is probably a misconfiguration in your system or libraries, and
4572 you really ought to fix it.  Still, I'll try anyway.)
4573 !
4574 EOM
4575                 dflt=4
4576                 rp="What is the size of an integer (in bytes)?"
4577                 . ./myread
4578                 intsize="$ans"
4579                 dflt=$intsize
4580                 rp="What is the size of a long integer (in bytes)?"
4581                 . ./myread
4582                 longsize="$ans"
4583                 dflt=2
4584                 rp="What is the size of a short integer (in bytes)?"
4585                 . ./myread
4586                 shortsize="$ans"
4587         fi
4588         ;;
4589 esac
4590 $rm -f try try.*
4591
4592 : see what type lseek is declared as in the kernel
4593 rp="What is the type used for lseek's offset on this system?"
4594 set off_t lseektype long stdio.h sys/types.h
4595 eval $typedef_ask
4596
4597 echo " "
4598 echo "Checking to see how big your file offsets are..." >&4
4599 $cat >try.c <<EOCP
4600 #include <sys/types.h>
4601 #include <stdio.h>
4602 int main()
4603 {
4604     printf("%d\n", (int)sizeof($lseektype));
4605     return(0); 
4606 }
4607 EOCP
4608 set try
4609 if eval $compile_ok; then
4610         lseeksize=`$run ./try`
4611         echo "Your file offsets are $lseeksize bytes long."
4612 else
4613         dflt=$longsize
4614         echo " "
4615         echo "(I can't seem to compile the test program.  Guessing...)"
4616         rp="What is the size of your file offsets (in bytes)?"
4617         . ./myread
4618         lseeksize="$ans"
4619 fi
4620 $rm -f try.c try
4621
4622 : see what type file positions are declared as in the library
4623 rp="What is the type for file position used by fsetpos()?"
4624 set fpos_t fpostype long stdio.h sys/types.h
4625 eval $typedef_ask
4626
4627 echo " "
4628 case "$fpostype" in
4629 *_t) zzz="$fpostype"    ;;
4630 *)   zzz="fpos_t"       ;;
4631 esac
4632 echo "Checking the size of $zzz..." >&4 
4633 cat > try.c <<EOCP
4634 #include <sys/types.h>
4635 #include <stdio.h>
4636 int main() {
4637     printf("%d\n", (int)sizeof($fpostype));
4638     exit(0);
4639 }
4640 EOCP
4641 set try
4642 if eval $compile_ok; then
4643         yyy=`$run ./try`
4644         case "$yyy" in
4645         '')     fpossize=4
4646                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4647                 ;;
4648         *)      fpossize=$yyy
4649                 echo "Your $zzz is $fpossize bytes long."
4650                 ;;
4651         esac
4652 else
4653         dflt="$longsize"
4654         echo " " >&4
4655         echo "(I can't compile the test program.  Guessing...)" >&4
4656         rp="What is the size of your file positions (in bytes)?"
4657         . ./myread
4658         fpossize="$ans"
4659 fi
4660
4661
4662
4663 # Backward compatibility (uselfs is deprecated).
4664 case "$uselfs" in
4665 "$define"|true|[yY]*)
4666         cat <<EOM >&4
4667
4668 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
4669 EOM
4670         uselargefiles="$define"
4671         ;;
4672 esac                          
4673
4674 case "$lseeksize:$fpossize" in
4675 8:8) cat <<EOM
4676
4677 You can have files larger than 2 gigabytes.
4678 EOM
4679    val="$define" ;;
4680 *)    case "$uselargefiles" in
4681    "$undef"|false|[nN]*) dflt='n' ;;
4682    *)   dflt='y' ;;
4683    esac
4684    cat <<EOM
4685
4686 Perl can be built to understand large files (files larger than 2 gigabytes)
4687 on some systems.  To do so, Configure can be run with -Duselargefiles.
4688
4689 If this doesn't make any sense to you, just accept the default '$dflt'.
4690 EOM
4691    rp='Try to understand large files, if available?'
4692    . ./myread
4693    case "$ans" in
4694    y|Y)         val="$define" ;;
4695    *)           val="$undef"  ;;
4696    esac
4697    ;;
4698 esac
4699 set uselargefiles
4700 eval $setvar
4701 case "$uselargefiles" in
4702 "$define")
4703 : Look for a hint-file generated 'call-back-unit'.  If the
4704 : user has specified that a large files perl is to be built,
4705 : we may need to set or change some other defaults.
4706         if $test -f uselargefiles.cbu; then
4707                 echo "Your platform has some specific hints for large file builds, using them..."
4708                 . ./uselargefiles.cbu
4709                 echo " "
4710                 echo "Rechecking to see how big your file offsets are..." >&4
4711                 $cat >try.c <<EOCP
4712 #include <sys/types.h>
4713 #include <stdio.h>
4714 int main()
4715 {
4716     printf("%d\n", (int)sizeof($lseektype));
4717     return(0); 
4718 }
4719 EOCP
4720                 set try
4721                 if eval $compile_ok; then
4722                         lseeksize=`$run ./try`
4723                         $echo "Your file offsets are now $lseeksize bytes long."
4724                 else
4725                         dflt="$lseeksize"
4726                         echo " "
4727                         echo "(I can't seem to compile the test program.  Guessing...)"
4728                         rp="What is the size of your file offsets (in bytes)?"
4729                         . ./myread
4730                         lseeksize="$ans"
4731                 fi
4732                 case "$fpostype" in
4733                 *_t) zzz="$fpostype"    ;;
4734                 *)   zzz="fpos_t"       ;;
4735                 esac
4736                 $echo $n "Rechecking the size of $zzz...$c" >&4 
4737                 $cat > try.c <<EOCP
4738 #include <sys/types.h>
4739 #include <stdio.h>
4740 int main() {
4741     printf("%d\n", (int)sizeof($fpostype));
4742     exit(0);
4743 }
4744 EOCP
4745                 set try
4746                 if eval $compile_ok; then
4747                         yyy=`$run ./try`
4748                         dflt="$lseeksize"
4749                         case "$yyy" in
4750                         '')     echo " "
4751                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4752                                 ;;
4753                         *)      fpossize=$yyy
4754                                 echo " $fpossize bytes." >&4
4755                                 ;;
4756                         esac
4757                 else
4758                         dflt="$fpossize"
4759                         echo " "
4760                         echo "(I can't compile the test program.  Guessing...)" >&4
4761                         rp="What is the size of your file positions (in bytes)?"
4762                         . ./myread
4763                         fpossize="$ans"
4764                 fi
4765                 $rm -f try.c try
4766         fi
4767         ;;
4768 esac
4769
4770
4771 case "$usemorebits" in
4772 "$define"|true|[yY]*)
4773         use64bitint="$define"
4774         uselongdouble="$define"
4775         usemorebits="$define"
4776         ;;
4777 *)      usemorebits="$undef"
4778         ;;
4779 esac
4780
4781 : check for void type
4782 echo " "
4783 echo "Checking to see how well your C compiler groks the void type..." >&4
4784 case "$voidflags" in
4785 '')
4786         $cat >try.c <<'EOCP'
4787 #if TRY & 1
4788 void sub() {
4789 #else
4790 sub() {
4791 #endif
4792         extern void moo();      /* function returning void */
4793         void (*goo)();          /* ptr to func returning void */
4794 #if TRY & 8
4795         void *hue;              /* generic ptr */
4796 #endif
4797 #if TRY & 2
4798         void (*foo[10])();
4799 #endif
4800
4801 #if TRY & 4
4802         if(goo == moo) {
4803                 exit(0);
4804         }
4805 #endif
4806         exit(0);
4807 }
4808 int main() { sub(); }
4809 EOCP
4810         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
4811                 voidflags=$defvoidused
4812         echo "Good.  It appears to support void to the level $package wants.">&4
4813                 if $contains warning .out >/dev/null 2>&1; then
4814                         echo "However, you might get some warnings that look like this:"
4815                         $cat .out
4816                 fi
4817         else
4818 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
4819                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
4820                         echo "It supports 1..."
4821                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
4822                                 echo "It also supports 2..."
4823                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
4824                                         voidflags=7
4825                                         echo "And it supports 4 but not 8 definitely."
4826                                 else
4827                                         echo "It doesn't support 4..."
4828                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
4829                                                 voidflags=11
4830                                                 echo "But it supports 8."
4831                                         else
4832                                                 voidflags=3
4833                                                 echo "Neither does it support 8."
4834                                         fi
4835                                 fi
4836                         else
4837                                 echo "It does not support 2..."
4838                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
4839                                         voidflags=13
4840                                         echo "But it supports 4 and 8."
4841                                 else
4842                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
4843                                                 voidflags=5
4844                                                 echo "And it supports 4 but has not heard about 8."
4845                                         else
4846                                                 echo "However it supports 8 but not 4."
4847                                         fi
4848                                 fi
4849                         fi
4850                 else
4851                         echo "There is no support at all for void."
4852                         voidflags=0
4853                 fi
4854         fi
4855 esac
4856 case "$voidflags" in
4857 "$defvoidused") ;;
4858 *)      $cat >&4 <<'EOM'
4859   Support flag bits are:
4860     1: basic void declarations.
4861     2: arrays of pointers to functions returning void.
4862     4: operations between pointers to and addresses of void functions.
4863     8: generic void pointers.
4864 EOM
4865         dflt="$voidflags";
4866         rp="Your void support flags add up to what?"
4867         . ./myread
4868         voidflags="$ans"
4869         ;;
4870 esac
4871 $rm -f try.* .out
4872
4873 : check for length of pointer
4874 echo " "
4875 case "$ptrsize" in
4876 '')
4877         echo "Checking to see how big your pointers are..." >&4
4878         if test "$voidflags" -gt 7; then
4879                 echo '#define VOID_PTR char *' > try.c
4880         else
4881                 echo '#define VOID_PTR void *' > try.c
4882         fi
4883         $cat >>try.c <<'EOCP'
4884 #include <stdio.h>
4885 int main()
4886 {
4887     printf("%d\n", (int)sizeof(VOID_PTR));
4888     exit(0);
4889 }
4890 EOCP
4891         set try
4892         if eval $compile_ok; then
4893                 ptrsize=`$run ./try`
4894                 echo "Your pointers are $ptrsize bytes long."
4895         else
4896                 dflt='4'
4897                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
4898                 rp="What is the size of a pointer (in bytes)?"
4899                 . ./myread
4900                 ptrsize="$ans"
4901         fi
4902         ;;
4903 esac
4904 $rm -f try.c try
4905
4906 : check for long long
4907 echo " "
4908 echo "Checking to see if you have long long..." >&4
4909 echo 'int main() { long long x = 7; return 0; }' > try.c
4910 set try
4911 if eval $compile; then
4912         val="$define"
4913         echo "You have long long."
4914 else
4915         val="$undef"
4916         echo "You do not have long long."
4917 fi
4918 $rm try.*
4919 set d_longlong
4920 eval $setvar
4921
4922 : check for length of long long
4923 case "${d_longlong}${longlongsize}" in
4924 $define)
4925         echo " "
4926         echo "Checking to see how big your long longs are..." >&4
4927         $cat >try.c <<'EOCP'
4928 #include <stdio.h>
4929 int main()
4930 {
4931     printf("%d\n", (int)sizeof(long long));
4932     return(0);
4933 }
4934 EOCP
4935         set try
4936         if eval $compile_ok; then
4937                 longlongsize=`$run ./try`
4938                 echo "Your long longs are $longlongsize bytes long."
4939         else
4940                 dflt='8'
4941                 echo " "
4942                 echo "(I can't seem to compile the test program.  Guessing...)"
4943                 rp="What is the size of a long long (in bytes)?"
4944                 . ./myread
4945                 longlongsize="$ans"
4946         fi
4947         if $test "X$longsize" = "X$longlongsize"; then
4948                 echo "(That isn't any different from an ordinary long.)"
4949         fi      
4950         ;;
4951 esac
4952 $rm -f try.* try
4953
4954 : determine filename position in cpp output
4955 echo " "
4956 echo "Computing filename position in cpp output for #include directives..." >&4
4957 echo '#include <stdio.h>' > foo.c
4958 $cat >fieldn <<EOF
4959 $startsh
4960 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4961 $grep '^[       ]*#.*stdio\.h' | \
4962 while read cline; do
4963         pos=1
4964         set \$cline
4965         while $test \$# -gt 0; do
4966                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4967                         echo "\$pos"
4968                         exit 0
4969                 fi
4970                 shift
4971                 pos=\`expr \$pos + 1\`
4972         done
4973 done
4974 EOF
4975 chmod +x fieldn
4976 fieldn=`./fieldn`
4977 $rm -f foo.c fieldn
4978 case $fieldn in
4979 '') pos='???';;
4980 1) pos=first;;
4981 2) pos=second;;
4982 3) pos=third;;
4983 *) pos="${fieldn}th";;
4984 esac
4985 echo "Your cpp writes the filename in the $pos field of the line."
4986
4987 : locate header file
4988 $cat >findhdr <<EOF
4989 $startsh
4990 wanted=\$1
4991 name=''
4992 for usrincdir in $usrinc
4993 do
4994         if test -f \$usrincdir/\$wanted; then
4995                 echo "\$usrincdir/\$wanted"
4996                 exit 0
4997         fi
4998 done
4999 awkprg='{ print \$$fieldn }'
5000 echo "#include <\$wanted>" > foo\$\$.c
5001 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
5002 $grep "^[       ]*#.*\$wanted" | \
5003 while read cline; do
5004         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
5005         case "\$name" in
5006         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
5007         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
5008         *) exit 2;;
5009         esac;
5010 done;
5011 #
5012 # status = 0: grep returned 0 lines, case statement not executed
5013 # status = 1: headerfile found
5014 # status = 2: while loop executed, no headerfile found
5015 #
5016 status=\$?
5017 $rm -f foo\$\$.c;
5018 if test \$status -eq 1; then
5019         exit 0;
5020 fi
5021 exit 1
5022 EOF
5023 chmod +x findhdr
5024
5025 : define an alternate in-header-list? function
5026 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
5027 cont=true; xxf="echo \"<\$1> found.\" >&4";
5028 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
5029 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
5030 esac;
5031 case $# in 4) instead=instead;; *) instead="at last";; esac;
5032 while $test "$cont"; do
5033         xxx=`./findhdr $1`
5034         var=$2; eval "was=\$$2";
5035         if $test "$xxx" && $test -r "$xxx";
5036         then eval $xxf;
5037         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5038                 cont="";
5039         else eval $xxnf;
5040         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5041         set $yyy; shift; shift; yyy=$@;
5042         case $# in 0) cont="";;
5043         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5044                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5045         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5046                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5047         esac;
5048 done;
5049 while $test "$yyy";
5050 do set $yyy; var=$2; eval "was=\$$2";
5051         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5052         set $yyy; shift; shift; yyy=$@;
5053 done'
5054
5055 : see if inttypes.h is available
5056 : we want a real compile instead of Inhdr because some systems
5057 : have an inttypes.h which includes non-existent headers
5058 echo " "
5059 $cat >try.c <<EOCP
5060 #include <inttypes.h>
5061 int main() {
5062         static int32_t foo32 = 0x12345678;
5063 }
5064 EOCP
5065 set try
5066 if eval $compile; then
5067         echo "<inttypes.h> found." >&4
5068         val="$define"
5069 else
5070         echo "<inttypes.h> NOT found." >&4
5071         val="$undef"
5072 fi
5073 $rm -f try.c try
5074 set i_inttypes
5075 eval $setvar
5076
5077 : check for int64_t
5078 echo " "
5079 echo "Checking to see if you have int64_t..." >&4
5080 $cat >try.c <<EOCP
5081 #include <sys/types.h>
5082 #$i_inttypes I_INTTYPES
5083 #ifdef I_INTTYPES
5084 #include <inttypes.h>
5085 #endif
5086 int main() { int64_t x = 7; }
5087 EOCP
5088 set try
5089 if eval $compile; then
5090         val="$define"
5091         echo "You have int64_t."
5092 else
5093         val="$undef"
5094         echo "You do not have int64_t."
5095 fi
5096 $rm -f try try.*
5097 set d_int64_t
5098 eval $setvar
5099
5100
5101 echo " "
5102 echo "Checking which 64-bit integer type we could use..." >&4
5103
5104 case "$intsize" in
5105 8) val=int
5106    set quadtype
5107    eval $setvar
5108    val='"unsigned int"'
5109    set uquadtype
5110    eval $setvar
5111    quadkind=1
5112    ;;
5113 *) case "$longsize" in
5114    8) val=long
5115       set quadtype
5116       eval $setvar
5117       val='"unsigned long"'
5118       set uquadtype
5119       eval $setvar
5120       quadkind=2
5121       ;;
5122    *) case "$d_longlong:$longlongsize" in
5123       define:8)
5124         val='"long long"'
5125         set quadtype
5126         eval $setvar
5127         val='"unsigned long long"'
5128         set uquadtype
5129         eval $setvar
5130         quadkind=3
5131         ;;
5132       *) case "$d_int64_t" in
5133          define)
5134            val=int64_t
5135            set quadtype
5136            eval $setvar
5137            val=uint64_t
5138            set uquadtype
5139            eval $setvar
5140            quadkind=4
5141            ;;
5142          esac
5143          ;;
5144       esac
5145       ;;
5146    esac
5147    ;;
5148 esac
5149
5150 case "$quadtype" in
5151 '')     echo "Alas, no 64-bit integer types in sight." >&4
5152         d_quad="$undef"
5153         ;;
5154 *)      echo "We could use '$quadtype' for 64-bit integers." >&4
5155         d_quad="$define"
5156         ;;
5157 esac
5158
5159
5160 case "$uselonglong" in
5161 "$define"|true|[yY]*)
5162         cat <<EOM >&4
5163
5164 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
5165 EOM
5166         use64bitint="$define"
5167         ;;
5168 esac                          
5169 case "$use64bits" in
5170 "$define"|true|[yY]*)
5171         cat <<EOM >&4
5172
5173 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
5174 EOM
5175         use64bitint="$define"
5176         ;;
5177 esac                          
5178 case "$use64bitints" in
5179 "$define"|true|[yY]*)
5180         cat <<EOM >&4
5181
5182 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
5183 EOM
5184         use64bitint="$define"
5185         ;;
5186 esac                          
5187 case "$use64bitsint" in
5188 "$define"|true|[yY]*)
5189         cat <<EOM >&4
5190
5191 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
5192 EOM
5193         use64bitint="$define"
5194         ;;
5195 esac                          
5196 case "$uselonglongs" in
5197 "$define"|true|[yY]*)
5198         cat <<EOM >&4
5199
5200 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
5201 EOM
5202         use64bitint="$define"
5203         ;;
5204 esac                          
5205 case "$use64bitsall" in
5206 "$define"|true|[yY]*)
5207         cat <<EOM >&4
5208
5209 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
5210 EOM
5211         use64bitall="$define"
5212         ;;
5213 esac                          
5214
5215 case "$ccflags" in
5216 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
5217 esac
5218 case "$use64bitall" in
5219 "$define"|true|[yY]*) use64bitint="$define" ;;
5220 esac
5221
5222 case "$longsize" in
5223 8) cat <<EOM
5224
5225 You have natively 64-bit long integers.
5226 EOM
5227    val="$define"
5228    ;;
5229 *) case "$use64bitint" in
5230    "$define"|true|[yY]*) dflt='y';;
5231    *) dflt='n';;
5232    esac
5233    case "$d_quad" in
5234    "$define") ;;
5235    *) dflt='n' ;;
5236    esac
5237    cat <<EOM
5238
5239 Perl can be built to take advantage of 64-bit integer types
5240 on some systems.  To do so, Configure can be run with -Duse64bitint.
5241 Choosing this option will most probably introduce binary incompatibilities.
5242
5243 If this doesn't make any sense to you, just accept the default '$dflt'.
5244 (The default has been chosen based on your configuration.)
5245 EOM
5246    rp='Try to use 64-bit integers, if available?'
5247    . ./myread
5248    case "$ans" in
5249    [yY]*) val="$define" ;;
5250    *)     val="$undef"  ;;
5251    esac
5252    ;;
5253 esac
5254 set use64bitint
5255 eval $setvar
5256
5257 case "$use64bitall" in
5258 "$define"|true|[yY]*) dflt='y' ;;
5259 *) case "$longsize" in
5260    8) dflt='y' ;;
5261    *) dflt='n' ;;
5262    esac
5263    ;;
5264 esac    
5265 cat <<EOM
5266
5267 You may also choose to try maximal 64-bitness.  It means using as much
5268 64-bitness as possible on the platform.  This in turn means even more
5269 binary incompatibilities.  On the other hand, your platform may not
5270 have any more 64-bitness available than what you already have chosen.
5271
5272 If this doesn't make any sense to you, just accept the default '$dflt'.
5273 (The default has been chosen based on your configuration.)
5274 EOM
5275 rp='Try to use maximal 64-bit support, if available?'
5276 . ./myread
5277 case "$ans" in
5278 [yY]*) val="$define" ;;
5279 *)     val="$undef"  ;;
5280 esac
5281 set use64bitall
5282 eval $setvar
5283 case "$use64bitall" in
5284 "$define")
5285         case "$use64bitint" in
5286         "$undef")
5287                 cat <<EOM
5288
5289 Since you have chosen a maximally 64-bit build, I'm also turning on
5290 the use of 64-bit integers.
5291 EOM
5292                 use64bitint="$define" ;;
5293         esac
5294         ;;
5295 esac
5296
5297 case "$use64bitall" in
5298 "$define"|true|[yY]*)
5299         case "$ptrsize" in
5300         4)      cat <<EOM >&4
5301
5302 *** You have chosen a maximally 64-bit build, but your pointers
5303 *** are only 4 bytes wide, disabling maximal 64-bitness.
5304
5305 EOM
5306                 use64bitall="$undef"
5307                 case "$use64bitint" in
5308                 "$define"|true|[yY]*) ;;
5309                 *)      cat <<EOM >&4
5310
5311 *** Downgrading from maximal 64-bitness to using 64-bit integers.
5312
5313 EOM
5314                         use64bitint="$define"
5315                         ;;
5316                 esac
5317                 ;;
5318         esac
5319         ;;
5320 esac
5321
5322 case "$use64bitint" in
5323 "$define"|true|[yY]*)
5324 : Look for a hint-file generated 'call-back-unit'.  If the
5325 : user has specified that a 64-bit perl is to be built,
5326 : we may need to set or change some other defaults.
5327         if $test -f use64bitint.cbu; then
5328                 echo "Your platform has some specific hints for 64-bit integers, using them..."
5329                 . ./use64bitint.cbu
5330         fi
5331         case "$longsize" in
5332         4) case "$archname64" in
5333            '') archname64=64int ;;
5334            esac
5335            ;;
5336         esac
5337         ;;
5338 esac
5339
5340 case "$use64bitall" in
5341 "$define"|true|[yY]*)
5342 : Look for a hint-file generated 'call-back-unit'.  If the
5343 : user has specified that a maximally 64-bit perl is to be built,
5344 : we may need to set or change some other defaults.
5345         if $test -f use64bitall.cbu; then
5346                 echo "Your platform has some specific hints for 64-bit builds, using them..."
5347                 . ./use64bitall.cbu
5348         fi
5349         case "$longsize" in
5350         4) case "$archname64" in
5351            ''|64int) archname64=64all ;;
5352            esac
5353            ;;
5354         esac
5355         ;;
5356 esac
5357
5358 echo " "
5359 echo "Checking for GNU C Library..." >&4
5360 cat >try.c <<EOM
5361 #include <stdio.h>
5362 int main()
5363 {
5364 #ifdef __GLIBC__
5365     exit(0);
5366 #else
5367     exit(1);
5368 #endif
5369 }
5370 EOM
5371 set try
5372 if eval $compile_ok && $run ./try; then
5373         val="$define"
5374         echo "You are using the GNU C Library"
5375 else
5376         val="$undef"
5377         echo "You are not using the GNU C Library"
5378 fi
5379 $rm -f try try.*
5380 set d_gnulibc
5381 eval $setvar
5382
5383 : see if nm is to be used to determine whether a symbol is defined or not
5384 case "$usenm" in
5385 '')
5386         dflt=''
5387         case "$d_gnulibc" in
5388         "$define")
5389                 echo " "
5390                 echo "nm probably won't work on the GNU C Library." >&4
5391                 dflt=n
5392                 ;;
5393         esac
5394         case "$dflt" in
5395         '') 
5396                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5397                         echo " "
5398                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5399                         echo "'nm' won't be sufficient on this sytem." >&4
5400                         dflt=n
5401                 fi
5402                 ;;
5403         esac
5404         case "$dflt" in
5405         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5406                 if $test $dflt -gt 20; then
5407                         dflt=y
5408                 else
5409                         dflt=n
5410                 fi
5411                 ;;
5412         esac
5413         ;;
5414 *)
5415         case "$usenm" in
5416         true|$define) dflt=y;;
5417         *) dflt=n;;
5418         esac
5419         ;;
5420 esac
5421 $cat <<EOM
5422
5423 I can use $nm to extract the symbols from your C libraries. This
5424 is a time consuming task which may generate huge output on the disk (up
5425 to 3 megabytes) but that should make the symbols extraction faster. The
5426 alternative is to skip the 'nm' extraction part and to compile a small
5427 test program instead to determine whether each symbol is present. If
5428 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5429 this may be the best solution.
5430
5431 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5432
5433 EOM
5434 rp="Shall I use $nm to extract C symbols from the libraries?"
5435 . ./myread
5436 case "$ans" in
5437 [Nn]*) usenm=false;;
5438 *) usenm=true;;
5439 esac
5440
5441 runnm=$usenm
5442 case "$reuseval" in
5443 true) runnm=false;;
5444 esac
5445
5446 : nm options which may be necessary
5447 case "$nm_opt" in
5448 '') if $test -f /mach_boot; then
5449                 nm_opt=''       # Mach
5450         elif $test -d /usr/ccs/lib; then
5451                 nm_opt='-p'     # Solaris (and SunOS?)
5452         elif $test -f /dgux; then
5453                 nm_opt='-p'     # DG-UX
5454         elif $test -f /lib64/rld; then
5455                 nm_opt='-p'     # 64-bit Irix
5456         else
5457                 nm_opt=''
5458         fi;;
5459 esac
5460
5461 : nm options which may be necessary for shared libraries but illegal
5462 : for archive libraries.  Thank you, Linux.
5463 case "$nm_so_opt" in
5464 '')     case "$myuname" in
5465         *linux*)
5466                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5467                         nm_so_opt='--dynamic'
5468                 fi
5469                 ;;
5470         esac
5471         ;;
5472 esac
5473
5474 case "$runnm" in
5475 true)
5476 : get list of predefined functions in a handy place
5477 echo " "
5478 case "$libc" in
5479 '') libc=unknown
5480         case "$libs" in
5481         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5482         esac
5483         ;;
5484 esac
5485 case "$libs" in
5486 '') ;;
5487 *)  for thislib in $libs; do
5488         case "$thislib" in
5489         -lc|-lc_s)
5490                 : Handle C library specially below.
5491                 ;;
5492         -l*)
5493                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5494                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5495                         :
5496                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5497                         :
5498                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5499                         :
5500                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5501                         :
5502                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5503                         :
5504                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5505                         :
5506                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5507                         :
5508                 else
5509                         try=''
5510                 fi
5511                 libnames="$libnames $try"
5512                 ;;
5513         *) libnames="$libnames $thislib" ;;
5514         esac
5515         done
5516         ;;
5517 esac
5518 xxx=normal
5519 case "$libc" in
5520 unknown)
5521         set /lib/libc.$so
5522         for xxx in $libpth; do
5523                 $test -r $1 || set $xxx/libc.$so
5524                 : The messy sed command sorts on library version numbers.
5525                 $test -r $1 || \
5526                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5527                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5528                                 h
5529                                 s/[0-9][0-9]*/0000&/g
5530                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5531                                 G
5532                                 s/\n/ /' | \
5533                          $sort | $sed -e 's/^.* //'`
5534                 eval set \$$#
5535         done
5536         $test -r $1 || set /usr/ccs/lib/libc.$so
5537         $test -r $1 || set /lib/libsys_s$_a
5538         ;;
5539 *)
5540         set blurfl
5541         ;;
5542 esac
5543 if $test -r "$1"; then
5544         echo "Your (shared) C library seems to be in $1."
5545         libc="$1"
5546 elif $test -r /lib/libc && $test -r /lib/clib; then
5547         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5548         xxx=apollo
5549         libc='/lib/clib /lib/libc'
5550         if $test -r /lib/syslib; then
5551                 echo "(Your math library is in /lib/syslib.)"
5552                 libc="$libc /lib/syslib"
5553         fi
5554 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5555         echo "Your C library seems to be in $libc, as you said before."
5556 elif $test -r $incpath/usr/lib/libc$_a; then
5557         libc=$incpath/usr/lib/libc$_a;
5558         echo "Your C library seems to be in $libc.  That's fine."
5559 elif $test -r /lib/libc$_a; then
5560         libc=/lib/libc$_a;
5561         echo "Your C library seems to be in $libc.  You're normal."
5562 else
5563         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5564                 :
5565         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5566                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5567         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5568                 :
5569         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5570                 :
5571         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5572                 :
5573         else
5574                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5575         fi
5576         if $test -r "$tans"; then
5577                 echo "Your C library seems to be in $tans, of all places."
5578                 libc=$tans
5579         else
5580                 libc='blurfl'
5581         fi
5582 fi
5583 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5584         dflt="$libc"
5585         cat <<EOM
5586
5587 If the guess above is wrong (which it might be if you're using a strange
5588 compiler, or your machine supports multiple models), you can override it here.
5589
5590 EOM
5591 else
5592         dflt=''
5593         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
5594         cat >&4 <<EOM
5595 I can't seem to find your C library.  I've looked in the following places:
5596
5597 EOM
5598         $sed 's/^/      /' libpath
5599         cat <<EOM
5600
5601 None of these seems to contain your C library. I need to get its name...
5602
5603 EOM
5604 fi
5605 fn=f
5606 rp='Where is your C library?'
5607 . ./getfile
5608 libc="$ans"
5609
5610 echo " "
5611 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
5612 set X `cat libnames`
5613 shift
5614 xxx=files
5615 case $# in 1) xxx=file; esac
5616 echo "Extracting names from the following $xxx for later perusal:" >&4
5617 echo " "
5618 $sed 's/^/      /' libnames >&4
5619 echo " "
5620 $echo $n "This may take a while...$c" >&4
5621
5622 for file in $*; do
5623         case $file in
5624         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5625         *) $nm $nm_opt $file 2>/dev/null;;
5626         esac
5627 done >libc.tmp
5628
5629 $echo $n ".$c"
5630 $grep fprintf libc.tmp > libc.ptf
5631 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5632 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5633 xxx='[ADTSIW]'
5634 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5635         eval $xscan;\
5636         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5637                 eval $xrun
5638 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5639         eval $xscan;\
5640         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5641                 eval $xrun
5642 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5643         eval $xscan;\
5644         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5645                 eval $xrun
5646 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5647         eval $xscan;\
5648         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5649                 eval $xrun
5650 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5651         eval $xscan;\
5652         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5653                 eval $xrun
5654 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5655         eval $xscan;\
5656         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5657                 eval $xrun
5658 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5659                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5660         eval $xscan;\
5661         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5662                 eval $xrun
5663 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5664         eval $xscan;\
5665         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5666                 eval $xrun
5667 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5668         eval $xscan;\
5669         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5670                 eval $xrun
5671 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5672         eval $xscan;\
5673         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5674                 eval $xrun
5675 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5676         eval $xscan;\
5677         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5678                 eval $xrun
5679 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5680         eval $xscan;\
5681         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5682                 eval $xrun
5683 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5684         eval $xscan;\
5685         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5686                 eval $xrun
5687 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5688         eval $xscan;\
5689         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5690                 eval $xrun
5691 else
5692         $nm -p $* 2>/dev/null >libc.tmp
5693         $grep fprintf libc.tmp > libc.ptf
5694         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5695                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5696         then
5697                 nm_opt='-p'
5698                 eval $xrun
5699         else
5700                 echo " "
5701                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5702                 com=''
5703                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5704                         for thisname in $libnames $libc; do
5705                                 $ar t $thisname >>libc.tmp
5706                         done
5707                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5708                         echo "Ok." >&4
5709                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5710                         # Repeat libc to extract forwarders to DLL entries too
5711                         for thisname in $libnames $libc; do
5712                                 $ar tv $thisname >>libc.tmp
5713                                 # Revision 50 of EMX has bug in $ar.
5714                                 # it will not extract forwarders to DLL entries
5715                                 # Use emximp which will extract exactly them.
5716                                 emximp -o tmp.imp $thisname \
5717                                     2>/dev/null && \
5718                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5719                                     < tmp.imp >>libc.tmp
5720                                 $rm tmp.imp
5721                         done
5722                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5723                         echo "Ok." >&4
5724                 else
5725                         echo "$ar didn't seem to work right." >&4
5726                         echo "Maybe this is a Cray...trying bld instead..." >&4
5727                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5728                         then
5729                                 for thisname in $libnames; do
5730                                         bld t $libnames | \
5731                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5732                                         $ar t $thisname >>libc.tmp
5733                                 done
5734                                 echo "Ok." >&4
5735                         else
5736                                 echo "That didn't work either.  Giving up." >&4
5737                                 exit 1
5738                         fi
5739                 fi
5740         fi
5741 fi
5742 nm_extract="$com"
5743 if $test -f /lib/syscalls.exp; then
5744         echo " "
5745         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5746         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
5747 fi
5748 ;;
5749 esac
5750 $rm -f libnames libpath
5751
5752 : is a C symbol defined?
5753 csym='tlook=$1;
5754 case "$3" in
5755 -v) tf=libc.tmp; tc=""; tdc="";;
5756 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5757 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5758 esac;
5759 tx=yes;
5760 case "$reuseval-$4" in
5761 true-) ;;
5762 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5763 esac;
5764 case "$tx" in
5765 yes)
5766         case "$runnm" in
5767         true)
5768                 if $contains $tlook $tf >/dev/null 2>&1;
5769                 then tval=true;
5770                 else tval=false;
5771                 fi;;
5772         *)
5773                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5774                 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
5775                 then tval=true;
5776                 else tval=false;
5777                 fi;
5778                 $rm -f t t.c;;
5779         esac;;
5780 *)
5781         case "$tval" in
5782         $define) tval=true;;
5783         *) tval=false;;
5784         esac;;
5785 esac;
5786 eval "$2=$tval"'
5787
5788 : define an is-in-libc? function
5789 inlibc='echo " "; td=$define; tu=$undef;
5790 sym=$1; var=$2; eval "was=\$$2";
5791 tx=yes;
5792 case "$reuseval$was" in
5793 true) ;;
5794 true*) tx=no;;
5795 esac;
5796 case "$tx" in
5797 yes)
5798         set $sym tres -f;
5799         eval $csym;
5800         case "$tres" in
5801         true)
5802                 echo "$sym() found." >&4;
5803                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5804         *)
5805                 echo "$sym() NOT found." >&4;
5806                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5807         esac;;
5808 *)
5809         case "$was" in
5810         $define) echo "$sym() found." >&4;;
5811         *) echo "$sym() NOT found." >&4;;
5812         esac;;
5813 esac'
5814
5815 : see if sqrtl exists
5816 set sqrtl d_sqrtl
5817 eval $inlibc
5818
5819 case "$ccflags" in
5820 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
5821 esac
5822
5823 case "$uselongdouble" in
5824 $define|true|[yY]*)     dflt='y';;
5825 *) dflt='n';;
5826 esac
5827 cat <<EOM
5828
5829 Perl can be built to take advantage of long doubles which
5830 (if available) may give more accuracy and range for floating point numbers.
5831
5832 If this doesn't make any sense to you, just accept the default '$dflt'.
5833 EOM
5834 rp='Try to use long doubles if available?'
5835 . ./myread
5836 case "$ans" in
5837 y|Y)    val="$define"   ;;
5838 *)      val="$undef"    ;;
5839 esac
5840 set uselongdouble
5841 eval $setvar
5842
5843 case "$uselongdouble" in
5844 true|[yY]*) uselongdouble="$define" ;;
5845 esac
5846
5847 case "$uselongdouble" in
5848 $define)
5849 : Look for a hint-file generated 'call-back-unit'.  If the
5850 : user has specified that long doubles should be used,
5851 : we may need to set or change some other defaults.
5852         if $test -f uselongdouble.cbu; then
5853                 echo "Your platform has some specific hints for long doubles, using them..."
5854                 . ./uselongdouble.cbu
5855         else
5856                 $cat <<EOM
5857 (Your platform doesn't have any specific hints for long doubles.)
5858 EOM
5859         fi
5860         ;;
5861 esac
5862
5863 case "$uselongdouble:$d_sqrtl" in
5864 $define:$undef)
5865                 $cat <<EOM >&4
5866
5867 *** You requested the use of long doubles but you do not seem to have
5868 *** the mathematic functions for long doubles.  I'm disabling the use
5869 *** of long doubles.
5870
5871 EOM
5872         uselongdouble=$undef
5873         ;;
5874 esac
5875
5876 : check for length of double
5877 echo " "
5878 case "$doublesize" in
5879 '')
5880         echo "Checking to see how big your double precision numbers are..." >&4
5881         $cat >try.c <<'EOCP'
5882 #include <stdio.h>
5883 int main()
5884 {
5885     printf("%d\n", (int)sizeof(double));
5886     exit(0);
5887 }
5888 EOCP
5889         set try
5890         if eval $compile_ok; then
5891                 doublesize=`$run ./try`
5892                 echo "Your double is $doublesize bytes long."
5893         else
5894                 dflt='8'
5895                 echo "(I can't seem to compile the test program.  Guessing...)"
5896                 rp="What is the size of a double precision number (in bytes)?"
5897                 . ./myread
5898                 doublesize="$ans"
5899         fi
5900         ;;
5901 esac
5902 $rm -f try.c try
5903
5904 : check for long doubles
5905 echo " "
5906 echo "Checking to see if you have long double..." >&4
5907 echo 'int main() { long double x = 7.0; }' > try.c
5908 set try
5909 if eval $compile; then
5910         val="$define"
5911         echo "You have long double."
5912 else
5913         val="$undef"
5914         echo "You do not have long double."
5915 fi
5916 $rm try.*
5917 set d_longdbl
5918 eval $setvar
5919
5920 : check for length of long double
5921 case "${d_longdbl}${longdblsize}" in
5922 $define)
5923         echo " "
5924         echo "Checking to see how big your long doubles are..." >&4
5925         $cat >try.c <<'EOCP'
5926 #include <stdio.h>
5927 int main()
5928 {
5929         printf("%d\n", sizeof(long double));
5930 }
5931 EOCP
5932         set try
5933         set try
5934         if eval $compile; then
5935                 longdblsize=`$run ./try`
5936                 echo "Your long doubles are $longdblsize bytes long."
5937         else
5938                 dflt='8'
5939                 echo " "
5940                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
5941                 rp="What is the size of a long double (in bytes)?"
5942                 . ./myread
5943                 longdblsize="$ans"
5944         fi
5945         if $test "X$doublesize" = "X$longdblsize"; then
5946                 echo "(That isn't any different from an ordinary double.)"
5947         fi      
5948         ;;
5949 esac
5950 $rm -f try.* try
5951
5952 case "$useperlio" in
5953 $define|true|[yY]*|'')  dflt='y';;
5954 *) dflt='n';;
5955 esac
5956 cat <<EOM
5957
5958 Previous version of $package used the standard IO mechanisms as
5959 defined in <stdio.h>.  Versions 5.003_02 and later of $package allow
5960 alternate IO mechanisms via the PerlIO abstraction layer, but the
5961 stdio mechanism is still available if needed.  The abstraction layer
5962 can use AT&T's sfio (if you already have sfio installed) or regular stdio.
5963 Using PerlIO with sfio may cause problems with some extension modules.
5964
5965 If this doesn't make any sense to you, just accept the default '$dflt'.
5966 EOM
5967 rp='Use the PerlIO abstraction layer?'
5968 . ./myread
5969 case "$ans" in
5970 y|Y) 
5971         val="$define"
5972         ;;
5973 *)      
5974         echo "Ok, doing things the stdio way."
5975         val="$undef"
5976         ;;
5977 esac
5978 set useperlio
5979 eval $setvar 
5980
5981 case "$usesocks" in
5982 $define|true|[yY]*)
5983         case "$useperlio" in
5984         $define|true|[yY]*) ;;
5985         *)      cat >&4 <<EOM
5986
5987 You are using the SOCKS proxy protocol library which means that you
5988 should also use the PerlIO layer.  You may be headed for trouble.
5989
5990 EOM
5991                 ;;
5992         esac
5993         ;;
5994 esac
5995
5996         
5997 : determine the architecture name
5998 echo " "
5999 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
6000         tarch=`arch`"-$osname"
6001 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
6002         if uname -m > tmparch 2>&1 ; then
6003                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
6004                         -e 's/$/'"-$osname/" tmparch`
6005         else
6006                 tarch="$osname"
6007         fi
6008         $rm -f tmparch
6009 else
6010         tarch="$osname"
6011 fi
6012 case "$myarchname" in
6013 ''|"$tarch") ;;
6014 *)
6015         echo "(Your architecture name used to be $myarchname.)"
6016         archname=''
6017         ;;
6018 esac
6019 case "$targetarch" in
6020 '') ;;
6021 *)  archname=`echo $targetarch|sed 's,^[^-]*-,,'` ;;
6022 esac
6023 myarchname="$tarch"
6024 case "$archname" in
6025 '') dflt="$tarch";;
6026 *) dflt="$archname";;
6027 esac
6028 rp='What is your architecture name'
6029 . ./myread
6030 archname="$ans"
6031 case "$usethreads" in
6032 $define)
6033         echo "Threads selected." >&4
6034         case "$archname" in
6035         *-thread*) echo "...and architecture name already has -thread." >&4
6036                 ;;
6037         *)      archname="$archname-thread"
6038                 echo "...setting architecture name to $archname." >&4
6039                 ;;
6040         esac
6041         ;;
6042 esac
6043 case "$usemultiplicity" in
6044 $define)
6045         echo "Multiplicity selected." >&4
6046         case "$archname" in
6047         *-multi*) echo "...and architecture name already has -multi." >&4
6048                 ;;
6049         *)      archname="$archname-multi"
6050                 echo "...setting architecture name to $archname." >&4
6051                 ;;
6052         esac
6053         ;;
6054 esac
6055 case "$use64bitint$use64bitall" in
6056 *"$define"*)
6057         case "$archname64" in
6058         '')
6059                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
6060                 ;;
6061         *)
6062                 case "$use64bitint" in
6063                 "$define") echo "64 bit integers selected." >&4 ;;
6064                 esac
6065                 case "$use64bitall" in
6066                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
6067                 esac
6068                 case "$archname" in
6069                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
6070                         ;;
6071                 *)      archname="$archname-$archname64"
6072                         echo "...setting architecture name to $archname." >&4
6073                         ;;
6074                 esac
6075                 ;;
6076         esac
6077 esac
6078 case "$uselongdouble" in
6079 $define)
6080         echo "Long doubles selected." >&4
6081         case "$longdblsize" in
6082         $doublesize)
6083                 "...but long doubles are equal to doubles, not changing architecture name." >&4
6084                 ;;
6085         *)
6086                 case "$archname" in
6087                 *-ld*) echo "...and architecture name already has -ld." >&4
6088                         ;;
6089                 *)      archname="$archname-ld"
6090                         echo "...setting architecture name to $archname." >&4
6091                         ;;
6092                 esac
6093                 ;;
6094         esac
6095         ;;
6096 esac
6097 case "$useperlio" in
6098 $define)
6099         echo "Perlio selected." >&4
6100         ;;
6101 *)
6102         echo "Perlio not selected, using stdio." >&4
6103         case "$archname" in
6104         *-stdio*) echo "...and architecture name already has -stdio." >&4
6105                 ;;
6106         *)      archname="$archname-stdio"
6107                 echo "...setting architecture name to $archname." >&4
6108                 ;;
6109         esac
6110         ;;
6111 esac
6112
6113 : determine root of directory hierarchy where package will be installed.
6114 case "$prefix" in
6115 '')
6116         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
6117         ;;
6118 *)
6119         dflt="$prefix"
6120         ;;
6121 esac
6122 $cat <<EOM
6123
6124 By default, $package will be installed in $dflt/bin, manual pages
6125 under $dflt/man, etc..., i.e. with $dflt as prefix for all
6126 installation directories. Typically this is something like /usr/local.
6127 If you wish to have binaries under /usr/bin but other parts of the
6128 installation under /usr/local, that's ok: you will be prompted
6129 separately for each of the installation directories, the prefix being
6130 only used to set the defaults.
6131
6132 EOM
6133 fn=d~
6134 rp='Installation prefix to use?'
6135 . ./getfile
6136 oldprefix=''
6137 case "$prefix" in
6138 '') ;;
6139 *)
6140         case "$ans" in
6141         "$prefix") ;;
6142         *) oldprefix="$prefix";;
6143         esac
6144         ;;
6145 esac
6146 prefix="$ans"
6147 prefixexp="$ansexp"
6148
6149 case "$afsroot" in
6150 '')     afsroot=/afs ;;
6151 *)      afsroot=$afsroot ;;
6152 esac
6153
6154 : is AFS running?
6155 echo " "
6156 case "$afs" in
6157 $define|true)   afs=true ;;
6158 $undef|false)   afs=false ;;
6159 *)      if test -d $afsroot; then
6160                 afs=true
6161         else
6162                 afs=false
6163         fi
6164         ;;
6165 esac
6166 if $afs; then
6167         echo "AFS may be running... I'll be extra cautious then..." >&4
6168 else
6169         echo "AFS does not seem to be running..." >&4
6170 fi
6171
6172 : determine installation prefix for where package is to be installed.
6173 if $afs; then 
6174 $cat <<EOM
6175
6176 Since you are running AFS, I need to distinguish the directory in which
6177 files will reside from the directory in which they are installed (and from
6178 which they are presumably copied to the former directory by occult means).
6179
6180 EOM
6181         case "$installprefix" in
6182         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
6183         *) dflt="$installprefix";;
6184         esac
6185 else
6186 $cat <<EOM
6187
6188 In some special cases, particularly when building $package for distribution,
6189 it is convenient to distinguish between the directory in which files should 
6190 be installed from the directory ($prefix) in which they 
6191 will eventually reside.  For most users, these two directories are the same.
6192
6193 EOM
6194         case "$installprefix" in
6195         '') dflt=$prefix ;;
6196         *) dflt=$installprefix;;
6197         esac
6198 fi
6199 fn=d~
6200 rp='What installation prefix should I use for installing files?'
6201 . ./getfile
6202 installprefix="$ans"
6203 installprefixexp="$ansexp"
6204
6205 : set the prefixit variable, to compute a suitable default value
6206 prefixit='case "$3" in
6207 ""|none)
6208         case "$oldprefix" in
6209         "") eval "$1=\"\$$2\"";;
6210         *)
6211                 case "$3" in
6212                 "") eval "$1=";;
6213                 none)
6214                         eval "tp=\"\$$2\"";
6215                         case "$tp" in
6216                         ""|" ") eval "$1=\"\$$2\"";;
6217                         *) eval "$1=";;
6218                         esac;;
6219                 esac;;
6220         esac;;
6221 *)
6222         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
6223         case "$tp" in
6224         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
6225         /*-$oldprefix/*|\~*-$oldprefix/*)
6226                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
6227         *) eval "$1=\"\$$2\"";;
6228         esac;;
6229 esac'
6230
6231
6232 : get the patchlevel
6233 echo " "
6234 echo "Getting the current patchlevel..." >&4
6235 if $test -r $rsrc/patchlevel.h;then
6236         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
6237         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
6238         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6239         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
6240         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
6241         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6242        perl_patchlevel=`grep ',"DEVEL[0-9][0-9]*"' $rsrc/patchlevel.h|sed 's/[^0-9]//g'`
6243 else
6244         revision=0
6245         patchlevel=0
6246         subversion=0
6247         api_revision=0
6248         api_version=0
6249         api_subversion=0
6250         perl_patchlevel=0
6251         $echo "(You do not have patchlevel.h.  Eek.)"
6252 fi
6253 if $test -r $rsrc/.patch ; then  
6254         if $test "`cat $rsrc/.patch`" -gt "$perl_patchlevel" ; then
6255                 perl_patchlevel=`cat $rsrc/.patch`
6256         fi
6257 fi
6258 case "$perl_patchlevel" in
6259 0)  ;;
6260 '') $echo "(You have $package version $patchlevel subversion $subversion.)" ;;
6261 *)  $echo "(You have $package version $patchlevel subversion $subversion patchlevel $perl_patchlevel.)" ;;
6262 esac
6263 case "$osname" in
6264 dos|vms)
6265         : XXX Should be a Configure test for double-dots in filenames.
6266         version=`echo $revision $patchlevel $subversion | \
6267                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6268         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6269                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6270         ;;
6271 *)
6272         version=`echo $revision $patchlevel $subversion | \
6273                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6274         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6275                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6276         ;;
6277 esac
6278 : Special case the 5.005_xx maintenance series, which used 5.005
6279 : without any subversion label as a subdirectory in $sitelib
6280 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
6281         api_versionstring='5.005'
6282 fi
6283
6284 : determine installation style
6285 : For now, try to deduce it from prefix unless it is already set.
6286 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
6287 case "$installstyle" in
6288 '')     case "$prefix" in
6289                 *perl*) dflt='lib';;
6290                 *) dflt='lib/perl5' ;;
6291         esac
6292         ;;
6293 *)      dflt="$installstyle" ;;
6294 esac
6295 : Probably not worth prompting for this since we prompt for all
6296 : the directories individually, and the prompt would be too long and
6297 : confusing anyway.
6298 installstyle=$dflt
6299
6300 : determine where private library files go
6301 : Usual default is /usr/local/lib/perl5/$version.
6302 : Also allow things like /opt/perl/lib/$version, since 
6303 : /opt/perl/lib/perl5... would be redundant.
6304 : The default "style" setting is made in installstyle.U
6305 case "$installstyle" in
6306 *lib/perl5*) set dflt privlib lib/$package/$version ;;
6307 *)       set dflt privlib lib/$version ;;
6308 esac
6309 eval $prefixit
6310 $cat <<EOM
6311
6312 There are some auxiliary files for $package that need to be put into a
6313 private library directory that is accessible by everyone.
6314
6315 EOM
6316 fn=d~+
6317 rp='Pathname where the private library files will reside?'
6318 . ./getfile
6319 privlib="$ans"
6320 privlibexp="$ansexp"
6321 : Change installation prefix, if necessary.
6322 if $test X"$prefix" != X"$installprefix"; then
6323         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
6324 else
6325         installprivlib="$privlibexp"
6326 fi
6327
6328 : set the prefixup variable, to restore leading tilda escape
6329 prefixup='case "$prefixexp" in
6330 "$prefix") ;;
6331 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
6332 esac'
6333
6334 : determine where public architecture dependent libraries go
6335 set archlib archlib
6336 eval $prefixit
6337 : privlib default is /usr/local/lib/$package/$version
6338 : archlib default is /usr/local/lib/$package/$version/$archname
6339 : privlib may have an optional trailing /share.
6340 tdflt=`echo $privlib | $sed 's,/share$,,'`
6341 tdflt=$tdflt/$archname
6342 case "$archlib" in
6343 '')     dflt=$tdflt
6344         ;;
6345 *)      dflt="$archlib"
6346     ;;
6347 esac
6348 $cat <<EOM
6349
6350 $spackage contains architecture-dependent library files.  If you are
6351 sharing libraries in a heterogeneous environment, you might store
6352 these files in a separate location.  Otherwise, you can just include
6353 them with the rest of the public library files.
6354
6355 EOM
6356 fn=d+~
6357 rp='Where do you want to put the public architecture-dependent libraries?'
6358 . ./getfile
6359 archlib="$ans"
6360 archlibexp="$ansexp"
6361 if $test X"$archlib" = X"$privlib"; then
6362         d_archlib="$undef"
6363 else
6364         d_archlib="$define"
6365 fi
6366 : Change installation prefix, if necessary.
6367 if $test X"$prefix" != X"$installprefix"; then
6368         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
6369 else
6370         installarchlib="$archlibexp"
6371 fi
6372
6373
6374 : Binary compatibility with 5.005 is not possible for builds
6375 : with advanced features
6376 case "$usethreads$usemultiplicity" in
6377 *define*)
6378         bincompat5005="$undef"
6379         d_bincompat5005="$undef"
6380         ;;
6381 *)      $cat <<EOM
6382
6383 This version of Perl can be compiled for binary compatibility with 5.005.
6384 If you decide to do so, you will be able to continue using most of the
6385 extensions that were compiled for Perl 5.005.
6386
6387 EOM
6388         case "$bincompat5005$d_bincompat5005" in
6389         *"$undef"*) dflt=n ;;
6390         *) dflt=y ;;
6391         esac
6392         rp='Binary compatibility with Perl 5.005?'
6393         . ./myread
6394         case "$ans" in
6395         y*) val="$define" ;;
6396         *)  val="$undef" ;;
6397         esac
6398         set d_bincompat5005
6399         eval $setvar
6400         case "$d_bincompat5005" in
6401         "$define")
6402                 bincompat5005="$define"
6403                 ;;
6404         *)      bincompat5005="$undef"
6405                 d_bincompat5005="$undef"
6406                 ;;
6407         esac
6408         ;;
6409 esac
6410
6411
6412 : see if setuid scripts can be secure
6413 $cat <<EOM
6414
6415 Some kernels have a bug that prevents setuid #! scripts from being
6416 secure.  Some sites have disabled setuid #! scripts because of this.
6417
6418 First let's decide if your kernel supports secure setuid #! scripts.
6419 (If setuid #! scripts would be secure but have been disabled anyway,
6420 don't say that they are secure if asked.)
6421
6422 EOM
6423
6424 val="$undef"
6425 if $test -d /dev/fd; then
6426         echo "#!$ls" >reflect
6427         chmod +x,u+s reflect
6428         ./reflect >flect 2>&1
6429         if $contains "/dev/fd" flect >/dev/null; then
6430                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
6431                 val="$define"
6432         else
6433                 $cat <<EOM
6434 If you are not sure if they are secure, I can check but I'll need a
6435 username and password different from the one you are using right now.
6436 If you don't have such a username or don't want me to test, simply
6437 enter 'none'.
6438
6439 EOM
6440                 rp='Other username to test security of setuid scripts with?'
6441                 dflt='none'
6442                 . ./myread
6443                 case "$ans" in
6444                 n|none)
6445                         case "$d_suidsafe" in
6446                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
6447                                 dflt=n;;
6448                         "$undef")
6449                                 echo "Well, the $hint value is *not* secure." >&4
6450                                 dflt=n;;
6451                         *)      echo "Well, the $hint value *is* secure." >&4
6452                                 dflt=y;;
6453                         esac
6454                         ;;
6455                 *)
6456                         $rm -f reflect flect
6457                         echo "#!$ls" >reflect
6458                         chmod +x,u+s reflect
6459                         echo >flect
6460                         chmod a+w flect
6461                         echo '"su" will (probably) prompt you for '"$ans's password."
6462                         su $ans -c './reflect >flect'
6463                         if $contains "/dev/fd" flect >/dev/null; then
6464                                 echo "Okay, it looks like setuid scripts are secure." >&4
6465                                 dflt=y
6466                         else
6467                                 echo "I don't think setuid scripts are secure." >&4
6468                                 dflt=n
6469                         fi
6470                         ;;
6471                 esac
6472                 rp='Does your kernel have *secure* setuid scripts?'
6473                 . ./myread
6474                 case "$ans" in
6475                 [yY]*)  val="$define";;
6476                 *)      val="$undef";;
6477                 esac
6478         fi
6479 else
6480         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
6481         echo "(That's for file descriptors, not floppy disks.)"
6482         val="$undef"
6483 fi
6484 set d_suidsafe
6485 eval $setvar
6486
6487 $rm -f reflect flect
6488
6489 : now see if they want to do setuid emulation
6490 echo " "
6491 val="$undef"
6492 case "$d_suidsafe" in
6493 "$define")
6494         val="$undef"
6495         echo "No need to emulate SUID scripts since they are secure here." >& 4
6496         ;;
6497 *)
6498         $cat <<EOM
6499 Some systems have disabled setuid scripts, especially systems where
6500 setuid scripts cannot be secure.  On systems where setuid scripts have
6501 been disabled, the setuid/setgid bits on scripts are currently
6502 useless.  It is possible for $package to detect those bits and emulate
6503 setuid/setgid in a secure fashion.  This emulation will only work if
6504 setuid scripts have been disabled in your kernel.
6505
6506 EOM
6507         case "$d_dosuid" in
6508         "$define") dflt=y ;;
6509         *) dflt=n ;;
6510         esac
6511         rp="Do you want to do setuid/setgid emulation?"
6512         . ./myread
6513         case "$ans" in
6514         [yY]*)  val="$define";;
6515         *)      val="$undef";;
6516         esac
6517         ;;
6518 esac
6519 set d_dosuid
6520 eval $setvar
6521
6522 : see if this is a malloc.h system
6523 set malloc.h i_malloc
6524 eval $inhdr
6525
6526 : see if stdlib is available
6527 set stdlib.h i_stdlib
6528 eval $inhdr
6529
6530 : determine which malloc to compile in
6531 echo " "
6532 case "$usemymalloc" in
6533 [yY]*|true|$define)     dflt='y' ;;
6534 [nN]*|false|$undef)     dflt='n' ;;
6535 *)      case "$ptrsize" in
6536         4) dflt='y' ;;
6537         *) dflt='n' ;;
6538         esac
6539         ;;
6540 esac
6541 rp="Do you wish to attempt to use the malloc that comes with $package?"
6542 . ./myread
6543 usemymalloc="$ans"
6544 case "$ans" in
6545 y*|true)
6546         usemymalloc='y'
6547         mallocsrc='malloc.c'
6548         mallocobj="malloc$_o"
6549         d_mymalloc="$define"
6550         case "$libs" in
6551         *-lmalloc*)
6552                 : Remove malloc from list of libraries to use
6553                 echo "Removing unneeded -lmalloc from library list" >&4
6554                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
6555                 shift
6556                 libs="$*"
6557                 echo "libs = $libs" >&4
6558                 ;;
6559         esac
6560         ;;
6561 *)
6562         usemymalloc='n'
6563         mallocsrc=''
6564         mallocobj=''
6565         d_mymalloc="$undef"
6566         ;;
6567 esac
6568
6569 : compute the return types of malloc and free
6570 echo " "
6571 $cat >malloc.c <<END
6572 #$i_malloc I_MALLOC
6573 #$i_stdlib I_STDLIB
6574 #include <stdio.h>
6575 #include <sys/types.h>
6576 #ifdef I_MALLOC
6577 #include <malloc.h>
6578 #endif
6579 #ifdef I_STDLIB
6580 #include <stdlib.h>
6581 #endif
6582 #ifdef TRY_MALLOC
6583 void *malloc();
6584 #endif
6585 #ifdef TRY_FREE
6586 void free();
6587 #endif
6588 END
6589 case "$malloctype" in
6590 '')
6591         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
6592                 malloctype='void *'
6593         else
6594                 malloctype='char *'
6595         fi
6596         ;;
6597 esac
6598 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6599
6600 case "$freetype" in
6601 '')
6602         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6603                 freetype='void'
6604         else
6605                 freetype='int'
6606         fi
6607         ;;
6608 esac
6609 echo "Your system uses $freetype free(), it would seem." >&4
6610 $rm -f malloc.[co]
6611 $cat <<EOM
6612
6613 After $package is installed, you may wish to install various
6614 add-on modules and utilities.  Typically, these add-ons will
6615 be installed under $prefix with the rest
6616 of this package.  However, you may wish to install such add-ons
6617 elsewhere under a different prefix.
6618
6619 If you do not wish to put everything under a single prefix, that's
6620 ok.  You will be prompted for the individual locations; this siteprefix
6621 is only used to suggest the defaults.
6622
6623 The default should be fine for most people.
6624
6625 EOM
6626 fn=d~+
6627 rp='Installation prefix to use for add-on modules and utilities?'
6628 : XXX Here might be another good place for an installstyle setting.
6629 case "$siteprefix" in
6630 '') dflt=$prefix ;;
6631 *)  dflt=$siteprefix ;;
6632 esac
6633 . ./getfile
6634 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6635 oldsiteprefix=''
6636 case "$siteprefix" in
6637 '') ;;
6638 *)      case "$ans" in
6639         "$prefix") ;;
6640         *) oldsiteprefix="$prefix";;
6641         esac
6642         ;;
6643 esac
6644 siteprefix="$ans"
6645 siteprefixexp="$ansexp"
6646
6647 : determine where site specific libraries go.
6648 : Usual default is /usr/local/lib/perl5/site_perl/$version
6649 : The default "style" setting is made in installstyle.U
6650 : XXX No longer works with Prefixit stuff.
6651 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6652 case "$sitelib" in
6653 '') case "$installstyle" in
6654         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
6655         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
6656         esac
6657         ;;
6658 *)      dflt="$sitelib"
6659         ;;
6660 esac
6661 $cat <<EOM
6662
6663 The installation process will create a directory for
6664 site-specific extensions and modules.  Most users find it convenient
6665 to place all site-specific files in this directory rather than in the
6666 main distribution directory.
6667
6668 EOM
6669 fn=d~+
6670 rp='Pathname for the site-specific library files?'
6671 . ./getfile
6672 sitelib="$ans"
6673 sitelibexp="$ansexp"
6674 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
6675 : Change installation prefix, if necessary.
6676 if $test X"$prefix" != X"$installprefix"; then
6677         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
6678 else
6679         installsitelib="$sitelibexp"
6680 fi
6681
6682 : determine where site specific architecture-dependent libraries go.
6683 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
6684 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6685 : sitelib may have an optional trailing /share.
6686 case "$sitearch" in
6687 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
6688         dflt="$dflt/$archname"
6689         ;;
6690 *)      dflt="$sitearch"
6691         ;;
6692 esac
6693 set sitearch sitearch none
6694 eval $prefixit
6695 $cat <<EOM
6696
6697 The installation process will also create a directory for
6698 architecture-dependent site-specific extensions and modules.
6699
6700 EOM
6701 fn=d~+
6702 rp='Pathname for the site-specific architecture-dependent library files?'
6703 . ./getfile
6704 sitearch="$ans"
6705 sitearchexp="$ansexp"
6706 : Change installation prefix, if necessary.
6707 if $test X"$prefix" != X"$installprefix"; then
6708         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6709 else
6710         installsitearch="$sitearchexp"
6711 fi
6712
6713 $cat <<EOM
6714
6715 The installation process will also create a directory for
6716 vendor-supplied add-ons.  Vendors who supply perl with their system
6717 may find it convenient to place all vendor-supplied files in this
6718 directory rather than in the main distribution directory.  This will
6719 ease upgrades between binary-compatible maintenance versions of perl.
6720
6721 Of course you may also use these directories in whatever way you see
6722 fit.  For example, you might use them to access modules shared over a
6723 company-wide network.
6724
6725 The default answer should be fine for most people.
6726 This causes further questions about vendor add-ons to be skipped
6727 and no vendor-specific directories will be configured for perl.
6728
6729 EOM
6730 rp='Do you want to configure vendor-specific add-on directories?'
6731 case "$usevendorprefix" in
6732 define|true|[yY]*) dflt=y ;;
6733 *)      : User may have set vendorprefix directly on Configure command line.
6734         case "$vendorprefix" in
6735         ''|' ') dflt=n ;;
6736         *)      dflt=y ;;
6737         esac
6738         ;;
6739 esac
6740 . ./myread
6741 case "$ans" in
6742 [yY]*)  fn=d~+
6743         rp='Installation prefix to use for vendor-supplied add-ons?'
6744         case "$vendorprefix" in
6745         '') dflt='' ;;
6746         *)  dflt=$vendorprefix ;;
6747         esac
6748         . ./getfile
6749         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6750         oldvendorprefix=''
6751         case "$vendorprefix" in
6752         '') ;;
6753         *)      case "$ans" in
6754                 "$prefix") ;;
6755                 *) oldvendorprefix="$prefix";;
6756                 esac
6757                 ;;
6758         esac
6759         usevendorprefix="$define"
6760         vendorprefix="$ans"
6761         vendorprefixexp="$ansexp"
6762         ;;
6763 *)      usevendorprefix="$undef"
6764         vendorprefix=''
6765         vendorprefixexp=''
6766         ;;
6767 esac
6768
6769 case "$vendorprefix" in
6770 '')     d_vendorlib="$undef"
6771         vendorlib=''
6772         vendorlibexp=''
6773         ;;
6774 *)      d_vendorlib="$define"
6775         : determine where vendor-supplied modules go.
6776         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6777         case "$vendorlib" in
6778         '')
6779                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6780                 case "$installstyle" in
6781                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6782                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6783                 esac
6784                 ;;
6785         *)      dflt="$vendorlib"
6786                 ;;
6787         esac
6788         fn=d~+
6789         rp='Pathname for the vendor-supplied library files?'
6790         . ./getfile
6791         vendorlib="$ans"
6792         vendorlibexp="$ansexp"
6793         ;;
6794 esac
6795 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6796 : Change installation prefix, if necessary.
6797 if $test X"$prefix" != X"$installprefix"; then
6798         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6799 else
6800         installvendorlib="$vendorlibexp"
6801 fi
6802
6803 case "$vendorprefix" in
6804 '')     d_vendorarch="$undef"
6805         vendorarch=''
6806         vendorarchexp=''
6807         ;;
6808 *)      d_vendorarch="$define"
6809         : determine where vendor-supplied architecture-dependent libraries go.
6810         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
6811         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6812         : vendorlib may have an optional trailing /share.
6813         case "$vendorarch" in
6814         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
6815                 dflt="$dflt/$archname"
6816                 ;;
6817         *)      dflt="$vendorarch" ;;
6818         esac
6819         fn=d~+
6820         rp='Pathname for vendor-supplied architecture-dependent files?'
6821         . ./getfile
6822         vendorarch="$ans"
6823         vendorarchexp="$ansexp"
6824         ;;
6825 esac
6826 : Change installation prefix, if necessary.
6827 if $test X"$prefix" != X"$installprefix"; then
6828         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6829 else
6830         installvendorarch="$vendorarchexp"
6831 fi
6832
6833 : Final catch-all directories to search
6834 $cat <<EOM
6835
6836 Lastly, you can have perl look in other directories for extensions and
6837 modules in addition to those already specified.
6838 These directories will be searched after 
6839         $sitearch 
6840         $sitelib 
6841 EOM
6842 test X"$vendorlib" != "X" && echo '     ' $vendorlib
6843 test X"$vendorarch" != "X" && echo '    ' $vendorarch
6844 echo ' '
6845 case "$otherlibdirs" in
6846 ''|' ') dflt='none' ;;
6847 *)      dflt="$otherlibdirs" ;;
6848 esac
6849 $cat <<EOM
6850 Enter a colon-separated set of extra paths to include in perl's @INC
6851 search path, or enter 'none' for no extra paths.
6852
6853 EOM
6854
6855 rp='Colon-separated list of additional directories for perl to search?'
6856 . ./myread
6857 case "$ans" in
6858 ' '|''|none)    otherlibdirs=' ' ;;     
6859 *)      otherlibdirs="$ans" ;;
6860 esac
6861 case "$otherlibdirs" in
6862 ' ') val=$undef ;;
6863 *)      val=$define ;;
6864 esac
6865 set d_perl_otherlibdirs
6866 eval $setvar
6867
6868 : Cruising for prototypes
6869 echo " "
6870 echo "Checking out function prototypes..." >&4
6871 $cat >prototype.c <<'EOCP'
6872 int main(int argc, char *argv[]) {
6873         exit(0);}
6874 EOCP
6875 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
6876         echo "Your C compiler appears to support function prototypes."
6877         val="$define"
6878 else
6879         echo "Your C compiler doesn't seem to understand function prototypes."
6880         val="$undef"
6881 fi
6882 set prototype
6883 eval $setvar
6884 $rm -f prototype*
6885
6886 case "$prototype" in
6887 "$define") ;;
6888 *)      ansi2knr='ansi2knr'
6889         echo " "
6890         cat <<EOM >&4
6891
6892 $me:  FATAL ERROR:
6893 This version of $package can only be compiled by a compiler that 
6894 understands function prototypes.  Unfortunately, your C compiler 
6895         $cc $ccflags
6896 doesn't seem to understand them.  Sorry about that.
6897
6898 If GNU cc is available for your system, perhaps you could try that instead.  
6899
6900 Eventually, we hope to support building Perl with pre-ANSI compilers.
6901 If you would like to help in that effort, please contact <perlbug@perl.org>.
6902
6903 Aborting Configure now.
6904 EOM
6905         exit 2
6906         ;;
6907 esac
6908
6909 : determine where public executables go
6910 echo " "
6911 set dflt bin bin
6912 eval $prefixit
6913 fn=d~
6914 rp='Pathname where the public executables will reside?'
6915 . ./getfile
6916 if $test "X$ansexp" != "X$binexp"; then
6917         installbin=''
6918 fi
6919 bin="$ans"
6920 binexp="$ansexp"
6921 : Change installation prefix, if necessary.
6922 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
6923 if $test X"$prefix" != X"$installprefix"; then
6924         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
6925 else
6926         installbin="$binexp"
6927 fi
6928
6929 : Find perl5.005 or later.
6930 echo "Looking for a previously installed perl5.005 or later... "
6931 case "$perl5" in
6932 '')     for tdir in `echo "$binexp$path_sep$PATH" | $sed "s/$path_sep/ /g"`; do
6933                 : Check if this perl is recent and can load a simple module
6934                 if $test -x $tdir/perl$exe_ext && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6935                         perl5=$tdir/perl
6936                         break;
6937                 elif $test -x $tdir/perl5$exe_ext && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6938                         perl5=$tdir/perl5
6939                         break;
6940                 fi
6941         done
6942         ;;
6943 *)      perl5="$perl5"
6944         ;;
6945 esac
6946 case "$perl5" in
6947 '')     echo "None found.  That's ok.";;
6948 *)      echo "Using $perl5." ;;
6949 esac
6950
6951 : Determine list of previous versions to include in @INC
6952 $cat > getverlist <<EOPL
6953 #!$perl5 -w
6954 use File::Basename;
6955 \$api_versionstring = "$api_versionstring";
6956 \$version = "$version";
6957 \$stem = "$sitelib_stem";
6958 \$archname = "$archname";
6959 EOPL
6960         $cat >> getverlist <<'EOPL'
6961 # Can't have leading @ because metaconfig interprets it as a command!
6962 ;@inc_version_list=();
6963 # XXX Redo to do opendir/readdir? 
6964 if (-d $stem) {
6965     chdir($stem);
6966     ;@candidates = glob("5.*");
6967 }
6968 else {
6969     ;@candidates = ();
6970 }
6971
6972 # XXX ToDo:  These comparisons must be reworked when two-digit
6973 # subversions come along, so that 5.7.10 compares as greater than
6974 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
6975 # widespread that we can use the built-in version vectors rather
6976 # than reinventing them here.  For 5.6.0, however, we must
6977 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
6978 foreach $d (@candidates) {
6979     if ($d lt $version) {
6980         if ($d ge $api_versionstring) {
6981             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
6982         }
6983         elsif ($d ge "5.005") {
6984             unshift(@inc_version_list, grep { -d } $d);
6985         }
6986     }
6987     else {
6988         # Skip newer version.  I.e. don't look in
6989         # 5.7.0 if we're installing 5.6.1.
6990     }
6991 }
6992
6993 if (@inc_version_list) {
6994     print join(' ', @inc_version_list);
6995 }
6996 else {
6997     # Blank space to preserve value for next Configure run.
6998     print " ";
6999 }
7000 EOPL
7001 chmod +x getverlist
7002 case "$inc_version_list" in
7003 '')     if test -x "$perl5$exe_ext"; then
7004                 dflt=`$perl5 getverlist`
7005         else
7006                 dflt='none'
7007         fi
7008         ;;
7009 $undef) dflt='none' ;;
7010 *)  eval dflt=\"$inc_version_list\" ;;
7011 esac
7012 case "$dflt" in
7013 ''|' ') dflt=none ;;
7014 esac
7015 case "$dflt" in
7016 5.005) case "$bincompat5005" in
7017        $define|true|[yY]*) ;;
7018        *) dflt=none ;;
7019        esac
7020        ;;
7021 esac
7022 $cat <<'EOM'
7023
7024 In order to ease the process of upgrading, this version of perl 
7025 can be configured to use modules built and installed with earlier 
7026 versions of perl that were installed under $prefix.  Specify here
7027 the list of earlier versions that this version of perl should check.
7028 If Configure detected no earlier versions of perl installed under
7029 $prefix, then the list will be empty.  Answer 'none' to tell perl
7030 to not search earlier versions.
7031
7032 The default should almost always be sensible, so if you're not sure,
7033 just accept the default.
7034 EOM
7035
7036 rp='List of earlier versions to include in @INC?'
7037 . ./myread
7038 case "$ans" in
7039 [Nn]one|''|' ') inc_version_list=' ' ;;
7040 *) inc_version_list="$ans" ;;
7041 esac
7042 case "$inc_version_list" in
7043 ''|' ') 
7044         inc_version_list_init='0';;
7045 *)      inc_version_list_init=`echo $inc_version_list |
7046                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
7047         ;;
7048 esac
7049 $rm -f getverlist
7050
7051 : determine whether to install perl also as /usr/bin/perl
7052
7053 echo " "
7054 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
7055         $cat <<EOM
7056 Many scripts expect perl to be installed as /usr/bin/perl.
7057 I can install the perl you are about to compile also as /usr/bin/perl
7058 (in addition to $installbin/perl).
7059 EOM
7060         case "$installusrbinperl" in
7061         "$undef"|[nN]*) dflt='n';;
7062         *)              dflt='y';;
7063         esac
7064         rp="Do you want to install perl as /usr/bin/perl?"
7065         . ./myread
7066         case "$ans" in
7067         [yY]*)  val="$define";;
7068         *)      val="$undef" ;;
7069         esac
7070 else
7071         val="$undef"
7072 fi
7073 set installusrbinperl
7074 eval $setvar
7075
7076 : see if dld is available
7077 set dld.h i_dld
7078 eval $inhdr
7079
7080 : see if dlopen exists
7081 xxx_runnm="$runnm"
7082 runnm=false
7083 set dlopen d_dlopen
7084 eval $inlibc
7085 runnm="$xxx_runnm"
7086
7087 : determine which dynamic loading, if any, to compile in
7088 echo " "
7089 dldir="ext/DynaLoader"
7090 case "$usedl" in
7091 $define|y|true)
7092         dflt='y'
7093         usedl="$define"
7094         ;;
7095 $undef|n|false)
7096         dflt='n'
7097         usedl="$undef"
7098         ;;
7099 *) 
7100         dflt='n'
7101         case "$d_dlopen" in
7102             $define) dflt='y' ;;
7103         esac
7104         case "$i_dld" in
7105             $define) dflt='y' ;;
7106         esac
7107         : Does a dl_xxx.xs file exist for this operating system
7108         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
7109         ;;
7110 esac
7111 rp="Do you wish to use dynamic loading?"
7112 . ./myread
7113 usedl="$ans"
7114 case "$ans" in
7115 y*) usedl="$define"
7116         case "$dlsrc" in
7117         '')
7118                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
7119                         dflt="$dldir/dl_${osname}.xs"
7120                 elif $test "$d_dlopen" = "$define" ; then
7121                         dflt="$dldir/dl_dlopen.xs"
7122                 elif $test "$i_dld" = "$define" ; then
7123                         dflt="$dldir/dl_dld.xs"
7124                 else
7125                         dflt=''
7126                 fi
7127                 ;;
7128         *)      dflt="$dldir/$dlsrc"
7129                 ;;
7130         esac
7131     echo "The following dynamic loading files are available:"
7132         : Can not go over to $dldir because getfile has path hard-coded in.
7133         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
7134         rp="Source file to use for dynamic loading"
7135         fn="fne"
7136         gfpth="$src"
7137         . ./getfile
7138         usedl="$define"
7139         : emulate basename
7140         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
7141
7142         $cat << EOM
7143
7144 Some systems may require passing special flags to $cc -c to
7145 compile modules that will be used to create a shared library.
7146 To use no flags, say "none".
7147
7148 EOM
7149     case "$cccdlflags" in
7150     '') case "$gccversion" in
7151                 '') case "$osname" in
7152                         hpux)   dflt='+z' ;;
7153                         next)   dflt='none' ;;
7154                         irix*)  dflt='-KPIC' ;;
7155                         svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
7156                         sunos)  dflt='-pic' ;;
7157                         *)      dflt='none' ;;
7158                     esac
7159                         ;;
7160                 *)  case "$osname" in
7161                         svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
7162                         *)      dflt='-fpic' ;;
7163                     esac ;;
7164             esac ;;
7165         ' ') dflt='none' ;;
7166     *)  dflt="$cccdlflags" ;;
7167     esac
7168     rp="Any special flags to pass to $cc -c to compile shared library modules?"
7169     . ./myread
7170     case "$ans" in
7171     none) cccdlflags=' ' ;;
7172     *) cccdlflags="$ans" ;;
7173     esac
7174
7175     cat << EOM
7176
7177 Some systems use ld to create libraries that can be dynamically loaded,
7178 while other systems (such as those using ELF) use $cc.
7179
7180 EOM
7181         case "$ld" in
7182         '')     $cat >try.c <<'EOM'
7183 /* Test for whether ELF binaries are produced */
7184 #include <fcntl.h>
7185 #include <stdlib.h>
7186 int main() {
7187         char b[4];
7188         int i = open("a.out",O_RDONLY);
7189         if(i == -1) 
7190                 exit(1); /* fail */
7191         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
7192                 exit(0); /* succeed (yes, it's ELF) */
7193         else
7194                 exit(1); /* fail */
7195 }
7196 EOM
7197                 if $cc $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then
7198                         cat <<EOM
7199 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
7200 EOM
7201                         dflt="$cc"
7202                 else
7203                         echo "I'll use ld to build dynamic libraries."
7204                         dflt='ld'
7205                 fi
7206                 rm -f try.c a.out
7207                 ;;
7208         *)      dflt="$ld"
7209                 ;;
7210         esac
7211
7212     rp="What command should be used to create dynamic libraries?"
7213     . ./myread
7214         ld="$ans"
7215
7216     cat << EOM
7217
7218 Some systems may require passing special flags to $ld to create a
7219 library that can be dynamically loaded.  If your ld flags include
7220 -L/other/path options to locate libraries outside your loader's normal
7221 search path, you may need to specify those -L options here as well.  To
7222 use no flags, say "none".
7223
7224 EOM
7225     case "$lddlflags" in
7226     '') case "$osname" in
7227                         beos) dflt='-nostart' ;;
7228                         hpux) dflt='-b';
7229                               case "$gccversion" in
7230                               '') dflt="$dflt +vnocompatwarnings" ;;
7231                               esac
7232                               ;;        
7233                         linux|irix*)    dflt='-shared' ;;
7234                         next)  dflt='none' ;;
7235                         solaris) dflt='-G' ;;
7236                         sunos) dflt='-assert nodefinitions' ;;
7237                         svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
7238                 *)     dflt='none' ;;
7239                         esac
7240                         ;;
7241     *) dflt="$lddlflags" ;;
7242     esac
7243
7244         : Try to guess additional flags to pick up local libraries.
7245         : Be careful not to append to a plain 'none'
7246         case "$dflt" in
7247         none) dflt='' ;;
7248         esac
7249         for thisflag in $ldflags; do
7250                 case "$thisflag" in
7251                 -L*|-R*)
7252                         case " $dflt " in
7253                         *" $thisflag "*) ;;
7254                         *) dflt="$dflt $thisflag" ;;
7255                         esac
7256                         ;;
7257                 esac
7258         done
7259
7260         case "$dflt" in
7261         ''|' ') dflt='none' ;;
7262         esac
7263
7264     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
7265     . ./myread
7266     case "$ans" in
7267     none) lddlflags=' ' ;;
7268     *) lddlflags="$ans" ;;
7269     esac
7270
7271         cat <<EOM
7272
7273 Some systems may require passing special flags to $cc to indicate that
7274 the resulting executable will use dynamic linking.  To use no flags,
7275 say "none".
7276
7277 EOM
7278     case "$ccdlflags" in
7279     '') case "$osname" in
7280                 hpux)   dflt='-Wl,-E' ;;
7281                 linux)  dflt='-rdynamic' ;;
7282                 next)   dflt='none' ;;
7283                 sunos)  dflt='none' ;;
7284                 *)      dflt='none' ;;
7285             esac ;;
7286     ' ')  dflt='none' ;;
7287     *)  dflt="$ccdlflags" ;;
7288     esac
7289     rp="Any special flags to pass to $cc to use dynamic linking?"
7290     . ./myread
7291     case "$ans" in
7292     none) ccdlflags=' ' ;;
7293     *) ccdlflags="$ans" ;;
7294     esac
7295     ;;
7296 *)  usedl="$undef"
7297         ld='ld'
7298     dlsrc='dl_none.xs'
7299     lddlflags=''
7300     ccdlflags=''
7301     ;;
7302 esac
7303
7304 also=''
7305 case "$usedl" in
7306 $undef)
7307         # No dynamic loading being used, so don't bother even to prompt.
7308         useshrplib='false'
7309         ;;
7310 *)      case "$useshrplib" in
7311         '')     case "$osname" in
7312                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
7313                         dflt=y
7314                         also='Building a shared libperl is required for dynamic loading to work on your system.'
7315                         ;;
7316                 next*)
7317                         case "$osvers" in
7318                         4*)     dflt=y
7319                                 also='Building a shared libperl is needed for MAB support.'
7320                                 ;;
7321                         *)      dflt=n
7322                                 ;;
7323                         esac
7324                         ;;
7325                 *)      dflt=n
7326                         ;;
7327                 esac
7328                 ;;
7329         $define|true|[Yy]*)
7330                 dflt=y
7331                 ;;
7332         *)      dflt=n
7333                 ;;
7334         esac
7335         $cat << EOM
7336
7337 The perl executable is normally obtained by linking perlmain.c with
7338 libperl${_a}, any static extensions (usually just DynaLoader), and
7339 any other libraries needed on this system (such as -lm, etc.).  Since
7340 your system supports dynamic loading, it is probably possible to build
7341 a shared libperl.$so.  If you will have more than one executable linked
7342 to libperl.$so, this will significantly reduce the size of each
7343 executable, but it may have a noticeable affect on performance.  The
7344 default is probably sensible for your system.
7345 $also
7346
7347 EOM
7348         rp="Build a shared libperl.$so (y/n)"
7349         . ./myread
7350         case "$ans" in
7351         true|$define|[Yy]*)
7352                 useshrplib='true'  ;;
7353         *)      useshrplib='false' ;;
7354         esac
7355         ;;
7356 esac
7357
7358 case "$useshrplib" in
7359 true)
7360         case "$libperl" in
7361         '')
7362                 # Figure out a good name for libperl.so.  Since it gets stored in
7363                 # a version-specific architecture-dependent library, the version
7364                 # number isn't really that important, except for making cc/ld happy.
7365                 #
7366                 # A name such as libperl.so.3.1
7367                 majmin="libperl.$so.$patchlevel.$subversion"
7368                 # A name such as libperl.so.301
7369                 majonly=`echo $patchlevel $subversion |
7370                         $awk '{printf "%d%02d", $1, $2}'`
7371                 majonly=libperl.$so.$majonly
7372                 # I'd prefer to keep the os-specific stuff here to a minimum, and
7373                 # rely on figuring it out from the naming of libc.
7374                 case "${osname}${osvers}" in
7375                 next4*)
7376                         dflt=libperl.5.$so
7377                         # XXX How handle the --version stuff for MAB?
7378                         ;;
7379                 linux*)  # ld won't link with a bare -lperl otherwise.
7380                         dflt=libperl.$so
7381                         ;;
7382                 cygwin*) # include version
7383                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
7384                         ;;
7385                 *)      # Try to guess based on whether libc has major.minor.
7386                         case "$libc" in
7387                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
7388                         *libc.$so.[0-9]*) dflt=$majonly ;;
7389                         *)      dflt=libperl.$so ;;
7390                         esac
7391                         ;;
7392                 esac
7393                 ;;
7394         *)      dflt=$libperl
7395                 ;;
7396         esac
7397         cat << EOM
7398
7399 I need to select a good name for the shared libperl.  If your system uses
7400 library names with major and minor numbers, then you might want something
7401 like $majmin.  Alternatively, if your system uses a single version
7402 number for shared libraries, then you might want to use $majonly.
7403 Or, your system might be quite happy with a simple libperl.$so.
7404
7405 Since the shared libperl will get installed into a version-specific
7406 architecture-dependent directory, the version number of the shared perl
7407 library probably isn't important, so the default should be o.k.
7408
7409 EOM
7410         rp='What name do you want to give to the shared libperl?'
7411         . ./myread
7412         libperl=$ans
7413         echo "Ok, I'll use $libperl"
7414         ;;
7415 *)
7416         libperl="libperl${_a}"
7417         ;;
7418 esac
7419
7420 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
7421 case "$shrpdir" in
7422 '') ;;
7423 *)      $cat >&4 <<EOM
7424 WARNING:  Use of the shrpdir variable for the installation location of
7425 the shared $libperl is not supported.  It was never documented and
7426 will not work in this version.  Let me (perlbug@perl.org)
7427 know of any problems this may cause.
7428
7429 EOM
7430         case "$shrpdir" in
7431         "$archlibexp/CORE")
7432                 $cat >&4 <<EOM
7433 But your current setting of $shrpdir is
7434 the default anyway, so it's harmless.
7435 EOM
7436                 ;;
7437         *)
7438                 $cat >&4 <<EOM
7439 Further, your current attempted setting of $shrpdir
7440 conflicts with the value of $archlibexp/CORE
7441 that installperl will use.
7442 EOM
7443                 ;;
7444         esac
7445         ;;
7446 esac
7447
7448 # How will the perl executable find the installed shared $libperl?
7449 # Add $xxx to ccdlflags.
7450 # If we can't figure out a command-line option, use $shrpenv to
7451 # set env LD_RUN_PATH.  The main perl makefile uses this.
7452 shrpdir=$archlibexp/CORE
7453 xxx=''
7454 tmp_shrpenv=''
7455 if "$useshrplib"; then
7456     case "$osname" in 
7457         aix)
7458                 # We'll set it in Makefile.SH...
7459                 ;;
7460         solaris|netbsd)
7461                 xxx="-R $shrpdir"
7462                 ;;
7463         freebsd)
7464                 xxx="-Wl,-R$shrpdir"
7465                 ;;
7466         linux|irix*|dec_osf)
7467                 xxx="-Wl,-rpath,$shrpdir"
7468                 ;;
7469         next)
7470                 # next doesn't like the default...
7471                 ;;
7472         beos)
7473                 # beos doesn't like the default, either.
7474                 ;;
7475         hpux*)
7476                 # hpux doesn't like the default, either.
7477                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
7478                 ;;
7479         *)
7480                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
7481                 ;;
7482         esac
7483         case "$xxx" in
7484         '') ;;
7485         *)      
7486                 # Only add $xxx if it isn't already in ccdlflags.
7487                 case " $ccdlflags " in
7488                 *" $xxx "*)     ;;
7489                 *)      ccdlflags="$ccdlflags $xxx"
7490                         cat <<EOM >&4
7491
7492 Adding $xxx to the flags
7493 passed to $ld so that the perl executable will find the 
7494 installed shared $libperl.
7495
7496 EOM
7497                         ;;
7498                 esac
7499                 ;;
7500         esac
7501 fi
7502 # Fix ccdlflags in AIX for building external extensions.
7503 # (For building Perl itself bare -bE:perl.exp is needed,
7504 #  Makefile.SH takes care of this.)
7505 case "$osname" in
7506 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
7507 esac
7508 # Respect a hint or command-line value.
7509 case "$shrpenv" in
7510 '') shrpenv="$tmp_shrpenv" ;;
7511 esac
7512 case "$ldlibpthname" in
7513 '')     ldlibpthname=LD_LIBRARY_PATH ;;
7514 none)   ldlibpthname='' ;;
7515 esac
7516
7517 : determine where manual pages are on this system
7518 echo " "
7519 case "$sysman" in
7520 '') 
7521         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
7522         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
7523         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
7524         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
7525         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
7526         sysman=`./loc . /usr/man/man1 $syspath`
7527         ;;
7528 esac
7529 if $test -d "$sysman"; then
7530         echo "System manual is in $sysman." >&4
7531 else
7532         echo "Could not find manual pages in source form." >&4
7533 fi
7534
7535 : determine where manual pages go
7536 set man1dir man1dir none
7537 eval $prefixit
7538 $cat <<EOM
7539
7540 $spackage has manual pages available in source form.
7541 EOM
7542 case "$nroff" in
7543 nroff)
7544         echo "However, you don't have nroff, so they're probably useless to you."
7545         case "$man1dir" in
7546         '') man1dir="none";;
7547         esac;;
7548 esac
7549 echo "If you don't want the manual sources installed, answer 'none'."
7550 case "$man1dir" in
7551 ' ') dflt=none
7552         ;;
7553 '')
7554         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
7555         lookpath="$lookpath $prefixexp/man/p_man/man1"
7556         lookpath="$lookpath $prefixexp/man/u_man/man1"
7557         lookpath="$lookpath $prefixexp/man/man.1"
7558         case "$sysman" in
7559         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
7560         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
7561         esac
7562         set dflt
7563         eval $prefixup
7564         ;;
7565 *)  dflt="$man1dir"
7566         ;;
7567 esac
7568 echo " "
7569 fn=dn+~
7570 rp="Where do the main $spackage manual pages (source) go?"
7571 . ./getfile
7572 if $test "X$man1direxp" != "X$ansexp"; then
7573         installman1dir=''
7574 fi
7575 man1dir="$ans"
7576 man1direxp="$ansexp"
7577 case "$man1dir" in
7578 '')     man1dir=' '
7579         installman1dir='';;
7580 esac
7581
7582 : Change installation prefix, if necessary.
7583 if $test X"$prefix" != X"$installprefix"; then
7584         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
7585 else
7586         installman1dir="$man1direxp"
7587 fi
7588
7589 : What suffix to use on installed man pages
7590
7591 case "$man1dir" in
7592 ' ')
7593         man1ext='0'
7594         ;;
7595 *)
7596         rp="What suffix should be used for the main $spackage man pages?"
7597         case "$man1ext" in
7598         '')     case "$man1dir" in
7599                 *1)  dflt=1 ;;
7600                 *1p) dflt=1p ;;
7601                 *1pm) dflt=1pm ;;
7602                 *l) dflt=l;;
7603                 *n) dflt=n;;
7604                 *o) dflt=o;;
7605                 *p) dflt=p;;
7606                 *C) dflt=C;;
7607                 *L) dflt=L;;
7608                 *L1) dflt=L1;;
7609                 *) dflt=1;;
7610                 esac
7611                 ;;
7612         *)      dflt="$man1ext";;
7613         esac
7614         . ./myread
7615         man1ext="$ans"
7616         ;;
7617 esac
7618
7619 : see if we can have long filenames
7620 echo " "
7621 first=123456789abcdef
7622 $rm -f $first
7623 if (echo hi >$first) 2>/dev/null; then
7624         if $test -f 123456789abcde; then
7625                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
7626                 val="$undef"
7627         else
7628                 echo 'You can have filenames longer than 14 characters.'>&4
7629                 val="$define"
7630         fi
7631 else
7632         $cat <<'EOM'
7633 You can't have filenames longer than 14 chars.
7634 You can't even think about them!
7635 EOM
7636         val="$undef"
7637 fi 
7638 set d_flexfnam
7639 eval $setvar
7640 $rm -rf 123456789abcde*
7641
7642 : determine where library module manual pages go
7643 set man3dir man3dir none
7644 eval $prefixit
7645 $cat <<EOM
7646
7647 $spackage has manual pages for many of the library modules.
7648 EOM
7649
7650 case "$nroff" in
7651 nroff)
7652         $cat <<'EOM'
7653 However, you don't have nroff, so they're probably useless to you.
7654 EOM
7655         case "$man3dir" in
7656         '') man3dir="none";;
7657         esac;;
7658 esac
7659
7660 case "$d_flexfnam" in
7661 undef)
7662         $cat <<'EOM'
7663 However, your system can't handle the long file names like File::Basename.3. 
7664 EOM
7665         case "$man3dir" in
7666         '') man3dir="none";;
7667         esac;;
7668 esac
7669
7670 echo "If you don't want the manual sources installed, answer 'none'."
7671 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7672 case "$man3dir" in
7673 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
7674         if $test -d "$privlib/man/man3"; then
7675                 cat <<EOM >&4
7676
7677 WARNING:  Previous versions of perl installed man3 pages into
7678 $privlib/man/man3.  This version will suggest a 
7679 new default of $dflt.  
7680 EOM
7681                 tdflt=$dflt
7682                 dflt='n'
7683                 rp='Do you wish to preserve the old behavior?(y/n)'
7684                 . ./myread
7685                 case "$ans" in
7686                 y*) dflt="$privlib/man/man3" ;;
7687                 *)  dflt=$tdflt ;;
7688                 esac
7689     fi
7690         ;;
7691 *)      dflt="$man3dir" ;;
7692 esac
7693 case "$dflt" in
7694 ' ') dflt=none ;;
7695 esac
7696 echo " "
7697 fn=dn+~
7698 rp="Where do the $package library man pages (source) go?"
7699 . ./getfile
7700 man3dir="$ans"
7701 man3direxp="$ansexp"
7702 case "$man3dir" in
7703 '')     man3dir=' '
7704         installman3dir='';;
7705 esac
7706
7707 : Change installation prefix, if necessary.
7708 if $test X"$prefix" != X"$installprefix"; then
7709         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
7710 else
7711         installman3dir="$man3direxp"
7712 fi
7713
7714 : What suffix to use on installed man pages
7715 case "$man3dir" in
7716 ' ')
7717         man3ext='0'
7718         ;;
7719 *)
7720         rp="What suffix should be used for the $package library man pages?"
7721         case "$man3ext" in
7722         '')     case "$man3dir" in
7723                 *3)  dflt=3 ;;
7724                 *3p) dflt=3p ;;
7725                 *3pm) dflt=3pm ;;
7726                 *l) dflt=l;;
7727                 *n) dflt=n;;
7728                 *o) dflt=o;;
7729                 *p) dflt=p;;
7730                 *C) dflt=C;;
7731                 *L) dflt=L;;
7732                 *L3) dflt=L3;;
7733                 *) dflt=3;;
7734                 esac
7735                 ;;
7736         *)      dflt="$man3ext";;
7737         esac
7738         . ./myread
7739         man3ext="$ans"
7740         ;;
7741 esac
7742
7743 : see if we have to deal with yellow pages, now NIS.
7744 if $test -d /usr/etc/yp || $test -d /etc/yp; then
7745         if $test -f /usr/etc/nibindd; then
7746                 echo " "
7747                 echo "I'm fairly confident you're on a NeXT."
7748                 echo " "
7749                 rp='Do you get the hosts file via NetInfo?'
7750                 dflt=y
7751                 case "$hostcat" in
7752                 nidump*) ;;
7753                 '') ;;
7754                 *) dflt=n;;
7755                 esac
7756                 . ./myread
7757                 case "$ans" in
7758                 y*) hostcat='nidump hosts .';;
7759                 *)      case "$hostcat" in
7760                         nidump*) hostcat='';;
7761                         esac
7762                         ;;
7763                 esac
7764         fi
7765         case "$hostcat" in
7766         nidump*) ;;
7767         *)
7768                 case "$hostcat" in
7769                 *ypcat*) dflt=y;;
7770                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7771                                 dflt=y
7772                         else
7773                                 dflt=n
7774                         fi;;
7775                 *) dflt=n;;
7776                 esac
7777                 echo " "
7778                 rp='Are you getting the hosts file via yellow pages?'
7779                 . ./myread
7780                 case "$ans" in
7781                 y*) hostcat='ypcat hosts';;
7782                 *) hostcat='cat /etc/hosts';;
7783                 esac
7784                 ;;
7785         esac
7786 fi
7787 case "$hostcat" in
7788 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
7789 esac
7790 case "$groupcat" in
7791 '') test -f /etc/group && groupcat='cat /etc/group';;
7792 esac
7793 case "$passcat" in
7794 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
7795 esac
7796
7797 : now get the host name
7798 echo " "
7799 echo "Figuring out host name..." >&4
7800 case "$myhostname" in
7801 '') cont=true
7802         echo 'Maybe "hostname" will work...'
7803         if tans=`sh -c hostname 2>&1` ; then
7804                 myhostname=$tans
7805                 phostname=hostname
7806                 cont=''
7807         fi
7808         ;;
7809 *) cont='';;
7810 esac
7811 if $test "$cont"; then
7812         if ./xenix; then
7813                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
7814                 if tans=`cat /etc/systemid 2>&1` ; then
7815                         myhostname=$tans
7816                         phostname='cat /etc/systemid'
7817                         echo "Whadyaknow.  Xenix always was a bit strange..."
7818                         cont=''
7819                 fi
7820         elif $test -r /etc/systemid; then
7821                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
7822         fi
7823 fi
7824 if $test "$cont"; then
7825         echo 'No, maybe "uuname -l" will work...'
7826         if tans=`sh -c 'uuname -l' 2>&1` ; then
7827                 myhostname=$tans
7828                 phostname='uuname -l'
7829         else
7830                 echo 'Strange.  Maybe "uname -n" will work...'
7831                 if tans=`sh -c 'uname -n' 2>&1` ; then
7832                         myhostname=$tans
7833                         phostname='uname -n'
7834                 else
7835                         echo 'Oh well, maybe I can mine it out of whoami.h...'
7836                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
7837                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
7838                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
7839                         else
7840                                 case "$myhostname" in
7841                                 '') echo "Does this machine have an identity crisis or something?"
7842                                         phostname='';;
7843                                 *)
7844                                         echo "Well, you said $myhostname before..."
7845                                         phostname='echo $myhostname';;
7846                                 esac
7847                         fi
7848                 fi
7849         fi
7850 fi
7851 : you do not want to know about this
7852 set $myhostname
7853 myhostname=$1
7854
7855 : verify guess
7856 if $test "$myhostname" ; then
7857         dflt=y
7858         rp='Your host name appears to be "'$myhostname'".'" Right?"
7859         . ./myread
7860         case "$ans" in
7861         y*) ;;
7862         *) myhostname='';;
7863         esac
7864 fi
7865
7866 : bad guess or no guess
7867 while $test "X$myhostname" = X ; do
7868         dflt=''
7869         rp="Please type the (one word) name of your host:"
7870         . ./myread
7871         myhostname="$ans"
7872 done
7873
7874 : translate upper to lower if necessary
7875 case "$myhostname" in
7876 *[A-Z]*)
7877         echo "(Normalizing case in your host name)"
7878         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
7879         ;;
7880 esac
7881
7882 case "$myhostname" in
7883 *.*)
7884         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
7885         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
7886         echo "(Trimming domain name from host name--host name is now $myhostname)"
7887         ;;
7888 *) case "$mydomain" in
7889         '')
7890                 {
7891                         test "X$hostcat" = "Xypcat hosts" &&
7892                         ypmatch "$myhostname" hosts 2>/dev/null |\
7893                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
7894                         $test -s hosts
7895                 } || {
7896                         test "X$hostcat" != "X" &&
7897                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
7898                                         /[       ]$myhostname[  . ]/p" > hosts
7899                 }
7900                 tmp_re="[       . ]"
7901                 if $test -f hosts; then
7902                         $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
7903                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
7904                         dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
7905                                 hosts | $sort | $uniq | \
7906                                 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
7907                         case `$echo X$dflt` in
7908                         X*\ *)  echo "(Several hosts in the database matched hostname)"
7909                                 dflt=.
7910                                 ;;
7911                         X.) echo "(You do not have fully-qualified names in the hosts database)"
7912                                 ;;
7913                         esac
7914                 else
7915                         echo "(I cannot locate a hosts database anywhere)"
7916                         dflt=.
7917                 fi
7918                 case "$dflt" in
7919                 .)
7920                         tans=`./loc resolv.conf X /etc /usr/etc`
7921                         if $test -f "$tans"; then
7922                                 echo "(Attempting domain name extraction from $tans)"
7923                                 dflt=.`$sed -n -e 's/   / /g' \
7924                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
7925                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7926                                 case "$dflt" in
7927                                 .) dflt=.`$sed -n -e 's/        / /g' \
7928                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
7929                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7930                                         ;;
7931                                 esac
7932                         fi
7933                         ;;
7934                 esac
7935                 case "$dflt" in
7936                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
7937                         dflt=.`sh -c domainname 2>/dev/null`
7938                         case "$dflt" in
7939                         '') dflt='.';;
7940                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
7941                         esac
7942                         ;;
7943                 esac
7944                 case "$dflt$osname" in
7945                 .os390) echo "(Attempting domain name extraction from //'SYS1.TCPPARMS(TCPDATA)')"
7946                         dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "//'SYS1.TCPPARMS(TCPDATA)'" 2>/dev/null`
7947                         ;;
7948                 esac
7949                 case "$dflt" in
7950                 .) echo "(Lost all hope -- silly guess then)"
7951                         dflt='.uucp'
7952                         ;;
7953                 esac
7954                 $rm -f hosts
7955                 ;;
7956         *) dflt="$mydomain";;
7957         esac;;
7958 esac
7959 echo " "
7960 rp="What is your domain name?"
7961 . ./myread
7962 tans="$ans"
7963 case "$ans" in
7964 '') ;;
7965 .*) ;;
7966 *) tans=".$tans";;
7967 esac
7968 mydomain="$tans"
7969
7970 : translate upper to lower if necessary
7971 case "$mydomain" in
7972 *[A-Z]*)
7973         echo "(Normalizing case in your domain name)"
7974         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
7975         ;;
7976 esac
7977
7978 : a little sanity check here
7979 case "$phostname" in
7980 '') ;;
7981 *)
7982         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
7983         $myhostname$mydomain|$myhostname) ;;
7984         *)
7985                 case "$phostname" in
7986                 sed*)
7987                         echo "(That doesn't agree with your whoami.h file, by the way.)"
7988                         ;;
7989                 *)
7990                         echo "(That doesn't agree with your $phostname command, by the way.)"
7991                         ;;
7992                 esac
7993         ;;
7994         esac
7995         ;;
7996 esac
7997
7998 $cat <<EOM
7999
8000 I need to get your e-mail address in Internet format if possible, i.e.
8001 something like user@host.domain. Please answer accurately since I have
8002 no easy means to double check it. The default value provided below
8003 is most probably close to reality but may not be valid from outside
8004 your organization...
8005
8006 EOM
8007 cont=x
8008 while test "$cont"; do
8009         case "$cf_email" in
8010         '') dflt="$cf_by@$myhostname$mydomain";;
8011         *) dflt="$cf_email";;
8012         esac
8013         rp='What is your e-mail address?'
8014         . ./myread
8015         cf_email="$ans"
8016         case "$cf_email" in
8017         *@*.*) cont='' ;;
8018         *)
8019                 rp='Address does not look like an Internet one.  Use it anyway?'
8020                 case "$fastread" in
8021                 yes) dflt=y ;;
8022                 *) dflt=n ;;
8023                 esac
8024                 . ./myread
8025                 case "$ans" in
8026                 y*) cont='' ;;
8027                 *) echo " " ;;
8028                 esac
8029                 ;;
8030         esac
8031 done
8032
8033 $cat <<EOM
8034
8035 If you or somebody else will be maintaining perl at your site, please
8036 fill in the correct e-mail address here so that they may be contacted
8037 if necessary. Currently, the "perlbug" program included with perl
8038 will send mail to this address in addition to perlbug@perl.org. You may
8039 enter "none" for no administrator.
8040
8041 EOM
8042 case "$perladmin" in
8043 '') dflt="$cf_email";;
8044 *) dflt="$perladmin";;
8045 esac
8046 rp='Perl administrator e-mail address'
8047 . ./myread
8048 perladmin="$ans"
8049
8050 : determine whether to only install version-specific parts.
8051 echo " "
8052 $cat <<EOM
8053 Do you want to install only the version-specific parts of the perl
8054 distribution?  Usually you do *not* want to do this.
8055 EOM
8056 case "$versiononly" in
8057 "$define"|[Yy]*|true) dflt='y' ;;
8058 *) dflt='n';
8059 esac
8060 rp="Do you want to install only the version-specific parts of perl?"
8061 . ./myread
8062 case "$ans" in
8063 [yY]*)  val="$define";;
8064 *)      val="$undef" ;;
8065 esac
8066 set versiononly
8067 eval $setvar
8068
8069 : figure out how to guarantee perl startup
8070 case "$startperl" in
8071 '')
8072         case "$sharpbang" in
8073         *!)
8074                 $cat <<EOH
8075
8076 I can use the #! construct to start perl on your system. This will
8077 make startup of perl scripts faster, but may cause problems if you
8078 want to share those scripts and perl is not in a standard place
8079 ($binexp/perl) on all your platforms. The alternative is to force
8080 a shell by starting the script with a single ':' character.
8081
8082 EOH
8083                 case "$versiononly" in
8084                 "$define")      dflt="$binexp/perl$version";;  
8085                 *)              dflt="$binexp/perl";;
8086                 esac
8087                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
8088                 . ./myread
8089                 case "$ans" in
8090                 none)   startperl=": # use perl";;
8091                 *)      startperl="#!$ans"
8092                         if $test 30 -lt `echo "$ans" | wc -c`; then
8093                                 $cat >&4 <<EOM
8094
8095 WARNING:  Some systems limit the #! command to 32 characters.
8096 If you experience difficulty running Perl scripts with #!, try
8097 installing Perl in a directory with a shorter pathname.
8098
8099 EOM
8100                         fi ;;
8101                 esac
8102                 ;;
8103         *) startperl=": # use perl"
8104                 ;;
8105         esac
8106         ;;
8107 esac
8108 echo "I'll use $startperl to start perl scripts."
8109
8110 : figure best path for perl in scripts
8111 case "$perlpath" in
8112 '')
8113         perlpath="$binexp/perl"
8114         case "$startperl" in
8115         *!*) ;;
8116         *)
8117                 $cat <<EOH
8118
8119 I will use the "eval 'exec'" idiom to start Perl on your system.
8120 I can use the full path of your Perl binary for this purpose, but
8121 doing so may cause problems if you want to share those scripts and
8122 Perl is not always in a standard place ($binexp/perl).
8123
8124 EOH
8125                 dflt="$binexp/perl"
8126                 rp="What path shall I use in \"eval 'exec'\"?"
8127                 . ./myread
8128                 perlpath="$ans"
8129                 ;;
8130         esac
8131         ;;
8132 esac
8133 case "$startperl" in
8134 *!*)    ;;
8135 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
8136 esac
8137
8138 : determine where public executable scripts go
8139 set scriptdir scriptdir
8140 eval $prefixit
8141 case "$scriptdir" in
8142 '')
8143         dflt="$bin"
8144         : guess some guesses
8145         $test -d /usr/share/scripts && dflt=/usr/share/scripts
8146         $test -d /usr/share/bin     && dflt=/usr/share/bin
8147         $test -d /usr/local/script  && dflt=/usr/local/script
8148         $test -d /usr/local/scripts && dflt=/usr/local/scripts
8149         $test -d $prefixexp/script  && dflt=$prefixexp/script
8150         set dflt
8151         eval $prefixup
8152         ;;
8153 *)  dflt="$scriptdir"
8154         ;;
8155 esac
8156 $cat <<EOM
8157  
8158 Some installations have a separate directory just for executable scripts so
8159 that they can mount it across multiple architectures but keep the scripts in
8160 one spot.  You might, for example, have a subdirectory of /usr/share for this.
8161 Or you might just lump your scripts in with all your other executables.
8162  
8163 EOM
8164 fn=d~
8165 rp='Where do you keep publicly executable scripts?'
8166 . ./getfile
8167 if $test "X$ansexp" != "X$scriptdirexp"; then
8168         installscript=''
8169 fi
8170 scriptdir="$ans"
8171 scriptdirexp="$ansexp"
8172 : Change installation prefix, if necessary.
8173 if $test X"$prefix" != X"$installprefix"; then
8174         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
8175 else
8176         installscript="$scriptdirexp"
8177 fi
8178
8179 : determine where add-on public executables go
8180 case "$sitebin" in
8181 '')     dflt=$siteprefix/bin ;;
8182 *)      dflt=$sitebin ;;
8183 esac
8184 fn=d~
8185 rp='Pathname where the add-on public executables should be installed?'
8186 . ./getfile
8187 sitebin="$ans"
8188 sitebinexp="$ansexp"
8189 : Change installation prefix, if necessary.
8190 if $test X"$prefix" != X"$installprefix"; then
8191         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
8192 else
8193         installsitebin="$sitebinexp"
8194 fi
8195
8196 case "$vendorprefix" in
8197 '')     d_vendorbin="$undef"
8198         vendorbin=''
8199         vendorbinexp=''
8200         ;;
8201 *)      d_vendorbin="$define"
8202         : determine where vendor-supplied executables go.
8203         case "$vendorbin" in
8204         '') dflt=$vendorprefix/bin ;;
8205         *)      dflt="$vendorbin" ;;
8206         esac
8207         fn=d~+
8208         rp='Pathname for the vendor-supplied executables directory?'
8209         . ./getfile
8210         vendorbin="$ans"
8211         vendorbinexp="$ansexp"
8212         ;;
8213 esac
8214 : Change installation prefix, if necessary.
8215 if $test X"$prefix" != X"$installprefix"; then
8216         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
8217 else
8218         installvendorbin="$vendorbinexp"
8219 fi
8220
8221 : see if qgcvt exists
8222 set qgcvt d_qgcvt
8223 eval $inlibc
8224
8225 echo " "
8226
8227 if $test X"$d_longdbl" = X"$define"; then
8228
8229 echo "Checking how to print long doubles..." >&4
8230
8231 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
8232         $cat >try.c <<'EOCP'
8233 #include <sys/types.h>
8234 #include <stdio.h>
8235 int main() {
8236   double d = 123.456;
8237   printf("%.3f\n", d);
8238 }
8239 EOCP
8240         set try
8241         if eval $compile; then
8242                 yyy=`$run ./try`
8243                 case "$yyy" in
8244                 123.456)
8245                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
8246                         sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
8247                         echo "We will use %f."
8248                         ;;
8249                 esac
8250         fi
8251 fi
8252
8253 if $test X"$sPRIfldbl" = X; then
8254         $cat >try.c <<'EOCP'
8255 #include <sys/types.h>
8256 #include <stdio.h>
8257 int main() {
8258   long double d = 123.456;
8259   printf("%.3Lf\n", d);
8260 }
8261 EOCP
8262         set try
8263         if eval $compile; then
8264                 yyy=`$run ./try`
8265                 case "$yyy" in
8266                 123.456)
8267                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
8268                         sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
8269                         echo "We will use %Lf."
8270                         ;;
8271                 esac
8272         fi
8273 fi
8274
8275 if $test X"$sPRIfldbl" = X; then
8276         $cat >try.c <<'EOCP'
8277 #include <sys/types.h>
8278 #include <stdio.h>
8279 int main() {
8280   long double d = 123.456;
8281   printf("%.3llf\n", d);
8282 }
8283 EOCP
8284         set try
8285         if eval $compile; then
8286                 yyy=`$run ./try`
8287                 case "$yyy" in
8288                 123.456)
8289                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
8290                         sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
8291                         echo "We will use %llf."
8292                         ;;
8293                 esac
8294         fi
8295 fi
8296
8297 if $test X"$sPRIfldbl" = X; then
8298         $cat >try.c <<'EOCP'
8299 #include <sys/types.h>
8300 #include <stdio.h>
8301 int main() {
8302   long double d = 123.456;
8303   printf("%.3lf\n", d);
8304 }
8305 EOCP
8306         set try
8307         if eval $compile; then
8308                 yyy=`$run ./try`
8309                 case "$yyy" in
8310                 123.456)
8311                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
8312                         sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
8313                         echo "We will use %lf."
8314                         ;;
8315                 esac
8316         fi
8317 fi
8318
8319 if $test X"$sPRIfldbl" = X; then
8320         echo "Cannot figure out how to print long doubles." >&4
8321 else
8322         sSCNfldbl=$sPRIfldbl    # expect consistency
8323 fi
8324
8325 $rm -f try try.*
8326
8327 fi # d_longdbl
8328
8329 case "$sPRIfldbl" in
8330 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
8331         d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; 
8332         d_SCNfldbl="$undef";
8333         ;;
8334 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
8335         d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; 
8336         d_SCNfldbl="$define";
8337         ;;
8338 esac
8339
8340 : Check how to convert floats to strings.
8341 echo " "
8342 echo "Checking for an efficient way to convert floats to strings."
8343 echo " " > try.c
8344 case "$uselongdouble" in
8345 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
8346 esac
8347 case "$d_longdbl" in
8348 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
8349 esac
8350 case "$d_PRIgldbl" in
8351 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
8352 esac
8353 $cat >>try.c <<EOP
8354 #ifdef TRY_gconvert
8355 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
8356 char *myname = "gconvert";
8357 #endif
8358 #ifdef TRY_gcvt
8359 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
8360 char *myname = "gcvt";
8361 #endif
8362 #ifdef TRY_qgcvt
8363 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
8364 char *myname = "qgcvt";
8365 #define DOUBLETYPE long double
8366 #endif
8367 #ifdef TRY_sprintf
8368 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
8369 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
8370 #else
8371 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
8372 #endif
8373 char *myname = "sprintf";
8374 #endif
8375
8376 #ifndef DOUBLETYPE
8377 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
8378 #define DOUBLETYPE long double
8379 #else
8380 #define DOUBLETYPE double
8381 #endif
8382 #endif
8383
8384 #include <stdio.h>
8385
8386 #define I_STDLIB $i_stdlib
8387 #ifdef I_STDLIB
8388 #include <stdlib.h>
8389 #endif
8390
8391 int
8392 checkit(expect, got)
8393 char *expect;
8394 char *got;
8395 {
8396     if (strcmp(expect, got)) {
8397                 printf("%s oddity:  Expected %s, got %s\n",
8398                         myname, expect, got);
8399                 exit(1);
8400         }
8401 }
8402
8403 int main()
8404
8405         char buf[64]; 
8406         buf[63] = '\0';
8407
8408         /* This must be 1st test on (which?) platform */
8409         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
8410         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
8411         checkit("0.1", buf);
8412
8413         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
8414         checkit("1", buf);
8415
8416         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
8417         checkit("1.1", buf);
8418
8419         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
8420         checkit("1.01", buf);
8421
8422         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
8423         checkit("1.001", buf);
8424
8425         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
8426         checkit("1.0001", buf);
8427
8428         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
8429         checkit("1.00001", buf);
8430
8431         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
8432         checkit("1.000001", buf);
8433
8434         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
8435         checkit("0", buf);
8436
8437         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
8438         checkit("-1", buf);
8439
8440         /* Some Linux gcvt's give 1.e+5 here. */
8441         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
8442         checkit("100000", buf);
8443         
8444         /* Some Linux gcvt's give -1.e+5 here. */
8445         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
8446         checkit("-100000", buf);
8447
8448         Gconvert((DOUBLETYPE)123.456, 8, 0, buf); 
8449         checkit("123.456", buf);
8450
8451         exit(0);
8452 }
8453 EOP
8454 case "$d_Gconvert" in
8455 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
8456 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
8457 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
8458 *) xxx_list='gconvert gcvt sprintf' ;;
8459 esac
8460
8461 case "$d_longdbl$uselongdouble$d_PRIgldbl" in
8462 "$define$define$define")
8463     # for long doubles prefer first qgcvt, then sprintf
8464     xxx_list="`echo $xxx_list|sed s/sprintf//`" 
8465     xxx_list="sprintf $xxx_list"
8466     case "$d_qgcvt" in
8467     "$define") xxx_list="qgcvt $xxx_list" ;;
8468     esac
8469     ;;
8470 esac
8471
8472 for xxx_convert in $xxx_list; do
8473         echo "Trying $xxx_convert..."
8474         $rm -f try try$_o
8475         set try -DTRY_$xxx_convert
8476         if eval $compile; then
8477                 echo "$xxx_convert() found." >&4
8478                 if $run ./try; then
8479                         echo "I'll use $xxx_convert to convert floats into a string." >&4
8480                         break;
8481                 else
8482                         echo "...But $xxx_convert didn't work as I expected."
8483                 fi
8484         else
8485                 echo "$xxx_convert NOT found." >&4
8486         fi
8487 done
8488         
8489 case "$xxx_convert" in
8490 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
8491 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
8492 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
8493 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
8494    "$define$define$define")
8495       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
8496    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
8497    esac
8498    ;;  
8499 esac
8500
8501 : see if _fwalk exists
8502 set fwalk d__fwalk
8503 eval $inlibc
8504
8505 : Initialize h_fcntl
8506 h_fcntl=false
8507
8508 : Initialize h_sysfile
8509 h_sysfile=false
8510
8511 : access call always available on UNIX
8512 set access d_access
8513 eval $inlibc
8514
8515 : locate the flags for 'access()'
8516 case "$d_access" in
8517 "$define")
8518         echo " "
8519         $cat >access.c <<'EOCP'
8520 #include <sys/types.h>
8521 #ifdef I_FCNTL
8522 #include <fcntl.h>
8523 #endif
8524 #ifdef I_SYS_FILE
8525 #include <sys/file.h>
8526 #endif
8527 #ifdef I_UNISTD
8528 #include <unistd.h>
8529 #endif
8530 int main() {
8531         exit(R_OK);
8532 }
8533 EOCP
8534         : check sys/file.h first, no particular reason here
8535         if $test `./findhdr sys/file.h` && \
8536                 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
8537                 h_sysfile=true;
8538                 echo "<sys/file.h> defines the *_OK access constants." >&4
8539         elif $test `./findhdr fcntl.h` && \
8540                 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
8541                 h_fcntl=true;
8542                 echo "<fcntl.h> defines the *_OK access constants." >&4
8543         elif $test `./findhdr unistd.h` && \
8544                 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
8545                 echo "<unistd.h> defines the *_OK access constants." >&4
8546         else
8547                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
8548         fi
8549         ;;
8550 esac
8551 $rm -f access*
8552
8553 : see if accessx exists
8554 set accessx d_accessx
8555 eval $inlibc
8556
8557 : see if alarm exists
8558 set alarm d_alarm
8559 eval $inlibc
8560
8561 : see if atolf exists
8562 set atolf d_atolf
8563 eval $inlibc
8564
8565 : see if atoll exists
8566 set atoll d_atoll
8567 eval $inlibc
8568
8569 : Look for GNU-cc style attribute checking
8570 echo " "
8571 echo "Checking whether your compiler can handle __attribute__ ..." >&4
8572 $cat >attrib.c <<'EOCP'
8573 #include <stdio.h>
8574 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
8575 EOCP
8576 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
8577         if $contains 'warning' attrib.out >/dev/null 2>&1; then
8578                 echo "Your C compiler doesn't fully support __attribute__."
8579                 val="$undef"
8580         else
8581                 echo "Your C compiler supports __attribute__."
8582                 val="$define"
8583         fi
8584 else
8585         echo "Your C compiler doesn't seem to understand __attribute__ at all."
8586         val="$undef"
8587 fi
8588 set d_attribut
8589 eval $setvar
8590 $rm -f attrib*
8591
8592 : see if bcmp exists
8593 set bcmp d_bcmp
8594 eval $inlibc
8595
8596 : see if bcopy exists
8597 set bcopy d_bcopy
8598 eval $inlibc
8599
8600 : see if this is a unistd.h system
8601 set unistd.h i_unistd
8602 eval $inhdr
8603
8604 : see if getpgrp exists
8605 set getpgrp d_getpgrp
8606 eval $inlibc
8607
8608 case "$d_getpgrp" in
8609 "$define")
8610         echo " "
8611         echo "Checking to see which flavor of getpgrp is in use..."
8612         $cat >try.c <<EOP
8613 #$i_unistd I_UNISTD
8614 #include <sys/types.h>
8615 #ifdef I_UNISTD
8616 #  include <unistd.h>
8617 #endif
8618 int main()
8619 {
8620         if (getuid() == 0) {
8621                 printf("(I see you are running Configure as super-user...)\n");
8622                 setuid(1);
8623         }
8624 #ifdef TRY_BSD_PGRP
8625         if (getpgrp(1) == 0)
8626                 exit(0);
8627 #else
8628         if (getpgrp() > 0)
8629                 exit(0);
8630 #endif
8631         exit(1);
8632 }
8633 EOP
8634         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8635                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
8636                 val="$define"
8637         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8638                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
8639                 val="$undef"
8640         else
8641                 echo "I can't seem to compile and run the test program."
8642                 if ./usg; then
8643                         xxx="a USG one, i.e. you use getpgrp()."
8644                 else
8645                         # SVR4 systems can appear rather BSD-ish.
8646                         case "$i_unistd" in
8647                         $undef)
8648                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
8649                                 val="$define"
8650                                 ;;
8651                         $define)
8652                                 xxx="probably a USG one, i.e. you use getpgrp()."
8653                                 val="$undef"
8654                                 ;;
8655                         esac
8656                 fi
8657                 echo "Assuming your getpgrp is $xxx" >&4
8658         fi
8659         ;;
8660 *) val="$undef";;
8661 esac
8662 set d_bsdgetpgrp
8663 eval $setvar
8664 $rm -f try try.*
8665
8666 : see if setpgrp exists
8667 set setpgrp d_setpgrp
8668 eval $inlibc
8669
8670 case "$d_setpgrp" in
8671 "$define")
8672         echo " "
8673         echo "Checking to see which flavor of setpgrp is in use..."
8674         $cat >try.c <<EOP
8675 #$i_unistd I_UNISTD
8676 #include <sys/types.h>
8677 #ifdef I_UNISTD
8678 #  include <unistd.h>
8679 #endif
8680 int main()
8681 {
8682         if (getuid() == 0) {
8683                 printf("(I see you are running Configure as super-user...)\n");
8684                 setuid(1);
8685         }
8686 #ifdef TRY_BSD_PGRP
8687         if (-1 == setpgrp(1, 1))
8688                 exit(0);
8689 #else
8690         if (setpgrp() != -1)
8691                 exit(0);
8692 #endif
8693         exit(1);
8694 }
8695 EOP
8696         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8697                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
8698                 val="$define"
8699         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8700                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
8701                 val="$undef"
8702         else
8703                 echo "(I can't seem to compile and run the test program.)"
8704                 if ./usg; then
8705                         xxx="a USG one, i.e. you use setpgrp()."
8706                 else
8707                         # SVR4 systems can appear rather BSD-ish.
8708                         case "$i_unistd" in
8709                         $undef)
8710                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
8711                                 val="$define"
8712                                 ;;
8713                         $define)
8714                                 xxx="probably a USG one, i.e. you use setpgrp()."
8715                                 val="$undef"
8716                                 ;;
8717                         esac
8718                 fi
8719                 echo "Assuming your setpgrp is $xxx" >&4
8720         fi
8721         ;;
8722 *) val="$undef";;
8723 esac
8724 set d_bsdsetpgrp
8725 eval $setvar
8726 $rm -f try try.*
8727 : see if bzero exists
8728 set bzero d_bzero
8729 eval $inlibc
8730
8731 : see if signal is declared as pointer to function returning int or void
8732 echo " "
8733 xxx=`./findhdr signal.h`
8734 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
8735 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
8736         echo "You have int (*signal())() instead of void." >&4
8737         val="$undef"
8738 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
8739         echo "You have void (*signal())()." >&4
8740         val="$define"
8741 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
8742         echo "You have int (*signal())() instead of void." >&4
8743         val="$undef"
8744 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
8745         echo "You have void (*signal())()." >&4
8746         val="$define"
8747 else
8748         case "$d_voidsig" in
8749         '')
8750         echo "I can't determine whether signal handler returns void or int..." >&4
8751                 dflt=void
8752                 rp="What type does your signal handler return?"
8753                 . ./myread
8754                 case "$ans" in
8755                 v*) val="$define";;
8756                 *) val="$undef";;
8757                 esac;;
8758         "$define")
8759                 echo "As you already told me, signal handler returns void." >&4
8760                 val="$define"
8761                 ;;
8762         *)      echo "As you already told me, signal handler returns int." >&4
8763                 val="$undef"
8764                 ;;
8765         esac
8766 fi
8767 set d_voidsig
8768 eval $setvar
8769 case "$d_voidsig" in
8770 "$define") signal_t="void";;
8771 *) signal_t="int";;
8772 esac
8773 $rm -f $$.tmp
8774
8775 : check for ability to cast large floats to 32-bit ints.
8776 echo " "
8777 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
8778 if $test "$intsize" -ge 4; then
8779         xxx=int
8780 else
8781         xxx=long
8782 fi
8783 $cat >try.c <<EOCP
8784 #include <stdio.h>
8785 #include <sys/types.h>
8786 #include <signal.h>
8787 $signal_t blech(s) int s; { exit(3); }
8788 int main()
8789 {
8790         $xxx i32;
8791         double f, g;
8792         int result = 0;
8793         char str[16];
8794         signal(SIGFPE, blech);
8795
8796         /* Don't let compiler optimize the test away.  Store the number 
8797            in a writable string for gcc to pass to sscanf under HP/UX.
8798         */
8799         sprintf(str, "2147483647");
8800         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
8801         g = 10 * f;
8802         i32  = ($xxx) g;
8803
8804         /* x86 processors will probably give 0x8000 0000, which is a
8805        sign change.  We don't want that.  We want to mimic SPARC
8806            behavior here, which is to preserve the sign and give
8807            back 0x7fff ffff.
8808         */
8809         if (i32 != ($xxx) f)
8810                 result |= 1;
8811         exit(result);
8812 }
8813 EOCP
8814 set try
8815 if eval $compile_ok; then
8816         $run ./try
8817         yyy=$?
8818 else
8819         echo "(I can't seem to compile the test program--assuming it can't)"
8820         yyy=1
8821 fi
8822 case "$yyy" in
8823 0)      val="$define"
8824         echo "Yup, it can."
8825         ;;
8826 *)      val="$undef"
8827         echo "Nope, it can't."
8828         ;;
8829 esac
8830 set d_casti32
8831 eval $setvar
8832 $rm -f try try.*
8833
8834 : check for ability to cast negative floats to unsigned
8835 echo " "
8836 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
8837 $cat >try.c <<EOCP
8838 #include <stdio.h>
8839 #include <sys/types.h>
8840 #include <signal.h>
8841 $signal_t blech(s) int s; { exit(7); }
8842 $signal_t blech_in_list(s) int s; { exit(4); }
8843 unsigned long dummy_long(p) unsigned long p; { return p; }
8844 unsigned int dummy_int(p) unsigned int p; { return p; }
8845 unsigned short dummy_short(p) unsigned short p; { return p; }
8846 int main()
8847 {
8848         double f;
8849         unsigned long along;
8850         unsigned int aint;
8851         unsigned short ashort;
8852         int result = 0;
8853         char str[16];
8854         
8855         /* Frustrate gcc-2.7.2's optimizer which failed this test with
8856            a direct f = -123. assignment.  gcc-2.8.0 reportedly
8857            optimized the whole file away
8858         */
8859         /* Store the number in a writable string for gcc to pass to 
8860            sscanf under HP/UX.
8861         */
8862         sprintf(str, "-123");
8863         sscanf(str, "%lf", &f);  /* f = -123.; */
8864
8865         signal(SIGFPE, blech);
8866         along = (unsigned long)f;
8867         aint = (unsigned int)f;
8868         ashort = (unsigned short)f;
8869         if (along != (unsigned long)-123)
8870                 result |= 1;
8871         if (aint != (unsigned int)-123)
8872                 result |= 1;
8873         if (ashort != (unsigned short)-123)
8874                 result |= 1;
8875         sprintf(str, "1073741824.");
8876         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
8877         f = f + f;
8878         along = 0;
8879         along = (unsigned long)f;
8880         if (along != 0x80000000)
8881                 result |= 2;
8882         f -= 1.;
8883         along = 0;
8884         along = (unsigned long)f;
8885         if (along != 0x7fffffff)
8886                 result |= 1;
8887         f += 2.;
8888         along = 0;
8889         along = (unsigned long)f;
8890         if (along != 0x80000001)
8891                 result |= 2;
8892         if (result)
8893                 exit(result);
8894         signal(SIGFPE, blech_in_list);
8895         sprintf(str, "123.");
8896         sscanf(str, "%lf", &f);  /* f = 123.; */
8897         along = dummy_long((unsigned long)f);
8898         aint = dummy_int((unsigned int)f);
8899         ashort = dummy_short((unsigned short)f);
8900         if (along != (unsigned long)123)
8901                 result |= 4;
8902         if (aint != (unsigned int)123)
8903                 result |= 4;
8904         if (ashort != (unsigned short)123)
8905                 result |= 4;
8906         exit(result);
8907
8908 }
8909 EOCP
8910 set try
8911 if eval $compile_ok; then
8912         $run ./try
8913         castflags=$?
8914 else
8915         echo "(I can't seem to compile the test program--assuming it can't)"
8916         castflags=7
8917 fi
8918 case "$castflags" in
8919 0)      val="$define"
8920         echo "Yup, it can."
8921         ;;
8922 *)      val="$undef"
8923         echo "Nope, it can't."
8924         ;;
8925 esac
8926 set d_castneg
8927 eval $setvar
8928 $rm -f try.*
8929
8930 : see if vprintf exists
8931 echo " "
8932 if set vprintf val -f d_vprintf; eval $csym; $val; then
8933         echo 'vprintf() found.' >&4
8934         val="$define"
8935         $cat >try.c <<'EOF'
8936 #include <varargs.h>
8937
8938 int main() { xxx("foo"); }
8939
8940 xxx(va_alist)
8941 va_dcl
8942 {
8943         va_list args;
8944         char buf[10];
8945
8946         va_start(args);
8947         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
8948 }
8949 EOF
8950         set try
8951         if eval $compile && $run ./try; then
8952                 echo "Your vsprintf() returns (int)." >&4
8953                 val2="$undef"
8954         else
8955                 echo "Your vsprintf() returns (char*)." >&4
8956                 val2="$define"
8957         fi
8958 else
8959         echo 'vprintf() NOT found.' >&4
8960                 val="$undef"
8961                 val2="$undef"
8962 fi
8963 $rm -f try try.*
8964 set d_vprintf
8965 eval $setvar
8966 val=$val2
8967 set d_charvspr
8968 eval $setvar
8969
8970 : see if chown exists
8971 set chown d_chown
8972 eval $inlibc
8973
8974 : see if chroot exists
8975 set chroot d_chroot
8976 eval $inlibc
8977
8978 : see if chsize exists
8979 set chsize d_chsize
8980 eval $inlibc
8981
8982 hasstruct='varname=$1; struct=$2; shift; shift;
8983 while $test $# -ge 2; do
8984         case "$1" in
8985         $define) echo "#include <$2>";;
8986         esac ;
8987     shift 2;
8988 done > try.c;
8989 echo "int main () { struct $struct foo; }" >> try.c;
8990 set try;
8991 if eval $compile; then
8992         val="$define";
8993 else
8994         val="$undef";
8995 fi;
8996 set $varname;
8997 eval $setvar;
8998 $rm -f try.c try.o'
8999
9000 : see if sys/types.h has to be included
9001 set sys/types.h i_systypes
9002 eval $inhdr
9003
9004 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
9005 while $test $# -ge 2; do
9006         case "$1" in
9007         $define) echo "#include <$2>";;
9008         esac ;
9009     shift 2;
9010 done > try.c;
9011 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
9012 set try;
9013 if eval $compile; then
9014         val="$define";
9015 else
9016         val="$undef";
9017 fi;
9018 set $varname;
9019 eval $setvar;
9020 $rm -f try.c try.o'
9021
9022 socketlib=''
9023 sockethdr=''
9024 : see whether socket exists
9025 echo " "
9026 $echo $n "Hmm... $c" >&4
9027 if set socket val -f d_socket; eval $csym; $val; then
9028         echo "Looks like you have Berkeley networking support." >&4
9029         d_socket="$define"
9030         if set setsockopt val -f; eval $csym; $val; then
9031                 d_oldsock="$undef"
9032         else
9033                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
9034                 d_oldsock="$define"
9035         fi
9036 else
9037         if $contains socklib libc.list >/dev/null 2>&1; then
9038                 echo "Looks like you have Berkeley networking support." >&4
9039                 d_socket="$define"
9040                 : we will have to assume that it supports the 4.2 BSD interface
9041                 d_oldsock="$undef"
9042         else
9043                 echo "You don't have Berkeley networking in libc$_a..." >&4
9044                 if test "X$d_socket" = "X$define"; then
9045                    echo "...but you seem to believe that you have sockets." >&4
9046                 else
9047                         for net in net socket
9048                         do
9049                                 if test -f /usr/lib/lib$net$_a; then
9050                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
9051                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
9052                                         if $contains socket libc.list >/dev/null 2>&1; then
9053                                                 d_socket="$define"
9054                                                 socketlib="-l$net"
9055                                                 case "$net" in
9056                                                 net)
9057                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
9058                                                         sockethdr="-I/usr/netinclude"
9059                                                         ;;
9060                                                 esac
9061                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
9062                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
9063                                                         d_oldsock="$undef"
9064                                                 else
9065                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
9066                                                         d_oldsock="$define"
9067                                                 fi
9068                                                 break
9069                                         fi
9070                                 fi
9071                         done
9072                         if test "X$d_socket" != "X$define"; then
9073                            echo "or anywhere else I see." >&4
9074                            d_socket="$undef"
9075                            d_oldsock="$undef"
9076                         fi
9077                 fi
9078         fi
9079 fi
9080
9081 : see if socketpair exists
9082 set socketpair d_sockpair
9083 eval $inlibc
9084
9085
9086 echo " "
9087 echo "Checking the availability of certain socket constants..." >& 4
9088 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
9089         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
9090         $cat >try.c <<EOF
9091 #include <sys/types.h>
9092 #include <sys/socket.h>
9093 int main() {
9094     int i = $ENUM;
9095 }
9096 EOF
9097         val="$undef"
9098         set try; if eval $compile; then
9099                 val="$define"
9100         fi
9101         set d_${enum}; eval $setvar
9102         $rm -f try.c try
9103 done
9104
9105 : see if this is a sys/uio.h system
9106 set sys/uio.h i_sysuio
9107 eval $inhdr
9108
9109
9110 echo " "
9111 echo "Checking to see if your system supports struct cmsghdr..." >&4
9112 set d_cmsghdr_s cmsghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
9113 eval $hasstruct
9114 case "$d_cmsghdr_s" in
9115 "$define")      echo "Yes, it does."   ;;
9116 *)              echo "No, it doesn't." ;;
9117 esac
9118
9119
9120 : check for const keyword
9121 echo " "
9122 echo 'Checking to see if your C compiler knows about "const"...' >&4
9123 $cat >const.c <<'EOCP'
9124 typedef struct spug { int drokk; } spug;
9125 int main()
9126 {
9127         const char *foo;
9128         const spug y;
9129 }
9130 EOCP
9131 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
9132         val="$define"
9133         echo "Yup, it does."
9134 else
9135         val="$undef"
9136         echo "Nope, it doesn't."
9137 fi
9138 set d_const
9139 eval $setvar
9140
9141 : see if crypt exists
9142 echo " "
9143 if set crypt val -f d_crypt; eval $csym; $val; then
9144         echo 'crypt() found.' >&4
9145         val="$define"
9146         cryptlib=''
9147 else
9148         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
9149         if $test -z "$cryptlib"; then
9150                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
9151         else
9152                 cryptlib=-lcrypt
9153         fi
9154         if $test -z "$cryptlib"; then
9155                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
9156         else
9157                 cryptlib=-lcrypt
9158         fi
9159         if $test -z "$cryptlib"; then
9160                 cryptlib=`./loc libcrypt$_a "" $libpth`
9161         else
9162                 cryptlib=-lcrypt
9163         fi
9164         if $test -z "$cryptlib"; then
9165                 echo 'crypt() NOT found.' >&4
9166                 val="$undef"
9167         else
9168                 val="$define"
9169         fi
9170 fi
9171 set d_crypt
9172 eval $setvar
9173
9174 : get csh whereabouts
9175 case "$csh" in
9176 'csh') val="$undef" ;;
9177 *) val="$define" ;;
9178 esac
9179 set d_csh
9180 eval $setvar
9181 : Respect a hint or command line value for full_csh.
9182 case "$full_csh" in
9183 '') full_csh=$csh ;;
9184 esac
9185
9186 : see if cuserid exists
9187 set cuserid d_cuserid
9188 eval $inlibc
9189
9190 : see if this is a limits.h system
9191 set limits.h i_limits
9192 eval $inhdr
9193
9194 : see if this is a float.h system
9195 set float.h i_float
9196 eval $inhdr
9197
9198 : See if number of significant digits in a double precision number is known
9199 echo " "
9200 $cat >dbl_dig.c <<EOM
9201 #$i_limits I_LIMITS
9202 #$i_float I_FLOAT
9203 #ifdef I_LIMITS
9204 #include <limits.h>
9205 #endif
9206 #ifdef I_FLOAT
9207 #include <float.h>
9208 #endif
9209 #ifdef DBL_DIG
9210 printf("Contains DBL_DIG");
9211 #endif
9212 EOM
9213 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
9214 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
9215         echo "DBL_DIG found." >&4
9216         val="$define"
9217 else
9218         echo "DBL_DIG NOT found." >&4
9219         val="$undef"
9220 fi
9221 $rm -f dbl_dig.?
9222 set d_dbl_dig
9223 eval $setvar
9224
9225 hasproto='varname=$1; func=$2; shift; shift;
9226 while $test $# -ge 2; do
9227         case "$1" in
9228         $define) echo "#include <$2>";;
9229         esac ;
9230     shift 2;
9231 done > try.c;
9232 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
9233 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
9234         echo "$func() prototype found.";
9235         val="$define";
9236 else
9237         echo "$func() prototype NOT found.";
9238         val="$undef";
9239 fi;
9240 set $varname;
9241 eval $setvar;
9242 $rm -f try.c tryout.c'
9243
9244 : see if dbm.h is available
9245 : see if dbmclose exists
9246 set dbmclose d_dbmclose
9247 eval $inlibc
9248
9249 case "$d_dbmclose" in
9250 $define)
9251         set dbm.h i_dbm
9252         eval $inhdr
9253         case "$i_dbm" in
9254         $define)
9255                 val="$undef"
9256                 set i_rpcsvcdbm
9257                 eval $setvar
9258                 ;;
9259         *)      set rpcsvc/dbm.h i_rpcsvcdbm
9260                 eval $inhdr
9261                 ;;
9262         esac
9263         ;;
9264 *)      echo "We won't be including <dbm.h>"
9265         val="$undef"
9266         set i_dbm
9267         eval $setvar
9268         val="$undef"
9269         set i_rpcsvcdbm
9270         eval $setvar
9271         ;;
9272 esac
9273
9274 : see if prototype for dbminit is available
9275 echo " "
9276 set d_dbminitproto dbminit $i_dbm dbm.h
9277 eval $hasproto
9278
9279 : see if difftime exists
9280 set difftime d_difftime
9281 eval $inlibc
9282
9283 : see if this is a dirent system
9284 echo " "
9285 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
9286         val="$define"
9287         echo "<dirent.h> found." >&4
9288 else
9289         val="$undef"
9290         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
9291                 echo "<sys/dir.h> found." >&4
9292                 echo " "
9293         else
9294                 xinc=`./findhdr sys/ndir.h`
9295         fi
9296         echo "<dirent.h> NOT found." >&4
9297 fi
9298 set i_dirent
9299 eval $setvar
9300
9301 : Look for type of directory structure.
9302 echo " "
9303 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9304
9305 case "$direntrytype" in
9306 ''|' ')
9307         case "$i_dirent" in
9308         $define) guess1='struct dirent' ;;
9309         *) guess1='struct direct'  ;;
9310         esac
9311         ;;
9312 *)      guess1="$direntrytype"
9313         ;;
9314 esac
9315
9316 case "$guess1" in
9317 'struct dirent') guess2='struct direct' ;;
9318 *) guess2='struct dirent' ;;
9319 esac
9320                 
9321 if $contains "$guess1" try.c >/dev/null 2>&1; then
9322         direntrytype="$guess1"
9323         echo "Your directory entries are $direntrytype." >&4
9324 elif $contains "$guess2" try.c >/dev/null 2>&1; then
9325         direntrytype="$guess2"
9326         echo "Your directory entries seem to be $direntrytype." >&4
9327 else
9328         echo "I don't recognize your system's directory entries." >&4
9329         rp="What type is used for directory entries on this system?"
9330         dflt="$guess1"
9331         . ./myread
9332         direntrytype="$ans"
9333 fi
9334 $rm -f try.c
9335
9336
9337 : see if the directory entry stores field length
9338 echo " "
9339 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9340 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
9341         echo "Good, your directory entry keeps length information in d_namlen." >&4
9342         val="$define"
9343 else
9344         echo "Your directory entry does not know about the d_namlen field." >&4
9345         val="$undef"
9346 fi
9347 set d_dirnamlen
9348 eval $setvar
9349 $rm -f try.c
9350
9351 : see if dlerror exists
9352 xxx_runnm="$runnm"
9353 runnm=false
9354 set dlerror d_dlerror
9355 eval $inlibc
9356 runnm="$xxx_runnm"
9357
9358 : see if dlfcn is available
9359 set dlfcn.h i_dlfcn
9360 eval $inhdr
9361
9362 case "$usedl" in
9363 $define|y|true)
9364         $cat << EOM
9365
9366 On a few systems, the dynamically loaded modules that perl generates and uses
9367 will need a different extension than shared libs. The default will probably
9368 be appropriate.
9369
9370 EOM
9371         case "$dlext" in
9372         '')     dflt="$so" ;;
9373         *)      dflt="$dlext" ;;
9374         esac
9375         rp='What is the extension of dynamically loaded modules'
9376         . ./myread
9377         dlext="$ans"
9378         ;;
9379 *)
9380         dlext="none"
9381         ;;
9382 esac
9383
9384 : Check if dlsym need a leading underscore
9385 echo " "
9386 val="$undef"
9387
9388 case "$dlsrc" in
9389 dl_dlopen.xs)
9390         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
9391         $cat >dyna.c <<'EOM'
9392 fred () { }
9393 EOM
9394
9395 $cat >fred.c<<EOM
9396
9397 #include <stdio.h>
9398 #$i_dlfcn I_DLFCN
9399 #ifdef I_DLFCN
9400 #include <dlfcn.h>      /* the dynamic linker include file for SunOS/Solaris */
9401 #else
9402 #include <sys/types.h>
9403 #include <nlist.h>
9404 #include <link.h>
9405 #endif
9406
9407 extern int fred() ;
9408
9409 int main()
9410 {
9411     void * handle ;
9412     void * symbol ;
9413 #ifndef RTLD_LAZY
9414     int mode = 1 ;
9415 #else
9416     int mode = RTLD_LAZY ;
9417 #endif
9418     handle = dlopen("./dyna.$dlext", mode) ;
9419     if (handle == NULL) {
9420         printf ("1\n") ;
9421         fflush (stdout) ;
9422         exit(0);
9423     }
9424     symbol = dlsym(handle, "fred") ;
9425     if (symbol == NULL) {
9426         /* try putting a leading underscore */
9427         symbol = dlsym(handle, "_fred") ;
9428         if (symbol == NULL) {
9429             printf ("2\n") ;
9430             fflush (stdout) ;
9431             exit(0);
9432         }
9433         printf ("3\n") ;
9434     }
9435     else
9436         printf ("4\n") ;
9437     fflush (stdout) ;
9438     exit(0);
9439 }
9440 EOM
9441         : Call the object file tmp-dyna.o in case dlext=o.
9442         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
9443                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
9444                 $ld -o dyna.$dlext $ldflags $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && 
9445                 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1 && $to dyna.$dlext; then
9446                 xxx=`$run ./fred`
9447                 case $xxx in
9448                 1)      echo "Test program failed using dlopen." >&4
9449                         echo "Perhaps you should not use dynamic loading." >&4;;
9450                 2)      echo "Test program failed using dlsym." >&4
9451                         echo "Perhaps you should not use dynamic loading." >&4;;
9452                 3)      echo "dlsym needs a leading underscore" >&4
9453                         val="$define" ;;
9454                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
9455                 esac
9456         else
9457                 echo "I can't compile and run the test program." >&4
9458                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
9459         fi
9460         ;;
9461 esac
9462                 
9463 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
9464
9465 set d_dlsymun
9466 eval $setvar
9467
9468 : see if prototype for drand48 is available
9469 echo " "
9470 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
9471 eval $hasproto
9472
9473 : see if dup2 exists
9474 set dup2 d_dup2
9475 eval $inlibc
9476
9477 : see if eaccess exists
9478 set eaccess d_eaccess
9479 eval $inlibc
9480
9481 : see if endgrent exists
9482 set endgrent d_endgrent
9483 eval $inlibc
9484
9485 : see if endhostent exists
9486 set endhostent d_endhent
9487 eval $inlibc
9488
9489 : see if endnetent exists
9490 set endnetent d_endnent
9491 eval $inlibc
9492
9493 : see if endprotoent exists
9494 set endprotoent d_endpent
9495 eval $inlibc
9496
9497 : see if endpwent exists
9498 set endpwent d_endpwent
9499 eval $inlibc
9500
9501 : see if endservent exists
9502 set endservent d_endsent
9503 eval $inlibc
9504
9505 : Locate the flags for 'open()'
9506 echo " "
9507 $cat >try.c <<'EOCP'
9508 #include <sys/types.h>
9509 #ifdef I_FCNTL
9510 #include <fcntl.h>
9511 #endif
9512 #ifdef I_SYS_FILE
9513 #include <sys/file.h>
9514 #endif
9515 int main() {
9516         if(O_RDONLY);
9517 #ifdef O_TRUNC
9518         exit(0);
9519 #else
9520         exit(1);
9521 #endif
9522 }
9523 EOCP
9524 : check sys/file.h first to get FREAD on Sun
9525 if $test `./findhdr sys/file.h` && \
9526                 set try -DI_SYS_FILE && eval $compile; then
9527         h_sysfile=true;
9528         echo "<sys/file.h> defines the O_* constants..." >&4
9529         if $run ./try; then
9530                 echo "and you have the 3 argument form of open()." >&4
9531                 val="$define"
9532         else
9533                 echo "but not the 3 argument form of open().  Oh, well." >&4
9534                 val="$undef"
9535         fi
9536 elif $test `./findhdr fcntl.h` && \
9537                 set try -DI_FCNTL && eval $compile; then
9538         h_fcntl=true;
9539         echo "<fcntl.h> defines the O_* constants..." >&4
9540         if $run ./try; then
9541                 echo "and you have the 3 argument form of open()." >&4
9542                 val="$define"
9543         else
9544                 echo "but not the 3 argument form of open().  Oh, well." >&4
9545                 val="$undef"
9546         fi
9547 else
9548         val="$undef"
9549         echo "I can't find the O_* constant definitions!  You got problems." >&4
9550 fi
9551 set d_open3
9552 eval $setvar
9553 $rm -f try try.*
9554
9555 : see which of string.h or strings.h is needed
9556 echo " "
9557 strings=`./findhdr string.h`
9558 if $test "$strings" && $test -r "$strings"; then
9559         echo "Using <string.h> instead of <strings.h>." >&4
9560         val="$define"
9561 else
9562         val="$undef"
9563         strings=`./findhdr strings.h`
9564         if $test "$strings" && $test -r "$strings"; then
9565                 echo "Using <strings.h> instead of <string.h>." >&4
9566         else
9567                 echo "No string header found -- You'll surely have problems." >&4
9568         fi
9569 fi
9570 set i_string
9571 eval $setvar
9572 case "$i_string" in
9573 "$undef") strings=`./findhdr strings.h`;;
9574 *)        strings=`./findhdr string.h`;;
9575 esac
9576
9577 : check for non-blocking I/O stuff
9578 case "$h_sysfile" in
9579 true) echo "#include <sys/file.h>" > head.c;;
9580 *)
9581        case "$h_fcntl" in
9582        true) echo "#include <fcntl.h>" > head.c;;
9583        *) echo "#include <sys/fcntl.h>" > head.c;;
9584        esac
9585        ;;
9586 esac
9587 echo " "
9588 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
9589 case "$o_nonblock" in
9590 '')
9591         $cat head.c > try.c
9592         $cat >>try.c <<'EOCP'
9593 #include <stdio.h>
9594 int main() {
9595 #ifdef O_NONBLOCK
9596         printf("O_NONBLOCK\n");
9597         exit(0);
9598 #endif
9599 #ifdef O_NDELAY
9600         printf("O_NDELAY\n");
9601         exit(0);
9602 #endif
9603 #ifdef FNDELAY
9604         printf("FNDELAY\n");
9605         exit(0);
9606 #endif
9607         exit(0);
9608 }
9609 EOCP
9610         set try
9611         if eval $compile_ok; then
9612                 o_nonblock=`$run ./try`
9613                 case "$o_nonblock" in
9614                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
9615                 *) echo "Seems like we can use $o_nonblock.";;
9616                 esac
9617         else
9618                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
9619         fi
9620         ;;
9621 *) echo "Using $hint value $o_nonblock.";;
9622 esac
9623 $rm -f try try.* .out core
9624
9625 echo " "
9626 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
9627 case "$eagain" in
9628 '')
9629         $cat head.c > try.c
9630         $cat >>try.c <<EOCP
9631 #include <errno.h>
9632 #include <sys/types.h>
9633 #include <signal.h>
9634 #include <stdio.h> 
9635 #define MY_O_NONBLOCK $o_nonblock
9636 #ifndef errno  /* XXX need better Configure test */
9637 extern int errno;
9638 #endif
9639 #$i_unistd I_UNISTD
9640 #ifdef I_UNISTD
9641 #include <unistd.h>
9642 #endif
9643 #$i_string I_STRING
9644 #ifdef I_STRING
9645 #include <string.h>
9646 #else
9647 #include <strings.h>
9648 #endif
9649 $signal_t blech(x) int x; { exit(3); }
9650 EOCP
9651         $cat >> try.c <<'EOCP'
9652 int main()
9653 {
9654         int pd[2];
9655         int pu[2];
9656         char buf[1];
9657         char string[100];
9658
9659         pipe(pd);       /* Down: child -> parent */
9660         pipe(pu);       /* Up: parent -> child */
9661         if (0 != fork()) {
9662                 int ret;
9663                 close(pd[1]);   /* Parent reads from pd[0] */
9664                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
9665 #ifdef F_SETFL
9666                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
9667                         exit(1);
9668 #else
9669                 exit(4);
9670 #endif
9671                 signal(SIGALRM, blech);
9672                 alarm(5);
9673                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
9674                         exit(2);
9675                 sprintf(string, "%d\n", ret);
9676                 write(2, string, strlen(string));
9677                 alarm(0);
9678 #ifdef EAGAIN
9679                 if (errno == EAGAIN) {
9680                         printf("EAGAIN\n");
9681                         goto ok;
9682                 }
9683 #endif
9684 #ifdef EWOULDBLOCK
9685                 if (errno == EWOULDBLOCK)
9686                         printf("EWOULDBLOCK\n");
9687 #endif
9688         ok:
9689                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
9690                 sleep(2);                               /* Give it time to close our pipe */
9691                 alarm(5);
9692                 ret = read(pd[0], buf, 1);      /* Should read EOF */
9693                 alarm(0);
9694                 sprintf(string, "%d\n", ret);
9695                 write(3, string, strlen(string));
9696                 exit(0);
9697         }
9698
9699         close(pd[0]);                   /* We write to pd[1] */
9700         close(pu[1]);                   /* We read from pu[0] */
9701         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
9702         close(pd[1]);                   /* Pipe pd is now fully closed! */
9703         exit(0);                                /* Bye bye, thank you for playing! */
9704 }
9705 EOCP
9706         set try
9707         if eval $compile_ok; then
9708                 echo "$startsh" >mtry
9709                 echo "$run ./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
9710                 chmod +x mtry
9711                 ./mtry >/dev/null 2>&1
9712                 case $? in
9713                 0) eagain=`$cat try.out`;;
9714                 1) echo "Could not perform non-blocking setting!";;
9715                 2) echo "I did a successful read() for something that was not there!";;
9716                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
9717                 4) echo "Could not find F_SETFL!";;
9718                 *) echo "Something terribly wrong happened during testing.";;
9719                 esac
9720                 rd_nodata=`$cat try.ret`
9721                 echo "A read() system call with no data present returns $rd_nodata."
9722                 case "$rd_nodata" in
9723                 0|-1) ;;
9724                 *)
9725                         echo "(That's peculiar, fixing that to be -1.)"
9726                         rd_nodata=-1
9727                         ;;
9728                 esac
9729                 case "$eagain" in
9730                 '')
9731                         echo "Forcing errno EAGAIN on read() with no data available."
9732                         eagain=EAGAIN
9733                         ;;
9734                 *)
9735                         echo "Your read() sets errno to $eagain when no data is available."
9736                         ;;
9737                 esac
9738                 status=`$cat try.err`
9739                 case "$status" in
9740                 0) echo "And it correctly returns 0 to signal EOF.";;
9741                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
9742                 *) echo "However, your read() returns '$status' on EOF??";;
9743                 esac
9744                 val="$define"
9745                 if test "$status" = "$rd_nodata"; then
9746                         echo "WARNING: you can't distinguish between EOF and no data!"
9747                         val="$undef"
9748                 fi
9749         else
9750                 echo "I can't compile the test program--assuming errno EAGAIN will do."
9751                 eagain=EAGAIN
9752         fi
9753         set d_eofnblk
9754         eval $setvar
9755         ;;
9756 *)
9757         echo "Using $hint value $eagain."
9758         echo "Your read() returns $rd_nodata when no data is present."
9759         case "$d_eofnblk" in
9760         "$define") echo "And you can see EOF because read() returns 0.";;
9761         "$undef") echo "But you can't see EOF status from read() returned value.";;
9762         *)
9763                 echo "(Assuming you can't see EOF status from read anyway.)"
9764                 d_eofnblk=$undef
9765                 ;;
9766         esac
9767         ;;
9768 esac
9769 $rm -f try try.* .out core head.c mtry
9770
9771 : see if fchmod exists
9772 set fchmod d_fchmod
9773 eval $inlibc
9774
9775 : see if fchown exists
9776 set fchown d_fchown
9777 eval $inlibc
9778
9779 : see if this is an fcntl system
9780 set fcntl d_fcntl
9781 eval $inlibc
9782
9783 echo " "
9784 : See if fcntl-based locking works.
9785 $cat >try.c <<'EOCP'
9786 #include <stdlib.h>
9787 #include <unistd.h>
9788 #include <fcntl.h>
9789 int main() {
9790 #if defined(F_SETLK) && defined(F_SETLKW)
9791      struct flock flock;
9792      int retval, fd;
9793      fd = open("try.c", O_RDONLY);
9794      flock.l_type = F_RDLCK;
9795      flock.l_whence = SEEK_SET;
9796      flock.l_start = flock.l_len = 0;
9797      retval = fcntl(fd, F_SETLK, &flock);
9798      close(fd);
9799      (retval < 0 ? exit(2) : exit(0));
9800 #else
9801      exit(2);
9802 #endif
9803 }
9804 EOCP
9805 echo "Checking if fcntl-based file locking works... "
9806 case "$d_fcntl" in
9807 "$define")
9808         set try
9809         if eval $compile_ok; then
9810                 if $run ./try; then
9811                         echo "Yes, it seems to work."
9812                         val="$define"
9813                 else
9814                         echo "Nope, it didn't work."
9815                         val="$undef"
9816                 fi
9817         else
9818                 echo "I'm unable to compile the test program, so I'll assume not."
9819                 val="$undef"
9820         fi
9821         ;;
9822 *) val="$undef";
9823         echo "Nope, since you don't even have fcntl()."
9824         ;;
9825 esac
9826 set d_fcntl_can_lock
9827 eval $setvar
9828 $rm -f try*
9829
9830
9831 : see if sys/select.h has to be included
9832 set sys/select.h i_sysselct
9833 eval $inhdr
9834
9835 : see if we should include time.h, sys/time.h, or both
9836 echo " "
9837 if test "X$timeincl" = X; then
9838         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
9839         $echo $n "I'm now running the test program...$c"
9840         $cat >try.c <<'EOCP'
9841 #include <sys/types.h>
9842 #ifdef I_TIME
9843 #include <time.h>
9844 #endif
9845 #ifdef I_SYSTIME
9846 #ifdef SYSTIMEKERNEL
9847 #define KERNEL
9848 #endif
9849 #include <sys/time.h>
9850 #endif
9851 #ifdef I_SYSSELECT
9852 #include <sys/select.h>
9853 #endif
9854 int main()
9855 {
9856         struct tm foo;
9857 #ifdef S_TIMEVAL
9858         struct timeval bar;
9859 #endif
9860 #ifdef S_TIMEZONE
9861         struct timezone tzp;
9862 #endif
9863         if (foo.tm_sec == foo.tm_sec)
9864                 exit(0);
9865 #ifdef S_TIMEVAL
9866         if (bar.tv_sec == bar.tv_sec)
9867                 exit(0);
9868 #endif
9869         exit(1);
9870 }
9871 EOCP
9872         flags=''
9873         for s_timezone in '-DS_TIMEZONE' ''; do
9874         sysselect=''
9875         for s_timeval in '-DS_TIMEVAL' ''; do
9876         for i_systimek in '' '-DSYSTIMEKERNEL'; do
9877         for i_time in '' '-DI_TIME'; do
9878         for i_systime in '-DI_SYSTIME' ''; do
9879                 case "$flags" in
9880                 '') $echo $n ".$c"
9881                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
9882                         if eval $compile; then
9883                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
9884                                 shift
9885                                 flags="$*"
9886                                 echo " "
9887                                 $echo $n "Succeeded with $flags$c"
9888                         fi
9889                         ;;
9890                 esac
9891         done
9892         done
9893         done
9894         done
9895         done
9896         timeincl=''
9897         echo " "
9898         case "$flags" in
9899         *SYSTIMEKERNEL*) i_systimek="$define"
9900                 timeincl=`./findhdr sys/time.h`
9901                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
9902         *) i_systimek="$undef";;
9903         esac
9904         case "$flags" in
9905         *I_TIME*) i_time="$define"
9906                 timeincl=`./findhdr time.h`" $timeincl"
9907                 echo "We'll include <time.h>." >&4;;
9908         *) i_time="$undef";;
9909         esac
9910         case "$flags" in
9911         *I_SYSTIME*) i_systime="$define"
9912                 timeincl=`./findhdr sys/time.h`" $timeincl"
9913                 echo "We'll include <sys/time.h>." >&4;;
9914         *) i_systime="$undef";;
9915         esac
9916         $rm -f try.c try
9917 fi
9918
9919 : check for fd_set items
9920 $cat <<EOM
9921
9922 Checking to see how well your C compiler handles fd_set and friends ...
9923 EOM
9924 $cat >try.c <<EOCP
9925 #$i_systime I_SYS_TIME
9926 #$i_sysselct I_SYS_SELECT
9927 #$d_socket HAS_SOCKET
9928 #include <sys/types.h>
9929 #ifdef HAS_SOCKET
9930 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
9931 #endif
9932 #ifdef I_SYS_TIME
9933 #include <sys/time.h>
9934 #endif
9935 #ifdef I_SYS_SELECT
9936 #include <sys/select.h>
9937 #endif
9938 int main() {
9939         fd_set fds;
9940
9941 #ifdef TRYBITS
9942         if(fds.fds_bits);
9943 #endif
9944
9945 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
9946         exit(0);
9947 #else
9948         exit(1);
9949 #endif
9950 }
9951 EOCP
9952 set try -DTRYBITS
9953 if eval $compile; then
9954         d_fds_bits="$define"
9955         d_fd_set="$define"
9956         echo "Well, your system knows about the normal fd_set typedef..." >&4
9957         if $run ./try; then
9958                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
9959                 d_fd_macros="$define"
9960         else
9961                 $cat >&4 <<'EOM'
9962 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
9963 EOM
9964                 d_fd_macros="$undef"
9965         fi
9966 else
9967         $cat <<'EOM'
9968 Hmm, your compiler has some difficulty with fd_set.  Checking further...
9969 EOM
9970         set try
9971         if eval $compile; then
9972                 d_fds_bits="$undef"
9973                 d_fd_set="$define"
9974                 echo "Well, your system has some sort of fd_set available..." >&4
9975                 if $run ./try; then
9976                         echo "and you have the normal fd_set macros." >&4
9977                         d_fd_macros="$define"
9978                 else
9979                         $cat <<'EOM'
9980 but not the normal fd_set macros!  Gross!  More work for me...
9981 EOM
9982                         d_fd_macros="$undef"
9983                 fi
9984         else
9985         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
9986                 d_fd_set="$undef"
9987                 d_fds_bits="$undef"
9988                 d_fd_macros="$undef"
9989         fi
9990 fi
9991 $rm -f try try.*
9992
9993 : see if fgetpos exists
9994 set fgetpos d_fgetpos
9995 eval $inlibc
9996
9997 : see if flock exists
9998 set flock d_flock
9999 eval $inlibc
10000
10001 : see if this is a sys/file.h system
10002 val=''
10003 set sys/file.h val
10004 eval $inhdr
10005
10006 : do we need to include sys/file.h ?
10007 case "$val" in
10008 "$define")
10009         echo " "
10010         if $h_sysfile; then
10011                 val="$define"
10012                 echo "We'll be including <sys/file.h>." >&4
10013         else
10014                 val="$undef"
10015                 echo "We won't be including <sys/file.h>." >&4
10016         fi
10017         ;;
10018 *)
10019         h_sysfile=false
10020         ;;
10021 esac
10022 set i_sysfile
10023 eval $setvar
10024
10025 : see if prototype for flock is available
10026 echo " "
10027 set d_flockproto flock $i_sysfile sys/file.h
10028 eval $hasproto
10029
10030 : see if fork exists
10031 set fork d_fork
10032 eval $inlibc
10033
10034 : see if pathconf exists
10035 set pathconf d_pathconf
10036 eval $inlibc
10037
10038 : see if fpathconf exists
10039 set fpathconf d_fpathconf
10040 eval $inlibc
10041
10042
10043 : check for fpos64_t
10044 echo " "
10045 echo "Checking to see if you have fpos64_t..." >&4
10046 $cat >try.c <<EOCP
10047 #include <stdio.h>
10048 int main() { fpos64_t x = 7; }
10049 EOCP
10050 set try
10051 if eval $compile; then
10052         val="$define"
10053         echo "You have fpos64_t."
10054 else
10055         val="$undef"
10056         echo "You do not have fpos64_t."
10057         case "$fpossize" in
10058         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
10059         esac
10060 fi
10061 $rm -f try.* try
10062 set d_fpos64_t
10063 eval $setvar
10064
10065 : see if frexpl exists
10066 set frexpl d_frexpl
10067 eval $inlibc
10068
10069 : see if this is a sys/param system
10070 set sys/param.h i_sysparam
10071 eval $inhdr
10072
10073 : see if this is a sys/mount.h system
10074 set sys/mount.h i_sysmount
10075 eval $inhdr
10076
10077
10078 echo " "
10079 echo "Checking to see if your system supports struct fs_data..." >&4
10080 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
10081 eval $hasstruct
10082 case "$d_fs_data_s" in
10083 "$define")      echo "Yes, it does."   ;;
10084 *)              echo "No, it doesn't." ;;
10085 esac
10086
10087 : see if fseeko exists
10088 set fseeko d_fseeko
10089 eval $inlibc
10090 case "$longsize" in
10091 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
10092 esac
10093
10094 : see if fsetpos exists
10095 set fsetpos d_fsetpos
10096 eval $inlibc
10097
10098
10099 : see if fstatfs exists
10100 set fstatfs d_fstatfs
10101 eval $inlibc
10102
10103
10104 : see if statvfs exists
10105 set statvfs d_statvfs
10106 eval $inlibc
10107
10108 : see if fstatvfs exists
10109 set fstatvfs d_fstatvfs
10110 eval $inlibc
10111
10112
10113 : see if fsync exists
10114 set fsync d_fsync
10115 eval $inlibc
10116
10117 : see if ftello exists
10118 set ftello d_ftello
10119 eval $inlibc
10120 case "$longsize" in
10121 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
10122 esac
10123
10124 : see if getcwd exists
10125 set getcwd d_getcwd
10126 eval $inlibc
10127
10128 : see if getespwnam exists
10129 set getespwnam d_getespwnam
10130 eval $inlibc
10131
10132
10133 : see if getfsstat exists
10134 set getfsstat d_getfsstat
10135 eval $inlibc
10136
10137 : see if getgrent exists
10138 set getgrent d_getgrent
10139 eval $inlibc
10140
10141 : see if gethostbyaddr exists
10142 set gethostbyaddr d_gethbyaddr
10143 eval $inlibc
10144
10145 : see if gethostbyname exists
10146 set gethostbyname d_gethbyname
10147 eval $inlibc
10148
10149 : see if gethostent exists
10150 set gethostent d_gethent
10151 eval $inlibc
10152
10153 : see how we will look up host name
10154 echo " "
10155 call=''
10156 if set gethostname val -f d_gethname; eval $csym; $val; then
10157         echo 'gethostname() found.' >&4
10158         d_gethname="$define"
10159         call=gethostname
10160 fi
10161 if set uname val -f d_uname; eval $csym; $val; then
10162         if ./xenix; then
10163                 $cat <<'EOM'
10164 uname() was found, but you're running xenix, and older versions of xenix
10165 have a broken uname(). If you don't really know whether your xenix is old
10166 enough to have a broken system call, use the default answer.
10167
10168 EOM
10169                 dflt=y
10170                 case "$d_uname" in
10171                 "$define") dflt=n;;
10172                 esac
10173                 rp='Is your uname() broken?'
10174                 . ./myread
10175                 case "$ans" in
10176                 n*) d_uname="$define"; call=uname;;
10177                 esac
10178         else
10179                 echo 'uname() found.' >&4
10180                 d_uname="$define"
10181                 case "$call" in
10182                 '') call=uname ;;
10183                 esac
10184         fi
10185 fi
10186 case "$d_gethname" in
10187 '') d_gethname="$undef";;
10188 esac
10189 case "$d_uname" in
10190 '') d_uname="$undef";;
10191 esac
10192 case "$d_uname$d_gethname" in
10193 *define*)
10194         dflt=n
10195         cat <<EOM
10196  
10197 Every now and then someone has a $call() that lies about the hostname
10198 but can't be fixed for political or economic reasons.  If you wish, I can
10199 pretend $call() isn't there and maybe compute hostname at run-time
10200 thanks to the '$phostname' command.
10201
10202 EOM
10203         rp="Shall I ignore $call() from now on?"
10204         . ./myread
10205         case "$ans" in
10206         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
10207         esac;;
10208 esac
10209 case "$phostname" in
10210 '') aphostname='';;
10211 *) case "$aphostname" in
10212         /*) ;;
10213         *) set X $phostname
10214                 shift
10215                 file=$1
10216                 shift
10217                 file=`./loc $file $file $pth`
10218                 aphostname=`echo $file $*`
10219                 ;;
10220         esac
10221         ;;
10222 esac
10223 case "$d_uname$d_gethname" in
10224 *define*) ;;
10225 *)
10226         case "$phostname" in
10227         '')
10228                 echo "There will be no way for $package to get your hostname." >&4;;
10229         *)
10230         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
10231                 ;;
10232         esac;;
10233 esac
10234 case "$d_phostname" in
10235 '') d_phostname="$undef";;
10236 esac
10237
10238 : see if this is a netdb.h system
10239 set netdb.h i_netdb
10240 eval $inhdr
10241
10242 : see if prototypes for various gethostxxx netdb.h functions are available
10243 echo " "
10244 set d_gethostprotos gethostent $i_netdb netdb.h
10245 eval $hasproto
10246
10247 : see if getitimer exists
10248 set getitimer d_getitimer
10249 eval $inlibc
10250
10251 : see if getlogin exists
10252 set getlogin d_getlogin
10253 eval $inlibc
10254
10255 : see if getmnt exists
10256 set getmnt d_getmnt
10257 eval $inlibc
10258
10259 : see if getmntent exists
10260 set getmntent d_getmntent
10261 eval $inlibc
10262
10263 : see if getnetbyaddr exists
10264 set getnetbyaddr d_getnbyaddr
10265 eval $inlibc
10266
10267 : see if getnetbyname exists
10268 set getnetbyname d_getnbyname
10269 eval $inlibc
10270
10271 : see if getnetent exists
10272 set getnetent d_getnent
10273 eval $inlibc
10274
10275 : see if prototypes for various getnetxxx netdb.h functions are available
10276 echo " "
10277 set d_getnetprotos getnetent $i_netdb netdb.h
10278 eval $hasproto
10279
10280 : see if getpagesize exists
10281 set getpagesize d_getpagsz
10282 eval $inlibc
10283
10284
10285 : see if getprotobyname exists
10286 set getprotobyname d_getpbyname
10287 eval $inlibc
10288
10289 : see if getprotobynumber exists
10290 set getprotobynumber d_getpbynumber
10291 eval $inlibc
10292
10293 : see if getprotoent exists
10294 set getprotoent d_getpent
10295 eval $inlibc
10296
10297 : see if getpgid exists
10298 set getpgid d_getpgid
10299 eval $inlibc
10300
10301 : see if getpgrp2 exists
10302 set getpgrp2 d_getpgrp2
10303 eval $inlibc
10304
10305 : see if getppid exists
10306 set getppid d_getppid
10307 eval $inlibc
10308
10309 : see if getpriority exists
10310 set getpriority d_getprior
10311 eval $inlibc
10312
10313 : see if prototypes for various getprotoxxx netdb.h functions are available
10314 echo " "
10315 set d_getprotoprotos getprotoent $i_netdb netdb.h
10316 eval $hasproto
10317
10318 : see if getprpwnam exists
10319 set getprpwnam d_getprpwnam
10320 eval $inlibc
10321
10322 : see if getpwent exists
10323 set getpwent d_getpwent
10324 eval $inlibc
10325
10326
10327 : see if getservbyname exists
10328 set getservbyname d_getsbyname
10329 eval $inlibc
10330
10331 : see if getservbyport exists
10332 set getservbyport d_getsbyport
10333 eval $inlibc
10334
10335 : see if getservent exists
10336 set getservent d_getsent
10337 eval $inlibc
10338
10339 : see if prototypes for various getservxxx netdb.h functions are available
10340 echo " "
10341 set d_getservprotos getservent $i_netdb netdb.h
10342 eval $hasproto
10343
10344 : see if getspnam exists
10345 set getspnam d_getspnam
10346 eval $inlibc
10347
10348 : see if gettimeofday or ftime exists
10349 set gettimeofday d_gettimeod
10350 eval $inlibc
10351 case "$d_gettimeod" in
10352 "$undef")
10353         set ftime d_ftime 
10354         eval $inlibc
10355         ;;
10356 *)
10357         val="$undef"; set d_ftime; eval $setvar
10358         ;;
10359 esac
10360 case "$d_gettimeod$d_ftime" in
10361 "$undef$undef")
10362         echo " "
10363         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
10364         ;;
10365 esac
10366
10367 : see if this is an grp system
10368 set grp.h i_grp
10369 eval $inhdr
10370
10371 case "$i_grp" in
10372 $define)
10373         xxx=`./findhdr grp.h`
10374         $cppstdin $cppflags $cppminus < $xxx >$$.h
10375
10376         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
10377                 val="$define"
10378         else
10379                 val="$undef"
10380         fi
10381         set d_grpasswd
10382         eval $setvar
10383
10384         $rm -f $$.h
10385         ;;
10386 *)
10387         val="$undef";
10388         set d_grpasswd; eval $setvar
10389         ;;
10390 esac
10391
10392 : see if hasmntopt exists
10393 set hasmntopt d_hasmntopt
10394 eval $inlibc
10395
10396 : see if this is a netinet/in.h or sys/in.h system
10397 set netinet/in.h i_niin sys/in.h i_sysin
10398 eval $inhdr
10399
10400 : see if arpa/inet.h has to be included
10401 set arpa/inet.h i_arpainet
10402 eval $inhdr
10403
10404 : see if htonl --and friends-- exists
10405 val=''
10406 set htonl val
10407 eval $inlibc
10408
10409 : Maybe they are macros.
10410 case "$val" in
10411 $undef)
10412         $cat >htonl.c <<EOM
10413 #include <stdio.h>
10414 #include <sys/types.h>
10415 #$i_niin I_NETINET_IN
10416 #$i_sysin I_SYS_IN
10417 #$i_arpainet I_ARPA_INET
10418 #ifdef I_NETINET_IN
10419 #include <netinet/in.h>
10420 #endif
10421 #ifdef I_SYS_IN
10422 #include <sys/in.h>
10423 #endif
10424 #ifdef I_ARPA_INET
10425 #include <arpa/inet.h>
10426 #endif
10427 #ifdef htonl
10428 printf("Defined as a macro.");
10429 #endif
10430 EOM
10431         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
10432         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
10433                 val="$define"
10434                 echo "But it seems to be defined as a macro." >&4
10435         fi
10436         $rm -f htonl.?
10437         ;;
10438 esac
10439 set d_htonl
10440 eval $setvar
10441
10442 : see if iconv exists
10443 set iconv d_iconv
10444 eval $inlibc
10445
10446 : index or strchr
10447 echo " "
10448 if set index val -f; eval $csym; $val; then
10449         if set strchr val -f d_strchr; eval $csym; $val; then
10450                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
10451                         val="$define"
10452                         vali="$undef"
10453                         echo "strchr() found." >&4
10454                 else
10455                         val="$undef"
10456                         vali="$define"
10457                         echo "index() found." >&4
10458                 fi
10459         else
10460                 val="$undef"
10461                 vali="$define"
10462                 echo "index() found." >&4
10463         fi
10464 else
10465         if set strchr val -f d_strchr; eval $csym; $val; then
10466                 val="$define"
10467                 vali="$undef"
10468                 echo "strchr() found." >&4
10469         else
10470                 echo "No index() or strchr() found!" >&4
10471                 val="$undef"
10472                 vali="$undef"
10473         fi
10474 fi
10475 set d_strchr; eval $setvar
10476 val="$vali"
10477 set d_index; eval $setvar
10478
10479 : check whether inet_aton exists
10480 set inet_aton d_inetaton
10481 eval $inlibc
10482
10483 : Look for isascii
10484 echo " "
10485 $cat >isascii.c <<'EOCP'
10486 #include <stdio.h>
10487 #include <ctype.h>
10488 int main() {
10489         int c = 'A';
10490         if (isascii(c))
10491                 exit(0);
10492         else
10493                 exit(1);
10494 }
10495 EOCP
10496 set isascii
10497 if eval $compile; then
10498         echo "isascii() found." >&4
10499         val="$define"
10500 else
10501         echo "isascii() NOT found." >&4
10502         val="$undef"
10503 fi
10504 set d_isascii
10505 eval $setvar
10506 $rm -f isascii*
10507
10508 : see if isnan exists
10509 set isnan d_isnan
10510 eval $inlibc
10511
10512 : see if isnanl exists
10513 set isnanl d_isnanl
10514 eval $inlibc
10515
10516 : see if killpg exists
10517 set killpg d_killpg
10518 eval $inlibc
10519
10520 : see if lchown exists
10521 echo " "
10522 $cat > try.c <<'EOCP'
10523 /* System header to define __stub macros and hopefully few prototypes,
10524     which can conflict with char lchown(); below.  */
10525 #include <assert.h>
10526 /* Override any gcc2 internal prototype to avoid an error.  */
10527 /* We use char because int might match the return type of a gcc2
10528    builtin and then its argument prototype would still apply.  */
10529 char lchown();
10530 int main() {
10531     /*  The GNU C library defines this for functions which it implements
10532         to always fail with ENOSYS.  Some functions are actually named
10533         something starting with __ and the normal name is an alias.  */
10534 #if defined (__stub_lchown) || defined (__stub___lchown)
10535 choke me
10536 #else
10537 lchown();
10538 #endif
10539 ; return 0; }
10540 EOCP
10541 set try
10542 if eval $compile; then
10543     $echo "lchown() found." >&4
10544     val="$define"
10545 else
10546     $echo "lchown() NOT found." >&4
10547     val="$undef"
10548 fi
10549 set d_lchown
10550 eval $setvar
10551
10552 : See if number of significant digits in a double precision number is known
10553 echo " "
10554 $cat >ldbl_dig.c <<EOM
10555 #$i_limits I_LIMITS
10556 #$i_float I_FLOAT
10557 #ifdef I_LIMITS
10558 #include <limits.h>
10559 #endif
10560 #ifdef I_FLOAT
10561 #include <float.h>
10562 #endif
10563 #ifdef LDBL_DIG
10564 printf("Contains LDBL_DIG");
10565 #endif
10566 EOM
10567 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
10568 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
10569         echo "LDBL_DIG found." >&4
10570         val="$define"
10571 else
10572         echo "LDBL_DIG NOT found." >&4
10573         val="$undef"
10574 fi
10575 $rm -f ldbl_dig.?
10576 set d_ldbl_dig
10577 eval $setvar
10578
10579 : see if link exists
10580 set link d_link
10581 eval $inlibc
10582
10583 : see if localeconv exists
10584 set localeconv d_locconv
10585 eval $inlibc
10586
10587 : see if lockf exists
10588 set lockf d_lockf
10589 eval $inlibc
10590
10591 : see if prototype for lseek is available
10592 echo " "
10593 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
10594 eval $hasproto
10595
10596 : see if lstat exists
10597 set lstat d_lstat
10598 eval $inlibc
10599
10600 : see if madvise exists
10601 set madvise d_madvise
10602 eval $inlibc
10603
10604 : see if mblen exists
10605 set mblen d_mblen
10606 eval $inlibc
10607
10608 : see if mbstowcs exists
10609 set mbstowcs d_mbstowcs
10610 eval $inlibc
10611
10612 : see if mbtowc exists
10613 set mbtowc d_mbtowc
10614 eval $inlibc
10615
10616 : see if memchr exists
10617 set memchr d_memchr
10618 eval $inlibc
10619
10620 : see if memcmp exists
10621 set memcmp d_memcmp
10622 eval $inlibc
10623
10624 : see if memcpy exists
10625 set memcpy d_memcpy
10626 eval $inlibc
10627
10628 : see if memmove exists
10629 set memmove d_memmove
10630 eval $inlibc
10631
10632 : see if memset exists
10633 set memset d_memset
10634 eval $inlibc
10635
10636 : see if mkdir exists
10637 set mkdir d_mkdir
10638 eval $inlibc
10639
10640 : see if mkdtemp exists
10641 set mkdtemp d_mkdtemp
10642 eval $inlibc
10643
10644 : see if mkfifo exists
10645 set mkfifo d_mkfifo
10646 eval $inlibc
10647
10648 : see if mkstemp exists
10649 set mkstemp d_mkstemp
10650 eval $inlibc
10651
10652 : see if mkstemps exists
10653 set mkstemps d_mkstemps
10654 eval $inlibc
10655
10656 : see if mktime exists
10657 set mktime d_mktime
10658 eval $inlibc
10659
10660 : see if this is a sys/mman.h system
10661 set sys/mman.h i_sysmman
10662 eval $inhdr
10663
10664 : see if mmap exists
10665 set mmap d_mmap
10666 eval $inlibc
10667 : see what shmat returns
10668 : default to something harmless
10669 mmaptype='void *'
10670 case "$i_sysmman$d_mmap" in
10671 "$define$define")
10672         $cat >mmap.c <<'END'
10673 #include <sys/mman.h>
10674 void *mmap();
10675 END
10676         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
10677                 mmaptype='void *'
10678         else
10679                 mmaptype='caddr_t'
10680         fi
10681         echo "and it returns ($mmaptype)." >&4
10682         ;;
10683 esac
10684
10685
10686
10687 : see if modfl exists
10688 set modfl d_modfl
10689 eval $inlibc
10690
10691 d_modfl_pow32_bug="$undef"
10692
10693 case "$d_longdbl$d_modfl" in
10694 $define$define)
10695         $cat <<EOM
10696 Checking to see whether your modfl() is okay for large values...
10697 EOM
10698 $cat >try.c <<EOCP
10699 #include <math.h> 
10700 #include <stdio.h>
10701 int main() {
10702     long double nv = 4294967303.15;
10703     long double v, w;
10704     v = modfl(nv, &w);         
10705 #ifdef __GLIBC__
10706     printf("glibc");
10707 #endif
10708     printf(" %"$sPRIfldbl" %"$sPRIfldbl" %"$sPRIfldbl"\n", nv, v, w);
10709     return 0;
10710 }
10711 EOCP
10712         case "$osname:$gccversion" in
10713         aix:)   saveccflags="$ccflags"
10714                 ccflags="$ccflags -qlongdouble" ;; # to avoid core dump
10715         esac
10716         set try
10717         if eval $compile; then
10718                 foo=`$run ./try`
10719                 case "$foo" in
10720                 *" 4294967303.150000 1.150000 4294967302.000000")
10721                         echo >&4 "Your modfl() is broken for large values."
10722                         d_modfl_pow32_bug="$define"
10723                         case "$foo" in
10724                         glibc)  echo >&4 "You should upgrade your glibc to at least 2.2.2 to get a fixed modfl()."
10725                         ;;
10726                         esac
10727                         ;;
10728                 *" 4294967303.150000 0.150000 4294967303.000000")
10729                         echo >&4 "Your modfl() seems okay for large values."
10730                         ;;
10731                 *)      echo >&4 "I don't understand your modfl() at all."
10732                         d_modfl="$undef"
10733                         ;;
10734                 esac
10735                 $rm -f try.* try core core.try.*
10736         else
10737                 echo "I cannot figure out whether your modfl() is okay, assuming it isn't."
10738                 d_modfl="$undef"
10739         fi
10740         case "$osname:$gccversion" in
10741         aix:)   $ccflags="saveccflags" ;; # restore
10742         esac
10743         ;;
10744 esac
10745
10746 : see if mprotect exists
10747 set mprotect d_mprotect
10748 eval $inlibc
10749
10750 : see if msgctl exists
10751 set msgctl d_msgctl
10752 eval $inlibc
10753
10754 : see if msgget exists
10755 set msgget d_msgget
10756 eval $inlibc
10757
10758 : see if msgsnd exists
10759 set msgsnd d_msgsnd
10760 eval $inlibc
10761
10762 : see if msgrcv exists
10763 set msgrcv d_msgrcv
10764 eval $inlibc
10765
10766 : see how much of the 'msg*(2)' library is present.
10767 h_msg=true
10768 echo " "
10769 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
10770 *"$undef"*) h_msg=false;;
10771 esac
10772 case "$osname" in
10773 freebsd)
10774     case "`ipcs 2>&1`" in
10775     "SVID messages"*"not configured"*)
10776         echo "Your $osname does not have the msg*(2) configured." >&4
10777         h_msg=false
10778         val="$undef"
10779         set msgctl d_msgctl
10780         eval $setvar
10781         set msgget d_msgget
10782         eval $setvar
10783         set msgsnd d_msgsnd
10784         eval $setvar
10785         set msgrcv d_msgrcv
10786         eval $setvar
10787         ;;
10788     esac
10789     ;;
10790 esac
10791 : we could also check for sys/ipc.h ...
10792 if $h_msg && $test `./findhdr sys/msg.h`; then
10793         echo "You have the full msg*(2) library." >&4
10794         val="$define"
10795 else
10796         echo "You don't have the full msg*(2) library." >&4
10797         val="$undef"
10798 fi
10799 set d_msg
10800 eval $setvar
10801
10802
10803 echo " "
10804 echo "Checking to see if your system supports struct msghdr..." >&4
10805 set d_msghdr_s msghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
10806 eval $hasstruct
10807 case "$d_msghdr_s" in
10808 "$define")      echo "Yes, it does."   ;;
10809 *)              echo "No, it doesn't." ;;
10810 esac
10811
10812
10813 : see if msync exists
10814 set msync d_msync
10815 eval $inlibc
10816
10817 : see if munmap exists
10818 set munmap d_munmap
10819 eval $inlibc
10820
10821 : see if nice exists
10822 set nice d_nice
10823 eval $inlibc
10824
10825 : check for length of character
10826 echo " "
10827 case "$charsize" in
10828 '')
10829         echo "Checking to see how big your characters are (hey, you never know)..." >&4
10830         $cat >try.c <<'EOCP'
10831 #include <stdio.h>
10832 int main()
10833 {
10834     printf("%d\n", (int)sizeof(char));
10835     exit(0);
10836 }
10837 EOCP
10838         set try
10839         if eval $compile_ok; then
10840                 dflt=`$run ./try`
10841         else
10842                 dflt='1'
10843                 echo "(I can't seem to compile the test program.  Guessing...)"
10844         fi
10845         ;;
10846 *)
10847         dflt="$charsize"
10848         ;;
10849 esac
10850 rp="What is the size of a character (in bytes)?"
10851 . ./myread
10852 charsize="$ans"
10853 $rm -f try.c try
10854
10855 : check for volatile keyword
10856 echo " "
10857 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10858 $cat >try.c <<'EOCP'
10859 int main()
10860 {
10861         typedef struct _goo_struct goo_struct;
10862         goo_struct * volatile goo = ((goo_struct *)0);
10863         struct _goo_struct {
10864                 long long_int;
10865                 int reg_int;
10866                 char char_var;
10867         };
10868         typedef unsigned short foo_t;
10869         char *volatile foo;
10870         volatile int bar;
10871         volatile foo_t blech;
10872         foo = foo;
10873 }
10874 EOCP
10875 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10876         val="$define"
10877         echo "Yup, it does."
10878 else
10879         val="$undef"
10880         echo "Nope, it doesn't."
10881 fi
10882 set d_volatile
10883 eval $setvar
10884 $rm -f try.*
10885
10886
10887 echo " "
10888 $echo "Choosing the C types to be used for Perl's internal types..." >&4
10889
10890 case "$use64bitint:$d_quad:$quadtype" in
10891 define:define:?*)
10892         ivtype="$quadtype"
10893         uvtype="$uquadtype"
10894         ivsize=8
10895         uvsize=8
10896         ;;
10897 *)      ivtype="long"
10898         uvtype="unsigned long"
10899         ivsize=$longsize
10900         uvsize=$longsize
10901         ;;
10902 esac
10903
10904 case "$uselongdouble:$d_longdbl" in
10905 define:define)
10906         nvtype="long double"
10907         nvsize=$longdblsize
10908         ;;
10909 *)      nvtype=double
10910         nvsize=$doublesize
10911         ;;
10912 esac
10913
10914 $echo "(IV will be "$ivtype", $ivsize bytes)"
10915 $echo "(UV will be "$uvtype", $uvsize bytes)"
10916 $echo "(NV will be "$nvtype", $nvsize bytes)"
10917
10918 $cat >try.c <<EOCP
10919 #$i_inttypes I_INTTYPES
10920 #ifdef I_INTTYPES
10921 #include <inttypes.h>
10922 #endif
10923 #include <stdio.h>
10924 int main() {
10925 #ifdef INT8
10926    int8_t i =  INT8_MAX;
10927   uint8_t u = UINT8_MAX;
10928   printf("int8_t\n");
10929 #endif
10930 #ifdef INT16
10931    int16_t i =  INT16_MAX;
10932   uint16_t i = UINT16_MAX;
10933   printf("int16_t\n");
10934 #endif
10935 #ifdef INT32
10936    int32_t i =  INT32_MAX;
10937   uint32_t u = UINT32_MAX;
10938   printf("int32_t\n");
10939 #endif
10940 }
10941 EOCP
10942
10943 case "$i8type" in
10944 '')     case "$charsize" in
10945         1)      i8type=char
10946                 u8type="unsigned char"
10947                 i8size=$charsize
10948                 u8size=$charsize
10949                 ;;
10950         esac
10951         ;;
10952 esac
10953 case "$i8type" in
10954 '')     set try -DINT8
10955         if eval $compile; then
10956                 case "`$run ./try`" in
10957                 int8_t) i8type=int8_t
10958                         u8type=uint8_t
10959                         i8size=1
10960                         u8size=1
10961                         ;;
10962                 esac
10963         fi
10964         ;;
10965 esac
10966 case "$i8type" in
10967 '')     if $test $charsize -ge 1; then
10968                 i8type=char
10969                 u8type="unsigned char"
10970                 i8size=$charsize
10971                 u8size=$charsize
10972         fi
10973         ;;
10974 esac
10975
10976 case "$i16type" in
10977 '')     case "$shortsize" in
10978         2)      i16type=short
10979                 u16type="unsigned short"
10980                 i16size=$shortsize
10981                 u16size=$shortsize
10982                 ;;
10983         esac
10984         ;;
10985 esac
10986 case "$i16type" in
10987 '')     set try -DINT16
10988         if eval $compile; then
10989                 case "`$run ./try`" in
10990                 int16_t)
10991                         i16type=int16_t
10992                         u16type=uint16_t
10993                         i16size=2
10994                         u16size=2
10995                         ;;
10996                 esac
10997         fi
10998         ;;
10999 esac
11000 case "$i16type" in
11001 '')     if $test $shortsize -ge 2; then
11002                 i16type=short
11003                 u16type="unsigned short"
11004                 i16size=$shortsize
11005                 u16size=$shortsize
11006         fi
11007         ;;
11008 esac
11009
11010 case "$i32type" in
11011 '')     case "$longsize" in
11012         4)      i32type=long
11013                 u32type="unsigned long"
11014                 i32size=$longsize
11015                 u32size=$longsize
11016                 ;;
11017         *)      case "$intsize" in
11018                 4)      i32type=int
11019                         u32type="unsigned int"
11020                         i32size=$intsize
11021                         u32size=$intsize
11022                         ;;
11023                 esac
11024                 ;;
11025         esac
11026         ;;
11027 esac
11028 case "$i32type" in
11029 '')     set try -DINT32
11030         if eval $compile; then
11031                 case "`$run ./try`" in
11032                 int32_t)
11033                         i32type=int32_t
11034                         u32type=uint32_t
11035                         i32size=4
11036                         u32size=4
11037                         ;;
11038                 esac
11039         fi
11040         ;;
11041 esac
11042 case "$i32type" in
11043 '')     if $test $intsize -ge 4; then
11044                 i32type=int
11045                 u32type="unsigned int"
11046                 i32size=$intsize
11047                 u32size=$intsize
11048         fi
11049         ;;
11050 esac
11051
11052 case "$i64type" in
11053 '')     case "$d_quad:$quadtype" in
11054         define:?*)
11055                 i64type="$quadtype"
11056                 u64type="$uquadtype"
11057                 i64size=8
11058                 u64size=8
11059                 ;;
11060         esac
11061         ;;
11062 esac
11063
11064 $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
11065 : volatile so that the compiler has to store it out to memory.
11066 if test X"$d_volatile" = X"$define"; then
11067         volatile=volatile
11068 fi
11069 $cat <<EOP >try.c
11070 #include <stdio.h>
11071 #include <sys/types.h>
11072 #include <signal.h>
11073 #ifdef SIGFPE
11074 $volatile int bletched = 0;
11075 $signal_t blech(s) int s; { bletched = 1; }
11076 #endif
11077 int main() {
11078     $uvtype u = 0;
11079     $nvtype d;
11080     int     n = 8 * $uvsize;
11081     int     i;
11082 #ifdef SIGFPE
11083     signal(SIGFPE, blech);
11084 #endif
11085
11086     for (i = 0; i < n; i++) {
11087       u = u << 1 | ($uvtype)1;
11088       d = ($nvtype)u;
11089       if (($uvtype)d != u)
11090         break;
11091       if (d <= 0)
11092         break;
11093       d = ($nvtype)(u - 1);
11094       if (($uvtype)d != (u - 1))
11095         break;
11096 #ifdef SIGFPE
11097       if (bletched) {
11098         break;
11099 #endif
11100       } 
11101     }
11102     printf("%d\n", ((i == n) ? -n : i));
11103     exit(0);
11104 }
11105 EOP
11106 set try
11107
11108 d_nv_preserves_uv="$undef"
11109 if eval $compile; then
11110         d_nv_preserves_uv_bits="`$run ./try`"
11111 fi
11112 case "$d_nv_preserves_uv_bits" in
11113 \-[1-9]*)       
11114         d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
11115         $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11116         d_nv_preserves_uv="$define"
11117         ;;
11118 [1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11119         d_nv_preserves_uv="$undef" ;;
11120 *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
11121         d_nv_preserves_uv_bits="$undef" ;;
11122 esac
11123
11124 $rm -f try.* try
11125
11126
11127 : check for off64_t
11128 echo " "
11129 echo "Checking to see if you have off64_t..." >&4
11130 $cat >try.c <<EOCP
11131 #include <sys/types.h>
11132 #include <unistd.h>
11133 int main() { off64_t x = 7; }
11134 EOCP
11135 set try
11136 if eval $compile; then
11137         val="$define"
11138         echo "You have off64_t."
11139 else
11140         val="$undef"
11141         echo "You do not have off64_t."
11142         case "$lseeksize" in
11143         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
11144         esac
11145 fi
11146 $rm -f try.* try
11147 set d_off64_t
11148 eval $setvar
11149
11150 : see if POSIX threads are available
11151 set pthread.h i_pthread
11152 eval $inhdr
11153
11154
11155
11156
11157 : how to create joinable pthreads
11158 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
11159         echo " "
11160         echo "Checking what constant to use for creating joinable pthreads..." >&4 
11161         $cat >try.c <<'EOCP'
11162 #include <pthread.h>
11163 int main() {
11164     int detachstate = JOINABLE;
11165 }
11166 EOCP
11167         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
11168         if eval $compile; then
11169                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
11170                 val="$undef" # Yes, undef.
11171                 set d_old_pthread_create_joinable
11172                 eval $setvar
11173                 val=""
11174                 set old_pthread_create_joinable
11175                 eval $setvar
11176         else
11177                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
11178                 if eval $compile; then
11179                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
11180                         val="$define"
11181                         set d_old_pthread_create_joinable
11182                         eval $setvar
11183                         val=PTHREAD_CREATE_UNDETACHED
11184                         set old_pthread_create_joinable
11185                         eval $setvar
11186                 else            
11187                         set try -DJOINABLE=__UNDETACHED
11188                         if eval $compile; then
11189                                 echo "You seem to use __UNDETACHED." >&4
11190                                 val="$define"
11191                                 set d_old_pthread_create_joinable
11192                                 eval $setvar
11193                                 val=__UNDETACHED
11194                                 set old_pthread_create_joinable
11195                                 eval $setvar
11196                         else
11197                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
11198                                 val="$define"
11199                                 set d_old_pthread_create_joinable
11200                                 eval $setvar
11201                                 val=0
11202                                 set old_pthread_create_joinable
11203                                 eval $setvar
11204                         fi
11205                 fi
11206         fi
11207         $rm -f try try.*
11208 else
11209     d_old_pthread_create_joinable="$undef"
11210     old_pthread_create_joinable=""
11211 fi
11212
11213 : see if pause exists
11214 set pause d_pause
11215 eval $inlibc
11216
11217 : see if pipe exists
11218 set pipe d_pipe
11219 eval $inlibc
11220
11221 : see if poll exists
11222 set poll d_poll
11223 eval $inlibc
11224
11225
11226 : see whether the various POSIXish _yields exist
11227 $cat >try.c <<EOP
11228 #include <pthread.h>
11229 #include <stdio.h>
11230 int main() {
11231 #ifdef SCHED_YIELD
11232         sched_yield();
11233 #else
11234 #ifdef PTHREAD_YIELD
11235         pthread_yield();
11236 #else
11237 #ifdef PTHREAD_YIELD_NULL
11238         pthread_yield(NULL);
11239 #endif
11240 #endif
11241 #endif
11242 }
11243 EOP
11244 : see if sched_yield exists
11245 set try -DSCHED_YIELD
11246 if eval $compile; then
11247     val="$define"
11248     sched_yield='sched_yield()'
11249 else
11250     val="$undef"
11251 fi
11252 case "$usethreads" in
11253 $define)
11254         case "$val" in
11255         $define) echo 'sched_yield() found.' >&4        ;;
11256         *)       echo 'sched_yield() NOT found.' >&4    ;;
11257         esac
11258 esac
11259 set d_sched_yield
11260 eval $setvar
11261
11262 : see if pthread_yield exists
11263 set try -DPTHREAD_YIELD
11264 if eval $compile; then
11265     val="$define"
11266     case "$sched_yield" in
11267     '') sched_yield='pthread_yield()' ;;
11268     esac
11269 else
11270     set try -DPTHREAD_YIELD_NULL
11271     if eval $compile; then
11272         val="$define"
11273         case "$sched_yield" in
11274         '') sched_yield='pthread_yield(NULL)' ;;
11275         esac
11276     else
11277         val="$undef"
11278     fi
11279 fi
11280 case "$usethreads" in
11281 $define)
11282         case "$val" in
11283         $define) echo 'pthread_yield() found.' >&4      ;;
11284         *)       echo 'pthread_yield() NOT found.' >&4  ;;
11285         esac
11286         ;;
11287 esac
11288 set d_pthread_yield
11289 eval $setvar
11290
11291 case "$sched_yield" in
11292 '') sched_yield=undef ;;
11293 esac
11294
11295 $rm -f try try.*
11296
11297 : see if this is a pwd.h system
11298 set pwd.h i_pwd
11299 eval $inhdr
11300
11301 case "$i_pwd" in
11302 $define)
11303         xxx=`./findhdr pwd.h`
11304         $cppstdin $cppflags $cppminus < $xxx >$$.h
11305
11306         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
11307                 val="$define"
11308         else
11309                 val="$undef"
11310         fi
11311         set d_pwquota
11312         eval $setvar
11313
11314         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
11315                 val="$define"
11316         else
11317                 val="$undef"
11318         fi
11319         set d_pwage
11320         eval $setvar
11321
11322         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
11323                 val="$define"
11324         else
11325                 val="$undef"
11326         fi
11327         set d_pwchange
11328         eval $setvar
11329
11330         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
11331                 val="$define"
11332         else
11333                 val="$undef"
11334         fi
11335         set d_pwclass
11336         eval $setvar
11337
11338         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
11339                 val="$define"
11340         else
11341                 val="$undef"
11342         fi
11343         set d_pwexpire
11344         eval $setvar
11345
11346         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
11347                 val="$define"
11348         else
11349                 val="$undef"
11350         fi
11351         set d_pwcomment
11352         eval $setvar
11353
11354         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
11355                 val="$define"
11356         else
11357                 val="$undef"
11358         fi
11359         set d_pwgecos
11360         eval $setvar
11361
11362         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
11363                 val="$define"
11364         else
11365                 val="$undef"
11366         fi
11367         set d_pwpasswd
11368         eval $setvar
11369
11370         $rm -f $$.h
11371         ;;
11372 *)
11373         val="$undef"; 
11374         set d_pwquota; eval $setvar
11375         set d_pwage; eval $setvar
11376         set d_pwchange; eval $setvar
11377         set d_pwclass; eval $setvar
11378         set d_pwexpire; eval $setvar
11379         set d_pwcomment; eval $setvar
11380         set d_pwgecos; eval $setvar
11381         set d_pwpasswd; eval $setvar
11382         ;;
11383 esac
11384
11385 : see if readdir and friends exist
11386 set readdir d_readdir
11387 eval $inlibc
11388 set seekdir d_seekdir
11389 eval $inlibc
11390 set telldir d_telldir
11391 eval $inlibc
11392 set rewinddir d_rewinddir
11393 eval $inlibc
11394
11395 : see if readlink exists
11396 set readlink d_readlink
11397 eval $inlibc
11398
11399 : see if readv exists
11400 set readv d_readv
11401 eval $inlibc
11402
11403 : see if realpath exists
11404 set realpath d_realpath
11405 eval $inlibc
11406
11407 : see if recvmsg exists
11408 set recvmsg d_recvmsg
11409 eval $inlibc
11410
11411 : see if rename exists
11412 set rename d_rename
11413 eval $inlibc
11414
11415 : see if rmdir exists
11416 set rmdir d_rmdir
11417 eval $inlibc
11418
11419 : see if memory.h is available.
11420 val=''
11421 set memory.h val
11422 eval $inhdr
11423
11424 : See if it conflicts with string.h
11425 case "$val" in
11426 $define)
11427         case "$strings" in
11428         '') ;;
11429         *)
11430                 $cppstdin $cppflags $cppminus < $strings > mem.h
11431                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
11432                         echo " "
11433                         echo "We won't be including <memory.h>."
11434                         val="$undef"
11435                 fi
11436                 $rm -f mem.h
11437                 ;;
11438         esac
11439 esac
11440 set i_memory
11441 eval $setvar
11442
11443 : can bcopy handle overlapping blocks?
11444 val="$undef"
11445 case "$d_bcopy" in
11446 "$define")
11447         echo " "
11448         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
11449         $cat >try.c <<EOCP
11450 #$i_memory I_MEMORY
11451 #$i_stdlib I_STDLIB
11452 #$i_string I_STRING
11453 #$i_unistd I_UNISTD
11454 EOCP
11455         $cat >>try.c <<'EOCP'
11456 #include <stdio.h>
11457 #ifdef I_MEMORY
11458 #  include <memory.h>
11459 #endif
11460 #ifdef I_STDLIB
11461 #  include <stdlib.h>
11462 #endif
11463 #ifdef I_STRING
11464 #  include <string.h>
11465 #else
11466 #  include <strings.h>
11467 #endif
11468 #ifdef I_UNISTD
11469 #  include <unistd.h>  /* Needed for NetBSD */
11470 #endif
11471 int main()
11472 {
11473 char buf[128], abc[128];
11474 char *b;
11475 int len;
11476 int off;
11477 int align;
11478
11479 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
11480
11481 for (align = 7; align >= 0; align--) {
11482         for (len = 36; len; len--) {
11483                 b = buf+align;
11484                 bcopy(abc, b, len);
11485                 for (off = 1; off <= len; off++) {
11486                         bcopy(b, b+off, len);
11487                         bcopy(b+off, b, len);
11488                         if (bcmp(b, abc, len))
11489                                 exit(1);
11490                 }
11491         }
11492 }
11493 exit(0);
11494 }
11495 EOCP
11496         set try
11497         if eval $compile_ok; then
11498                 if $run ./try 2>/dev/null; then
11499                         echo "Yes, it can."
11500                         val="$define"
11501                 else
11502                         echo "It can't, sorry."
11503                         case "$d_memmove" in
11504                         "$define") echo "But that's Ok since you have memmove()." ;;
11505                         esac
11506                 fi
11507         else
11508                 echo "(I can't compile the test program, so we'll assume not...)"
11509                 case "$d_memmove" in
11510                 "$define") echo "But that's Ok since you have memmove()." ;;
11511                 esac
11512         fi
11513         ;;
11514 esac
11515 $rm -f try.* try core
11516 set d_safebcpy
11517 eval $setvar
11518
11519 : can memcpy handle overlapping blocks?
11520 val="$undef"
11521 case "$d_memcpy" in
11522 "$define")
11523         echo " "
11524         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
11525         $cat >try.c <<EOCP
11526 #$i_memory I_MEMORY
11527 #$i_stdlib I_STDLIB
11528 #$i_string I_STRING
11529 #$i_unistd I_UNISTD
11530 EOCP
11531         $cat >>try.c <<'EOCP'
11532 #include <stdio.h>
11533 #ifdef I_MEMORY
11534 #  include <memory.h>
11535 #endif
11536 #ifdef I_STDLIB
11537 #  include <stdlib.h>
11538 #endif
11539 #ifdef I_STRING
11540 #  include <string.h>
11541 #else
11542 #  include <strings.h>
11543 #endif
11544 #ifdef I_UNISTD
11545 #  include <unistd.h>  /* Needed for NetBSD */
11546 #endif
11547 int main()
11548 {
11549 char buf[128], abc[128];
11550 char *b;
11551 int len;
11552 int off;
11553 int align;
11554
11555 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11556    try to store the string in read-only memory. */
11557 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
11558
11559 for (align = 7; align >= 0; align--) {
11560         for (len = 36; len; len--) {
11561                 b = buf+align;
11562                 memcpy(b, abc, len);
11563                 for (off = 1; off <= len; off++) {
11564                         memcpy(b+off, b, len);
11565                         memcpy(b, b+off, len);
11566                         if (memcmp(b, abc, len))
11567                                 exit(1);
11568                 }
11569         }
11570 }
11571 exit(0);
11572 }
11573 EOCP
11574         set try
11575         if eval $compile_ok; then
11576                 if $run ./try 2>/dev/null; then
11577                         echo "Yes, it can."
11578                         val="$define"
11579                 else
11580                         echo "It can't, sorry."
11581                         case "$d_memmove" in
11582                         "$define") echo "But that's Ok since you have memmove()." ;;
11583                         esac
11584                 fi
11585         else
11586                 echo "(I can't compile the test program, so we'll assume not...)"
11587                 case "$d_memmove" in
11588                 "$define") echo "But that's Ok since you have memmove()." ;;
11589                 esac
11590         fi
11591         ;;
11592 esac
11593 $rm -f try.* try core
11594 set d_safemcpy
11595 eval $setvar
11596
11597 : can memcmp be trusted to compare relative magnitude?
11598 val="$undef"
11599 case "$d_memcmp" in
11600 "$define")
11601         echo " "
11602         echo "Checking if your memcmp() can compare relative magnitude..." >&4
11603         $cat >try.c <<EOCP
11604 #$i_memory I_MEMORY
11605 #$i_stdlib I_STDLIB
11606 #$i_string I_STRING
11607 #$i_unistd I_UNISTD
11608 EOCP
11609         $cat >>try.c <<'EOCP'
11610 #include <stdio.h>
11611 #ifdef I_MEMORY
11612 #  include <memory.h>
11613 #endif
11614 #ifdef I_STDLIB
11615 #  include <stdlib.h>
11616 #endif
11617 #ifdef I_STRING
11618 #  include <string.h>
11619 #else
11620 #  include <strings.h>
11621 #endif
11622 #ifdef I_UNISTD
11623 #  include <unistd.h>  /* Needed for NetBSD */
11624 #endif
11625 int main()
11626 {
11627 char a = -1;
11628 char b = 0;
11629 if ((a < b) && memcmp(&a, &b, 1) < 0)
11630         exit(1);
11631 exit(0);
11632 }
11633 EOCP
11634         set try
11635         if eval $compile_ok; then
11636                 if $run ./try 2>/dev/null; then
11637                         echo "Yes, it can."
11638                         val="$define"
11639                 else
11640                         echo "No, it can't (it uses signed chars)."
11641                 fi
11642         else
11643                 echo "(I can't compile the test program, so we'll assume not...)"
11644         fi
11645         ;;
11646 esac
11647 $rm -f try.* try core
11648 set d_sanemcmp
11649 eval $setvar
11650
11651 : see if prototype for sbrk is available
11652 echo " "
11653 set d_sbrkproto sbrk $i_unistd unistd.h
11654 eval $hasproto
11655
11656 : see if select exists
11657 set select d_select
11658 eval $inlibc
11659
11660 : see if semctl exists
11661 set semctl d_semctl
11662 eval $inlibc
11663
11664 : see if semget exists
11665 set semget d_semget
11666 eval $inlibc
11667
11668 : see if semop exists
11669 set semop d_semop
11670 eval $inlibc
11671
11672 : see how much of the 'sem*(2)' library is present.
11673 h_sem=true
11674 echo " "
11675 case "$d_semctl$d_semget$d_semop" in
11676 *"$undef"*) h_sem=false;;
11677 esac
11678 case "$osname" in
11679 freebsd)
11680     case "`ipcs 2>&1`" in
11681     "SVID messages"*"not configured"*)
11682         echo "Your $osname does not have the sem*(2) configured." >&4
11683         h_sem=false
11684         val="$undef"
11685         set semctl d_semctl
11686         eval $setvar
11687         set semget d_semget
11688         eval $setvar
11689         set semop d_semop
11690         eval $setvar
11691         ;;
11692     esac
11693     ;;
11694 esac
11695 : we could also check for sys/ipc.h ...
11696 if $h_sem && $test `./findhdr sys/sem.h`; then
11697         echo "You have the full sem*(2) library." >&4
11698         val="$define"
11699 else
11700         echo "You don't have the full sem*(2) library." >&4
11701         val="$undef"
11702 fi
11703 set d_sem
11704 eval $setvar
11705
11706 : see whether sys/sem.h defines union semun
11707 echo " "
11708 $cat > try.c <<'END'
11709 #include <sys/types.h>
11710 #include <sys/ipc.h>
11711 #include <sys/sem.h>
11712 int main () { union semun semun; semun.buf = 0; }
11713 END
11714 set try
11715 if eval $compile; then
11716     echo "You have union semun in <sys/sem.h>." >&4
11717     val="$define"
11718 else
11719     echo "You do not have union semun in <sys/sem.h>." >&4
11720     val="$undef"
11721 fi
11722 $rm -f try try.c try.h
11723 set d_union_semun
11724 eval $setvar
11725
11726 : see how to do semctl IPC_STAT
11727 case "$d_sem" in
11728 $define)
11729     : see whether semctl IPC_STAT can use union semun
11730     echo " "
11731     $cat > try.h <<END
11732 #ifndef S_IRUSR
11733 #   ifdef S_IREAD
11734 #       define S_IRUSR S_IREAD
11735 #       define S_IWUSR S_IWRITE
11736 #       define S_IXUSR S_IEXEC
11737 #   else
11738 #       define S_IRUSR 0400
11739 #       define S_IWUSR 0200
11740 #       define S_IXUSR 0100
11741 #   endif
11742 #   define S_IRGRP (S_IRUSR>>3)
11743 #   define S_IWGRP (S_IWUSR>>3)
11744 #   define S_IXGRP (S_IXUSR>>3)
11745 #   define S_IROTH (S_IRUSR>>6)
11746 #   define S_IWOTH (S_IWUSR>>6)
11747 #   define S_IXOTH (S_IXUSR>>6)
11748 #endif
11749 #ifndef S_IRWXU
11750 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
11751 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
11752 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
11753 #endif
11754 END
11755
11756     $cat > try.c <<END
11757 #include <sys/types.h>
11758 #include <sys/ipc.h>
11759 #include <sys/sem.h>
11760 #include <sys/stat.h>
11761 #include <stdio.h>
11762 #include <errno.h>
11763 #include "try.h"
11764 #ifndef errno
11765 extern int errno;
11766 #endif
11767 #$d_union_semun HAS_UNION_SEMUN
11768 int main() {
11769     union semun
11770 #ifndef HAS_UNION_SEMUN
11771     {
11772         int val;
11773         struct semid_ds *buf;
11774         unsigned short *array;
11775     }
11776 #endif
11777     arg;
11778     int sem, st;
11779
11780 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
11781     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11782     if (sem > -1) {
11783         struct semid_ds argbuf;
11784         arg.buf = &argbuf;
11785 #       ifdef IPC_STAT
11786         st = semctl(sem, 0, IPC_STAT, arg);
11787         if (st == 0)
11788             printf("semun\n");
11789         else
11790 #       endif /* IPC_STAT */
11791             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11792 #       ifdef IPC_RMID
11793         if (semctl(sem, 0, IPC_RMID, arg) != 0)
11794 #       endif /* IPC_RMID */
11795             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11796     } else
11797 #endif /* IPC_PRIVATE && ... */
11798         printf("semget failed: errno = %d\n", errno);
11799   return 0;
11800 }
11801 END
11802     val="$undef"
11803     set try
11804     if eval $compile; then
11805         xxx=`$run ./try`
11806         case "$xxx" in
11807         semun) val="$define" ;;
11808         esac
11809     fi
11810     $rm -f try try.c
11811     set d_semctl_semun
11812     eval $setvar
11813     case "$d_semctl_semun" in
11814     $define)
11815         echo "You can use union semun for semctl IPC_STAT." >&4
11816         also='also'
11817         ;;
11818     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
11819         also=''
11820         ;;
11821     esac
11822
11823     : see whether semctl IPC_STAT can use struct semid_ds pointer
11824     $cat > try.c <<'END'
11825 #include <sys/types.h>
11826 #include <sys/ipc.h>
11827 #include <sys/sem.h>
11828 #include <sys/stat.h>
11829 #include "try.h"
11830 #include <stdio.h>
11831 #include <errno.h>
11832 #ifndef errno
11833 extern int errno;
11834 #endif
11835 int main() {
11836     struct semid_ds arg;
11837     int sem, st;
11838
11839 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
11840     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11841     if (sem > -1) {
11842 #       ifdef IPC_STAT
11843         st = semctl(sem, 0, IPC_STAT, &arg);
11844         if (st == 0)
11845             printf("semid_ds\n");
11846         else
11847 #       endif /* IPC_STAT */
11848             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11849 #       ifdef IPC_RMID
11850         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
11851 #       endif /* IPC_RMID */
11852             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11853     } else
11854 #endif /* IPC_PRIVATE && ... */
11855         printf("semget failed: errno = %d\n", errno);
11856
11857     return 0;
11858 }
11859 END
11860     val="$undef"
11861     set try
11862     if eval $compile; then
11863         xxx=`$run ./try`
11864         case "$xxx" in
11865         semid_ds) val="$define" ;;
11866         esac
11867     fi
11868     $rm -f try try.c
11869     set d_semctl_semid_ds
11870     eval $setvar
11871     case "$d_semctl_semid_ds" in
11872     $define)
11873         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
11874         ;;
11875     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
11876         ;;
11877     esac
11878     $rm -f try.h
11879     ;;
11880 *)  val="$undef"
11881
11882     # We do not have the full sem*(2) library, so assume we can not
11883     # use either.
11884
11885     set d_semctl_semun
11886     eval $setvar
11887
11888     set d_semctl_semid_ds
11889     eval $setvar
11890     ;;
11891 esac
11892
11893 : see if sendmsg exists
11894 set sendmsg d_sendmsg
11895 eval $inlibc
11896
11897 : see if setegid exists
11898 set setegid d_setegid
11899 eval $inlibc
11900
11901 : see if seteuid exists
11902 set seteuid d_seteuid
11903 eval $inlibc
11904
11905 : see if setgrent exists
11906 set setgrent d_setgrent
11907 eval $inlibc
11908
11909 : see if sethostent exists
11910 set sethostent d_sethent
11911 eval $inlibc
11912
11913 : see if setitimer exists
11914 set setitimer d_setitimer
11915 eval $inlibc
11916
11917 : see if setlinebuf exists
11918 set setlinebuf d_setlinebuf
11919 eval $inlibc
11920
11921 : see if setlocale exists
11922 set setlocale d_setlocale
11923 eval $inlibc
11924
11925 : see if setnetent exists
11926 set setnetent d_setnent
11927 eval $inlibc
11928
11929 : see if setprotoent exists
11930 set setprotoent d_setpent
11931 eval $inlibc
11932
11933 : see if setpgid exists
11934 set setpgid d_setpgid
11935 eval $inlibc
11936
11937 : see if setpgrp2 exists
11938 set setpgrp2 d_setpgrp2
11939 eval $inlibc
11940
11941 : see if setpriority exists
11942 set setpriority d_setprior
11943 eval $inlibc
11944
11945 : see if setproctitle exists
11946 set setproctitle d_setproctitle
11947 eval $inlibc
11948
11949 : see if setpwent exists
11950 set setpwent d_setpwent
11951 eval $inlibc
11952
11953 : see if setregid exists
11954 set setregid d_setregid
11955 eval $inlibc
11956 set setresgid d_setresgid
11957 eval $inlibc
11958
11959 : see if setreuid exists
11960 set setreuid d_setreuid
11961 eval $inlibc
11962 set setresuid d_setresuid
11963 eval $inlibc
11964
11965 : see if setrgid exists
11966 set setrgid d_setrgid
11967 eval $inlibc
11968
11969 : see if setruid exists
11970 set setruid d_setruid
11971 eval $inlibc
11972
11973 : see if setservent exists
11974 set setservent d_setsent
11975 eval $inlibc
11976
11977 : see if setsid exists
11978 set setsid d_setsid
11979 eval $inlibc
11980
11981 : see if setvbuf exists
11982 set setvbuf d_setvbuf
11983 eval $inlibc
11984
11985 : see if sfio.h is available
11986 set sfio.h i_sfio
11987 eval $inhdr
11988
11989
11990 : see if sfio library is available
11991 case "$i_sfio" in
11992 $define)
11993         val=''
11994         set sfreserve val
11995         eval $inlibc
11996         ;;
11997 *)
11998         val="$undef"
11999         ;;
12000 esac
12001 : Ok, but do we want to use it.
12002 case "$val" in
12003 $define)
12004         case "$usesfio" in
12005         true|$define|[yY]*) dflt='y';;
12006         *) dflt='n';;
12007         esac
12008         echo "$package can use the sfio library, but it is experimental."
12009         case "$useperlio" in
12010         "$undef")
12011             echo "For sfio also the PerlIO abstraction layer is needed."
12012             echo "Earlier you said you wouldn't want that."
12013             ;;
12014         esac
12015         rp="You seem to have sfio available, do you want to try using it?"
12016         . ./myread
12017         case "$ans" in
12018         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
12019                 useperlio="$define"
12020                 val="$define"
12021                 ;;
12022         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
12023                 val="$undef"
12024                 ;;
12025         esac
12026         ;;
12027 *)      case "$usesfio" in
12028         true|$define|[yY]*)
12029                 echo "Sorry, cannot find sfio on this machine." >&4
12030                 echo "Ignoring your setting of usesfio=$usesfio." >&4
12031                 val="$undef"
12032                 ;;
12033         esac
12034         ;;
12035 esac
12036 set d_sfio
12037 eval $setvar
12038 case "$d_sfio" in
12039 $define) usesfio='true';;
12040 *) usesfio='false';;
12041 esac
12042 case "$d_sfio" in
12043 $define) ;;
12044 *)      : Remove sfio from list of libraries to use
12045         set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
12046         shift
12047         libs="$*"
12048         echo "libs = $libs" >&4
12049 ;;
12050 esac
12051
12052
12053 : see if shmctl exists
12054 set shmctl d_shmctl
12055 eval $inlibc
12056
12057 : see if shmget exists
12058 set shmget d_shmget
12059 eval $inlibc
12060
12061 : see if shmat exists
12062 set shmat d_shmat
12063 eval $inlibc
12064 : see what shmat returns
12065 case "$d_shmat" in
12066 "$define")
12067         $cat >shmat.c <<'END'
12068 #include <sys/shm.h>
12069 void *shmat();
12070 END
12071         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
12072                 shmattype='void *'
12073         else
12074                 shmattype='char *'
12075         fi
12076         echo "and it returns ($shmattype)." >&4
12077         : see if a prototype for shmat is available
12078         xxx=`./findhdr sys/shm.h`
12079         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
12080         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
12081                 val="$define"
12082         else
12083                 val="$undef"
12084         fi
12085         $rm -f shmat.[co]
12086         ;;
12087 *)
12088         val="$undef"
12089         ;;
12090 esac
12091 set d_shmatprototype
12092 eval $setvar
12093
12094 : see if shmdt exists
12095 set shmdt d_shmdt
12096 eval $inlibc
12097
12098 : see how much of the 'shm*(2)' library is present.
12099 h_shm=true
12100 echo " "
12101 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
12102 *"$undef"*) h_shm=false;;
12103 esac
12104 case "$osname" in
12105 freebsd)
12106     case "`ipcs 2>&1`" in
12107     "SVID shared memory"*"not configured"*)
12108         echo "Your $osname does not have the shm*(2) configured." >&4
12109         h_shm=false
12110         val="$undef"
12111         set shmctl d_shmctl
12112         evat $setvar
12113         set shmget d_shmget
12114         evat $setvar
12115         set shmat d_shmat
12116         evat $setvar
12117         set shmdt d_shmdt
12118         evat $setvar
12119         ;;
12120     esac
12121     ;;
12122 esac
12123 : we could also check for sys/ipc.h ...
12124 if $h_shm && $test `./findhdr sys/shm.h`; then
12125         echo "You have the full shm*(2) library." >&4
12126         val="$define"
12127 else
12128         echo "You don't have the full shm*(2) library." >&4
12129         val="$undef"
12130 fi
12131 set d_shm
12132 eval $setvar
12133
12134 echo " "
12135 : see if we have sigaction
12136 if set sigaction val -f d_sigaction; eval $csym; $val; then
12137         echo 'sigaction() found.' >&4
12138         $cat > try.c <<'EOP'
12139 #include <stdio.h>
12140 #include <sys/types.h>
12141 #include <signal.h>
12142 int main()
12143 {
12144     struct sigaction act, oact;
12145     act.sa_flags = 0;
12146     oact.sa_handler = 0;
12147     /* so that act and oact are used */
12148     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
12149 }
12150 EOP
12151         set try
12152         if eval $compile_ok; then
12153                 val="$define"
12154         else
12155                 echo "But you don't seem to have a useable struct sigaction." >&4
12156                 val="$undef"
12157         fi
12158 else
12159         echo 'sigaction NOT found.' >&4
12160         val="$undef"
12161 fi
12162 set d_sigaction; eval $setvar
12163 $rm -f try try$_o try.c
12164
12165 : see if sigprocmask exists
12166 set sigprocmask d_sigprocmask
12167 eval $inlibc
12168
12169 : see if sigsetjmp exists
12170 echo " "
12171 case "$d_sigsetjmp" in
12172 '')
12173         $cat >try.c <<'EOP'
12174 #include <setjmp.h>
12175 sigjmp_buf env;
12176 int set = 1;
12177 int main()
12178 {
12179         if (sigsetjmp(env,1))
12180                 exit(set);
12181         set = 0;
12182         siglongjmp(env, 1);
12183         exit(1);
12184 }
12185 EOP
12186         set try
12187         if eval $compile; then
12188                 if $run ./try >/dev/null 2>&1; then
12189                         echo "POSIX sigsetjmp found." >&4
12190                         val="$define"
12191                 else
12192                         $cat >&4 <<EOM
12193 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
12194 I'll ignore them.
12195 EOM
12196                         val="$undef"
12197                 fi
12198         else
12199                 echo "sigsetjmp not found." >&4
12200                 val="$undef"
12201         fi
12202         ;;
12203 *) val="$d_sigsetjmp"
12204         case "$d_sigsetjmp" in
12205         $define) echo "POSIX sigsetjmp found." >&4;;
12206         $undef) echo "sigsetjmp not found." >&4;;
12207         esac
12208         ;;
12209 esac
12210 set d_sigsetjmp
12211 eval $setvar
12212 $rm -f try.c try
12213
12214 : see if sockatmark exists
12215 set sockatmark d_sockatmark
12216 eval $inlibc
12217
12218 : see if prototype for sockatmark is available
12219 echo " "
12220 set d_sockatmarkproto sockatmark $d_socket sys/socket.h
12221 eval $hasproto
12222
12223 : see if socks5_init exists
12224 set socks5_init d_socks5_init
12225 eval $inlibc
12226
12227 : see if prototype for setresgid is available
12228 echo " "
12229 set d_sresgproto setresgid $i_unistd unistd.h
12230 eval $hasproto
12231
12232 : see if prototype for setresuid is available
12233 echo " "
12234 set d_sresuproto setresuid $i_unistd unistd.h
12235 eval $hasproto
12236
12237 : see if sys/stat.h is available
12238 set sys/stat.h i_sysstat
12239 eval $inhdr
12240
12241
12242 : see if stat knows about block sizes
12243 echo " "
12244 echo "Checking to see if your struct stat has st_blocks field..." >&4
12245 set d_statblks stat st_blocks $i_sysstat sys/stat.h
12246 eval $hasfield
12247
12248
12249 : see if this is a sys/vfs.h system
12250 set sys/vfs.h i_sysvfs
12251 eval $inhdr
12252
12253
12254 : see if this is a sys/statfs.h system
12255 set sys/statfs.h i_sysstatfs
12256 eval $inhdr
12257
12258
12259 echo " "
12260 echo "Checking to see if your system supports struct statfs..." >&4
12261 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
12262 eval $hasstruct
12263 case "$d_statfs_s" in
12264 "$define")      echo "Yes, it does."   ;;
12265 *)              echo "No, it doesn't." ;;
12266 esac
12267
12268
12269
12270 : see if struct statfs knows about f_flags
12271 case "$d_statfs_s" in
12272 define) 
12273         echo " "
12274         echo "Checking to see if your struct statfs has f_flags field..." >&4
12275         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
12276         eval $hasfield
12277         ;;
12278 *)      val="$undef"
12279         set d_statfs_f_flags
12280         eval $setvar
12281         ;;
12282 esac
12283 case "$d_statfs_f_flags" in
12284 "$define")      echo "Yes, it does."   ;;
12285 *)              echo "No, it doesn't." ;;
12286 esac
12287
12288 : see if _ptr and _cnt from stdio act std
12289 echo " "
12290
12291 if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12292         echo "(Looks like you have stdio.h from BSD.)"
12293         case "$stdio_ptr" in
12294         '') stdio_ptr='((fp)->_p)'
12295                 ptr_lval=$define
12296                 ;;
12297         *)      ptr_lval=$d_stdio_ptr_lval;;
12298         esac
12299         case "$stdio_cnt" in
12300         '') stdio_cnt='((fp)->_r)'
12301                 cnt_lval=$define
12302                 ;;
12303         *)      cnt_lval=$d_stdio_cnt_lval;;
12304         esac
12305         case "$stdio_base" in
12306         '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
12307         esac
12308         case "$stdio_bufsiz" in
12309         '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
12310         esac
12311 elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
12312         echo "(Looks like you have stdio.h from Linux.)"
12313         case "$stdio_ptr" in
12314         '') stdio_ptr='((fp)->_IO_read_ptr)'
12315                 ptr_lval=$define
12316                 ;;
12317         *)      ptr_lval=$d_stdio_ptr_lval;;
12318         esac
12319         case "$stdio_cnt" in
12320         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
12321                 cnt_lval=$undef
12322                 ;;
12323         *)      cnt_lval=$d_stdio_cnt_lval;;
12324         esac
12325         case "$stdio_base" in
12326         '') stdio_base='((fp)->_IO_read_base)';;
12327         esac
12328         case "$stdio_bufsiz" in
12329         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
12330         esac
12331 else
12332         case "$stdio_ptr" in
12333         '') stdio_ptr='((fp)->_ptr)'
12334                 ptr_lval=$define
12335                 ;;
12336         *)      ptr_lval=$d_stdio_ptr_lval;;
12337         esac
12338         case "$stdio_cnt" in
12339         '') stdio_cnt='((fp)->_cnt)'
12340                 cnt_lval=$define
12341                 ;;
12342         *)      cnt_lval=$d_stdio_cnt_lval;;
12343         esac
12344         case "$stdio_base" in
12345         '') stdio_base='((fp)->_base)';;
12346         esac
12347         case "$stdio_bufsiz" in
12348         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
12349         esac
12350 fi
12351
12352 : test whether _ptr and _cnt really work
12353 echo "Checking how std your stdio is..." >&4
12354 $cat >try.c <<EOP
12355 #include <stdio.h>
12356 #define FILE_ptr(fp)    $stdio_ptr
12357 #define FILE_cnt(fp)    $stdio_cnt
12358 int main() {
12359         FILE *fp = fopen("try.c", "r");
12360         char c = getc(fp);
12361         if (
12362                 18 <= FILE_cnt(fp) &&
12363                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12364         )
12365                 exit(0);
12366         exit(1);
12367 }
12368 EOP
12369 val="$undef"
12370 set try
12371 if eval $compile && $to try.c; then
12372         if $run ./try; then
12373                 echo "Your stdio acts pretty std."
12374                 val="$define"
12375         else
12376                 echo "Your stdio isn't very std."
12377         fi
12378 else
12379         echo "Your stdio doesn't appear very std."
12380 fi
12381 $rm -f try.c try
12382 set d_stdstdio
12383 eval $setvar
12384
12385 : Can _ptr be used as an lvalue?
12386 case "$d_stdstdio$ptr_lval" in
12387 $define$define) val=$define ;;
12388 *) val=$undef ;;
12389 esac
12390 set d_stdio_ptr_lval
12391 eval $setvar
12392
12393 : Can _cnt be used as an lvalue?
12394 case "$d_stdstdio$cnt_lval" in
12395 $define$define) val=$define ;;
12396 *) val=$undef ;;
12397 esac
12398 set d_stdio_cnt_lval
12399 eval $setvar
12400
12401
12402 : test whether setting _ptr sets _cnt as a side effect
12403 d_stdio_ptr_lval_sets_cnt="$undef"
12404 d_stdio_ptr_lval_nochange_cnt="$undef"
12405 case "$d_stdio_ptr_lval$d_stdstdio" in
12406 $define$define)
12407         echo "Checking to see what happens if we set the stdio ptr..." >&4
12408 $cat >try.c <<EOP
12409 #include <stdio.h>
12410 /* Can we scream? */
12411 /* Eat dust sed :-) */
12412 /* In the buffer space, no one can hear you scream. */
12413 #define FILE_ptr(fp)    $stdio_ptr
12414 #define FILE_cnt(fp)    $stdio_cnt
12415 #include <sys/types.h>
12416 int main() {
12417         FILE *fp = fopen("try.c", "r");
12418         int c;
12419         char *ptr;
12420         size_t cnt;
12421         if (!fp) {
12422             puts("Fail even to read");
12423             exit(1);
12424         }
12425         c = getc(fp); /* Read away the first # */
12426         if (c == EOF) {
12427             puts("Fail even to read");
12428             exit(1);
12429         }
12430         if (!(
12431                 18 <= FILE_cnt(fp) &&
12432                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12433         )) {
12434                 puts("Fail even to read");
12435                 exit (1);
12436         }
12437         ptr = (char*) FILE_ptr(fp);
12438         cnt = (size_t)FILE_cnt(fp);
12439
12440         FILE_ptr(fp) += 42;
12441
12442         if ((char*)FILE_ptr(fp) != (ptr + 42)) {
12443                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
12444                 exit (1);
12445         }
12446         if (FILE_cnt(fp) <= 20) {
12447                 printf ("Fail (<20 chars to test)");
12448                 exit (1);
12449         }
12450         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
12451                 puts("Fail compare");
12452                 exit (1);
12453         }
12454         if (cnt == FILE_cnt(fp)) {
12455                 puts("Pass_unchanged");
12456                 exit (0);
12457         }       
12458         if (FILE_cnt(fp) == (cnt - 42)) {
12459                 puts("Pass_changed");
12460                 exit (0);
12461         }
12462         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
12463         return 1;
12464
12465 }
12466 EOP
12467         set try
12468         if eval $compile && $to try.c; then
12469                 case `$run ./try` in
12470                 Pass_changed)
12471                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
12472                         d_stdio_ptr_lval_sets_cnt="$define" ;;
12473                 Pass_unchanged)
12474                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
12475                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
12476                 Fail*)
12477                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
12478                 *)
12479                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
12480         esac
12481         else
12482                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
12483         fi
12484         $rm -f try.c try
12485         ;;
12486 esac
12487
12488 : see if _base is also standard
12489 val="$undef"
12490 case "$d_stdstdio" in
12491 $define)
12492         $cat >try.c <<EOP
12493 #include <stdio.h>
12494 #define FILE_base(fp)   $stdio_base
12495 #define FILE_bufsiz(fp) $stdio_bufsiz
12496 int main() {
12497         FILE *fp = fopen("try.c", "r");
12498         char c = getc(fp);
12499         if (
12500                 19 <= FILE_bufsiz(fp) &&
12501                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
12502         )
12503                 exit(0);
12504         exit(1);
12505 }
12506 EOP
12507         set try
12508         if eval $compile && $to try.c; then
12509                 if $run ./try; then
12510                         echo "And its _base field acts std."
12511                         val="$define"
12512                 else
12513                         echo "But its _base field isn't std."
12514                 fi
12515         else
12516                 echo "However, it seems to be lacking the _base field."
12517         fi
12518         $rm -f try.c try
12519         ;;
12520 esac
12521 set d_stdiobase
12522 eval $setvar
12523
12524 $cat >&4 <<EOM
12525 Checking how to access stdio streams by file descriptor number...
12526 EOM
12527 case "$stdio_stream_array" in
12528 '')     $cat >try.c <<EOCP
12529 #include <stdio.h>
12530 int main() {
12531   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
12532     printf("yes\n");
12533 }
12534 EOCP
12535         for s in _iob __iob __sF
12536         do
12537                 set try -DSTDIO_STREAM_ARRAY=$s
12538                 if eval $compile; then
12539                         case "`$run ./try`" in
12540                         yes)    stdio_stream_array=$s; break ;;
12541                         esac
12542                 fi
12543         done
12544         $rm -f try.* try$exe_ext
12545 esac
12546 case "$stdio_stream_array" in
12547 '')     $cat >&4 <<EOM
12548 I can't figure out how to access stdio streams by file descriptor number.
12549 EOM
12550         d_stdio_stream_array="$undef"
12551         ;;
12552 *)      $cat >&4 <<EOM
12553 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
12554 EOM
12555         d_stdio_stream_array="$define"
12556         ;;
12557 esac
12558
12559 : see if strcoll exists
12560 set strcoll d_strcoll
12561 eval $inlibc
12562
12563 : check for structure copying
12564 echo " "
12565 echo "Checking to see if your C compiler can copy structs..." >&4
12566 $cat >try.c <<'EOCP'
12567 int main()
12568 {
12569         struct blurfl {
12570                 int dyick;
12571         } foo, bar;
12572
12573         foo = bar;
12574 }
12575 EOCP
12576 if $cc -c try.c >/dev/null 2>&1 ; then
12577         val="$define"
12578         echo "Yup, it can."
12579 else
12580         val="$undef"
12581         echo "Nope, it can't."
12582 fi
12583 set d_strctcpy
12584 eval $setvar
12585 $rm -f try.*
12586
12587 : see if strerror and/or sys_errlist[] exist
12588 echo " "
12589 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
12590     if set strerror val -f d_strerror; eval $csym; $val; then
12591                 echo 'strerror() found.' >&4
12592                 d_strerror="$define"
12593                 d_strerrm='strerror(e)'
12594                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
12595                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
12596                         d_syserrlst="$define"
12597                 else
12598                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
12599                         d_syserrlst="$undef"
12600                 fi
12601     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
12602                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
12603                 echo 'strerror() found in string header.' >&4
12604                 d_strerror="$define"
12605                 d_strerrm='strerror(e)'
12606                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
12607                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
12608                                 d_syserrlst="$define"
12609                 else
12610                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
12611                         d_syserrlst="$undef"
12612                 fi
12613     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
12614                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
12615                 d_strerror="$undef"
12616                 d_syserrlst="$define"
12617                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
12618     else
12619                 echo 'strerror() and sys_errlist[] NOT found.' >&4
12620                 d_strerror="$undef"
12621                 d_syserrlst="$undef"
12622                 d_strerrm='"unknown"'
12623     fi
12624 fi
12625
12626 : see if strftime exists
12627 set strftime d_strftime
12628 eval $inlibc
12629
12630 : see if strtod exists
12631 set strtod d_strtod
12632 eval $inlibc
12633
12634 : see if strtol exists
12635 set strtol d_strtol
12636 eval $inlibc
12637
12638 : see if strtold exists
12639 set strtold d_strtold
12640 eval $inlibc
12641
12642 : see if strtoll exists
12643 set strtoll d_strtoll
12644 eval $inlibc
12645
12646 case "$d_longlong-$d_strtoll" in
12647 "$define-$define")
12648         $cat <<EOM
12649 Checking whether your strtoll() works okay...
12650 EOM
12651         $cat >try.c <<'EOCP'
12652 #include <errno.h>
12653 #ifdef __hpux
12654 #define strtoll __strtoll
12655 #endif
12656 #ifdef __EMX__
12657 #define strtoll _strtoll
12658 #endif
12659 #include <stdio.h>
12660 extern long long int strtoll(char *s, char **, int); 
12661 static int bad = 0;
12662 int check(char *s, long long ell, int een) {
12663         long long gll;
12664         errno = 0;
12665         gll = strtoll(s, 0, 10);
12666         if (!((gll == ell) && (errno == een)))
12667                 bad++;
12668 }
12669 int main() {
12670         check(" 1",                                      1LL, 0);
12671         check(" 0",                                      0LL, 0);
12672         check("-1",                                     -1LL, 0);
12673         check("-9223372036854775808", -9223372036854775808LL, 0);
12674         check("-9223372036854775808", -9223372036854775808LL, 0);
12675         check(" 9223372036854775807",  9223372036854775807LL, 0);
12676         check("-9223372036854775808", -9223372036854775808LL, 0);
12677         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
12678         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
12679         if (!bad)
12680                 printf("ok\n");
12681 }
12682 EOCP
12683         set try
12684         if eval $compile; then
12685                 yyy=`$run ./try`
12686                 case "$yyy" in
12687                 ok) echo "Your strtoll() seems to be working okay." ;;
12688                 *) cat <<EOM >&4
12689 Your strtoll() doesn't seem to be working okay.
12690 EOM
12691                    d_strtoll="$undef"
12692                    ;;
12693                 esac
12694         else
12695                 echo "(I can't seem to compile the test program--assuming it doesn't)"
12696                 d_strtoll="$undef"
12697         fi
12698         ;;
12699 esac
12700
12701 : see if strtoq exists
12702 set strtoq d_strtoq
12703 eval $inlibc
12704
12705 : see if strtoul exists
12706 set strtoul d_strtoul
12707 eval $inlibc
12708
12709 case "$d_strtoul" in
12710 "$define")
12711         $cat <<EOM
12712 Checking whether your strtoul() works okay...
12713 EOM
12714         $cat >try.c <<'EOCP'
12715 #include <errno.h>
12716 #include <stdio.h>
12717 extern unsigned long int strtoul(char *s, char **, int); 
12718 static int bad = 0;
12719 void check(char *s, unsigned long eul, int een) {
12720         unsigned long gul;
12721         errno = 0;
12722         gul = strtoul(s, 0, 10);
12723         if (!((gul == eul) && (errno == een)))
12724                 bad++;
12725 }
12726 int main() {
12727         check(" 1", 1L, 0);
12728         check(" 0", 0L, 0);
12729 EOCP
12730         case "$longsize" in
12731         8)
12732             $cat >>try.c <<'EOCP'
12733         check("18446744073709551615", 18446744073709551615UL, 0);
12734         check("18446744073709551616", 18446744073709551615UL, ERANGE);
12735 #if 0 /* strtoul() for /^-/ strings is undefined. */
12736         check("-1", 18446744073709551615UL, 0);
12737         check("-18446744073709551614", 2, 0);
12738         check("-18446744073709551615", 1, 0);
12739         check("-18446744073709551616", 18446744073709551615UL, ERANGE);
12740         check("-18446744073709551617", 18446744073709551615UL, ERANGE);
12741 #endif
12742 EOCP
12743                 ;;
12744         4)
12745                     $cat >>try.c <<'EOCP'
12746         check("4294967295", 4294967295UL, 0);
12747         check("4294967296", 4294967295UL, ERANGE);
12748 #if 0 /* strtoul() for /^-/ strings is undefined. */
12749         check("-1", 4294967295UL, 0);
12750         check("-4294967294", 2, 0);
12751         check("-4294967295", 1, 0);
12752         check("-4294967296", 4294967295UL, ERANGE);
12753         check("-4294967297", 4294967295UL, ERANGE);
12754 #endif
12755 EOCP
12756                 ;;
12757         *)
12758 : Should we write these tests to be more portable by sprintf-ing
12759 : ~0 and then manipulating that char string as input for strtol?
12760                 ;;
12761         esac
12762         $cat >>try.c <<'EOCP'
12763         if (!bad)
12764                 printf("ok\n");
12765         return 0;
12766 }
12767 EOCP
12768         set try
12769         if eval $compile; then
12770                 case "`$run ./try`" in
12771                 ok) echo "Your strtoul() seems to be working okay." ;;
12772                 *) cat <<EOM >&4
12773 Your strtoul() doesn't seem to be working okay.
12774 EOM
12775                    d_strtoul="$undef"
12776                    ;;
12777                 esac
12778         fi
12779         ;;
12780 esac
12781
12782 : see if strtoull exists
12783 set strtoull d_strtoull
12784 eval $inlibc
12785
12786 case "$d_longlong-$d_strtoull" in
12787 "$define-$define")
12788         $cat <<EOM
12789 Checking whether your strtoull() works okay...
12790 EOM
12791         $cat >try.c <<'EOCP'
12792 #include <errno.h>
12793 #ifdef __hpux
12794 #define strtoull __strtoull
12795 #endif
12796 #include <stdio.h>
12797 extern unsigned long long int strtoull(char *s, char **, int); 
12798 static int bad = 0;
12799 int check(char *s, long long eull, int een) {
12800         long long gull;
12801         errno = 0;
12802         gull = strtoull(s, 0, 10);
12803         if (!((gull == eull) && (errno == een)))
12804                 bad++;
12805 }
12806 int main() {
12807         check(" 1",                                        1LL, 0);
12808         check(" 0",                                        0LL, 0);
12809         check("18446744073709551615",  18446744073709551615ULL, 0);
12810         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
12811 #if 0 /* strtoull() for /^-/ strings is undefined. */
12812         check("-1",                    18446744073709551615ULL, 0);
12813         check("-18446744073709551614",                     2LL, 0);
12814         check("-18446744073709551615",                     1LL, 0);
12815         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
12816         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
12817 #endif
12818         if (!bad)
12819                 printf("ok\n");
12820 }
12821 EOCP
12822         set try
12823         if eval $compile; then
12824                 case "`$run ./try`" in
12825                 ok) echo "Your strtoull() seems to be working okay." ;;
12826                 *) cat <<EOM >&4
12827 Your strtoull() doesn't seem to be working okay.
12828 EOM
12829                    d_strtoull="$undef"
12830                    ;;
12831                 esac
12832         fi
12833         ;;
12834 esac
12835
12836 : see if strtouq exists
12837 set strtouq d_strtouq
12838 eval $inlibc
12839
12840 case "$d_strtouq" in
12841 "$define")
12842         $cat <<EOM
12843 Checking whether your strtouq() works okay...
12844 EOM
12845         $cat >try.c <<'EOCP'
12846 #include <errno.h>
12847 #include <stdio.h>
12848 extern unsigned long long int strtouq(char *s, char **, int); 
12849 static int bad = 0;
12850 void check(char *s, unsigned long long eull, int een) {
12851         unsigned long long gull;
12852         errno = 0;
12853         gull = strtouq(s, 0, 10);
12854         if (!((gull == eull) && (errno == een)))
12855                 bad++;
12856 }
12857 int main() {
12858         check(" 1",                                        1LL, 0);
12859         check(" 0",                                        0LL, 0);
12860         check("18446744073709551615",  18446744073709551615ULL, 0);
12861         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
12862 #if 0 /* strtouq() for /^-/ strings is undefined. */
12863         check("-1",                    18446744073709551615ULL, 0);
12864         check("-18446744073709551614",                     2LL, 0);
12865         check("-18446744073709551615",                     1LL, 0);
12866         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
12867         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
12868 #endif
12869         if (!bad)
12870                 printf("ok\n");
12871         return 0;
12872 }
12873 EOCP
12874         set try
12875         if eval $compile; then
12876                 case "`$run ./try`" in
12877                 ok) echo "Your strtouq() seems to be working okay." ;;
12878                 *) cat <<EOM >&4
12879 Your strtouq() doesn't seem to be working okay.
12880 EOM
12881                    d_strtouq="$undef"
12882                    ;;
12883                 esac
12884         fi
12885         ;;
12886 esac
12887
12888 : see if strxfrm exists
12889 set strxfrm d_strxfrm
12890 eval $inlibc
12891
12892 : see if symlink exists
12893 set symlink d_symlink
12894 eval $inlibc
12895
12896 : see if syscall exists
12897 set syscall d_syscall
12898 eval $inlibc
12899
12900 : see if prototype for syscall is available
12901 echo " "
12902 set d_syscallproto syscall $i_unistd unistd.h
12903 eval $hasproto
12904
12905 : see if sysconf exists
12906 set sysconf d_sysconf
12907 eval $inlibc
12908
12909 : see if system exists
12910 set system d_system
12911 eval $inlibc
12912
12913 : see if tcgetpgrp exists
12914 set tcgetpgrp d_tcgetpgrp
12915 eval $inlibc
12916
12917 : see if tcsetpgrp exists
12918 set tcsetpgrp d_tcsetpgrp
12919 eval $inlibc
12920
12921 : see if prototype for telldir is available
12922 echo " "
12923 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
12924 eval $hasproto
12925
12926 : see if this is a sys/times.h system
12927 set sys/times.h i_systimes
12928 eval $inhdr
12929
12930 : see if times exists
12931 echo " "
12932 if set times val -f d_times; eval $csym; $val; then
12933         echo 'times() found.' >&4
12934         d_times="$define"
12935         inc=''
12936         case "$i_systimes" in
12937         "$define") inc='sys/times.h';;
12938         esac
12939         rp="What is the type returned by times() on this system?"
12940         set clock_t clocktype long stdio.h sys/types.h $inc
12941         eval $typedef_ask
12942 else
12943         echo 'times() NOT found, hope that will do.' >&4
12944         d_times="$undef"
12945         clocktype='int'
12946 fi
12947
12948 : see if truncate exists
12949 set truncate d_truncate
12950 eval $inlibc
12951
12952 : see if tzname[] exists
12953 echo " "
12954 if set tzname val -a d_tzname; eval $csym; $val; then
12955         val="$define"
12956         echo 'tzname[] found.' >&4
12957 else
12958         val="$undef"
12959         echo 'tzname[] NOT found.' >&4
12960 fi
12961 set d_tzname
12962 eval $setvar
12963
12964 case "$osname" in
12965 next|rhapsody|darwin) multiarch="$define" ;;
12966 esac
12967 case "$multiarch" in
12968 ''|[nN]*) multiarch="$undef" ;;
12969 esac
12970
12971 : check for ordering of bytes in a long
12972 echo " "
12973 case "$usecrosscompile$multiarch" in
12974 *$define*)
12975         $cat <<EOM
12976 You seem to be either cross-compiling or doing a multiarchitecture build,
12977 skipping the byteorder check.
12978
12979 EOM
12980         byteorder='ffff'
12981         ;;
12982 *)
12983         case "$byteorder" in
12984         '')
12985                 $cat <<'EOM'
12986 In the following, larger digits indicate more significance.  A big-endian
12987 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
12988 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
12989 machines may have weird orders like 3412.  A Cray will report 87654321,
12990 an Alpha will report 12345678. If the test program works the default is
12991 probably right.
12992 I'm now running the test program...
12993 EOM
12994                 $cat >try.c <<'EOCP'
12995 #include <stdio.h>
12996 int main()
12997 {
12998         int i;
12999         union {
13000                 unsigned long l;
13001                 char c[sizeof(long)];
13002         } u;
13003
13004         if (sizeof(long) > 4)
13005                 u.l = (0x08070605L << 32) | 0x04030201L;
13006         else
13007                 u.l = 0x04030201L;
13008         for (i = 0; i < sizeof(long); i++)
13009                 printf("%c", u.c[i]+'0');
13010         printf("\n");
13011         exit(0);
13012 }
13013 EOCP
13014                 xxx_prompt=y
13015                 set try
13016                 if eval $compile && ./try > /dev/null; then
13017                         dflt=`$run ./try`
13018                         case "$dflt" in
13019                         [1-4][1-4][1-4][1-4]|12345678|87654321)
13020                                 echo "(The test program ran ok.)"
13021                                 echo "byteorder=$dflt"
13022                                 xxx_prompt=n
13023                         ;;
13024                         ????|????????) echo "(The test program ran ok.)" ;;
13025                         *) echo "(The test program didn't run right for some reason.)" ;;
13026                         esac
13027                 else
13028                         dflt='4321'
13029                         cat <<'EOM'
13030 (I can't seem to compile the test program.  Guessing big-endian...)
13031 EOM
13032                 fi
13033                 case "$xxx_prompt" in
13034                 y)
13035                         rp="What is the order of bytes in a long?"
13036                         . ./myread
13037                         byteorder="$ans"
13038                         ;;
13039                 *)      byteorder=$dflt
13040                         ;;
13041                 esac
13042                 ;;
13043         esac
13044         $rm -f try.c try
13045         ;;
13046 esac
13047
13048
13049 $cat <<EOM
13050
13051 Checking to see whether you can access character data unalignedly...
13052 EOM
13053 $cat >try.c <<EOCP
13054 #include <stdio.h>
13055 #define U32 $u32type
13056 #define BYTEORDER $byteorder
13057 int main() {
13058 #if BYTEORDER == 0x1234 || BYTEORDER == 0x4321
13059     U8 buf[] = "\0\0\0\1\0\0\0\0";
13060     U32 *up;
13061     int i;
13062
13063     if (sizeof(U32) != 4) {
13064         printf("sizeof(U32) is not 4, but %d\n", sizeof(U32));
13065         exit(1);
13066     }
13067
13068     fflush(stdout);
13069
13070     for (i = 0; i < 4; i++) {
13071         up = (U32*)(buf + i);
13072         if (! ((*up == 1 << (8*i)) ||   /* big-endian */
13073                (*up == 1 << (8*(3-i)))  /* little-endian */
13074               )
13075            )
13076         {
13077             printf("read failed (%x)\n", *up);
13078             exit(2);
13079         }
13080     }
13081
13082     /* write test */
13083     for (i = 0; i < 4; i++) {
13084         up = (U32*)(buf + i);
13085         *up = 0xBeef;
13086         if (*up != 0xBeef) {
13087             printf("write failed (%x)\n", *up);
13088             exit(3);
13089         }
13090     }
13091
13092     exit(0);
13093 #else
13094     printf("1\n");
13095     exit(1);
13096 #endif
13097     return 0;
13098 }
13099 EOCP
13100 set try
13101 if eval $compile_ok; then
13102         echo "(Testing for character data alignment may dump core.)" >&4
13103         $run ./try 2>&1 >/dev/null
13104         case "$?" in
13105         0)      cat >&4 <<EOM
13106 You can access character data pretty unalignedly.
13107 EOM
13108                 d_u32align="$undef"
13109                 ;;
13110         *)      cat >&4 <<EOM
13111 It seems that you must access character data in an aligned manner.
13112 EOM
13113                 d_u32align="$define"
13114                 ;;
13115         esac
13116         $rm -f core core.try.* try.core
13117 else
13118         rp='Can you access character data at unaligned addresses?'
13119         dflt='n'
13120         . ./myread
13121         case "$ans" in
13122         [yY]*)  d_u32align="$undef"  ;;
13123         *)      d_u32align="$define" ;;
13124         esac
13125 fi
13126
13127 : see if ualarm exists
13128 set ualarm d_ualarm
13129 eval $inlibc
13130
13131 : see if umask exists
13132 set umask d_umask
13133 eval $inlibc
13134
13135 : see if usleep exists
13136 set usleep d_usleep
13137 eval $inlibc
13138
13139 : see if prototype for usleep is available
13140 echo " "
13141 set d_usleepproto usleep $i_unistd unistd.h
13142 eval $hasproto
13143
13144 : see if ustat exists
13145 set ustat d_ustat
13146 eval $inlibc
13147
13148 : backward compatibility for d_hvfork
13149 if test X$d_hvfork != X; then
13150         d_vfork="$d_hvfork"
13151         d_hvfork=''
13152 fi
13153 : see if there is a vfork
13154 val=''
13155 set vfork val
13156 eval $inlibc
13157
13158 : Ok, but do we want to use it. vfork is reportedly unreliable in 
13159 : perl on Solaris 2.x, and probably elsewhere.
13160 case "$val" in
13161 $define)
13162         echo " "
13163         case "$usevfork" in
13164         false) dflt='n';;
13165         *) dflt='y';;
13166         esac
13167         cat <<'EOM'
13168  
13169 Perl can only use a vfork() that doesn't suffer from strict
13170 restrictions on calling functions or modifying global data in
13171 the child.  For example, glibc-2.1 contains such a vfork()
13172 that is unsuitable.  If your system provides a proper fork()
13173 call, chances are that you do NOT want perl to use vfork().
13174
13175 EOM
13176         rp="Do you still want to use vfork()?"
13177         . ./myread
13178         case "$ans" in
13179         y|Y) ;;
13180         *)
13181                 echo "Ok, we won't use vfork()."
13182                 val="$undef"
13183                 ;;
13184         esac
13185         ;;
13186 esac
13187 set d_vfork
13188 eval $setvar
13189 case "$d_vfork" in
13190 $define) usevfork='true';;
13191 *) usevfork='false';;
13192 esac
13193
13194 : see if this is an sysdir system
13195 set sys/dir.h i_sysdir
13196 eval $inhdr
13197
13198 : see if this is an sysndir system
13199 set sys/ndir.h i_sysndir
13200 eval $inhdr
13201
13202 : see if closedir exists
13203 set closedir d_closedir
13204 eval $inlibc
13205
13206 case "$d_closedir" in
13207 "$define")
13208         echo " "
13209         echo "Checking whether closedir() returns a status..." >&4
13210         cat > try.c <<EOM
13211 #$i_dirent I_DIRENT             /**/
13212 #$i_sysdir I_SYS_DIR            /**/
13213 #$i_sysndir I_SYS_NDIR          /**/
13214 #$i_systypes I_SYS_TYPES        /**/
13215
13216 #if defined(I_SYS_TYPES)
13217 #include <sys/types.h>
13218 #endif
13219 #if defined(I_DIRENT)
13220 #include <dirent.h>
13221 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
13222 #include <sys/dir.h>
13223 #endif
13224 #else
13225 #ifdef I_SYS_NDIR
13226 #include <sys/ndir.h>
13227 #else
13228 #ifdef I_SYS_DIR
13229 #ifdef hp9000s500
13230 #include <ndir.h>       /* may be wrong in the future */
13231 #else
13232 #include <sys/dir.h>
13233 #endif
13234 #endif
13235 #endif
13236 #endif 
13237 int main() { return closedir(opendir(".")); }
13238 EOM
13239         set try
13240         if eval $compile_ok; then
13241                 if $run ./try > /dev/null 2>&1 ; then
13242                         echo "Yes, it does."
13243                         val="$undef"
13244                 else
13245                         echo "No, it doesn't."
13246                         val="$define"
13247                 fi
13248         else
13249                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13250                 val="$define"
13251         fi
13252         ;;
13253 *)
13254         val="$undef";
13255         ;;
13256 esac
13257 set d_void_closedir
13258 eval $setvar
13259 $rm -f try try.*
13260 : see if there is a wait4
13261 set wait4 d_wait4
13262 eval $inlibc
13263
13264 : see if waitpid exists
13265 set waitpid d_waitpid
13266 eval $inlibc
13267
13268 : see if wcstombs exists
13269 set wcstombs d_wcstombs
13270 eval $inlibc
13271
13272 : see if wctomb exists
13273 set wctomb d_wctomb
13274 eval $inlibc
13275
13276 : see if writev exists
13277 set writev d_writev
13278 eval $inlibc
13279
13280 : preserve RCS keywords in files with variable substitution, grrr
13281 Date='$Date'
13282 Id='$Id'
13283 Log='$Log'
13284 RCSfile='$RCSfile'
13285 Revision='$Revision'
13286
13287 : check for alignment requirements
13288 echo " "
13289 case "$usecrosscompile$multiarch" in
13290 *$define*)
13291         $cat <<EOM
13292 You seem to be either cross-compiling or doing a multiarchitecture build,
13293 skipping the memory alignment check.
13294
13295 EOM
13296         case "$alignbytes" in
13297         '') alignbytes=8 ;;
13298         esac
13299         ;;
13300 *)
13301         case "$alignbytes" in
13302         '') echo "Checking alignment constraints..." >&4
13303                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
13304                         $cat >try.c <<'EOCP'
13305 typedef long double NV;
13306 EOCP
13307                 else
13308                         $cat >try.c <<'EOCP'
13309 typedef double NV;
13310 EOCP
13311                 fi
13312                 $cat >>try.c <<'EOCP'
13313 #include <stdio.h>
13314 struct foobar {
13315         char foo;
13316         NV bar;
13317 } try_algn;
13318 int main()
13319 {
13320     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
13321     return(0);
13322 }
13323 EOCP
13324                 set try
13325                 if eval $compile_ok; then
13326                         dflt=`$run ./try`
13327                 else
13328                         dflt='8'
13329                         echo "(I can't seem to compile the test program...)"
13330                 fi
13331                 ;;
13332         *) dflt="$alignbytes"
13333                 ;;
13334         esac
13335         rp="Doubles must be aligned on a how-many-byte boundary?"
13336         . ./myread
13337         alignbytes="$ans"
13338         $rm -f try.c try
13339         ;;
13340 esac
13341
13342
13343 : set the base revision
13344 baserev=5.0
13345
13346 : how do we catenate cpp tokens here?
13347 echo " "
13348 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
13349 $cat >cpp_stuff.c <<'EOCP'
13350 #define RCAT(a,b)a/**/b
13351 #define ACAT(a,b)a ## b
13352 RCAT(Rei,ser)
13353 ACAT(Cir,cus)
13354 EOCP
13355 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
13356 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
13357         echo "Oh!  Smells like ANSI's been here." >&4
13358         echo "We can catify or stringify, separately or together!"
13359         cpp_stuff=42
13360 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
13361         echo "Ah, yes!  The good old days!" >&4
13362         echo "However, in the good old days we don't know how to stringify and"
13363         echo "catify at the same time."
13364         cpp_stuff=1
13365 else
13366         $cat >&4 <<EOM
13367 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
13368 to have to edit the values of CAT[2-5] in config.h...
13369 EOM
13370         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
13371 fi
13372 $rm -f cpp_stuff.*
13373
13374 : see if this is a db.h system
13375 set db.h i_db
13376 eval $inhdr
13377
13378 case "$i_db" in
13379 $define)
13380         : Check db version.
13381         echo " "
13382         echo "Checking Berkeley DB version ..." >&4
13383         $cat >try.c <<EOCP
13384 #$d_const HASCONST
13385 #ifndef HASCONST
13386 #define const
13387 #endif
13388 #include <sys/types.h>
13389 #include <stdio.h>
13390 #include <db.h>
13391 int main(int argc, char *argv[])
13392 {
13393 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
13394     int Major, Minor, Patch ;
13395     unsigned long Version ;
13396     (void)db_version(&Major, &Minor, &Patch) ;
13397     if (argc == 2) {
13398         printf("%d %d %d %d %d %d\n",
13399                DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
13400                Major, Minor, Patch);
13401         exit(0);
13402     }
13403     printf("You have Berkeley DB Version 2 or greater.\n");
13404
13405     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
13406                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
13407     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
13408                 Major, Minor, Patch) ;
13409
13410     /* check that db.h & libdb are compatible */
13411     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
13412         printf("db.h and libdb are incompatible.\n") ;
13413         exit(3);        
13414     }
13415
13416     printf("db.h and libdb are compatible.\n") ;
13417
13418     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
13419                 + DB_VERSION_PATCH ;
13420
13421     /* needs to be >= 2.3.4 */
13422     if (Version < 2003004) {
13423     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
13424         printf("Perl needs Berkeley DB 2.3.4 or greater.\n") ;
13425         exit(2);        
13426     }
13427
13428     exit(0);
13429 #else
13430 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
13431     if (argc == 2) {
13432         printf("1 0 0\n");
13433         exit(0);
13434     }
13435     printf("You have Berkeley DB Version 1.\n");
13436     exit(0);    /* DB version < 2: the coast is clear. */
13437 #else
13438     exit(1);    /* <db.h> not Berkeley DB? */
13439 #endif
13440 #endif
13441 }
13442 EOCP
13443         set try
13444         if eval $compile_ok && $run ./try; then
13445                 echo 'Looks OK.' >&4
13446                 set `$run ./try 1`
13447                 db_version_major=$1
13448                 db_version_minor=$2
13449                 db_version_patch=$3
13450         else
13451                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
13452                 i_db=$undef
13453                 case " $libs " in
13454                 *"-ldb "*)
13455                         : Remove db from list of libraries to use
13456                         echo "Removing unusable -ldb from library list" >&4
13457                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
13458                         shift
13459                         libs="$*"
13460                         echo "libs = $libs" >&4
13461                         ;;
13462                 esac
13463         fi
13464         $rm -f try.*
13465         ;;
13466 esac
13467
13468 case "$i_db" in
13469 define)
13470         : Check the return type needed for hash 
13471         echo " "
13472         echo "Checking return type needed for hash for Berkeley DB ..." >&4
13473         $cat >try.c <<EOCP
13474 #$d_const HASCONST
13475 #ifndef HASCONST
13476 #define const
13477 #endif
13478 #include <sys/types.h>
13479 #include <db.h>
13480
13481 #ifndef DB_VERSION_MAJOR
13482 u_int32_t hash_cb (ptr, size)
13483 const void *ptr;
13484 size_t size;
13485 {
13486 }
13487 HASHINFO info;
13488 int main()
13489 {
13490         info.hash = hash_cb;
13491 }
13492 #endif
13493 EOCP
13494         if $cc $ccflags -c try.c >try.out 2>&1 ; then
13495                 if $contains warning try.out >>/dev/null 2>&1 ; then
13496                         db_hashtype='int'
13497                 else
13498                         db_hashtype='u_int32_t'
13499                 fi
13500         else
13501                 : XXX Maybe we should just give up here.
13502                 db_hashtype=u_int32_t
13503                 $cat try.out >&4
13504                 echo "Help:  I can't seem to compile the db test program." >&4
13505                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
13506         fi
13507         $rm -f try.*
13508         echo "Your version of Berkeley DB uses $db_hashtype for hash."
13509         ;;
13510 *)      db_hashtype=u_int32_t
13511         ;;
13512 esac
13513 case "$i_db" in
13514 define)
13515         : Check the return type needed for prefix 
13516         echo " "
13517         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
13518         cat >try.c <<EOCP
13519 #$d_const HASCONST
13520 #ifndef HASCONST
13521 #define const
13522 #endif
13523 #include <sys/types.h>
13524 #include <db.h>
13525
13526 #ifndef DB_VERSION_MAJOR
13527 size_t prefix_cb (key1, key2)
13528 const DBT *key1;
13529 const DBT *key2;
13530 {
13531 }
13532 BTREEINFO info;
13533 int main()
13534 {
13535         info.prefix = prefix_cb;
13536 }
13537 #endif
13538 EOCP
13539         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
13540                 if $contains warning try.out >>/dev/null 2>&1 ; then
13541                         db_prefixtype='int'
13542                 else
13543                         db_prefixtype='size_t'
13544                 fi
13545         else
13546                 db_prefixtype='size_t'
13547                 : XXX Maybe we should just give up here.
13548                 $cat try.out >&4
13549                 echo "Help:  I can't seem to compile the db test program." >&4
13550                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
13551         fi
13552         $rm -f try.*
13553         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
13554         ;;
13555 *)      db_prefixtype='size_t'
13556         ;;
13557 esac
13558
13559
13560 : How can we generate normalized random numbers ?
13561 echo " "
13562 echo "Looking for a random number function..." >&4
13563 case "$randfunc" in
13564 '')
13565         if set drand48 val -f; eval $csym; $val; then
13566                 dflt="drand48"
13567                 echo "Good, found drand48()." >&4
13568         elif set random val -f; eval $csym; $val; then
13569                 dflt="random"
13570                 echo "OK, found random()." >&4
13571         else
13572                 dflt="rand"
13573                 echo "Yick, looks like I have to use rand()." >&4
13574         fi
13575         echo " "
13576         ;;
13577 *)
13578         dflt="$randfunc"
13579         ;;
13580 esac
13581 cont=true
13582
13583 case "$ccflags" in
13584 *-Dmy_rand=*|*-Dmy_srand=*)
13585         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
13586         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
13587         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
13588         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
13589         ;;
13590 esac
13591
13592 while $test "$cont"; do
13593         rp="Use which function to generate random numbers?"
13594         . ./myread
13595         if $test "$ans" = "$dflt"; then
13596                 : null
13597         else
13598                 randbits=''
13599         fi
13600         randfunc="$ans"
13601         if set $ans val -f; eval $csym; $val; then
13602                 cont=''
13603         else
13604                 dflt=y
13605                 rp="I cannot find function $ans. Use that name anyway?"
13606                 . ./myread
13607                 dflt=rand
13608                 case "$ans" in
13609                         [yY]*) cont='';;
13610                 esac
13611         fi
13612         case "$cont" in
13613         '')
13614                 case "$randfunc" in
13615                 drand48)
13616                         drand01="drand48()"
13617                         seedfunc="srand48"
13618                         randbits=48
13619                         randseedtype=long
13620                         ;;
13621                 rand|random)
13622                         case "$randbits" in
13623                         '')
13624 echo "Checking to see how many bits your $randfunc() function produces..." >&4
13625                                 $cat >try.c <<EOCP
13626 #$i_unistd I_UNISTD
13627 #$i_stdlib I_STDLIB
13628 #include <stdio.h>
13629 #ifdef I_UNISTD
13630 #  include <unistd.h>
13631 #endif
13632 #ifdef I_STDLIB
13633 #  include <stdlib.h>
13634 #endif
13635 int main()
13636 {
13637         register int i;
13638         register unsigned long tmp;
13639         register unsigned long max = 0L;
13640
13641         for (i = 1000; i; i--) {
13642                 tmp = (unsigned long) $randfunc();
13643                 if (tmp > max) max = tmp;
13644         }
13645         for (i = 0; max; i++)
13646                 max /= 2;
13647         printf("%d\n",i);
13648 }
13649 EOCP
13650                                 set try
13651                                 if eval $compile_ok; then
13652                                         dflt=`try`
13653                                 else
13654                                         dflt='?'
13655                                         echo "(I can't seem to compile the test program...)"
13656                                 fi
13657                                 ;;
13658                         *)
13659                                 dflt="$randbits"
13660                                 ;;
13661                         esac
13662                         rp="How many bits does your $randfunc() function produce?"
13663                         . ./myread
13664                         randbits="$ans"
13665                         $rm -f try.c try
13666                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13667                         seedfunc="s$randfunc"
13668                         randseedtype=unsigned
13669                         ;;
13670                 *)
13671                         dflt="31"
13672                         rp="How many bits does your $randfunc() function produce?"
13673                         . ./myread
13674                         randbits="$ans"
13675                         seedfunc="s$randfunc"
13676                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13677                         if set $seedfunc val -f; eval $csym; $val; then
13678                                 echo "(Using $seedfunc() to seed random generator)"
13679                         else
13680                                 echo "(Warning: no $seedfunc() to seed random generator)"
13681                                 seedfunc=rand
13682                         fi
13683                         randseedtype=unsigned
13684                         ;;
13685                 esac
13686                 ;;
13687         esac
13688 done
13689
13690 echo " "
13691 echo "Determining whether or not we are on an EBCDIC system..." >&4
13692 $cat >try.c <<'EOM'
13693 int main()
13694 {
13695   if ('M'==0xd4) return 0;
13696   return 1;
13697 }
13698 EOM
13699
13700 val=$undef
13701 set try
13702 if eval $compile_ok; then
13703         if $run ./try; then
13704                 echo "You seem to speak EBCDIC." >&4
13705                 val="$define"
13706         else
13707                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4
13708         fi
13709 else
13710         echo "I'm unable to compile the test program." >&4
13711         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
13712 fi
13713 $rm -f try try.*
13714 set ebcdic
13715 eval $setvar
13716
13717 echo " "
13718 $cat >&4 <<EOM
13719 Checking how to flush all pending stdio output...
13720 EOM
13721 # I only know how to find the first 32 possibly open files on SunOS.
13722 # See also hints/sunos_4_1.sh and util.c  --AD
13723 case "$osname" in
13724 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
13725 esac
13726 $cat >>try.c <<EOCP
13727 #include <stdio.h>
13728 #$i_unistd I_UNISTD
13729 #ifdef I_UNISTD
13730 # include <unistd.h>
13731 #endif
13732 #$d_sysconf HAS_SYSCONF
13733 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
13734 #ifdef HAS_STDIO_STREAM_ARRAY
13735 # define STDIO_STREAM_ARRAY $stdio_stream_array
13736 #endif
13737 int main() {
13738   FILE* p;
13739   unlink("try.out");
13740   p = fopen("try.out", "w");
13741 #ifdef TRY_FPUTC
13742   fputc('x', p);
13743 #else
13744 # ifdef TRY_FPRINTF
13745   fprintf(p, "x");
13746 # endif
13747 #endif
13748 #ifdef TRY_FFLUSH_NULL
13749   fflush(NULL);
13750 #endif
13751 #ifdef TRY_FFLUSH_ALL
13752   {
13753     long open_max = -1;
13754 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
13755     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
13756 # else
13757 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
13758     open_max = sysconf(_SC_OPEN_MAX);
13759 #  else
13760 #   ifdef FOPEN_MAX
13761     open_max = FOPEN_MAX;
13762 #   else
13763 #    ifdef OPEN_MAX
13764     open_max = OPEN_MAX;
13765 #    else
13766 #     ifdef _NFILE
13767     open_max = _NFILE;
13768 #     endif
13769 #    endif
13770 #   endif
13771 #  endif
13772 # endif 
13773 # ifdef HAS_STDIO_STREAM_ARRAY
13774     if (open_max > 0) {
13775       long i;
13776       for (i = 0; i < open_max; i++)
13777             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
13778                 STDIO_STREAM_ARRAY[i]._file < open_max &&
13779                 STDIO_STREAM_ARRAY[i]._flag)
13780                 fflush(&STDIO_STREAM_ARRAY[i]);
13781     }   
13782   }
13783 # endif
13784 #endif
13785   _exit(42);
13786 }
13787 EOCP
13788 : first we have to find out how _not_ to flush
13789 $to try.c
13790 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
13791     output=''
13792     set try -DTRY_FPUTC
13793     if eval $compile; then
13794             $run ./try 2>/dev/null
13795             $rm -f try.out
13796             $from try.out
13797             if $test ! -s try.out -a "X$?" = X42; then
13798                 output=-DTRY_FPUTC
13799             fi
13800     fi
13801     case "$output" in
13802     '')
13803             set try -DTRY_FPRINTF
13804             if eval $compile; then
13805                     $run ./try 2>/dev/null
13806                     $rm -f try.out
13807                     $from try.out
13808                     if $test ! -s try.out -a "X$?" = X42; then
13809                         output=-DTRY_FPRINTF
13810                     fi
13811             fi
13812         ;;
13813     esac
13814 fi
13815 : check for fflush NULL behaviour
13816 case "$fflushNULL" in
13817 '')     set try -DTRY_FFLUSH_NULL $output
13818         if eval $compile; then
13819                 $run ./try 2>/dev/null
13820                 code="$?"
13821                 $rm -f try.out
13822                 $from try.out
13823                 if $test -s try.out -a "X$code" = X42; then
13824                         fflushNULL="`$cat try.out`"
13825                 else
13826                         if $test "X$code" != X42; then
13827                                 $cat >&4 <<EOM
13828 (If this test failed, don't worry, we'll try another method shortly.)
13829 EOM
13830                         fi
13831                 fi
13832         fi
13833         $rm -f core try.core core.try.*
13834         case "$fflushNULL" in
13835         x)      $cat >&4 <<EOM
13836 Your fflush(NULL) works okay for output streams.
13837 Let's see if it clobbers input pipes...
13838 EOM
13839 # As of mid-March 2000 all versions of Solaris appear to have a stdio
13840 # bug that improperly flushes the input end of pipes.  So we avoid the
13841 # autoflush on fork/system/exec support for now. :-(
13842 $cat >tryp.c <<EOCP
13843 #include <stdio.h>
13844 int
13845 main(int argc, char **argv)
13846 {
13847     char buf[1024];
13848     int i;
13849     char *bp = buf;
13850     while (1) {
13851         while ((i = getc(stdin)) != -1
13852                && (*bp++ = i) != '\n'
13853                && bp < &buf[1024])
13854         /* DO NOTHING */ ;
13855         *bp = '\0';
13856         fprintf(stdout, "%s", buf);
13857         fflush(NULL);
13858         if (i == -1)
13859             return 0;
13860         bp = buf;
13861     }
13862 }
13863 EOCP
13864                 fflushNULL="$define"
13865                 set tryp
13866                 if eval $compile; then
13867                     $rm -f tryp.out
13868                     $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
13869                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
13870                        $cat >&4 <<EOM
13871 fflush(NULL) seems to behave okay with input streams.
13872 EOM
13873                         fflushNULL="$define"
13874                     else
13875                         $cat >&4 <<EOM
13876 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
13877 EOM
13878                         fflushNULL="$undef"
13879                     fi
13880                 fi
13881                 $rm -f core tryp.c tryp.core core.tryp.*
13882                 ;;
13883         '')     $cat >&4 <<EOM
13884 Your fflush(NULL) isn't working (contrary to ANSI C).
13885 EOM
13886                 fflushNULL="$undef"
13887                 ;;
13888         *)      $cat >&4 <<EOM
13889 Cannot figure out whether your fflush(NULL) works or not.
13890 I'm assuming it doesn't (contrary to ANSI C).
13891 EOM
13892                 fflushNULL="$undef"
13893                 ;;
13894         esac
13895         ;;
13896 $define|true|[yY]*)
13897         fflushNULL="$define"
13898         ;;
13899 *)
13900         fflushNULL="$undef"
13901         ;;
13902 esac
13903 : check explicit looping only if NULL did not work, and if the pipe
13904 : bug does not show up on an explicit flush too
13905 case "$fflushNULL" in
13906 "$undef")
13907         $cat >tryp.c <<EOCP
13908 #include <stdio.h>
13909 int
13910 main(int argc, char **argv)
13911 {
13912     char buf[1024];
13913     int i;
13914     char *bp = buf;
13915     while (1) {
13916         while ((i = getc(stdin)) != -1
13917                && (*bp++ = i) != '\n'
13918                && bp < &buf[1024])
13919         /* DO NOTHING */ ;
13920         *bp = '\0';
13921         fprintf(stdout, "%s", buf);
13922         fflush(stdin);
13923         if (i == -1)
13924             return 0;
13925         bp = buf;
13926     }
13927 }
13928 EOCP
13929         set tryp
13930         if eval $compile; then
13931             $rm -f tryp.out
13932             $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
13933             if cmp tryp.c tryp.out >/dev/null 2>&1; then
13934                $cat >&4 <<EOM
13935 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
13936 EOM
13937                 : now check for fflushall behaviour
13938                 case "$fflushall" in
13939                 '')     set try -DTRY_FFLUSH_ALL $output
13940                         if eval $compile; then
13941                                 $cat >&4 <<EOM
13942 (Now testing the other method--but note that this also may fail.)
13943 EOM
13944                                 $rm -f try.out
13945                                 $run ./try 2>/dev/null
13946                                 if $test -s try.out -a "X$?" = X42; then
13947                                         fflushall="`$cat try.out`"
13948                                 fi
13949                         fi
13950                         $rm -f core try.core core.try.*
13951                         case "$fflushall" in
13952                         x)      $cat >&4 <<EOM
13953 Whew. Flushing explicitly all the stdio streams works.
13954 EOM
13955                                 fflushall="$define"
13956                                 ;;
13957                         '')     $cat >&4 <<EOM
13958 Sigh. Flushing explicitly all the stdio streams doesn't work.
13959 EOM
13960                                 fflushall="$undef"
13961                                 ;;
13962                         *)      $cat >&4 <<EOM
13963 Cannot figure out whether flushing stdio streams explicitly works or not.
13964 I'm assuming it doesn't.
13965 EOM
13966                                 fflushall="$undef"
13967                                 ;;
13968                         esac
13969                         ;;
13970                 "$define"|true|[yY]*)
13971                         fflushall="$define"
13972                         ;;
13973                 *)
13974                         fflushall="$undef"
13975                         ;;
13976                 esac
13977             else
13978                 $cat >&4 <<EOM
13979 All is futile.  Even fflush(stdin) clobbers input pipes!
13980 EOM
13981                 fflushall="$undef"
13982             fi
13983         else
13984             fflushall="$undef"
13985         fi
13986         $rm -f core tryp.c tryp.core core.tryp.*
13987         ;;
13988 *)      fflushall="$undef"
13989         ;;
13990 esac
13991
13992 case "$fflushNULL$fflushall" in
13993 undefundef)
13994         $cat <<EOM
13995 OK, I give up.  I cannot figure out how to flush pending stdio output.
13996 We won't be flushing handles at all before fork/exec/popen.
13997 EOM
13998         ;;
13999 esac
14000 $rm -f try.* try$exe_ext
14001
14002 : Store the full pathname to the ar program for use in the C program
14003 : Respect a hint or command line value for full_ar.
14004 case "$full_ar" in
14005 '') full_ar=$ar ;;
14006 esac
14007
14008 : Store the full pathname to the sed program for use in the C program
14009 full_sed=$sed
14010
14011 : see what type gids are declared as in the kernel
14012 echo " "
14013 echo "Looking for the type for group ids returned by getgid()."
14014 set gid_t gidtype xxx stdio.h sys/types.h
14015 eval $typedef
14016 case "$gidtype" in
14017 xxx)
14018         xxx=`./findhdr sys/user.h`
14019         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
14020         case $1 in
14021         unsigned) dflt="$1 $2" ;;
14022         *) dflt="$1" ;;
14023         esac
14024         ;;
14025 *) dflt="$gidtype";;
14026 esac
14027 case "$gidtype" in
14028 gid_t) echo "gid_t found." ;;
14029 *)      rp="What is the type for group ids returned by getgid()?"
14030         . ./myread
14031         gidtype="$ans"
14032         ;;
14033 esac
14034
14035 echo " "
14036 case "$gidtype" in
14037 *_t) zzz="$gidtype"     ;;
14038 *)   zzz="gid"          ;;
14039 esac
14040 echo "Checking the size of $zzz..." >&4 
14041 cat > try.c <<EOCP
14042 #include <sys/types.h>
14043 #include <stdio.h>
14044 int main() {
14045     printf("%d\n", (int)sizeof($gidtype));
14046     exit(0);
14047 }
14048 EOCP
14049 set try
14050 if eval $compile_ok; then
14051         yyy=`$run ./try`
14052         case "$yyy" in
14053         '')     gidsize=4
14054                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
14055                 ;;
14056         *)      gidsize=$yyy
14057                 echo "Your $zzz is $gidsize bytes long."
14058                 ;;
14059         esac
14060 else
14061         gidsize=4
14062         echo "(I can't compile the test program--guessing $gidsize.)" >&4
14063 fi
14064
14065
14066 echo " "
14067 case "$gidtype" in
14068 *_t) zzz="$gidtype"     ;;
14069 *)   zzz="gid"          ;;
14070 esac
14071 echo "Checking the sign of $zzz..." >&4 
14072 cat > try.c <<EOCP
14073 #include <sys/types.h>
14074 #include <stdio.h>
14075 int main() {
14076         $gidtype foo = -1;
14077         if (foo < 0)
14078                 printf("-1\n");
14079         else
14080                 printf("1\n");
14081 }
14082 EOCP
14083 set try
14084 if eval $compile; then
14085         yyy=`$run ./try`
14086         case "$yyy" in
14087         '')     gidsign=1
14088                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14089                 ;;
14090         *)      gidsign=$yyy
14091                 case "$gidsign" in
14092                  1) echo "Your $zzz is unsigned." ;;
14093                 -1) echo "Your $zzz is signed."   ;;
14094                 esac
14095                 ;;
14096         esac
14097 else
14098         gidsign=1
14099         echo "(I can't compile the test program--guessing unsigned.)" >&4
14100 fi
14101
14102
14103 echo " "
14104
14105 if $test X"$quadtype" != X; then
14106
14107 echo "Checking how to print 64-bit integers..." >&4
14108
14109 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
14110         $cat >try.c <<'EOCP'
14111 #include <sys/types.h>
14112 #include <stdio.h>
14113 int main() {
14114   int q = 12345678901;
14115   printf("%ld\n", q);
14116 }
14117 EOCP
14118         set try
14119         if eval $compile; then
14120                 yyy=`$run ./try`
14121                 case "$yyy" in
14122                 12345678901)
14123                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
14124                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
14125                         echo "We will use %d."
14126                         ;;
14127                 esac
14128         fi
14129 fi
14130
14131 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
14132         $cat >try.c <<'EOCP'
14133 #include <sys/types.h>
14134 #include <stdio.h>
14135 int main() {
14136   long q = 12345678901;
14137   printf("%ld\n", q);
14138 }
14139 EOCP
14140         set try
14141         if eval $compile; then
14142                 yyy=`$run ./try`
14143                 case "$yyy" in
14144                 12345678901)
14145                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
14146                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
14147                         echo "We will use %ld."
14148                         ;;
14149                 esac
14150         fi
14151 fi
14152
14153 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
14154         $cat >try.c <<'EOCP'
14155 #include <sys/types.h>
14156 #include <inttypes.h>
14157 #include <stdio.h>
14158 int main() {
14159   int64_t q = 12345678901;
14160   printf("%" PRId64 "\n", q);
14161 }
14162 EOCP
14163         set try
14164         if eval $compile; then
14165                 yyy=`$run ./try`
14166                 case "$yyy" in
14167                 12345678901)
14168                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
14169                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
14170                         echo "We will use the C9X style."
14171                         ;;
14172                 esac
14173         fi
14174 fi
14175
14176 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14177         $cat >try.c <<EOCP
14178 #include <sys/types.h>
14179 #include <stdio.h>
14180 int main() {
14181   $quadtype q = 12345678901;
14182   printf("%Ld\n", q);
14183 }
14184 EOCP
14185         set try
14186         if eval $compile; then
14187                 yyy=`$run ./try`
14188                 case "$yyy" in
14189                 12345678901)
14190                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
14191                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
14192                         echo "We will use %Ld."
14193                         ;;
14194                 esac
14195         fi
14196 fi
14197
14198 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
14199         $cat >try.c <<'EOCP'
14200 #include <sys/types.h>
14201 #include <stdio.h>
14202 int main() {
14203   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
14204   printf("%lld\n", q);
14205 }
14206 EOCP
14207         set try
14208         if eval $compile; then
14209                 yyy=`$run ./try`
14210                 case "$yyy" in
14211                 12345678901)
14212                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
14213                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
14214                         echo "We will use the %lld style."
14215                         ;;
14216                 esac
14217         fi
14218 fi
14219
14220 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14221         $cat >try.c <<EOCP
14222 #include <sys/types.h>
14223 #include <stdio.h>
14224 int main() {
14225   $quadtype q = 12345678901;
14226   printf("%qd\n", q);
14227 }
14228 EOCP
14229         set try
14230         if eval $compile; then
14231                 yyy=`$run ./try`
14232                 case "$yyy" in
14233                 12345678901)
14234                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
14235                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
14236                         echo "We will use %qd."
14237                         ;;
14238                 esac
14239         fi
14240 fi
14241
14242 if $test X"$sPRId64" = X; then
14243         echo "Cannot figure out how to print 64-bit integers." >&4
14244 fi
14245
14246 $rm -f try try.*
14247
14248 fi
14249
14250 case "$sPRId64" in
14251 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
14252         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; 
14253         ;;
14254 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
14255         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; 
14256         ;;
14257 esac
14258
14259
14260 echo " "
14261 $echo "Checking the format strings to be used for Perl's internal types..." >&4
14262
14263 if $test X"$ivsize" = X8; then
14264         ivdformat="$sPRId64"
14265         uvuformat="$sPRIu64"
14266         uvoformat="$sPRIo64"
14267         uvxformat="$sPRIx64"
14268         uvXUformat="$sPRIXU64"
14269 else
14270         if $test X"$ivsize" = X"$longsize"; then
14271                 ivdformat='"ld"'
14272                 uvuformat='"lu"'
14273                 uvoformat='"lo"'
14274                 uvxformat='"lx"'
14275                 uvXUformat='"lX"'
14276         else
14277                 if $test X"$ivsize" = X"$intsize"; then
14278                         ivdformat='"d"'
14279                         uvuformat='"u"'
14280                         uvoformat='"o"'
14281                         uvxformat='"x"'
14282                         uvXUformat='"X"'
14283                 else
14284                         : far out
14285                         if $test X"$ivsize" = X"$shortsize"; then
14286                                 ivdformat='"hd"'
14287                                 uvuformat='"hu"'
14288                                 uvoformat='"ho"'
14289                                 uvxformat='"hx"'
14290                                 uvXUformat='"hX"'
14291                         fi
14292                 fi
14293         fi
14294 fi
14295
14296 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
14297         nveformat="$sPRIeldbl"
14298         nvfformat="$sPRIfldbl"
14299         nvgformat="$sPRIgldbl"
14300         nvEUformat="$sPRIEUldbl"
14301         nvFUformat="$sPRIFUldbl"
14302         nvGUformat="$sPRIGUldbl"
14303 else
14304         nveformat='"e"'
14305         nvfformat='"f"'
14306         nvgformat='"g"'
14307         nvEUformat='"E"'
14308         nvFUformat='"F"'
14309         nvGUformat='"G"'
14310 fi
14311
14312 case "$ivdformat" in
14313 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
14314     exit 1
14315     ;;
14316 esac
14317
14318
14319 echo " "
14320 $echo "Checking the format string to be used for gids..." >&4
14321
14322 case "$gidsign" in
14323 -1)     if $test X"$gidsize" = X"$ivsize"; then
14324                 gidformat="$ivdformat"
14325         else
14326                 if $test X"$gidsize" = X"$longsize"; then
14327                         gidformat='"ld"'
14328                 else
14329                         if $test X"$gidsize" = X"$intsize"; then
14330                                 gidformat='"d"'
14331                         else
14332                                 if $test X"$gidsize" = X"$shortsize"; then
14333                                         gidformat='"hd"'
14334                                 fi
14335                         fi
14336                 fi
14337         fi
14338         ;;
14339 *)      if $test X"$gidsize" = X"$uvsize"; then
14340                 gidformat="$uvuformat"
14341         else
14342                 if $test X"$gidsize" = X"$longsize"; then
14343                         gidformat='"lu"'
14344                 else
14345                         if $test X"$gidsize" = X"$intsize"; then
14346                                 gidformat='"u"'
14347                         else
14348                                 if $test X"$gidsize" = X"$shortsize"; then
14349                                         gidformat='"hu"'
14350                                 fi
14351                         fi
14352                 fi
14353         fi
14354         ;;
14355 esac
14356
14357 : see if getgroups exists
14358 set getgroups d_getgrps
14359 eval $inlibc
14360
14361 : see if setgroups exists
14362 set setgroups d_setgrps
14363 eval $inlibc
14364
14365
14366 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
14367 echo " "
14368 case "$d_getgrps$d_setgrps" in
14369 *define*)
14370         case "$groupstype" in
14371         '') dflt="$gidtype" ;;
14372         *)  dflt="$groupstype" ;;
14373         esac
14374         $cat <<EOM
14375 What type of pointer is the second argument to getgroups() and setgroups()?
14376 Usually this is the same as group ids, $gidtype, but not always.
14377
14378 EOM
14379         rp='What type pointer is the second argument to getgroups() and setgroups()?'
14380         . ./myread
14381         groupstype="$ans"
14382         ;;
14383 *)  groupstype="$gidtype";;
14384 esac
14385
14386 echo " "
14387 echo "Checking if your $make program sets \$(MAKE)..." >&4
14388 case "$make_set_make" in
14389 '')
14390         $sed 's/^X //' > testmake.mak << 'EOF'
14391 Xall:
14392 X       @echo 'maketemp="$(MAKE)"'
14393 EOF
14394         case "`$make -f testmake.mak 2>/dev/null`" in
14395         *maketemp=*) make_set_make='#' ;;
14396         *)      make_set_make="MAKE=$make" ;;
14397         esac
14398         $rm -f testmake.mak
14399         ;;
14400 esac
14401 case "$make_set_make" in
14402 '#') echo "Yup, it does.";;
14403 *) echo "Nope, it doesn't.";;
14404 esac
14405
14406 : see what type is used for mode_t
14407 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
14408 set mode_t modetype int stdio.h sys/types.h
14409 eval $typedef_ask
14410
14411 : see if stdarg is available
14412 echo " "
14413 if $test `./findhdr stdarg.h`; then
14414         echo "<stdarg.h> found." >&4
14415         valstd="$define"
14416 else
14417         echo "<stdarg.h> NOT found." >&4
14418         valstd="$undef"
14419 fi
14420
14421 : see if varags is available
14422 echo " "
14423 if $test `./findhdr varargs.h`; then
14424         echo "<varargs.h> found." >&4
14425 else
14426         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14427 fi
14428
14429 : set up the varargs testing programs
14430 $cat > varargs.c <<EOP
14431 #ifdef I_STDARG
14432 #include <stdarg.h>
14433 #endif
14434 #ifdef I_VARARGS
14435 #include <varargs.h>
14436 #endif
14437
14438 #ifdef I_STDARG
14439 int f(char *p, ...)
14440 #else
14441 int f(va_alist)
14442 va_dcl
14443 #endif
14444 {
14445         va_list ap;
14446 #ifndef I_STDARG
14447         char *p;
14448 #endif
14449 #ifdef I_STDARG
14450         va_start(ap,p);
14451 #else
14452         va_start(ap);
14453         p = va_arg(ap, char *);
14454 #endif
14455         va_end(ap);
14456 }
14457 EOP
14458 $cat > varargs <<EOP
14459 $startsh
14460 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14461         echo "true"
14462 else
14463         echo "false"
14464 fi
14465 $rm -f varargs$_o
14466 EOP
14467 chmod +x varargs
14468
14469 : now check which varargs header should be included
14470 echo " "
14471 i_varhdr=''
14472 case "$valstd" in
14473 "$define")
14474         if `./varargs I_STDARG`; then
14475                 val='stdarg.h'
14476         elif `./varargs I_VARARGS`; then
14477                 val='varargs.h'
14478         fi
14479         ;;
14480 *)
14481         if `./varargs I_VARARGS`; then
14482                 val='varargs.h'
14483         fi
14484         ;;
14485 esac
14486 case "$val" in
14487 '')
14488 echo "I could not find the definition for va_dcl... You have problems..." >&4
14489         val="$undef"; set i_stdarg; eval $setvar
14490         val="$undef"; set i_varargs; eval $setvar
14491         ;;
14492 *) 
14493         set i_varhdr
14494         eval $setvar
14495         case "$i_varhdr" in
14496         stdarg.h)
14497                 val="$define"; set i_stdarg; eval $setvar
14498                 val="$undef"; set i_varargs; eval $setvar
14499                 ;;
14500         varargs.h)
14501                 val="$undef"; set i_stdarg; eval $setvar
14502                 val="$define"; set i_varargs; eval $setvar
14503                 ;;
14504         esac
14505         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14506 esac
14507 $rm -f varargs*
14508
14509 : see if we need va_copy
14510 echo " "
14511 case "$i_stdarg" in
14512 "$define")
14513         $cat >try.c <<EOCP
14514 #include <stdarg.h>
14515 #include <stdio.h>
14516 #$i_stdlib I_STDLIB
14517 #ifdef I_STDLIB
14518 #include <stdlib.h>
14519 #endif
14520 #include <signal.h>
14521
14522 int
14523 ivfprintf(FILE *f, const char *fmt, va_list *valp)
14524 {
14525   return vfprintf(f, fmt, *valp);
14526 }
14527  
14528 int    
14529 myvfprintf(FILE *f, const  char *fmt, va_list val)
14530 {
14531   return ivfprintf(f, fmt, &val);
14532 }
14533       
14534 int
14535 myprintf(char *fmt, ...) 
14536 {
14537   va_list val;
14538   va_start(val, fmt);
14539   return myvfprintf(stdout, fmt, val); 
14540 }         
14541
14542 int
14543 main(int ac, char **av)
14544 {
14545   signal(SIGSEGV, exit);
14546
14547   myprintf("%s%cs all right, then\n", "that", '\'');                            
14548   exit(0);      
14549 }
14550 EOCP
14551         set try
14552         if eval $compile && $run ./try 2>&1 >/dev/null; then
14553                 case "`$run ./try`" in
14554                 "that's all right, then")
14555                         okay=yes
14556                         ;;
14557                 esac
14558         fi
14559         case "$okay" in
14560         yes)    echo "It seems that you don't need va_copy()." >&4
14561                 need_va_copy="$undef"
14562                 ;;
14563         *)      echo "It seems that va_copy() or similar will be needed." >&4
14564                 need_va_copy="$define"
14565                 ;;
14566         esac
14567         $rm -f try.* core core.* *.core *.core.*
14568         ;;
14569 *)      echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
14570         ;;
14571 esac
14572
14573 : define a fucntion to check prototypes
14574 $cat > protochk <<EOSH
14575 $startsh
14576 cc="$cc"
14577 optimize="$optimize"
14578 ccflags="$ccflags"
14579 prototype="$prototype"
14580 define="$define"
14581 rm=$rm
14582 EOSH
14583
14584 $cat >> protochk <<'EOSH'
14585
14586 $rm -f try.c
14587 foo="$1"
14588 shift
14589 while test $# -ge 2; do
14590         case "$1" in
14591                 $define) echo "#include <$2>" >> try.c ;;
14592                 literal) echo "$2" >> try.c ;;
14593         esac
14594     shift 2
14595 done
14596 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
14597 cat >> try.c <<'EOCP'
14598 #ifdef CAN_PROTOTYPE
14599 #define _(args) args
14600 #else
14601 #define _(args) ()
14602 #endif
14603 EOCP
14604 echo "$foo" >> try.c
14605 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
14606 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
14607 status=$?
14608 $rm -f try.[co]
14609 exit $status
14610 EOSH
14611 chmod +x protochk
14612 $eunicefix protochk
14613
14614 : see what type is used for size_t
14615 rp="What is the type used for the length parameter for string functions?"
14616 set size_t sizetype 'unsigned int' stdio.h sys/types.h
14617 eval $typedef_ask
14618
14619 : check for type of arguments to gethostbyaddr. 
14620 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
14621         case "$d_gethbyaddr" in
14622         $define)
14623                 $cat <<EOM
14624
14625 Checking to see what type of arguments are accepted by gethostbyaddr().
14626 EOM
14627                 hdrs="$define sys/types.h
14628                         $d_socket sys/socket.h 
14629                         $i_niin netinet/in.h 
14630                         $i_netdb netdb.h
14631                         $i_unistd unistd.h"
14632                 : The first arg can 'char *' or 'void *'
14633                 : The second arg is some of integral type
14634                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
14635                         for yyy in size_t long int; do
14636                                 case "$netdb_host_type" in
14637                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
14638                                         if ./protochk "$try" $hdrs; then
14639                                                 echo "Your system accepts $xxx for the first arg."
14640                                                 echo "...and $yyy for the second arg."
14641                                                 netdb_host_type="$xxx"
14642                                                 netdb_hlen_type="$yyy"
14643                                         fi
14644                                         ;;
14645                                 esac
14646                         done
14647                 done
14648                 : In case none of those worked, prompt the user.
14649                 case "$netdb_host_type" in
14650                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
14651                         dflt='char *'
14652                         . ./myread
14653                         netdb_host_type=$ans
14654                         rp='What is the type for the 2nd argument to gethostbyaddr?'
14655                         dflt="$sizetype"
14656                         . ./myread
14657                         netdb_hlen_type=$ans
14658                         ;;
14659                 esac
14660                 ;;
14661         *)      : no gethostbyaddr, so pick harmless defaults
14662                 netdb_host_type='char *'
14663                 netdb_hlen_type="$sizetype"
14664                 ;;
14665         esac
14666         # Remove the "const" if needed. -- but then we'll have a 
14667         # prototype clash!
14668         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
14669 fi
14670
14671 : check for type of argument to gethostbyname. 
14672 if test "X$netdb_name_type" = X ; then
14673         case "$d_gethbyname" in
14674         $define)
14675                 $cat <<EOM
14676
14677 Checking to see what type of argument is accepted by gethostbyname().
14678 EOM
14679                 hdrs="$define sys/types.h
14680                         $d_socket sys/socket.h 
14681                         $i_niin netinet/in.h 
14682                         $i_netdb netdb.h
14683                         $i_unistd unistd.h"
14684                 for xxx in "const char *" "char *"; do
14685                         case "$netdb_name_type" in
14686                         '')     try="extern struct hostent *gethostbyname($xxx);"
14687                                 if ./protochk "$try" $hdrs; then
14688                                         echo "Your system accepts $xxx."
14689                                         netdb_name_type="$xxx"
14690                                 fi
14691                                 ;;
14692                         esac
14693                 done
14694                 : In case none of those worked, prompt the user.
14695                 case "$netdb_name_type" in
14696                 '')     rp='What is the type for the 1st argument to gethostbyname?'
14697                         dflt='char *'
14698                         . ./myread
14699                         netdb_name_type=$ans
14700                         ;;
14701                 esac
14702                 ;;
14703         *)      : no gethostbyname, so pick harmless default
14704                 netdb_name_type='char *'
14705                 ;;
14706         esac
14707 fi
14708
14709 : check for type of 1st argument to getnetbyaddr. 
14710 if test "X$netdb_net_type" = X ; then
14711         case "$d_getnbyaddr" in
14712         $define)
14713                 $cat <<EOM
14714
14715 Checking to see what type of 1st argument is accepted by getnetbyaddr().
14716 EOM
14717                 hdrs="$define sys/types.h
14718                         $d_socket sys/socket.h 
14719                         $i_niin netinet/in.h 
14720                         $i_netdb netdb.h
14721                         $i_unistd unistd.h"
14722                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
14723                         case "$netdb_net_type" in
14724                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
14725                                 if ./protochk "$try" $hdrs; then
14726                                         echo "Your system accepts $xxx."
14727                                         netdb_net_type="$xxx"
14728                                 fi
14729                                 ;;
14730                         esac
14731                 done
14732                 : In case none of those worked, prompt the user.
14733                 case "$netdb_net_type" in
14734                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
14735                         dflt='long'
14736                         . ./myread
14737                         netdb_net_type=$ans
14738                         ;;
14739                 esac
14740                 ;;
14741         *)      : no getnetbyaddr, so pick harmless default
14742                 netdb_net_type='long'
14743                 ;;
14744         esac
14745 fi
14746 : locate the preferred pager for this system
14747 case "$pager" in
14748 '')
14749         dflt=''
14750         case "$pg" in
14751         /*) dflt=$pg;;
14752         [a-zA-Z]:/*) dflt=$pg;;
14753         esac
14754         case "$more" in
14755         /*) dflt=$more;;
14756         [a-zA-Z]:/*) dflt=$more;;
14757         esac
14758         case "$less" in
14759         /*) dflt=$less;;
14760         [a-zA-Z]:/*) dflt=$less;;
14761         esac
14762         case "$dflt" in
14763         '') dflt=/usr/ucb/more;;
14764         esac
14765         ;;
14766 *) dflt="$pager";;
14767 esac
14768 echo " "
14769 fn=f/
14770 rp='What pager is used on your system?'
14771 . ./getfile
14772 pager="$ans"
14773
14774 : see what type pids are declared as in the kernel
14775 rp="What is the type of process ids on this system?"
14776 set pid_t pidtype int stdio.h sys/types.h
14777 eval $typedef_ask
14778
14779 : Find earliest binary compatible site_perl subdirectory perl can use.
14780 case "$bincompat5005" in
14781 "$define") xs_apiversion='5.005' ;;
14782 *) xs_apiversion=$version ;;   # The current site_perl version.
14783 esac
14784 : Find earliest pure perl site_perl subdirectory perl can use.
14785 : The versioned directories started at 5.005.
14786 pm_apiversion='5.005'
14787
14788 : see if ar generates random libraries by itself
14789 echo " "
14790 echo "Checking how to generate random libraries on your machine..." >&4
14791 echo 'int bar1() { return bar2(); }' > bar1.c
14792 echo 'int bar2() { return 2; }' > bar2.c
14793 $cat > foo.c <<'EOP'
14794 int main() { printf("%d\n", bar1()); exit(0); }
14795 EOP
14796 $cc $ccflags -c bar1.c >/dev/null 2>&1
14797 $cc $ccflags -c bar2.c >/dev/null 2>&1
14798 $cc $ccflags -c foo.c >/dev/null 2>&1
14799 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
14800 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
14801         $run ./foobar >/dev/null 2>&1; then
14802         echo "$ar appears to generate random libraries itself."
14803         orderlib=false
14804         ranlib=":"
14805 elif $ar ts bar$_a >/dev/null 2>&1 &&
14806         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
14807         $run ./foobar >/dev/null 2>&1; then
14808                 echo "a table of contents needs to be added with '$ar ts'."
14809                 orderlib=false
14810                 ranlib="$ar ts"
14811 else
14812         case "$ranlib" in
14813         :) ranlib='';;
14814         '')
14815                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
14816                 $test -f $ranlib || ranlib=''
14817                 ;;
14818         esac
14819         if $test -n "$ranlib"; then
14820                 echo "your system has '$ranlib'; we'll use that."
14821                 orderlib=false
14822         else
14823                 echo "your system doesn't seem to support random libraries"
14824                 echo "so we'll use lorder and tsort to order the libraries."
14825                 orderlib=true
14826                 ranlib=":"
14827         fi
14828 fi
14829 $rm -f foo* bar* 
14830
14831 : check for type of arguments to select. 
14832 case "$selecttype" in
14833 '') case "$d_select" in
14834         $define)
14835                 echo " "
14836                 $cat <<EOM
14837 Checking to see what type of arguments are accepted by select().
14838 EOM
14839                 hdrs="$define sys/types.h
14840                         $i_systime sys/time.h 
14841                         $i_sysselct sys/select.h
14842                         $d_socket sys/socket.h"
14843                 : The first arg can be int, unsigned, or size_t
14844                 : The last arg may or may not be 'const'
14845                 val=''
14846                 : void pointer has been seen but using that
14847                 : breaks the selectminbits test
14848                 for xxx in 'fd_set *' 'int *'; do
14849                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
14850                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
14851                                         case "$val" in
14852                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
14853                                                 if ./protochk "$try" $hdrs; then
14854                                                         echo "Your system accepts $xxx."
14855                                                         val="$xxx"
14856                                                 fi
14857                                                 ;;
14858                                         esac
14859                                 done
14860                         done
14861                 done
14862                 case "$val" in
14863                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
14864                         case "$d_fd_set" in
14865                                 $define) dflt="fd_set *" ;;
14866                                 *)              dflt="int *" ;;
14867                         esac
14868                         . ./myread
14869                         val=$ans
14870                         ;;
14871                 esac
14872                 selecttype="$val"
14873                 ;;
14874         *)      : no select, so pick a harmless default
14875                 selecttype='int *'
14876                 ;;
14877         esac
14878         ;;
14879 esac
14880
14881 : check for the select 'width'
14882 case "$selectminbits" in
14883 '') case "$d_select" in
14884         $define)
14885                 $cat <<EOM
14886
14887 Checking to see on how many bits at a time your select() operates...
14888 EOM
14889                 $cat >try.c <<EOCP
14890 #include <sys/types.h>
14891 #$i_time I_TIME
14892 #$i_systime I_SYS_TIME
14893 #$i_systimek I_SYS_TIME_KERNEL
14894 #ifdef I_TIME
14895 #   include <time.h>
14896 #endif
14897 #ifdef I_SYS_TIME
14898 #   ifdef I_SYS_TIME_KERNEL
14899 #       define KERNEL
14900 #   endif
14901 #   include <sys/time.h>
14902 #   ifdef I_SYS_TIME_KERNEL
14903 #       undef KERNEL
14904 #   endif
14905 #endif
14906 #$i_sysselct I_SYS_SELECT
14907 #ifdef I_SYS_SELECT
14908 #include <sys/select.h>
14909 #endif
14910 #$d_socket HAS_SOCKET
14911 #ifdef HAS_SOCKET
14912 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
14913 #endif
14914 #include <stdio.h>
14915 $selecttype b;
14916 #define S sizeof(*(b))
14917 #define MINBITS 64
14918 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
14919 #define NBITS  (NBYTES * 8)
14920 int main() {
14921     char s[NBYTES];
14922     struct timeval t;
14923     int i;
14924     FILE* fp;
14925     int fd;
14926
14927     fclose(stdin);
14928     fp = fopen("try.c", "r");
14929     if (fp == 0)
14930       exit(1);
14931     fd = fileno(fp);
14932     if (fd < 0)
14933       exit(2);
14934     b = ($selecttype)s;
14935     for (i = 0; i < NBITS; i++)
14936         FD_SET(i, b);
14937     t.tv_sec  = 0;
14938     t.tv_usec = 0;
14939     select(fd + 1, b, 0, 0, &t);
14940     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
14941     printf("%d\n", i + 1);
14942     return 0;
14943 }
14944 EOCP
14945                 set try
14946                 if eval $compile_ok; then
14947                         selectminbits=`$run ./try`
14948                         case "$selectminbits" in
14949                         '')     cat >&4 <<EOM
14950 Cannot figure out on how many bits at a time your select() operates.
14951 I'll play safe and guess it is 32 bits.
14952 EOM
14953                                 selectminbits=32
14954                                 bits="32 bits"
14955                                 ;;
14956                         1)      bits="1 bit" ;;
14957                         *)      bits="$selectminbits bits" ;;
14958                         esac
14959                         echo "Your select() operates on $bits at a time." >&4
14960                 else
14961                         rp='What is the minimum number of bits your select() operates on?'
14962                         case "$byteorder" in
14963                         1234|12345678)  dflt=32 ;;
14964                         *)              dflt=1  ;;
14965                         esac
14966                         . ./myread
14967                         val=$ans
14968                         selectminbits="$val"
14969                 fi
14970                 $rm -f try.* try
14971                 ;;
14972         *)      : no select, so pick a harmless default
14973                 selectminbits='32'
14974                 ;;
14975         esac
14976         ;;
14977 esac
14978
14979 : Trace out the files included by signal.h, then look for SIGxxx names.
14980 : Remove SIGARRAYSIZE used by HPUX.
14981 : Remove SIGSTKSIZE used by Linux.
14982 : Remove SIGSTKSZ used by Posix.
14983 : Remove SIGTYP void lines used by OS2.
14984 : Some cpps, like os390, dont give the file name anywhere
14985 if [ "X$fieldn" = X ]; then
14986         : Just make some guesses.  We check them later.
14987         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
14988 else
14989         xxx=`echo '#include <signal.h>' |
14990         $cppstdin $cppminus $cppflags 2>/dev/null |
14991         $grep '^[       ]*#.*include' | 
14992         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sed 's!\\\\\\\\!/!g' | $sort | $uniq`
14993 fi
14994 : Check this list of files to be sure we have parsed the cpp output ok.
14995 : This will also avoid potentially non-existent files, such 
14996 : as ../foo/bar.h
14997 xxxfiles=''
14998 for xx in $xxx /dev/null ; do
14999         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
15000 done
15001 : If we have found no files, at least try signal.h
15002 case "$xxxfiles" in
15003 '')     xxxfiles=`./findhdr signal.h` ;;
15004 esac
15005 xxx=`awk '
15006 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
15007         print substr($2, 4, 20)
15008 }
15009 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
15010         print substr($3, 4, 20)
15011 }' $xxxfiles`
15012 : Append some common names just in case the awk scan failed.
15013 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
15014 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
15015 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
15016 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
15017 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
15018
15019 : generate a few handy files for later
15020 $cat > signal.c <<'EOCP'
15021 #include <sys/types.h>
15022 #include <signal.h>
15023 #include <stdio.h>
15024 int main() {
15025
15026 /* Strange style to avoid deeply-nested #if/#else/#endif */
15027 #ifndef NSIG
15028 #  ifdef _NSIG
15029 #    define NSIG (_NSIG)
15030 #  endif
15031 #endif
15032
15033 #ifndef NSIG
15034 #  ifdef SIGMAX
15035 #    define NSIG (SIGMAX+1)
15036 #  endif
15037 #endif
15038
15039 #ifndef NSIG
15040 #  ifdef SIG_MAX
15041 #    define NSIG (SIG_MAX+1)
15042 #  endif
15043 #endif
15044
15045 #ifndef NSIG
15046 #  ifdef MAXSIG
15047 #    define NSIG (MAXSIG+1)
15048 #  endif
15049 #endif
15050
15051 #ifndef NSIG
15052 #  ifdef MAX_SIG
15053 #    define NSIG (MAX_SIG+1)
15054 #  endif
15055 #endif
15056
15057 #ifndef NSIG
15058 #  ifdef SIGARRAYSIZE
15059 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
15060 #  endif
15061 #endif
15062
15063 #ifndef NSIG
15064 #  ifdef _sys_nsig
15065 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
15066 #  endif
15067 #endif
15068
15069 /* Default to some arbitrary number that's big enough to get most
15070    of the common signals.
15071 */
15072 #ifndef NSIG
15073 #    define NSIG 50
15074 #endif
15075
15076 printf("NSIG %d\n", NSIG);
15077
15078 #ifndef JUST_NSIG
15079
15080 EOCP
15081
15082 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
15083 {
15084         printf "#ifdef SIG"; printf $1; printf "\n"
15085         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
15086         printf $1; printf ");\n"
15087         printf "#endif\n"
15088 }
15089 END {
15090         printf "#endif /* JUST_NSIG */\n";
15091         printf "exit(0);\n}\n";
15092 }
15093 ' >>signal.c
15094 $cat >signal.awk <<'EOP'
15095 BEGIN { ndups = 0 }
15096 $1 ~ /^NSIG$/ { nsig = $2 }
15097 ($1 !~ /^NSIG$/) && (NF == 2) {
15098     if ($2 > maxsig) { maxsig = $2 }
15099     if (sig_name[$2]) {
15100         dup_name[ndups] = $1
15101         dup_num[ndups] = $2
15102         ndups++ 
15103     }
15104     else {
15105         sig_name[$2] = $1
15106         sig_num[$2] = $2
15107     }
15108 }
15109 END { 
15110     if (nsig == 0) {
15111         nsig = maxsig + 1
15112     }
15113     printf("NSIG %d\n", nsig);
15114     for (n = 1; n < nsig; n++) {
15115         if (sig_name[n]) {
15116             printf("%s %d\n", sig_name[n], sig_num[n])
15117         }
15118         else {
15119             printf("NUM%d %d\n", n, n) 
15120         }
15121     }
15122     for (n = 0; n < ndups; n++) {
15123         printf("%s %d\n", dup_name[n], dup_num[n])
15124     }
15125 }
15126 EOP
15127 $cat >signal_cmd <<EOS
15128 $startsh
15129 if $test -s signal.lst; then
15130     echo "Using your existing signal.lst file"
15131         exit 0
15132 fi
15133 xxx="$xxx"
15134 EOS
15135 $cat >>signal_cmd <<'EOS'
15136
15137 set signal
15138 if eval $compile_ok; then
15139         $run ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15140 else
15141         echo "(I can't seem be able to compile the whole test program)" >&4
15142         echo "(I'll try it in little pieces.)" >&4
15143         set signal -DJUST_NSIG
15144         if eval $compile_ok; then
15145                 $run ./signal$_exe > signal.nsg
15146                 $cat signal.nsg
15147         else
15148                 echo "I can't seem to figure out how many signals you have." >&4
15149                 echo "Guessing 50." >&4
15150                 echo 'NSIG 50' > signal.nsg
15151         fi
15152         : Now look at all the signal names, one at a time.
15153         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
15154                 $cat > signal.c <<EOCP
15155 #include <sys/types.h>
15156 #include <signal.h>
15157 #include <stdio.h>
15158 int main() {
15159 printf("$xx %d\n", SIG${xx});
15160 return 0;
15161 }
15162 EOCP
15163                 set signal
15164                 if eval $compile; then
15165                         echo "SIG${xx} found."
15166                         $run ./signal$_exe  >> signal.ls1
15167                 else
15168                         echo "SIG${xx} NOT found."
15169                 fi
15170         done
15171         if $test -s signal.ls1; then
15172                 $cat signal.nsg signal.ls1 |
15173                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15174         fi
15175
15176 fi
15177 if $test -s signal.lst; then
15178         :
15179 else
15180         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
15181         echo 'kill -l' >signal
15182         set X `csh -f <signal`
15183         $rm -f signal
15184         shift
15185         case $# in
15186         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
15187         esac
15188         echo $@ | $tr ' ' $trnl | \
15189             $awk '{ printf "%s %d\n", $1, ++s; }
15190                   END { printf "NSIG %d\n", ++s }' >signal.lst
15191 fi
15192 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
15193 EOS
15194 chmod a+x signal_cmd
15195 $eunicefix signal_cmd
15196
15197 : generate list of signal names
15198 echo " "
15199 case "$sig_name_init" in
15200 '') doinit=yes ;;
15201 *)  case "$sig_num_init" in
15202     ''|*,*) doinit=yes ;;
15203     esac ;;
15204 esac
15205 case "$doinit" in
15206 yes)
15207         echo "Generating a list of signal names and numbers..." >&4
15208         . ./signal_cmd
15209         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
15210         sig_name=`$awk 'BEGIN { printf "ZERO " }
15211                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
15212         sig_num=`$awk  'BEGIN { printf "0 " }
15213                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
15214         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
15215                              !/^NSIG/   { printf "\"%s\", ", $1 }
15216                              END        { printf "0\n" }' signal.lst`
15217         sig_num_init=`$awk  'BEGIN      { printf "0, " }
15218                              !/^NSIG/   { printf "%d, ", $2}
15219                              END        { printf "0\n"}' signal.lst`
15220         ;;
15221 esac
15222 echo "The following $sig_count signals are available:"
15223 echo " "
15224 echo $sig_name | $awk \
15225 'BEGIN { linelen = 0 }
15226 {
15227         for (i = 1; i <= NF; i++) {
15228                 name = "SIG" $i " "
15229                 linelen = linelen + length(name)
15230                 if (linelen > 70) {
15231                         printf "\n"
15232                         linelen = length(name)
15233                 }
15234                 printf "%s", name
15235         }
15236         printf "\n"
15237 }'
15238 sig_size=`echo $sig_name | awk '{print NF}'`
15239 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
15240
15241 echo " "
15242 case "$sizetype" in
15243 *_t) zzz="$sizetype"    ;;
15244 *)   zzz="filesize"     ;;
15245 esac
15246 echo "Checking the size of $zzz..." >&4 
15247 cat > try.c <<EOCP
15248 #include <sys/types.h>
15249 #include <stdio.h>
15250 int main() {
15251     printf("%d\n", (int)sizeof($sizetype));
15252     exit(0);
15253 }
15254 EOCP
15255 set try
15256 if eval $compile_ok; then
15257         yyy=`$run ./try`
15258         case "$yyy" in
15259         '')     sizesize=4
15260                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
15261                 ;;
15262         *)      sizesize=$yyy
15263                 echo "Your $zzz size is $sizesize bytes."
15264                 ;;
15265         esac
15266 else
15267         sizesize=4
15268         echo "(I can't compile the test program--guessing $sizesize.)" >&4
15269 fi
15270
15271
15272 : check for socklen_t
15273 echo " "
15274 echo "Checking to see if you have socklen_t..." >&4
15275 $cat >try.c <<EOCP
15276 #include <sys/types.h>
15277 #$d_socket HAS_SOCKET
15278 #ifdef HAS_SOCKET
15279 #include <sys/socket.h>
15280 #endif
15281 int main() { socklen_t x = 16; }
15282 EOCP
15283 set try
15284 if eval $compile; then
15285         val="$define"
15286         echo "You have socklen_t."
15287 else
15288         val="$undef"
15289         echo "You do not have socklen_t."
15290         case "$sizetype" in
15291         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
15292         esac
15293 fi
15294 $rm -f try try.*
15295 set d_socklen_t
15296 eval $setvar
15297
15298 : see if this is a socks.h system
15299 set socks.h i_socks
15300 eval $inhdr
15301
15302 : check for type of the size argument to socket calls
15303 case "$d_socket" in
15304 "$define")
15305         $cat <<EOM
15306
15307 Checking to see what type is the last argument of accept().
15308 EOM
15309         yyy=''
15310         case "$d_socklen_t" in
15311         "$define") yyy="$yyy socklen_t"
15312         esac
15313         yyy="$yyy $sizetype int long unsigned"
15314         for xxx in $yyy; do
15315                 case "$socksizetype" in
15316                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
15317                         case "$usesocks" in
15318                         "$define")
15319                                 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
15320                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15321                                         socksizetype="$xxx"
15322                                 fi
15323                                 ;;
15324                         *)      if ./protochk "$try"  $i_systypes sys/types.h $d_socket sys/socket.h; then
15325                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15326                                         socksizetype="$xxx"
15327                                 fi
15328                                 ;;
15329                         esac
15330                         ;;
15331                 esac
15332         done
15333 : In case none of those worked, prompt the user.
15334         case "$socksizetype" in
15335         '')     rp='What is the type for socket address structure sizes?'
15336                 dflt='int'
15337                 . ./myread
15338                 socksizetype=$ans
15339                 ;;
15340         esac
15341         ;;
15342 *)      : no sockets, so pick relatively harmless default
15343         socksizetype='int'
15344         ;;
15345 esac
15346
15347 : see what type is used for signed size_t
15348 set ssize_t ssizetype int stdio.h sys/types.h
15349 eval $typedef
15350 dflt="$ssizetype"
15351 $cat > try.c <<EOM
15352 #include <stdio.h>
15353 #include <sys/types.h>
15354 #define Size_t $sizetype
15355 #define SSize_t $dflt
15356 int main()
15357 {
15358         if (sizeof(Size_t) == sizeof(SSize_t))
15359                 printf("$dflt\n");
15360         else if (sizeof(Size_t) == sizeof(int))
15361                 printf("int\n");
15362         else 
15363                 printf("long\n");
15364         exit(0);
15365 }
15366 EOM
15367 echo " "
15368 set try
15369 if eval $compile_ok && $run ./try > /dev/null; then
15370         ssizetype=`$run ./try`
15371         echo "I'll be using $ssizetype for functions returning a byte count." >&4
15372 else
15373         $cat >&4 <<EOM
15374 Help! I can't compile and run the ssize_t test program: please enlighten me!
15375 (This is probably a misconfiguration in your system or libraries, and
15376 you really ought to fix it.  Still, I'll try anyway.)
15377
15378 I need a type that is the same size as $sizetype, but is guaranteed to
15379 be signed.  Common values are ssize_t, int and long.
15380
15381 EOM
15382         rp="What signed type is the same size as $sizetype?"
15383         . ./myread
15384         ssizetype="$ans"
15385 fi
15386 $rm -f try try.*
15387
15388 : see what type of char stdio uses.
15389 echo " "
15390 echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
15391 if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
15392         echo "Your stdio uses unsigned chars." >&4
15393         stdchar="unsigned char"
15394 else
15395         echo "Your stdio uses signed chars." >&4
15396         stdchar="char"
15397 fi
15398 $rm -f stdioh
15399
15400
15401
15402 : see if time exists
15403 echo " "
15404 if test "X$d_time" = X -o X"$timetype" = X; then
15405     if set time val -f d_time; eval $csym; $val; then
15406                 echo 'time() found.' >&4
15407                 val="$define"
15408                 rp="What is the type returned by time() on this system?"
15409                 set time_t timetype long stdio.h sys/types.h
15410                 eval $typedef_ask
15411     else
15412                 echo 'time() not found, hope that will do.' >&4
15413                 val="$undef"
15414                 timetype='int';
15415     fi
15416     set d_time
15417     eval $setvar
15418 fi
15419
15420 : see what type uids are declared as in the kernel
15421 echo " "
15422 echo "Looking for the type for user ids returned by getuid()."
15423 set uid_t uidtype xxx stdio.h sys/types.h
15424 eval $typedef
15425 case "$uidtype" in
15426 xxx)
15427         xxx=`./findhdr sys/user.h`
15428         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
15429         case $1 in
15430         unsigned) dflt="$1 $2" ;;
15431         *) dflt="$1" ;;
15432         esac
15433         ;;
15434 *) dflt="$uidtype";;
15435 esac
15436 case "$uidtype" in
15437 uid_t)  echo "uid_t found." ;;
15438 *)      rp="What is the type for user ids returned by getuid()?"
15439         . ./myread
15440         uidtype="$ans"
15441         ;;
15442 esac
15443
15444 echo " "
15445 case "$uidtype" in
15446 *_t) zzz="$uidtype"     ;;
15447 *)   zzz="uid"          ;;
15448 esac
15449 echo "Checking the size of $zzz..." >&4 
15450 cat > try.c <<EOCP
15451 #include <sys/types.h>
15452 #include <stdio.h>
15453 int main() {
15454     printf("%d\n", (int)sizeof($uidtype));
15455     exit(0);
15456 }
15457 EOCP
15458 set try
15459 if eval $compile_ok; then
15460         yyy=`$run ./try`
15461         case "$yyy" in
15462         '')     uidsize=4
15463                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
15464                 ;;
15465         *)      uidsize=$yyy
15466                 echo "Your $zzz is $uidsize bytes long."
15467                 ;;
15468         esac
15469 else
15470         uidsize=4
15471         echo "(I can't compile the test program--guessing $uidsize.)" >&4
15472 fi
15473
15474 echo " "
15475 case "$uidtype" in
15476 *_t) zzz="$uidtype"     ;;
15477 *)   zzz="uid"          ;;
15478 esac
15479 echo "Checking the sign of $zzz..." >&4
15480 cat > try.c <<EOCP
15481 #include <sys/types.h>
15482 #include <stdio.h>
15483 int main() {
15484         $uidtype foo = -1;
15485         if (foo < 0)
15486                 printf("-1\n");
15487         else
15488                 printf("1\n");
15489 }
15490 EOCP
15491 set try
15492 if eval $compile; then
15493         yyy=`$run ./try`
15494         case "$yyy" in
15495         '')     uidsign=1
15496                 echo "(I can't execute the test program--guessing unsigned.)" >&4
15497                 ;;
15498         *)      uidsign=$yyy
15499                 case "$uidsign" in
15500                  1) echo "Your $zzz is unsigned." ;;
15501                 -1) echo "Your $zzz is signed."   ;;
15502                 esac
15503                 ;;
15504         esac
15505 else
15506         uidsign=1
15507         echo "(I can't compile the test program--guessing unsigned.)" >&4
15508 fi
15509
15510
15511
15512 echo " "
15513 $echo "Checking the format string to be used for uids..." >&4
15514
15515 case "$uidsign" in
15516 -1)     if $test X"$uidsize" = X"$ivsize"; then
15517                 uidformat="$ivdformat"
15518         else
15519                 if $test X"$uidsize" = X"$longsize"; then
15520                         uidformat='"ld"'
15521                 else
15522                         if $test X"$uidsize" = X"$intsize"; then
15523                                 uidformat='"d"'
15524                         else
15525                                 if $test X"$uidsize" = X"$shortsize"; then
15526                                         uidformat='"hd"'
15527                                 fi
15528                         fi
15529                 fi
15530         fi
15531         ;;
15532 *)      if $test X"$uidsize" = X"$uvsize"; then
15533                 uidformat="$uvuformat"
15534         else
15535                 if $test X"$uidsize" = X"$longsize"; then
15536                         uidformat='"lu"'
15537                 else
15538                         if $test X"$uidsize" = X"$intsize"; then
15539                                 uidformat='"u"'
15540                         else
15541                                 if $test X"$uidsize" = X"$shortsize"; then
15542                                         uidformat='"hu"'
15543                                 fi
15544                         fi
15545                 fi
15546         fi
15547         ;;
15548 esac
15549
15550 : determine compiler compiler
15551 case "$yacc" in
15552 '')
15553         dflt=yacc;;
15554 *)
15555         dflt="$yacc";;
15556 esac
15557 echo " "
15558 comp='yacc'
15559 if $test -f "$byacc"; then
15560         dflt="$byacc"
15561         comp="byacc or $comp"
15562 fi
15563 if $test -f "$bison"; then
15564         comp="$comp or bison -y"
15565 fi
15566 rp="Which compiler compiler ($comp) shall I use?"
15567 . ./myread
15568 yacc="$ans"
15569 case "$yacc" in
15570 *bis*)
15571         case "$yacc" in
15572         *-y*) ;;
15573         *)
15574                 yacc="$yacc -y"
15575                 echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
15576                 ;;
15577         esac
15578         ;;
15579 esac
15580
15581 : see if fcntl.h is there
15582 val=''
15583 set fcntl.h val
15584 eval $inhdr
15585
15586 : see if we can include fcntl.h
15587 case "$val" in
15588 "$define")
15589         echo " "
15590         if $h_fcntl; then
15591                 val="$define"
15592                 echo "We'll be including <fcntl.h>." >&4
15593         else
15594                 val="$undef"
15595                 if $h_sysfile; then
15596         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
15597                 else
15598                         echo "We won't be including <fcntl.h>." >&4
15599                 fi
15600         fi
15601         ;;
15602 *)
15603         h_fcntl=false
15604         val="$undef"
15605         ;;
15606 esac
15607 set i_fcntl
15608 eval $setvar
15609
15610 : see if this is a iconv.h system
15611 set iconv.h i_iconv
15612 eval $inhdr
15613
15614 : see if this is a ieeefp.h system
15615 set ieeefp.h i_ieeefp
15616 eval $inhdr
15617
15618 : see if this is a libutil.h system
15619 set libutil.h i_libutil
15620 eval $inhdr
15621
15622 : see if locale.h is available
15623 set locale.h i_locale
15624 eval $inhdr
15625
15626 : see if mach cthreads are available
15627 if test "X$usethreads" = "X$define"; then
15628         set mach/cthreads.h i_machcthr
15629         eval $inhdr
15630 else
15631         i_machcthr="$undef"
15632 fi
15633
15634
15635
15636 : see if this is a math.h system
15637 set math.h i_math
15638 eval $inhdr
15639
15640 : see if this is a mntent.h system
15641 set mntent.h i_mntent
15642 eval $inhdr
15643
15644 : see if ndbm.h is available
15645 set ndbm.h t_ndbm
15646 eval $inhdr
15647 case "$t_ndbm" in
15648 $define)
15649         : see if dbm_open exists
15650         set dbm_open d_dbm_open
15651         eval $inlibc
15652         case "$d_dbm_open" in
15653         $undef)
15654                 t_ndbm="$undef"
15655                 echo "We won't be including <ndbm.h>"
15656                 ;;
15657         esac
15658         ;;
15659 esac
15660 val="$t_ndbm"
15661 set i_ndbm
15662 eval $setvar
15663
15664 : see if net/errno.h is available
15665 val=''
15666 set net/errno.h val
15667 eval $inhdr
15668
15669 : Unfortunately, it causes problems on some systems.  Arrgh.
15670 case "$val" in
15671 $define)
15672         cat > try.c <<'EOM'
15673 #include <stdio.h>
15674 #include <errno.h>
15675 #include <net/errno.h>
15676 int func()
15677 {
15678         return ENOTSOCK;
15679 }
15680 EOM
15681         if $cc $ccflags -c try.c >/dev/null 2>&1; then
15682                 echo "We'll be including <net/errno.h>." >&4
15683         else
15684                 echo "We won't be including <net/errno.h>." >&4
15685                 val="$undef"
15686         fi
15687         $rm -f try.* try
15688         ;;
15689 esac
15690 set i_neterrno
15691 eval $setvar
15692
15693 : see if netinet/tcp.h is available
15694 set netinet/tcp.h i_netinettcp
15695 eval $inhdr
15696
15697 : see if this is a poll.h system
15698 set poll.h i_poll
15699 eval $inhdr
15700
15701 : see if this is a prot.h system
15702 set prot.h i_prot
15703 eval $inhdr
15704
15705 echo " "
15706 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
15707 $cat <<'EOSH' > Cppsym.know
15708 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
15709 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
15710 alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
15711 ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
15712 BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
15713 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
15714 bull c cadmus clipper CMU COFF COMPILER_VERSION
15715 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
15716 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
15717 Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
15718 FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
15719 GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
15720 H3050R H3050RX hbullx20 hcx host_mips
15721 hp200 hp300 hp700 HP700 hp800 hp9000
15722 hp9000s200 hp9000s300 hp9000s400 hp9000s500
15723 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
15724 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
15725 IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
15726 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
15727 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
15728 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
15729 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
15730 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
15731 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
15732 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
15733 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
15734 MATH_HAS_NO_SIDE_EFFECTS
15735 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
15736 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
15737 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
15738 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
15739 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
15740 NetBSD news1500 news1700 news1800 news1900 news3700
15741 news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
15742 ns32016 ns32332 ns32k nsc32000
15743 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
15744 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
15745 pc532 pdp11 PGC PIC plexus PORTAR posix
15746 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
15747 POSIX_C_SOURCE POSIX_SOURCE POWER
15748 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
15749 riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
15750 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
15751 sony sony_news sonyrisc sparc sparclite spectrum
15752 stardent stdc STDC_EXT stratos sun sun3 sun386
15753 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
15754 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
15755 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
15756 sysV68 sysV88 Tek4132 Tek4300 titan
15757 TM3200 TM5400 TM5600
15758 tower tower32 tower32_200 tower32_600 tower32_700
15759 tower32_800 tower32_850 tss
15760 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
15761 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
15762 unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
15763 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
15764 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
15765 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
15766 z8000
15767 EOSH
15768 # Maybe put other stuff here too.
15769 cat <<EOSH >>Cppsym.know
15770 $osname
15771 EOSH
15772 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
15773 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
15774 $cat Cppsym.know > Cppsym.c
15775 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
15776 $rm -f Cppsym.a Cppsym.b Cppsym.c
15777 cat <<EOSH > Cppsym
15778 $startsh
15779 if $test \$# -gt 0; then
15780     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
15781     if $test -s Cppsym.got; then
15782         $rm -f Cppsym.got
15783         exit 0
15784     fi
15785     $rm -f Cppsym.got
15786     exit 1
15787 else
15788     $tr " " "$trnl" | ./Cppsym.try
15789     exit 0
15790 fi
15791 EOSH
15792 chmod +x Cppsym
15793 $eunicefix Cppsym
15794 cat <<EOSH > Cppsym.try
15795 $startsh
15796 cat <<'EOCP' > try.c
15797 #include <stdio.h>
15798 int main() {
15799 EOCP
15800 $awk \\
15801 EOSH
15802 cat <<'EOSH' >> Cppsym.try
15803 'length($1) > 0 {
15804     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
15805     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
15806     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
15807     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
15808 }'       >> try.c
15809 echo 'return 0;}' >> try.c
15810 EOSH
15811 cat <<EOSH >> Cppsym.try
15812 ccflags="$ccflags"
15813 case "$osname-$gccversion" in
15814 irix-) ccflags="\$ccflags -woff 1178" ;;
15815 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
15816 esac
15817 $cc -o try $optimize \$ccflags $ldflags try.c $libs && $run ./try
15818 EOSH
15819 chmod +x Cppsym.try
15820 $eunicefix Cppsym.try
15821 ./Cppsym < Cppsym.know > Cppsym.true
15822 : now check the C compiler for additional symbols
15823 postprocess_cc_v=''
15824 case "$osname" in
15825 aix) postprocess_cc_v="|$tr , ' '" ;;
15826 esac
15827 $cat >ccsym <<EOS
15828 $startsh
15829 $cat >tmp.c <<EOF
15830 extern int foo;
15831 EOF
15832 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
15833 do
15834         case "\$i" in
15835         -D*) echo "\$i" | $sed 's/^-D//';;
15836         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
15837         esac
15838 done
15839 $rm -f try.c
15840 EOS
15841 postprocess_cc_v=''
15842 chmod +x ccsym
15843 $eunicefix ccsym
15844 ./ccsym > ccsym1.raw
15845 if $test -s ccsym1.raw; then
15846        $sort ccsym1.raw | $uniq >ccsym.raw
15847 else
15848        mv ccsym1.raw ccsym.raw
15849 fi
15850
15851 $awk '/\=/ { print $0; next }
15852         { print $0"=1" }' ccsym.raw >ccsym.list
15853 $awk '/\=/ { print $0; next }
15854         { print $0"=1" }' Cppsym.true >ccsym.true
15855 $comm -13 ccsym.true ccsym.list >ccsym.own
15856 $comm -12 ccsym.true ccsym.list >ccsym.com
15857 $comm -23 ccsym.true ccsym.list >ccsym.cpp
15858 also=''
15859 if $test -z ccsym.raw; then
15860         echo "Your C compiler doesn't seem to define any symbols!" >&4
15861         echo " "
15862         echo "However, your C preprocessor defines the following symbols:"
15863         $cat Cppsym.true
15864         ccsymbols=''
15865         cppsymbols=`$cat Cppsym.true`
15866         cppsymbols=`echo $cppsymbols`
15867         cppccsymbols="$cppsymbols"
15868 else
15869         if $test -s ccsym.com; then
15870                 echo "Your C compiler and pre-processor define these symbols:"
15871                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
15872                 also='also '
15873                 symbols='ones'
15874                 cppccsymbols=`$cat ccsym.com`
15875                 cppccsymbols=`echo $cppccsymbols`
15876                 $test "$silent" || sleep 1
15877         fi
15878         if $test -s ccsym.cpp; then
15879                 $test "$also" && echo " "
15880                 echo "Your C pre-processor ${also}defines the following symbols:"
15881                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
15882                 also='further '
15883                 cppsymbols=`$cat ccsym.cpp`
15884                 cppsymbols=`echo $cppsymbols`
15885                 $test "$silent" || sleep 1
15886         fi
15887         if $test -s ccsym.own; then
15888                 $test "$also" && echo " "
15889                 echo "Your C compiler ${also}defines the following cpp symbols:"
15890                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
15891                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
15892                 ccsymbols=`$cat ccsym.own`
15893                 ccsymbols=`echo $ccsymbols`
15894                 $test "$silent" || sleep 1
15895         fi
15896 fi
15897 $rm -f ccsym* Cppsym.*
15898
15899 : see if this is a termio system
15900 val="$undef"
15901 val2="$undef"
15902 val3="$undef"
15903 if $test `./findhdr termios.h`; then
15904         set tcsetattr i_termios
15905         eval $inlibc
15906         val3="$i_termios"
15907 fi
15908 echo " "
15909 case "$val3" in
15910 "$define") echo "You have POSIX termios.h... good!" >&4;;
15911 *) if ./Cppsym pyr; then
15912                 case "`/bin/universe`" in
15913                 ucb) if $test `./findhdr sgtty.h`; then
15914                                 val2="$define"
15915                                 echo "<sgtty.h> found." >&4
15916                         else
15917                                 echo "System is pyramid with BSD universe."
15918                                 echo "<sgtty.h> not found--you could have problems." >&4
15919                         fi;;
15920                 *) if $test `./findhdr termio.h`; then
15921                                 val="$define"
15922                                 echo "<termio.h> found." >&4
15923                         else
15924                                 echo "System is pyramid with USG universe."
15925                                 echo "<termio.h> not found--you could have problems." >&4
15926                         fi;;
15927                 esac
15928         elif ./usg; then
15929                 if $test `./findhdr termio.h`; then
15930                         echo "<termio.h> found." >&4
15931                         val="$define"
15932                 elif $test `./findhdr sgtty.h`; then
15933                         echo "<sgtty.h> found." >&4
15934                         val2="$define"
15935                 else
15936 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
15937                 fi
15938         else
15939                 if $test `./findhdr sgtty.h`; then
15940                         echo "<sgtty.h> found." >&4
15941                         val2="$define"
15942                 elif $test `./findhdr termio.h`; then
15943                         echo "<termio.h> found." >&4
15944                         val="$define"
15945                 else
15946 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
15947                 fi
15948         fi;;
15949 esac
15950 set i_termio; eval $setvar
15951 val=$val2; set i_sgtty; eval $setvar
15952 val=$val3; set i_termios; eval $setvar
15953
15954 : see if this is a shadow.h system
15955 set shadow.h i_shadow
15956 eval $inhdr
15957
15958 : see if stddef is available
15959 set stddef.h i_stddef
15960 eval $inhdr
15961
15962 : see if this is a sunmath.h system
15963 set sunmath.h i_sunmath
15964 eval $inhdr
15965
15966 : see if sys/access.h is available
15967 set sys/access.h i_sysaccess
15968 eval $inhdr
15969
15970 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
15971 set sys/filio.h i_sysfilio
15972 eval $inhdr
15973 echo " "
15974 if $test `./findhdr sys/ioctl.h`; then
15975         val="$define"
15976         echo '<sys/ioctl.h> found.' >&4
15977 else
15978         val="$undef"
15979         if $test $i_sysfilio = "$define"; then
15980             echo '<sys/ioctl.h> NOT found.' >&4
15981         else
15982                 $test $i_sgtty = "$define" && xxx="sgtty.h"
15983                 $test $i_termio = "$define" && xxx="termio.h"
15984                 $test $i_termios = "$define" && xxx="termios.h"
15985 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
15986         fi
15987 fi
15988 set i_sysioctl
15989 eval $setvar
15990
15991 : see if socket ioctl defs are in sys/sockio.h
15992 echo " "
15993 xxx=`./findhdr sys/sockio.h`
15994 if $test "$xxx"; then
15995         if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
15996                 val="$define"
15997                 echo "You have socket ioctls defined in <sys/sockio.h>." >&4
15998         else
15999                 val="$undef"
16000                 echo "No socket ioctls found in <sys/sockio.h>." >&4
16001         fi
16002 else
16003         val="$undef"
16004         $cat <<EOM
16005 <sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
16006 EOM
16007 fi
16008 set i_syssockio
16009 eval $setvar
16010
16011
16012 : see if this is a syslog.h system
16013 set syslog.h i_syslog
16014 eval $inhdr
16015
16016
16017 : see if this is a sys/mode.h system
16018 set sys/mode.h i_sysmode
16019 eval $inhdr
16020
16021 : see if sys/resource.h has to be included
16022 set sys/resource.h i_sysresrc
16023 eval $inhdr
16024
16025 : see if sys/security.h is available
16026 set sys/security.h i_syssecrt
16027 eval $inhdr
16028
16029 : see if this is a sys/statvfs.h system
16030 set sys/statvfs.h i_sysstatvfs
16031 eval $inhdr
16032
16033 : see if this is a sys/un.h system
16034 set sys/un.h i_sysun
16035 eval $inhdr
16036
16037
16038 : see if this is a sys/utsname.h system
16039 set sys/utsname.h i_sysutsname
16040 eval $inhdr
16041
16042 : see if this is a syswait system
16043 set sys/wait.h i_syswait
16044 eval $inhdr
16045
16046 : see if this is a ustat.h system
16047 set ustat.h i_ustat
16048 eval $inhdr
16049
16050 : see if this is an utime system
16051 set utime.h i_utime
16052 eval $inhdr
16053
16054 : see if this is a values.h system
16055 set values.h i_values
16056 eval $inhdr
16057
16058 : see if this is a vfork system
16059 case "$d_vfork" in
16060 "$define")
16061         set vfork.h i_vfork
16062         eval $inhdr
16063         ;;
16064 *)
16065         i_vfork="$undef"
16066         ;;
16067 esac
16068
16069 : see if gdbm.h is available
16070 set gdbm.h t_gdbm
16071 eval $inhdr
16072 case "$t_gdbm" in
16073 $define)
16074         : see if gdbm_open exists
16075         set gdbm_open d_gdbm_open
16076         eval $inlibc
16077         case "$d_gdbm_open" in
16078         $undef)
16079                 t_gdbm="$undef"
16080                 echo "We won't be including <gdbm.h>"
16081                 ;;
16082         esac
16083         ;;
16084 esac
16085 val="$t_gdbm"
16086 set i_gdbm
16087 eval $setvar
16088
16089 echo " "
16090 echo "Looking for extensions..." >&4
16091 : If we are using the old config.sh, known_extensions may contain
16092 : old or inaccurate or duplicate values.
16093 known_extensions=''
16094 nonxs_extensions=''
16095 : We do not use find because it might not be available.
16096 : We do not just use MANIFEST because the user may have dropped
16097 : some additional extensions into the source tree and expect them
16098 : to be built.
16099
16100 : Function to recursively find available extensions, ignoring DynaLoader
16101 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
16102 find_extensions='
16103     for xxx in *; do
16104        case "$xxx" in
16105            DynaLoader|dynaload) ;;
16106            *)
16107            if $test -f $xxx/$xxx.xs; then
16108                known_extensions="$known_extensions $1$xxx";
16109            elif $test -f $xxx/Makefile.PL; then
16110                nonxs_extensions="$nonxs_extensions $1$xxx";
16111            else
16112                if $test -d $xxx -a $# -lt 10; then
16113                    set $1$xxx/ $*;
16114                    cd $xxx;
16115                    eval $find_extensions;
16116                    cd ..;
16117                    shift;
16118                fi;
16119            fi
16120            ;;
16121        esac;
16122     done'
16123 tdir=`pwd`
16124 cd $rsrc/ext
16125 set X
16126 shift
16127 eval $find_extensions
16128 set X $nonxs_extensions
16129 shift
16130 nonxs_extensions="$*"
16131 set X $known_extensions
16132 shift
16133 known_extensions="$*"
16134 cd $tdir
16135
16136 : Now see which are supported on this system.
16137 avail_ext=''
16138 for xxx in $known_extensions ; do
16139         case "$xxx" in
16140         DB_File|db_file)
16141                 case "$i_db" in
16142                 $define) avail_ext="$avail_ext $xxx" ;;
16143                 esac
16144                 ;;
16145         GDBM_File|gdbm_fil)
16146                 case "$i_gdbm" in 
16147                 $define) avail_ext="$avail_ext $xxx" ;;
16148                 esac
16149                 ;;
16150         NDBM_File|ndbm_fil)
16151                 case "$i_ndbm" in
16152                 $define)
16153                     case "$osname-$use64bitint" in
16154                     hpux-define)
16155                         case "$libs" in
16156                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
16157                         esac
16158                         ;;
16159                     *) avail_ext="$avail_ext $xxx" ;;
16160                     esac
16161                     ;;
16162                 esac
16163                 ;;
16164         ODBM_File|odbm_fil) 
16165                 case "${i_dbm}${i_rpcsvcdbm}" in
16166                 *"${define}"*)
16167                     case "$osname-$use64bitint" in
16168                     hpux-define)
16169                         case "$libs" in
16170                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
16171                         esac
16172                         ;;
16173                     *) avail_ext="$avail_ext $xxx" ;;
16174                     esac
16175                     ;;
16176                 esac
16177                 ;;
16178         POSIX|posix)
16179                 case "$useposix" in
16180                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16181                 esac
16182                 ;;
16183         Opcode|opcode)
16184                 case "$useopcode" in
16185                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16186                 esac
16187                 ;;
16188         Socket|socket)
16189                 case "$d_socket" in 
16190                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16191                 esac
16192                 ;;
16193         Sys/Syslog|sys/syslog)
16194                 : XXX syslog requires socket
16195                 case "$d_socket" in 
16196                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16197                 esac
16198                 ;;
16199         Thread|thread)
16200                 case "$usethreads" in
16201                 true|$define|y)
16202                         case "$useithreads" in
16203                         $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;;
16204                         esac
16205                 esac
16206                 ;;
16207         IPC/SysV|ipc/sysv)
16208                 : XXX Do we need a useipcsysv variable here
16209                 case "${d_msg}${d_sem}${d_shm}" in 
16210                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
16211                 esac
16212                 ;;
16213         *)      avail_ext="$avail_ext $xxx"
16214                 ;;
16215         esac
16216 done
16217
16218 set X $avail_ext
16219 shift
16220 avail_ext="$*"
16221
16222 : Now see which nonxs extensions are supported on this system.
16223 : For now assume all are.
16224 nonxs_ext=''
16225 for xxx in $nonxs_extensions ; do
16226         case "$xxx" in
16227         *)      nonxs_ext="$nonxs_ext $xxx"
16228                 ;;
16229         esac
16230 done
16231
16232 set X $nonxs_ext
16233 shift
16234 nonxs_ext="$*"
16235
16236 case $usedl in
16237 $define)
16238         $cat <<EOM
16239 A number of extensions are supplied with $package.  You may choose to
16240 compile these extensions for dynamic loading (the default), compile
16241 them into the $package executable (static loading), or not include
16242 them at all.  Answer "none" to include no extensions.
16243 Note that DynaLoader is always built and need not be mentioned here.
16244
16245 EOM
16246         case "$dynamic_ext" in
16247         '') dflt="$avail_ext" ;;
16248         *)      dflt="$dynamic_ext"
16249                 # Perhaps we are reusing an old out-of-date config.sh.
16250                 case "$hint" in
16251                 previous)
16252                         if test X"$dynamic_ext" != X"$avail_ext"; then
16253                                 $cat <<EOM
16254 NOTICE:  Your previous config.sh list may be incorrect. 
16255 The extensions now available to you are 
16256         ${avail_ext}
16257 but the default list from your previous config.sh is
16258         ${dynamic_ext} 
16259
16260 EOM
16261                         fi
16262                         ;;
16263                 esac
16264                 ;;
16265         esac
16266         case "$dflt" in
16267         '')     dflt=none;;
16268         esac
16269         rp="What extensions do you wish to load dynamically?"
16270         . ./myread
16271         case "$ans" in
16272         none) dynamic_ext=' ' ;;
16273         *) dynamic_ext="$ans" ;;
16274         esac
16275
16276         case "$static_ext" in
16277         '')
16278                 : Exclude those already listed in dynamic linking
16279                 dflt=''
16280                 for xxx in $avail_ext; do
16281                         case " $dynamic_ext " in
16282                         *" $xxx "*) ;;
16283                         *) dflt="$dflt $xxx" ;;
16284                         esac
16285                 done
16286                 set X $dflt
16287                 shift
16288                 dflt="$*"
16289                 ;;
16290         *)  dflt="$static_ext" 
16291                 ;;
16292         esac
16293
16294         case "$dflt" in
16295         '')     dflt=none;;
16296         esac
16297         rp="What extensions do you wish to load statically?"
16298         . ./myread
16299         case "$ans" in
16300         none) static_ext=' ' ;;
16301         *) static_ext="$ans" ;;
16302         esac
16303         ;;
16304 *)
16305         $cat <<EOM
16306 A number of extensions are supplied with $package.  Answer "none" 
16307 to include no extensions. 
16308 Note that DynaLoader is always built and need not be mentioned here.
16309
16310 EOM
16311         case "$static_ext" in
16312         '') dflt="$avail_ext" ;;
16313         *)      dflt="$static_ext"
16314                 # Perhaps we are reusing an old out-of-date config.sh.
16315                 case "$hint" in
16316                 previous)
16317                         if test X"$static_ext" != X"$avail_ext"; then
16318                                 $cat <<EOM
16319 NOTICE:  Your previous config.sh list may be incorrect. 
16320 The extensions now available to you are 
16321         ${avail_ext}
16322 but the default list from your previous config.sh is
16323         ${static_ext} 
16324
16325 EOM
16326                         fi
16327                         ;;
16328                 esac
16329                 ;;
16330         esac
16331         : Exclude those that are not xs extensions
16332         case "$dflt" in
16333         '')     dflt=none;;
16334         esac
16335         rp="What extensions do you wish to include?"
16336         . ./myread
16337         case "$ans" in
16338         none) static_ext=' ' ;;
16339         *) static_ext="$ans" ;;
16340         esac
16341         ;;
16342 esac
16343
16344 set X $dynamic_ext $static_ext $nonxs_ext
16345 shift
16346 extensions="$*"
16347
16348 : Remove libraries needed only for extensions
16349 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
16350 : The exception is SunOS 4.x, which needs them.
16351 case "${osname}X${osvers}" in
16352 sunos*X4*)
16353     perllibs="$libs"
16354     ;;
16355 *) case "$usedl" in
16356     $define|true|[yY]*)
16357             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'` 
16358             shift
16359             perllibs="$*"
16360             ;;
16361     *)  perllibs="$libs"
16362             ;;
16363     esac
16364     ;;
16365 esac
16366
16367 : Remove build directory name from cppstdin so it can be used from
16368 : either the present location or the final installed location.
16369 echo " "
16370 : Get out of the UU directory to get correct path name.
16371 cd ..
16372 case "$cppstdin" in
16373 `pwd`/cppstdin)
16374         echo "Stripping down cppstdin path name"
16375         cppstdin=cppstdin
16376         ;;
16377 esac
16378 cd UU
16379
16380 : end of configuration questions
16381 echo " "
16382 echo "End of configuration questions."
16383 echo " "
16384
16385 : back to where it started
16386 if test -d ../UU; then
16387         cd ..
16388 fi
16389
16390 : configuration may be patched via a 'config.over' file
16391 if $test -f config.over; then
16392         echo " "
16393         dflt=y
16394         rp='I see a config.over file.  Do you wish to load it?'
16395         . UU/myread
16396         case "$ans" in
16397         n*) echo "OK, I'll ignore it.";;
16398         *)      . ./config.over
16399                 echo "Configuration override changes have been loaded."
16400                 ;;
16401         esac
16402 fi
16403
16404 : in case they want portability, strip down executable paths
16405 case "$d_portable" in
16406 "$define")
16407         echo " "
16408         echo "Stripping down executable paths..." >&4
16409         for file in $loclist $trylist; do
16410                 eval temp=\$$file
16411                 eval $file=`basename $temp`
16412         done
16413         ;;
16414 esac
16415
16416 : create config.sh file
16417 echo " "
16418 echo "Creating config.sh..." >&4
16419 $spitshell <<EOT >config.sh
16420 $startsh
16421 #
16422 # This file was produced by running the Configure script. It holds all the
16423 # definitions figured out by Configure. Should you modify one of these values,
16424 # do not forget to propagate your changes by running "Configure -der". You may
16425 # instead choose to run each of the .SH files by yourself, or "Configure -S".
16426 #
16427
16428 # Package name      : $package
16429 # Source directory  : $src
16430 # Configuration time: $cf_time
16431 # Configured by     : $cf_by
16432 # Target system     : $myuname
16433
16434 Author='$Author'
16435 Date='$Date'
16436 Header='$Header'
16437 Id='$Id'
16438 Locker='$Locker'
16439 Log='$Log'
16440 Mcc='$Mcc'
16441 RCSfile='$RCSfile'
16442 Revision='$Revision'
16443 Source='$Source'
16444 State='$State'
16445 _a='$_a'
16446 _exe='$_exe'
16447 _o='$_o'
16448 afs='$afs'
16449 afsroot='$afsroot'
16450 alignbytes='$alignbytes'
16451 ansi2knr='$ansi2knr'
16452 aphostname='$aphostname'
16453 api_revision='$api_revision'
16454 api_subversion='$api_subversion'
16455 api_version='$api_version'
16456 api_versionstring='$api_versionstring'
16457 ar='$ar'
16458 archlib='$archlib'
16459 archlibexp='$archlibexp'
16460 archname64='$archname64'
16461 archname='$archname'
16462 archobjs='$archobjs'
16463 awk='$awk'
16464 baserev='$baserev'
16465 bash='$bash'
16466 bin='$bin'
16467 bincompat5005='$bincompat5005'
16468 binexp='$binexp'
16469 bison='$bison'
16470 byacc='$byacc'
16471 byteorder='$byteorder'
16472 c='$c'
16473 castflags='$castflags'
16474 cat='$cat'
16475 cc='$cc'
16476 cccdlflags='$cccdlflags'
16477 ccdlflags='$ccdlflags'
16478 ccflags='$ccflags'
16479 ccflags_uselargefiles='$ccflags_uselargefiles'
16480 ccname='$ccname'
16481 ccsymbols='$ccsymbols'
16482 ccversion='$ccversion'
16483 cf_by='$cf_by'
16484 cf_email='$cf_email'
16485 cf_time='$cf_time'
16486 charsize='$charsize'
16487 chgrp='$chgrp'
16488 chmod='$chmod'
16489 chown='$chown'
16490 clocktype='$clocktype'
16491 comm='$comm'
16492 compress='$compress'
16493 contains='$contains'
16494 cp='$cp'
16495 cpio='$cpio'
16496 cpp='$cpp'
16497 cpp_stuff='$cpp_stuff'
16498 cppccsymbols='$cppccsymbols'
16499 cppflags='$cppflags'
16500 cpplast='$cpplast'
16501 cppminus='$cppminus'
16502 cpprun='$cpprun'
16503 cppstdin='$cppstdin'
16504 cppsymbols='$cppsymbols'
16505 cryptlib='$cryptlib'
16506 csh='$csh'
16507 d_Gconvert='$d_Gconvert'
16508 d_PRIEUldbl='$d_PRIEUldbl'
16509 d_PRIFUldbl='$d_PRIFUldbl'
16510 d_PRIGUldbl='$d_PRIGUldbl'
16511 d_PRIXU64='$d_PRIXU64'
16512 d_PRId64='$d_PRId64'
16513 d_PRIeldbl='$d_PRIeldbl'
16514 d_PRIfldbl='$d_PRIfldbl'
16515 d_PRIgldbl='$d_PRIgldbl'
16516 d_PRIi64='$d_PRIi64'
16517 d_PRIo64='$d_PRIo64'
16518 d_PRIu64='$d_PRIu64'
16519 d_PRIx64='$d_PRIx64'
16520 d_SCNfldbl='$d_SCNfldbl'
16521 d__fwalk='$d__fwalk'
16522 d_access='$d_access'
16523 d_accessx='$d_accessx'
16524 d_alarm='$d_alarm'
16525 d_archlib='$d_archlib'
16526 d_atolf='$d_atolf'
16527 d_atoll='$d_atoll'
16528 d_attribut='$d_attribut'
16529 d_bcmp='$d_bcmp'
16530 d_bcopy='$d_bcopy'
16531 d_bincompat5005='$d_bincompat5005'
16532 d_bsd='$d_bsd'
16533 d_bsdgetpgrp='$d_bsdgetpgrp'
16534 d_bsdsetpgrp='$d_bsdsetpgrp'
16535 d_bzero='$d_bzero'
16536 d_casti32='$d_casti32'
16537 d_castneg='$d_castneg'
16538 d_charvspr='$d_charvspr'
16539 d_chown='$d_chown'
16540 d_chroot='$d_chroot'
16541 d_chsize='$d_chsize'
16542 d_closedir='$d_closedir'
16543 d_cmsghdr_s='$d_cmsghdr_s'
16544 d_const='$d_const'
16545 d_crypt='$d_crypt'
16546 d_csh='$d_csh'
16547 d_cuserid='$d_cuserid'
16548 d_dbl_dig='$d_dbl_dig'
16549 d_dbminitproto='$d_dbminitproto'
16550 d_difftime='$d_difftime'
16551 d_dirnamlen='$d_dirnamlen'
16552 d_dlerror='$d_dlerror'
16553 d_dlopen='$d_dlopen'
16554 d_dlsymun='$d_dlsymun'
16555 d_dosuid='$d_dosuid'
16556 d_drand48proto='$d_drand48proto'
16557 d_dup2='$d_dup2'
16558 d_eaccess='$d_eaccess'
16559 d_endgrent='$d_endgrent'
16560 d_endhent='$d_endhent'
16561 d_endnent='$d_endnent'
16562 d_endpent='$d_endpent'
16563 d_endpwent='$d_endpwent'
16564 d_endsent='$d_endsent'
16565 d_eofnblk='$d_eofnblk'
16566 d_eunice='$d_eunice'
16567 d_fchmod='$d_fchmod'
16568 d_fchown='$d_fchown'
16569 d_fcntl='$d_fcntl'
16570 d_fcntl_can_lock='$d_fcntl_can_lock'
16571 d_fd_macros='$d_fd_macros'
16572 d_fd_set='$d_fd_set'
16573 d_fds_bits='$d_fds_bits'
16574 d_fgetpos='$d_fgetpos'
16575 d_flexfnam='$d_flexfnam'
16576 d_flock='$d_flock'
16577 d_flockproto='$d_flockproto'
16578 d_fork='$d_fork'
16579 d_fpathconf='$d_fpathconf'
16580 d_fpos64_t='$d_fpos64_t'
16581 d_frexpl='$d_frexpl'
16582 d_fs_data_s='$d_fs_data_s'
16583 d_fseeko='$d_fseeko'
16584 d_fsetpos='$d_fsetpos'
16585 d_fstatfs='$d_fstatfs'
16586 d_fstatvfs='$d_fstatvfs'
16587 d_fsync='$d_fsync'
16588 d_ftello='$d_ftello'
16589 d_ftime='$d_ftime'
16590 d_getcwd='$d_getcwd'
16591 d_getespwnam='$d_getespwnam'
16592 d_getfsstat='$d_getfsstat'
16593 d_getgrent='$d_getgrent'
16594 d_getgrps='$d_getgrps'
16595 d_gethbyaddr='$d_gethbyaddr'
16596 d_gethbyname='$d_gethbyname'
16597 d_gethent='$d_gethent'
16598 d_gethname='$d_gethname'
16599 d_gethostprotos='$d_gethostprotos'
16600 d_getitimer='$d_getitimer'
16601 d_getlogin='$d_getlogin'
16602 d_getmnt='$d_getmnt'
16603 d_getmntent='$d_getmntent'
16604 d_getnbyaddr='$d_getnbyaddr'
16605 d_getnbyname='$d_getnbyname'
16606 d_getnent='$d_getnent'
16607 d_getnetprotos='$d_getnetprotos'
16608 d_getpagsz='$d_getpagsz'
16609 d_getpbyname='$d_getpbyname'
16610 d_getpbynumber='$d_getpbynumber'
16611 d_getpent='$d_getpent'
16612 d_getpgid='$d_getpgid'
16613 d_getpgrp2='$d_getpgrp2'
16614 d_getpgrp='$d_getpgrp'
16615 d_getppid='$d_getppid'
16616 d_getprior='$d_getprior'
16617 d_getprotoprotos='$d_getprotoprotos'
16618 d_getprpwnam='$d_getprpwnam'
16619 d_getpwent='$d_getpwent'
16620 d_getsbyname='$d_getsbyname'
16621 d_getsbyport='$d_getsbyport'
16622 d_getsent='$d_getsent'
16623 d_getservprotos='$d_getservprotos'
16624 d_getspnam='$d_getspnam'
16625 d_gettimeod='$d_gettimeod'
16626 d_gnulibc='$d_gnulibc'
16627 d_grpasswd='$d_grpasswd'
16628 d_hasmntopt='$d_hasmntopt'
16629 d_htonl='$d_htonl'
16630 d_iconv='$d_iconv'
16631 d_index='$d_index'
16632 d_inetaton='$d_inetaton'
16633 d_int64_t='$d_int64_t'
16634 d_isascii='$d_isascii'
16635 d_isnan='$d_isnan'
16636 d_isnanl='$d_isnanl'
16637 d_killpg='$d_killpg'
16638 d_lchown='$d_lchown'
16639 d_ldbl_dig='$d_ldbl_dig'
16640 d_link='$d_link'
16641 d_locconv='$d_locconv'
16642 d_lockf='$d_lockf'
16643 d_longdbl='$d_longdbl'
16644 d_longlong='$d_longlong'
16645 d_lseekproto='$d_lseekproto'
16646 d_lstat='$d_lstat'
16647 d_madvise='$d_madvise'
16648 d_mblen='$d_mblen'
16649 d_mbstowcs='$d_mbstowcs'
16650 d_mbtowc='$d_mbtowc'
16651 d_memchr='$d_memchr'
16652 d_memcmp='$d_memcmp'
16653 d_memcpy='$d_memcpy'
16654 d_memmove='$d_memmove'
16655 d_memset='$d_memset'
16656 d_mkdir='$d_mkdir'
16657 d_mkdtemp='$d_mkdtemp'
16658 d_mkfifo='$d_mkfifo'
16659 d_mkstemp='$d_mkstemp'
16660 d_mkstemps='$d_mkstemps'
16661 d_mktime='$d_mktime'
16662 d_mmap='$d_mmap'
16663 d_modfl='$d_modfl'
16664 d_modfl_pow32_bug='$d_modfl_pow32_bug'
16665 d_mprotect='$d_mprotect'
16666 d_msg='$d_msg'
16667 d_msg_ctrunc='$d_msg_ctrunc'
16668 d_msg_dontroute='$d_msg_dontroute'
16669 d_msg_oob='$d_msg_oob'
16670 d_msg_peek='$d_msg_peek'
16671 d_msg_proxy='$d_msg_proxy'
16672 d_msgctl='$d_msgctl'
16673 d_msgget='$d_msgget'
16674 d_msghdr_s='$d_msghdr_s'
16675 d_msgrcv='$d_msgrcv'
16676 d_msgsnd='$d_msgsnd'
16677 d_msync='$d_msync'
16678 d_munmap='$d_munmap'
16679 d_mymalloc='$d_mymalloc'
16680 d_nice='$d_nice'
16681 d_nv_preserves_uv='$d_nv_preserves_uv'
16682 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
16683 d_off64_t='$d_off64_t'
16684 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
16685 d_oldpthreads='$d_oldpthreads'
16686 d_oldsock='$d_oldsock'
16687 d_open3='$d_open3'
16688 d_pathconf='$d_pathconf'
16689 d_pause='$d_pause'
16690 d_perl_otherlibdirs='$d_perl_otherlibdirs'
16691 d_phostname='$d_phostname'
16692 d_pipe='$d_pipe'
16693 d_poll='$d_poll'
16694 d_portable='$d_portable'
16695 d_pthread_yield='$d_pthread_yield'
16696 d_pwage='$d_pwage'
16697 d_pwchange='$d_pwchange'
16698 d_pwclass='$d_pwclass'
16699 d_pwcomment='$d_pwcomment'
16700 d_pwexpire='$d_pwexpire'
16701 d_pwgecos='$d_pwgecos'
16702 d_pwpasswd='$d_pwpasswd'
16703 d_pwquota='$d_pwquota'
16704 d_qgcvt='$d_qgcvt'
16705 d_quad='$d_quad'
16706 d_readdir='$d_readdir'
16707 d_readlink='$d_readlink'
16708 d_readv='$d_readv'
16709 d_realpath='$d_realpath'
16710 d_recvmsg='$d_recvmsg'
16711 d_rename='$d_rename'
16712 d_rewinddir='$d_rewinddir'
16713 d_rmdir='$d_rmdir'
16714 d_safebcpy='$d_safebcpy'
16715 d_safemcpy='$d_safemcpy'
16716 d_sanemcmp='$d_sanemcmp'
16717 d_sbrkproto='$d_sbrkproto'
16718 d_sched_yield='$d_sched_yield'
16719 d_scm_rights='$d_scm_rights'
16720 d_seekdir='$d_seekdir'
16721 d_select='$d_select'
16722 d_sem='$d_sem'
16723 d_semctl='$d_semctl'
16724 d_semctl_semid_ds='$d_semctl_semid_ds'
16725 d_semctl_semun='$d_semctl_semun'
16726 d_semget='$d_semget'
16727 d_semop='$d_semop'
16728 d_sendmsg='$d_sendmsg'
16729 d_setegid='$d_setegid'
16730 d_seteuid='$d_seteuid'
16731 d_setgrent='$d_setgrent'
16732 d_setgrps='$d_setgrps'
16733 d_sethent='$d_sethent'
16734 d_setitimer='$d_setitimer'
16735 d_setlinebuf='$d_setlinebuf'
16736 d_setlocale='$d_setlocale'
16737 d_setnent='$d_setnent'
16738 d_setpent='$d_setpent'
16739 d_setpgid='$d_setpgid'
16740 d_setpgrp2='$d_setpgrp2'
16741 d_setpgrp='$d_setpgrp'
16742 d_setprior='$d_setprior'
16743 d_setproctitle='$d_setproctitle'
16744 d_setpwent='$d_setpwent'
16745 d_setregid='$d_setregid'
16746 d_setresgid='$d_setresgid'
16747 d_setresuid='$d_setresuid'
16748 d_setreuid='$d_setreuid'
16749 d_setrgid='$d_setrgid'
16750 d_setruid='$d_setruid'
16751 d_setsent='$d_setsent'
16752 d_setsid='$d_setsid'
16753 d_setvbuf='$d_setvbuf'
16754 d_sfio='$d_sfio'
16755 d_shm='$d_shm'
16756 d_shmat='$d_shmat'
16757 d_shmatprototype='$d_shmatprototype'
16758 d_shmctl='$d_shmctl'
16759 d_shmdt='$d_shmdt'
16760 d_shmget='$d_shmget'
16761 d_sigaction='$d_sigaction'
16762 d_sigprocmask='$d_sigprocmask'
16763 d_sigsetjmp='$d_sigsetjmp'
16764 d_sockatmark='$d_sockatmark'
16765 d_sockatmarkproto='$d_sockatmarkproto'
16766 d_socket='$d_socket'
16767 d_socklen_t='$d_socklen_t'
16768 d_sockpair='$d_sockpair'
16769 d_socks5_init='$d_socks5_init'
16770 d_sqrtl='$d_sqrtl'
16771 d_sresgproto='$d_sresgproto'
16772 d_sresuproto='$d_sresuproto'
16773 d_statblks='$d_statblks'
16774 d_statfs_f_flags='$d_statfs_f_flags'
16775 d_statfs_s='$d_statfs_s'
16776 d_statvfs='$d_statvfs'
16777 d_stdio_cnt_lval='$d_stdio_cnt_lval'
16778 d_stdio_ptr_lval='$d_stdio_ptr_lval'
16779 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
16780 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
16781 d_stdio_stream_array='$d_stdio_stream_array'
16782 d_stdiobase='$d_stdiobase'
16783 d_stdstdio='$d_stdstdio'
16784 d_strchr='$d_strchr'
16785 d_strcoll='$d_strcoll'
16786 d_strctcpy='$d_strctcpy'
16787 d_strerrm='$d_strerrm'
16788 d_strerror='$d_strerror'
16789 d_strftime='$d_strftime'
16790 d_strtod='$d_strtod'
16791 d_strtol='$d_strtol'
16792 d_strtold='$d_strtold'
16793 d_strtoll='$d_strtoll'
16794 d_strtoq='$d_strtoq'
16795 d_strtoul='$d_strtoul'
16796 d_strtoull='$d_strtoull'
16797 d_strtouq='$d_strtouq'
16798 d_strxfrm='$d_strxfrm'
16799 d_suidsafe='$d_suidsafe'
16800 d_symlink='$d_symlink'
16801 d_syscall='$d_syscall'
16802 d_syscallproto='$d_syscallproto'
16803 d_sysconf='$d_sysconf'
16804 d_sysernlst='$d_sysernlst'
16805 d_syserrlst='$d_syserrlst'
16806 d_system='$d_system'
16807 d_tcgetpgrp='$d_tcgetpgrp'
16808 d_tcsetpgrp='$d_tcsetpgrp'
16809 d_telldir='$d_telldir'
16810 d_telldirproto='$d_telldirproto'
16811 d_time='$d_time'
16812 d_times='$d_times'
16813 d_truncate='$d_truncate'
16814 d_tzname='$d_tzname'
16815 d_u32align='$d_u32align'
16816 d_ualarm='$d_ualarm'
16817 d_umask='$d_umask'
16818 d_uname='$d_uname'
16819 d_union_semun='$d_union_semun'
16820 d_usleep='$d_usleep'
16821 d_usleepproto='$d_usleepproto'
16822 d_ustat='$d_ustat'
16823 d_vendorarch='$d_vendorarch'
16824 d_vendorbin='$d_vendorbin'
16825 d_vendorlib='$d_vendorlib'
16826 d_vfork='$d_vfork'
16827 d_void_closedir='$d_void_closedir'
16828 d_voidsig='$d_voidsig'
16829 d_voidtty='$d_voidtty'
16830 d_volatile='$d_volatile'
16831 d_vprintf='$d_vprintf'
16832 d_wait4='$d_wait4'
16833 d_waitpid='$d_waitpid'
16834 d_wcstombs='$d_wcstombs'
16835 d_wctomb='$d_wctomb'
16836 d_writev='$d_writev'
16837 d_xenix='$d_xenix'
16838 date='$date'
16839 db_hashtype='$db_hashtype'
16840 db_prefixtype='$db_prefixtype'
16841 db_version_major='$db_version_major'
16842 db_version_minor='$db_version_minor'
16843 db_version_patch='$db_version_patch'
16844 defvoidused='$defvoidused'
16845 direntrytype='$direntrytype'
16846 dlext='$dlext'
16847 dlsrc='$dlsrc'
16848 doublesize='$doublesize'
16849 drand01='$drand01'
16850 dynamic_ext='$dynamic_ext'
16851 eagain='$eagain'
16852 ebcdic='$ebcdic'
16853 echo='$echo'
16854 egrep='$egrep'
16855 emacs='$emacs'
16856 eunicefix='$eunicefix'
16857 exe_ext='$exe_ext'
16858 expr='$expr'
16859 extensions='$extensions'
16860 fflushNULL='$fflushNULL'
16861 fflushall='$fflushall'
16862 find='$find'
16863 firstmakefile='$firstmakefile'
16864 flex='$flex'
16865 fpossize='$fpossize'
16866 fpostype='$fpostype'
16867 freetype='$freetype'
16868 from='$from'
16869 full_ar='$full_ar'
16870 full_csh='$full_csh'
16871 full_sed='$full_sed'
16872 gccosandvers='$gccosandvers'
16873 gccversion='$gccversion'
16874 gidformat='$gidformat'
16875 gidsign='$gidsign'
16876 gidsize='$gidsize'
16877 gidtype='$gidtype'
16878 glibpth='$glibpth'
16879 grep='$grep'
16880 groupcat='$groupcat'
16881 groupstype='$groupstype'
16882 gzip='$gzip'
16883 h_fcntl='$h_fcntl'
16884 h_sysfile='$h_sysfile'
16885 hint='$hint'
16886 hostcat='$hostcat'
16887 i16size='$i16size'
16888 i16type='$i16type'
16889 i32size='$i32size'
16890 i32type='$i32type'
16891 i64size='$i64size'
16892 i64type='$i64type'
16893 i8size='$i8size'
16894 i8type='$i8type'
16895 i_arpainet='$i_arpainet'
16896 i_bsdioctl='$i_bsdioctl'
16897 i_db='$i_db'
16898 i_dbm='$i_dbm'
16899 i_dirent='$i_dirent'
16900 i_dld='$i_dld'
16901 i_dlfcn='$i_dlfcn'
16902 i_fcntl='$i_fcntl'
16903 i_float='$i_float'
16904 i_gdbm='$i_gdbm'
16905 i_grp='$i_grp'
16906 i_iconv='$i_iconv'
16907 i_ieeefp='$i_ieeefp'
16908 i_inttypes='$i_inttypes'
16909 i_libutil='$i_libutil'
16910 i_limits='$i_limits'
16911 i_locale='$i_locale'
16912 i_machcthr='$i_machcthr'
16913 i_malloc='$i_malloc'
16914 i_math='$i_math'
16915 i_memory='$i_memory'
16916 i_mntent='$i_mntent'
16917 i_ndbm='$i_ndbm'
16918 i_netdb='$i_netdb'
16919 i_neterrno='$i_neterrno'
16920 i_netinettcp='$i_netinettcp'
16921 i_niin='$i_niin'
16922 i_poll='$i_poll'
16923 i_prot='$i_prot'
16924 i_pthread='$i_pthread'
16925 i_pwd='$i_pwd'
16926 i_rpcsvcdbm='$i_rpcsvcdbm'
16927 i_sfio='$i_sfio'
16928 i_sgtty='$i_sgtty'
16929 i_shadow='$i_shadow'
16930 i_socks='$i_socks'
16931 i_stdarg='$i_stdarg'
16932 i_stddef='$i_stddef'
16933 i_stdlib='$i_stdlib'
16934 i_string='$i_string'
16935 i_sunmath='$i_sunmath'
16936 i_sysaccess='$i_sysaccess'
16937 i_sysdir='$i_sysdir'
16938 i_sysfile='$i_sysfile'
16939 i_sysfilio='$i_sysfilio'
16940 i_sysin='$i_sysin'
16941 i_sysioctl='$i_sysioctl'
16942 i_syslog='$i_syslog'
16943 i_sysmman='$i_sysmman'
16944 i_sysmode='$i_sysmode'
16945 i_sysmount='$i_sysmount'
16946 i_sysndir='$i_sysndir'
16947 i_sysparam='$i_sysparam'
16948 i_sysresrc='$i_sysresrc'
16949 i_syssecrt='$i_syssecrt'
16950 i_sysselct='$i_sysselct'
16951 i_syssockio='$i_syssockio'
16952 i_sysstat='$i_sysstat'
16953 i_sysstatfs='$i_sysstatfs'
16954 i_sysstatvfs='$i_sysstatvfs'
16955 i_systime='$i_systime'
16956 i_systimek='$i_systimek'
16957 i_systimes='$i_systimes'
16958 i_systypes='$i_systypes'
16959 i_sysuio='$i_sysuio'
16960 i_sysun='$i_sysun'
16961 i_sysutsname='$i_sysutsname'
16962 i_sysvfs='$i_sysvfs'
16963 i_syswait='$i_syswait'
16964 i_termio='$i_termio'
16965 i_termios='$i_termios'
16966 i_time='$i_time'
16967 i_unistd='$i_unistd'
16968 i_ustat='$i_ustat'
16969 i_utime='$i_utime'
16970 i_values='$i_values'
16971 i_varargs='$i_varargs'
16972 i_varhdr='$i_varhdr'
16973 i_vfork='$i_vfork'
16974 ignore_versioned_solibs='$ignore_versioned_solibs'
16975 inc_version_list='$inc_version_list'
16976 inc_version_list_init='$inc_version_list_init'
16977 incpath='$incpath'
16978 inews='$inews'
16979 installarchlib='$installarchlib'
16980 installbin='$installbin'
16981 installman1dir='$installman1dir'
16982 installman3dir='$installman3dir'
16983 installprefix='$installprefix'
16984 installprefixexp='$installprefixexp'
16985 installprivlib='$installprivlib'
16986 installscript='$installscript'
16987 installsitearch='$installsitearch'
16988 installsitebin='$installsitebin'
16989 installsitelib='$installsitelib'
16990 installstyle='$installstyle'
16991 installusrbinperl='$installusrbinperl'
16992 installvendorarch='$installvendorarch'
16993 installvendorbin='$installvendorbin'
16994 installvendorlib='$installvendorlib'
16995 intsize='$intsize'
16996 issymlink='$issymlink'
16997 ivdformat='$ivdformat'
16998 ivsize='$ivsize'
16999 ivtype='$ivtype'
17000 known_extensions='$known_extensions'
17001 ksh='$ksh'
17002 ld='$ld'
17003 lddlflags='$lddlflags'
17004 ldflags='$ldflags'
17005 ldflags_uselargefiles='$ldflags_uselargefiles'
17006 ldlibpthname='$ldlibpthname'
17007 less='$less'
17008 lib_ext='$lib_ext'
17009 libc='$libc'
17010 libperl='$libperl'
17011 libpth='$libpth'
17012 libs='$libs'
17013 libsdirs='$libsdirs'
17014 libsfiles='$libsfiles'
17015 libsfound='$libsfound'
17016 libspath='$libspath'
17017 libswanted='$libswanted'
17018 libswanted_uselargefiles='$libswanted_uselargefiles'
17019 line='$line'
17020 lint='$lint'
17021 lkflags='$lkflags'
17022 ln='$ln'
17023 lns='$lns'
17024 locincpth='$locincpth'
17025 loclibpth='$loclibpth'
17026 longdblsize='$longdblsize'
17027 longlongsize='$longlongsize'
17028 longsize='$longsize'
17029 lp='$lp'
17030 lpr='$lpr'
17031 ls='$ls'
17032 lseeksize='$lseeksize'
17033 lseektype='$lseektype'
17034 mail='$mail'
17035 mailx='$mailx'
17036 make='$make'
17037 make_set_make='$make_set_make'
17038 mallocobj='$mallocobj'
17039 mallocsrc='$mallocsrc'
17040 malloctype='$malloctype'
17041 man1dir='$man1dir'
17042 man1direxp='$man1direxp'
17043 man1ext='$man1ext'
17044 man3dir='$man3dir'
17045 man3direxp='$man3direxp'
17046 man3ext='$man3ext'
17047 mips_type='$mips_type'
17048 mkdir='$mkdir'
17049 mmaptype='$mmaptype'
17050 modetype='$modetype'
17051 more='$more'
17052 multiarch='$multiarch'
17053 mv='$mv'
17054 myarchname='$myarchname'
17055 mydomain='$mydomain'
17056 myhostname='$myhostname'
17057 myuname='$myuname'
17058 n='$n'
17059 need_va_copy='$need_va_copy'
17060 netdb_hlen_type='$netdb_hlen_type'
17061 netdb_host_type='$netdb_host_type'
17062 netdb_name_type='$netdb_name_type'
17063 netdb_net_type='$netdb_net_type'
17064 nm='$nm'
17065 nm_opt='$nm_opt'
17066 nm_so_opt='$nm_so_opt'
17067 nonxs_ext='$nonxs_ext'
17068 nroff='$nroff'
17069 nvEUformat='$nvEUformat'
17070 nvFUformat='$nvFUformat'
17071 nvGUformat='$nvGUformat'
17072 nveformat='$nveformat'
17073 nvfformat='$nvfformat'
17074 nvgformat='$nvgformat'
17075 nvsize='$nvsize'
17076 nvtype='$nvtype'
17077 o_nonblock='$o_nonblock'
17078 obj_ext='$obj_ext'
17079 old_pthread_create_joinable='$old_pthread_create_joinable'
17080 optimize='$optimize'
17081 orderlib='$orderlib'
17082 osname='$osname'
17083 osvers='$osvers'
17084 otherlibdirs='$otherlibdirs'
17085 package='$package'
17086 pager='$pager'
17087 passcat='$passcat'
17088 patchlevel='$patchlevel'
17089 path_sep='$path_sep'
17090 perl5='$perl5'
17091 perl='$perl'
17092 perl_patchlevel='$perl_patchlevel'
17093 perladmin='$perladmin'
17094 perllibs='$perllibs'
17095 perlpath='$perlpath'
17096 pg='$pg'
17097 phostname='$phostname'
17098 pidtype='$pidtype'
17099 plibpth='$plibpth'
17100 pm_apiversion='$pm_apiversion'
17101 pmake='$pmake'
17102 pr='$pr'
17103 prefix='$prefix'
17104 prefixexp='$prefixexp'
17105 privlib='$privlib'
17106 privlibexp='$privlibexp'
17107 prototype='$prototype'
17108 ptrsize='$ptrsize'
17109 quadkind='$quadkind'
17110 quadtype='$quadtype'
17111 randbits='$randbits'
17112 randfunc='$randfunc'
17113 randseedtype='$randseedtype'
17114 ranlib='$ranlib'
17115 rd_nodata='$rd_nodata'
17116 revision='$revision'
17117 rm='$rm'
17118 rmail='$rmail'
17119 run='$run'
17120 runnm='$runnm'
17121 sPRIEUldbl='$sPRIEUldbl'
17122 sPRIFUldbl='$sPRIFUldbl'
17123 sPRIGUldbl='$sPRIGUldbl'
17124 sPRIXU64='$sPRIXU64'
17125 sPRId64='$sPRId64'
17126 sPRIeldbl='$sPRIeldbl'
17127 sPRIfldbl='$sPRIfldbl'
17128 sPRIgldbl='$sPRIgldbl'
17129 sPRIi64='$sPRIi64'
17130 sPRIo64='$sPRIo64'
17131 sPRIu64='$sPRIu64'
17132 sPRIx64='$sPRIx64'
17133 sSCNfldbl='$sSCNfldbl'
17134 sched_yield='$sched_yield'
17135 scriptdir='$scriptdir'
17136 scriptdirexp='$scriptdirexp'
17137 sed='$sed'
17138 seedfunc='$seedfunc'
17139 selectminbits='$selectminbits'
17140 selecttype='$selecttype'
17141 sendmail='$sendmail'
17142 sh='$sh'
17143 shar='$shar'
17144 sharpbang='$sharpbang'
17145 shmattype='$shmattype'
17146 shortsize='$shortsize'
17147 shrpenv='$shrpenv'
17148 shsharp='$shsharp'
17149 sig_count='$sig_count'
17150 sig_name='$sig_name'
17151 sig_name_init='$sig_name_init'
17152 sig_num='$sig_num'
17153 sig_num_init='$sig_num_init'
17154 sig_size='$sig_size'
17155 signal_t='$signal_t'
17156 sitearch='$sitearch'
17157 sitearchexp='$sitearchexp'
17158 sitebin='$sitebin'
17159 sitebinexp='$sitebinexp'
17160 sitelib='$sitelib'
17161 sitelib_stem='$sitelib_stem'
17162 sitelibexp='$sitelibexp'
17163 siteprefix='$siteprefix'
17164 siteprefixexp='$siteprefixexp'
17165 sizesize='$sizesize'
17166 sizetype='$sizetype'
17167 sleep='$sleep'
17168 smail='$smail'
17169 so='$so'
17170 sockethdr='$sockethdr'
17171 socketlib='$socketlib'
17172 socksizetype='$socksizetype'
17173 sort='$sort'
17174 spackage='$spackage'
17175 spitshell='$spitshell'
17176 src='$src'
17177 ssizetype='$ssizetype'
17178 startperl='$startperl'
17179 startsh='$startsh'
17180 static_ext='$static_ext'
17181 stdchar='$stdchar'
17182 stdio_base='$stdio_base'
17183 stdio_bufsiz='$stdio_bufsiz'
17184 stdio_cnt='$stdio_cnt'
17185 stdio_filbuf='$stdio_filbuf'
17186 stdio_ptr='$stdio_ptr'
17187 stdio_stream_array='$stdio_stream_array'
17188 strings='$strings'
17189 submit='$submit'
17190 subversion='$subversion'
17191 sysman='$sysman'
17192 tail='$tail'
17193 tar='$tar'
17194 targetarch='$targetarch'
17195 tbl='$tbl'
17196 tee='$tee'
17197 test='$test'
17198 timeincl='$timeincl'
17199 timetype='$timetype'
17200 to='$to'
17201 touch='$touch'
17202 tr='$tr'
17203 trnl='$trnl'
17204 troff='$troff'
17205 u16size='$u16size'
17206 u16type='$u16type'
17207 u32size='$u32size'
17208 u32type='$u32type'
17209 u64size='$u64size'
17210 u64type='$u64type'
17211 u8size='$u8size'
17212 u8type='$u8type'
17213 uidformat='$uidformat'
17214 uidsign='$uidsign'
17215 uidsize='$uidsize'
17216 uidtype='$uidtype'
17217 uname='$uname'
17218 uniq='$uniq'
17219 uquadtype='$uquadtype'
17220 use5005threads='$use5005threads'
17221 use64bitall='$use64bitall'
17222 use64bitint='$use64bitint'
17223 usecrosscompile='$usecrosscompile'
17224 usedl='$usedl'
17225 useithreads='$useithreads'
17226 uselargefiles='$uselargefiles'
17227 uselongdouble='$uselongdouble'
17228 usemorebits='$usemorebits'
17229 usemultiplicity='$usemultiplicity'
17230 usemymalloc='$usemymalloc'
17231 usenm='$usenm'
17232 useopcode='$useopcode'
17233 useperlio='$useperlio'
17234 useposix='$useposix'
17235 usereentrant='$usereentrant'
17236 usesfio='$usesfio'
17237 useshrplib='$useshrplib'
17238 usesocks='$usesocks'
17239 usethreads='$usethreads'
17240 usevendorprefix='$usevendorprefix'
17241 usevfork='$usevfork'
17242 usrinc='$usrinc'
17243 uuname='$uuname'
17244 uvXUformat='$uvXUformat'
17245 uvoformat='$uvoformat'
17246 uvsize='$uvsize'
17247 uvtype='$uvtype'
17248 uvuformat='$uvuformat'
17249 uvxformat='$uvxformat'
17250 vendorarch='$vendorarch'
17251 vendorarchexp='$vendorarchexp'
17252 vendorbin='$vendorbin'
17253 vendorbinexp='$vendorbinexp'
17254 vendorlib='$vendorlib'
17255 vendorlib_stem='$vendorlib_stem'
17256 vendorlibexp='$vendorlibexp'
17257 vendorprefix='$vendorprefix'
17258 vendorprefixexp='$vendorprefixexp'
17259 version='$version'
17260 versiononly='$versiononly'
17261 vi='$vi'
17262 voidflags='$voidflags'
17263 xlibpth='$xlibpth'
17264 xs_apiversion='$xs_apiversion'
17265 yacc='$yacc'
17266 yaccflags='$yaccflags'
17267 zcat='$zcat'
17268 zip='$zip'
17269 EOT
17270
17271 : Add in command line options if available
17272 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
17273
17274 : add special variables
17275 $test -f $src/patchlevel.h && \
17276 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
17277 echo "PERL_PATCHLEVEL=$perl_patchlevel" >>config.sh
17278 echo "PERL_CONFIG_SH=true" >>config.sh
17279
17280 : propagate old symbols
17281 if $test -f UU/config.sh; then
17282         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
17283         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
17284         $sort | $uniq -u >UU/oldsyms
17285         set X `cat UU/oldsyms`
17286         shift
17287         case $# in
17288         0) ;;
17289         *)
17290                 cat <<EOM
17291 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
17292 EOM
17293                 echo "# Variables propagated from previous config.sh file." >>config.sh
17294                 for sym in `cat UU/oldsyms`; do
17295                         echo "    Propagating $hint variable "'$'"$sym..."
17296                         eval 'tmp="$'"${sym}"'"'
17297                         echo "$tmp" | \
17298                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
17299                 done
17300                 ;;
17301         esac
17302 fi
17303
17304 : Finish up by extracting the .SH files
17305 case "$alldone" in
17306 exit)
17307         $rm -rf UU
17308         echo "Extraction done."
17309         exit 0
17310         ;;
17311 cont)
17312         ;;
17313 '')
17314         dflt=''
17315         nostick=true
17316         $cat <<EOM
17317
17318 If you'd like to make any changes to the config.sh file before I begin
17319 to configure things, do it as a shell escape now (e.g. !vi config.sh).
17320
17321 EOM
17322         rp="Press return or use a shell escape to edit config.sh:"
17323         . UU/myread
17324         nostick=''
17325         case "$ans" in
17326         '') ;;
17327         *) : in case they cannot read
17328                 sh 1>&4 -c "$ans";;
17329         esac
17330         ;;
17331 esac
17332
17333 : if this fails, just run all the .SH files by hand
17334 . ./config.sh
17335
17336 echo " "
17337 exec 1>&4
17338 pwd=`pwd`
17339 . ./UU/extract
17340 cd $pwd
17341
17342 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
17343         dflt=y
17344         case "$silent" in
17345         true) ;;
17346         *)
17347                 $cat <<EOM
17348
17349 Now you need to generate make dependencies by running "$make depend".
17350 You might prefer to run it in background: "$make depend > makedepend.out &"
17351 It can take a while, so you might not want to run it right now.
17352
17353 EOM
17354                 ;;
17355         esac
17356         rp="Run $make depend now?"
17357         . UU/myread
17358         case "$ans" in
17359         y*)
17360                 $make depend && echo "Now you must run '$make'."
17361                 ;;
17362         *)
17363                 echo "You must run '$make depend' then '$make'."
17364                 ;;
17365         esac
17366 elif test -f [Mm]akefile; then
17367         echo " "
17368         echo "Now you must run a $make."
17369 else
17370         echo "Configure done."
17371 fi
17372
17373 if $test -f Policy.sh; then
17374     $cat <<EOM
17375
17376 If you compile $package on a different machine or from a different object
17377 directory, copy the Policy.sh file from this object directory to the
17378 new one before you run Configure -- this will help you with most of
17379 the policy defaults.
17380
17381 EOM
17382 fi
17383 if $test -f config.msg; then
17384     echo "Hmm.  I also noted the following information while running:"
17385     echo " "
17386     $cat config.msg >&4
17387     $rm -f config.msg
17388 fi
17389 $rm -f kit*isdone ark*isdone
17390 $rm -rf UU
17391
17392 : End of Configure
17393