Integrate change #9306 from maintperl into mainline,
[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 Mar 13 05:21:04 EET 2001 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.org)
25
26 cat >c1$$ <<EOF
27 ARGGGHHHH!!!!!
28
29 SCO csh still thinks true is false.  Write to SCO today and tell them that next
30 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
31
32 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
33 we'd have to do is go in and swap the && and || tokens, wherever they are.)
34
35 [End of diatribe. We now return you to your regularly scheduled programming...]
36 EOF
37 cat >c2$$ <<EOF
38
39 OOPS!  You naughty creature!  You didn't run Configure with sh!
40 I will attempt to remedy the situation by running sh for you...
41 EOF
42
43 true || cat c1$$ c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f c1$$ c2$$
49
50 : compute my invocation name
51 me=$0
52 case "$0" in
53 */*)
54         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
55         test "$me" || me=$0
56         ;;
57 esac
58
59 : Proper separator for the PATH environment variable
60 p_=:
61 : On OS/2 this directory should exist if this is not floppy only system :-]
62 if test -d c:/. ; then
63     if test -n "$OS2_SHELL"; then
64                 p_=\;
65                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
66                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
67         elif test -n "$DJGPP"; then
68                 p_=\;
69         fi
70 fi
71
72 : Proper PATH setting
73 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
74 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
75 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
76 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
77 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
78 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
79 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
80 paths="$paths /sbin /usr/sbin /usr/libexec"
81
82 for p in $paths
83 do
84         case "$p_$PATH$p_" in
85         *$p_$p$p_*) ;;
86         *) test -d $p && PATH=$PATH$p_$p ;;
87         esac
88 done
89
90 PATH=.$p_$PATH
91 export PATH
92
93 : shall we be using ksh?
94 inksh=''
95 needksh=''
96 avoidksh=''
97 newsh=/bin/ksh
98 changesh=''
99 if (PATH=.; alias -x) >/dev/null 2>&1; then
100                 inksh=true
101 fi
102 if test -f /hp-ux -a -f /bin/ksh; then
103         needksh='to avoid sh bug in "here document" expansion'
104 fi
105 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
106         if test X`/usr/bin/uname -v` = X4; then
107                 avoidksh="to avoid AIX 4's /bin/sh"
108                 newsh=/usr/bin/bsh
109         fi
110 fi
111 if test -f /osf_boot -a -f /usr/sbin/setld; then
112         if test X`/usr/bin/uname -s` = XOSF1; then
113                 avoidksh="to avoid Digital UNIX' ksh"
114                 newsh=/bin/sh
115                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
116         fi
117 fi
118 case "$inksh/$needksh" in
119 /[a-z]*)
120                 ENV=''
121                 changesh=true
122                 reason="$needksh"
123         ;;
124 esac
125 case "$inksh/$avoidksh" in
126 true/[a-z]*)
127         changesh=true
128         reason="$avoidksh"
129         ;;
130 esac
131 case "$inksh/$needksh-$avoidksh-" in
132 true/--)
133                 cat <<EOM
134 (I see you are using the Korn shell.  Some ksh's blow up on $me,
135 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
136 EOM
137         ;;
138 esac
139 case "$changesh" in
140 true)
141         echo "(Feeding myself to $newsh $reason.)"
142         case "$0" in
143         Configure|*/Configure) exec $newsh $0 "$@";;
144         *) exec $newsh Configure "$@";;
145         esac
146         ;;
147 esac
148
149 : if needed set CDPATH to a harmless value that is not chatty
150 : avoid bash 2.02 problems with empty CDPATH.
151 case "$CDPATH" in
152 '')     ;;
153 *)      case "$SHELL" in
154         *bash*) CDPATH='.' ;;
155         *)              CDPATH='' ;;
156         esac
157         ;;
158 esac
159 : Configure runs within the UU subdirectory
160 test -d UU || mkdir UU
161 cd UU && rm -f ./*
162
163 ccname=''
164 ccversion=''
165 ccsymbols=''
166 cppccsymbols=''
167 cppsymbols=''
168 perllibs=''
169 dynamic_ext=''
170 extensions=''
171 known_extensions=''
172 nonxs_ext=''
173 static_ext=''
174 useopcode=''
175 useposix=''
176 d_bsd=''
177 d_eunice=''
178 d_xenix=''
179 eunicefix=''
180 Mcc=''
181 ar=''
182 awk=''
183 bash=''
184 bison=''
185 byacc=''
186 cat=''
187 chgrp=''
188 chmod=''
189 chown=''
190 comm=''
191 compress=''
192 cp=''
193 cpio=''
194 cpp=''
195 csh=''
196 date=''
197 echo=''
198 egrep=''
199 emacs=''
200 expr=''
201 find=''
202 flex=''
203 grep=''
204 gzip=''
205 inews=''
206 ksh=''
207 less=''
208 line=''
209 lint=''
210 ln=''
211 lp=''
212 lpr=''
213 ls=''
214 mail=''
215 mailx=''
216 make=''
217 mkdir=''
218 more=''
219 mv=''
220 nm=''
221 nroff=''
222 perl=''
223 pg=''
224 pmake=''
225 pr=''
226 rm=''
227 rmail=''
228 sed=''
229 sendmail=''
230 shar=''
231 sleep=''
232 smail=''
233 sort=''
234 submit=''
235 tail=''
236 tar=''
237 tbl=''
238 tee=''
239 test=''
240 touch=''
241 tr=''
242 troff=''
243 uname=''
244 uniq=''
245 uuname=''
246 vi=''
247 zcat=''
248 zip=''
249 full_ar=''
250 full_sed=''
251 libswanted=''
252 hint=''
253 myuname=''
254 osname=''
255 osvers=''
256 Author=''
257 Date=''
258 Header=''
259 Id=''
260 Locker=''
261 Log=''
262 RCSfile=''
263 Revision=''
264 Source=''
265 State=''
266 _a=''
267 _exe=''
268 _o=''
269 archobjs=''
270 exe_ext=''
271 firstmakefile=''
272 lib_ext=''
273 obj_ext=''
274 path_sep=''
275 afs=''
276 alignbytes=''
277 ansi2knr=''
278 archlib=''
279 archlibexp=''
280 d_archlib=''
281 installarchlib=''
282 archname=''
283 myarchname=''
284 d_atolf=''
285 d_atoll=''
286 baserev=''
287 bin=''
288 binexp=''
289 installbin=''
290 bincompat5005=''
291 d_bincompat5005=''
292 byteorder=''
293 cc=''
294 ccflags=''
295 cppflags=''
296 ldflags=''
297 lkflags=''
298 locincpth=''
299 optimize=''
300 cf_email=''
301 cf_by=''
302 cf_time=''
303 charsize=''
304 contains=''
305 cpp_stuff=''
306 cpplast=''
307 cppminus=''
308 cpprun=''
309 cppstdin=''
310 crosscompile=''
311 d__fwalk=''
312 d_access=''
313 d_accessx=''
314 d_alarm=''
315 d_attribut=''
316 d_bcmp=''
317 d_bcopy=''
318 d_bzero=''
319 d_casti32=''
320 castflags=''
321 d_castneg=''
322 d_chown=''
323 d_chroot=''
324 d_chsize=''
325 d_closedir=''
326 d_void_closedir=''
327 d_const=''
328 cryptlib=''
329 d_crypt=''
330 d_csh=''
331 full_csh=''
332 d_cuserid=''
333 d_dbl_dig=''
334 d_difftime=''
335 d_dlerror=''
336 d_dlopen=''
337 d_dlsymun=''
338 d_dosuid=''
339 d_suidsafe=''
340 d_drand48proto=''
341 d_dup2=''
342 d_eaccess=''
343 d_endgrent=''
344 d_endhent=''
345 d_endnent=''
346 d_endpent=''
347 d_endpwent=''
348 d_endsent=''
349 d_fchmod=''
350 d_fchown=''
351 d_fcntl=''
352 d_fcntl_can_lock=''
353 d_fd_macros=''
354 d_fd_set=''
355 d_fds_bits=''
356 d_fgetpos=''
357 d_flexfnam=''
358 d_flock=''
359 d_fork=''
360 d_fpos64_t=''
361 d_frexpl=''
362 d_fs_data_s=''
363 d_fseeko=''
364 d_fsetpos=''
365 d_fstatfs=''
366 d_fsync=''
367 d_ftello=''
368 d_ftime=''
369 d_gettimeod=''
370 d_Gconvert=''
371 d_getcwd=''
372 d_getespwnam=''
373 d_getfsstat=''
374 d_getgrent=''
375 d_getgrps=''
376 d_gethbyaddr=''
377 d_gethbyname=''
378 d_gethent=''
379 aphostname=''
380 d_gethname=''
381 d_phostname=''
382 d_uname=''
383 d_gethostprotos=''
384 d_getlogin=''
385 d_getmnt=''
386 d_getmntent=''
387 d_getnbyaddr=''
388 d_getnbyname=''
389 d_getnent=''
390 d_getnetprotos=''
391 d_getpagsz=''
392 d_getpent=''
393 d_getpgid=''
394 d_getpgrp2=''
395 d_bsdgetpgrp=''
396 d_getpgrp=''
397 d_getppid=''
398 d_getprior=''
399 d_getpbyname=''
400 d_getpbynumber=''
401 d_getprotoprotos=''
402 d_getprpwnam=''
403 d_getpwent=''
404 d_getsent=''
405 d_getservprotos=''
406 d_getspnam=''
407 d_getsbyname=''
408 d_getsbyport=''
409 d_gnulibc=''
410 d_hasmntopt=''
411 d_htonl=''
412 d_iconv=''
413 d_inetaton=''
414 d_int64_t=''
415 d_isascii=''
416 d_isnan=''
417 d_isnanl=''
418 d_killpg=''
419 d_lchown=''
420 d_ldbl_dig=''
421 d_link=''
422 d_locconv=''
423 d_lockf=''
424 d_longdbl=''
425 longdblsize=''
426 d_longlong=''
427 longlongsize=''
428 d_lseekproto=''
429 d_lstat=''
430 d_madvise=''
431 d_mblen=''
432 d_mbstowcs=''
433 d_mbtowc=''
434 d_memchr=''
435 d_memcmp=''
436 d_memcpy=''
437 d_memmove=''
438 d_memset=''
439 d_mkdir=''
440 d_mkdtemp=''
441 d_mkfifo=''
442 d_mkstemp=''
443 d_mkstemps=''
444 d_mktime=''
445 d_mmap=''
446 mmaptype=''
447 d_modfl=''
448 d_mprotect=''
449 d_msg=''
450 d_msgctl=''
451 d_msgget=''
452 d_msgrcv=''
453 d_msgsnd=''
454 d_msync=''
455 d_munmap=''
456 d_nice=''
457 d_off64_t=''
458 d_open3=''
459 d_fpathconf=''
460 d_pathconf=''
461 d_pause=''
462 d_pipe=''
463 d_poll=''
464 d_portable=''
465 d_old_pthread_create_joinable=''
466 old_pthread_create_joinable=''
467 d_pthread_yield=''
468 d_sched_yield=''
469 sched_yield=''
470 d_qgcvt=''
471 d_readdir=''
472 d_rewinddir=''
473 d_seekdir=''
474 d_telldir=''
475 d_readlink=''
476 d_rename=''
477 d_rmdir=''
478 d_safebcpy=''
479 d_safemcpy=''
480 d_sanemcmp=''
481 d_sbrkproto=''
482 d_select=''
483 d_sem=''
484 d_semctl=''
485 d_semget=''
486 d_semop=''
487 d_setegid=''
488 d_seteuid=''
489 d_setgrent=''
490 d_setgrps=''
491 d_sethent=''
492 d_setlinebuf=''
493 d_setlocale=''
494 d_setnent=''
495 d_setpent=''
496 d_setpgid=''
497 d_setpgrp2=''
498 d_bsdsetpgrp=''
499 d_setpgrp=''
500 d_setprior=''
501 d_setproctitle=''
502 d_setpwent=''
503 d_setregid=''
504 d_setresgid=''
505 d_setresuid=''
506 d_setreuid=''
507 d_setrgid=''
508 d_setruid=''
509 d_setsent=''
510 d_setsid=''
511 d_setvbuf=''
512 d_sfio=''
513 usesfio=''
514 d_shm=''
515 d_shmat=''
516 d_shmatprototype=''
517 shmattype=''
518 d_shmctl=''
519 d_shmdt=''
520 d_shmget=''
521 d_sigaction=''
522 d_sigprocmask=''
523 d_sigsetjmp=''
524 d_msg_ctrunc=''
525 d_msg_dontroute=''
526 d_msg_oob=''
527 d_msg_peek=''
528 d_msg_proxy=''
529 d_oldsock=''
530 d_scm_rights=''
531 d_socket=''
532 d_sockpair=''
533 sockethdr=''
534 socketlib=''
535 d_socklen_t=''
536 d_socks5_init=''
537 d_sqrtl=''
538 d_statblks=''
539 d_statfs_f_flags=''
540 d_statfs_s=''
541 d_fstatvfs=''
542 d_statvfs=''
543 d_stdio_cnt_lval=''
544 d_stdio_ptr_lval=''
545 d_stdio_ptr_lval_nochange_cnt=''
546 d_stdio_ptr_lval_sets_cnt=''
547 d_stdiobase=''
548 d_stdstdio=''
549 stdio_base=''
550 stdio_bufsiz=''
551 stdio_cnt=''
552 stdio_filbuf=''
553 stdio_ptr=''
554 d_index=''
555 d_strchr=''
556 d_strcoll=''
557 d_strctcpy=''
558 d_strerrm=''
559 d_strerror=''
560 d_sysernlst=''
561 d_syserrlst=''
562 d_strtod=''
563 d_strtol=''
564 d_strtold=''
565 d_strtoll=''
566 d_strtoq=''
567 d_strtoul=''
568 d_strtoull=''
569 d_strtouq=''
570 d_strxfrm=''
571 d_symlink=''
572 d_syscall=''
573 d_sysconf=''
574 d_system=''
575 d_tcgetpgrp=''
576 d_tcsetpgrp=''
577 d_telldirproto=''
578 d_time=''
579 timetype=''
580 clocktype=''
581 d_times=''
582 d_truncate=''
583 d_tzname=''
584 d_umask=''
585 d_semctl_semid_ds=''
586 d_semctl_semun=''
587 d_union_semun=''
588 d_ustat=''
589 d_vfork=''
590 usevfork=''
591 d_voidsig=''
592 signal_t=''
593 d_volatile=''
594 d_charvspr=''
595 d_vprintf=''
596 d_wait4=''
597 d_waitpid=''
598 d_wcstombs=''
599 d_wctomb=''
600 dlext=''
601 cccdlflags=''
602 ccdlflags=''
603 dlsrc=''
604 ld=''
605 lddlflags=''
606 usedl=''
607 doublesize=''
608 ebcdic=''
609 fflushNULL=''
610 fflushall=''
611 fpossize=''
612 fpostype=''
613 gccosandvers=''
614 gccversion=''
615 gidformat=''
616 gidsign=''
617 gidsize=''
618 gidtype=''
619 groupstype=''
620 h_fcntl=''
621 h_sysfile=''
622 i_arpainet=''
623 db_hashtype=''
624 db_prefixtype=''
625 i_db=''
626 i_dbm=''
627 i_rpcsvcdbm=''
628 d_dirnamlen=''
629 direntrytype=''
630 i_dirent=''
631 i_dld=''
632 i_dlfcn=''
633 i_fcntl=''
634 i_float=''
635 i_gdbm=''
636 d_grpasswd=''
637 i_grp=''
638 i_iconv=''
639 i_ieeefp=''
640 i_inttypes=''
641 i_libutil=''
642 i_limits=''
643 i_locale=''
644 i_machcthr=''
645 i_malloc=''
646 i_math=''
647 i_memory=''
648 i_mntent=''
649 i_ndbm=''
650 i_netdb=''
651 i_neterrno=''
652 i_netinettcp=''
653 i_niin=''
654 i_sysin=''
655 i_poll=''
656 i_prot=''
657 i_pthread=''
658 d_pwage=''
659 d_pwchange=''
660 d_pwclass=''
661 d_pwcomment=''
662 d_pwexpire=''
663 d_pwgecos=''
664 d_pwpasswd=''
665 d_pwquota=''
666 i_pwd=''
667 i_sfio=''
668 i_shadow=''
669 i_socks=''
670 i_stddef=''
671 i_stdlib=''
672 i_string=''
673 strings=''
674 i_sunmath=''
675 i_sysaccess=''
676 i_sysdir=''
677 i_sysfile=''
678 d_voidtty=''
679 i_bsdioctl=''
680 i_sysfilio=''
681 i_sysioctl=''
682 i_syssockio=''
683 i_syslog=''
684 i_sysmman=''
685 i_sysmode=''
686 i_sysmount=''
687 i_sysndir=''
688 i_sysparam=''
689 i_sysresrc=''
690 i_syssecrt=''
691 i_sysselct=''
692 i_sysstat=''
693 i_sysstatfs=''
694 i_sysstatvfs=''
695 i_systimes=''
696 i_systypes=''
697 i_sysuio=''
698 i_sysun=''
699 i_sysutsname=''
700 i_sysvfs=''
701 i_syswait=''
702 i_sgtty=''
703 i_termio=''
704 i_termios=''
705 i_systime=''
706 i_systimek=''
707 i_time=''
708 timeincl=''
709 i_unistd=''
710 i_ustat=''
711 i_utime=''
712 i_values=''
713 i_stdarg=''
714 i_varargs=''
715 i_varhdr=''
716 i_vfork=''
717 inc_version_list=''
718 inc_version_list_init=''
719 installprefix=''
720 installprefixexp=''
721 installstyle=''
722 installusrbinperl=''
723 intsize=''
724 longsize=''
725 shortsize=''
726 issymlink=''
727 libc=''
728 ldlibpthname=''
729 libperl=''
730 shrpenv=''
731 useshrplib=''
732 glibpth=''
733 libpth=''
734 loclibpth=''
735 plibpth=''
736 xlibpth=''
737 ignore_versioned_solibs=''
738 libs=''
739 libsdirs=''
740 libsfiles=''
741 libsfound=''
742 libspath=''
743 lns=''
744 d_PRIEUldbl=''
745 d_PRIFUldbl=''
746 d_PRIGUldbl=''
747 d_PRIeldbl=''
748 d_PRIfldbl=''
749 d_PRIgldbl=''
750 d_SCNfldbl=''
751 sPRIEUldbl=''
752 sPRIFUldbl=''
753 sPRIGUldbl=''
754 sPRIeldbl=''
755 sPRIfldbl=''
756 sPRIgldbl=''
757 sSCNfldbl=''
758 lseeksize=''
759 lseektype=''
760 make_set_make=''
761 d_mymalloc=''
762 freetype=''
763 mallocobj=''
764 mallocsrc=''
765 malloctype=''
766 usemymalloc=''
767 installman1dir=''
768 man1dir=''
769 man1direxp=''
770 man1ext=''
771 installman3dir=''
772 man3dir=''
773 man3direxp=''
774 man3ext=''
775 modetype=''
776 multiarch=''
777 mydomain=''
778 myhostname=''
779 phostname=''
780 c=''
781 n=''
782 d_eofnblk=''
783 eagain=''
784 o_nonblock=''
785 rd_nodata=''
786 need_va_copy=''
787 netdb_hlen_type=''
788 netdb_host_type=''
789 netdb_name_type=''
790 netdb_net_type=''
791 groupcat=''
792 hostcat=''
793 passcat=''
794 orderlib=''
795 ranlib=''
796 d_perl_otherlibdirs=''
797 otherlibdirs=''
798 package=''
799 spackage=''
800 pager=''
801 api_revision=''
802 api_subversion=''
803 api_version=''
804 api_versionstring=''
805 patchlevel=''
806 revision=''
807 subversion=''
808 version=''
809 perl5=''
810 perladmin=''
811 perlpath=''
812 d_nv_preserves_uv=''
813 d_nv_preserves_uv_bits=''
814 i16size=''
815 i16type=''
816 i32size=''
817 i32type=''
818 i64size=''
819 i64type=''
820 i8size=''
821 i8type=''
822 ivsize=''
823 ivtype=''
824 nvsize=''
825 nvtype=''
826 u16size=''
827 u16type=''
828 u32size=''
829 u32type=''
830 u64size=''
831 u64type=''
832 u8size=''
833 u8type=''
834 uvsize=''
835 uvtype=''
836 ivdformat=''
837 nvEUformat=''
838 nvFUformat=''
839 nvGUformat=''
840 nveformat=''
841 nvfformat=''
842 nvgformat=''
843 uvXUformat=''
844 uvoformat=''
845 uvuformat=''
846 uvxformat=''
847 pidtype=''
848 prefix=''
849 prefixexp=''
850 installprivlib=''
851 privlib=''
852 privlibexp=''
853 prototype=''
854 ptrsize=''
855 d_PRIXU64=''
856 d_PRId64=''
857 d_PRIi64=''
858 d_PRIo64=''
859 d_PRIu64=''
860 d_PRIx64=''
861 sPRIXU64=''
862 sPRId64=''
863 sPRIi64=''
864 sPRIo64=''
865 sPRIu64=''
866 sPRIx64=''
867 d_quad=''
868 quadkind=''
869 quadtype=''
870 uquadtype=''
871 drand01=''
872 randbits=''
873 randfunc=''
874 randseedtype=''
875 seedfunc=''
876 installscript=''
877 scriptdir=''
878 scriptdirexp=''
879 selectminbits=''
880 selecttype=''
881 sh=''
882 sig_count=''
883 sig_name=''
884 sig_name_init=''
885 sig_num=''
886 sig_num_init=''
887 sig_size=''
888 installsitearch=''
889 sitearch=''
890 sitearchexp=''
891 installsitebin=''
892 sitebin=''
893 sitebinexp=''
894 installsitelib=''
895 sitelib=''
896 sitelib_stem=''
897 sitelibexp=''
898 siteprefix=''
899 siteprefixexp=''
900 sizesize=''
901 sizetype=''
902 so=''
903 socksizetype=''
904 sharpbang=''
905 shsharp=''
906 spitshell=''
907 src=''
908 ssizetype=''
909 startperl=''
910 startsh=''
911 stdchar=''
912 d_stdio_stream_array=''
913 stdio_stream_array=''
914 sysman=''
915 trnl=''
916 uidformat=''
917 uidsign=''
918 uidsize=''
919 uidtype=''
920 archname64=''
921 use64bitall=''
922 use64bitint=''
923 ccflags_uselargefiles=''
924 ldflags_uselargefiles=''
925 libswanted_uselargefiles=''
926 uselargefiles=''
927 uselongdouble=''
928 usemorebits=''
929 usemultiplicity=''
930 nm_opt=''
931 nm_so_opt=''
932 runnm=''
933 usenm=''
934 useperlio=''
935 usesocks=''
936 d_oldpthreads=''
937 use5005threads=''
938 useithreads=''
939 usethreads=''
940 incpath=''
941 mips_type=''
942 usrinc=''
943 d_vendorarch=''
944 installvendorarch=''
945 vendorarch=''
946 vendorarchexp=''
947 d_vendorbin=''
948 installvendorbin=''
949 vendorbin=''
950 vendorbinexp=''
951 d_vendorlib=''
952 installvendorlib=''
953 vendorlib=''
954 vendorlib_stem=''
955 vendorlibexp=''
956 usevendorprefix=''
957 vendorprefix=''
958 vendorprefixexp=''
959 versiononly=''
960 defvoidused=''
961 voidflags=''
962 pm_apiversion=''
963 xs_apiversion=''
964 yacc=''
965 yaccflags=''
966 CONFIG=''
967
968 define='define'
969 undef='undef'
970 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
971 rmlist=''
972
973 : We must find out about Eunice early
974 eunicefix=':'
975 if test -f /etc/unixtovms; then
976         eunicefix=/etc/unixtovms
977 fi
978 if test -f /etc/unixtovms.exe; then
979         eunicefix=/etc/unixtovms.exe
980 fi
981
982 i_whoami=''
983 ccname=''
984 ccversion=''
985 perllibs=''
986 : set useposix=false in your hint file to disable the POSIX extension.
987 useposix=true
988 : set useopcode=false in your hint file to disable the Opcode extension.
989 useopcode=true
990 : Trailing extension.  Override this in a hint file, if needed.
991 _exe=''
992 : Extra object files, if any, needed on this platform.
993 archobjs=''
994 archname=''
995 : Possible local include directories to search.
996 : Set locincpth to "" in a hint file to defeat local include searches.
997 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
998 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
999 :
1000 : no include file wanted by default
1001 inclwanted=''
1002
1003 groupstype=''
1004 : change the next line if compiling for Xenix/286 on Xenix/386
1005 xlibpth='/usr/lib/386 /lib/386'
1006 : Possible local library directories to search.
1007 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1008 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1009
1010 : general looking path for locating libraries
1011 glibpth="/lib /usr/lib $xlibpth"
1012 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1013 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1014 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1015
1016 : Private path used by Configure to find libraries.  Its value
1017 : is prepended to libpth. This variable takes care of special
1018 : machines, like the mips.  Usually, it should be empty.
1019 plibpth=''
1020
1021 : default library list
1022 libswanted=''
1023 : some systems want to use only the non-versioned libso:s
1024 ignore_versioned_solibs=''
1025 archname64=''
1026 ccflags_uselargefiles=''
1027 ldflags_uselargefiles=''
1028 libswanted_uselargefiles=''
1029 : set usemultiplicity on the Configure command line to enable multiplicity.
1030 : set usesocks on the Configure command line to enable socks.
1031 : set usethreads on the Configure command line to enable threads.
1032 : full support for void wanted by default
1033 defvoidused=15
1034
1035 : List of libraries we want.
1036 : If anyone needs -lnet, put it in a hint file.
1037 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1038 libswanted="$libswanted dld ld sun m c cposix posix"
1039 libswanted="$libswanted ndir dir crypt sec"
1040 libswanted="$libswanted ucb bsd BSD PW x iconv util"
1041 : We probably want to search /usr/shlib before most other libraries.
1042 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1043 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1044 glibpth="/usr/shlib $glibpth"
1045 : Do not use vfork unless overridden by a hint file.
1046 usevfork=false
1047
1048 : Find the basic shell for Bourne shell scripts
1049 case "$sh" in
1050 '')
1051         case "$SYSTYPE" in
1052         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1053         *) xxx='/bin/sh';;
1054         esac
1055         if test -f "$xxx"; then
1056                 sh="$xxx"
1057         else
1058                 : Build up a list and do a single loop so we can 'break' out.
1059                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1060                 for xxx in sh bash ksh pdksh ash; do
1061                         for p in $pth; do
1062                                 try="$try ${p}/${xxx}"
1063                         done
1064                 done
1065                 for xxx in $try; do
1066                         if test -f "$xxx"; then
1067                                 sh="$xxx";
1068                                 break
1069                         elif test -f "$xxx.exe"; then
1070                                 sh="$xxx";
1071                                 break
1072                         fi
1073                 done
1074         fi
1075         ;;
1076 esac
1077
1078 case "$sh" in
1079 '')     cat <<EOM >&2
1080 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1081
1082 Usually it's in /bin/sh.  How did you even get this far?
1083 Please contact me (Perl Maintainers) at perlbug@perl.org and 
1084 we'll try to straighten this all out.
1085 EOM
1086         exit 1
1087         ;;
1088 esac
1089
1090 : see if sh knows # comments
1091 if `$sh -c '#' >/dev/null 2>&1`; then
1092         shsharp=true
1093         spitshell=cat
1094         xcat=/bin/cat
1095         test -f $xcat || xcat=/usr/bin/cat
1096         echo "#!$xcat" >try
1097         $eunicefix try
1098         chmod +x try
1099         ./try > today
1100         if test -s today; then
1101                 sharpbang='#!'
1102         else
1103                 echo "#! $xcat" > try
1104                 $eunicefix try
1105                 chmod +x try
1106                 ./try > today
1107                 if test -s today; then
1108                         sharpbang='#! '
1109                 else
1110                         sharpbang=': use '
1111                 fi
1112         fi
1113 else
1114         echo " "
1115         echo "Your $sh doesn't grok # comments--I will strip them later on."
1116         shsharp=false
1117         cd ..
1118         echo "exec grep -v '^[  ]*#'" >spitshell
1119         chmod +x spitshell
1120         $eunicefix spitshell
1121         spitshell=`pwd`/spitshell
1122         cd UU
1123         echo "I presume that if # doesn't work, #! won't work either!"
1124         sharpbang=': use '
1125 fi
1126 rm -f try today
1127
1128 : figure out how to guarantee sh startup
1129 case "$startsh" in
1130 '') startsh=${sharpbang}${sh} ;;
1131 *)
1132 esac
1133 cat >try <<EOSS
1134 $startsh
1135 set abc
1136 test "$?abc" != 1
1137 EOSS
1138
1139 chmod +x try
1140 $eunicefix try
1141 if ./try; then
1142         : echo "Yup, it does."
1143 else
1144         echo "Hmm... '$startsh' does not guarantee sh startup..."
1145         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1146 fi
1147 rm -f try
1148
1149
1150 : Save command line options in file UU/cmdline.opt for later use in
1151 : generating config.sh.
1152 cat > cmdline.opt <<EOSH
1153 # Configure command line arguments.
1154 config_arg0='$0'
1155 config_args='$*'
1156 config_argc=$#
1157 EOSH
1158 argn=1
1159 for arg in "$@"; do
1160         cat >>cmdline.opt <<EOSH
1161 config_arg$argn='$arg'
1162 EOSH
1163         argn=`expr $argn + 1`
1164 done
1165
1166 : produce awk script to parse command line options
1167 cat >options.awk <<'EOF'
1168 BEGIN {
1169         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1170
1171         len = length(optstr);
1172         for (i = 1; i <= len; i++) {
1173                 c = substr(optstr, i, 1);
1174                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1175                 if (a == ":") {
1176                         arg[c] = 1;
1177                         i++;
1178                 }
1179                 opt[c] = 1;
1180         }
1181 }
1182 {
1183         expect = 0;
1184         str = $0;
1185         if (substr(str, 1, 1) != "-") {
1186                 printf("'%s'\n", str);
1187                 next;
1188         }
1189         len = length($0);
1190         for (i = 2; i <= len; i++) {
1191                 c = substr(str, i, 1);
1192                 if (!opt[c]) {
1193                         printf("-%s\n", substr(str, i));
1194                         next;
1195                 }
1196                 printf("-%s\n", c);
1197                 if (arg[c]) {
1198                         if (i < len)
1199                                 printf("'%s'\n", substr(str, i + 1));
1200                         else
1201                                 expect = 1;
1202                         next;
1203                 }
1204         }
1205 }
1206 END {
1207         if (expect)
1208                 print "?";
1209 }
1210 EOF
1211
1212 : process the command line options
1213 set X `for arg in "$@"; do echo "X$arg"; done |
1214         sed -e s/X// | awk -f options.awk`
1215 eval "set $*"
1216 shift
1217 rm -f options.awk
1218
1219 : set up default values
1220 fastread=''
1221 reuseval=false
1222 config_sh=''
1223 alldone=''
1224 error=''
1225 silent=''
1226 extractsh=''
1227 override=''
1228 knowitall=''
1229 rm -f optdef.sh posthint.sh
1230 cat >optdef.sh <<EOS
1231 $startsh
1232 EOS
1233
1234
1235 : option parsing
1236 while test $# -gt 0; do
1237         case "$1" in
1238         -d) shift; fastread=yes;;
1239         -e) shift; alldone=cont;;
1240         -f)
1241                 shift
1242                 cd ..
1243                 if test -r "$1"; then
1244                         config_sh="$1"
1245                 else
1246                         echo "$me: cannot read config file $1." >&2
1247                         error=true
1248                 fi
1249                 cd UU
1250                 shift;;
1251         -h) shift; error=true;;
1252         -r) shift; reuseval=true;;
1253         -s) shift; silent=true; realsilent=true;;
1254         -E) shift; alldone=exit;;
1255         -K) shift; knowitall=true;;
1256         -O) shift; override=true;;
1257         -S) shift; silent=true; extractsh=true;;
1258         -D)
1259                 shift
1260                 case "$1" in
1261                 *=)
1262                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1263                         echo "$me: ignoring -D $1" >&2
1264                         ;;
1265                 *=*) echo "$1" | \
1266                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1267                 *) echo "$1='define'" >> optdef.sh;;
1268                 esac
1269                 shift
1270                 ;;
1271         -U)
1272                 shift
1273                 case "$1" in
1274                 *=) echo "$1" >> optdef.sh;;
1275                 *=*)
1276                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1277                         echo "$me: ignoring -U $1" >&2
1278                         ;;
1279                 *) echo "$1='undef'" >> optdef.sh;;
1280                 esac
1281                 shift
1282                 ;;
1283         -A)
1284             shift
1285             xxx=''
1286             yyy="$1"
1287             zzz=''
1288             uuu=undef
1289             case "$yyy" in
1290             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1291                  case "$zzz" in
1292                  *:*) zzz='' ;;
1293                  *)   xxx=append
1294                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1295                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1296                  esac
1297                  ;;
1298             esac
1299             case "$xxx" in
1300             '')  case "$yyy" in
1301                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1302                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1303                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1304                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1305                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1306                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1307                  esac
1308                  ;;       
1309             esac
1310             case "$xxx" in
1311             append)
1312                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1313             clear)
1314                 echo "$yyy=''"                  >> posthint.sh ;;
1315             define)
1316                 case "$zzz" in
1317                 '') zzz=define ;;
1318                 esac
1319                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1320             eval)
1321                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1322             prepend)
1323                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1324             undef)
1325                 case "$zzz" in
1326                 '') zzz="$uuu" ;;
1327                 esac
1328                 echo "$yyy=$zzz"                >> posthint.sh ;;
1329             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1330             esac
1331             shift
1332             ;;
1333         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1334             exit 0;;
1335         --) break;;
1336         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1337         *) break;;
1338         esac
1339 done
1340
1341 case "$error" in
1342 true)
1343         cat >&2 <<EOM
1344 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1345                  [-U symbol] [-U symbol=] [-A command:symbol...]
1346   -d : use defaults for all answers.
1347   -e : go on without questioning past the production of config.sh.
1348   -f : specify an alternate default configuration file.
1349   -h : print this help message and exit (with an error status).
1350   -r : reuse C symbols value if possible (skips costly nm extraction).
1351   -s : silent mode, only echoes questions and essential information.
1352   -D : define symbol to have some value:
1353          -D symbol         symbol gets the value 'define'
1354          -D symbol=value   symbol gets the value 'value'
1355   -E : stop at the end of questions, after having produced config.sh.
1356   -K : do not use unless you know what you are doing.
1357   -O : let -D and -U override definitions from loaded configuration file.
1358   -S : perform variable substitutions on all .SH files (can mix with -f)
1359   -U : undefine symbol:
1360          -U symbol    symbol gets the value 'undef'
1361          -U symbol=   symbol gets completely empty
1362   -A : manipulate symbol after the platform specific hints have been applied:
1363          -A symbol=value                append " "value to symbol
1364          -A append:symbol=value         append value to symbol
1365          -A define:symbol=value         define symbol to have value
1366          -A clear:symbol                define symbol to be ''
1367          -A define:symbol               define symbol to be 'define'
1368          -A eval:symbol=value           define symbol to be eval of value
1369          -A prepend:symbol=value        prepend value to symbol
1370          -A undef:symbol                define symbol to be 'undef'
1371          -A undef:symbol=               define symbol to be ''
1372   -V : print version number and exit (with a zero status).
1373 EOM
1374         exit 1
1375         ;;
1376 esac
1377
1378 : Sanity checks
1379 case "$fastread$alldone" in
1380 yescont|yesexit) ;;
1381 *)
1382         case "$extractsh" in
1383         true) ;;
1384         *)
1385                 if test ! -t 0; then
1386                         echo "Say 'sh Configure', not 'sh <Configure'"
1387                         exit 1
1388                 fi
1389                 ;;
1390         esac
1391         ;;
1392 esac
1393
1394 exec 4>&1
1395 case "$silent" in
1396 true) exec 1>/dev/null;;
1397 esac
1398
1399 : run the defines and the undefines, if any, but leave the file out there...
1400 touch optdef.sh
1401 . ./optdef.sh
1402 : create the posthint manipulation script and leave the file out there...
1403 touch posthint.sh
1404
1405 : set package name
1406 package=perl5
1407 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1408 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1409 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1410 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1411 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1412 esac
1413
1414 : Some greps do not return status, grrr.
1415 echo "grimblepritz" >grimble
1416 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1417         contains=contains
1418 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1419         contains=grep
1420 else
1421         contains=contains
1422 fi
1423 rm -f grimble
1424 : the following should work in any shell
1425 case "$contains" in
1426 contains*)
1427         echo " "
1428         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1429         cat >contains <<'EOSS'
1430 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1431 EOSS
1432 chmod +x contains
1433 esac
1434
1435 : Find the path to the source tree
1436 case "$src" in
1437 '') case "$0" in
1438     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1439          case "$src" in
1440          /*)    ;;
1441          .)     ;;
1442          *)     src=`cd ../$src && pwd` ;;
1443          esac
1444          ;;
1445     *)   src='.';;
1446     esac;;
1447 esac
1448 case "$src" in
1449 '')     src=/
1450         rsrc=/
1451         ;;
1452 /*) rsrc="$src";;
1453 *) rsrc="../$src";;
1454 esac
1455 if test -f $rsrc/Configure && \
1456         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1457 then
1458    : found it, so we are ok.
1459 else
1460         rsrc=''
1461         for src in . .. ../.. ../../.. ../../../..; do
1462                 if test -f ../$src/Configure && \
1463                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1464                 then
1465                         rsrc=../$src
1466                         break
1467                 fi
1468         done
1469 fi
1470 case "$rsrc" in
1471 '')
1472         cat <<EOM >&4
1473
1474 Sorry, I can't seem to locate the source dir for $package.  Please start
1475 Configure with an explicit path -- i.e. /some/path/Configure.
1476
1477 EOM
1478         exit 1
1479         ;;
1480 ../.)   rsrc='..';;
1481 *)
1482         echo " "
1483         echo "Sources for $package found in \"$src\"." >&4
1484         ;;
1485 esac
1486
1487 : script used to extract .SH files with variable substitutions
1488 cat >extract <<'EOS'
1489 CONFIGDOTSH=true
1490 echo "Doing variable substitutions on .SH files..."
1491 if test -f $src/MANIFEST; then
1492         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1493 else
1494         echo "(Looking for .SH files under the source directory.)"
1495         set x `(cd $src; find . -name "*.SH" -print)`
1496 fi
1497 shift
1498 case $# in
1499 0) set x `(cd $src; echo *.SH)`; shift;;
1500 esac
1501 if test ! -f $src/$1; then
1502         shift
1503 fi
1504 mkdir_p='
1505 name=$1;
1506 create="";
1507 while test $name; do
1508         if test ! -d "$name"; then
1509                 create="$name $create";
1510                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1511                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1512         else
1513                 name="";
1514         fi;
1515 done;
1516 for file in $create; do
1517         mkdir $file;
1518 done
1519 '
1520 for file in $*; do
1521         case "$src" in
1522         ".")
1523                 case "$file" in
1524                 */*)
1525                         dir=`expr X$file : 'X\(.*\)/'`
1526                         file=`expr X$file : 'X.*/\(.*\)'`
1527                         (cd $dir && . ./$file)
1528                         ;;
1529                 *)
1530                         . ./$file
1531                         ;;
1532                 esac
1533                 ;;
1534         *)
1535                 case "$file" in
1536                 */*)
1537                         dir=`expr X$file : 'X\(.*\)/'`
1538                         file=`expr X$file : 'X.*/\(.*\)'`
1539                         (set x $dir; shift; eval $mkdir_p)
1540                         sh <$src/$dir/$file
1541                         ;;
1542                 *)
1543                         sh <$src/$file
1544                         ;;
1545                 esac
1546                 ;;
1547         esac
1548 done
1549 if test -f $src/config_h.SH; then
1550         if test ! -f config.h; then
1551         : oops, they left it out of MANIFEST, probably, so do it anyway.
1552         . $src/config_h.SH
1553         fi
1554 fi
1555 EOS
1556
1557 : extract files and exit if asked to do so
1558 case "$extractsh" in
1559 true)
1560         case "$realsilent" in
1561         true) ;;
1562         *) exec 1>&4;;
1563         esac
1564         case "$config_sh" in
1565         '') config_sh='config.sh';;
1566         esac
1567         echo " "
1568         echo "Fetching answers from $config_sh..."
1569         cd ..
1570         . $config_sh
1571         test "$override" && . ./optdef.sh
1572         echo " "
1573         . UU/extract
1574         rm -rf UU
1575         echo "Done."
1576         exit 0
1577         ;;
1578 esac
1579
1580 : Eunice requires " " instead of "", can you believe it
1581 echo " "
1582 : Here we go...
1583 echo "Beginning of configuration questions for $package."
1584
1585 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1586
1587 : first determine how to suppress newline on echo command
1588 echo " "
1589 echo "Checking echo to see how to suppress newlines..."
1590 (echo "hi there\c" ; echo " ") >.echotmp
1591 if $contains c .echotmp >/dev/null 2>&1 ; then
1592         echo "...using -n."
1593         n='-n'
1594         c=''
1595 else
1596         cat <<'EOM'
1597 ...using \c
1598 EOM
1599         n=''
1600         c='\c'
1601 fi
1602 echo $n "The star should be here-->$c"
1603 echo '*'
1604 rm -f .echotmp
1605
1606 : Now test for existence of everything in MANIFEST
1607 echo " "
1608 if test -f $rsrc/MANIFEST; then
1609         echo "First let's make sure your kit is complete.  Checking..." >&4
1610         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1611         rm -f missing
1612         tmppwd=`pwd`
1613         for filelist in x??; do
1614                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1615         done
1616         if test -s missing; then
1617                 cat missing >&4
1618                 cat >&4 <<'EOM'
1619
1620 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1621
1622 You have the option of continuing the configuration process, despite the
1623 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1624 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1625 and contact the author (perlbug@perl.org).
1626
1627 EOM
1628                 echo $n "Continue? [n] $c" >&4
1629                 read ans
1630                 case "$ans" in
1631                 y*)
1632                         echo "Continuing..." >&4
1633                         rm -f missing
1634                         ;;
1635                 *)
1636                         echo "ABORTING..." >&4
1637                         kill $$
1638                         ;;
1639                 esac
1640         else
1641                 echo "Looks good..."
1642         fi
1643 else
1644         echo "There is no MANIFEST file.  I hope your kit is complete !"
1645 fi
1646 rm -f missing x??
1647
1648 echo " "
1649 : Find the appropriate value for a newline for tr
1650 if test -n "$DJGPP"; then
1651        trnl='\012'
1652 fi
1653 if test X"$trnl" = X; then
1654         case "`echo foo|tr '\n' x 2>/dev/null`" in
1655         foox) trnl='\n' ;;
1656         esac
1657 fi
1658 if test X"$trnl" = X; then
1659         case "`echo foo|tr '\012' x 2>/dev/null`" in
1660         foox) trnl='\012' ;;
1661         esac
1662 fi
1663 if test X"$trnl" = X; then
1664         cat <<EOM >&2
1665
1666 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1667
1668 EOM
1669         exit 1
1670 fi
1671
1672 : compute the number of columns on the terminal for proper question formatting
1673 case "$COLUMNS" in
1674 '') COLUMNS='80';;
1675 esac
1676
1677 : set up the echo used in my read
1678 myecho="case \"\$xxxm\" in
1679 '') echo $n \"\$rp $c\" >&4;;
1680 *) case \"\$rp\" in
1681         '') echo $n \"[\$xxxm] $c\";;
1682         *)
1683                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1684                         echo \"\$rp\" >&4
1685                         echo $n \"[\$xxxm] $c\" >&4
1686                 else
1687                         echo $n \"\$rp [\$xxxm] $c\" >&4
1688                 fi
1689                 ;;
1690         esac;;
1691 esac"
1692
1693 : now set up to do reads with possible shell escape and default assignment
1694 cat <<EOSC >myread
1695 $startsh
1696 xxxm=\$dflt
1697 $myecho
1698 ans='!'
1699 case "\$fastread" in
1700 yes) case "\$dflt" in
1701         '') ;;
1702         *) ans='';
1703                 case "\$silent-\$rp" in
1704                 true-) ;;
1705                 *) echo " " >&4;;
1706                 esac;;
1707         esac;;
1708 *) case "\$silent" in
1709         true) case "\$rp" in
1710                 '') ans='';;
1711                 esac;;
1712         esac;;
1713 esac
1714 while expr "X\$ans" : "X!" >/dev/null; do
1715         read answ
1716         set x \$xxxm
1717         shift
1718         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1719         case  "\$answ" in
1720         "!")
1721                 sh 1>&4
1722                 echo " "
1723                 $myecho
1724                 ;;
1725         !*)
1726                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1727                 shift
1728                 sh 1>&4 -c "\$*"
1729                 echo " "
1730                 $myecho
1731                 ;;
1732         "\$ans")
1733                 case "\$ans" in
1734                 \\&*)
1735                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1736                         shift
1737                         case "\$1" in
1738                         -d)
1739                                 fastread=yes
1740                                 echo "(OK, I'll run with -d after this question.)" >&4
1741                                 ;;
1742                         -*)
1743                                 echo "*** Sorry, \$1 not supported yet." >&4
1744                                 ;;
1745                         esac
1746                         $myecho
1747                         ans=!
1748                         ;;
1749                 esac;;
1750         *)
1751                 case "\$aok" in
1752                 y)
1753                         echo "*** Substitution done -- please confirm."
1754                         xxxm="\$ans"
1755                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1756                         xxxm="\$ans"
1757                         ans=!
1758                         ;;
1759                 *)
1760                         echo "*** Error -- try again."
1761                         ans=!
1762                         ;;
1763                 esac
1764                 $myecho
1765                 ;;
1766         esac
1767         case "\$ans\$xxxm\$nostick" in
1768         '')
1769                 ans=!
1770                 $myecho
1771                 ;;
1772         esac
1773 done
1774 case "\$ans" in
1775 '') ans="\$xxxm";;
1776 esac
1777 EOSC
1778
1779 : create .config dir to save info across Configure sessions
1780 test -d ../.config || mkdir ../.config
1781 cat >../.config/README <<EOF
1782 This directory created by Configure to save information that should
1783 persist across sessions for $package.
1784
1785 You may safely delete it if you wish.
1786 EOF
1787
1788 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
1789 case "$usedevel" in
1790 $define|true|[yY]*) ;;
1791 *) case "$xversion" in
1792    *[13579])
1793         cat >&4 <<EOH
1794 *** WHOA THERE!!! ***
1795
1796     This is an UNSTABLE DEVELOPMENT release.
1797     The version of this $package distribution is $xversion, that is, odd,
1798     (as opposed to even) and that signifies a development release.
1799     If you want a maintenance release, you want an even-numbered version.
1800
1801     Do ***NOT*** install this into production use.
1802     Data corruption and crashes are possible.
1803
1804     It is most seriously suggested that you do not continue any further
1805     unless you want to help in developing and debugging Perl.
1806
1807     If you *still* want to build perl, you can answer 'y' now,
1808     or pass -Dusedevel to Configure.
1809
1810 EOH
1811         rp='Do you really want to continue?'
1812         dflt='n'
1813         . ./myread
1814         case "$ans" in
1815         [yY]) echo >&4 "Okay, continuing."
1816               usedevel="$define" ;;
1817         *) echo >&4 "Okay, bye."
1818            exit 1
1819            ;;
1820         esac
1821         ;;
1822     esac
1823     ;;
1824 esac
1825 case "$usedevel" in
1826 $define|true|[yY]*)
1827         case "$versiononly" in
1828         '') versiononly="$define" ;;
1829         esac
1830         case "$installusrbinperl" in
1831         '') installusrbinperl="$undef" ;;
1832         esac
1833         ;;
1834 esac
1835
1836 : general instructions
1837 needman=true
1838 firsttime=true
1839 user=`(logname) 2>/dev/null`
1840 case "$user" in
1841 '') user=`whoami 2>&1`;;
1842 esac
1843 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1844         firsttime=false
1845         echo " "
1846         rp='Would you like to see the instructions?'
1847         dflt=n
1848         . ./myread
1849         case "$ans" in
1850         [yY]*) ;;
1851         *) needman=false;;
1852         esac
1853 fi
1854 if $needman; then
1855         cat <<EOH
1856
1857 This installation shell script will examine your system and ask you questions
1858 to determine how the perl5 package should be installed. If you get
1859 stuck on a question, you may use a ! shell escape to start a subshell or
1860 execute a command.  Many of the questions will have default answers in square
1861 brackets; typing carriage return will give you the default.
1862
1863 On some of the questions which ask for file or directory names you are allowed
1864 to use the ~name construct to specify the login directory belonging to "name",
1865 even if you don't have a shell which knows about that.  Questions where this is
1866 allowed will be marked "(~name ok)".
1867
1868 EOH
1869         rp=''
1870         dflt='Type carriage return to continue'
1871         . ./myread
1872         cat <<'EOH'
1873
1874 The prompter used in this script allows you to use shell variables and
1875 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1876 in the default answer, as if the default line was a set of arguments given to a
1877 script shell.  This means you may also use $* to repeat the whole default line,
1878 so you do not have to re-type everything to add something to the default.
1879
1880 Everytime there is a substitution, you will have to confirm.  If there is an
1881 error (e.g. an unmatched backtick), the default answer will remain unchanged
1882 and you will be prompted again.
1883
1884 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1885 the questions and use the computed defaults (or the previous answers if there
1886 was already a config.sh file). Type 'Configure -h' for a list of options.
1887 You may also start interactively and then answer '& -d' at any prompt to turn
1888 on the non-interactive behaviour for the remainder of the execution.
1889
1890 EOH
1891         . ./myread
1892         cat <<EOH
1893
1894 Much effort has been expended to ensure that this shell script will run on any
1895 Unix system.  If despite that it blows up on yours, your best bet is to edit
1896 Configure and run it again.  If you can't run Configure for some reason,
1897 you'll have to generate a config.sh file by hand.  Whatever problems you
1898 have, let me (perlbug@perl.org) know how I blew it.
1899
1900 This installation script affects things in two ways:
1901
1902 1) it may do direct variable substitutions on some of the files included
1903    in this kit.
1904 2) it builds a config.h file for inclusion in C programs.  You may edit
1905    any of these files as the need arises after running this script.
1906
1907 If you make a mistake on a question, there is no easy way to back up to it
1908 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1909 files.  Configure will offer to let you do this before it runs the SH files.
1910
1911 EOH
1912         dflt='Type carriage return to continue'
1913         . ./myread
1914         case "$firsttime" in
1915         true) echo $user >>../.config/instruct;;
1916         esac
1917 fi
1918
1919 : find out where common programs are
1920 echo " "
1921 echo "Locating common programs..." >&4
1922 cat <<EOSC >loc
1923 $startsh
1924 case \$# in
1925 0) exit 1;;
1926 esac
1927 thing=\$1
1928 shift
1929 dflt=\$1
1930 shift
1931 for dir in \$*; do
1932         case "\$thing" in
1933         .)
1934         if test -d \$dir/\$thing; then
1935                 echo \$dir
1936                 exit 0
1937         fi
1938         ;;
1939         *)
1940         for thisthing in \$dir/\$thing; do
1941                 : just loop through to pick last item
1942         done
1943         if test -f \$thisthing; then
1944                 echo \$thisthing
1945                 exit 0
1946         elif test -f \$dir/\$thing.exe; then
1947                 if test -n "$DJGPP"; then
1948                         echo \$dir/\$thing.exe
1949                 else
1950                         : on Eunice apparently
1951                         echo \$dir/\$thing
1952                 fi
1953                 exit 0
1954         fi
1955         ;;
1956         esac
1957 done
1958 echo \$dflt
1959 exit 1
1960 EOSC
1961 chmod +x loc
1962 $eunicefix loc
1963 loclist="
1964 awk
1965 cat
1966 comm
1967 cp
1968 echo
1969 expr
1970 grep
1971 ls
1972 make
1973 mkdir
1974 rm
1975 sed
1976 sort
1977 touch
1978 tr
1979 uniq
1980 "
1981 trylist="
1982 Mcc
1983 ar
1984 bison
1985 byacc
1986 cpp
1987 csh
1988 date
1989 egrep
1990 gzip
1991 less
1992 ln
1993 more
1994 nm
1995 nroff
1996 pg
1997 test
1998 uname
1999 zip
2000 "
2001 pth=`echo $PATH | sed -e "s/$p_/ /g"`
2002 pth="$pth /lib /usr/lib"
2003 for file in $loclist; do
2004         eval xxx=\$$file
2005         case "$xxx" in
2006         /*|?:[\\/]*)
2007                 if test -f "$xxx"; then
2008                         : ok
2009                 else
2010                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2011                         xxx=`./loc $file $file $pth`
2012                 fi
2013                 ;;
2014         '') xxx=`./loc $file $file $pth`;;
2015         *) xxx=`./loc $xxx $xxx $pth`;;
2016         esac
2017         eval $file=$xxx
2018         eval _$file=$xxx
2019         case "$xxx" in
2020         /*)
2021                 echo $file is in $xxx.
2022                 ;;
2023         ?:[\\/]*)
2024                 echo $file is in $xxx.
2025                 ;;
2026         *)
2027                 echo "I don't know where '$file' is, and my life depends on it." >&4
2028                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2029                 exit 1
2030                 ;;
2031         esac
2032 done
2033 echo " "
2034 echo "Don't worry if any of the following aren't found..."
2035 say=offhand
2036 for file in $trylist; do
2037         eval xxx=\$$file
2038         case "$xxx" in
2039         /*|?:[\\/]*)
2040                 if test -f "$xxx"; then
2041                         : ok
2042                 else
2043                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2044                         xxx=`./loc $file $file $pth`
2045                 fi
2046                 ;;
2047         '') xxx=`./loc $file $file $pth`;;
2048         *) xxx=`./loc $xxx $xxx $pth`;;
2049         esac
2050         eval $file=$xxx
2051         eval _$file=$xxx
2052         case "$xxx" in
2053         /*)
2054                 echo $file is in $xxx.
2055                 ;;
2056         ?:[\\/]*)
2057                 echo $file is in $xxx.
2058                 ;;
2059         *)
2060                 echo "I don't see $file out there, $say."
2061                 say=either
2062                 ;;
2063         esac
2064 done
2065 case "$egrep" in
2066 egrep)
2067         echo "Substituting grep for egrep."
2068         egrep=$grep
2069         ;;
2070 esac
2071 case "$ln" in
2072 ln)
2073         echo "Substituting cp for ln."
2074         ln=$cp
2075         ;;
2076 esac
2077 case "$test" in
2078 test)
2079         echo "Hopefully test is built into your sh."
2080         ;;
2081 *)
2082         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2083                 echo "Using the test built into your sh."
2084                 test=test
2085                 _test=test
2086         fi
2087         ;;
2088 esac
2089 case "$echo" in
2090 echo)
2091         echo "Hopefully echo is built into your sh."
2092         ;;
2093 '') ;;
2094 *)
2095         echo " "
2096 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2097         $echo $n "hi there$c" >foo1
2098         echo $n "hi there$c" >foo2
2099         if cmp foo1 foo2 >/dev/null 2>&1; then
2100                 echo "They are compatible.  In fact, they may be identical."
2101         else
2102                 case "$n" in
2103                 '-n') n='' c='\c';;
2104                 *) n='-n' c='';;
2105                 esac
2106                 cat <<FOO
2107 They are not compatible!  You are probably running ksh on a non-USG system.
2108 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2109 have echo built in and we may have to run some Bourne shell scripts.  That
2110 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2111
2112 FOO
2113                 $echo $n "The star should be here-->$c"
2114                 $echo "*"
2115         fi
2116         $rm -f foo1 foo2
2117         ;;
2118 esac
2119
2120 cat <<EOS >checkcc
2121 $startsh
2122 EOS
2123 cat <<'EOSC' >>checkcc
2124 case "$cc" in
2125 '') ;;
2126 *)  $rm -f try try.*
2127     $cat >try.c <<EOM
2128 int main(int argc, char *argv[]) {
2129   return 0;
2130 }
2131 EOM
2132     if $cc -o try $ccflags try.c; then
2133        :
2134     else
2135         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2136         despair=yes
2137         trygcc=yes
2138         case "$cc" in
2139         *gcc*) trygcc=no ;;
2140         esac
2141         case "`$cc -v -c try.c 2>&1`" in
2142         *gcc*) trygcc=no ;;
2143         esac
2144         if $test X"$trygcc" = Xyes; then
2145             if gcc -o try -c try.c; then
2146                 echo " "
2147                 echo "You seem to have a working gcc, though." >&4
2148                 rp="Would you like to use it?"
2149                 dflt=y
2150                 if $test -f myread; then
2151                     . ./myread
2152                 else
2153                     if $test -f UU/myread; then
2154                         . ./UU/myread
2155                     else
2156                         echo "Cannot find myread, sorry.  Aborting." >&2
2157                         exit 1
2158                     fi
2159                 fi  
2160                 case "$ans" in
2161                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2162                 esac
2163             fi
2164         fi
2165         if $test X"$despair" = Xyes; then
2166             $cat >&4 <<EOM
2167 You need to find a working C compiler.
2168 Either (purchase and) install the C compiler supplied by your OS vendor,
2169 or for a free C compiler try http://gcc.gnu.org/
2170 I cannot continue any further, aborting.
2171 EOM
2172             exit 1
2173         fi
2174     fi
2175     $rm -f try try.*
2176     ;;
2177 esac
2178 EOSC
2179
2180 : determine whether symbolic links are supported
2181 echo " "
2182 $touch blurfl
2183 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2184         echo "Symbolic links are supported." >&4
2185         lns="$ln -s"
2186 else
2187         echo "Symbolic links are NOT supported." >&4
2188         lns="$ln"
2189 fi
2190 $rm -f blurfl sym
2191
2192 : determine whether symbolic links are supported
2193 echo " "
2194 case "$lns" in
2195 *"ln -s")
2196         echo "Checking how to test for symbolic links..." >&4
2197         $lns blurfl sym
2198         if $test "X$issymlink" = X; then
2199                 sh -c "PATH= test -h sym" >/dev/null 2>&1
2200                 if test $? = 0; then
2201                         issymlink="test -h"
2202                 fi              
2203         fi
2204         if $test "X$issymlink" = X; then
2205                 if  $test -h >/dev/null 2>&1; then
2206                         issymlink="$test -h"
2207                         echo "Your builtin 'test -h' may be broken, I'm using external '$test -h'." >&4
2208                 fi              
2209         fi
2210         if $test "X$issymlink" = X; then
2211                 if $test -L sym 2>/dev/null; then
2212                         issymlink="$test -L"
2213                 fi
2214         fi
2215         if $test "X$issymlink" != X; then
2216                 echo "You can test for symbolic links with '$issymlink'." >&4
2217         else
2218                 echo "I do not know how you can test for symbolic links." >&4
2219         fi
2220         $rm -f blurfl sym
2221         ;;
2222 *)      echo "No symbolic links, so not testing for their testing..." >&4
2223         ;;
2224 esac
2225 echo " "
2226
2227
2228 case "$mksymlinks" in
2229 $define|true|[yY]*)
2230         case "$src" in
2231         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2232                 exit 1
2233                 ;;
2234         *)      case "$lns:$issymlink" in
2235                 *"ln -s:"*"test -"?)
2236                         echo "Creating the symbolic links..." >&4
2237                         echo "(First creating the subdirectories...)" >&4
2238                         cd ..
2239                         awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | sort -u | while true; do
2240                                 read directory
2241                                 test -z "$directory" && break
2242                                 mkdir -p $directory
2243                         done
2244                         # Sanity check 1.
2245                         if test ! -d t/base; then
2246                                 echo "Failed to create the subdirectories.  Aborting." >&4
2247                                 exit 1
2248                         fi
2249                         echo "(Then creating the symlinks...)" >&4
2250                         awk '{print $1}' $src/MANIFEST | while true; do
2251                                 read filename
2252                                 test -z "$filename" && break
2253                                 if test -f $filename; then
2254                                         if $issymlink $filename; then
2255                                                 rm -f $filename
2256                                         fi
2257                                 fi
2258                                 if test -f $filename; then
2259                                         echo "$filename already exists, not symlinking."
2260                                 else
2261                                         ln -s $src/$filename $filename
2262                                 fi
2263                         done
2264                         # Sanity check 2.
2265                         if test ! -f t/base/commonsense.t; then
2266                                 echo "Failed to create the symlinks.  Aborting." >&4
2267                                 exit 1
2268                         fi
2269                         cd UU
2270                         ;;
2271                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2272                         ;;
2273                 esac
2274                 ;;
2275         esac
2276         ;;
2277 esac
2278
2279 : see whether [:lower:] and [:upper:] are supported character classes
2280 echo " "
2281 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2282 ABYZ)
2283         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2284         up='[:upper:]'
2285         low='[:lower:]'
2286         ;;
2287 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2288         # (0xc9 and 0xd1), therefore that is a nice testing point.
2289         if test "X$up" = X -o "X$low" = X; then
2290             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2291             ij) up='[A-Z]'
2292                 low='[a-z]'
2293                 ;;
2294             esac
2295         fi
2296         if test "X$up" = X -o "X$low" = X; then
2297             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2298             ij) up='A-Z'
2299                 low='a-z'
2300                 ;;
2301             esac
2302         fi
2303         if test "X$up" = X -o "X$low" = X; then
2304             case "`echo IJ | od -x 2>/dev/null`" in
2305             *C9D1*|*c9d1*)
2306                 echo "Hey, this might be EBCDIC." >&4
2307                 if test "X$up" = X -o "X$low" = X; then
2308                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2309                     ij) up='[A-IJ-RS-Z]'
2310                         low='[a-ij-rs-z]'
2311                         ;;
2312                     esac
2313                 fi
2314                 if test "X$up" = X -o "X$low" = X; then
2315                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2316                     ij) up='A-IJ-RS-Z'
2317                         low='a-ij-rs-z'
2318                         ;;
2319                     esac
2320                 fi
2321                 ;;
2322             esac
2323         fi
2324 esac
2325 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2326 ij)
2327     echo "Using $up and $low to convert case." >&4
2328     ;;
2329 *)
2330     echo "I don't know how to translate letters from upper to lower case." >&4
2331     echo "Your tr is not acting any way I know of." >&4
2332     exit 1
2333     ;;
2334 esac
2335 : set up the translation script tr, must be called with ./tr of course
2336 cat >tr <<EOSC
2337 $startsh
2338 case "\$1\$2" in
2339 '[A-Z][a-z]') exec $tr '$up' '$low';;
2340 '[a-z][A-Z]') exec $tr '$low' '$up';;
2341 esac
2342 exec $tr "\$@"
2343 EOSC
2344 chmod +x tr
2345 $eunicefix tr
2346
2347 : Try to determine whether config.sh was made on this system
2348 case "$config_sh" in
2349 '')
2350 myuname=`$uname -a 2>/dev/null`
2351 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2352 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2353 # because the A-Z/a-z are not consecutive.
2354 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2355         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2356 newmyuname="$myuname"
2357 dflt=n
2358 case "$knowitall" in
2359 '')
2360         if test -f ../config.sh; then
2361                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2362                         eval "`grep myuname= ../config.sh`"
2363                 fi
2364                 if test "X$myuname" = "X$newmyuname"; then
2365                         dflt=y
2366                 fi
2367         fi
2368         ;;
2369 *) dflt=y;;
2370 esac
2371
2372 : Get old answers from old config file if Configure was run on the
2373 : same system, otherwise use the hints.
2374 hint=default
2375 cd ..
2376 if test -f config.sh; then
2377         echo " "
2378         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2379         . UU/myread
2380         case "$ans" in
2381         n*|N*) echo "OK, I'll ignore it."
2382                 mv config.sh config.sh.old
2383                 myuname="$newmyuname"
2384                 ;;
2385         *)  echo "Fetching default answers from your old config.sh file..." >&4
2386                 tmp_n="$n"
2387                 tmp_c="$c"
2388                 tmp_sh="$sh"
2389                 . ./config.sh
2390                 cp config.sh UU
2391                 n="$tmp_n"
2392                 c="$tmp_c"
2393                 : Older versions did not always set $sh.  Catch re-use of such
2394                 : an old config.sh.
2395                 case "$sh" in
2396                 '') sh="$tmp_sh" ;;
2397                 esac
2398                 hint=previous
2399                 ;;
2400         esac
2401 fi
2402 . ./UU/checkcc
2403 if test ! -f config.sh; then
2404         $cat <<EOM
2405
2406 First time through, eh?  I have some defaults handy for some systems
2407 that need some extra help getting the Configure answers right:
2408
2409 EOM
2410         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2411         dflt=''
2412         : Half the following guesses are probably wrong... If you have better
2413         : tests or hints, please send them to perlbug@perl.org
2414         : The metaconfig authors would also appreciate a copy...
2415         $test -f /irix && osname=irix
2416         $test -f /xenix && osname=sco_xenix
2417         $test -f /dynix && osname=dynix
2418         $test -f /dnix && osname=dnix
2419         $test -f /lynx.os && osname=lynxos
2420         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2421         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2422         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2423         $test -f /bin/mips && /bin/mips && osname=mips
2424         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2425                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2426         $test -d /usr/apollo/bin && osname=apollo
2427         $test -f /etc/saf/_sactab && osname=svr4
2428         $test -d /usr/include/minix && osname=minix
2429         if $test -d /MachTen -o -d /MachTen_Folder; then
2430                 osname=machten
2431                 if $test -x /sbin/version; then
2432                         osvers=`/sbin/version | $awk '{print $2}' |
2433                         $sed -e 's/[A-Za-z]$//'`
2434                 elif $test -x /usr/etc/version; then
2435                         osvers=`/usr/etc/version | $awk '{print $2}' |
2436                         $sed -e 's/[A-Za-z]$//'`
2437                 else
2438                         osvers="$2.$3"
2439                 fi
2440         fi
2441
2442         $test -f /sys/posix.dll &&
2443                 $test -f /usr/bin/what &&
2444                 set X `/usr/bin/what /sys/posix.dll` &&
2445                 $test "$3" = UWIN &&
2446                 osname=uwin &&
2447                 osvers="$5"
2448
2449         if $test -f $uname; then
2450                 set X $myuname
2451                 shift
2452
2453                 case "$5" in
2454                 fps*) osname=fps ;;
2455                 mips*)
2456                         case "$4" in
2457                         umips) osname=umips ;;
2458                         *) osname=mips ;;
2459                         esac;;
2460                 [23]100) osname=mips ;;
2461                 next*) osname=next ;;
2462                 i386*)
2463                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2464                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2465                                 osname='sco'
2466                                 osvers=$tmp
2467                         elif $test -f /etc/kconfig; then
2468                                 osname=isc
2469                                 if test "$lns" = "$ln -s"; then
2470                                         osvers=4
2471                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2472                                         osvers=3
2473                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2474                                         osvers=2
2475                                 fi
2476                         fi
2477                         tmp=''
2478                         ;;
2479                 pc*)
2480                         if test -n "$DJGPP"; then
2481                                 osname=dos
2482                                 osvers=djgpp
2483                         fi
2484                         ;;
2485                 esac
2486
2487                 case "$1" in
2488                 aix) osname=aix
2489                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2490                         case "$tmp" in
2491                         'not found') osvers="$4"."$3" ;;
2492                         '<3240'|'<>3240') osvers=3.2.0 ;;
2493                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2494                         '=3250'|'>3250') osvers=3.2.5 ;;
2495                         *) osvers=$tmp;;
2496                         esac
2497                         ;;
2498                 bsd386) osname=bsd386
2499                         osvers=`$uname -r`
2500                         ;;
2501                 cygwin*) osname=cygwin
2502                         osvers="$3"
2503                         ;;
2504                 *dc.osx) osname=dcosx
2505                         osvers="$3"
2506                         ;;
2507                 dnix) osname=dnix
2508                         osvers="$3"
2509                         ;;
2510                 domainos) osname=apollo
2511                         osvers="$3"
2512                         ;;
2513                 dgux) osname=dgux 
2514                         osvers="$3"
2515                         ;;
2516                 dynixptx*) osname=dynixptx
2517                         osvers=`echo "$4"|sed 's/^v//'`
2518                         ;;
2519                 freebsd) osname=freebsd 
2520                         osvers="$3" ;;
2521                 genix) osname=genix ;;
2522                 hp*) osname=hpux 
2523                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2524                         ;;
2525                 irix*) osname=irix
2526                         case "$3" in
2527                         4*) osvers=4 ;;
2528                         5*) osvers=5 ;;
2529                         *)      osvers="$3" ;;
2530                         esac
2531                         ;;
2532                 linux) osname=linux
2533                         case "$3" in
2534                         *)      osvers="$3" ;;
2535                         esac
2536                         ;;
2537                 MiNT) osname=mint
2538                         ;;
2539                 netbsd*) osname=netbsd
2540                         osvers="$3"
2541                         ;;
2542                 news-os) osvers="$3"
2543                         case "$3" in
2544                         4*) osname=newsos4 ;;
2545                         *) osname=newsos ;;
2546                         esac
2547                         ;;
2548                 next*) osname=next ;;
2549                 nonstop-ux) osname=nonstopux ;;
2550                 POSIX-BC | posix-bc ) osname=posix-bc
2551                         osvers="$3"
2552                         ;;
2553                 powerux | power_ux | powermax_os | powermaxos | \
2554                 powerunix | power_unix) osname=powerux
2555                         osvers="$3"
2556                         ;;
2557                 qnx) osname=qnx
2558                         osvers="$4"
2559                         ;;
2560                 solaris) osname=solaris
2561                         case "$3" in
2562                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2563                         *)      osvers="$3" ;;
2564                         esac
2565                         ;;
2566                 sunos) osname=sunos
2567                         case "$3" in
2568                         5*) osname=solaris
2569                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2570                         *)      osvers="$3" ;;
2571                         esac
2572                         ;;
2573                 titanos) osname=titanos
2574                         case "$3" in
2575                         1*) osvers=1 ;;
2576                         2*) osvers=2 ;;
2577                         3*) osvers=3 ;;
2578                         4*) osvers=4 ;;
2579                         *)      osvers="$3" ;;
2580                         esac
2581                         ;;
2582                 ultrix) osname=ultrix
2583                         osvers="$3"
2584                         ;;
2585                 osf1|mls+)      case "$5" in
2586                                 alpha)
2587                                         osname=dec_osf
2588                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
2589                                         case "$osvers" in
2590                                         [1-9].[0-9]*) ;;
2591                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
2592                                         esac
2593                                         ;;
2594                         hp*)    osname=hp_osf1  ;;
2595                         mips)   osname=mips_osf1 ;;
2596                         esac
2597                         ;;
2598                 unixware) osname=svr5
2599                         osvers="$4"
2600                         ;;
2601                 uts) osname=uts
2602                         osvers="$3"
2603                         ;;
2604                 $2) case "$osname" in
2605                         *isc*) ;;
2606                         *freebsd*) ;;
2607                         svr*)
2608                                 : svr4.x or possibly later
2609                                 case "svr$3" in 
2610                                 ${osname}*)
2611                                         osname=svr$3
2612                                         osvers=$4
2613                                         ;;
2614                                 esac
2615                                 case "$osname" in
2616                                 svr4.0)
2617                                         : Check for ESIX
2618                                         if test -f /stand/boot ; then
2619                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2620                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2621                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2622                                                         if test -n "$isesix"; then
2623                                                                 osname=esix4
2624                                                         fi
2625                                                 fi
2626                                         fi
2627                                         ;;
2628                                 esac
2629                                 ;;
2630                         *)      if test -f /etc/systemid; then
2631                                         osname=sco
2632                                         set `echo $3 | $sed 's/\./ /g'` $4
2633                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2634                                                 osvers=$1.$2.$3
2635                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2636                                                 osvers=$1.$2
2637                                         elif $test -f $src/hints/sco_$1.sh; then
2638                                                 osvers=$1
2639                                         fi
2640                                 else
2641                                         case "$osname" in
2642                                         '') : Still unknown.  Probably a generic Sys V.
2643                                                 osname="sysv"
2644                                                 osvers="$3"
2645                                                 ;;
2646                                         esac
2647                                 fi
2648                                 ;;
2649                         esac
2650                         ;;
2651                 *)      case "$osname" in
2652                         '') : Still unknown.  Probably a generic BSD.
2653                                 osname="$1"
2654                                 osvers="$3"
2655                                 ;;
2656                         esac
2657                         ;;
2658                 esac
2659         else
2660                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2661                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2662                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2663                                 osname=news_os
2664                         fi
2665                         $rm -f UU/kernel.what
2666                 elif test -d c:/.; then
2667                         set X $myuname
2668                         osname=os2
2669                         osvers="$5"
2670                 fi
2671         fi
2672         
2673         : Now look for a hint file osname_osvers, unless one has been
2674         : specified already.
2675         case "$hintfile" in
2676         ''|' ')
2677                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
2678                 : Also try without trailing minor version numbers.
2679                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
2680                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
2681                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
2682                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
2683                 case "$file" in
2684                 '') dflt=none ;;
2685                 *)  case "$osvers" in
2686                         '') dflt=$file
2687                                 ;;
2688                         *)  if $test -f $src/hints/$file.sh ; then
2689                                         dflt=$file
2690                                 elif $test -f $src/hints/$xfile.sh ; then
2691                                         dflt=$xfile
2692                                 elif $test -f $src/hints/$xxfile.sh ; then
2693                                         dflt=$xxfile
2694                                 elif $test -f $src/hints/$xxxfile.sh ; then
2695                                         dflt=$xxxfile
2696                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2697                                         dflt=$xxxxfile
2698                                 elif $test -f "$src/hints/${osname}.sh" ; then
2699                                         dflt="${osname}"
2700                                 else
2701                                         dflt=none
2702                                 fi
2703                                 ;;
2704                         esac
2705                         ;;
2706                 esac
2707                 if $test -f Policy.sh ; then
2708                         case "$dflt" in
2709                         *Policy*) ;;
2710                         none) dflt="Policy" ;;
2711                         *) dflt="Policy $dflt" ;;
2712                         esac
2713                 fi
2714                 ;;
2715         *)
2716                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2717                 ;;
2718         esac
2719
2720         if $test -f Policy.sh ; then
2721                 $cat <<EOM
2722
2723 There's also a Policy hint file available, which should make the
2724 site-specific (policy) questions easier to answer.
2725 EOM
2726
2727         fi
2728
2729         $cat <<EOM
2730
2731 You may give one or more space-separated answers, or "none" if appropriate.
2732 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2733 is a good thing.  DO NOT give a wrong version or a wrong OS.
2734
2735 EOM
2736
2737         rp="Which of these apply, if any?"
2738         . UU/myread
2739         tans=$ans
2740         for file in $tans; do
2741                 if $test X$file = XPolicy -a -f Policy.sh; then
2742                         . Policy.sh
2743                         $cat Policy.sh >> UU/config.sh
2744                 elif $test -f $src/hints/$file.sh; then
2745                         . $src/hints/$file.sh
2746                         $cat $src/hints/$file.sh >> UU/config.sh
2747                 elif $test X$tans = X -o X$tans = Xnone ; then
2748                         : nothing
2749                 else
2750                         : Give one chance to correct a possible typo.
2751                         echo "$file.sh does not exist"
2752                         dflt=$file
2753                         rp="hint to use instead?"
2754                         . UU/myread
2755                         for file in $ans; do
2756                                 if $test -f "$src/hints/$file.sh"; then
2757                                         . $src/hints/$file.sh
2758                                         $cat $src/hints/$file.sh >> UU/config.sh
2759                                 elif $test X$ans = X -o X$ans = Xnone ; then
2760                                         : nothing
2761                                 else
2762                                         echo "$file.sh does not exist -- ignored."
2763                                 fi
2764                         done
2765                 fi
2766         done
2767
2768         hint=recommended
2769         : Remember our hint file for later.
2770         if $test -f "$src/hints/$file.sh" ; then
2771                 hintfile="$file"
2772         else
2773                 hintfile=''
2774         fi
2775 fi
2776 cd UU
2777 ;;
2778 *)
2779         echo " "
2780         echo "Fetching default answers from $config_sh..." >&4
2781         tmp_n="$n"
2782         tmp_c="$c"
2783         cd ..
2784         cp $config_sh config.sh 2>/dev/null
2785         chmod +w config.sh
2786         . ./config.sh
2787         cd UU
2788         cp ../config.sh .
2789         n="$tmp_n"
2790         c="$tmp_c"
2791         hint=previous
2792         ;;
2793 esac
2794 test "$override" && . ./optdef.sh
2795
2796 : Restore computed paths
2797 for file in $loclist $trylist; do
2798         eval $file="\$_$file"
2799 done
2800
2801 cat << EOM
2802
2803 Configure uses the operating system name and version to set some defaults.
2804 The default value is probably right if the name rings a bell. Otherwise,
2805 since spelling matters for me, either accept the default or answer "none"
2806 to leave it blank.
2807
2808 EOM
2809 case "$osname" in
2810         ''|' ')
2811                 case "$hintfile" in
2812                 ''|' '|none) dflt=none ;;
2813                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2814                 esac
2815                 ;;
2816         *) dflt="$osname" ;;
2817 esac
2818 rp="Operating system name?"
2819 . ./myread
2820 case "$ans" in
2821 none)  osname='' ;;
2822 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2823 esac
2824 echo " "
2825 case "$osvers" in
2826         ''|' ')
2827                 case "$hintfile" in
2828                 ''|' '|none) dflt=none ;;
2829                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2830                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2831                         case "$dflt" in
2832                         ''|' ') dflt=none ;;
2833                         esac
2834                         ;;
2835                 esac
2836                 ;;
2837         *) dflt="$osvers" ;;
2838 esac
2839 rp="Operating system version?"
2840 . ./myread
2841 case "$ans" in
2842 none)  osvers='' ;;
2843 *) osvers="$ans" ;;
2844 esac
2845
2846
2847 . ./posthint.sh
2848
2849 : who configured the system
2850 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2851 cf_by=`(logname) 2>/dev/null`
2852 case "$cf_by" in
2853 "")
2854         cf_by=`(whoami) 2>/dev/null`
2855         case "$cf_by" in
2856         "") cf_by=unknown ;;
2857         esac ;;
2858 esac
2859
2860 : set up the script used to warn in case of inconsistency
2861 cat <<EOS >whoa
2862 $startsh
2863 EOS
2864 cat <<'EOSC' >>whoa
2865 dflt=y
2866 echo " "
2867 echo "*** WHOA THERE!!! ***" >&4
2868 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2869 rp="    Keep the $hint value?"
2870 . ./myread
2871 case "$ans" in
2872 y) td=$was; tu=$was;;
2873 esac
2874 EOSC
2875
2876 : function used to set $1 to $val
2877 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2878 case "$val$was" in
2879 $define$undef) . ./whoa; eval "$var=\$td";;
2880 $undef$define) . ./whoa; eval "$var=\$tu";;
2881 *) eval "$var=$val";;
2882 esac'
2883
2884 case "$usethreads" in
2885 $define|true|[yY]*)     dflt='y';;
2886 *) dflt='n';;
2887 esac
2888 cat <<EOM
2889
2890 Perl can be built to take advantage of threads on some systems.
2891 To do so, Configure can be run with -Dusethreads.
2892
2893 Note that threading is a highly experimental feature, and
2894 some known race conditions still remain.  If you choose to try
2895 it, be very sure to not actually deploy it for production
2896 purposes.  README.threads has more details, and is required
2897 reading if you enable threads.
2898
2899 If this doesn't make any sense to you, just accept the default '$dflt'.
2900 EOM
2901 rp='Build a threading Perl?'
2902 . ./myread
2903 case "$ans" in
2904 y|Y)    val="$define" ;;
2905 *)      val="$undef" ;;
2906 esac
2907 set usethreads
2908 eval $setvar
2909
2910 case "$usethreads" in
2911 $define)
2912         $cat <<EOM
2913
2914 As of 5.5.640, Perl has two different internal threading implementations,
2915 the 5.005 version (5005threads) and an interpreter-based version
2916 (ithreads) that has one interpreter per thread.  Both are very 
2917 experimental.  This arrangement exists to help developers work out
2918 which one is better.
2919
2920 If you're a casual user, you probably don't want interpreter-threads
2921 at this time.  There doesn't yet exist a way to create threads from
2922 within Perl in this model, i.e., "use Thread;" will NOT work.
2923 EOM
2924         : Default to ithreads unless overridden on command line or with
2925         : old config.sh
2926         dflt='y'
2927         case "$use5005threads" in
2928                 $define|true|[yY]*) dflt='n';;
2929         esac
2930         case "$useithreads" in
2931                 $undef|false|[nN]*) dflt='n';;
2932         esac
2933         rp='Use interpreter-based ithreads?'
2934         . ./myread
2935         case "$ans" in
2936         y|Y)    val="$define" ;;
2937         *)      val="$undef" ;;
2938         esac
2939         set useithreads
2940         eval $setvar
2941         : Now set use5005threads to the opposite value.
2942         case "$useithreads" in
2943         $define) val="$undef" ;;
2944         *) val="$define" ;;
2945         esac
2946         set use5005threads
2947         eval $setvar
2948         ;;
2949 *)
2950         useithreads="$undef"
2951         use5005threads="$undef"
2952         ;;
2953 esac
2954
2955 case "$useithreads$use5005threads" in
2956 "$define$define")
2957         $cat >&4 <<EOM
2958
2959 You cannot have both the ithreads and the 5.005 threads enabled
2960 at the same time.  Disabling the 5.005 threads since they are
2961 much less stable than the ithreads.
2962
2963 EOM
2964         use5005threads="$undef"
2965         ;;
2966 esac
2967
2968 case "$d_oldpthreads" in
2969 '')     : Configure tests would be welcome here.  For now, assume undef.
2970         val="$undef" ;;
2971 *)      val="$d_oldpthreads" ;;
2972 esac
2973 set d_oldpthreads
2974 eval $setvar
2975
2976
2977 case "$usethreads" in
2978 "$define"|true|[yY]*)
2979 : Look for a hint-file generated 'call-back-unit'.  If the
2980 : user has specified that a threading perl is to be built,
2981 : we may need to set or change some other defaults.
2982         if $test -f usethreads.cbu; then
2983                 echo "Your platform has some specific hints for threaded builds, using them..."
2984                 . ./usethreads.cbu
2985         else
2986                 $cat <<EOM
2987 (Your platform doesn't have any specific hints for threaded builds.
2988  Assuming POSIX threads, then.)
2989 EOM
2990         fi
2991         ;;
2992 esac
2993
2994 cat <<EOM
2995
2996 Perl can be built so that multiple Perl interpreters can coexist
2997 within the same Perl executable.
2998 EOM
2999
3000 case "$useithreads" in
3001 $define)
3002         cat <<EOM
3003 This multiple interpreter support is required for interpreter-based threads.
3004 EOM
3005         val="$define"
3006         ;;
3007 *)      case "$usemultiplicity" in
3008         $define|true|[yY]*)     dflt='y';;
3009         *) dflt='n';;
3010         esac
3011         echo " "
3012         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
3013         rp='Build Perl for multiplicity?'
3014         . ./myread
3015         case "$ans" in
3016         y|Y)    val="$define" ;;
3017         *)      val="$undef" ;;
3018         esac
3019         ;;
3020 esac
3021 set usemultiplicity
3022 eval $setvar
3023
3024 : make some quick guesses about what we are up against
3025 echo " "
3026 $echo $n "Hmm...  $c"
3027 echo exit 1 >bsd
3028 echo exit 1 >usg
3029 echo exit 1 >v7
3030 echo exit 1 >osf1
3031 echo exit 1 >eunice
3032 echo exit 1 >xenix
3033 echo exit 1 >venix
3034 echo exit 1 >os2
3035 d_bsd="$undef"
3036 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3037 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3038 then
3039         echo "Looks kind of like an OSF/1 system, but we'll see..."
3040         echo exit 0 >osf1
3041 elif test `echo abc | $tr a-z A-Z` = Abc ; then
3042         xxx=`./loc addbib blurfl $pth`
3043         if $test -f $xxx; then
3044         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3045                 echo exit 0 >bsd
3046                 echo exit 0 >usg
3047         else
3048                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3049                         echo "Looks kind of like an extended USG system, but we'll see..."
3050                 else
3051                         echo "Looks kind of like a USG system, but we'll see..."
3052                 fi
3053                 echo exit 0 >usg
3054         fi
3055 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3056         echo "Looks kind of like a BSD system, but we'll see..."
3057         d_bsd="$define"
3058         echo exit 0 >bsd
3059 else
3060         echo "Looks kind of like a Version 7 system, but we'll see..."
3061         echo exit 0 >v7
3062 fi
3063 case "$eunicefix" in
3064 *unixtovms*)
3065         $cat <<'EOI'
3066 There is, however, a strange, musty smell in the air that reminds me of
3067 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3068 EOI
3069         echo exit 0 >eunice
3070         d_eunice="$define"
3071 : it so happens the Eunice I know will not run shell scripts in Unix format
3072         ;;
3073 *)
3074         echo " "
3075         echo "Congratulations.  You aren't running Eunice."
3076         d_eunice="$undef"
3077         ;;
3078 esac
3079 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3080 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
3081 : semicolon as a patch separator
3082 case "$p_" in
3083 :) ;;
3084 *)
3085         $cat <<'EOI'
3086 I have the feeling something is not exactly right, however...don't tell me...
3087 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3088 (Or you may be running DOS with DJGPP.)
3089 EOI
3090         echo exit 0 >os2
3091         ;;
3092 esac
3093 if test -f /xenix; then
3094         echo "Actually, this looks more like a XENIX system..."
3095         echo exit 0 >xenix
3096         d_xenix="$define"
3097 else
3098         echo " "
3099         echo "It's not Xenix..."
3100         d_xenix="$undef"
3101 fi
3102 chmod +x xenix
3103 $eunicefix xenix
3104 if test -f /venix; then
3105         echo "Actually, this looks more like a VENIX system..."
3106         echo exit 0 >venix
3107 else
3108         echo " "
3109         if ./xenix; then
3110                 : null
3111         else
3112                 echo "Nor is it Venix..."
3113         fi
3114 fi
3115 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3116 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3117 $rm -f foo
3118
3119 case "$cc" in
3120 '') dflt=cc;;
3121 *) dflt="$cc";;
3122 esac
3123 rp="Use which C compiler?"
3124 . ./myread
3125 cc="$ans"
3126 : Look for a hint-file generated 'call-back-unit'.  Now that the
3127 : user has specified the compiler, we may need to set or change some
3128 : other defaults.
3129 if $test -f cc.cbu; then
3130     . ./cc.cbu
3131 fi
3132 . ./checkcc
3133
3134 echo " "
3135 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3136 $cat >gccvers.c <<EOM
3137 #include <stdio.h>
3138 int main() {
3139 #ifdef __GNUC__
3140 #ifdef __VERSION__
3141         printf("%s\n", __VERSION__);
3142 #else
3143         printf("%s\n", "1");
3144 #endif
3145 #endif
3146         exit(0);
3147 }
3148 EOM
3149 if $cc -o gccvers $ccflags $ldflags gccvers.c; then
3150         gccversion=`./gccvers`
3151         case "$gccversion" in
3152         '') echo "You are not using GNU cc." ;;
3153         *)  echo "You are using GNU cc $gccversion."
3154             ccname=gcc  
3155             ;;
3156         esac
3157 else
3158         echo " "
3159         echo "*** WHOA THERE!!! ***" >&4
3160         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3161         case "$knowitall" in
3162         '')
3163         echo "    You'd better start hunting for one and let me know about it." >&4
3164                 exit 1
3165                 ;;
3166         esac
3167 fi
3168 $rm -f gccvers*
3169 case "$gccversion" in
3170 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3171 esac
3172 case "$gccversion" in
3173 '') gccosandvers='' ;;
3174 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3175    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3176    gccshortvers=''
3177    case "$gccosandvers" in
3178    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3179    $osname$osvers) ;; # looking good
3180    $osname*) cat <<EOM >&4
3181
3182 *** WHOA THERE!!! ***
3183
3184     Your gcc has not been compiled for the exact release of
3185     your operating system ($gccosandvers versus $osname$osvers).
3186
3187     In general it is a good idea to keep gcc synchronized with
3188     the operating system because otherwise serious problems
3189     may ensue when trying to compile software, like Perl.
3190
3191     I'm trying to be optimistic here, though, and will continue.
3192     If later during the configuration and build icky compilation
3193     problems appear (headerfile conflicts being the most common
3194     manifestation), I suggest reinstalling the gcc to match
3195     your operating system release.
3196
3197 EOM
3198       ;;
3199    *) gccosandvers='' ;; # failed to parse, better be silent
3200    esac
3201    ;;
3202 esac
3203 case "$ccname" in
3204 '') ccname="$cc" ;;
3205 esac
3206
3207 : see how we invoke the C preprocessor
3208 echo " "
3209 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3210 cat <<'EOT' >testcpp.c
3211 #define ABC abc
3212 #define XYZ xyz
3213 ABC.XYZ
3214 EOT
3215 cd ..
3216 if test ! -f cppstdin; then
3217         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3218                 # AIX cc -E doesn't show the absolute headerfile
3219                 # locations but we'll cheat by using the -M flag.
3220                 echo 'cat >.$$.c; rm -f .$$.u; '"$cc"' ${1+"$@"} -M -c .$$.c 2>/dev/null; test -s .$$.u && awk '"'"'$2 ~ /\.h$/ { print "# 0 \""$2"\"" }'"'"' .$$.u; rm -f .$$.o .$$.u; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' > cppstdin
3221         else
3222                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3223         fi
3224 else
3225         echo "Keeping your $hint cppstdin wrapper."
3226 fi
3227 chmod 755 cppstdin
3228 wrapper=`pwd`/cppstdin
3229 ok='false'
3230 cd UU
3231
3232 if $test "X$cppstdin" != "X" && \
3233         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3234         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3235 then
3236         echo "You used to use $cppstdin $cppminus so we'll use that again."
3237         case "$cpprun" in
3238         '') echo "But let's see if we can live without a wrapper..." ;;
3239         *)
3240                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3241                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3242                 then
3243                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3244                         ok='true'
3245                 else
3246                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3247                 fi
3248                 ;;
3249         esac
3250 else
3251         case "$cppstdin" in
3252         '') ;;
3253         *)
3254                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3255                 ;;
3256         esac
3257 fi
3258
3259 if $ok; then
3260         : nothing
3261 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3262         $cc -E <testcpp.c >testcpp.out 2>&1; \
3263         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3264         echo "Yup, it does."
3265         x_cpp="$cc -E"
3266         x_minus='';
3267 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3268         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3269         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3270         echo "Yup, it does."
3271         x_cpp="$cc -E"
3272         x_minus='-';
3273 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3274         $cc -P <testcpp.c >testcpp.out 2>&1; \
3275         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3276         echo "Yipee, that works!"
3277         x_cpp="$cc -P"
3278         x_minus='';
3279 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3280         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3281         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3282         echo "At long last!"
3283         x_cpp="$cc -P"
3284         x_minus='-';
3285 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3286         $cpp <testcpp.c >testcpp.out 2>&1; \
3287         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3288         echo "It works!"
3289         x_cpp="$cpp"
3290         x_minus='';
3291 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3292         $cpp - <testcpp.c >testcpp.out 2>&1; \
3293         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3294         echo "Hooray, it works!  I was beginning to wonder."
3295         x_cpp="$cpp"
3296         x_minus='-';
3297 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3298         $wrapper <testcpp.c >testcpp.out 2>&1; \
3299         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3300         x_cpp="$wrapper"
3301         x_minus=''
3302         echo "Eureka!"
3303 else
3304         dflt=''
3305         rp="No dice.  I can't find a C preprocessor.  Name one:"
3306         . ./myread
3307         x_cpp="$ans"
3308         x_minus=''
3309         $x_cpp <testcpp.c >testcpp.out 2>&1
3310         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3311                 echo "OK, that will do." >&4
3312         else
3313 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3314                 exit 1
3315         fi
3316 fi
3317
3318 case "$ok" in
3319 false)
3320         cppstdin="$x_cpp"
3321         cppminus="$x_minus"
3322         cpprun="$x_cpp"
3323         cpplast="$x_minus"
3324         set X $x_cpp
3325         shift
3326         case "$1" in
3327         "$cpp")
3328                 echo "Perhaps can we force $cc -E using a wrapper..."
3329                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3330                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3331                 then
3332                         echo "Yup, we can."
3333                         cppstdin="$wrapper"
3334                         cppminus='';
3335                 else
3336                         echo "Nope, we'll have to live without it..."
3337                 fi
3338                 ;;
3339         esac
3340         case "$cpprun" in
3341         "$wrapper")
3342                 cpprun=''
3343                 cpplast=''
3344                 ;;
3345         esac
3346         ;;
3347 esac
3348
3349 case "$cppstdin" in
3350 "$wrapper"|'cppstdin') ;;
3351 *) $rm -f $wrapper;;
3352 esac
3353 $rm -f testcpp.c testcpp.out
3354
3355 : decide how portable to be.  Allow command line overrides.
3356 case "$d_portable" in
3357 "$undef") ;;
3358 *)      d_portable="$define" ;;
3359 esac
3360
3361 : set up shell script to do ~ expansion
3362 cat >filexp <<EOSS
3363 $startsh
3364 : expand filename
3365 case "\$1" in
3366  ~/*|~)
3367         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3368         ;;
3369  ~*)
3370         if $test -f /bin/csh; then
3371                 /bin/csh -f -c "glob \$1"
3372                 failed=\$?
3373                 echo ""
3374                 exit \$failed
3375         else
3376                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3377                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3378                 if $test ! -d "\$dir"; then
3379                         me=\`basename \$0\`
3380                         echo "\$me: can't locate home directory for: \$name" >&2
3381                         exit 1
3382                 fi
3383                 case "\$1" in
3384                 */*)
3385                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3386                         ;;
3387                 *)
3388                         echo \$dir
3389                         ;;
3390                 esac
3391         fi
3392         ;;
3393 *)
3394         echo \$1
3395         ;;
3396 esac
3397 EOSS
3398 chmod +x filexp
3399 $eunicefix filexp
3400
3401 : now set up to get a file name
3402 cat <<EOS >getfile
3403 $startsh
3404 EOS
3405 cat <<'EOSC' >>getfile
3406 tilde=''
3407 fullpath=''
3408 already=''
3409 skip=''
3410 none_ok=''
3411 exp_file=''
3412 nopath_ok=''
3413 orig_rp="$rp"
3414 orig_dflt="$dflt"
3415 case "$gfpth" in
3416 '') gfpth='.' ;;
3417 esac
3418
3419 case "$fn" in
3420 *\(*)
3421         expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3422         fn=`echo $fn | sed 's/(.*)//'`
3423         ;;
3424 esac
3425
3426 case "$fn" in
3427 *:*)
3428         loc_file=`expr $fn : '.*:\(.*\)'`
3429         fn=`expr $fn : '\(.*\):.*'`
3430         ;;
3431 esac
3432
3433 case "$fn" in
3434 *~*) tilde=true;;
3435 esac
3436 case "$fn" in
3437 */*) fullpath=true;;
3438 esac
3439 case "$fn" in
3440 *+*) skip=true;;
3441 esac
3442 case "$fn" in
3443 *n*) none_ok=true;;
3444 esac
3445 case "$fn" in
3446 *e*) exp_file=true;;
3447 esac
3448 case "$fn" in
3449 *p*) nopath_ok=true;;
3450 esac
3451
3452 case "$fn" in
3453 *f*) type='File';;
3454 *d*) type='Directory';;
3455 *l*) type='Locate';;
3456 esac
3457
3458 what="$type"
3459 case "$what" in
3460 Locate) what='File';;
3461 esac
3462
3463 case "$exp_file" in
3464 '')
3465         case "$d_portable" in
3466         "$define") ;;
3467         *) exp_file=true;;
3468         esac
3469         ;;
3470 esac
3471
3472 cd ..
3473 while test "$type"; do
3474         redo=''
3475         rp="$orig_rp"
3476         dflt="$orig_dflt"
3477         case "$tilde" in
3478         true) rp="$rp (~name ok)";;
3479         esac
3480         . UU/myread
3481         if test -f UU/getfile.ok && \
3482                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3483         then
3484                 value="$ans"
3485                 ansexp="$ans"
3486                 break
3487         fi
3488         case "$ans" in
3489         none)
3490                 value=''
3491                 ansexp=''
3492                 case "$none_ok" in
3493                 true) type='';;
3494                 esac
3495                 ;;
3496         *)
3497                 case "$tilde" in
3498                 '') value="$ans"
3499                         ansexp="$ans";;
3500                 *)
3501                         value=`UU/filexp $ans`
3502                         case $? in
3503                         0)
3504                                 if test "$ans" != "$value"; then
3505                                         echo "(That expands to $value on this system.)"
3506                                 fi
3507                                 ;;
3508                         *) value="$ans";;
3509                         esac
3510                         ansexp="$value"
3511                         case "$exp_file" in
3512                         '') value="$ans";;
3513                         esac
3514                         ;;
3515                 esac
3516                 case "$fullpath" in
3517                 true)
3518                         case "$ansexp" in
3519                         /*) value="$ansexp" ;;
3520                         [a-zA-Z]:/*) value="$ansexp" ;;
3521                         *)
3522                                 redo=true
3523                                 case "$already" in
3524                                 true)
3525                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3526                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3527                                         ;;
3528                                 *)
3529                                 echo "Please give a full path name, starting with slash." >&4
3530                                         case "$tilde" in
3531                                         true)
3532                                 echo "Note that using ~name is ok provided it expands well." >&4
3533                                                 already=true
3534                                                 ;;
3535                                         esac
3536                                 esac
3537                                 ;;
3538                         esac
3539                         ;;
3540                 esac
3541                 case "$redo" in
3542                 '')
3543                         case "$type" in
3544                         File)
3545                                 for fp in $gfpth; do
3546                                         if test "X$fp" = X.; then
3547                                             pf="$ansexp"
3548                                         else    
3549                                             pf="$fp/$ansexp"
3550                                         fi
3551                                         if test -f "$pf"; then
3552                                                 type=''
3553                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3554                                         then
3555                                                 echo "($value is not a plain file, but that's ok.)"
3556                                                 type=''
3557                                         fi
3558                                         if test X"$type" = X; then
3559                                             value="$pf"
3560                                             break
3561                                         fi
3562                                 done
3563                                 ;;
3564                         Directory)
3565                                 for fp in $gfpth; do
3566                                         if test "X$fp" = X.; then
3567                                             dir="$ans"
3568                                             direxp="$ansexp"
3569                                         else    
3570                                             dir="$fp/$ansexp"
3571                                             direxp="$fp/$ansexp"
3572                                         fi
3573                                         if test -d "$direxp"; then
3574                                                 type=''
3575                                                 value="$dir"
3576                                                 break
3577                                         fi
3578                                 done
3579                                 ;;
3580                         Locate)
3581                                 if test -d "$ansexp"; then
3582                                         echo "(Looking for $loc_file in directory $value.)"
3583                                         value="$value/$loc_file"
3584                                         ansexp="$ansexp/$loc_file"
3585                                 fi
3586                                 if test -f "$ansexp"; then
3587                                         type=''
3588                                 fi
3589                                 case "$nopath_ok" in
3590                                 true)   case "$value" in
3591                                         */*) ;;
3592                                         *)      echo "Assuming $value will be in people's path."
3593                                                 type=''
3594                                                 ;;
3595                                         esac
3596                                         ;;
3597                                 esac
3598                                 ;;
3599                         esac
3600
3601                         case "$skip" in
3602                         true) type='';
3603                         esac
3604
3605                         case "$type" in
3606                         '') ;;
3607                         *)
3608                                 if test "$fastread" = yes; then
3609                                         dflt=y
3610                                 else
3611                                         dflt=n
3612                                 fi
3613                                 rp="$what $value doesn't exist.  Use that name anyway?"
3614                                 . UU/myread
3615                                 dflt=''
3616                                 case "$ans" in
3617                                 y*) type='';;
3618                                 *) echo " ";;
3619                                 esac
3620                                 ;;
3621                         esac
3622                         ;;
3623                 esac
3624                 ;;
3625         esac
3626 done
3627 cd UU
3628 ans="$value"
3629 rp="$orig_rp"
3630 dflt="$orig_dflt"
3631 rm -f getfile.ok
3632 test "X$gfpthkeep" != Xy && gfpth=""
3633 EOSC
3634
3635 : What should the include directory be ?
3636 echo " "
3637 $echo $n "Hmm...  $c"
3638 dflt='/usr/include'
3639 incpath=''
3640 mips_type=''
3641 if $test -f /bin/mips && /bin/mips; then
3642         echo "Looks like a MIPS system..."
3643         $cat >usr.c <<'EOCP'
3644 #ifdef SYSTYPE_BSD43
3645 /bsd43
3646 #endif
3647 EOCP
3648         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3649                 dflt='/bsd43/usr/include'
3650                 incpath='/bsd43'
3651                 mips_type='BSD 4.3'
3652         else
3653                 mips_type='System V'
3654         fi
3655         $rm -f usr.c usr.out
3656         echo "and you're compiling with the $mips_type compiler and libraries."
3657         xxx_prompt=y
3658         echo "exit 0" >mips
3659 else
3660         echo "Doesn't look like a MIPS system."
3661         xxx_prompt=n
3662         echo "exit 1" >mips
3663 fi
3664 chmod +x mips
3665 $eunicefix mips
3666 case "$usrinc" in
3667 '') ;;
3668 *) dflt="$usrinc";;
3669 esac
3670 case "$xxx_prompt" in
3671 y)      fn=d/
3672         echo " "
3673         rp='Where are the include files you want to use?'
3674         . ./getfile
3675         usrinc="$ans"
3676         ;;
3677 *)      usrinc="$dflt"
3678         ;;
3679 esac
3680
3681 : Set private lib path
3682 case "$plibpth" in
3683 '') if ./mips; then
3684                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3685         fi;;
3686 esac
3687 case "$libpth" in
3688 ' ') dlist='';;
3689 '') dlist="$loclibpth $plibpth $glibpth";;
3690 *) dlist="$libpth";;
3691 esac
3692
3693 : Now check and see which directories actually exist, avoiding duplicates
3694 libpth=''
3695 for xxx in $dlist
3696 do
3697     if $test -d $xxx; then
3698                 case " $libpth " in
3699                 *" $xxx "*) ;;
3700                 *) libpth="$libpth $xxx";;
3701                 esac
3702     fi
3703 done
3704 $cat <<'EOM'
3705
3706 Some systems have incompatible or broken versions of libraries.  Among
3707 the directories listed in the question below, please remove any you
3708 know not to be holding relevant libraries, and add any that are needed.
3709 Say "none" for none.
3710
3711 EOM
3712 case "$libpth" in
3713 '') dflt='none';;
3714 *)
3715         set X $libpth
3716         shift
3717         dflt=${1+"$@"}
3718         ;;
3719 esac
3720 rp="Directories to use for library searches?"
3721 . ./myread
3722 case "$ans" in
3723 none) libpth=' ';;
3724 *) libpth="$ans";;
3725 esac
3726
3727 : compute shared library extension
3728 case "$so" in
3729 '')
3730         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3731                 dflt='sl'
3732         else
3733                 dflt='so'
3734         fi
3735         ;;
3736 *) dflt="$so";;
3737 esac
3738 $cat <<EOM
3739
3740 On some systems, shared libraries may be available.  Answer 'none' if
3741 you want to suppress searching of shared libraries for the remainder
3742 of this configuration.
3743
3744 EOM
3745 rp='What is the file extension used for shared libraries?'
3746 . ./myread
3747 so="$ans"
3748
3749 : Define several unixisms.
3750 : Hints files or command line option can be used to override them.
3751 : The convoluted testing is in case hints files set either the old
3752 : or the new name.
3753 case "$_exe" in
3754 '')     case "$exe_ext" in
3755     '') ;;
3756         *)      _exe="$exe_ext" ;;
3757         esac
3758         ;;
3759 esac
3760 case "$_a" in
3761 '')     case "$lib_ext" in
3762     '') _a='.a';;
3763         *)      _a="$lib_ext" ;;
3764         esac
3765         ;;
3766 esac
3767 case "$_o" in
3768 '') case "$obj_ext" in
3769         '')     _o='.o';;
3770         *)      _o="$obj_ext";;
3771         esac
3772         ;;
3773 esac
3774 case "$p_" in
3775 '') case "$path_sep" in
3776         '')     p_=':';;
3777         *)      p_="$path_sep";;
3778         esac
3779         ;;
3780 esac
3781 exe_ext=$_exe
3782 lib_ext=$_a
3783 obj_ext=$_o
3784 path_sep=$p_
3785
3786 : Which makefile gets called first.  This is used by make depend.
3787 case "$firstmakefile" in
3788 '') firstmakefile='makefile';;
3789 esac
3790
3791 case "$usesocks" in
3792 $define|true|[yY]*)     dflt='y';;
3793 *) dflt='n';;
3794 esac
3795 cat <<EOM
3796
3797 Perl can be built to use the SOCKS proxy protocol library.  To do so,
3798 Configure must be run with -Dusesocks.  If you use SOCKS you also need
3799 to use the PerlIO abstraction layer, this will be implicitly selected.
3800
3801 If this doesn't make any sense to you, just accept the default '$dflt'.
3802 EOM
3803 rp='Build Perl for SOCKS?'
3804 . ./myread
3805 case "$ans" in
3806 y|Y)    val="$define" ;;     
3807 *)      val="$undef" ;;
3808 esac
3809 set usesocks
3810 eval $setvar
3811
3812 case "$usesocks" in
3813 $define|true|[yY]*) useperlio="$define";;
3814 esac
3815
3816 : Looking for optional libraries
3817 echo " "
3818 echo "Checking for optional libraries..." >&4
3819 case "$libs" in
3820 ' '|'') dflt='';;
3821 *) dflt="$libs";;
3822 esac
3823 case "$libswanted" in
3824 '') libswanted='c_s';;
3825 esac
3826 case "$usesocks" in
3827 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
3828 esac
3829 libsfound=''
3830 libsfiles=''
3831 libsdirs=''
3832 libspath=''
3833 for thisdir in $libpth $xlibpth; do
3834   test -d $thisdir && libspath="$libspath $thisdir"
3835 done
3836 for thislib in $libswanted; do
3837         for thisdir in $libspath; do
3838             xxx=''
3839             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3840                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
3841                 $test -f "$xxx" && eval $libscheck
3842                 $test -f "$xxx" && libstyle=shared
3843             fi
3844             if test ! -f "$xxx"; then
3845                 xxx=$thisdir/lib$thislib.$so
3846                 $test -f "$xxx" && eval $libscheck
3847                 $test -f "$xxx" && libstyle=shared
3848             fi  
3849             if test ! -f "$xxx"; then
3850                 xxx=$thisdir/lib$thislib$_a
3851                 $test -f "$xxx" && eval $libscheck
3852                 $test -f "$xxx" && libstyle=static
3853             fi
3854             if test ! -f "$xxx"; then
3855                 xxx=$thisdir/$thislib$_a
3856                 $test -f "$xxx" && eval $libscheck
3857                 $test -f "$xxx" && libstyle=static
3858             fi
3859             if test ! -f "$xxx"; then
3860                 xxx=$thisdir/lib${thislib}_s$_a
3861                 $test -f "$xxx" && eval $libscheck
3862                 $test -f "$xxx" && libstyle=static
3863                 $test -f "$xxx" && thislib=${thislib}_s
3864             fi
3865             if test ! -f "$xxx"; then
3866                 xxx=$thisdir/Slib$thislib$_a
3867                 $test -f "$xxx" && eval $libscheck
3868                 $test -f "$xxx" && libstyle=static
3869             fi
3870             if $test -f "$xxx"; then
3871                 case "$libstyle" in
3872                 shared) echo "Found -l$thislib (shared)." ;;
3873                 static) echo "Found -l$thislib." ;;
3874                 *)      echo "Found -l$thislib ($libstyle)." ;;
3875                 esac
3876                 case " $dflt " in
3877                 *"-l$thislib "*);;
3878                 *) dflt="$dflt -l$thislib"
3879                    libsfound="$libsfound $xxx"
3880                    yyy=`basename $xxx`
3881                    libsfiles="$libsfiles $yyy"
3882                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
3883                    case " $libsdirs " in
3884                    *" $yyy "*) ;;
3885                    *) libsdirs="$libsdirs $yyy" ;;
3886                    esac
3887                    ;;
3888                 esac
3889                 break
3890             fi  
3891         done
3892         if $test ! -f "$xxx"; then
3893             echo "No -l$thislib."
3894         fi
3895 done
3896 set X $dflt
3897 shift
3898 dflt="$*"
3899 case "$libs" in
3900 '') dflt="$dflt";;
3901 *) dflt="$libs";;
3902 esac
3903 case "$dflt" in
3904 ' '|'') dflt='none';;
3905 esac
3906
3907 $cat <<EOM
3908
3909 In order to compile $package on your machine, a number of libraries
3910 are usually needed.  Include any other special libraries here as well.
3911 Say "none" for none.  The default list is almost always right.
3912 EOM
3913
3914 echo " "
3915 rp="What libraries to use?"
3916 . ./myread
3917 case "$ans" in
3918 none) libs=' ';;
3919 *) libs="$ans";;
3920 esac
3921
3922 : determine optimization, if desired, or use for debug flag also
3923 case "$optimize" in
3924 ' '|$undef) dflt='none';;
3925 '') dflt='-O';;
3926 *) dflt="$optimize";;
3927 esac
3928 $cat <<EOH
3929
3930 By default, $package compiles with the -O flag to use the optimizer.
3931 Alternately, you might want to use the symbolic debugger, which uses
3932 the -g flag (on traditional Unix systems).  Either flag can be
3933 specified here.  To use neither flag, specify the word "none".
3934
3935 EOH
3936 rp="What optimizer/debugger flag should be used?"
3937 . ./myread
3938 optimize="$ans"
3939 case "$optimize" in
3940 'none') optimize=" ";;
3941 esac
3942
3943 dflt=''
3944 : We will not override a previous value, but we might want to
3945 : augment a hint file
3946 case "$hint" in
3947 default|recommended)
3948         case "$gccversion" in
3949         1*) dflt='-fpcc-struct-return' ;;
3950         esac
3951         case "$optimize" in
3952         *-g*) dflt="$dflt -DDEBUGGING";;
3953         esac
3954         case "$gccversion" in
3955         2*) if test -d /etc/conf/kconfig.d &&
3956                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
3957                 then
3958                         dflt="$dflt -posix"
3959                 fi
3960                 ;;
3961         esac
3962         case "$gccversion" in
3963         1*) ;;
3964         2.[0-8]*) ;;
3965         ?*)     echo " "
3966                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
3967                 echo 'int main(void) { return 0; }' > gcctest.c
3968                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
3969                         echo "Yes, it does." 2>&1
3970                         case "$ccflags" in
3971                         *strict-aliasing*) 
3972                                 echo "Leaving current flags $ccflags alone." 2>&1
3973                                 ;;
3974                         *) dflt="$dflt -fno-strict-aliasing" ;;
3975                         esac
3976                 else
3977                         echo "Nope, it doesn't, but that's ok." 2>&1
3978                 fi
3979                 ;;
3980         esac
3981         ;;
3982 esac
3983
3984 case "$mips_type" in
3985 *BSD*|'') inclwanted="$locincpth $usrinc";;
3986 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
3987 esac
3988 for thisincl in $inclwanted; do
3989         if $test -d $thisincl; then
3990                 if $test x$thisincl != x$usrinc; then
3991                         case "$dflt" in
3992                         *" -I$thisincl "*);;
3993                         *) dflt="$dflt -I$thisincl ";;
3994                         esac
3995                 fi
3996         fi
3997 done
3998
3999 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4000         xxx=true;
4001 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4002         xxx=true;
4003 else
4004         xxx=false;
4005 fi;
4006 if $xxx; then
4007         case "$dflt" in
4008         *$2*);;
4009         *) dflt="$dflt -D$2";;
4010         esac;
4011 fi'
4012
4013 set signal.h LANGUAGE_C; eval $inctest
4014
4015 case "$usesocks" in
4016 $define)
4017         ccflags="$ccflags -DSOCKS"
4018         ;;
4019 esac
4020
4021 case "$hint" in
4022 default|recommended) dflt="$ccflags $dflt" ;;
4023 *) dflt="$ccflags";;
4024 esac
4025
4026 case "$dflt" in
4027 ''|' ') dflt=none;;
4028 esac
4029
4030 $cat <<EOH
4031
4032 Your C compiler may want other flags.  For this question you should include
4033 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4034 but you should NOT include libraries or ld flags like -lwhatever.  If you
4035 want $package to honor its debug switch, you should include -DDEBUGGING here.
4036 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4037
4038 To use no flags, specify the word "none".
4039
4040 EOH
4041 set X $dflt
4042 shift
4043 dflt=${1+"$@"}
4044 rp="Any additional cc flags?"
4045 . ./myread
4046 case "$ans" in
4047 none) ccflags='';;
4048 *) ccflags="$ans";;
4049 esac
4050
4051 : the following weeds options from ccflags that are of no interest to cpp
4052 cppflags="$ccflags"
4053 case "$gccversion" in
4054 1*) cppflags="$cppflags -D__GNUC__"
4055 esac
4056 case "$mips_type" in
4057 '');;
4058 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4059 esac
4060 case "$cppflags" in
4061 '');;
4062 *)
4063         echo " "
4064         echo "Let me guess what the preprocessor flags are..." >&4
4065         set X $cppflags
4066         shift
4067         cppflags=''
4068         $cat >cpp.c <<'EOM'
4069 #define BLURFL foo
4070
4071 BLURFL xx LFRULB
4072 EOM
4073         previous=''
4074         for flag in $*
4075         do
4076                 case "$flag" in
4077                 -*) ftry="$flag";;
4078                 *) ftry="$previous $flag";;
4079                 esac
4080                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4081                         >cpp1.out 2>/dev/null && \
4082                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4083                         >cpp2.out 2>/dev/null && \
4084                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4085                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4086                 then
4087                         cppflags="$cppflags $ftry"
4088                         previous=''
4089                 else
4090                         previous="$flag"
4091                 fi
4092         done
4093         set X $cppflags
4094         shift
4095         cppflags=${1+"$@"}
4096         case "$cppflags" in
4097         *-*)  echo "They appear to be: $cppflags";;
4098         esac
4099         $rm -f cpp.c cpp?.out
4100         ;;
4101 esac
4102
4103 : flags used in final linking phase
4104 case "$ldflags" in
4105 '') if ./venix; then
4106                 dflt='-i -z'
4107         else
4108                 dflt=''
4109         fi
4110         case "$ccflags" in
4111         *-posix*) dflt="$dflt -posix" ;;
4112         esac
4113         ;;
4114 *) dflt="$ldflags";;
4115 esac
4116
4117 : Try to guess additional flags to pick up local libraries.
4118 for thislibdir in $libpth; do
4119         case " $loclibpth " in
4120         *" $thislibdir "*)
4121                 case "$dflt " in 
4122                 *"-L$thislibdir "*) ;;
4123                 *)  dflt="$dflt -L$thislibdir" ;;
4124                 esac
4125                 ;;
4126         esac
4127 done
4128
4129 case "$dflt" in
4130 '') dflt='none' ;;
4131 esac
4132
4133 $cat <<EOH
4134
4135 Your C linker may need flags.  For this question you should
4136 include -L/whatever and any other flags used by the C linker, but you
4137 should NOT include libraries like -lwhatever.
4138
4139 Make sure you include the appropriate -L/path flags if your C linker
4140 does not normally search all of the directories you specified above,
4141 namely
4142         $libpth
4143 To use no flags, specify the word "none".
4144
4145 EOH
4146
4147 rp="Any additional ld flags (NOT including libraries)?"
4148 . ./myread
4149 case "$ans" in
4150 none) ldflags='';;
4151 *) ldflags="$ans";;
4152 esac
4153 rmlist="$rmlist pdp11"
4154
4155 : coherency check
4156 echo " "
4157 echo "Checking your choice of C compiler and flags for coherency..." >&4
4158 $cat > try.c <<'EOF'
4159 #include <stdio.h>
4160 int main() { printf("Ok\n"); exit(0); }
4161 EOF
4162 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
4163 shift
4164 $cat >try.msg <<'EOM'
4165 I've tried to compile and run the following simple program:
4166
4167 EOM
4168 $cat try.c >> try.msg
4169
4170 $cat >> try.msg <<EOM
4171
4172 I used the command:
4173
4174         $*
4175         ./try
4176
4177 and I got the following output:
4178
4179 EOM
4180 dflt=y
4181 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
4182         if $sh -c './try' >>try.msg 2>&1; then
4183                 xxx=`./try`
4184                 case "$xxx" in
4185                 "Ok") dflt=n ;;
4186                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4187                         case " $libs " in
4188                         *" -lsfio "*)
4189                                 cat >> try.msg <<'EOQS'
4190 If $libs contains -lsfio, and sfio is mis-configured, then it
4191 sometimes (apparently) runs and exits with a 0 status, but with no
4192 output!  It may have to do with sfio's use of _exit vs. exit.
4193
4194 EOQS
4195                                 rp="You have a big problem.  Shall I abort Configure"
4196                                 dflt=y
4197                                 ;;
4198                         esac
4199                         ;;
4200                 esac
4201         else
4202                 echo "The program compiled OK, but exited with status $?." >>try.msg
4203                 rp="You have a problem.  Shall I abort Configure"
4204                 dflt=y
4205         fi
4206 else
4207         echo "I can't compile the test program." >>try.msg
4208         rp="You have a BIG problem.  Shall I abort Configure"
4209         dflt=y
4210 fi
4211 case "$dflt" in
4212 y)
4213         $cat try.msg >&4
4214         case "$knowitall" in
4215         '')
4216                 echo "(The supplied flags or libraries might be incorrect.)"
4217                 ;;
4218         *) dflt=n;;
4219         esac
4220         echo " "
4221         . ./myread
4222         case "$ans" in
4223         n*|N*) ;;
4224         *)      echo "Ok.  Stopping Configure." >&4
4225                 exit 1
4226                 ;;
4227         esac
4228         ;;
4229 n) echo "OK, that should do.";;
4230 esac
4231 $rm -f try try.* core
4232
4233 : define an is-a-typedef? function
4234 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4235 case "$inclist" in
4236 "") inclist="sys/types.h";;
4237 esac;
4238 eval "varval=\$$var";
4239 case "$varval" in
4240 "")
4241         $rm -f temp.c;
4242         for inc in $inclist; do
4243                 echo "#include <$inc>" >>temp.c;
4244         done;
4245         echo "#ifdef $type" >> temp.c;
4246         echo "printf(\"We have $type\");" >> temp.c;
4247         echo "#endif" >> temp.c;
4248         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4249         if $contains $type temp.E >/dev/null 2>&1; then
4250                 eval "$var=\$type";
4251         else
4252                 eval "$var=\$def";
4253         fi;
4254         $rm -f temp.?;;
4255 *) eval "$var=\$varval";;
4256 esac'
4257
4258 : define an is-a-typedef? function that prompts if the type is not available.
4259 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4260 case "$inclist" in
4261 "") inclist="sys/types.h";;
4262 esac;
4263 eval "varval=\$$var";
4264 case "$varval" in
4265 "")
4266         $rm -f temp.c;
4267         for inc in $inclist; do
4268                 echo "#include <$inc>" >>temp.c;
4269         done;
4270         echo "#ifdef $type" >> temp.c;
4271         echo "printf(\"We have $type\");" >> temp.c;
4272         echo "#endif" >> temp.c;
4273         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4274         echo " " ;
4275         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
4276         if $contains $type temp.E >/dev/null 2>&1; then
4277                 echo "$type found." >&4;
4278                 eval "$var=\$type";
4279         else
4280                 echo "$type NOT found." >&4;
4281                 dflt="$def";
4282                 . ./myread ;
4283                 eval "$var=\$ans";
4284         fi;
4285         $rm -f temp.?;;
4286 *) eval "$var=\$varval";;
4287 esac'
4288
4289 : define a shorthand compile call
4290 compile='
4291 mc_file=$1;
4292 shift;
4293 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
4294 : define a shorthand compile call for compilations that should be ok.
4295 compile_ok='
4296 mc_file=$1;
4297 shift;
4298 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
4299
4300 : check for lengths of integral types
4301 echo " "
4302 case "$intsize" in
4303 '')
4304         echo "Checking to see how big your integers are..." >&4
4305         $cat >intsize.c <<'EOCP'
4306 #include <stdio.h>
4307 int main()
4308 {
4309         printf("intsize=%d;\n", (int)sizeof(int));
4310         printf("longsize=%d;\n", (int)sizeof(long));
4311         printf("shortsize=%d;\n", (int)sizeof(short));
4312         exit(0);
4313 }
4314 EOCP
4315         set intsize
4316         if eval $compile_ok && ./intsize > /dev/null; then
4317                 eval `./intsize`
4318                 echo "Your integers are $intsize bytes long."
4319                 echo "Your long integers are $longsize bytes long."
4320                 echo "Your short integers are $shortsize bytes long."
4321         else
4322                 $cat >&4 <<EOM
4323 !
4324 Help! I can't compile and run the intsize test program: please enlighten me!
4325 (This is probably a misconfiguration in your system or libraries, and
4326 you really ought to fix it.  Still, I'll try anyway.)
4327 !
4328 EOM
4329                 dflt=4
4330                 rp="What is the size of an integer (in bytes)?"
4331                 . ./myread
4332                 intsize="$ans"
4333                 dflt=$intsize
4334                 rp="What is the size of a long integer (in bytes)?"
4335                 . ./myread
4336                 longsize="$ans"
4337                 dflt=2
4338                 rp="What is the size of a short integer (in bytes)?"
4339                 . ./myread
4340                 shortsize="$ans"
4341         fi
4342         ;;
4343 esac
4344 $rm -f intsize intsize.*
4345
4346 : see what type lseek is declared as in the kernel
4347 rp="What is the type used for lseek's offset on this system?"
4348 set off_t lseektype long stdio.h sys/types.h
4349 eval $typedef_ask
4350
4351 echo " "
4352 echo "Checking to see how big your file offsets are..." >&4
4353 $cat >try.c <<EOCP
4354 #include <sys/types.h>
4355 #include <stdio.h>
4356 int main()
4357 {
4358     printf("%d\n", (int)sizeof($lseektype));
4359     return(0); 
4360 }
4361 EOCP
4362 set try
4363 if eval $compile_ok; then
4364         lseeksize=`./try`
4365         echo "Your file offsets are $lseeksize bytes long."
4366 else
4367         dflt=$longsize
4368         echo " "
4369         echo "(I can't seem to compile the test program.  Guessing...)"
4370         rp="What is the size of your file offsets (in bytes)?"
4371         . ./myread
4372         lseeksize="$ans"
4373 fi
4374 $rm -f try.c try
4375
4376 : see what type file positions are declared as in the library
4377 rp="What is the type for file position used by fsetpos()?"
4378 set fpos_t fpostype long stdio.h sys/types.h
4379 eval $typedef_ask
4380
4381 echo " "
4382 case "$fpostype" in
4383 *_t) zzz="$fpostype"    ;;
4384 *)   zzz="fpos_t"       ;;
4385 esac
4386 echo "Checking the size of $zzz..." >&4 
4387 cat > try.c <<EOCP
4388 #include <sys/types.h>
4389 #include <stdio.h>
4390 int main() {
4391     printf("%d\n", (int)sizeof($fpostype));
4392     exit(0);
4393 }
4394 EOCP
4395 set try
4396 if eval $compile_ok; then
4397         yyy=`./try`
4398         case "$yyy" in
4399         '')     fpossize=4
4400                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4401                 ;;
4402         *)      fpossize=$yyy
4403                 echo "Your $zzz is $fpossize bytes long."
4404                 ;;
4405         esac
4406 else
4407         dflt="$longsize"
4408         echo " " >&4
4409         echo "(I can't compile the test program.  Guessing...)" >&4
4410         rp="What is the size of your file positions (in bytes)?"
4411         . ./myread
4412         fpossize="$ans"
4413 fi
4414
4415
4416
4417 # Backward compatibility (uselfs is deprecated).
4418 case "$uselfs" in
4419 "$define"|true|[yY]*)
4420         cat <<EOM >&4
4421
4422 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
4423 EOM
4424         uselargefiles="$define"
4425         ;;
4426 esac                          
4427
4428 case "$lseeksize:$fpossize" in
4429 8:8) cat <<EOM
4430
4431 You can have files larger than 2 gigabytes.
4432 EOM
4433    val="$define" ;;
4434 *)    case "$uselargefiles" in
4435    "$undef"|false|[nN]*) dflt='n' ;;
4436    *)   dflt='y' ;;
4437    esac
4438    cat <<EOM
4439
4440 Perl can be built to understand large files (files larger than 2 gigabytes)
4441 on some systems.  To do so, Configure can be run with -Duselargefiles.
4442
4443 If this doesn't make any sense to you, just accept the default '$dflt'.
4444 EOM
4445    rp='Try to understand large files, if available?'
4446    . ./myread
4447    case "$ans" in
4448    y|Y)         val="$define" ;;
4449    *)           val="$undef"  ;;
4450    esac
4451    ;;
4452 esac
4453 set uselargefiles
4454 eval $setvar
4455 case "$uselargefiles" in
4456 "$define")
4457 : Look for a hint-file generated 'call-back-unit'.  If the
4458 : user has specified that a large files perl is to be built,
4459 : we may need to set or change some other defaults.
4460         if $test -f uselargefiles.cbu; then
4461                 echo "Your platform has some specific hints for large file builds, using them..."
4462                 . ./uselargefiles.cbu
4463                 echo " "
4464                 echo "Rechecking to see how big your file offsets are..." >&4
4465                 $cat >try.c <<EOCP
4466 #include <sys/types.h>
4467 #include <stdio.h>
4468 int main()
4469 {
4470     printf("%d\n", (int)sizeof($lseektype));
4471     return(0); 
4472 }
4473 EOCP
4474                 set try
4475                 if eval $compile_ok; then
4476                         lseeksize=`./try`
4477                         $echo "Your file offsets are now $lseeksize bytes long."
4478                 else
4479                         dflt="$lseeksize"
4480                         echo " "
4481                         echo "(I can't seem to compile the test program.  Guessing...)"
4482                         rp="What is the size of your file offsets (in bytes)?"
4483                         . ./myread
4484                         lseeksize="$ans"
4485                 fi
4486                 case "$fpostype" in
4487                 *_t) zzz="$fpostype"    ;;
4488                 *)   zzz="fpos_t"       ;;
4489                 esac
4490                 $echo $n "Rechecking the size of $zzz...$c" >&4 
4491                 $cat > try.c <<EOCP
4492 #include <sys/types.h>
4493 #include <stdio.h>
4494 int main() {
4495     printf("%d\n", (int)sizeof($fpostype));
4496     exit(0);
4497 }
4498 EOCP
4499                 set try
4500                 if eval $compile_ok; then
4501                         yyy=`./try`
4502                         dflt="$lseeksize"
4503                         case "$yyy" in
4504                         '')     echo " "
4505                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4506                                 ;;
4507                         *)      fpossize=$yyy
4508                                 echo " $fpossize bytes." >&4
4509                                 ;;
4510                         esac
4511                 else
4512                         dflt="$fpossize"
4513                         echo " "
4514                         echo "(I can't compile the test program.  Guessing...)" >&4
4515                         rp="What is the size of your file positions (in bytes)?"
4516                         . ./myread
4517                         fpossize="$ans"
4518                 fi
4519                 $rm -f try.c try
4520         fi
4521         ;;
4522 esac
4523
4524
4525 case "$usemorebits" in
4526 "$define"|true|[yY]*)
4527         use64bitint="$define"
4528         uselongdouble="$define"
4529         usemorebits="$define"
4530         ;;
4531 *)      usemorebits="$undef"
4532         ;;
4533 esac
4534
4535
4536 case "$uselonglong" in
4537 "$define"|true|[yY]*)
4538         cat <<EOM >&4
4539
4540 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
4541 EOM
4542         use64bitint="$define"
4543         ;;
4544 esac                          
4545 case "$use64bits" in
4546 "$define"|true|[yY]*)
4547         cat <<EOM >&4
4548
4549 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
4550 EOM
4551         use64bitint="$define"
4552         ;;
4553 esac                          
4554 case "$use64bitints" in
4555 "$define"|true|[yY]*)
4556         cat <<EOM >&4
4557
4558 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
4559 EOM
4560         use64bitint="$define"
4561         ;;
4562 esac                          
4563 case "$use64bitsint" in
4564 "$define"|true|[yY]*)
4565         cat <<EOM >&4
4566
4567 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
4568 EOM
4569         use64bitint="$define"
4570         ;;
4571 esac                          
4572 case "$uselonglongs" in
4573 "$define"|true|[yY]*)
4574         cat <<EOM >&4
4575
4576 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
4577 EOM
4578         use64bitint="$define"
4579         ;;
4580 esac                          
4581 case "$use64bitsall" in
4582 "$define"|true|[yY]*)
4583         cat <<EOM >&4
4584
4585 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
4586 EOM
4587         use64bitall="$define"
4588         ;;
4589 esac                          
4590
4591 case "$ccflags" in
4592 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
4593 esac
4594 case "$use64bitall" in
4595 "$define"|true|[yY]*) use64bitint="$define" ;;
4596 esac
4597
4598 case "$longsize" in
4599 8) cat <<EOM
4600
4601 You have natively 64-bit long integers.
4602 EOM
4603    val="$define"
4604    ;;
4605 *) case "$use64bitint" in
4606    "$define"|true|[yY]*) dflt='y';;
4607    *) dflt='n';;
4608    esac
4609    cat <<EOM
4610
4611 Perl can be built to take advantage of 64-bit integer types
4612 on some systems.  To do so, Configure can be run with -Duse64bitint.
4613 Choosing this option will most probably introduce binary incompatibilities.
4614
4615 If this doesn't make any sense to you, just accept the default '$dflt'.
4616 EOM
4617    rp='Try to use 64-bit integers, if available?'
4618    . ./myread
4619    case "$ans" in
4620    [yY]*) val="$define" ;;
4621    *)     val="$undef"  ;;
4622    esac
4623    ;;
4624 esac
4625 set use64bitint
4626 eval $setvar
4627
4628 case "$use64bitall" in
4629 "$define"|true|[yY]*) dflt='y' ;;
4630 *) case "$longsize" in
4631    8) dflt='y' ;;
4632    *) dflt='n' ;;
4633    esac
4634    ;;
4635 esac    
4636 cat <<EOM
4637
4638 You may also choose to try maximal 64-bitness.  It means using as much
4639 64-bitness as possible on the platform.  This in turn means even more
4640 binary incompatibilities.  On the other hand, your platform may not
4641 have any more 64-bitness available than what you already have chosen.
4642
4643 If this doesn't make any sense to you, just accept the default '$dflt'.
4644 EOM
4645 rp='Try to use maximal 64-bit support, if available?'
4646 . ./myread
4647 case "$ans" in
4648 [yY]*) val="$define" ;;
4649 *)     val="$undef"  ;;
4650 esac
4651 set use64bitall
4652 eval $setvar
4653 case "$use64bitall" in
4654 "$define")
4655         case "$use64bitint" in
4656         "$undef")
4657                 cat <<EOM
4658
4659 Since you have chosen a maximally 64-bit build, I'm also turning on
4660 the use of 64-bit integers.
4661 EOM
4662                 use64bitint="$define" ;;
4663         esac
4664         ;;
4665 esac
4666
4667 case "$use64bitint" in
4668 "$define"|true|[yY]*)
4669 : Look for a hint-file generated 'call-back-unit'.  If the
4670 : user has specified that a 64-bit perl is to be built,
4671 : we may need to set or change some other defaults.
4672         if $test -f use64bitint.cbu; then
4673                 echo "Your platform has some specific hints for 64-bit integers, using them..."
4674                 . ./use64bitint.cbu
4675         fi
4676         case "$longsize" in
4677         4) case "$archname64" in
4678            '') archname64=64int ;;
4679            esac
4680            ;;
4681         esac
4682         ;;
4683 esac
4684
4685 case "$use64bitall" in
4686 "$define"|true|[yY]*)
4687 : Look for a hint-file generated 'call-back-unit'.  If the
4688 : user has specified that a maximally 64-bit perl is to be built,
4689 : we may need to set or change some other defaults.
4690         if $test -f use64bitall.cbu; then
4691                 echo "Your platform has some specific hints for 64-bit builds, using them..."
4692                 . ./use64bitall.cbu
4693         fi
4694         case "$longsize" in
4695         4) case "$archname64" in
4696            ''|64int) archname64=64all ;;
4697            esac
4698            ;;
4699         esac
4700         ;;
4701 esac
4702
4703 echo " "
4704 echo "Checking for GNU C Library..." >&4
4705 cat >gnulibc.c <<EOM
4706 #include <stdio.h>
4707 int main()
4708 {
4709 #ifdef __GLIBC__
4710     exit(0);
4711 #else
4712     exit(1);
4713 #endif
4714 }
4715 EOM
4716 set gnulibc
4717 if eval $compile_ok && ./gnulibc; then
4718         val="$define"
4719         echo "You are using the GNU C Library"
4720 else
4721         val="$undef"
4722         echo "You are not using the GNU C Library"
4723 fi
4724 $rm -f gnulibc*
4725 set d_gnulibc
4726 eval $setvar
4727
4728 : see if nm is to be used to determine whether a symbol is defined or not
4729 case "$usenm" in
4730 '')
4731         dflt=''
4732         case "$d_gnulibc" in
4733         "$define")
4734                 echo " "
4735                 echo "nm probably won't work on the GNU C Library." >&4
4736                 dflt=n
4737                 ;;
4738         esac
4739         case "$dflt" in
4740         '') 
4741                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4742                         echo " "
4743                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4744                         echo "'nm' won't be sufficient on this sytem." >&4
4745                         dflt=n
4746                 fi
4747                 ;;
4748         esac
4749         case "$dflt" in
4750         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4751                 if $test $dflt -gt 20; then
4752                         dflt=y
4753                 else
4754                         dflt=n
4755                 fi
4756                 ;;
4757         esac
4758         ;;
4759 *)
4760         case "$usenm" in
4761         true|$define) dflt=y;;
4762         *) dflt=n;;
4763         esac
4764         ;;
4765 esac
4766 $cat <<EOM
4767
4768 I can use $nm to extract the symbols from your C libraries. This
4769 is a time consuming task which may generate huge output on the disk (up
4770 to 3 megabytes) but that should make the symbols extraction faster. The
4771 alternative is to skip the 'nm' extraction part and to compile a small
4772 test program instead to determine whether each symbol is present. If
4773 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4774 this may be the best solution.
4775
4776 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4777
4778 EOM
4779 rp="Shall I use $nm to extract C symbols from the libraries?"
4780 . ./myread
4781 case "$ans" in
4782 [Nn]*) usenm=false;;
4783 *) usenm=true;;
4784 esac
4785
4786 runnm=$usenm
4787 case "$reuseval" in
4788 true) runnm=false;;
4789 esac
4790
4791 : nm options which may be necessary
4792 case "$nm_opt" in
4793 '') if $test -f /mach_boot; then
4794                 nm_opt=''       # Mach
4795         elif $test -d /usr/ccs/lib; then
4796                 nm_opt='-p'     # Solaris (and SunOS?)
4797         elif $test -f /dgux; then
4798                 nm_opt='-p'     # DG-UX
4799         elif $test -f /lib64/rld; then
4800                 nm_opt='-p'     # 64-bit Irix
4801         else
4802                 nm_opt=''
4803         fi;;
4804 esac
4805
4806 : nm options which may be necessary for shared libraries but illegal
4807 : for archive libraries.  Thank you, Linux.
4808 case "$nm_so_opt" in
4809 '')     case "$myuname" in
4810         *linux*)
4811                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4812                         nm_so_opt='--dynamic'
4813                 fi
4814                 ;;
4815         esac
4816         ;;
4817 esac
4818
4819 case "$runnm" in
4820 true)
4821 : get list of predefined functions in a handy place
4822 echo " "
4823 case "$libc" in
4824 '') libc=unknown
4825         case "$libs" in
4826         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4827         esac
4828         ;;
4829 esac
4830 libnames='';
4831 case "$libs" in
4832 '') ;;
4833 *)  for thislib in $libs; do
4834         case "$thislib" in
4835         -lc|-lc_s)
4836                 : Handle C library specially below.
4837                 ;;
4838         -l*)
4839                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4840                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4841                         :
4842                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4843                         :
4844                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4845                         :
4846                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4847                         :
4848                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4849                         :
4850                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4851                         :
4852                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4853                         :
4854                 else
4855                         try=''
4856                 fi
4857                 libnames="$libnames $try"
4858                 ;;
4859         *) libnames="$libnames $thislib" ;;
4860         esac
4861         done
4862         ;;
4863 esac
4864 xxx=normal
4865 case "$libc" in
4866 unknown)
4867         set /lib/libc.$so
4868         for xxx in $libpth; do
4869                 $test -r $1 || set $xxx/libc.$so
4870                 : The messy sed command sorts on library version numbers.
4871                 $test -r $1 || \
4872                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4873                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4874                                 h
4875                                 s/[0-9][0-9]*/0000&/g
4876                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4877                                 G
4878                                 s/\n/ /' | \
4879                          $sort | $sed -e 's/^.* //'`
4880                 eval set \$$#
4881         done
4882         $test -r $1 || set /usr/ccs/lib/libc.$so
4883         $test -r $1 || set /lib/libsys_s$_a
4884         ;;
4885 *)
4886         set blurfl
4887         ;;
4888 esac
4889 if $test -r "$1"; then
4890         echo "Your (shared) C library seems to be in $1."
4891         libc="$1"
4892 elif $test -r /lib/libc && $test -r /lib/clib; then
4893         echo "Your C library seems to be in both /lib/clib and /lib/libc."
4894         xxx=apollo
4895         libc='/lib/clib /lib/libc'
4896         if $test -r /lib/syslib; then
4897                 echo "(Your math library is in /lib/syslib.)"
4898                 libc="$libc /lib/syslib"
4899         fi
4900 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4901         echo "Your C library seems to be in $libc, as you said before."
4902 elif $test -r $incpath/usr/lib/libc$_a; then
4903         libc=$incpath/usr/lib/libc$_a;
4904         echo "Your C library seems to be in $libc.  That's fine."
4905 elif $test -r /lib/libc$_a; then
4906         libc=/lib/libc$_a;
4907         echo "Your C library seems to be in $libc.  You're normal."
4908 else
4909         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
4910                 :
4911         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4912                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4913         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4914                 :
4915         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4916                 :
4917         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4918                 :
4919         else
4920                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4921         fi
4922         if $test -r "$tans"; then
4923                 echo "Your C library seems to be in $tans, of all places."
4924                 libc=$tans
4925         else
4926                 libc='blurfl'
4927         fi
4928 fi
4929 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4930         dflt="$libc"
4931         cat <<EOM
4932
4933 If the guess above is wrong (which it might be if you're using a strange
4934 compiler, or your machine supports multiple models), you can override it here.
4935
4936 EOM
4937 else
4938         dflt=''
4939         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
4940         cat >&4 <<EOM
4941 I can't seem to find your C library.  I've looked in the following places:
4942
4943 EOM
4944         $sed 's/^/      /' libpath
4945         cat <<EOM
4946
4947 None of these seems to contain your C library. I need to get its name...
4948
4949 EOM
4950 fi
4951 fn=f
4952 rp='Where is your C library?'
4953 . ./getfile
4954 libc="$ans"
4955
4956 echo " "
4957 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
4958 set X `cat libnames`
4959 shift
4960 xxx=files
4961 case $# in 1) xxx=file; esac
4962 echo "Extracting names from the following $xxx for later perusal:" >&4
4963 echo " "
4964 $sed 's/^/      /' libnames >&4
4965 echo " "
4966 $echo $n "This may take a while...$c" >&4
4967
4968 for file in $*; do
4969         case $file in
4970         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
4971         *) $nm $nm_opt $file 2>/dev/null;;
4972         esac
4973 done >libc.tmp
4974
4975 $echo $n ".$c"
4976 $grep fprintf libc.tmp > libc.ptf
4977 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
4978 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
4979 xxx='[ADTSIW]'
4980 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
4981         eval $xscan;\
4982         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4983                 eval $xrun
4984 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
4985         eval $xscan;\
4986         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4987                 eval $xrun
4988 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
4989         eval $xscan;\
4990         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4991                 eval $xrun
4992 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
4993         eval $xscan;\
4994         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4995                 eval $xrun
4996 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
4997         eval $xscan;\
4998         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4999                 eval $xrun
5000 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5001         eval $xscan;\
5002         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5003                 eval $xrun
5004 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5005                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5006         eval $xscan;\
5007         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5008                 eval $xrun
5009 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5010         eval $xscan;\
5011         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5012                 eval $xrun
5013 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5014         eval $xscan;\
5015         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5016                 eval $xrun
5017 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5018         eval $xscan;\
5019         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5020                 eval $xrun
5021 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5022         eval $xscan;\
5023         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5024                 eval $xrun
5025 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5026         eval $xscan;\
5027         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5028                 eval $xrun
5029 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5030         eval $xscan;\
5031         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5032                 eval $xrun
5033 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5034         eval $xscan;\
5035         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5036                 eval $xrun
5037 else
5038         $nm -p $* 2>/dev/null >libc.tmp
5039         $grep fprintf libc.tmp > libc.ptf
5040         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5041                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5042         then
5043                 nm_opt='-p'
5044                 eval $xrun
5045         else
5046                 echo " "
5047                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5048                 com=''
5049                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5050                         for thisname in $libnames $libc; do
5051                                 $ar t $thisname >>libc.tmp
5052                         done
5053                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5054                         echo "Ok." >&4
5055                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5056                         # Repeat libc to extract forwarders to DLL entries too
5057                         for thisname in $libnames $libc; do
5058                                 $ar tv $thisname >>libc.tmp
5059                                 # Revision 50 of EMX has bug in $ar.
5060                                 # it will not extract forwarders to DLL entries
5061                                 # Use emximp which will extract exactly them.
5062                                 emximp -o tmp.imp $thisname \
5063                                     2>/dev/null && \
5064                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5065                                     < tmp.imp >>libc.tmp
5066                                 $rm tmp.imp
5067                         done
5068                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5069                         echo "Ok." >&4
5070                 else
5071                         echo "$ar didn't seem to work right." >&4
5072                         echo "Maybe this is a Cray...trying bld instead..." >&4
5073                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5074                         then
5075                                 for thisname in $libnames; do
5076                                         bld t $libnames | \
5077                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5078                                         $ar t $thisname >>libc.tmp
5079                                 done
5080                                 echo "Ok." >&4
5081                         else
5082                                 echo "That didn't work either.  Giving up." >&4
5083                                 exit 1
5084                         fi
5085                 fi
5086         fi
5087 fi
5088 nm_extract="$com"
5089 if $test -f /lib/syscalls.exp; then
5090         echo " "
5091         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5092         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
5093 fi
5094 ;;
5095 esac
5096 $rm -f libnames libpath
5097
5098 : is a C symbol defined?
5099 csym='tlook=$1;
5100 case "$3" in
5101 -v) tf=libc.tmp; tc=""; tdc="";;
5102 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5103 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5104 esac;
5105 tx=yes;
5106 case "$reuseval-$4" in
5107 true-) ;;
5108 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5109 esac;
5110 case "$tx" in
5111 yes)
5112         case "$runnm" in
5113         true)
5114                 if $contains $tlook $tf >/dev/null 2>&1;
5115                 then tval=true;
5116                 else tval=false;
5117                 fi;;
5118         *)
5119                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5120                 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
5121                 then tval=true;
5122                 else tval=false;
5123                 fi;
5124                 $rm -f t t.c;;
5125         esac;;
5126 *)
5127         case "$tval" in
5128         $define) tval=true;;
5129         *) tval=false;;
5130         esac;;
5131 esac;
5132 eval "$2=$tval"'
5133
5134 : define an is-in-libc? function
5135 inlibc='echo " "; td=$define; tu=$undef;
5136 sym=$1; var=$2; eval "was=\$$2";
5137 tx=yes;
5138 case "$reuseval$was" in
5139 true) ;;
5140 true*) tx=no;;
5141 esac;
5142 case "$tx" in
5143 yes)
5144         set $sym tres -f;
5145         eval $csym;
5146         case "$tres" in
5147         true)
5148                 echo "$sym() found." >&4;
5149                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5150         *)
5151                 echo "$sym() NOT found." >&4;
5152                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5153         esac;;
5154 *)
5155         case "$was" in
5156         $define) echo "$sym() found." >&4;;
5157         *) echo "$sym() NOT found." >&4;;
5158         esac;;
5159 esac'
5160
5161 : see if sqrtl exists
5162 set sqrtl d_sqrtl
5163 eval $inlibc
5164
5165 case "$ccflags" in
5166 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
5167 esac
5168
5169 case "$uselongdouble" in
5170 $define|true|[yY]*)     dflt='y';;
5171 *) dflt='n';;
5172 esac
5173 cat <<EOM
5174
5175 Perl can be built to take advantage of long doubles which
5176 (if available) may give more accuracy and range for floating point numbers.
5177
5178 If this doesn't make any sense to you, just accept the default '$dflt'.
5179 EOM
5180 rp='Try to use long doubles if available?'
5181 . ./myread
5182 case "$ans" in
5183 y|Y)    val="$define"   ;;
5184 *)      val="$undef"    ;;
5185 esac
5186 set uselongdouble
5187 eval $setvar
5188
5189 case "$uselongdouble" in
5190 true|[yY]*) uselongdouble="$define" ;;
5191 esac
5192
5193 case "$uselongdouble" in
5194 $define)
5195 : Look for a hint-file generated 'call-back-unit'.  If the
5196 : user has specified that long doubles should be used,
5197 : we may need to set or change some other defaults.
5198         if $test -f uselongdouble.cbu; then
5199                 echo "Your platform has some specific hints for long doubles, using them..."
5200                 . ./uselongdouble.cbu
5201         else
5202                 $cat <<EOM
5203 (Your platform doesn't have any specific hints for long doubles.)
5204 EOM
5205         fi
5206         ;;
5207 esac
5208
5209 case "$uselongdouble:$d_sqrtl" in
5210 $define:$undef)
5211                 $cat <<EOM >&4
5212
5213 *** You requested the use of long doubles but you do not seem to have
5214 *** the mathematic functions for long doubles.  I'm disabling the use
5215 *** of long doubles.
5216
5217 EOM
5218         uselongdouble=$undef
5219         ;;
5220 esac
5221
5222 : check for length of double
5223 echo " "
5224 case "$doublesize" in
5225 '')
5226         echo "Checking to see how big your double precision numbers are..." >&4
5227         $cat >try.c <<'EOCP'
5228 #include <stdio.h>
5229 int main()
5230 {
5231     printf("%d\n", (int)sizeof(double));
5232     exit(0);
5233 }
5234 EOCP
5235         set try
5236         if eval $compile_ok; then
5237                 doublesize=`./try`
5238                 echo "Your double is $doublesize bytes long."
5239         else
5240                 dflt='8'
5241                 echo "(I can't seem to compile the test program.  Guessing...)"
5242                 rp="What is the size of a double precision number (in bytes)?"
5243                 . ./myread
5244                 doublesize="$ans"
5245         fi
5246         ;;
5247 esac
5248 $rm -f try.c try
5249
5250 : check for long doubles
5251 echo " "
5252 echo "Checking to see if you have long double..." >&4
5253 echo 'int main() { long double x = 7.0; }' > try.c
5254 set try
5255 if eval $compile; then
5256         val="$define"
5257         echo "You have long double."
5258 else
5259         val="$undef"
5260         echo "You do not have long double."
5261 fi
5262 $rm try.*
5263 set d_longdbl
5264 eval $setvar
5265
5266 : check for length of long double
5267 case "${d_longdbl}${longdblsize}" in
5268 $define)
5269         echo " "
5270         echo "Checking to see how big your long doubles are..." >&4
5271         $cat >try.c <<'EOCP'
5272 #include <stdio.h>
5273 int main()
5274 {
5275         printf("%d\n", sizeof(long double));
5276 }
5277 EOCP
5278         set try
5279         set try
5280         if eval $compile; then
5281                 longdblsize=`./try$exe_ext`
5282                 echo "Your long doubles are $longdblsize bytes long."
5283         else
5284                 dflt='8'
5285                 echo " "
5286                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
5287                 rp="What is the size of a long double (in bytes)?"
5288                 . ./myread
5289                 longdblsize="$ans"
5290         fi
5291         if $test "X$doublesize" = "X$longdblsize"; then
5292                 echo "(That isn't any different from an ordinary double.)"
5293         fi      
5294         ;;
5295 esac
5296 $rm -f try.* try
5297
5298 case "$useperlio" in
5299 $define|true|[yY]*|'')  dflt='y';;
5300 *) dflt='n';;
5301 esac
5302 cat <<EOM
5303
5304 Previous version of $package used the standard IO mechanisms as
5305 defined in <stdio.h>.  Versions 5.003_02 and later of $package allow
5306 alternate IO mechanisms via the PerlIO abstraction layer, but the
5307 stdio mechanism is still available if needed.  The abstraction layer
5308 can use AT&T's sfio (if you already have sfio installed) or regular stdio.
5309 Using PerlIO with sfio may cause problems with some extension modules.
5310
5311 If this doesn't make any sense to you, just accept the default '$dflt'.
5312 EOM
5313 rp='Use the PerlIO abstraction layer?'
5314 . ./myread
5315 case "$ans" in
5316 y|Y) 
5317         val="$define"
5318         ;;
5319 *)      
5320         echo "Ok, doing things the stdio way."
5321         val="$undef"
5322         ;;
5323 esac
5324 set useperlio
5325 eval $setvar 
5326
5327 case "$usesocks" in
5328 $define|true|[yY]*)
5329         case "$useperlio" in
5330         $define|true|[yY]*) ;;
5331         *)      cat >&4 <<EOM
5332
5333 You are using the SOCKS proxy protocol library which means that you
5334 should also use the PerlIO layer.  You may be headed for trouble.
5335
5336 EOM
5337                 ;;
5338         esac
5339         ;;
5340 esac
5341
5342         
5343 : determine the architecture name
5344 echo " "
5345 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
5346         tarch=`arch`"-$osname"
5347 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
5348         if uname -m > tmparch 2>&1 ; then
5349                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
5350                         -e 's/$/'"-$osname/" tmparch`
5351         else
5352                 tarch="$osname"
5353         fi
5354         $rm -f tmparch
5355 else
5356         tarch="$osname"
5357 fi
5358 case "$myarchname" in
5359 ''|"$tarch") ;;
5360 *)
5361         echo "(Your architecture name used to be $myarchname.)"
5362         archname=''
5363         ;;
5364 esac
5365 myarchname="$tarch"
5366 case "$archname" in
5367 '') dflt="$tarch";;
5368 *) dflt="$archname";;
5369 esac
5370 rp='What is your architecture name'
5371 . ./myread
5372 archname="$ans"
5373 case "$usethreads" in
5374 $define)
5375         echo "Threads selected." >&4
5376         case "$archname" in
5377         *-thread*) echo "...and architecture name already has -thread." >&4
5378                 ;;
5379         *)      archname="$archname-thread"
5380                 echo "...setting architecture name to $archname." >&4
5381                 ;;
5382         esac
5383         ;;
5384 esac
5385 case "$usemultiplicity" in
5386 $define)
5387         echo "Multiplicity selected." >&4
5388         case "$archname" in
5389         *-multi*) echo "...and architecture name already has -multi." >&4
5390                 ;;
5391         *)      archname="$archname-multi"
5392                 echo "...setting architecture name to $archname." >&4
5393                 ;;
5394         esac
5395         ;;
5396 esac
5397 case "$use64bitint$use64bitall" in
5398 *"$define"*)
5399         case "$archname64" in
5400         '')
5401                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
5402                 ;;
5403         *)
5404                 case "$use64bitint" in
5405                 "$define") echo "64 bit integers selected." >&4 ;;
5406                 esac
5407                 case "$use64bitall" in
5408                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
5409                 esac
5410                 case "$archname" in
5411                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
5412                         ;;
5413                 *)      archname="$archname-$archname64"
5414                         echo "...setting architecture name to $archname." >&4
5415                         ;;
5416                 esac
5417                 ;;
5418         esac
5419 esac
5420 case "$uselongdouble" in
5421 $define)
5422         echo "Long doubles selected." >&4
5423         case "$longdblsize" in
5424         $doublesize)
5425                 "...but long doubles are equal to doubles, not changing architecture name." >&4
5426                 ;;
5427         *)
5428                 case "$archname" in
5429                 *-ld*) echo "...and architecture name already has -ld." >&4
5430                         ;;
5431                 *)      archname="$archname-ld"
5432                         echo "...setting architecture name to $archname." >&4
5433                         ;;
5434                 esac
5435                 ;;
5436         esac
5437         ;;
5438 esac
5439 case "$useperlio" in
5440 $define)
5441         echo "Perlio selected." >&4
5442         ;;
5443 *)
5444         echo "Perlio not selected, using stdio." >&4
5445         case "$archname" in
5446         *-stdio*) echo "...and architecture name already has -stdio." >&4
5447                 ;;
5448         *)      archname="$archname-stdio"
5449                 echo "...setting architecture name to $archname." >&4
5450                 ;;
5451         esac
5452         ;;
5453 esac
5454
5455 : determine root of directory hierarchy where package will be installed.
5456 case "$prefix" in
5457 '')
5458         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
5459         ;;
5460 *)
5461         dflt="$prefix"
5462         ;;
5463 esac
5464 $cat <<EOM
5465
5466 By default, $package will be installed in $dflt/bin, manual pages
5467 under $dflt/man, etc..., i.e. with $dflt as prefix for all
5468 installation directories. Typically this is something like /usr/local.
5469 If you wish to have binaries under /usr/bin but other parts of the
5470 installation under /usr/local, that's ok: you will be prompted
5471 separately for each of the installation directories, the prefix being
5472 only used to set the defaults.
5473
5474 EOM
5475 fn=d~
5476 rp='Installation prefix to use?'
5477 . ./getfile
5478 oldprefix=''
5479 case "$prefix" in
5480 '') ;;
5481 *)
5482         case "$ans" in
5483         "$prefix") ;;
5484         *) oldprefix="$prefix";;
5485         esac
5486         ;;
5487 esac
5488 prefix="$ans"
5489 prefixexp="$ansexp"
5490
5491 : is AFS running?
5492 echo " "
5493 case "$afs" in
5494 $define|true)   afs=true ;;
5495 $undef|false)   afs=false ;;
5496 *)      if test -d /afs; then
5497                 afs=true
5498         else
5499                 afs=false
5500         fi
5501         ;;
5502 esac
5503 if $afs; then
5504         echo "AFS may be running... I'll be extra cautious then..." >&4
5505 else
5506         echo "AFS does not seem to be running..." >&4
5507 fi
5508
5509 : determine installation prefix for where package is to be installed.
5510 if $afs; then 
5511 $cat <<EOM
5512
5513 Since you are running AFS, I need to distinguish the directory in which
5514 files will reside from the directory in which they are installed (and from
5515 which they are presumably copied to the former directory by occult means).
5516
5517 EOM
5518         case "$installprefix" in
5519         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
5520         *) dflt="$installprefix";;
5521         esac
5522 else
5523 $cat <<EOM
5524
5525 In some special cases, particularly when building $package for distribution,
5526 it is convenient to distinguish between the directory in which files should 
5527 be installed from the directory ($prefix) in which they 
5528 will eventually reside.  For most users, these two directories are the same.
5529
5530 EOM
5531         case "$installprefix" in
5532         '') dflt=$prefix ;;
5533         *) dflt=$installprefix;;
5534         esac
5535 fi
5536 fn=d~
5537 rp='What installation prefix should I use for installing files?'
5538 . ./getfile
5539 installprefix="$ans"
5540 installprefixexp="$ansexp"
5541
5542 : set the prefixit variable, to compute a suitable default value
5543 prefixit='case "$3" in
5544 ""|none)
5545         case "$oldprefix" in
5546         "") eval "$1=\"\$$2\"";;
5547         *)
5548                 case "$3" in
5549                 "") eval "$1=";;
5550                 none)
5551                         eval "tp=\"\$$2\"";
5552                         case "$tp" in
5553                         ""|" ") eval "$1=\"\$$2\"";;
5554                         *) eval "$1=";;
5555                         esac;;
5556                 esac;;
5557         esac;;
5558 *)
5559         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
5560         case "$tp" in
5561         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
5562         /*-$oldprefix/*|\~*-$oldprefix/*)
5563                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
5564         *) eval "$1=\"\$$2\"";;
5565         esac;;
5566 esac'
5567
5568
5569 : get the patchlevel
5570 echo " "
5571 echo "Getting the current patchlevel..." >&4
5572 if $test -r $rsrc/patchlevel.h;then
5573         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
5574         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
5575         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
5576         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
5577         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
5578         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
5579 else
5580         revision=0
5581         patchlevel=0
5582         subversion=0
5583         api_revision=0
5584         api_version=0
5585         api_subversion=0
5586 fi
5587 $echo "(You have $package version $patchlevel subversion $subversion.)"
5588 case "$osname" in
5589 dos|vms)
5590         : XXX Should be a Configure test for double-dots in filenames.
5591         version=`echo $revision $patchlevel $subversion | \
5592                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
5593         api_versionstring=`echo $api_revision $api_version $api_subversion | \
5594                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
5595         ;;
5596 *)
5597         version=`echo $revision $patchlevel $subversion | \
5598                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
5599         api_versionstring=`echo $api_revision $api_version $api_subversion | \
5600                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
5601         ;;
5602 esac
5603 : Special case the 5.005_xx maintenance series, which used 5.005
5604 : without any subversion label as a subdirectory in $sitelib
5605 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
5606         api_versionstring='5.005'
5607 fi
5608
5609 : determine installation style
5610 : For now, try to deduce it from prefix unless it is already set.
5611 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
5612 case "$installstyle" in
5613 '')     case "$prefix" in
5614                 *perl*) dflt='lib';;
5615                 *) dflt='lib/perl5' ;;
5616         esac
5617         ;;
5618 *)      dflt="$installstyle" ;;
5619 esac
5620 : Probably not worth prompting for this since we prompt for all
5621 : the directories individually, and the prompt would be too long and
5622 : confusing anyway.
5623 installstyle=$dflt
5624
5625 : determine where private library files go
5626 : Usual default is /usr/local/lib/perl5/$version.
5627 : Also allow things like /opt/perl/lib/$version, since 
5628 : /opt/perl/lib/perl5... would be redundant.
5629 : The default "style" setting is made in installstyle.U
5630 case "$installstyle" in
5631 *lib/perl5*) set dflt privlib lib/$package/$version ;;
5632 *)       set dflt privlib lib/$version ;;
5633 esac
5634 eval $prefixit
5635 $cat <<EOM
5636
5637 There are some auxiliary files for $package that need to be put into a
5638 private library directory that is accessible by everyone.
5639
5640 EOM
5641 fn=d~+
5642 rp='Pathname where the private library files will reside?'
5643 . ./getfile
5644 privlib="$ans"
5645 privlibexp="$ansexp"
5646 : Change installation prefix, if necessary.
5647 if $test X"$prefix" != X"$installprefix"; then
5648         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
5649 else
5650         installprivlib="$privlibexp"
5651 fi
5652
5653 : set the prefixup variable, to restore leading tilda escape
5654 prefixup='case "$prefixexp" in
5655 "$prefix") ;;
5656 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
5657 esac'
5658
5659 : determine where public architecture dependent libraries go
5660 set archlib archlib
5661 eval $prefixit
5662 : privlib default is /usr/local/lib/$package/$version
5663 : archlib default is /usr/local/lib/$package/$version/$archname
5664 : privlib may have an optional trailing /share.
5665 tdflt=`echo $privlib | $sed 's,/share$,,'`
5666 tdflt=$tdflt/$archname
5667 case "$archlib" in
5668 '')     dflt=$tdflt
5669         ;;
5670 *)      dflt="$archlib"
5671     ;;
5672 esac
5673 $cat <<EOM
5674
5675 $spackage contains architecture-dependent library files.  If you are
5676 sharing libraries in a heterogeneous environment, you might store
5677 these files in a separate location.  Otherwise, you can just include
5678 them with the rest of the public library files.
5679
5680 EOM
5681 fn=d+~
5682 rp='Where do you want to put the public architecture-dependent libraries?'
5683 . ./getfile
5684 archlib="$ans"
5685 archlibexp="$ansexp"
5686 if $test X"$archlib" = X"$privlib"; then
5687         d_archlib="$undef"
5688 else
5689         d_archlib="$define"
5690 fi
5691 : Change installation prefix, if necessary.
5692 if $test X"$prefix" != X"$installprefix"; then
5693         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
5694 else
5695         installarchlib="$archlibexp"
5696 fi
5697
5698
5699 : Binary compatibility with 5.005 is not possible for builds
5700 : with advanced features
5701 case "$usethreads$usemultiplicity" in
5702 *define*)
5703         bincompat5005="$undef"
5704         d_bincompat5005="$undef"
5705         ;;
5706 *)      $cat <<EOM
5707
5708 This version of Perl can be compiled for binary compatibility with 5.005.
5709 If you decide to do so, you will be able to continue using most of the
5710 extensions that were compiled for Perl 5.005.
5711
5712 EOM
5713         case "$bincompat5005$d_bincompat5005" in
5714         *"$undef"*) dflt=n ;;
5715         *) dflt=y ;;
5716         esac
5717         rp='Binary compatibility with Perl 5.005?'
5718         . ./myread
5719         case "$ans" in
5720         y*) val="$define" ;;
5721         *)  val="$undef" ;;
5722         esac
5723         set d_bincompat5005
5724         eval $setvar
5725         case "$d_bincompat5005" in
5726         "$define")
5727                 bincompat5005="$define"
5728                 ;;
5729         *)      bincompat5005="$undef"
5730                 d_bincompat5005="$undef"
5731                 ;;
5732         esac
5733         ;;
5734 esac
5735
5736
5737 : see if setuid scripts can be secure
5738 $cat <<EOM
5739
5740 Some kernels have a bug that prevents setuid #! scripts from being
5741 secure.  Some sites have disabled setuid #! scripts because of this.
5742
5743 First let's decide if your kernel supports secure setuid #! scripts.
5744 (If setuid #! scripts would be secure but have been disabled anyway,
5745 don't say that they are secure if asked.)
5746
5747 EOM
5748
5749 val="$undef"
5750 if $test -d /dev/fd; then
5751         echo "#!$ls" >reflect
5752         chmod +x,u+s reflect
5753         ./reflect >flect 2>&1
5754         if $contains "/dev/fd" flect >/dev/null; then
5755                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
5756                 val="$define"
5757         else
5758                 $cat <<EOM
5759 If you are not sure if they are secure, I can check but I'll need a
5760 username and password different from the one you are using right now.
5761 If you don't have such a username or don't want me to test, simply
5762 enter 'none'.
5763
5764 EOM
5765                 rp='Other username to test security of setuid scripts with?'
5766                 dflt='none'
5767                 . ./myread
5768                 case "$ans" in
5769                 n|none)
5770                         case "$d_suidsafe" in
5771                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
5772                                 dflt=n;;
5773                         "$undef")
5774                                 echo "Well, the $hint value is *not* secure." >&4
5775                                 dflt=n;;
5776                         *)      echo "Well, the $hint value *is* secure." >&4
5777                                 dflt=y;;
5778                         esac
5779                         ;;
5780                 *)
5781                         $rm -f reflect flect
5782                         echo "#!$ls" >reflect
5783                         chmod +x,u+s reflect
5784                         echo >flect
5785                         chmod a+w flect
5786                         echo '"su" will (probably) prompt you for '"$ans's password."
5787                         su $ans -c './reflect >flect'
5788                         if $contains "/dev/fd" flect >/dev/null; then
5789                                 echo "Okay, it looks like setuid scripts are secure." >&4
5790                                 dflt=y
5791                         else
5792                                 echo "I don't think setuid scripts are secure." >&4
5793                                 dflt=n
5794                         fi
5795                         ;;
5796                 esac
5797                 rp='Does your kernel have *secure* setuid scripts?'
5798                 . ./myread
5799                 case "$ans" in
5800                 [yY]*)  val="$define";;
5801                 *)      val="$undef";;
5802                 esac
5803         fi
5804 else
5805         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
5806         echo "(That's for file descriptors, not floppy disks.)"
5807         val="$undef"
5808 fi
5809 set d_suidsafe
5810 eval $setvar
5811
5812 $rm -f reflect flect
5813
5814 : now see if they want to do setuid emulation
5815 echo " "
5816 val="$undef"
5817 case "$d_suidsafe" in
5818 "$define")
5819         val="$undef"
5820         echo "No need to emulate SUID scripts since they are secure here." >& 4
5821         ;;
5822 *)
5823         $cat <<EOM
5824 Some systems have disabled setuid scripts, especially systems where
5825 setuid scripts cannot be secure.  On systems where setuid scripts have
5826 been disabled, the setuid/setgid bits on scripts are currently
5827 useless.  It is possible for $package to detect those bits and emulate
5828 setuid/setgid in a secure fashion.  This emulation will only work if
5829 setuid scripts have been disabled in your kernel.
5830
5831 EOM
5832         case "$d_dosuid" in
5833         "$define") dflt=y ;;
5834         *) dflt=n ;;
5835         esac
5836         rp="Do you want to do setuid/setgid emulation?"
5837         . ./myread
5838         case "$ans" in
5839         [yY]*)  val="$define";;
5840         *)      val="$undef";;
5841         esac
5842         ;;
5843 esac
5844 set d_dosuid
5845 eval $setvar
5846
5847 : determine filename position in cpp output
5848 echo " "
5849 echo "Computing filename position in cpp output for #include directives..." >&4
5850 echo '#include <stdio.h>' > foo.c
5851 $cat >fieldn <<EOF
5852 $startsh
5853 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
5854 $grep '^[       ]*#.*stdio\.h' | \
5855 while read cline; do
5856         pos=1
5857         set \$cline
5858         while $test \$# -gt 0; do
5859                 if $test -r \`echo \$1 | $tr -d '"'\`; then
5860                         echo "\$pos"
5861                         exit 0
5862                 fi
5863                 shift
5864                 pos=\`expr \$pos + 1\`
5865         done
5866 done
5867 EOF
5868 chmod +x fieldn
5869 fieldn=`./fieldn`
5870 $rm -f foo.c fieldn
5871 case $fieldn in
5872 '') pos='???';;
5873 1) pos=first;;
5874 2) pos=second;;
5875 3) pos=third;;
5876 *) pos="${fieldn}th";;
5877 esac
5878 echo "Your cpp writes the filename in the $pos field of the line."
5879
5880 : locate header file
5881 $cat >findhdr <<EOF
5882 $startsh
5883 wanted=\$1
5884 name=''
5885 for usrincdir in $usrinc
5886 do
5887         if test -f \$usrincdir/\$wanted; then
5888                 echo "\$usrincdir/\$wanted"
5889                 exit 0
5890         fi
5891 done
5892 awkprg='{ print \$$fieldn }'
5893 echo "#include <\$wanted>" > foo\$\$.c
5894 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
5895 $grep "^[       ]*#.*\$wanted" | \
5896 while read cline; do
5897         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
5898         case "\$name" in
5899         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
5900         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
5901         *) exit 2;;
5902         esac;
5903 done;
5904 #
5905 # status = 0: grep returned 0 lines, case statement not executed
5906 # status = 1: headerfile found
5907 # status = 2: while loop executed, no headerfile found
5908 #
5909 status=\$?
5910 $rm -f foo\$\$.c;
5911 if test \$status -eq 1; then
5912         exit 0;
5913 fi
5914 exit 1
5915 EOF
5916 chmod +x findhdr
5917
5918 : define an alternate in-header-list? function
5919 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
5920 cont=true; xxf="echo \"<\$1> found.\" >&4";
5921 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
5922 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
5923 esac;
5924 case $# in 4) instead=instead;; *) instead="at last";; esac;
5925 while $test "$cont"; do
5926         xxx=`./findhdr $1`
5927         var=$2; eval "was=\$$2";
5928         if $test "$xxx" && $test -r "$xxx";
5929         then eval $xxf;
5930         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5931                 cont="";
5932         else eval $xxnf;
5933         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5934         set $yyy; shift; shift; yyy=$@;
5935         case $# in 0) cont="";;
5936         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5937                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5938         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5939                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5940         esac;
5941 done;
5942 while $test "$yyy";
5943 do set $yyy; var=$2; eval "was=\$$2";
5944         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5945         set $yyy; shift; shift; yyy=$@;
5946 done'
5947
5948 : see if this is a malloc.h system
5949 set malloc.h i_malloc
5950 eval $inhdr
5951
5952 : see if stdlib is available
5953 set stdlib.h i_stdlib
5954 eval $inhdr
5955
5956 : determine which malloc to compile in
5957 echo " "
5958 case "$usemymalloc" in
5959 ''|[yY]*|true|$define)  dflt='y' ;;
5960 *)      dflt='n' ;;
5961 esac
5962 rp="Do you wish to attempt to use the malloc that comes with $package?"
5963 . ./myread
5964 usemymalloc="$ans"
5965 case "$ans" in
5966 y*|true)
5967         usemymalloc='y'
5968         mallocsrc='malloc.c'
5969         mallocobj="malloc$_o"
5970         d_mymalloc="$define"
5971         case "$libs" in
5972         *-lmalloc*)
5973                 : Remove malloc from list of libraries to use
5974                 echo "Removing unneeded -lmalloc from library list" >&4
5975                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
5976                 shift
5977                 libs="$*"
5978                 echo "libs = $libs" >&4
5979                 ;;
5980         esac
5981         ;;
5982 *)
5983         usemymalloc='n'
5984         mallocsrc=''
5985         mallocobj=''
5986         d_mymalloc="$undef"
5987         ;;
5988 esac
5989
5990 : compute the return types of malloc and free
5991 echo " "
5992 $cat >malloc.c <<END
5993 #$i_malloc I_MALLOC
5994 #$i_stdlib I_STDLIB
5995 #include <stdio.h>
5996 #include <sys/types.h>
5997 #ifdef I_MALLOC
5998 #include <malloc.h>
5999 #endif
6000 #ifdef I_STDLIB
6001 #include <stdlib.h>
6002 #endif
6003 #ifdef TRY_MALLOC
6004 void *malloc();
6005 #endif
6006 #ifdef TRY_FREE
6007 void free();
6008 #endif
6009 END
6010 case "$malloctype" in
6011 '')
6012         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
6013                 malloctype='void *'
6014         else
6015                 malloctype='char *'
6016         fi
6017         ;;
6018 esac
6019 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6020
6021 case "$freetype" in
6022 '')
6023         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6024                 freetype='void'
6025         else
6026                 freetype='int'
6027         fi
6028         ;;
6029 esac
6030 echo "Your system uses $freetype free(), it would seem." >&4
6031 $rm -f malloc.[co]
6032 $cat <<EOM
6033
6034 After $package is installed, you may wish to install various
6035 add-on modules and utilities.  Typically, these add-ons will
6036 be installed under $prefix with the rest
6037 of this package.  However, you may wish to install such add-ons
6038 elsewhere under a different prefix.
6039
6040 If you do not wish to put everything under a single prefix, that's
6041 ok.  You will be prompted for the individual locations; this siteprefix
6042 is only used to suggest the defaults.
6043
6044 The default should be fine for most people.
6045
6046 EOM
6047 fn=d~+
6048 rp='Installation prefix to use for add-on modules and utilities?'
6049 : XXX Here might be another good place for an installstyle setting.
6050 case "$siteprefix" in
6051 '') dflt=$prefix ;;
6052 *)  dflt=$siteprefix ;;
6053 esac
6054 . ./getfile
6055 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6056 oldsiteprefix=''
6057 case "$siteprefix" in
6058 '') ;;
6059 *)      case "$ans" in
6060         "$prefix") ;;
6061         *) oldsiteprefix="$prefix";;
6062         esac
6063         ;;
6064 esac
6065 siteprefix="$ans"
6066 siteprefixexp="$ansexp"
6067
6068 : determine where site specific libraries go.
6069 : Usual default is /usr/local/lib/perl5/site_perl/$version
6070 : The default "style" setting is made in installstyle.U
6071 : XXX No longer works with Prefixit stuff.
6072 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6073 case "$sitelib" in
6074 '') case "$installstyle" in
6075         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
6076         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
6077         esac
6078         ;;
6079 *)      dflt="$sitelib"
6080         ;;
6081 esac
6082 $cat <<EOM
6083
6084 The installation process will create a directory for
6085 site-specific extensions and modules.  Most users find it convenient
6086 to place all site-specific files in this directory rather than in the
6087 main distribution directory.
6088
6089 EOM
6090 fn=d~+
6091 rp='Pathname for the site-specific library files?'
6092 . ./getfile
6093 sitelib="$ans"
6094 sitelibexp="$ansexp"
6095 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
6096 : Change installation prefix, if necessary.
6097 if $test X"$prefix" != X"$installprefix"; then
6098         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
6099 else
6100         installsitelib="$sitelibexp"
6101 fi
6102
6103 : determine where site specific architecture-dependent libraries go.
6104 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
6105 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6106 : sitelib may have an optional trailing /share.
6107 case "$sitearch" in
6108 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
6109         dflt="$dflt/$archname"
6110         ;;
6111 *)      dflt="$sitearch"
6112         ;;
6113 esac
6114 set sitearch sitearch none
6115 eval $prefixit
6116 $cat <<EOM
6117
6118 The installation process will also create a directory for
6119 architecture-dependent site-specific extensions and modules.
6120
6121 EOM
6122 fn=d~+
6123 rp='Pathname for the site-specific architecture-dependent library files?'
6124 . ./getfile
6125 sitearch="$ans"
6126 sitearchexp="$ansexp"
6127 : Change installation prefix, if necessary.
6128 if $test X"$prefix" != X"$installprefix"; then
6129         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6130 else
6131         installsitearch="$sitearchexp"
6132 fi
6133
6134 $cat <<EOM
6135
6136 The installation process will also create a directory for
6137 vendor-supplied add-ons.  Vendors who supply perl with their system
6138 may find it convenient to place all vendor-supplied files in this
6139 directory rather than in the main distribution directory.  This will
6140 ease upgrades between binary-compatible maintenance versions of perl.
6141
6142 Of course you may also use these directories in whatever way you see
6143 fit.  For example, you might use them to access modules shared over a
6144 company-wide network.
6145
6146 The default answer should be fine for most people.
6147 This causes further questions about vendor add-ons to be skipped
6148 and no vendor-specific directories will be configured for perl.
6149
6150 EOM
6151 rp='Do you want to configure vendor-specific add-on directories?'
6152 case "$usevendorprefix" in
6153 define|true|[yY]*) dflt=y ;;
6154 *)      : User may have set vendorprefix directly on Configure command line.
6155         case "$vendorprefix" in
6156         ''|' ') dflt=n ;;
6157         *)      dflt=y ;;
6158         esac
6159         ;;
6160 esac
6161 . ./myread
6162 case "$ans" in
6163 [yY]*)  fn=d~+
6164         rp='Installation prefix to use for vendor-supplied add-ons?'
6165         case "$vendorprefix" in
6166         '') dflt='' ;;
6167         *)  dflt=$vendorprefix ;;
6168         esac
6169         . ./getfile
6170         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6171         oldvendorprefix=''
6172         case "$vendorprefix" in
6173         '') ;;
6174         *)      case "$ans" in
6175                 "$prefix") ;;
6176                 *) oldvendorprefix="$prefix";;
6177                 esac
6178                 ;;
6179         esac
6180         usevendorprefix="$define"
6181         vendorprefix="$ans"
6182         vendorprefixexp="$ansexp"
6183         ;;
6184 *)      usevendorprefix="$undef"
6185         vendorprefix=''
6186         vendorprefixexp=''
6187         ;;
6188 esac
6189
6190 case "$vendorprefix" in
6191 '')     d_vendorlib="$undef"
6192         vendorlib=''
6193         vendorlibexp=''
6194         ;;
6195 *)      d_vendorlib="$define"
6196         : determine where vendor-supplied modules go.
6197         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6198         case "$vendorlib" in
6199         '')
6200                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6201                 case "$installstyle" in
6202                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6203                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6204                 esac
6205                 ;;
6206         *)      dflt="$vendorlib"
6207                 ;;
6208         esac
6209         fn=d~+
6210         rp='Pathname for the vendor-supplied library files?'
6211         . ./getfile
6212         vendorlib="$ans"
6213         vendorlibexp="$ansexp"
6214         ;;
6215 esac
6216 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6217 : Change installation prefix, if necessary.
6218 if $test X"$prefix" != X"$installprefix"; then
6219         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6220 else
6221         installvendorlib="$vendorlibexp"
6222 fi
6223
6224 case "$vendorprefix" in
6225 '')     d_vendorarch="$undef"
6226         vendorarch=''
6227         vendorarchexp=''
6228         ;;
6229 *)      d_vendorarch="$define"
6230         : determine where vendor-supplied architecture-dependent libraries go.
6231         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
6232         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6233         : vendorlib may have an optional trailing /share.
6234         case "$vendorarch" in
6235         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
6236                 dflt="$dflt/$archname"
6237                 ;;
6238         *)      dflt="$vendorarch" ;;
6239         esac
6240         fn=d~+
6241         rp='Pathname for vendor-supplied architecture-dependent files?'
6242         . ./getfile
6243         vendorarch="$ans"
6244         vendorarchexp="$ansexp"
6245         ;;
6246 esac
6247 : Change installation prefix, if necessary.
6248 if $test X"$prefix" != X"$installprefix"; then
6249         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6250 else
6251         installvendorarch="$vendorarchexp"
6252 fi
6253
6254 : Final catch-all directories to search
6255 $cat <<EOM
6256
6257 Lastly, you can have perl look in other directories for extensions and
6258 modules in addition to those already specified.
6259 These directories will be searched after 
6260         $sitearch 
6261         $sitelib 
6262 EOM
6263 test X"$vendorlib" != "X" && echo '     ' $vendorlib
6264 test X"$vendorarch" != "X" && echo '    ' $vendorarch
6265 echo ' '
6266 case "$otherlibdirs" in
6267 ''|' ') dflt='none' ;;
6268 *)      dflt="$otherlibdirs" ;;
6269 esac
6270 $cat <<EOM
6271 Enter a colon-separated set of extra paths to include in perl's @INC
6272 search path, or enter 'none' for no extra paths.
6273
6274 EOM
6275
6276 rp='Colon-separated list of additional directories for perl to search?'
6277 . ./myread
6278 case "$ans" in
6279 ' '|''|none)    otherlibdirs=' ' ;;     
6280 *)      otherlibdirs="$ans" ;;
6281 esac
6282 case "$otherlibdirs" in
6283 ' ') val=$undef ;;
6284 *)      val=$define ;;
6285 esac
6286 set d_perl_otherlibdirs
6287 eval $setvar
6288
6289 : Cruising for prototypes
6290 echo " "
6291 echo "Checking out function prototypes..." >&4
6292 $cat >prototype.c <<'EOCP'
6293 int main(int argc, char *argv[]) {
6294         exit(0);}
6295 EOCP
6296 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
6297         echo "Your C compiler appears to support function prototypes."
6298         val="$define"
6299 else
6300         echo "Your C compiler doesn't seem to understand function prototypes."
6301         val="$undef"
6302 fi
6303 set prototype
6304 eval $setvar
6305 $rm -f prototype*
6306
6307 case "$prototype" in
6308 "$define") ;;
6309 *)      ansi2knr='ansi2knr'
6310         echo " "
6311         cat <<EOM >&4
6312
6313 $me:  FATAL ERROR:
6314 This version of $package can only be compiled by a compiler that 
6315 understands function prototypes.  Unfortunately, your C compiler 
6316         $cc $ccflags
6317 doesn't seem to understand them.  Sorry about that.
6318
6319 If GNU cc is available for your system, perhaps you could try that instead.  
6320
6321 Eventually, we hope to support building Perl with pre-ANSI compilers.
6322 If you would like to help in that effort, please contact <perlbug@perl.org>.
6323
6324 Aborting Configure now.
6325 EOM
6326         exit 2
6327         ;;
6328 esac
6329
6330 : determine where public executables go
6331 echo " "
6332 set dflt bin bin
6333 eval $prefixit
6334 fn=d~
6335 rp='Pathname where the public executables will reside?'
6336 . ./getfile
6337 if $test "X$ansexp" != "X$binexp"; then
6338         installbin=''
6339 fi
6340 bin="$ans"
6341 binexp="$ansexp"
6342 : Change installation prefix, if necessary.
6343 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
6344 if $test X"$prefix" != X"$installprefix"; then
6345         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
6346 else
6347         installbin="$binexp"
6348 fi
6349
6350 : Find perl5.005 or later.
6351 echo "Looking for a previously installed perl5.005 or later... "
6352 case "$perl5" in
6353 '')     for tdir in `echo "$binexp:$PATH" | $sed "s/$path_sep/ /g"`; do
6354                 : Check if this perl is recent and can load a simple module
6355                 if $test -x $tdir/perl && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6356                         perl5=$tdir/perl
6357                         break;
6358                 elif $test -x $tdir/perl5 && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6359                         perl5=$tdir/perl
6360                         break;
6361                 fi
6362         done
6363         ;;
6364 *)      perl5="$perl5"
6365         ;;
6366 esac
6367 case "$perl5" in
6368 '')     echo "None found.  That's ok.";;
6369 *)      echo "Using $perl5." ;;
6370 esac
6371
6372 : Determine list of previous versions to include in @INC
6373 $cat > getverlist <<EOPL
6374 #!$perl5 -w
6375 use File::Basename;
6376 \$api_versionstring = "$api_versionstring";
6377 \$version = "$version";
6378 \$stem = "$sitelib_stem";
6379 \$archname = "$archname";
6380 EOPL
6381         $cat >> getverlist <<'EOPL'
6382 # Can't have leading @ because metaconfig interprets it as a command!
6383 ;@inc_version_list=();
6384 # XXX Redo to do opendir/readdir? 
6385 if (-d $stem) {
6386     chdir($stem);
6387     ;@candidates = glob("5.*");
6388 }
6389 else {
6390     ;@candidates = ();
6391 }
6392
6393 # XXX ToDo:  These comparisons must be reworked when two-digit
6394 # subversions come along, so that 5.7.10 compares as greater than
6395 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
6396 # widespread that we can use the built-in version vectors rather
6397 # than reinventing them here.  For 5.6.0, however, we must
6398 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
6399 foreach $d (@candidates) {
6400     if ($d lt $version) {
6401         if ($d ge $api_versionstring) {
6402             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
6403         }
6404         elsif ($d ge "5.005") {
6405             unshift(@inc_version_list, grep { -d } $d);
6406         }
6407     }
6408     else {
6409         # Skip newer version.  I.e. don't look in
6410         # 5.7.0 if we're installing 5.6.1.
6411     }
6412 }
6413
6414 if (@inc_version_list) {
6415     print join(' ', @inc_version_list);
6416 }
6417 else {
6418     # Blank space to preserve value for next Configure run.
6419     print " ";
6420 }
6421 EOPL
6422 chmod +x getverlist
6423 case "$inc_version_list" in
6424 '')     if test -x "$perl5"; then
6425                 dflt=`$perl5 getverlist`
6426         else
6427                 dflt='none'
6428         fi
6429         ;;
6430 $undef) dflt='none' ;;
6431 *)  dflt="$inc_version_list" ;;
6432 esac
6433 case "$dflt" in
6434 ''|' ') dflt=none ;;
6435 esac
6436 case "$dflt" in
6437 5.005) case "$bincompat5005" in
6438        $define|true|[yY]*) ;;
6439        *) dflt=none ;;
6440        esac
6441        ;;
6442 esac
6443 $cat <<'EOM'
6444
6445 In order to ease the process of upgrading, this version of perl 
6446 can be configured to use modules built and installed with earlier 
6447 versions of perl that were installed under $prefix.  Specify here
6448 the list of earlier versions that this version of perl should check.
6449 If Configure detected no earlier versions of perl installed under
6450 $prefix, then the list will be empty.  Answer 'none' to tell perl
6451 to not search earlier versions.
6452
6453 The default should almost always be sensible, so if you're not sure,
6454 just accept the default.
6455 EOM
6456
6457 rp='List of earlier versions to include in @INC?'
6458 . ./myread
6459 case "$ans" in
6460 [Nn]one|''|' ') inc_version_list=' ' ;;
6461 *) inc_version_list="$ans" ;;
6462 esac
6463 case "$inc_version_list" in
6464 ''|' ') 
6465         inc_version_list_init='0';;
6466 *)      inc_version_list_init=`echo $inc_version_list |
6467                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
6468         ;;
6469 esac
6470 $rm -f getverlist
6471
6472 : determine whether to install perl also as /usr/bin/perl
6473
6474 echo " "
6475 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
6476         $cat <<EOM
6477 Many scripts expect perl to be installed as /usr/bin/perl.
6478 I can install the perl you are about to compile also as /usr/bin/perl
6479 (in addition to $installbin/perl).
6480 EOM
6481         case "$installusrbinperl" in
6482         "$undef"|[nN]*) dflt='n';;
6483         *)              dflt='y';;
6484         esac
6485         rp="Do you want to install perl as /usr/bin/perl?"
6486         . ./myread
6487         case "$ans" in
6488         [yY]*)  val="$define";;
6489         *)      val="$undef" ;;
6490         esac
6491 else
6492         val="$undef"
6493 fi
6494 set installusrbinperl
6495 eval $setvar
6496
6497 : see if dld is available
6498 set dld.h i_dld
6499 eval $inhdr
6500
6501 : see if dlopen exists
6502 xxx_runnm="$runnm"
6503 runnm=false
6504 set dlopen d_dlopen
6505 eval $inlibc
6506 runnm="$xxx_runnm"
6507
6508 : determine which dynamic loading, if any, to compile in
6509 echo " "
6510 dldir="ext/DynaLoader"
6511 case "$usedl" in
6512 $define|y|true)
6513         dflt='y'
6514         usedl="$define"
6515         ;;
6516 $undef|n|false)
6517         dflt='n'
6518         usedl="$undef"
6519         ;;
6520 *) 
6521         dflt='n'
6522         case "$d_dlopen" in
6523             $define) dflt='y' ;;
6524         esac
6525         case "$i_dld" in
6526             $define) dflt='y' ;;
6527         esac
6528         : Does a dl_xxx.xs file exist for this operating system
6529         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
6530         ;;
6531 esac
6532 rp="Do you wish to use dynamic loading?"
6533 . ./myread
6534 usedl="$ans"
6535 case "$ans" in
6536 y*) usedl="$define"
6537         case "$dlsrc" in
6538         '')
6539                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
6540                         dflt="$dldir/dl_${osname}.xs"
6541                 elif $test "$d_dlopen" = "$define" ; then
6542                         dflt="$dldir/dl_dlopen.xs"
6543                 elif $test "$i_dld" = "$define" ; then
6544                         dflt="$dldir/dl_dld.xs"
6545                 else
6546                         dflt=''
6547                 fi
6548                 ;;
6549         *)      dflt="$dldir/$dlsrc"
6550                 ;;
6551         esac
6552     echo "The following dynamic loading files are available:"
6553         : Can not go over to $dldir because getfile has path hard-coded in.
6554         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
6555         rp="Source file to use for dynamic loading"
6556         fn="fne"
6557         gfpth="$src"
6558         . ./getfile
6559         usedl="$define"
6560         : emulate basename
6561         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
6562
6563         $cat << EOM
6564
6565 Some systems may require passing special flags to $cc -c to
6566 compile modules that will be used to create a shared library.
6567 To use no flags, say "none".
6568
6569 EOM
6570     case "$cccdlflags" in
6571     '') case "$gccversion" in
6572                 '') case "$osname" in
6573                         hpux)   dflt='+z' ;;
6574                         next)   dflt='none' ;;
6575                         irix*)  dflt='-KPIC' ;;
6576                         svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
6577                         sunos)  dflt='-pic' ;;
6578                         *)      dflt='none' ;;
6579                     esac
6580                         ;;
6581                 *)  case "$osname" in
6582                         svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
6583                         *)      dflt='-fpic' ;;
6584                     esac ;;
6585             esac ;;
6586         ' ') dflt='none' ;;
6587     *)  dflt="$cccdlflags" ;;
6588     esac
6589     rp="Any special flags to pass to $cc -c to compile shared library modules?"
6590     . ./myread
6591     case "$ans" in
6592     none) cccdlflags=' ' ;;
6593     *) cccdlflags="$ans" ;;
6594     esac
6595
6596     cat << EOM
6597
6598 Some systems use ld to create libraries that can be dynamically loaded,
6599 while other systems (such as those using ELF) use $cc.
6600
6601 EOM
6602         case "$ld" in
6603         '')     $cat >try.c <<'EOM'
6604 /* Test for whether ELF binaries are produced */
6605 #include <fcntl.h>
6606 #include <stdlib.h>
6607 int main() {
6608         char b[4];
6609         int i = open("a.out",O_RDONLY);
6610         if(i == -1) 
6611                 exit(1); /* fail */
6612         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
6613                 exit(0); /* succeed (yes, it's ELF) */
6614         else
6615                 exit(1); /* fail */
6616 }
6617 EOM
6618                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
6619                         cat <<EOM
6620 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
6621 EOM
6622                         dflt="$cc"
6623                 else
6624                         echo "I'll use ld to build dynamic libraries."
6625                         dflt='ld'
6626                 fi
6627                 rm -f try.c a.out
6628                 ;;
6629         *)      dflt="$ld"
6630                 ;;
6631         esac
6632
6633     rp="What command should be used to create dynamic libraries?"
6634     . ./myread
6635         ld="$ans"
6636
6637     cat << EOM
6638
6639 Some systems may require passing special flags to $ld to create a
6640 library that can be dynamically loaded.  If your ld flags include
6641 -L/other/path options to locate libraries outside your loader's normal
6642 search path, you may need to specify those -L options here as well.  To
6643 use no flags, say "none".
6644
6645 EOM
6646     case "$lddlflags" in
6647     '') case "$osname" in
6648                         beos) dflt='-nostart' ;;
6649                         hpux) dflt='-b';
6650                               case "$gccversion" in
6651                               '') dflt="$dflt +vnocompatwarnings" ;;
6652                               esac
6653                               ;;        
6654                         linux|irix*)    dflt='-shared' ;;
6655                         next)  dflt='none' ;;
6656                         solaris) dflt='-G' ;;
6657                         sunos) dflt='-assert nodefinitions' ;;
6658                         svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
6659                 *)     dflt='none' ;;
6660                         esac
6661                         ;;
6662     *) dflt="$lddlflags" ;;
6663     esac
6664
6665         : Try to guess additional flags to pick up local libraries.
6666         : Be careful not to append to a plain 'none'
6667         case "$dflt" in
6668         none) dflt='' ;;
6669         esac
6670         for thisflag in $ldflags; do
6671                 case "$thisflag" in
6672                 -L*|-R*)
6673                         case " $dflt " in
6674                         *" $thisflag "*) ;;
6675                         *) dflt="$dflt $thisflag" ;;
6676                         esac
6677                         ;;
6678                 esac
6679         done
6680
6681         case "$dflt" in
6682         ''|' ') dflt='none' ;;
6683         esac
6684
6685     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
6686     . ./myread
6687     case "$ans" in
6688     none) lddlflags=' ' ;;
6689     *) lddlflags="$ans" ;;
6690     esac
6691
6692         cat <<EOM
6693
6694 Some systems may require passing special flags to $cc to indicate that
6695 the resulting executable will use dynamic linking.  To use no flags,
6696 say "none".
6697
6698 EOM
6699     case "$ccdlflags" in
6700     '') case "$osname" in
6701                 hpux)   dflt='-Wl,-E' ;;
6702                 linux)  dflt='-rdynamic' ;;
6703                 next)   dflt='none' ;;
6704                 sunos)  dflt='none' ;;
6705                 *)      dflt='none' ;;
6706             esac ;;
6707     ' ')  dflt='none' ;;
6708     *)  dflt="$ccdlflags" ;;
6709     esac
6710     rp="Any special flags to pass to $cc to use dynamic linking?"
6711     . ./myread
6712     case "$ans" in
6713     none) ccdlflags=' ' ;;
6714     *) ccdlflags="$ans" ;;
6715     esac
6716     ;;
6717 *)  usedl="$undef"
6718         ld='ld'
6719     dlsrc='dl_none.xs'
6720     lddlflags=''
6721     ccdlflags=''
6722     ;;
6723 esac
6724
6725 also=''
6726 case "$usedl" in
6727 $undef)
6728         # No dynamic loading being used, so don't bother even to prompt.
6729         useshrplib='false'
6730         ;;
6731 *)      case "$useshrplib" in
6732         '')     case "$osname" in
6733                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
6734                         dflt=y
6735                         also='Building a shared libperl is required for dynamic loading to work on your system.'
6736                         ;;
6737                 next*)
6738                         case "$osvers" in
6739                         4*)     dflt=y
6740                                 also='Building a shared libperl is needed for MAB support.'
6741                                 ;;
6742                         *)      dflt=n
6743                                 ;;
6744                         esac
6745                         ;;
6746                 *)      dflt=n
6747                         ;;
6748                 esac
6749                 ;;
6750         $define|true|[Yy]*)
6751                 dflt=y
6752                 ;;
6753         *)      dflt=n
6754                 ;;
6755         esac
6756         $cat << EOM
6757
6758 The perl executable is normally obtained by linking perlmain.c with
6759 libperl${_a}, any static extensions (usually just DynaLoader), and
6760 any other libraries needed on this system (such as -lm, etc.).  Since
6761 your system supports dynamic loading, it is probably possible to build
6762 a shared libperl.$so.  If you will have more than one executable linked
6763 to libperl.$so, this will significantly reduce the size of each
6764 executable, but it may have a noticeable affect on performance.  The
6765 default is probably sensible for your system.
6766 $also
6767
6768 EOM
6769         rp="Build a shared libperl.$so (y/n)"
6770         . ./myread
6771         case "$ans" in
6772         true|$define|[Yy]*)
6773                 useshrplib='true'  ;;
6774         *)      useshrplib='false' ;;
6775         esac
6776         ;;
6777 esac
6778
6779 case "$useshrplib" in
6780 true)
6781         case "$libperl" in
6782         '')
6783                 # Figure out a good name for libperl.so.  Since it gets stored in
6784                 # a version-specific architecture-dependent library, the version
6785                 # number isn't really that important, except for making cc/ld happy.
6786                 #
6787                 # A name such as libperl.so.3.1
6788                 majmin="libperl.$so.$patchlevel.$subversion"
6789                 # A name such as libperl.so.301
6790                 majonly=`echo $patchlevel $subversion |
6791                         $awk '{printf "%d%02d", $1, $2}'`
6792                 majonly=libperl.$so.$majonly
6793                 # I'd prefer to keep the os-specific stuff here to a minimum, and
6794                 # rely on figuring it out from the naming of libc.
6795                 case "${osname}${osvers}" in
6796                 next4*)
6797                         dflt=libperl.5.$so
6798                         # XXX How handle the --version stuff for MAB?
6799                         ;;
6800                 linux*)  # ld won't link with a bare -lperl otherwise.
6801                         dflt=libperl.$so
6802                         ;;
6803                 cygwin*) # include version
6804                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
6805                         ;;
6806                 *)      # Try to guess based on whether libc has major.minor.
6807                         case "$libc" in
6808                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
6809                         *libc.$so.[0-9]*) dflt=$majonly ;;
6810                         *)      dflt=libperl.$so ;;
6811                         esac
6812                         ;;
6813                 esac
6814                 ;;
6815         *)      dflt=$libperl
6816                 ;;
6817         esac
6818         cat << EOM
6819
6820 I need to select a good name for the shared libperl.  If your system uses
6821 library names with major and minor numbers, then you might want something
6822 like $majmin.  Alternatively, if your system uses a single version
6823 number for shared libraries, then you might want to use $majonly.
6824 Or, your system might be quite happy with a simple libperl.$so.
6825
6826 Since the shared libperl will get installed into a version-specific
6827 architecture-dependent directory, the version number of the shared perl
6828 library probably isn't important, so the default should be o.k.
6829
6830 EOM
6831         rp='What name do you want to give to the shared libperl?'
6832         . ./myread
6833         libperl=$ans
6834         echo "Ok, I'll use $libperl"
6835         ;;
6836 *)
6837         libperl="libperl${_a}"
6838         ;;
6839 esac
6840
6841 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
6842 case "$shrpdir" in
6843 '') ;;
6844 *)      $cat >&4 <<EOM
6845 WARNING:  Use of the shrpdir variable for the installation location of
6846 the shared $libperl is not supported.  It was never documented and
6847 will not work in this version.  Let me (perlbug@perl.org)
6848 know of any problems this may cause.
6849
6850 EOM
6851         case "$shrpdir" in
6852         "$archlibexp/CORE")
6853                 $cat >&4 <<EOM
6854 But your current setting of $shrpdir is
6855 the default anyway, so it's harmless.
6856 EOM
6857                 ;;
6858         *)
6859                 $cat >&4 <<EOM
6860 Further, your current attempted setting of $shrpdir
6861 conflicts with the value of $archlibexp/CORE
6862 that installperl will use.
6863 EOM
6864                 ;;
6865         esac
6866         ;;
6867 esac
6868
6869 # How will the perl executable find the installed shared $libperl?
6870 # Add $xxx to ccdlflags.
6871 # If we can't figure out a command-line option, use $shrpenv to
6872 # set env LD_RUN_PATH.  The main perl makefile uses this.
6873 shrpdir=$archlibexp/CORE
6874 xxx=''
6875 tmp_shrpenv=''
6876 if "$useshrplib"; then
6877     case "$osname" in 
6878         aix)
6879                 # We'll set it in Makefile.SH...
6880                 ;;
6881         solaris|netbsd)
6882                 xxx="-R $shrpdir"
6883                 ;;
6884         freebsd)
6885                 xxx="-Wl,-R$shrpdir"
6886                 ;;
6887         linux|irix*|dec_osf)
6888                 xxx="-Wl,-rpath,$shrpdir"
6889                 ;;
6890         next)
6891                 # next doesn't like the default...
6892                 ;;
6893         beos)
6894                 # beos doesn't like the default, either.
6895                 ;;
6896         hpux*)
6897                 # hpux doesn't like the default, either.
6898                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
6899                 ;;
6900         *)
6901                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
6902                 ;;
6903         esac
6904         case "$xxx" in
6905         '') ;;
6906         *)      
6907                 # Only add $xxx if it isn't already in ccdlflags.
6908                 case " $ccdlflags " in
6909                 *" $xxx "*)     ;;
6910                 *)      ccdlflags="$ccdlflags $xxx"
6911                         cat <<EOM >&4
6912
6913 Adding $xxx to the flags
6914 passed to $ld so that the perl executable will find the 
6915 installed shared $libperl.
6916
6917 EOM
6918                         ;;
6919                 esac
6920                 ;;
6921         esac
6922 fi
6923 # Fix ccdlflags in AIX for building external extensions.
6924 # (For building Perl itself bare -bE:perl.exp is needed,
6925 #  Makefile.SH takes care of this.)
6926 case "$osname" in
6927 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
6928 esac
6929 # Respect a hint or command-line value.
6930 case "$shrpenv" in
6931 '') shrpenv="$tmp_shrpenv" ;;
6932 esac
6933 case "$ldlibpthname" in
6934 '')     ldlibpthname=LD_LIBRARY_PATH ;;
6935 none)   ldlibpthname='' ;;
6936 esac
6937
6938 : determine where manual pages are on this system
6939 echo " "
6940 case "$sysman" in
6941 '') 
6942         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
6943         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
6944         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
6945         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
6946         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
6947         sysman=`./loc . /usr/man/man1 $syspath`
6948         ;;
6949 esac
6950 if $test -d "$sysman"; then
6951         echo "System manual is in $sysman." >&4
6952 else
6953         echo "Could not find manual pages in source form." >&4
6954 fi
6955
6956 : determine where manual pages go
6957 set man1dir man1dir none
6958 eval $prefixit
6959 $cat <<EOM
6960
6961 $spackage has manual pages available in source form.
6962 EOM
6963 case "$nroff" in
6964 nroff)
6965         echo "However, you don't have nroff, so they're probably useless to you."
6966         case "$man1dir" in
6967         '') man1dir="none";;
6968         esac;;
6969 esac
6970 echo "If you don't want the manual sources installed, answer 'none'."
6971 case "$man1dir" in
6972 ' ') dflt=none
6973         ;;
6974 '')
6975         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
6976         lookpath="$lookpath $prefixexp/man/p_man/man1"
6977         lookpath="$lookpath $prefixexp/man/u_man/man1"
6978         lookpath="$lookpath $prefixexp/man/man.1"
6979         case "$sysman" in
6980         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
6981         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
6982         esac
6983         set dflt
6984         eval $prefixup
6985         ;;
6986 *)  dflt="$man1dir"
6987         ;;
6988 esac
6989 echo " "
6990 fn=dn+~
6991 rp="Where do the main $spackage manual pages (source) go?"
6992 . ./getfile
6993 if $test "X$man1direxp" != "X$ansexp"; then
6994         installman1dir=''
6995 fi
6996 man1dir="$ans"
6997 man1direxp="$ansexp"
6998 case "$man1dir" in
6999 '')     man1dir=' '
7000         installman1dir='';;
7001 esac
7002
7003 : Change installation prefix, if necessary.
7004 if $test X"$prefix" != X"$installprefix"; then
7005         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
7006 else
7007         installman1dir="$man1direxp"
7008 fi
7009
7010 : What suffix to use on installed man pages
7011
7012 case "$man1dir" in
7013 ' ')
7014         man1ext='0'
7015         ;;
7016 *)
7017         rp="What suffix should be used for the main $spackage man pages?"
7018         case "$man1ext" in
7019         '')     case "$man1dir" in
7020                 *1)  dflt=1 ;;
7021                 *1p) dflt=1p ;;
7022                 *1pm) dflt=1pm ;;
7023                 *l) dflt=l;;
7024                 *n) dflt=n;;
7025                 *o) dflt=o;;
7026                 *p) dflt=p;;
7027                 *C) dflt=C;;
7028                 *L) dflt=L;;
7029                 *L1) dflt=L1;;
7030                 *) dflt=1;;
7031                 esac
7032                 ;;
7033         *)      dflt="$man1ext";;
7034         esac
7035         . ./myread
7036         man1ext="$ans"
7037         ;;
7038 esac
7039
7040 : see if we can have long filenames
7041 echo " "
7042 first=123456789abcdef
7043 $rm -f $first
7044 if (echo hi >$first) 2>/dev/null; then
7045         if $test -f 123456789abcde; then
7046                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
7047                 val="$undef"
7048         else
7049                 echo 'You can have filenames longer than 14 characters.'>&4
7050                 val="$define"
7051         fi
7052 else
7053         $cat <<'EOM'
7054 You can't have filenames longer than 14 chars.
7055 You can't even think about them!
7056 EOM
7057         val="$undef"
7058 fi 
7059 set d_flexfnam
7060 eval $setvar
7061 $rm -rf 123456789abcde*
7062
7063 : determine where library module manual pages go
7064 set man3dir man3dir none
7065 eval $prefixit
7066 $cat <<EOM
7067
7068 $spackage has manual pages for many of the library modules.
7069 EOM
7070
7071 case "$nroff" in
7072 nroff)
7073         $cat <<'EOM'
7074 However, you don't have nroff, so they're probably useless to you.
7075 EOM
7076         case "$man3dir" in
7077         '') man3dir="none";;
7078         esac;;
7079 esac
7080
7081 case "$d_flexfnam" in
7082 undef)
7083         $cat <<'EOM'
7084 However, your system can't handle the long file names like File::Basename.3. 
7085 EOM
7086         case "$man3dir" in
7087         '') man3dir="none";;
7088         esac;;
7089 esac
7090
7091 echo "If you don't want the manual sources installed, answer 'none'."
7092 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7093 case "$man3dir" in
7094 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
7095         if $test -d "$privlib/man/man3"; then
7096                 cat <<EOM >&4
7097
7098 WARNING:  Previous versions of perl installed man3 pages into
7099 $privlib/man/man3.  This version will suggest a 
7100 new default of $dflt.  
7101 EOM
7102                 tdflt=$dflt
7103                 dflt='n'
7104                 rp='Do you wish to preserve the old behavior?(y/n)'
7105                 . ./myread
7106                 case "$ans" in
7107                 y*) dflt="$privlib/man/man3" ;;
7108                 *)  dflt=$tdflt ;;
7109                 esac
7110     fi
7111         ;;
7112 *)      dflt="$man3dir" ;;
7113 esac
7114 case "$dflt" in
7115 ' ') dflt=none ;;
7116 esac
7117 echo " "
7118 fn=dn+~
7119 rp="Where do the $package library man pages (source) go?"
7120 . ./getfile
7121 man3dir="$ans"
7122 man3direxp="$ansexp"
7123 case "$man3dir" in
7124 '')     man3dir=' '
7125         installman3dir='';;
7126 esac
7127
7128 : Change installation prefix, if necessary.
7129 if $test X"$prefix" != X"$installprefix"; then
7130         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
7131 else
7132         installman3dir="$man3direxp"
7133 fi
7134
7135 : What suffix to use on installed man pages
7136 case "$man3dir" in
7137 ' ')
7138         man3ext='0'
7139         ;;
7140 *)
7141         rp="What suffix should be used for the $package library man pages?"
7142         case "$man3ext" in
7143         '')     case "$man3dir" in
7144                 *3)  dflt=3 ;;
7145                 *3p) dflt=3p ;;
7146                 *3pm) dflt=3pm ;;
7147                 *l) dflt=l;;
7148                 *n) dflt=n;;
7149                 *o) dflt=o;;
7150                 *p) dflt=p;;
7151                 *C) dflt=C;;
7152                 *L) dflt=L;;
7153                 *L3) dflt=L3;;
7154                 *) dflt=3;;
7155                 esac
7156                 ;;
7157         *)      dflt="$man3ext";;
7158         esac
7159         . ./myread
7160         man3ext="$ans"
7161         ;;
7162 esac
7163
7164 : see if we have to deal with yellow pages, now NIS.
7165 if $test -d /usr/etc/yp || $test -d /etc/yp; then
7166         if $test -f /usr/etc/nibindd; then
7167                 echo " "
7168                 echo "I'm fairly confident you're on a NeXT."
7169                 echo " "
7170                 rp='Do you get the hosts file via NetInfo?'
7171                 dflt=y
7172                 case "$hostcat" in
7173                 nidump*) ;;
7174                 '') ;;
7175                 *) dflt=n;;
7176                 esac
7177                 . ./myread
7178                 case "$ans" in
7179                 y*) hostcat='nidump hosts .';;
7180                 *)      case "$hostcat" in
7181                         nidump*) hostcat='';;
7182                         esac
7183                         ;;
7184                 esac
7185         fi
7186         case "$hostcat" in
7187         nidump*) ;;
7188         *)
7189                 case "$hostcat" in
7190                 *ypcat*) dflt=y;;
7191                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7192                                 dflt=y
7193                         else
7194                                 dflt=n
7195                         fi;;
7196                 *) dflt=n;;
7197                 esac
7198                 echo " "
7199                 rp='Are you getting the hosts file via yellow pages?'
7200                 . ./myread
7201                 case "$ans" in
7202                 y*) hostcat='ypcat hosts';;
7203                 *) hostcat='cat /etc/hosts';;
7204                 esac
7205                 ;;
7206         esac
7207 fi
7208 case "$hostcat" in
7209 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
7210 esac
7211 case "$groupcat" in
7212 '') test -f /etc/group && groupcat='cat /etc/group';;
7213 esac
7214 case "$passcat" in
7215 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
7216 esac
7217
7218 : now get the host name
7219 echo " "
7220 echo "Figuring out host name..." >&4
7221 case "$myhostname" in
7222 '') cont=true
7223         echo 'Maybe "hostname" will work...'
7224         if tans=`sh -c hostname 2>&1` ; then
7225                 myhostname=$tans
7226                 phostname=hostname
7227                 cont=''
7228         fi
7229         ;;
7230 *) cont='';;
7231 esac
7232 if $test "$cont"; then
7233         if ./xenix; then
7234                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
7235                 if tans=`cat /etc/systemid 2>&1` ; then
7236                         myhostname=$tans
7237                         phostname='cat /etc/systemid'
7238                         echo "Whadyaknow.  Xenix always was a bit strange..."
7239                         cont=''
7240                 fi
7241         elif $test -r /etc/systemid; then
7242                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
7243         fi
7244 fi
7245 if $test "$cont"; then
7246         echo 'No, maybe "uuname -l" will work...'
7247         if tans=`sh -c 'uuname -l' 2>&1` ; then
7248                 myhostname=$tans
7249                 phostname='uuname -l'
7250         else
7251                 echo 'Strange.  Maybe "uname -n" will work...'
7252                 if tans=`sh -c 'uname -n' 2>&1` ; then
7253                         myhostname=$tans
7254                         phostname='uname -n'
7255                 else
7256                         echo 'Oh well, maybe I can mine it out of whoami.h...'
7257                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
7258                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
7259                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
7260                         else
7261                                 case "$myhostname" in
7262                                 '') echo "Does this machine have an identity crisis or something?"
7263                                         phostname='';;
7264                                 *)
7265                                         echo "Well, you said $myhostname before..."
7266                                         phostname='echo $myhostname';;
7267                                 esac
7268                         fi
7269                 fi
7270         fi
7271 fi
7272 : you do not want to know about this
7273 set $myhostname
7274 myhostname=$1
7275
7276 : verify guess
7277 if $test "$myhostname" ; then
7278         dflt=y
7279         rp='Your host name appears to be "'$myhostname'".'" Right?"
7280         . ./myread
7281         case "$ans" in
7282         y*) ;;
7283         *) myhostname='';;
7284         esac
7285 fi
7286
7287 : bad guess or no guess
7288 while $test "X$myhostname" = X ; do
7289         dflt=''
7290         rp="Please type the (one word) name of your host:"
7291         . ./myread
7292         myhostname="$ans"
7293 done
7294
7295 : translate upper to lower if necessary
7296 case "$myhostname" in
7297 *[A-Z]*)
7298         echo "(Normalizing case in your host name)"
7299         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
7300         ;;
7301 esac
7302
7303 case "$myhostname" in
7304 *.*)
7305         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
7306         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
7307         echo "(Trimming domain name from host name--host name is now $myhostname)"
7308         ;;
7309 *) case "$mydomain" in
7310         '')
7311                 {
7312                         test "X$hostcat" = "Xypcat hosts" &&
7313                         ypmatch "$myhostname" hosts 2>/dev/null |\
7314                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
7315                         $test -s hosts
7316                 } || {
7317                         test "X$hostcat" != "X" &&
7318                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
7319                                         /[       ]$myhostname[  . ]/p" > hosts
7320                 }
7321                 tmp_re="[       . ]"
7322                 if $test -f hosts; then
7323                         $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
7324                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
7325                         dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
7326                                 hosts | $sort | $uniq | \
7327                                 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
7328                         case `$echo X$dflt` in
7329                         X*\ *)  echo "(Several hosts in the database matched hostname)"
7330                                 dflt=.
7331                                 ;;
7332                         X.) echo "(You do not have fully-qualified names in the hosts database)"
7333                                 ;;
7334                         esac
7335                 else
7336                         echo "(I cannot locate a hosts database anywhere)"
7337                         dflt=.
7338                 fi
7339                 case "$dflt" in
7340                 .)
7341                         tans=`./loc resolv.conf X /etc /usr/etc`
7342                         if $test -f "$tans"; then
7343                                 echo "(Attempting domain name extraction from $tans)"
7344                                 dflt=.`$sed -n -e 's/   / /g' \
7345                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
7346                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7347                                 case "$dflt" in
7348                                 .) dflt=.`$sed -n -e 's/        / /g' \
7349                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
7350                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7351                                         ;;
7352                                 esac
7353                         fi
7354                         ;;
7355                 esac
7356                 case "$dflt" in
7357                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
7358                         dflt=.`sh -c domainname 2>/dev/null`
7359                         case "$dflt" in
7360                         '') dflt='.';;
7361                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
7362                         esac
7363                         ;;
7364                 esac
7365                 case "$dflt$osname" in
7366                 .os390) echo "(Attempting domain name extraction from //'SYS1.TCPPARMS(TCPDATA)')"
7367                         dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "//'SYS1.TCPPARMS(TCPDATA)'" 2>/dev/null`
7368                         ;;
7369                 esac
7370                 case "$dflt" in
7371                 .) echo "(Lost all hope -- silly guess then)"
7372                         dflt='.uucp'
7373                         ;;
7374                 esac
7375                 $rm -f hosts
7376                 ;;
7377         *) dflt="$mydomain";;
7378         esac;;
7379 esac
7380 echo " "
7381 rp="What is your domain name?"
7382 . ./myread
7383 tans="$ans"
7384 case "$ans" in
7385 '') ;;
7386 .*) ;;
7387 *) tans=".$tans";;
7388 esac
7389 mydomain="$tans"
7390
7391 : translate upper to lower if necessary
7392 case "$mydomain" in
7393 *[A-Z]*)
7394         echo "(Normalizing case in your domain name)"
7395         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
7396         ;;
7397 esac
7398
7399 : a little sanity check here
7400 case "$phostname" in
7401 '') ;;
7402 *)
7403         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
7404         $myhostname$mydomain|$myhostname) ;;
7405         *)
7406                 case "$phostname" in
7407                 sed*)
7408                         echo "(That doesn't agree with your whoami.h file, by the way.)"
7409                         ;;
7410                 *)
7411                         echo "(That doesn't agree with your $phostname command, by the way.)"
7412                         ;;
7413                 esac
7414         ;;
7415         esac
7416         ;;
7417 esac
7418
7419 $cat <<EOM
7420
7421 I need to get your e-mail address in Internet format if possible, i.e.
7422 something like user@host.domain. Please answer accurately since I have
7423 no easy means to double check it. The default value provided below
7424 is most probably close to reality but may not be valid from outside
7425 your organization...
7426
7427 EOM
7428 cont=x
7429 while test "$cont"; do
7430         case "$cf_email" in
7431         '') dflt="$cf_by@$myhostname$mydomain";;
7432         *) dflt="$cf_email";;
7433         esac
7434         rp='What is your e-mail address?'
7435         . ./myread
7436         cf_email="$ans"
7437         case "$cf_email" in
7438         *@*.*) cont='' ;;
7439         *)
7440                 rp='Address does not look like an Internet one.  Use it anyway?'
7441                 case "$fastread" in
7442                 yes) dflt=y ;;
7443                 *) dflt=n ;;
7444                 esac
7445                 . ./myread
7446                 case "$ans" in
7447                 y*) cont='' ;;
7448                 *) echo " " ;;
7449                 esac
7450                 ;;
7451         esac
7452 done
7453
7454 $cat <<EOM
7455
7456 If you or somebody else will be maintaining perl at your site, please
7457 fill in the correct e-mail address here so that they may be contacted
7458 if necessary. Currently, the "perlbug" program included with perl
7459 will send mail to this address in addition to perlbug@perl.org. You may
7460 enter "none" for no administrator.
7461
7462 EOM
7463 case "$perladmin" in
7464 '') dflt="$cf_email";;
7465 *) dflt="$perladmin";;
7466 esac
7467 rp='Perl administrator e-mail address'
7468 . ./myread
7469 perladmin="$ans"
7470
7471 : determine whether to only install version-specific parts.
7472 echo " "
7473 $cat <<EOM
7474 Do you want to install only the version-specific parts of the perl
7475 distribution?  Usually you do *not* want to do this.
7476 EOM
7477 case "$versiononly" in
7478 "$define"|[Yy]*|true) dflt='y' ;;
7479 *) dflt='n';
7480 esac
7481 rp="Do you want to install only the version-specific parts of perl?"
7482 . ./myread
7483 case "$ans" in
7484 [yY]*)  val="$define";;
7485 *)      val="$undef" ;;
7486 esac
7487 set versiononly
7488 eval $setvar
7489
7490 : figure out how to guarantee perl startup
7491 case "$startperl" in
7492 '')
7493         case "$sharpbang" in
7494         *!)
7495                 $cat <<EOH
7496
7497 I can use the #! construct to start perl on your system. This will
7498 make startup of perl scripts faster, but may cause problems if you
7499 want to share those scripts and perl is not in a standard place
7500 ($binexp/perl) on all your platforms. The alternative is to force
7501 a shell by starting the script with a single ':' character.
7502
7503 EOH
7504                 case "$versiononly" in
7505                 "$define")      dflt="$binexp/perl$version";;  
7506                 *)              dflt="$binexp/perl";;
7507                 esac
7508                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
7509                 . ./myread
7510                 case "$ans" in
7511                 none)   startperl=": # use perl";;
7512                 *)      startperl="#!$ans"
7513                         if $test 30 -lt `echo "$ans" | wc -c`; then
7514                                 $cat >&4 <<EOM
7515
7516 WARNING:  Some systems limit the #! command to 32 characters.
7517 If you experience difficulty running Perl scripts with #!, try
7518 installing Perl in a directory with a shorter pathname.
7519
7520 EOM
7521                         fi ;;
7522                 esac
7523                 ;;
7524         *) startperl=": # use perl"
7525                 ;;
7526         esac
7527         ;;
7528 esac
7529 echo "I'll use $startperl to start perl scripts."
7530
7531 : figure best path for perl in scripts
7532 case "$perlpath" in
7533 '')
7534         perlpath="$binexp/perl"
7535         case "$startperl" in
7536         *!*) ;;
7537         *)
7538                 $cat <<EOH
7539
7540 I will use the "eval 'exec'" idiom to start Perl on your system.
7541 I can use the full path of your Perl binary for this purpose, but
7542 doing so may cause problems if you want to share those scripts and
7543 Perl is not always in a standard place ($binexp/perl).
7544
7545 EOH
7546                 dflt="$binexp/perl"
7547                 rp="What path shall I use in \"eval 'exec'\"?"
7548                 . ./myread
7549                 perlpath="$ans"
7550                 ;;
7551         esac
7552         ;;
7553 esac
7554 case "$startperl" in
7555 *!*)    ;;
7556 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
7557 esac
7558
7559 : determine where public executable scripts go
7560 set scriptdir scriptdir
7561 eval $prefixit
7562 case "$scriptdir" in
7563 '')
7564         dflt="$bin"
7565         : guess some guesses
7566         $test -d /usr/share/scripts && dflt=/usr/share/scripts
7567         $test -d /usr/share/bin     && dflt=/usr/share/bin
7568         $test -d /usr/local/script  && dflt=/usr/local/script
7569         $test -d /usr/local/scripts && dflt=/usr/local/scripts
7570         $test -d $prefixexp/script  && dflt=$prefixexp/script
7571         set dflt
7572         eval $prefixup
7573         ;;
7574 *)  dflt="$scriptdir"
7575         ;;
7576 esac
7577 $cat <<EOM
7578  
7579 Some installations have a separate directory just for executable scripts so
7580 that they can mount it across multiple architectures but keep the scripts in
7581 one spot.  You might, for example, have a subdirectory of /usr/share for this.
7582 Or you might just lump your scripts in with all your other executables.
7583  
7584 EOM
7585 fn=d~
7586 rp='Where do you keep publicly executable scripts?'
7587 . ./getfile
7588 if $test "X$ansexp" != "X$scriptdirexp"; then
7589         installscript=''
7590 fi
7591 scriptdir="$ans"
7592 scriptdirexp="$ansexp"
7593 : Change installation prefix, if necessary.
7594 if $test X"$prefix" != X"$installprefix"; then
7595         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
7596 else
7597         installscript="$scriptdirexp"
7598 fi
7599
7600 : determine where add-on public executables go
7601 case "$sitebin" in
7602 '')     dflt=$siteprefix/bin ;;
7603 *)      dflt=$sitebin ;;
7604 esac
7605 fn=d~
7606 rp='Pathname where the add-on public executables should be installed?'
7607 . ./getfile
7608 sitebin="$ans"
7609 sitebinexp="$ansexp"
7610 : Change installation prefix, if necessary.
7611 if $test X"$prefix" != X"$installprefix"; then
7612         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
7613 else
7614         installsitebin="$sitebinexp"
7615 fi
7616
7617 case "$vendorprefix" in
7618 '')     d_vendorbin="$undef"
7619         vendorbin=''
7620         vendorbinexp=''
7621         ;;
7622 *)      d_vendorbin="$define"
7623         : determine where vendor-supplied executables go.
7624         case "$vendorbin" in
7625         '') dflt=$vendorprefix/bin ;;
7626         *)      dflt="$vendorbin" ;;
7627         esac
7628         fn=d~+
7629         rp='Pathname for the vendor-supplied executables directory?'
7630         . ./getfile
7631         vendorbin="$ans"
7632         vendorbinexp="$ansexp"
7633         ;;
7634 esac
7635 : Change installation prefix, if necessary.
7636 if $test X"$prefix" != X"$installprefix"; then
7637         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
7638 else
7639         installvendorbin="$vendorbinexp"
7640 fi
7641
7642 : see if qgcvt exists
7643 set qgcvt d_qgcvt
7644 eval $inlibc
7645
7646 echo " "
7647
7648 if $test X"$d_longdbl" = X"$define"; then
7649
7650 echo "Checking how to print long doubles..." >&4
7651
7652 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
7653         $cat >try.c <<'EOCP'
7654 #include <sys/types.h>
7655 #include <stdio.h>
7656 int main() {
7657   double d = 123.456;
7658   printf("%.3f\n", d);
7659 }
7660 EOCP
7661         set try
7662         if eval $compile; then
7663                 yyy=`./try$exe_ext`
7664                 case "$yyy" in
7665                 123.456)
7666                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
7667                         sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
7668                         echo "We will use %f."
7669                         ;;
7670                 esac
7671         fi
7672 fi
7673
7674 if $test X"$sPRIfldbl" = X; then
7675         $cat >try.c <<'EOCP'
7676 #include <sys/types.h>
7677 #include <stdio.h>
7678 int main() {
7679   long double d = 123.456;
7680   printf("%.3llf\n", d);
7681 }
7682 EOCP
7683         set try
7684         if eval $compile; then
7685                 yyy=`./try$exe_ext`
7686                 case "$yyy" in
7687                 123.456)
7688                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
7689                         sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
7690                         echo "We will use %llf."
7691                         ;;
7692                 esac
7693         fi
7694 fi
7695
7696 if $test X"$sPRIfldbl" = X; then
7697         $cat >try.c <<'EOCP'
7698 #include <sys/types.h>
7699 #include <stdio.h>
7700 int main() {
7701   long double d = 123.456;
7702   printf("%.3Lf\n", d);
7703 }
7704 EOCP
7705         set try
7706         if eval $compile; then
7707                 yyy=`./try$exe_ext`
7708                 case "$yyy" in
7709                 123.456)
7710                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
7711                         sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
7712                         echo "We will use %Lf."
7713                         ;;
7714                 esac
7715         fi
7716 fi
7717
7718 if $test X"$sPRIfldbl" = X; then
7719         $cat >try.c <<'EOCP'
7720 #include <sys/types.h>
7721 #include <stdio.h>
7722 int main() {
7723   long double d = 123.456;
7724   printf("%.3lf\n", d);
7725 }
7726 EOCP
7727         set try
7728         if eval $compile; then
7729                 yyy=`./try$exe_ext`
7730                 case "$yyy" in
7731                 123.456)
7732                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
7733                         sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
7734                         echo "We will use %lf."
7735                         ;;
7736                 esac
7737         fi
7738 fi
7739
7740 if $test X"$sPRIfldbl" = X; then
7741         echo "Cannot figure out how to print long doubles." >&4
7742 else
7743         sSCNfldbl=$sPRIfldbl    # expect consistency
7744 fi
7745
7746 $rm -f try try.*
7747
7748 fi # d_longdbl
7749
7750 case "$sPRIfldbl" in
7751 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
7752         d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; 
7753         d_SCNfldbl="$undef";
7754         ;;
7755 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
7756         d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; 
7757         d_SCNfldbl="$define";
7758         ;;
7759 esac
7760
7761 : Check how to convert floats to strings.
7762 echo " "
7763 echo "Checking for an efficient way to convert floats to strings."
7764 echo " " > try.c
7765 case "$uselongdouble" in
7766 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
7767 esac
7768 case "$d_longdbl" in
7769 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
7770 esac
7771 case "$d_PRIgldbl" in
7772 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
7773 esac
7774 $cat >>try.c <<EOP
7775 #ifdef TRY_gconvert
7776 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
7777 char *myname = "gconvert";
7778 #endif
7779 #ifdef TRY_gcvt
7780 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
7781 char *myname = "gcvt";
7782 #endif
7783 #ifdef TRY_qgcvt
7784 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
7785 char *myname = "qgcvt";
7786 #define DOUBLETYPE long double
7787 #endif
7788 #ifdef TRY_sprintf
7789 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
7790 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
7791 #else
7792 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
7793 #endif
7794 char *myname = "sprintf";
7795 #endif
7796
7797 #ifndef DOUBLETYPE
7798 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
7799 #define DOUBLETYPE long double
7800 #else
7801 #define DOUBLETYPE double
7802 #endif
7803 #endif
7804
7805 #include <stdio.h>
7806
7807 #define I_STDLIB $i_stdlib
7808 #ifdef I_STDLIB
7809 #include <stdlib.h>
7810 #endif
7811
7812 int
7813 checkit(expect, got)
7814 char *expect;
7815 char *got;
7816 {
7817     if (strcmp(expect, got)) {
7818                 printf("%s oddity:  Expected %s, got %s\n",
7819                         myname, expect, got);
7820                 exit(1);
7821         }
7822 }
7823
7824 int main()
7825
7826         char buf[64]; 
7827         buf[63] = '\0';
7828
7829         /* This must be 1st test on (which?) platform */
7830         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
7831         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
7832         checkit("0.1", buf);
7833
7834         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
7835         checkit("1", buf);
7836
7837         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
7838         checkit("1.1", buf);
7839
7840         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
7841         checkit("1.01", buf);
7842
7843         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
7844         checkit("1.001", buf);
7845
7846         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
7847         checkit("1.0001", buf);
7848
7849         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
7850         checkit("1.00001", buf);
7851
7852         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
7853         checkit("1.000001", buf);
7854
7855         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
7856         checkit("0", buf);
7857
7858         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
7859         checkit("-1", buf);
7860
7861         /* Some Linux gcvt's give 1.e+5 here. */
7862         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
7863         checkit("100000", buf);
7864         
7865         /* Some Linux gcvt's give -1.e+5 here. */
7866         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
7867         checkit("-100000", buf);
7868
7869         Gconvert((DOUBLETYPE)123.456, 8, 0, buf); 
7870         checkit("123.456", buf);
7871
7872         exit(0);
7873 }
7874 EOP
7875 case "$d_Gconvert" in
7876 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
7877 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
7878 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
7879 *) xxx_list='gconvert gcvt sprintf' ;;
7880 esac
7881
7882 case "$d_longdbl$uselongdouble$d_PRIgldbl" in
7883 "$define$define$define")
7884     # for long doubles prefer first qgcvt, then sprintf
7885     xxx_list="`echo $xxx_list|sed s/sprintf//`" 
7886     xxx_list="sprintf $xxx_list"
7887     case "$d_qgcvt" in
7888     "$define") xxx_list="qgcvt $xxx_list" ;;
7889     esac
7890     ;;
7891 esac
7892
7893 for xxx_convert in $xxx_list; do
7894         echo "Trying $xxx_convert..."
7895         $rm -f try try$_o
7896         set try -DTRY_$xxx_convert
7897         if eval $compile; then
7898                 echo "$xxx_convert() found." >&4
7899                 if ./try; then
7900                         echo "I'll use $xxx_convert to convert floats into a string." >&4
7901                         break;
7902                 else
7903                         echo "...But $xxx_convert didn't work as I expected."
7904                 fi
7905         else
7906                 echo "$xxx_convert NOT found." >&4
7907         fi
7908 done
7909         
7910 case "$xxx_convert" in
7911 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
7912 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
7913 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
7914 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
7915    "$define$define$define")
7916       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
7917    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
7918    esac
7919    ;;  
7920 esac
7921
7922 : see if _fwalk exists
7923 set fwalk d__fwalk
7924 eval $inlibc
7925
7926 : Initialize h_fcntl
7927 h_fcntl=false
7928
7929 : Initialize h_sysfile
7930 h_sysfile=false
7931
7932 : access call always available on UNIX
7933 set access d_access
7934 eval $inlibc
7935
7936 : locate the flags for 'access()'
7937 case "$d_access" in
7938 "$define")
7939         echo " "
7940         $cat >access.c <<'EOCP'
7941 #include <sys/types.h>
7942 #ifdef I_FCNTL
7943 #include <fcntl.h>
7944 #endif
7945 #ifdef I_SYS_FILE
7946 #include <sys/file.h>
7947 #endif
7948 #ifdef I_UNISTD
7949 #include <unistd.h>
7950 #endif
7951 int main() {
7952         exit(R_OK);
7953 }
7954 EOCP
7955         : check sys/file.h first, no particular reason here
7956         if $test `./findhdr sys/file.h` && \
7957                 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
7958                 h_sysfile=true;
7959                 echo "<sys/file.h> defines the *_OK access constants." >&4
7960         elif $test `./findhdr fcntl.h` && \
7961                 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
7962                 h_fcntl=true;
7963                 echo "<fcntl.h> defines the *_OK access constants." >&4
7964         elif $test `./findhdr unistd.h` && \
7965                 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
7966                 echo "<unistd.h> defines the *_OK access constants." >&4
7967         else
7968                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
7969         fi
7970         ;;
7971 esac
7972 $rm -f access*
7973
7974 : see if accessx exists
7975 set accessx d_accessx
7976 eval $inlibc
7977
7978 : see if alarm exists
7979 set alarm d_alarm
7980 eval $inlibc
7981
7982 : see if atolf exists
7983 set atolf d_atolf
7984 eval $inlibc
7985
7986 : see if atoll exists
7987 set atoll d_atoll
7988 eval $inlibc
7989
7990 : Look for GNU-cc style attribute checking
7991 echo " "
7992 echo "Checking whether your compiler can handle __attribute__ ..." >&4
7993 $cat >attrib.c <<'EOCP'
7994 #include <stdio.h>
7995 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
7996 EOCP
7997 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
7998         if $contains 'warning' attrib.out >/dev/null 2>&1; then
7999                 echo "Your C compiler doesn't fully support __attribute__."
8000                 val="$undef"
8001         else
8002                 echo "Your C compiler supports __attribute__."
8003                 val="$define"
8004         fi
8005 else
8006         echo "Your C compiler doesn't seem to understand __attribute__ at all."
8007         val="$undef"
8008 fi
8009 set d_attribut
8010 eval $setvar
8011 $rm -f attrib*
8012
8013 : see if bcmp exists
8014 set bcmp d_bcmp
8015 eval $inlibc
8016
8017 : see if bcopy exists
8018 set bcopy d_bcopy
8019 eval $inlibc
8020
8021 : see if this is a unistd.h system
8022 set unistd.h i_unistd
8023 eval $inhdr
8024
8025 : see if getpgrp exists
8026 set getpgrp d_getpgrp
8027 eval $inlibc
8028
8029 case "$d_getpgrp" in
8030 "$define")
8031         echo " "
8032         echo "Checking to see which flavor of getpgrp is in use..."
8033         $cat >set.c <<EOP
8034 #$i_unistd I_UNISTD
8035 #include <sys/types.h>
8036 #ifdef I_UNISTD
8037 #  include <unistd.h>
8038 #endif
8039 int main()
8040 {
8041         if (getuid() == 0) {
8042                 printf("(I see you are running Configure as super-user...)\n");
8043                 setuid(1);
8044         }
8045 #ifdef TRY_BSD_PGRP
8046         if (getpgrp(1) == 0)
8047                 exit(0);
8048 #else
8049         if (getpgrp() > 0)
8050                 exit(0);
8051 #endif
8052         exit(1);
8053 }
8054 EOP
8055         if $cc -o set -DTRY_BSD_PGRP $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
8056                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
8057                 val="$define"
8058         elif $cc -o set $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
8059                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
8060                 val="$undef"
8061         else
8062                 echo "I can't seem to compile and run the test program."
8063                 if ./usg; then
8064                         xxx="a USG one, i.e. you use getpgrp()."
8065                 else
8066                         # SVR4 systems can appear rather BSD-ish.
8067                         case "$i_unistd" in
8068                         $undef)
8069                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
8070                                 val="$define"
8071                                 ;;
8072                         $define)
8073                                 xxx="probably a USG one, i.e. you use getpgrp()."
8074                                 val="$undef"
8075                                 ;;
8076                         esac
8077                 fi
8078                 echo "Assuming your getpgrp is $xxx" >&4
8079         fi
8080         ;;
8081 *) val="$undef";;
8082 esac
8083 set d_bsdgetpgrp
8084 eval $setvar
8085 $rm -f set set.c
8086
8087 : see if setpgrp exists
8088 set setpgrp d_setpgrp
8089 eval $inlibc
8090
8091 case "$d_setpgrp" in
8092 "$define")
8093         echo " "
8094         echo "Checking to see which flavor of setpgrp is in use..."
8095         $cat >set.c <<EOP
8096 #$i_unistd I_UNISTD
8097 #include <sys/types.h>
8098 #ifdef I_UNISTD
8099 #  include <unistd.h>
8100 #endif
8101 int main()
8102 {
8103         if (getuid() == 0) {
8104                 printf("(I see you are running Configure as super-user...)\n");
8105                 setuid(1);
8106         }
8107 #ifdef TRY_BSD_PGRP
8108         if (-1 == setpgrp(1, 1))
8109                 exit(0);
8110 #else
8111         if (setpgrp() != -1)
8112                 exit(0);
8113 #endif
8114         exit(1);
8115 }
8116 EOP
8117         if $cc -o set -DTRY_BSD_PGRP $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
8118                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
8119                 val="$define"
8120         elif $cc -o set $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
8121                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
8122                 val="$undef"
8123         else
8124                 echo "(I can't seem to compile and run the test program.)"
8125                 if ./usg; then
8126                         xxx="a USG one, i.e. you use setpgrp()."
8127                 else
8128                         # SVR4 systems can appear rather BSD-ish.
8129                         case "$i_unistd" in
8130                         $undef)
8131                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
8132                                 val="$define"
8133                                 ;;
8134                         $define)
8135                                 xxx="probably a USG one, i.e. you use setpgrp()."
8136                                 val="$undef"
8137                                 ;;
8138                         esac
8139                 fi
8140                 echo "Assuming your setpgrp is $xxx" >&4
8141         fi
8142         ;;
8143 *) val="$undef";;
8144 esac
8145 set d_bsdsetpgrp
8146 eval $setvar
8147 $rm -f set set.c
8148 : see if bzero exists
8149 set bzero d_bzero
8150 eval $inlibc
8151
8152 : see if signal is declared as pointer to function returning int or void
8153 echo " "
8154 xxx=`./findhdr signal.h`
8155 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
8156 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
8157         echo "You have int (*signal())() instead of void." >&4
8158         val="$undef"
8159 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
8160         echo "You have void (*signal())()." >&4
8161         val="$define"
8162 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
8163         echo "You have int (*signal())() instead of void." >&4
8164         val="$undef"
8165 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
8166         echo "You have void (*signal())()." >&4
8167         val="$define"
8168 else
8169         case "$d_voidsig" in
8170         '')
8171         echo "I can't determine whether signal handler returns void or int..." >&4
8172                 dflt=void
8173                 rp="What type does your signal handler return?"
8174                 . ./myread
8175                 case "$ans" in
8176                 v*) val="$define";;
8177                 *) val="$undef";;
8178                 esac;;
8179         "$define")
8180                 echo "As you already told me, signal handler returns void." >&4
8181                 val="$define"
8182                 ;;
8183         *)      echo "As you already told me, signal handler returns int." >&4
8184                 val="$undef"
8185                 ;;
8186         esac
8187 fi
8188 set d_voidsig
8189 eval $setvar
8190 case "$d_voidsig" in
8191 "$define") signal_t="void";;
8192 *) signal_t="int";;
8193 esac
8194 $rm -f $$.tmp
8195
8196 : check for ability to cast large floats to 32-bit ints.
8197 echo " "
8198 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
8199 if $test "$intsize" -ge 4; then
8200         xxx=int
8201 else
8202         xxx=long
8203 fi
8204 $cat >try.c <<EOCP
8205 #include <stdio.h>
8206 #include <sys/types.h>
8207 #include <signal.h>
8208 $signal_t blech(s) int s; { exit(3); }
8209 int main()
8210 {
8211         $xxx i32;
8212         double f, g;
8213         int result = 0;
8214         char str[16];
8215         signal(SIGFPE, blech);
8216
8217         /* Don't let compiler optimize the test away.  Store the number 
8218            in a writable string for gcc to pass to sscanf under HP/UX.
8219         */
8220         sprintf(str, "2147483647");
8221         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
8222         g = 10 * f;
8223         i32  = ($xxx) g;
8224
8225         /* x86 processors will probably give 0x8000 0000, which is a
8226        sign change.  We don't want that.  We want to mimic SPARC
8227            behavior here, which is to preserve the sign and give
8228            back 0x7fff ffff.
8229         */
8230         if (i32 != ($xxx) f)
8231                 result |= 1;
8232         exit(result);
8233 }
8234 EOCP
8235 set try
8236 if eval $compile_ok; then
8237         ./try
8238         yyy=$?
8239 else
8240         echo "(I can't seem to compile the test program--assuming it can't)"
8241         yyy=1
8242 fi
8243 case "$yyy" in
8244 0)      val="$define"
8245         echo "Yup, it can."
8246         ;;
8247 *)      val="$undef"
8248         echo "Nope, it can't."
8249         ;;
8250 esac
8251 set d_casti32
8252 eval $setvar
8253 $rm -f try try.*
8254
8255 : check for ability to cast negative floats to unsigned
8256 echo " "
8257 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
8258 $cat >try.c <<EOCP
8259 #include <stdio.h>
8260 #include <sys/types.h>
8261 #include <signal.h>
8262 $signal_t blech(s) int s; { exit(7); }
8263 $signal_t blech_in_list(s) int s; { exit(4); }
8264 unsigned long dummy_long(p) unsigned long p; { return p; }
8265 unsigned int dummy_int(p) unsigned int p; { return p; }
8266 unsigned short dummy_short(p) unsigned short p; { return p; }
8267 int main()
8268 {
8269         double f;
8270         unsigned long along;
8271         unsigned int aint;
8272         unsigned short ashort;
8273         int result = 0;
8274         char str[16];
8275         
8276         /* Frustrate gcc-2.7.2's optimizer which failed this test with
8277            a direct f = -123. assignment.  gcc-2.8.0 reportedly
8278            optimized the whole file away
8279         */
8280         /* Store the number in a writable string for gcc to pass to 
8281            sscanf under HP/UX.
8282         */
8283         sprintf(str, "-123");
8284         sscanf(str, "%lf", &f);  /* f = -123.; */
8285
8286         signal(SIGFPE, blech);
8287         along = (unsigned long)f;
8288         aint = (unsigned int)f;
8289         ashort = (unsigned short)f;
8290         if (along != (unsigned long)-123)
8291                 result |= 1;
8292         if (aint != (unsigned int)-123)
8293                 result |= 1;
8294         if (ashort != (unsigned short)-123)
8295                 result |= 1;
8296         sprintf(str, "1073741824.");
8297         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
8298         f = f + f;
8299         along = 0;
8300         along = (unsigned long)f;
8301         if (along != 0x80000000)
8302                 result |= 2;
8303         f -= 1.;
8304         along = 0;
8305         along = (unsigned long)f;
8306         if (along != 0x7fffffff)
8307                 result |= 1;
8308         f += 2.;
8309         along = 0;
8310         along = (unsigned long)f;
8311         if (along != 0x80000001)
8312                 result |= 2;
8313         if (result)
8314                 exit(result);
8315         signal(SIGFPE, blech_in_list);
8316         sprintf(str, "123.");
8317         sscanf(str, "%lf", &f);  /* f = 123.; */
8318         along = dummy_long((unsigned long)f);
8319         aint = dummy_int((unsigned int)f);
8320         ashort = dummy_short((unsigned short)f);
8321         if (along != (unsigned long)123)
8322                 result |= 4;
8323         if (aint != (unsigned int)123)
8324                 result |= 4;
8325         if (ashort != (unsigned short)123)
8326                 result |= 4;
8327         exit(result);
8328
8329 }
8330 EOCP
8331 set try
8332 if eval $compile_ok; then
8333         ./try
8334         castflags=$?
8335 else
8336         echo "(I can't seem to compile the test program--assuming it can't)"
8337         castflags=7
8338 fi
8339 case "$castflags" in
8340 0)      val="$define"
8341         echo "Yup, it can."
8342         ;;
8343 *)      val="$undef"
8344         echo "Nope, it can't."
8345         ;;
8346 esac
8347 set d_castneg
8348 eval $setvar
8349 $rm -f try.*
8350
8351 : see if vprintf exists
8352 echo " "
8353 if set vprintf val -f d_vprintf; eval $csym; $val; then
8354         echo 'vprintf() found.' >&4
8355         val="$define"
8356         $cat >vprintf.c <<'EOF'
8357 #include <varargs.h>
8358
8359 int main() { xxx("foo"); }
8360
8361 xxx(va_alist)
8362 va_dcl
8363 {
8364         va_list args;
8365         char buf[10];
8366
8367         va_start(args);
8368         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
8369 }
8370 EOF
8371         set vprintf
8372         if eval $compile && ./vprintf; then
8373                 echo "Your vsprintf() returns (int)." >&4
8374                 val2="$undef"
8375         else
8376                 echo "Your vsprintf() returns (char*)." >&4
8377                 val2="$define"
8378         fi
8379 else
8380         echo 'vprintf() NOT found.' >&4
8381                 val="$undef"
8382                 val2="$undef"
8383 fi
8384 set d_vprintf
8385 eval $setvar
8386 val=$val2
8387 set d_charvspr
8388 eval $setvar
8389
8390 : see if chown exists
8391 set chown d_chown
8392 eval $inlibc
8393
8394 : see if chroot exists
8395 set chroot d_chroot
8396 eval $inlibc
8397
8398 : see if chsize exists
8399 set chsize d_chsize
8400 eval $inlibc
8401
8402 : check for const keyword
8403 echo " "
8404 echo 'Checking to see if your C compiler knows about "const"...' >&4
8405 $cat >const.c <<'EOCP'
8406 typedef struct spug { int drokk; } spug;
8407 int main()
8408 {
8409         const char *foo;
8410         const spug y;
8411 }
8412 EOCP
8413 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
8414         val="$define"
8415         echo "Yup, it does."
8416 else
8417         val="$undef"
8418         echo "Nope, it doesn't."
8419 fi
8420 set d_const
8421 eval $setvar
8422
8423 : see if crypt exists
8424 echo " "
8425 if set crypt val -f d_crypt; eval $csym; $val; then
8426         echo 'crypt() found.' >&4
8427         val="$define"
8428         cryptlib=''
8429 else
8430         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
8431         if $test -z "$cryptlib"; then
8432                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
8433         else
8434                 cryptlib=-lcrypt
8435         fi
8436         if $test -z "$cryptlib"; then
8437                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
8438         else
8439                 cryptlib=-lcrypt
8440         fi
8441         if $test -z "$cryptlib"; then
8442                 cryptlib=`./loc libcrypt$_a "" $libpth`
8443         else
8444                 cryptlib=-lcrypt
8445         fi
8446         if $test -z "$cryptlib"; then
8447                 echo 'crypt() NOT found.' >&4
8448                 val="$undef"
8449         else
8450                 val="$define"
8451         fi
8452 fi
8453 set d_crypt
8454 eval $setvar
8455
8456 : get csh whereabouts
8457 case "$csh" in
8458 'csh') val="$undef" ;;
8459 *) val="$define" ;;
8460 esac
8461 set d_csh
8462 eval $setvar
8463 : Respect a hint or command line value for full_csh.
8464 case "$full_csh" in
8465 '') full_csh=$csh ;;
8466 esac
8467
8468 : see if cuserid exists
8469 set cuserid d_cuserid
8470 eval $inlibc
8471
8472 : see if this is a limits.h system
8473 set limits.h i_limits
8474 eval $inhdr
8475
8476 : see if this is a float.h system
8477 set float.h i_float
8478 eval $inhdr
8479
8480 : See if number of significant digits in a double precision number is known
8481 echo " "
8482 $cat >dbl_dig.c <<EOM
8483 #$i_limits I_LIMITS
8484 #$i_float I_FLOAT
8485 #ifdef I_LIMITS
8486 #include <limits.h>
8487 #endif
8488 #ifdef I_FLOAT
8489 #include <float.h>
8490 #endif
8491 #ifdef DBL_DIG
8492 printf("Contains DBL_DIG");
8493 #endif
8494 EOM
8495 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
8496 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
8497         echo "DBL_DIG found." >&4
8498         val="$define"
8499 else
8500         echo "DBL_DIG NOT found." >&4
8501         val="$undef"
8502 fi
8503 $rm -f dbl_dig.?
8504 set d_dbl_dig
8505 eval $setvar
8506
8507 : see if difftime exists
8508 set difftime d_difftime
8509 eval $inlibc
8510
8511 : see if this is a dirent system
8512 echo " "
8513 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
8514         val="$define"
8515         echo "<dirent.h> found." >&4
8516 else
8517         val="$undef"
8518         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
8519                 echo "<sys/dir.h> found." >&4
8520                 echo " "
8521         else
8522                 xinc=`./findhdr sys/ndir.h`
8523         fi
8524         echo "<dirent.h> NOT found." >&4
8525 fi
8526 set i_dirent
8527 eval $setvar
8528
8529 : Look for type of directory structure.
8530 echo " "
8531 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8532
8533 case "$direntrytype" in
8534 ''|' ')
8535         case "$i_dirent" in
8536         $define) guess1='struct dirent' ;;
8537         *) guess1='struct direct'  ;;
8538         esac
8539         ;;
8540 *)      guess1="$direntrytype"
8541         ;;
8542 esac
8543
8544 case "$guess1" in
8545 'struct dirent') guess2='struct direct' ;;
8546 *) guess2='struct dirent' ;;
8547 esac
8548                 
8549 if $contains "$guess1" try.c >/dev/null 2>&1; then
8550         direntrytype="$guess1"
8551         echo "Your directory entries are $direntrytype." >&4
8552 elif $contains "$guess2" try.c >/dev/null 2>&1; then
8553         direntrytype="$guess2"
8554         echo "Your directory entries seem to be $direntrytype." >&4
8555 else
8556         echo "I don't recognize your system's directory entries." >&4
8557         rp="What type is used for directory entries on this system?"
8558         dflt="$guess1"
8559         . ./myread
8560         direntrytype="$ans"
8561 fi
8562 $rm -f try.c
8563
8564
8565 : see if the directory entry stores field length
8566 echo " "
8567 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8568 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
8569         echo "Good, your directory entry keeps length information in d_namlen." >&4
8570         val="$define"
8571 else
8572         echo "Your directory entry does not know about the d_namlen field." >&4
8573         val="$undef"
8574 fi
8575 set d_dirnamlen
8576 eval $setvar
8577 $rm -f try.c
8578
8579 : see if dlerror exists
8580 xxx_runnm="$runnm"
8581 runnm=false
8582 set dlerror d_dlerror
8583 eval $inlibc
8584 runnm="$xxx_runnm"
8585
8586 : see if dlfcn is available
8587 set dlfcn.h i_dlfcn
8588 eval $inhdr
8589
8590 case "$usedl" in
8591 $define|y|true)
8592         $cat << EOM
8593
8594 On a few systems, the dynamically loaded modules that perl generates and uses
8595 will need a different extension than shared libs. The default will probably
8596 be appropriate.
8597
8598 EOM
8599         case "$dlext" in
8600         '')     dflt="$so" ;;
8601         *)      dflt="$dlext" ;;
8602         esac
8603         rp='What is the extension of dynamically loaded modules'
8604         . ./myread
8605         dlext="$ans"
8606         ;;
8607 *)
8608         dlext="none"
8609         ;;
8610 esac
8611
8612 : Check if dlsym need a leading underscore
8613 echo " "
8614 val="$undef"
8615
8616 case "$dlsrc" in
8617 dl_dlopen.xs)
8618         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
8619         $cat >dyna.c <<'EOM'
8620 fred () { }
8621 EOM
8622
8623 $cat >fred.c<<EOM
8624
8625 #include <stdio.h>
8626 #$i_dlfcn I_DLFCN
8627 #ifdef I_DLFCN
8628 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
8629 #else
8630 #include <sys/types.h>
8631 #include <nlist.h>
8632 #include <link.h>
8633 #endif
8634
8635 extern int fred() ;
8636
8637 int main()
8638 {
8639     void * handle ;
8640     void * symbol ;
8641 #ifndef RTLD_LAZY
8642     int mode = 1 ;
8643 #else
8644     int mode = RTLD_LAZY ;
8645 #endif
8646     handle = dlopen("./dyna.$dlext", mode) ;
8647     if (handle == NULL) {
8648         printf ("1\n") ;
8649         fflush (stdout) ;
8650         exit(0);
8651     }
8652     symbol = dlsym(handle, "fred") ;
8653     if (symbol == NULL) {
8654         /* try putting a leading underscore */
8655         symbol = dlsym(handle, "_fred") ;
8656         if (symbol == NULL) {
8657             printf ("2\n") ;
8658             fflush (stdout) ;
8659             exit(0);
8660         }
8661         printf ("3\n") ;
8662     }
8663     else
8664         printf ("4\n") ;
8665     fflush (stdout) ;
8666     exit(0);
8667 }
8668 EOM
8669         : Call the object file tmp-dyna.o in case dlext=o.
8670         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
8671                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
8672                 $ld -o dyna.$dlext $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && 
8673                 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
8674                 xxx=`./fred`
8675                 case $xxx in
8676                 1)      echo "Test program failed using dlopen." >&4
8677                         echo "Perhaps you should not use dynamic loading." >&4;;
8678                 2)      echo "Test program failed using dlsym." >&4
8679                         echo "Perhaps you should not use dynamic loading." >&4;;
8680                 3)      echo "dlsym needs a leading underscore" >&4
8681                         val="$define" ;;
8682                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
8683                 esac
8684         else
8685                 echo "I can't compile and run the test program." >&4
8686                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
8687         fi
8688         ;;
8689 esac
8690                 
8691 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
8692
8693 set d_dlsymun
8694 eval $setvar
8695
8696 hasproto='varname=$1; func=$2; shift; shift;
8697 while $test $# -ge 2; do
8698         case "$1" in
8699         $define) echo "#include <$2>";;
8700         esac ;
8701     shift 2;
8702 done > try.c;
8703 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
8704 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
8705         echo "$func() prototype found.";
8706         val="$define";
8707 else
8708         echo "$func() prototype NOT found.";
8709         val="$undef";
8710 fi;
8711 set $varname;
8712 eval $setvar;
8713 $rm -f try.c tryout.c'
8714
8715 : see if prototype for drand48 is available
8716 echo " "
8717 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
8718 eval $hasproto
8719
8720 : see if dup2 exists
8721 set dup2 d_dup2
8722 eval $inlibc
8723
8724 : see if eaccess exists
8725 set eaccess d_eaccess
8726 eval $inlibc
8727
8728 : see if endgrent exists
8729 set endgrent d_endgrent
8730 eval $inlibc
8731
8732 : see if endhostent exists
8733 set endhostent d_endhent
8734 eval $inlibc
8735
8736 : see if endnetent exists
8737 set endnetent d_endnent
8738 eval $inlibc
8739
8740 : see if endprotoent exists
8741 set endprotoent d_endpent
8742 eval $inlibc
8743
8744 : see if endpwent exists
8745 set endpwent d_endpwent
8746 eval $inlibc
8747
8748 : see if endservent exists
8749 set endservent d_endsent
8750 eval $inlibc
8751
8752 : Locate the flags for 'open()'
8753 echo " "
8754 $cat >open3.c <<'EOCP'
8755 #include <sys/types.h>
8756 #ifdef I_FCNTL
8757 #include <fcntl.h>
8758 #endif
8759 #ifdef I_SYS_FILE
8760 #include <sys/file.h>
8761 #endif
8762 int main() {
8763         if(O_RDONLY);
8764 #ifdef O_TRUNC
8765         exit(0);
8766 #else
8767         exit(1);
8768 #endif
8769 }
8770 EOCP
8771 : check sys/file.h first to get FREAD on Sun
8772 if $test `./findhdr sys/file.h` && \
8773                 set open3 -DI_SYS_FILE && eval $compile; then
8774         h_sysfile=true;
8775         echo "<sys/file.h> defines the O_* constants..." >&4
8776         if ./open3; then
8777                 echo "and you have the 3 argument form of open()." >&4
8778                 val="$define"
8779         else
8780                 echo "but not the 3 argument form of open().  Oh, well." >&4
8781                 val="$undef"
8782         fi
8783 elif $test `./findhdr fcntl.h` && \
8784                 set open3 -DI_FCNTL && eval $compile; then
8785         h_fcntl=true;
8786         echo "<fcntl.h> defines the O_* constants..." >&4
8787         if ./open3; then
8788                 echo "and you have the 3 argument form of open()." >&4
8789                 val="$define"
8790         else
8791                 echo "but not the 3 argument form of open().  Oh, well." >&4
8792                 val="$undef"
8793         fi
8794 else
8795         val="$undef"
8796         echo "I can't find the O_* constant definitions!  You got problems." >&4
8797 fi
8798 set d_open3
8799 eval $setvar
8800 $rm -f open3*
8801
8802 : see which of string.h or strings.h is needed
8803 echo " "
8804 strings=`./findhdr string.h`
8805 if $test "$strings" && $test -r "$strings"; then
8806         echo "Using <string.h> instead of <strings.h>." >&4
8807         val="$define"
8808 else
8809         val="$undef"
8810         strings=`./findhdr strings.h`
8811         if $test "$strings" && $test -r "$strings"; then
8812                 echo "Using <strings.h> instead of <string.h>." >&4
8813         else
8814                 echo "No string header found -- You'll surely have problems." >&4
8815         fi
8816 fi
8817 set i_string
8818 eval $setvar
8819 case "$i_string" in
8820 "$undef") strings=`./findhdr strings.h`;;
8821 *)        strings=`./findhdr string.h`;;
8822 esac
8823
8824 : check for non-blocking I/O stuff
8825 case "$h_sysfile" in
8826 true) echo "#include <sys/file.h>" > head.c;;
8827 *)
8828        case "$h_fcntl" in
8829        true) echo "#include <fcntl.h>" > head.c;;
8830        *) echo "#include <sys/fcntl.h>" > head.c;;
8831        esac
8832        ;;
8833 esac
8834 echo " "
8835 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
8836 case "$o_nonblock" in
8837 '')
8838         $cat head.c > try.c
8839         $cat >>try.c <<'EOCP'
8840 #include <stdio.h>
8841 int main() {
8842 #ifdef O_NONBLOCK
8843         printf("O_NONBLOCK\n");
8844         exit(0);
8845 #endif
8846 #ifdef O_NDELAY
8847         printf("O_NDELAY\n");
8848         exit(0);
8849 #endif
8850 #ifdef FNDELAY
8851         printf("FNDELAY\n");
8852         exit(0);
8853 #endif
8854         exit(0);
8855 }
8856 EOCP
8857         set try
8858         if eval $compile_ok; then
8859                 o_nonblock=`./try`
8860                 case "$o_nonblock" in
8861                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
8862                 *) echo "Seems like we can use $o_nonblock.";;
8863                 esac
8864         else
8865                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
8866         fi
8867         ;;
8868 *) echo "Using $hint value $o_nonblock.";;
8869 esac
8870 $rm -f try try.* .out core
8871
8872 echo " "
8873 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
8874 case "$eagain" in
8875 '')
8876         $cat head.c > try.c
8877         $cat >>try.c <<EOCP
8878 #include <errno.h>
8879 #include <sys/types.h>
8880 #include <signal.h>
8881 #include <stdio.h> 
8882 #define MY_O_NONBLOCK $o_nonblock
8883 #ifndef errno  /* XXX need better Configure test */
8884 extern int errno;
8885 #endif
8886 #$i_unistd I_UNISTD
8887 #ifdef I_UNISTD
8888 #include <unistd.h>
8889 #endif
8890 #$i_string I_STRING
8891 #ifdef I_STRING
8892 #include <string.h>
8893 #else
8894 #include <strings.h>
8895 #endif
8896 $signal_t blech(x) int x; { exit(3); }
8897 EOCP
8898         $cat >> try.c <<'EOCP'
8899 int main()
8900 {
8901         int pd[2];
8902         int pu[2];
8903         char buf[1];
8904         char string[100];
8905
8906         pipe(pd);       /* Down: child -> parent */
8907         pipe(pu);       /* Up: parent -> child */
8908         if (0 != fork()) {
8909                 int ret;
8910                 close(pd[1]);   /* Parent reads from pd[0] */
8911                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
8912 #ifdef F_SETFL
8913                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
8914                         exit(1);
8915 #else
8916                 exit(4);
8917 #endif
8918                 signal(SIGALRM, blech);
8919                 alarm(5);
8920                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
8921                         exit(2);
8922                 sprintf(string, "%d\n", ret);
8923                 write(2, string, strlen(string));
8924                 alarm(0);
8925 #ifdef EAGAIN
8926                 if (errno == EAGAIN) {
8927                         printf("EAGAIN\n");
8928                         goto ok;
8929                 }
8930 #endif
8931 #ifdef EWOULDBLOCK
8932                 if (errno == EWOULDBLOCK)
8933                         printf("EWOULDBLOCK\n");
8934 #endif
8935         ok:
8936                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
8937                 sleep(2);                               /* Give it time to close our pipe */
8938                 alarm(5);
8939                 ret = read(pd[0], buf, 1);      /* Should read EOF */
8940                 alarm(0);
8941                 sprintf(string, "%d\n", ret);
8942                 write(3, string, strlen(string));
8943                 exit(0);
8944         }
8945
8946         close(pd[0]);                   /* We write to pd[1] */
8947         close(pu[1]);                   /* We read from pu[0] */
8948         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
8949         close(pd[1]);                   /* Pipe pd is now fully closed! */
8950         exit(0);                                /* Bye bye, thank you for playing! */
8951 }
8952 EOCP
8953         set try
8954         if eval $compile_ok; then
8955                 echo "$startsh" >mtry
8956                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
8957                 chmod +x mtry
8958                 ./mtry >/dev/null 2>&1
8959                 case $? in
8960                 0) eagain=`$cat try.out`;;
8961                 1) echo "Could not perform non-blocking setting!";;
8962                 2) echo "I did a successful read() for something that was not there!";;
8963                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
8964                 4) echo "Could not find F_SETFL!";;
8965                 *) echo "Something terribly wrong happened during testing.";;
8966                 esac
8967                 rd_nodata=`$cat try.ret`
8968                 echo "A read() system call with no data present returns $rd_nodata."
8969                 case "$rd_nodata" in
8970                 0|-1) ;;
8971                 *)
8972                         echo "(That's peculiar, fixing that to be -1.)"
8973                         rd_nodata=-1
8974                         ;;
8975                 esac
8976                 case "$eagain" in
8977                 '')
8978                         echo "Forcing errno EAGAIN on read() with no data available."
8979                         eagain=EAGAIN
8980                         ;;
8981                 *)
8982                         echo "Your read() sets errno to $eagain when no data is available."
8983                         ;;
8984                 esac
8985                 status=`$cat try.err`
8986                 case "$status" in
8987                 0) echo "And it correctly returns 0 to signal EOF.";;
8988                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
8989                 *) echo "However, your read() returns '$status' on EOF??";;
8990                 esac
8991                 val="$define"
8992                 if test "$status" = "$rd_nodata"; then
8993                         echo "WARNING: you can't distinguish between EOF and no data!"
8994                         val="$undef"
8995                 fi
8996         else
8997                 echo "I can't compile the test program--assuming errno EAGAIN will do."
8998                 eagain=EAGAIN
8999         fi
9000         set d_eofnblk
9001         eval $setvar
9002         ;;
9003 *)
9004         echo "Using $hint value $eagain."
9005         echo "Your read() returns $rd_nodata when no data is present."
9006         case "$d_eofnblk" in
9007         "$define") echo "And you can see EOF because read() returns 0.";;
9008         "$undef") echo "But you can't see EOF status from read() returned value.";;
9009         *)
9010                 echo "(Assuming you can't see EOF status from read anyway.)"
9011                 d_eofnblk=$undef
9012                 ;;
9013         esac
9014         ;;
9015 esac
9016 $rm -f try try.* .out core head.c mtry
9017
9018 : see if fchmod exists
9019 set fchmod d_fchmod
9020 eval $inlibc
9021
9022 : see if fchown exists
9023 set fchown d_fchown
9024 eval $inlibc
9025
9026 : see if this is an fcntl system
9027 set fcntl d_fcntl
9028 eval $inlibc
9029
9030 echo " "
9031 : See if fcntl-based locking works.
9032 $cat >try.c <<'EOCP'
9033 #include <stdlib.h>
9034 #include <unistd.h>
9035 #include <fcntl.h>
9036 int main() {
9037 #if defined(F_SETLK) && defined(F_SETLKW)
9038      struct flock flock;
9039      int retval, fd;
9040      fd = open("try.c", O_RDONLY);
9041      flock.l_type = F_RDLCK;
9042      flock.l_whence = SEEK_SET;
9043      flock.l_start = flock.l_len = 0;
9044      retval = fcntl(fd, F_SETLK, &flock);
9045      close(fd);
9046      (retval < 0 ? exit(2) : exit(0));
9047 #else
9048      exit(2);
9049 #endif
9050 }
9051 EOCP
9052 echo "Checking if fcntl-based file locking works... "
9053 case "$d_fcntl" in
9054 "$define")
9055         set try
9056         if eval $compile_ok; then
9057                 if ./try; then
9058                         echo "Yes, it seems to work."
9059                         val="$define"
9060                 else
9061                         echo "Nope, it didn't work."
9062                         val="$undef"
9063                 fi
9064         else
9065                 echo "I'm unable to compile the test program, so I'll assume not."
9066                 val="$undef"
9067         fi
9068         ;;
9069 *) val="$undef";
9070         echo "Nope, since you don't even have fcntl()."
9071         ;;
9072 esac
9073 set d_fcntl_can_lock
9074 eval $setvar
9075 $rm -f try*
9076
9077
9078 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
9079 while $test $# -ge 2; do
9080         case "$1" in
9081         $define) echo "#include <$2>";;
9082         esac ;
9083     shift 2;
9084 done > try.c;
9085 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
9086 set try;
9087 if eval $compile; then
9088         val="$define";
9089 else
9090         val="$undef";
9091 fi;
9092 set $varname;
9093 eval $setvar;
9094 $rm -f try.c try.o'
9095
9096 socketlib=''
9097 sockethdr=''
9098 : see whether socket exists
9099 echo " "
9100 $echo $n "Hmm... $c" >&4
9101 if set socket val -f d_socket; eval $csym; $val; then
9102         echo "Looks like you have Berkeley networking support." >&4
9103         d_socket="$define"
9104         if set setsockopt val -f; eval $csym; $val; then
9105                 d_oldsock="$undef"
9106         else
9107                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
9108                 d_oldsock="$define"
9109         fi
9110 else
9111         if $contains socklib libc.list >/dev/null 2>&1; then
9112                 echo "Looks like you have Berkeley networking support." >&4
9113                 d_socket="$define"
9114                 : we will have to assume that it supports the 4.2 BSD interface
9115                 d_oldsock="$undef"
9116         else
9117                 echo "You don't have Berkeley networking in libc$_a..." >&4
9118                 if test "X$d_socket" = "X$define"; then
9119                    echo "...but you seem to believe that you have sockets." >&4
9120                 else
9121                         for net in net socket
9122                         do
9123                                 if test -f /usr/lib/lib$net$_a; then
9124                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
9125                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
9126                                         if $contains socket libc.list >/dev/null 2>&1; then
9127                                                 d_socket="$define"
9128                                                 socketlib="-l$net"
9129                                                 case "$net" in
9130                                                 net)
9131                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
9132                                                         sockethdr="-I/usr/netinclude"
9133                                                         ;;
9134                                                 esac
9135                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
9136                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
9137                                                         d_oldsock="$undef"
9138                                                 else
9139                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
9140                                                         d_oldsock="$define"
9141                                                 fi
9142                                                 break
9143                                         fi
9144                                 fi
9145                         done
9146                         if test "X$d_socket" != "X$define"; then
9147                            echo "or anywhere else I see." >&4
9148                            d_socket="$undef"
9149                            d_oldsock="$undef"
9150                         fi
9151                 fi
9152         fi
9153 fi
9154
9155 : see if socketpair exists
9156 set socketpair d_sockpair
9157 eval $inlibc
9158
9159
9160 echo " "
9161 echo "Checking the availability of certain socket constants..." >& 4
9162 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
9163         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
9164         $cat >try.c <<EOF
9165 #include <sys/types.h>
9166 #include <sys/socket.h>
9167 int main() {
9168     int i = $ENUM;
9169 }
9170 EOF
9171         val="$undef"
9172         set try; if eval $compile; then
9173                 val="$define"
9174         fi
9175         set d_${enum}; eval $setvar
9176         $rm -f try.c try
9177 done
9178
9179 : see if sys/select.h has to be included
9180 set sys/select.h i_sysselct
9181 eval $inhdr
9182
9183 : see if we should include time.h, sys/time.h, or both
9184 echo " "
9185 if test "X$timeincl" = X; then
9186         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
9187         $echo $n "I'm now running the test program...$c"
9188         $cat >try.c <<'EOCP'
9189 #include <sys/types.h>
9190 #ifdef I_TIME
9191 #include <time.h>
9192 #endif
9193 #ifdef I_SYSTIME
9194 #ifdef SYSTIMEKERNEL
9195 #define KERNEL
9196 #endif
9197 #include <sys/time.h>
9198 #endif
9199 #ifdef I_SYSSELECT
9200 #include <sys/select.h>
9201 #endif
9202 int main()
9203 {
9204         struct tm foo;
9205 #ifdef S_TIMEVAL
9206         struct timeval bar;
9207 #endif
9208 #ifdef S_TIMEZONE
9209         struct timezone tzp;
9210 #endif
9211         if (foo.tm_sec == foo.tm_sec)
9212                 exit(0);
9213 #ifdef S_TIMEVAL
9214         if (bar.tv_sec == bar.tv_sec)
9215                 exit(0);
9216 #endif
9217         exit(1);
9218 }
9219 EOCP
9220         flags=''
9221         for s_timezone in '-DS_TIMEZONE' ''; do
9222         sysselect=''
9223         for s_timeval in '-DS_TIMEVAL' ''; do
9224         for i_systimek in '' '-DSYSTIMEKERNEL'; do
9225         for i_time in '' '-DI_TIME'; do
9226         for i_systime in '-DI_SYSTIME' ''; do
9227                 case "$flags" in
9228                 '') $echo $n ".$c"
9229                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
9230                         if eval $compile; then
9231                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
9232                                 shift
9233                                 flags="$*"
9234                                 echo " "
9235                                 $echo $n "Succeeded with $flags$c"
9236                         fi
9237                         ;;
9238                 esac
9239         done
9240         done
9241         done
9242         done
9243         done
9244         timeincl=''
9245         echo " "
9246         case "$flags" in
9247         *SYSTIMEKERNEL*) i_systimek="$define"
9248                 timeincl=`./findhdr sys/time.h`
9249                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
9250         *) i_systimek="$undef";;
9251         esac
9252         case "$flags" in
9253         *I_TIME*) i_time="$define"
9254                 timeincl=`./findhdr time.h`" $timeincl"
9255                 echo "We'll include <time.h>." >&4;;
9256         *) i_time="$undef";;
9257         esac
9258         case "$flags" in
9259         *I_SYSTIME*) i_systime="$define"
9260                 timeincl=`./findhdr sys/time.h`" $timeincl"
9261                 echo "We'll include <sys/time.h>." >&4;;
9262         *) i_systime="$undef";;
9263         esac
9264         $rm -f try.c try
9265 fi
9266
9267 : check for fd_set items
9268 $cat <<EOM
9269
9270 Checking to see how well your C compiler handles fd_set and friends ...
9271 EOM
9272 $cat >fd_set.c <<EOCP
9273 #$i_systime I_SYS_TIME
9274 #$i_sysselct I_SYS_SELECT
9275 #$d_socket HAS_SOCKET
9276 #include <sys/types.h>
9277 #ifdef HAS_SOCKET
9278 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
9279 #endif
9280 #ifdef I_SYS_TIME
9281 #include <sys/time.h>
9282 #endif
9283 #ifdef I_SYS_SELECT
9284 #include <sys/select.h>
9285 #endif
9286 int main() {
9287         fd_set fds;
9288
9289 #ifdef TRYBITS
9290         if(fds.fds_bits);
9291 #endif
9292
9293 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
9294         exit(0);
9295 #else
9296         exit(1);
9297 #endif
9298 }
9299 EOCP
9300 set fd_set -DTRYBITS
9301 if eval $compile; then
9302         d_fds_bits="$define"
9303         d_fd_set="$define"
9304         echo "Well, your system knows about the normal fd_set typedef..." >&4
9305         if ./fd_set; then
9306                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
9307                 d_fd_macros="$define"
9308         else
9309                 $cat >&4 <<'EOM'
9310 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
9311 EOM
9312                 d_fd_macros="$undef"
9313         fi
9314 else
9315         $cat <<'EOM'
9316 Hmm, your compiler has some difficulty with fd_set.  Checking further...
9317 EOM
9318         set fd_set
9319         if eval $compile; then
9320                 d_fds_bits="$undef"
9321                 d_fd_set="$define"
9322                 echo "Well, your system has some sort of fd_set available..." >&4
9323                 if ./fd_set; then
9324                         echo "and you have the normal fd_set macros." >&4
9325                         d_fd_macros="$define"
9326                 else
9327                         $cat <<'EOM'
9328 but not the normal fd_set macros!  Gross!  More work for me...
9329 EOM
9330                         d_fd_macros="$undef"
9331                 fi
9332         else
9333         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
9334                 d_fd_set="$undef"
9335                 d_fds_bits="$undef"
9336                 d_fd_macros="$undef"
9337         fi
9338 fi
9339 $rm -f fd_set*
9340
9341 : see if fgetpos exists
9342 set fgetpos d_fgetpos
9343 eval $inlibc
9344
9345 : see if flock exists
9346 set flock d_flock
9347 eval $inlibc
9348
9349 : see if fork exists
9350 set fork d_fork
9351 eval $inlibc
9352
9353 : see if pathconf exists
9354 set pathconf d_pathconf
9355 eval $inlibc
9356
9357 : see if fpathconf exists
9358 set fpathconf d_fpathconf
9359 eval $inlibc
9360
9361
9362 : check for fpos64_t
9363 echo " "
9364 echo "Checking to see if you have fpos64_t..." >&4
9365 $cat >try.c <<EOCP
9366 #include <stdio.h>
9367 int main() { fpos64_t x = 7; }
9368 EOCP
9369 set try
9370 if eval $compile; then
9371         val="$define"
9372         echo "You have fpos64_t."
9373 else
9374         val="$undef"
9375         echo "You do not have fpos64_t."
9376         case "$fpossize" in
9377         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
9378         esac
9379 fi
9380 $rm -f try.* try
9381 set d_fpos64_t
9382 eval $setvar
9383
9384 : see if frexpl exists
9385 set frexpl d_frexpl
9386 eval $inlibc
9387
9388 hasstruct='varname=$1; struct=$2; shift; shift;
9389 while $test $# -ge 2; do
9390         case "$1" in
9391         $define) echo "#include <$2>";;
9392         esac ;
9393     shift 2;
9394 done > try.c;
9395 echo "int main () { struct $struct foo; }" >> try.c;
9396 set try;
9397 if eval $compile; then
9398         val="$define";
9399 else
9400         val="$undef";
9401 fi;
9402 set $varname;
9403 eval $setvar;
9404 $rm -f try.c try.o'
9405
9406 : see if this is a sys/param system
9407 set sys/param.h i_sysparam
9408 eval $inhdr
9409
9410 : see if this is a sys/mount.h system
9411 set sys/mount.h i_sysmount
9412 eval $inhdr
9413
9414 : see if sys/types.h has to be included
9415 set sys/types.h i_systypes
9416 eval $inhdr
9417
9418
9419 echo " "
9420 echo "Checking to see if your system supports struct fs_data..." >&4
9421 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
9422 eval $hasstruct
9423 case "$d_fs_data_s" in
9424 "$define")      echo "Yes, it does."   ;;
9425 *)              echo "No, it doesn't." ;;
9426 esac
9427
9428 : see if fseeko exists
9429 set fseeko d_fseeko
9430 eval $inlibc
9431 case "$longsize" in
9432 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
9433 esac
9434
9435 : see if fsetpos exists
9436 set fsetpos d_fsetpos
9437 eval $inlibc
9438
9439
9440 : see if fstatfs exists
9441 set fstatfs d_fstatfs
9442 eval $inlibc
9443
9444
9445 : see if statvfs exists
9446 set statvfs d_statvfs
9447 eval $inlibc
9448
9449 : see if fstatvfs exists
9450 set fstatvfs d_fstatvfs
9451 eval $inlibc
9452
9453
9454 : see if fsync exists
9455 set fsync d_fsync
9456 eval $inlibc
9457
9458 : see if ftello exists
9459 set ftello d_ftello
9460 eval $inlibc
9461 case "$longsize" in
9462 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
9463 esac
9464
9465 : see if getcwd exists
9466 set getcwd d_getcwd
9467 eval $inlibc
9468
9469 : see if getespwnam exists
9470 set getespwnam d_getespwnam
9471 eval $inlibc
9472
9473
9474 : see if getfsstat exists
9475 set getfsstat d_getfsstat
9476 eval $inlibc
9477
9478 : see if getgrent exists
9479 set getgrent d_getgrent
9480 eval $inlibc
9481
9482 : see if gethostbyaddr exists
9483 set gethostbyaddr d_gethbyaddr
9484 eval $inlibc
9485
9486 : see if gethostbyname exists
9487 set gethostbyname d_gethbyname
9488 eval $inlibc
9489
9490 : see if gethostent exists
9491 set gethostent d_gethent
9492 eval $inlibc
9493
9494 : see how we will look up host name
9495 echo " "
9496 call=''
9497 if set gethostname val -f d_gethname; eval $csym; $val; then
9498         echo 'gethostname() found.' >&4
9499         d_gethname="$define"
9500         call=gethostname
9501 fi
9502 if set uname val -f d_uname; eval $csym; $val; then
9503         if ./xenix; then
9504                 $cat <<'EOM'
9505 uname() was found, but you're running xenix, and older versions of xenix
9506 have a broken uname(). If you don't really know whether your xenix is old
9507 enough to have a broken system call, use the default answer.
9508
9509 EOM
9510                 dflt=y
9511                 case "$d_uname" in
9512                 "$define") dflt=n;;
9513                 esac
9514                 rp='Is your uname() broken?'
9515                 . ./myread
9516                 case "$ans" in
9517                 n*) d_uname="$define"; call=uname;;
9518                 esac
9519         else
9520                 echo 'uname() found.' >&4
9521                 d_uname="$define"
9522                 case "$call" in
9523                 '') call=uname ;;
9524                 esac
9525         fi
9526 fi
9527 case "$d_gethname" in
9528 '') d_gethname="$undef";;
9529 esac
9530 case "$d_uname" in
9531 '') d_uname="$undef";;
9532 esac
9533 case "$d_uname$d_gethname" in
9534 *define*)
9535         dflt=n
9536         cat <<EOM
9537  
9538 Every now and then someone has a $call() that lies about the hostname
9539 but can't be fixed for political or economic reasons.  If you wish, I can
9540 pretend $call() isn't there and maybe compute hostname at run-time
9541 thanks to the '$phostname' command.
9542
9543 EOM
9544         rp="Shall I ignore $call() from now on?"
9545         . ./myread
9546         case "$ans" in
9547         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
9548         esac;;
9549 esac
9550 case "$phostname" in
9551 '') aphostname='';;
9552 *) case "$aphostname" in
9553         /*) ;;
9554         *) set X $phostname
9555                 shift
9556                 file=$1
9557                 shift
9558                 file=`./loc $file $file $pth`
9559                 aphostname=`echo $file $*`
9560                 ;;
9561         esac
9562         ;;
9563 esac
9564 case "$d_uname$d_gethname" in
9565 *define*) ;;
9566 *)
9567         case "$phostname" in
9568         '')
9569                 echo "There will be no way for $package to get your hostname." >&4;;
9570         *)
9571         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
9572                 ;;
9573         esac;;
9574 esac
9575 case "$d_phostname" in
9576 '') d_phostname="$undef";;
9577 esac
9578
9579 : see if this is a netdb.h system
9580 set netdb.h i_netdb
9581 eval $inhdr
9582
9583 : see if prototypes for various gethostxxx netdb.h functions are available
9584 echo " "
9585 set d_gethostprotos gethostent $i_netdb netdb.h
9586 eval $hasproto
9587
9588 : see if getlogin exists
9589 set getlogin d_getlogin
9590 eval $inlibc
9591
9592 : see if getmnt exists
9593 set getmnt d_getmnt
9594 eval $inlibc
9595
9596 : see if getmntent exists
9597 set getmntent d_getmntent
9598 eval $inlibc
9599
9600 : see if getnetbyaddr exists
9601 set getnetbyaddr d_getnbyaddr
9602 eval $inlibc
9603
9604 : see if getnetbyname exists
9605 set getnetbyname d_getnbyname
9606 eval $inlibc
9607
9608 : see if getnetent exists
9609 set getnetent d_getnent
9610 eval $inlibc
9611
9612 : see if prototypes for various getnetxxx netdb.h functions are available
9613 echo " "
9614 set d_getnetprotos getnetent $i_netdb netdb.h
9615 eval $hasproto
9616
9617 : see if getpagesize exists
9618 set getpagesize d_getpagsz
9619 eval $inlibc
9620
9621
9622 : see if getprotobyname exists
9623 set getprotobyname d_getpbyname
9624 eval $inlibc
9625
9626 : see if getprotobynumber exists
9627 set getprotobynumber d_getpbynumber
9628 eval $inlibc
9629
9630 : see if getprotoent exists
9631 set getprotoent d_getpent
9632 eval $inlibc
9633
9634 : see if getpgid exists
9635 set getpgid d_getpgid
9636 eval $inlibc
9637
9638 : see if getpgrp2 exists
9639 set getpgrp2 d_getpgrp2
9640 eval $inlibc
9641
9642 : see if getppid exists
9643 set getppid d_getppid
9644 eval $inlibc
9645
9646 : see if getpriority exists
9647 set getpriority d_getprior
9648 eval $inlibc
9649
9650 : see if prototypes for various getprotoxxx netdb.h functions are available
9651 echo " "
9652 set d_getprotoprotos getprotoent $i_netdb netdb.h
9653 eval $hasproto
9654
9655 : see if getprpwnam exists
9656 set getprpwnam d_getprpwnam
9657 eval $inlibc
9658
9659 : see if getpwent exists
9660 set getpwent d_getpwent
9661 eval $inlibc
9662
9663
9664 : see if getservbyname exists
9665 set getservbyname d_getsbyname
9666 eval $inlibc
9667
9668 : see if getservbyport exists
9669 set getservbyport d_getsbyport
9670 eval $inlibc
9671
9672 : see if getservent exists
9673 set getservent d_getsent
9674 eval $inlibc
9675
9676 : see if prototypes for various getservxxx netdb.h functions are available
9677 echo " "
9678 set d_getservprotos getservent $i_netdb netdb.h
9679 eval $hasproto
9680
9681 : see if getspnam exists
9682 set getspnam d_getspnam
9683 eval $inlibc
9684
9685 : see if gettimeofday or ftime exists
9686 set gettimeofday d_gettimeod
9687 eval $inlibc
9688 case "$d_gettimeod" in
9689 "$undef")
9690         set ftime d_ftime 
9691         eval $inlibc
9692         ;;
9693 *)
9694         val="$undef"; set d_ftime; eval $setvar
9695         ;;
9696 esac
9697 case "$d_gettimeod$d_ftime" in
9698 "$undef$undef")
9699         echo " "
9700         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
9701         ;;
9702 esac
9703
9704 : see if this is an grp system
9705 set grp.h i_grp
9706 eval $inhdr
9707
9708 case "$i_grp" in
9709 $define)
9710         xxx=`./findhdr grp.h`
9711         $cppstdin $cppflags $cppminus < $xxx >$$.h
9712
9713         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
9714                 val="$define"
9715         else
9716                 val="$undef"
9717         fi
9718         set d_grpasswd
9719         eval $setvar
9720
9721         $rm -f $$.h
9722         ;;
9723 *)
9724         val="$undef";
9725         set d_grpasswd; eval $setvar
9726         ;;
9727 esac
9728
9729 : see if hasmntopt exists
9730 set hasmntopt d_hasmntopt
9731 eval $inlibc
9732
9733 : see if this is a netinet/in.h or sys/in.h system
9734 set netinet/in.h i_niin sys/in.h i_sysin
9735 eval $inhdr
9736
9737 : see if arpa/inet.h has to be included
9738 set arpa/inet.h i_arpainet
9739 eval $inhdr
9740
9741 : see if htonl --and friends-- exists
9742 val=''
9743 set htonl val
9744 eval $inlibc
9745
9746 : Maybe they are macros.
9747 case "$val" in
9748 $undef)
9749         $cat >htonl.c <<EOM
9750 #include <stdio.h>
9751 #include <sys/types.h>
9752 #$i_niin I_NETINET_IN
9753 #$i_sysin I_SYS_IN
9754 #$i_arpainet I_ARPA_INET
9755 #ifdef I_NETINET_IN
9756 #include <netinet/in.h>
9757 #endif
9758 #ifdef I_SYS_IN
9759 #include <sys/in.h>
9760 #endif
9761 #ifdef I_ARPA_INET
9762 #include <arpa/inet.h>
9763 #endif
9764 #ifdef htonl
9765 printf("Defined as a macro.");
9766 #endif
9767 EOM
9768         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
9769         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
9770                 val="$define"
9771                 echo "But it seems to be defined as a macro." >&4
9772         fi
9773         $rm -f htonl.?
9774         ;;
9775 esac
9776 set d_htonl
9777 eval $setvar
9778
9779 : see if iconv exists
9780 set iconv d_iconv
9781 eval $inlibc
9782
9783 : index or strchr
9784 echo " "
9785 if set index val -f; eval $csym; $val; then
9786         if set strchr val -f d_strchr; eval $csym; $val; then
9787                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
9788                         val="$define"
9789                         vali="$undef"
9790                         echo "strchr() found." >&4
9791                 else
9792                         val="$undef"
9793                         vali="$define"
9794                         echo "index() found." >&4
9795                 fi
9796         else
9797                 val="$undef"
9798                 vali="$define"
9799                 echo "index() found." >&4
9800         fi
9801 else
9802         if set strchr val -f d_strchr; eval $csym; $val; then
9803                 val="$define"
9804                 vali="$undef"
9805                 echo "strchr() found." >&4
9806         else
9807                 echo "No index() or strchr() found!" >&4
9808                 val="$undef"
9809                 vali="$undef"
9810         fi
9811 fi
9812 set d_strchr; eval $setvar
9813 val="$vali"
9814 set d_index; eval $setvar
9815
9816 : check whether inet_aton exists
9817 set inet_aton d_inetaton
9818 eval $inlibc
9819
9820 : see if inttypes.h is available
9821 : we want a real compile instead of Inhdr because some systems
9822 : have an inttypes.h which includes non-existent headers
9823 echo " "
9824 $cat >try.c <<EOCP
9825 #include <inttypes.h>
9826 int main() {
9827         static int32_t foo32 = 0x12345678;
9828 }
9829 EOCP
9830 set try
9831 if eval $compile; then
9832         echo "<inttypes.h> found." >&4
9833         val="$define"
9834 else
9835         echo "<inttypes.h> NOT found." >&4
9836         val="$undef"
9837 fi
9838 $rm -f try.c try
9839 set i_inttypes
9840 eval $setvar
9841
9842 : check for int64_t
9843 echo " "
9844 echo "Checking to see if you have int64_t..." >&4
9845 $cat >try.c <<EOCP
9846 #include <sys/types.h>
9847 #$i_inttypes I_INTTYPES
9848 #ifdef I_INTTYPES
9849 #include <inttypes.h>
9850 #endif
9851 int main() { int64_t x = 7; }
9852 EOCP
9853 set try
9854 if eval $compile; then
9855         val="$define"
9856         echo "You have int64_t."
9857 else
9858         val="$undef"
9859         echo "You do not have int64_t."
9860 fi
9861 $rm -f try try.*
9862 set d_int64_t
9863 eval $setvar
9864
9865 : Look for isascii
9866 echo " "
9867 $cat >isascii.c <<'EOCP'
9868 #include <stdio.h>
9869 #include <ctype.h>
9870 int main() {
9871         int c = 'A';
9872         if (isascii(c))
9873                 exit(0);
9874         else
9875                 exit(1);
9876 }
9877 EOCP
9878 set isascii
9879 if eval $compile; then
9880         echo "isascii() found." >&4
9881         val="$define"
9882 else
9883         echo "isascii() NOT found." >&4
9884         val="$undef"
9885 fi
9886 set d_isascii
9887 eval $setvar
9888 $rm -f isascii*
9889
9890 : see if isnan exists
9891 set isnan d_isnan
9892 eval $inlibc
9893
9894 : see if isnanl exists
9895 set isnanl d_isnanl
9896 eval $inlibc
9897
9898 : see if killpg exists
9899 set killpg d_killpg
9900 eval $inlibc
9901
9902 : see if lchown exists
9903 echo " "
9904 $cat > try.c <<'EOCP'
9905 /* System header to define __stub macros and hopefully few prototypes,
9906     which can conflict with char lchown(); below.  */
9907 #include <assert.h>
9908 /* Override any gcc2 internal prototype to avoid an error.  */
9909 /* We use char because int might match the return type of a gcc2
9910    builtin and then its argument prototype would still apply.  */
9911 char lchown();
9912 int main() {
9913     /*  The GNU C library defines this for functions which it implements
9914         to always fail with ENOSYS.  Some functions are actually named
9915         something starting with __ and the normal name is an alias.  */
9916 #if defined (__stub_lchown) || defined (__stub___lchown)
9917 choke me
9918 #else
9919 lchown();
9920 #endif
9921 ; return 0; }
9922 EOCP
9923 set try
9924 if eval $compile; then
9925     $echo "lchown() found." >&4
9926     val="$define"
9927 else
9928     $echo "lchown() NOT found." >&4
9929     val="$undef"
9930 fi
9931 set d_lchown
9932 eval $setvar
9933
9934 : See if number of significant digits in a double precision number is known
9935 echo " "
9936 $cat >ldbl_dig.c <<EOM
9937 #$i_limits I_LIMITS
9938 #$i_float I_FLOAT
9939 #ifdef I_LIMITS
9940 #include <limits.h>
9941 #endif
9942 #ifdef I_FLOAT
9943 #include <float.h>
9944 #endif
9945 #ifdef LDBL_DIG
9946 printf("Contains LDBL_DIG");
9947 #endif
9948 EOM
9949 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
9950 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
9951         echo "LDBL_DIG found." >&4
9952         val="$define"
9953 else
9954         echo "LDBL_DIG NOT found." >&4
9955         val="$undef"
9956 fi
9957 $rm -f ldbl_dig.?
9958 set d_ldbl_dig
9959 eval $setvar
9960
9961 : see if link exists
9962 set link d_link
9963 eval $inlibc
9964
9965 : see if localeconv exists
9966 set localeconv d_locconv
9967 eval $inlibc
9968
9969 : see if lockf exists
9970 set lockf d_lockf
9971 eval $inlibc
9972
9973 : check for long long
9974 echo " "
9975 echo "Checking to see if you have long long..." >&4
9976 echo 'int main() { long long x = 7; return 0; }' > try.c
9977 set try
9978 if eval $compile; then
9979         val="$define"
9980         echo "You have long long."
9981 else
9982         val="$undef"
9983         echo "You do not have long long."
9984 fi
9985 $rm try.*
9986 set d_longlong
9987 eval $setvar
9988
9989 : check for length of long long
9990 case "${d_longlong}${longlongsize}" in
9991 $define)
9992         echo " "
9993         echo "Checking to see how big your long longs are..." >&4
9994         $cat >try.c <<'EOCP'
9995 #include <stdio.h>
9996 int main()
9997 {
9998     printf("%d\n", (int)sizeof(long long));
9999     return(0);
10000 }
10001 EOCP
10002         set try
10003         if eval $compile_ok; then
10004                 longlongsize=`./try$exe_ext`
10005                 echo "Your long longs are $longlongsize bytes long."
10006         else
10007                 dflt='8'
10008                 echo " "
10009                 echo "(I can't seem to compile the test program.  Guessing...)"
10010                 rp="What is the size of a long long (in bytes)?"
10011                 . ./myread
10012                 longlongsize="$ans"
10013         fi
10014         if $test "X$longsize" = "X$longlongsize"; then
10015                 echo "(That isn't any different from an ordinary long.)"
10016         fi      
10017         ;;
10018 esac
10019 $rm -f try.* try
10020
10021 : see if prototype for lseek is available
10022 echo " "
10023 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
10024 eval $hasproto
10025
10026 : see if lstat exists
10027 set lstat d_lstat
10028 eval $inlibc
10029
10030 : see if madvise exists
10031 set madvise d_madvise
10032 eval $inlibc
10033
10034 : see if mblen exists
10035 set mblen d_mblen
10036 eval $inlibc
10037
10038 : see if mbstowcs exists
10039 set mbstowcs d_mbstowcs
10040 eval $inlibc
10041
10042 : see if mbtowc exists
10043 set mbtowc d_mbtowc
10044 eval $inlibc
10045
10046 : see if memchr exists
10047 set memchr d_memchr
10048 eval $inlibc
10049
10050 : see if memcmp exists
10051 set memcmp d_memcmp
10052 eval $inlibc
10053
10054 : see if memcpy exists
10055 set memcpy d_memcpy
10056 eval $inlibc
10057
10058 : see if memmove exists
10059 set memmove d_memmove
10060 eval $inlibc
10061
10062 : see if memset exists
10063 set memset d_memset
10064 eval $inlibc
10065
10066 : see if mkdir exists
10067 set mkdir d_mkdir
10068 eval $inlibc
10069
10070 : see if mkdtemp exists
10071 set mkdtemp d_mkdtemp
10072 eval $inlibc
10073
10074 : see if mkfifo exists
10075 set mkfifo d_mkfifo
10076 eval $inlibc
10077
10078 : see if mkstemp exists
10079 set mkstemp d_mkstemp
10080 eval $inlibc
10081
10082 : see if mkstemps exists
10083 set mkstemps d_mkstemps
10084 eval $inlibc
10085
10086 : see if mktime exists
10087 set mktime d_mktime
10088 eval $inlibc
10089
10090 : see if this is a sys/mman.h system
10091 set sys/mman.h i_sysmman
10092 eval $inhdr
10093
10094 : see if mmap exists
10095 set mmap d_mmap
10096 eval $inlibc
10097 : see what shmat returns
10098 : default to something harmless
10099 mmaptype='void *'
10100 case "$i_sysmman$d_mmap" in
10101 "$define$define")
10102         $cat >mmap.c <<'END'
10103 #include <sys/mman.h>
10104 void *mmap();
10105 END
10106         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
10107                 mmaptype='void *'
10108         else
10109                 mmaptype='caddr_t'
10110         fi
10111         echo "and it returns ($mmaptype)." >&4
10112         ;;
10113 esac
10114
10115
10116
10117 : see if modfl exists
10118 set modfl d_modfl
10119 eval $inlibc
10120
10121 : see if mprotect exists
10122 set mprotect d_mprotect
10123 eval $inlibc
10124
10125 : see if msgctl exists
10126 set msgctl d_msgctl
10127 eval $inlibc
10128
10129 : see if msgget exists
10130 set msgget d_msgget
10131 eval $inlibc
10132
10133 : see if msgsnd exists
10134 set msgsnd d_msgsnd
10135 eval $inlibc
10136
10137 : see if msgrcv exists
10138 set msgrcv d_msgrcv
10139 eval $inlibc
10140
10141 : see how much of the 'msg*(2)' library is present.
10142 h_msg=true
10143 echo " "
10144 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
10145 *"$undef"*) h_msg=false;;
10146 esac
10147 case "$osname" in
10148 freebsd)
10149     case "`ipcs 2>&1`" in
10150     "SVID messages"*"not configured"*)
10151         echo "Your $osname does not have the msg*(2) configured." >&4
10152         h_msg=false
10153         val="$undef"
10154         set msgctl d_msgctl
10155         eval $setvar
10156         set msgget d_msgget
10157         eval $setvar
10158         set msgsnd d_msgsnd
10159         eval $setvar
10160         set msgrcv d_msgrcv
10161         eval $setvar
10162         ;;
10163     esac
10164     ;;
10165 esac
10166 : we could also check for sys/ipc.h ...
10167 if $h_msg && $test `./findhdr sys/msg.h`; then
10168         echo "You have the full msg*(2) library." >&4
10169         val="$define"
10170 else
10171         echo "You don't have the full msg*(2) library." >&4
10172         val="$undef"
10173 fi
10174 set d_msg
10175 eval $setvar
10176
10177 : see if msync exists
10178 set msync d_msync
10179 eval $inlibc
10180
10181 : see if munmap exists
10182 set munmap d_munmap
10183 eval $inlibc
10184
10185 : see if nice exists
10186 set nice d_nice
10187 eval $inlibc
10188
10189
10190 echo " "
10191 echo "Checking which 64-bit integer type we could use..." >&4
10192
10193 case "$intsize" in
10194 8) val=int
10195    set quadtype
10196    eval $setvar
10197    val='"unsigned int"'
10198    set uquadtype
10199    eval $setvar
10200    quadkind=1
10201    ;;
10202 *) case "$longsize" in
10203    8) val=long
10204       set quadtype
10205       eval $setvar
10206       val='"unsigned long"'
10207       set uquadtype
10208       eval $setvar
10209       quadkind=2
10210       ;;
10211    *) case "$d_longlong:$longlongsize" in
10212       define:8)
10213         val='"long long"'
10214         set quadtype
10215         eval $setvar
10216         val='"unsigned long long"'
10217         set uquadtype
10218         eval $setvar
10219         quadkind=3
10220         ;;
10221       *) case "$d_int64_t" in
10222          define)
10223            val=int64_t
10224            set quadtype
10225            eval $setvar
10226            val=uint64_t
10227            set uquadtype
10228            eval $setvar
10229            quadkind=4
10230            ;;
10231          esac
10232          ;;
10233       esac
10234       ;;
10235    esac
10236    ;;
10237 esac
10238
10239 case "$quadtype" in
10240 '')     echo "Alas, no 64-bit integer types in sight." >&4
10241         d_quad="$undef"
10242         ;;
10243 *)      if test X"$use64bitint" = Xdefine -o X"$longsize" = X8; then
10244             verb="will"
10245         else
10246             verb="could"
10247         fi
10248         echo "We $verb use '$quadtype' for 64-bit integers." >&4
10249         d_quad="$define"
10250         ;;
10251 esac
10252
10253 : check for length of character
10254 echo " "
10255 case "$charsize" in
10256 '')
10257         echo "Checking to see how big your characters are (hey, you never know)..." >&4
10258         $cat >try.c <<'EOCP'
10259 #include <stdio.h>
10260 int main()
10261 {
10262     printf("%d\n", (int)sizeof(char));
10263     exit(0);
10264 }
10265 EOCP
10266         set try
10267         if eval $compile_ok; then
10268                 dflt=`./try`
10269         else
10270                 dflt='1'
10271                 echo "(I can't seem to compile the test program.  Guessing...)"
10272         fi
10273         ;;
10274 *)
10275         dflt="$charsize"
10276         ;;
10277 esac
10278 rp="What is the size of a character (in bytes)?"
10279 . ./myread
10280 charsize="$ans"
10281 $rm -f try.c try
10282
10283 : check for volatile keyword
10284 echo " "
10285 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10286 $cat >try.c <<'EOCP'
10287 int main()
10288 {
10289         typedef struct _goo_struct goo_struct;
10290         goo_struct * volatile goo = ((goo_struct *)0);
10291         struct _goo_struct {
10292                 long long_int;
10293                 int reg_int;
10294                 char char_var;
10295         };
10296         typedef unsigned short foo_t;
10297         char *volatile foo;
10298         volatile int bar;
10299         volatile foo_t blech;
10300         foo = foo;
10301 }
10302 EOCP
10303 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10304         val="$define"
10305         echo "Yup, it does."
10306 else
10307         val="$undef"
10308         echo "Nope, it doesn't."
10309 fi
10310 set d_volatile
10311 eval $setvar
10312 $rm -f try.*
10313
10314
10315 echo " "
10316 $echo "Choosing the C types to be used for Perl's internal types..." >&4
10317
10318 case "$use64bitint:$d_quad:$quadtype" in
10319 define:define:?*)
10320         ivtype="$quadtype"
10321         uvtype="$uquadtype"
10322         ivsize=8
10323         uvsize=8
10324         ;;
10325 *)      ivtype="long"
10326         uvtype="unsigned long"
10327         ivsize=$longsize
10328         uvsize=$longsize
10329         ;;
10330 esac
10331
10332 case "$uselongdouble:$d_longdbl" in
10333 define:define)
10334         nvtype="long double"
10335         nvsize=$longdblsize
10336         ;;
10337 *)      nvtype=double
10338         nvsize=$doublesize
10339         ;;
10340 esac
10341
10342 $echo "(IV will be "$ivtype", $ivsize bytes)"
10343 $echo "(UV will be "$uvtype", $uvsize bytes)"
10344 $echo "(NV will be "$nvtype", $nvsize bytes)"
10345
10346 $cat >try.c <<EOCP
10347 #$i_inttypes I_INTTYPES
10348 #ifdef I_INTTYPES
10349 #include <inttypes.h>
10350 #endif
10351 #include <stdio.h>
10352 int main() {
10353 #ifdef INT8
10354    int8_t i =  INT8_MAX;
10355   uint8_t u = UINT8_MAX;
10356   printf("int8_t\n");
10357 #endif
10358 #ifdef INT16
10359    int16_t i =  INT16_MAX;
10360   uint16_t i = UINT16_MAX;
10361   printf("int16_t\n");
10362 #endif
10363 #ifdef INT32
10364    int32_t i =  INT32_MAX;
10365   uint32_t u = UINT32_MAX;
10366   printf("int32_t\n");
10367 #endif
10368 }
10369 EOCP
10370
10371 case "$i8type" in
10372 '')     case "$charsize" in
10373         1)      i8type=char
10374                 u8type="unsigned char"
10375                 i8size=$charsize
10376                 u8size=$charsize
10377                 ;;
10378         esac
10379         ;;
10380 esac
10381 case "$i8type" in
10382 '')     set try -DINT8
10383         if eval $compile; then
10384                 case "`./try$exe_ext`" in
10385                 int8_t) i8type=int8_t
10386                         u8type=uint8_t
10387                         i8size=1
10388                         u8size=1
10389                         ;;
10390                 esac
10391         fi
10392         ;;
10393 esac
10394 case "$i8type" in
10395 '')     if $test $charsize -ge 1; then
10396                 i8type=char
10397                 u8type="unsigned char"
10398                 i8size=$charsize
10399                 u8size=$charsize
10400         fi
10401         ;;
10402 esac
10403
10404 case "$i16type" in
10405 '')     case "$shortsize" in
10406         2)      i16type=short
10407                 u16type="unsigned short"
10408                 i16size=$shortsize
10409                 u16size=$shortsize
10410                 ;;
10411         esac
10412         ;;
10413 esac
10414 case "$i16type" in
10415 '')     set try -DINT16
10416         if eval $compile; then
10417                 case "`./try$exe_ext`" in
10418                 int16_t)
10419                         i16type=int16_t
10420                         u16type=uint16_t
10421                         i16size=2
10422                         u16size=2
10423                         ;;
10424                 esac
10425         fi
10426         ;;
10427 esac
10428 case "$i16type" in
10429 '')     if $test $shortsize -ge 2; then
10430                 i16type=short
10431                 u16type="unsigned short"
10432                 i16size=$shortsize
10433                 u16size=$shortsize
10434         fi
10435         ;;
10436 esac
10437
10438 case "$i32type" in
10439 '')     case "$longsize" in
10440         4)      i32type=long
10441                 u32type="unsigned long"
10442                 i32size=$longsize
10443                 u32size=$longsize
10444                 ;;
10445         *)      case "$intsize" in
10446                 4)      i32type=int
10447                         u32type="unsigned int"
10448                         i32size=$intsize
10449                         u32size=$intsize
10450                         ;;
10451                 esac
10452                 ;;
10453         esac
10454         ;;
10455 esac
10456 case "$i32type" in
10457 '')     set try -DINT32
10458         if eval $compile; then
10459                 case "`./try$exe_ext`" in
10460                 int32_t)
10461                         i32type=int32_t
10462                         u32type=uint32_t
10463                         i32size=4
10464                         u32size=4
10465                         ;;
10466                 esac
10467         fi
10468         ;;
10469 esac
10470 case "$i32type" in
10471 '')     if $test $intsize -ge 4; then
10472                 i32type=int
10473                 u32type="unsigned int"
10474                 i32size=$intsize
10475                 u32size=$intsize
10476         fi
10477         ;;
10478 esac
10479
10480 case "$i64type" in
10481 '')     case "$d_quad:$quadtype" in
10482         define:?*)
10483                 i64type="$quadtype"
10484                 u64type="$uquadtype"
10485                 i64size=8
10486                 u64size=8
10487                 ;;
10488         esac
10489         ;;
10490 esac
10491
10492 $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
10493 : volatile so that the compiler has to store it out to memory.
10494 if test X"$d_volatile" = X"$define"; then
10495         volatile=volatile
10496 fi
10497 $cat <<EOP >try.c
10498 #include <stdio.h>
10499 #include <sys/types.h>
10500 #include <signal.h>
10501 #ifdef SIGFPE
10502 $volatile int bletched = 0;
10503 $signal_t blech(s) int s; { bletched = 1; }
10504 #endif
10505 int main() {
10506     $uvtype u = 0;
10507     $nvtype d;
10508     int     n = 8 * $uvsize;
10509     int     i;
10510 #ifdef SIGFPE
10511     signal(SIGFPE, blech);
10512 #endif
10513
10514     for (i = 0; i < n; i++) {
10515       u = u << 1 | ($uvtype)1;
10516       d = ($nvtype)u;
10517       if (($uvtype)d != u)
10518         break;
10519       if (d <= 0)
10520         break;
10521       d = ($nvtype)(u - 1);
10522       if (($uvtype)d != (u - 1))
10523         break;
10524 #ifdef SIGFPE
10525       if (bletched) {
10526         break;
10527 #endif
10528       } 
10529     }
10530     printf("%d\n", ((i == n) ? -n : i));
10531     exit(0);
10532 }
10533 EOP
10534 set try
10535
10536 d_nv_preserves_uv="$undef"
10537 if eval $compile; then
10538         d_nv_preserves_uv_bits="`./try$exe_ext`"
10539 fi
10540 case "$d_nv_preserves_uv_bits" in
10541 \-[1-9]*)       
10542         d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
10543         $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs."  2>&1
10544         d_nv_preserves_uv="$define"
10545         ;;
10546 [1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs."  2>&1
10547         d_nv_preserves_uv="$undef" ;;
10548 *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
10549         d_nv_preserves_uv_bits="$undef" ;;
10550 esac
10551
10552 $rm -f try.* try
10553
10554
10555 : check for off64_t
10556 echo " "
10557 echo "Checking to see if you have off64_t..." >&4
10558 $cat >try.c <<EOCP
10559 #include <sys/types.h>
10560 #include <unistd.h>
10561 int main() { off64_t x = 7; }
10562 EOCP
10563 set try
10564 if eval $compile; then
10565         val="$define"
10566         echo "You have off64_t."
10567 else
10568         val="$undef"
10569         echo "You do not have off64_t."
10570         case "$lseeksize" in
10571         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
10572         esac
10573 fi
10574 $rm -f try.* try
10575 set d_off64_t
10576 eval $setvar
10577
10578 : see if POSIX threads are available
10579 set pthread.h i_pthread
10580 eval $inhdr
10581
10582
10583
10584
10585 : how to create joinable pthreads
10586 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
10587         echo " "
10588         echo "Checking what constant to use for creating joinable pthreads..." >&4 
10589         $cat >try.c <<'EOCP'
10590 #include <pthread.h>
10591 int main() {
10592     int detachstate = JOINABLE;
10593 }
10594 EOCP
10595         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
10596         if eval $compile; then
10597                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
10598                 val="$undef" # Yes, undef.
10599                 set d_old_pthread_create_joinable
10600                 eval $setvar
10601                 val=""
10602                 set old_pthread_create_joinable
10603                 eval $setvar
10604         else
10605                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
10606                 if eval $compile; then
10607                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
10608                         val="$define"
10609                         set d_old_pthread_create_joinable
10610                         eval $setvar
10611                         val=PTHREAD_CREATE_UNDETACHED
10612                         set old_pthread_create_joinable
10613                         eval $setvar
10614                 else            
10615                         set try -DJOINABLE=__UNDETACHED
10616                         if eval $compile; then
10617                                 echo "You seem to use __UNDETACHED." >&4
10618                                 val="$define"
10619                                 set d_old_pthread_create_joinable
10620                                 eval $setvar
10621                                 val=__UNDETACHED
10622                                 set old_pthread_create_joinable
10623                                 eval $setvar
10624                         else
10625                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
10626                                 val="$define"
10627                                 set d_old_pthread_create_joinable
10628                                 eval $setvar
10629                                 val=0
10630                                 set old_pthread_create_joinable
10631                                 eval $setvar
10632                         fi
10633                 fi
10634         fi
10635         $rm -f try try.*
10636 else
10637     d_old_pthread_create_joinable="$undef"
10638     old_pthread_create_joinable=""
10639 fi
10640
10641 : see if pause exists
10642 set pause d_pause
10643 eval $inlibc
10644
10645 : see if pipe exists
10646 set pipe d_pipe
10647 eval $inlibc
10648
10649 : see if poll exists
10650 set poll d_poll
10651 eval $inlibc
10652
10653
10654 : see whether the various POSIXish _yields exist
10655 $cat >try.c <<EOP
10656 #include <pthread.h>
10657 #include <stdio.h>
10658 int main() {
10659 #ifdef SCHED_YIELD
10660         sched_yield();
10661 #else
10662 #ifdef PTHREAD_YIELD
10663         pthread_yield();
10664 #else
10665 #ifdef PTHREAD_YIELD_NULL
10666         pthread_yield(NULL);
10667 #endif
10668 #endif
10669 #endif
10670 }
10671 EOP
10672 : see if sched_yield exists
10673 set try -DSCHED_YIELD
10674 if eval $compile; then
10675     val="$define"
10676     sched_yield='sched_yield()'
10677 else
10678     val="$undef"
10679 fi
10680 case "$usethreads" in
10681 $define)
10682         case "$val" in
10683         $define) echo 'sched_yield() found.' >&4        ;;
10684         *)       echo 'sched_yield() NOT found.' >&4    ;;
10685         esac
10686 esac
10687 set d_sched_yield
10688 eval $setvar
10689
10690 : see if pthread_yield exists
10691 set try -DPTHREAD_YIELD
10692 if eval $compile; then
10693     val="$define"
10694     case "$sched_yield" in
10695     '') sched_yield='pthread_yield()' ;;
10696     esac
10697 else
10698     set try -DPTHREAD_YIELD_NULL
10699     if eval $compile; then
10700         val="$define"
10701         case "$sched_yield" in
10702         '') sched_yield='pthread_yield(NULL)' ;;
10703         esac
10704     else
10705         val="$undef"
10706     fi
10707 fi
10708 case "$usethreads" in
10709 $define)
10710         case "$val" in
10711         $define) echo 'pthread_yield() found.' >&4      ;;
10712         *)       echo 'pthread_yield() NOT found.' >&4  ;;
10713         esac
10714         ;;
10715 esac
10716 set d_pthread_yield
10717 eval $setvar
10718
10719 case "$sched_yield" in
10720 '') sched_yield=undef ;;
10721 esac
10722
10723 $rm -f try try.*
10724
10725 : see if this is a pwd.h system
10726 set pwd.h i_pwd
10727 eval $inhdr
10728
10729 case "$i_pwd" in
10730 $define)
10731         xxx=`./findhdr pwd.h`
10732         $cppstdin $cppflags $cppminus < $xxx >$$.h
10733
10734         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
10735                 val="$define"
10736         else
10737                 val="$undef"
10738         fi
10739         set d_pwquota
10740         eval $setvar
10741
10742         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
10743                 val="$define"
10744         else
10745                 val="$undef"
10746         fi
10747         set d_pwage
10748         eval $setvar
10749
10750         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
10751                 val="$define"
10752         else
10753                 val="$undef"
10754         fi
10755         set d_pwchange
10756         eval $setvar
10757
10758         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
10759                 val="$define"
10760         else
10761                 val="$undef"
10762         fi
10763         set d_pwclass
10764         eval $setvar
10765
10766         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
10767                 val="$define"
10768         else
10769                 val="$undef"
10770         fi
10771         set d_pwexpire
10772         eval $setvar
10773
10774         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
10775                 val="$define"
10776         else
10777                 val="$undef"
10778         fi
10779         set d_pwcomment
10780         eval $setvar
10781
10782         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
10783                 val="$define"
10784         else
10785                 val="$undef"
10786         fi
10787         set d_pwgecos
10788         eval $setvar
10789
10790         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
10791                 val="$define"
10792         else
10793                 val="$undef"
10794         fi
10795         set d_pwpasswd
10796         eval $setvar
10797
10798         $rm -f $$.h
10799         ;;
10800 *)
10801         val="$undef"; 
10802         set d_pwquota; eval $setvar
10803         set d_pwage; eval $setvar
10804         set d_pwchange; eval $setvar
10805         set d_pwclass; eval $setvar
10806         set d_pwexpire; eval $setvar
10807         set d_pwcomment; eval $setvar
10808         set d_pwgecos; eval $setvar
10809         set d_pwpasswd; eval $setvar
10810         ;;
10811 esac
10812
10813 : see if readdir and friends exist
10814 set readdir d_readdir
10815 eval $inlibc
10816 set seekdir d_seekdir
10817 eval $inlibc
10818 set telldir d_telldir
10819 eval $inlibc
10820 set rewinddir d_rewinddir
10821 eval $inlibc
10822
10823 : see if readlink exists
10824 set readlink d_readlink
10825 eval $inlibc
10826
10827 : see if rename exists
10828 set rename d_rename
10829 eval $inlibc
10830
10831 : see if rmdir exists
10832 set rmdir d_rmdir
10833 eval $inlibc
10834
10835 : see if memory.h is available.
10836 val=''
10837 set memory.h val
10838 eval $inhdr
10839
10840 : See if it conflicts with string.h
10841 case "$val" in
10842 $define)
10843         case "$strings" in
10844         '') ;;
10845         *)
10846                 $cppstdin $cppflags $cppminus < $strings > mem.h
10847                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
10848                         echo " "
10849                         echo "We won't be including <memory.h>."
10850                         val="$undef"
10851                 fi
10852                 $rm -f mem.h
10853                 ;;
10854         esac
10855 esac
10856 set i_memory
10857 eval $setvar
10858
10859 : can bcopy handle overlapping blocks?
10860 val="$undef"
10861 case "$d_bcopy" in
10862 "$define")
10863         echo " "
10864         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
10865         $cat >try.c <<EOCP
10866 #$i_memory I_MEMORY
10867 #$i_stdlib I_STDLIB
10868 #$i_string I_STRING
10869 #$i_unistd I_UNISTD
10870 EOCP
10871         $cat >>try.c <<'EOCP'
10872 #include <stdio.h>
10873 #ifdef I_MEMORY
10874 #  include <memory.h>
10875 #endif
10876 #ifdef I_STDLIB
10877 #  include <stdlib.h>
10878 #endif
10879 #ifdef I_STRING
10880 #  include <string.h>
10881 #else
10882 #  include <strings.h>
10883 #endif
10884 #ifdef I_UNISTD
10885 #  include <unistd.h>  /* Needed for NetBSD */
10886 #endif
10887 int main()
10888 {
10889 char buf[128], abc[128];
10890 char *b;
10891 int len;
10892 int off;
10893 int align;
10894
10895 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
10896
10897 for (align = 7; align >= 0; align--) {
10898         for (len = 36; len; len--) {
10899                 b = buf+align;
10900                 bcopy(abc, b, len);
10901                 for (off = 1; off <= len; off++) {
10902                         bcopy(b, b+off, len);
10903                         bcopy(b+off, b, len);
10904                         if (bcmp(b, abc, len))
10905                                 exit(1);
10906                 }
10907         }
10908 }
10909 exit(0);
10910 }
10911 EOCP
10912         set try
10913         if eval $compile_ok; then
10914                 if ./try 2>/dev/null; then
10915                         echo "Yes, it can."
10916                         val="$define"
10917                 else
10918                         echo "It can't, sorry."
10919                         case "$d_memmove" in
10920                         "$define") echo "But that's Ok since you have memmove()." ;;
10921                         esac
10922                 fi
10923         else
10924                 echo "(I can't compile the test program, so we'll assume not...)"
10925                 case "$d_memmove" in
10926                 "$define") echo "But that's Ok since you have memmove()." ;;
10927                 esac
10928         fi
10929         ;;
10930 esac
10931 $rm -f try.* try core
10932 set d_safebcpy
10933 eval $setvar
10934
10935 : can memcpy handle overlapping blocks?
10936 val="$undef"
10937 case "$d_memcpy" in
10938 "$define")
10939         echo " "
10940         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
10941         $cat >try.c <<EOCP
10942 #$i_memory I_MEMORY
10943 #$i_stdlib I_STDLIB
10944 #$i_string I_STRING
10945 #$i_unistd I_UNISTD
10946 EOCP
10947         $cat >>try.c <<'EOCP'
10948 #include <stdio.h>
10949 #ifdef I_MEMORY
10950 #  include <memory.h>
10951 #endif
10952 #ifdef I_STDLIB
10953 #  include <stdlib.h>
10954 #endif
10955 #ifdef I_STRING
10956 #  include <string.h>
10957 #else
10958 #  include <strings.h>
10959 #endif
10960 #ifdef I_UNISTD
10961 #  include <unistd.h>  /* Needed for NetBSD */
10962 #endif
10963 int main()
10964 {
10965 char buf[128], abc[128];
10966 char *b;
10967 int len;
10968 int off;
10969 int align;
10970
10971 /* Copy "abcde..." string to char abc[] so that gcc doesn't
10972    try to store the string in read-only memory. */
10973 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
10974
10975 for (align = 7; align >= 0; align--) {
10976         for (len = 36; len; len--) {
10977                 b = buf+align;
10978                 memcpy(b, abc, len);
10979                 for (off = 1; off <= len; off++) {
10980                         memcpy(b+off, b, len);
10981                         memcpy(b, b+off, len);
10982                         if (memcmp(b, abc, len))
10983                                 exit(1);
10984                 }
10985         }
10986 }
10987 exit(0);
10988 }
10989 EOCP
10990         set try
10991         if eval $compile_ok; then
10992                 if ./try 2>/dev/null; then
10993                         echo "Yes, it can."
10994                         val="$define"
10995                 else
10996                         echo "It can't, sorry."
10997                         case "$d_memmove" in
10998                         "$define") echo "But that's Ok since you have memmove()." ;;
10999                         esac
11000                 fi
11001         else
11002                 echo "(I can't compile the test program, so we'll assume not...)"
11003                 case "$d_memmove" in
11004                 "$define") echo "But that's Ok since you have memmove()." ;;
11005                 esac
11006         fi
11007         ;;
11008 esac
11009 $rm -f try.* try core
11010 set d_safemcpy
11011 eval $setvar
11012
11013 : can memcmp be trusted to compare relative magnitude?
11014 val="$undef"
11015 case "$d_memcmp" in
11016 "$define")
11017         echo " "
11018         echo "Checking if your memcmp() can compare relative magnitude..." >&4
11019         $cat >try.c <<EOCP
11020 #$i_memory I_MEMORY
11021 #$i_stdlib I_STDLIB
11022 #$i_string I_STRING
11023 #$i_unistd I_UNISTD
11024 EOCP
11025         $cat >>try.c <<'EOCP'
11026 #include <stdio.h>
11027 #ifdef I_MEMORY
11028 #  include <memory.h>
11029 #endif
11030 #ifdef I_STDLIB
11031 #  include <stdlib.h>
11032 #endif
11033 #ifdef I_STRING
11034 #  include <string.h>
11035 #else
11036 #  include <strings.h>
11037 #endif
11038 #ifdef I_UNISTD
11039 #  include <unistd.h>  /* Needed for NetBSD */
11040 #endif
11041 int main()
11042 {
11043 char a = -1;
11044 char b = 0;
11045 if ((a < b) && memcmp(&a, &b, 1) < 0)
11046         exit(1);
11047 exit(0);
11048 }
11049 EOCP
11050         set try
11051         if eval $compile_ok; then
11052                 if ./try 2>/dev/null; then
11053                         echo "Yes, it can."
11054                         val="$define"
11055                 else
11056                         echo "No, it can't (it uses signed chars)."
11057                 fi
11058         else
11059                 echo "(I can't compile the test program, so we'll assume not...)"
11060         fi
11061         ;;
11062 esac
11063 $rm -f try.* try core
11064 set d_sanemcmp
11065 eval $setvar
11066
11067 : see if prototype for sbrk is available
11068 echo " "
11069 set d_sbrkproto sbrk $i_unistd unistd.h
11070 eval $hasproto
11071
11072 : see if select exists
11073 set select d_select
11074 eval $inlibc
11075
11076 : see if semctl exists
11077 set semctl d_semctl
11078 eval $inlibc
11079
11080 : see if semget exists
11081 set semget d_semget
11082 eval $inlibc
11083
11084 : see if semop exists
11085 set semop d_semop
11086 eval $inlibc
11087
11088 : see how much of the 'sem*(2)' library is present.
11089 h_sem=true
11090 echo " "
11091 case "$d_semctl$d_semget$d_semop" in
11092 *"$undef"*) h_sem=false;;
11093 esac
11094 case "$osname" in
11095 freebsd)
11096     case "`ipcs 2>&1`" in
11097     "SVID messages"*"not configured"*)
11098         echo "Your $osname does not have the sem*(2) configured." >&4
11099         h_sem=false
11100         val="$undef"
11101         set semctl d_semctl
11102         eval $setvar
11103         set semget d_semget
11104         eval $setvar
11105         set semop d_semop
11106         eval $setvar
11107         ;;
11108     esac
11109     ;;
11110 esac
11111 : we could also check for sys/ipc.h ...
11112 if $h_sem && $test `./findhdr sys/sem.h`; then
11113         echo "You have the full sem*(2) library." >&4
11114         val="$define"
11115 else
11116         echo "You don't have the full sem*(2) library." >&4
11117         val="$undef"
11118 fi
11119 set d_sem
11120 eval $setvar
11121
11122 : see whether sys/sem.h defines union semun
11123 echo " "
11124 $cat > try.c <<'END'
11125 #include <sys/types.h>
11126 #include <sys/ipc.h>
11127 #include <sys/sem.h>
11128 int main () { union semun semun; semun.buf = 0; }
11129 END
11130 set try
11131 if eval $compile; then
11132     echo "You have union semun in <sys/sem.h>." >&4
11133     val="$define"
11134 else
11135     echo "You do not have union semun in <sys/sem.h>." >&4
11136     val="$undef"
11137 fi
11138 $rm -f try try.c try.h
11139 set d_union_semun
11140 eval $setvar
11141
11142 : see how to do semctl IPC_STAT
11143 case "$d_sem" in
11144 $define)
11145     : see whether semctl IPC_STAT can use union semun
11146     echo " "
11147     $cat > try.h <<END
11148 #ifndef S_IRUSR
11149 #   ifdef S_IREAD
11150 #       define S_IRUSR S_IREAD
11151 #       define S_IWUSR S_IWRITE
11152 #       define S_IXUSR S_IEXEC
11153 #   else
11154 #       define S_IRUSR 0400
11155 #       define S_IWUSR 0200
11156 #       define S_IXUSR 0100
11157 #   endif
11158 #   define S_IRGRP (S_IRUSR>>3)
11159 #   define S_IWGRP (S_IWUSR>>3)
11160 #   define S_IXGRP (S_IXUSR>>3)
11161 #   define S_IROTH (S_IRUSR>>6)
11162 #   define S_IWOTH (S_IWUSR>>6)
11163 #   define S_IXOTH (S_IXUSR>>6)
11164 #endif
11165 #ifndef S_IRWXU
11166 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
11167 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
11168 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
11169 #endif
11170 END
11171
11172     $cat > try.c <<END
11173 #include <sys/types.h>
11174 #include <sys/ipc.h>
11175 #include <sys/sem.h>
11176 #include <sys/stat.h>
11177 #include <stdio.h>
11178 #include <errno.h>
11179 #include "try.h"
11180 #ifndef errno
11181 extern int errno;
11182 #endif
11183 #$d_union_semun HAS_UNION_SEMUN
11184 int main() {
11185     union semun
11186 #ifndef HAS_UNION_SEMUN
11187     {
11188         int val;
11189         struct semid_ds *buf;
11190         unsigned short *array;
11191     }
11192 #endif
11193     arg;
11194     int sem, st;
11195
11196 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
11197     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11198     if (sem > -1) {
11199         struct semid_ds argbuf;
11200         arg.buf = &argbuf;
11201 #       ifdef IPC_STAT
11202         st = semctl(sem, 0, IPC_STAT, arg);
11203         if (st == 0)
11204             printf("semun\n");
11205         else
11206 #       endif /* IPC_STAT */
11207             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11208 #       ifdef IPC_RMID
11209         if (semctl(sem, 0, IPC_RMID, arg) != 0)
11210 #       endif /* IPC_RMID */
11211             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11212     } else
11213 #endif /* IPC_PRIVATE && ... */
11214         printf("semget failed: errno = %d\n", errno);
11215   return 0;
11216 }
11217 END
11218     val="$undef"
11219     set try
11220     if eval $compile; then
11221         xxx=`./try`
11222         case "$xxx" in
11223         semun) val="$define" ;;
11224         esac
11225     fi
11226     $rm -f try try.c
11227     set d_semctl_semun
11228     eval $setvar
11229     case "$d_semctl_semun" in
11230     $define)
11231         echo "You can use union semun for semctl IPC_STAT." >&4
11232         also='also'
11233         ;;
11234     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
11235         also=''
11236         ;;
11237     esac
11238
11239     : see whether semctl IPC_STAT can use struct semid_ds pointer
11240     $cat > try.c <<'END'
11241 #include <sys/types.h>
11242 #include <sys/ipc.h>
11243 #include <sys/sem.h>
11244 #include <sys/stat.h>
11245 #include "try.h"
11246 #include <stdio.h>
11247 #include <errno.h>
11248 #ifndef errno
11249 extern int errno;
11250 #endif
11251 int main() {
11252     struct semid_ds arg;
11253     int sem, st;
11254
11255 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
11256     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11257     if (sem > -1) {
11258 #       ifdef IPC_STAT
11259         st = semctl(sem, 0, IPC_STAT, &arg);
11260         if (st == 0)
11261             printf("semid_ds\n");
11262         else
11263 #       endif /* IPC_STAT */
11264             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11265 #       ifdef IPC_RMID
11266         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
11267 #       endif /* IPC_RMID */
11268             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11269     } else
11270 #endif /* IPC_PRIVATE && ... */
11271         printf("semget failed: errno = %d\n", errno);
11272
11273     return 0;
11274 }
11275 END
11276     val="$undef"
11277     set try
11278     if eval $compile; then
11279         xxx=`./try`
11280         case "$xxx" in
11281         semid_ds) val="$define" ;;
11282         esac
11283     fi
11284     $rm -f try try.c
11285     set d_semctl_semid_ds
11286     eval $setvar
11287     case "$d_semctl_semid_ds" in
11288     $define)
11289         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
11290         ;;
11291     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
11292         ;;
11293     esac
11294     $rm -f try.h
11295     ;;
11296 *)  val="$undef"
11297
11298     # We do not have the full sem*(2) library, so assume we can not
11299     # use either.
11300
11301     set d_semctl_semun
11302     eval $setvar
11303
11304     set d_semctl_semid_ds
11305     eval $setvar
11306     ;;
11307 esac
11308
11309 : see if setegid exists
11310 set setegid d_setegid
11311 eval $inlibc
11312
11313 : see if seteuid exists
11314 set seteuid d_seteuid
11315 eval $inlibc
11316
11317 : see if setgrent exists
11318 set setgrent d_setgrent
11319 eval $inlibc
11320
11321 : see if sethostent exists
11322 set sethostent d_sethent
11323 eval $inlibc
11324
11325 : see if setlinebuf exists
11326 set setlinebuf d_setlinebuf
11327 eval $inlibc
11328
11329 : see if setlocale exists
11330 set setlocale d_setlocale
11331 eval $inlibc
11332
11333 : see if setnetent exists
11334 set setnetent d_setnent
11335 eval $inlibc
11336
11337 : see if setprotoent exists
11338 set setprotoent d_setpent
11339 eval $inlibc
11340
11341 : see if setpgid exists
11342 set setpgid d_setpgid
11343 eval $inlibc
11344
11345 : see if setpgrp2 exists
11346 set setpgrp2 d_setpgrp2
11347 eval $inlibc
11348
11349 : see if setpriority exists
11350 set setpriority d_setprior
11351 eval $inlibc
11352
11353 : see if setproctitle exists
11354 set setproctitle d_setproctitle
11355 eval $inlibc
11356
11357 : see if setpwent exists
11358 set setpwent d_setpwent
11359 eval $inlibc
11360
11361 : see if setregid exists
11362 set setregid d_setregid
11363 eval $inlibc
11364 set setresgid d_setresgid
11365 eval $inlibc
11366
11367 : see if setreuid exists
11368 set setreuid d_setreuid
11369 eval $inlibc
11370 set setresuid d_setresuid
11371 eval $inlibc
11372
11373 : see if setrgid exists
11374 set setrgid d_setrgid
11375 eval $inlibc
11376
11377 : see if setruid exists
11378 set setruid d_setruid
11379 eval $inlibc
11380
11381 : see if setservent exists
11382 set setservent d_setsent
11383 eval $inlibc
11384
11385 : see if setsid exists
11386 set setsid d_setsid
11387 eval $inlibc
11388
11389 : see if setvbuf exists
11390 set setvbuf d_setvbuf
11391 eval $inlibc
11392
11393 : see if sfio.h is available
11394 set sfio.h i_sfio
11395 eval $inhdr
11396
11397
11398 : see if sfio library is available
11399 case "$i_sfio" in
11400 $define)
11401         val=''
11402         set sfreserve val
11403         eval $inlibc
11404         ;;
11405 *)
11406         val="$undef"
11407         ;;
11408 esac
11409 : Ok, but do we want to use it.
11410 case "$val" in
11411 $define)
11412         case "$usesfio" in
11413         true|$define|[yY]*) dflt='y';;
11414         *) dflt='n';;
11415         esac
11416         echo "$package can use the sfio library, but it is experimental."
11417         case "$useperlio" in
11418         "$undef")
11419             echo "For sfio also the PerlIO abstraction layer is needed."
11420             echo "Earlier you said you wouldn't want that."
11421             ;;
11422         esac
11423         rp="You seem to have sfio available, do you want to try using it?"
11424         . ./myread
11425         case "$ans" in
11426         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
11427                 useperlio="$define"
11428                 val="$define"
11429                 ;;
11430         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
11431                 val="$undef"
11432                 ;;
11433         esac
11434         ;;
11435 *)      case "$usesfio" in
11436         true|$define|[yY]*)
11437                 echo "Sorry, cannot find sfio on this machine." >&4
11438                 echo "Ignoring your setting of usesfio=$usesfio." >&4
11439                 val="$undef"
11440                 ;;
11441         esac
11442         ;;
11443 esac
11444 set d_sfio
11445 eval $setvar
11446 case "$d_sfio" in
11447 $define) usesfio='true';;
11448 *) usesfio='false';;
11449 esac
11450 case "$d_sfio" in
11451 $define) ;;
11452 *)      : Remove sfio from list of libraries to use
11453         set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
11454         shift
11455         libs="$*"
11456         echo "libs = $libs" >&4
11457 ;;
11458 esac
11459
11460
11461 : see if shmctl exists
11462 set shmctl d_shmctl
11463 eval $inlibc
11464
11465 : see if shmget exists
11466 set shmget d_shmget
11467 eval $inlibc
11468
11469 : see if shmat exists
11470 set shmat d_shmat
11471 eval $inlibc
11472 : see what shmat returns
11473 case "$d_shmat" in
11474 "$define")
11475         $cat >shmat.c <<'END'
11476 #include <sys/shm.h>
11477 void *shmat();
11478 END
11479         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
11480                 shmattype='void *'
11481         else
11482                 shmattype='char *'
11483         fi
11484         echo "and it returns ($shmattype)." >&4
11485         : see if a prototype for shmat is available
11486         xxx=`./findhdr sys/shm.h`
11487         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
11488         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
11489                 val="$define"
11490         else
11491                 val="$undef"
11492         fi
11493         $rm -f shmat.[co]
11494         ;;
11495 *)
11496         val="$undef"
11497         ;;
11498 esac
11499 set d_shmatprototype
11500 eval $setvar
11501
11502 : see if shmdt exists
11503 set shmdt d_shmdt
11504 eval $inlibc
11505
11506 : see how much of the 'shm*(2)' library is present.
11507 h_shm=true
11508 echo " "
11509 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
11510 *"$undef"*) h_shm=false;;
11511 esac
11512 case "$osname" in
11513 freebsd)
11514     case "`ipcs 2>&1`" in
11515     "SVID shared memory"*"not configured"*)
11516         echo "Your $osname does not have the shm*(2) configured." >&4
11517         h_shm=false
11518         val="$undef"
11519         set shmctl d_shmctl
11520         evat $setvar
11521         set shmget d_shmget
11522         evat $setvar
11523         set shmat d_shmat
11524         evat $setvar
11525         set shmdt d_shmdt
11526         evat $setvar
11527         ;;
11528     esac
11529     ;;
11530 esac
11531 : we could also check for sys/ipc.h ...
11532 if $h_shm && $test `./findhdr sys/shm.h`; then
11533         echo "You have the full shm*(2) library." >&4
11534         val="$define"
11535 else
11536         echo "You don't have the full shm*(2) library." >&4
11537         val="$undef"
11538 fi
11539 set d_shm
11540 eval $setvar
11541
11542 echo " "
11543 : see if we have sigaction
11544 if set sigaction val -f d_sigaction; eval $csym; $val; then
11545         echo 'sigaction() found.' >&4
11546         $cat > try.c <<'EOP'
11547 #include <stdio.h>
11548 #include <sys/types.h>
11549 #include <signal.h>
11550 int main()
11551 {
11552     struct sigaction act, oact;
11553     act.sa_flags = 0;
11554     oact.sa_handler = 0;
11555     /* so that act and oact are used */
11556     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
11557 }
11558 EOP
11559         set try
11560         if eval $compile_ok; then
11561                 val="$define"
11562         else
11563                 echo "But you don't seem to have a useable struct sigaction." >&4
11564                 val="$undef"
11565         fi
11566 else
11567         echo 'sigaction NOT found.' >&4
11568         val="$undef"
11569 fi
11570 set d_sigaction; eval $setvar
11571 $rm -f try try$_o try.c
11572
11573 : see if sigprocmask exists
11574 set sigprocmask d_sigprocmask
11575 eval $inlibc
11576
11577 : see if sigsetjmp exists
11578 echo " "
11579 case "$d_sigsetjmp" in
11580 '')
11581         $cat >try.c <<'EOP'
11582 #include <setjmp.h>
11583 sigjmp_buf env;
11584 int set = 1;
11585 int main()
11586 {
11587         if (sigsetjmp(env,1))
11588                 exit(set);
11589         set = 0;
11590         siglongjmp(env, 1);
11591         exit(1);
11592 }
11593 EOP
11594         set try
11595         if eval $compile; then
11596                 if ./try >/dev/null 2>&1; then
11597                         echo "POSIX sigsetjmp found." >&4
11598                         val="$define"
11599                 else
11600                         $cat >&4 <<EOM
11601 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
11602 I'll ignore them.
11603 EOM
11604                         val="$undef"
11605                 fi
11606         else
11607                 echo "sigsetjmp not found." >&4
11608                 val="$undef"
11609         fi
11610         ;;
11611 *) val="$d_sigsetjmp"
11612         case "$d_sigsetjmp" in
11613         $define) echo "POSIX sigsetjmp found." >&4;;
11614         $undef) echo "sigsetjmp not found." >&4;;
11615         esac
11616         ;;
11617 esac
11618 set d_sigsetjmp
11619 eval $setvar
11620 $rm -f try.c try
11621
11622 : see if socks5_init exists
11623 set socks5_init d_socks5_init
11624 eval $inlibc
11625
11626 : see if sys/stat.h is available
11627 set sys/stat.h i_sysstat
11628 eval $inhdr
11629
11630
11631 : see if stat knows about block sizes
11632 echo " "
11633 echo "Checking to see if your struct stat has st_blocks field..." >&4
11634 set d_statblks stat st_blocks $i_sysstat sys/stat.h
11635 eval $hasfield
11636
11637
11638 : see if this is a sys/vfs.h system
11639 set sys/vfs.h i_sysvfs
11640 eval $inhdr
11641
11642
11643 : see if this is a sys/statfs.h system
11644 set sys/statfs.h i_sysstatfs
11645 eval $inhdr
11646
11647
11648 echo " "
11649 echo "Checking to see if your system supports struct statfs..." >&4
11650 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
11651 eval $hasstruct
11652 case "$d_statfs_s" in
11653 "$define")      echo "Yes, it does."   ;;
11654 *)              echo "No, it doesn't." ;;
11655 esac
11656
11657
11658
11659 : see if struct statfs knows about f_flags
11660 case "$d_statfs_s" in
11661 define) 
11662         echo " "
11663         echo "Checking to see if your struct statfs has f_flags field..." >&4
11664         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
11665         eval $hasfield
11666         ;;
11667 *)      val="$undef"
11668         set d_statfs_f_flags
11669         eval $setvar
11670         ;;
11671 esac
11672 case "$d_statfs_f_flags" in
11673 "$define")      echo "Yes, it does."   ;;
11674 *)              echo "No, it doesn't." ;;
11675 esac
11676
11677 : see if _ptr and _cnt from stdio act std
11678 echo " "
11679
11680 if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
11681         echo "(Looks like you have stdio.h from BSD.)"
11682         case "$stdio_ptr" in
11683         '') stdio_ptr='((fp)->_p)'
11684                 ptr_lval=$define
11685                 ;;
11686         *)      ptr_lval=$d_stdio_ptr_lval;;
11687         esac
11688         case "$stdio_cnt" in
11689         '') stdio_cnt='((fp)->_r)'
11690                 cnt_lval=$define
11691                 ;;
11692         *)      cnt_lval=$d_stdio_cnt_lval;;
11693         esac
11694         case "$stdio_base" in
11695         '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
11696         esac
11697         case "$stdio_bufsiz" in
11698         '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
11699         esac
11700 elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
11701         echo "(Looks like you have stdio.h from Linux.)"
11702         case "$stdio_ptr" in
11703         '') stdio_ptr='((fp)->_IO_read_ptr)'
11704                 ptr_lval=$define
11705                 ;;
11706         *)      ptr_lval=$d_stdio_ptr_lval;;
11707         esac
11708         case "$stdio_cnt" in
11709         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
11710                 cnt_lval=$undef
11711                 ;;
11712         *)      cnt_lval=$d_stdio_cnt_lval;;
11713         esac
11714         case "$stdio_base" in
11715         '') stdio_base='((fp)->_IO_read_base)';;
11716         esac
11717         case "$stdio_bufsiz" in
11718         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
11719         esac
11720 else
11721         case "$stdio_ptr" in
11722         '') stdio_ptr='((fp)->_ptr)'
11723                 ptr_lval=$define
11724                 ;;
11725         *)      ptr_lval=$d_stdio_ptr_lval;;
11726         esac
11727         case "$stdio_cnt" in
11728         '') stdio_cnt='((fp)->_cnt)'
11729                 cnt_lval=$define
11730                 ;;
11731         *)      cnt_lval=$d_stdio_cnt_lval;;
11732         esac
11733         case "$stdio_base" in
11734         '') stdio_base='((fp)->_base)';;
11735         esac
11736         case "$stdio_bufsiz" in
11737         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
11738         esac
11739 fi
11740
11741 : test whether _ptr and _cnt really work
11742 echo "Checking how std your stdio is..." >&4
11743 $cat >try.c <<EOP
11744 #include <stdio.h>
11745 #define FILE_ptr(fp)    $stdio_ptr
11746 #define FILE_cnt(fp)    $stdio_cnt
11747 int main() {
11748         FILE *fp = fopen("try.c", "r");
11749         char c = getc(fp);
11750         if (
11751                 18 <= FILE_cnt(fp) &&
11752                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
11753         )
11754                 exit(0);
11755         exit(1);
11756 }
11757 EOP
11758 val="$undef"
11759 set try
11760 if eval $compile; then
11761         if ./try; then
11762                 echo "Your stdio acts pretty std."
11763                 val="$define"
11764         else
11765                 echo "Your stdio isn't very std."
11766         fi
11767 else
11768         echo "Your stdio doesn't appear very std."
11769 fi
11770 $rm -f try.c try
11771 set d_stdstdio
11772 eval $setvar
11773
11774 : Can _ptr be used as an lvalue?
11775 case "$d_stdstdio$ptr_lval" in
11776 $define$define) val=$define ;;
11777 *) val=$undef ;;
11778 esac
11779 set d_stdio_ptr_lval
11780 eval $setvar
11781
11782 : Can _cnt be used as an lvalue?
11783 case "$d_stdstdio$cnt_lval" in
11784 $define$define) val=$define ;;
11785 *) val=$undef ;;
11786 esac
11787 set d_stdio_cnt_lval
11788 eval $setvar
11789
11790
11791 : test whether setting _ptr sets _cnt as a side effect
11792 d_stdio_ptr_lval_sets_cnt="$undef"
11793 d_stdio_ptr_lval_nochange_cnt="$undef"
11794 case "$d_stdio_ptr_lval$d_stdstdio" in
11795 $define$define)
11796         echo "Checking to see what happens if we set the stdio ptr..." >&4
11797 $cat >try.c <<EOP
11798 #include <stdio.h>
11799 /* Can we scream? */
11800 /* Eat dust sed :-) */
11801 /* In the buffer space, no one can hear you scream. */
11802 #define FILE_ptr(fp)    $stdio_ptr
11803 #define FILE_cnt(fp)    $stdio_cnt
11804 #include <sys/types.h>
11805 int main() {
11806         FILE *fp = fopen("try.c", "r");
11807         int c;
11808         char *ptr;
11809         size_t cnt;
11810         if (!fp) {
11811             puts("Fail even to read");
11812             exit(1);
11813         }
11814         c = getc(fp); /* Read away the first # */
11815         if (c == EOF) {
11816             puts("Fail even to read");
11817             exit(1);
11818         }
11819         if (!(
11820                 18 <= FILE_cnt(fp) &&
11821                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
11822         )) {
11823                 puts("Fail even to read");
11824                 exit (1);
11825         }
11826         ptr = (char*) FILE_ptr(fp);
11827         cnt = (size_t)FILE_cnt(fp);
11828
11829         FILE_ptr(fp) += 42;
11830
11831         if ((char*)FILE_ptr(fp) != (ptr + 42)) {
11832                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
11833                 exit (1);
11834         }
11835         if (FILE_cnt(fp) <= 20) {
11836                 printf ("Fail (<20 chars to test)");
11837                 exit (1);
11838         }
11839         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
11840                 puts("Fail compare");
11841                 exit (1);
11842         }
11843         if (cnt == FILE_cnt(fp)) {
11844                 puts("Pass_unchanged");
11845                 exit (0);
11846         }       
11847         if (FILE_cnt(fp) == (cnt - 42)) {
11848                 puts("Pass_changed");
11849                 exit (0);
11850         }
11851         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
11852         return 1;
11853
11854 }
11855 EOP
11856         set try
11857         if eval $compile; then
11858                 case `./try$exe_ext` in
11859                 Pass_changed)
11860                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
11861                         d_stdio_ptr_lval_sets_cnt="$define" ;;
11862                 Pass_unchanged)
11863                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
11864                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
11865                 Fail*)
11866                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
11867                 *)
11868                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
11869         esac
11870         else
11871                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
11872         fi
11873         $rm -f try.c try
11874         ;;
11875 esac
11876
11877 : see if _base is also standard
11878 val="$undef"
11879 case "$d_stdstdio" in
11880 $define)
11881         $cat >try.c <<EOP
11882 #include <stdio.h>
11883 #define FILE_base(fp)   $stdio_base
11884 #define FILE_bufsiz(fp) $stdio_bufsiz
11885 int main() {
11886         FILE *fp = fopen("try.c", "r");
11887         char c = getc(fp);
11888         if (
11889                 19 <= FILE_bufsiz(fp) &&
11890                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
11891         )
11892                 exit(0);
11893         exit(1);
11894 }
11895 EOP
11896         set try
11897         if eval $compile; then
11898                 if ./try; then
11899                         echo "And its _base field acts std."
11900                         val="$define"
11901                 else
11902                         echo "But its _base field isn't std."
11903                 fi
11904         else
11905                 echo "However, it seems to be lacking the _base field."
11906         fi
11907         $rm -f try.c try
11908         ;;
11909 esac
11910 set d_stdiobase
11911 eval $setvar
11912
11913 $cat >&4 <<EOM
11914 Checking how to access stdio streams by file descriptor number...
11915 EOM
11916 case "$stdio_stream_array" in
11917 '')     $cat >try.c <<EOCP
11918 #include <stdio.h>
11919 int main() {
11920   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
11921     printf("yes\n");
11922 }
11923 EOCP
11924         for s in _iob __iob __sF
11925         do
11926                 set try -DSTDIO_STREAM_ARRAY=$s
11927                 if eval $compile; then
11928                         case "`./try$exe_ext`" in
11929                         yes)    stdio_stream_array=$s; break ;;
11930                         esac
11931                 fi
11932         done
11933         $rm -f try.* try$exe_ext
11934 esac
11935 case "$stdio_stream_array" in
11936 '')     $cat >&4 <<EOM
11937 I can't figure out how to access stdio streams by file descriptor number.
11938 EOM
11939         d_stdio_stream_array="$undef"
11940         ;;
11941 *)      $cat >&4 <<EOM
11942 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
11943 EOM
11944         d_stdio_stream_array="$define"
11945         ;;
11946 esac
11947
11948 : see if strcoll exists
11949 set strcoll d_strcoll
11950 eval $inlibc
11951
11952 : check for structure copying
11953 echo " "
11954 echo "Checking to see if your C compiler can copy structs..." >&4
11955 $cat >try.c <<'EOCP'
11956 int main()
11957 {
11958         struct blurfl {
11959                 int dyick;
11960         } foo, bar;
11961
11962         foo = bar;
11963 }
11964 EOCP
11965 if $cc -c try.c >/dev/null 2>&1 ; then
11966         val="$define"
11967         echo "Yup, it can."
11968 else
11969         val="$undef"
11970         echo "Nope, it can't."
11971 fi
11972 set d_strctcpy
11973 eval $setvar
11974 $rm -f try.*
11975
11976 : see if strerror and/or sys_errlist[] exist
11977 echo " "
11978 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
11979     if set strerror val -f d_strerror; eval $csym; $val; then
11980                 echo 'strerror() found.' >&4
11981                 d_strerror="$define"
11982                 d_strerrm='strerror(e)'
11983                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11984                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
11985                         d_syserrlst="$define"
11986                 else
11987                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
11988                         d_syserrlst="$undef"
11989                 fi
11990     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
11991                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
11992                 echo 'strerror() found in string header.' >&4
11993                 d_strerror="$define"
11994                 d_strerrm='strerror(e)'
11995                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11996                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
11997                                 d_syserrlst="$define"
11998                 else
11999                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
12000                         d_syserrlst="$undef"
12001                 fi
12002     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
12003                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
12004                 d_strerror="$undef"
12005                 d_syserrlst="$define"
12006                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
12007     else
12008                 echo 'strerror() and sys_errlist[] NOT found.' >&4
12009                 d_strerror="$undef"
12010                 d_syserrlst="$undef"
12011                 d_strerrm='"unknown"'
12012     fi
12013 fi
12014
12015 : see if strtod exists
12016 set strtod d_strtod
12017 eval $inlibc
12018
12019 : see if strtol exists
12020 set strtol d_strtol
12021 eval $inlibc
12022
12023 : see if strtold exists
12024 set strtold d_strtold
12025 eval $inlibc
12026
12027 : see if strtoll exists
12028 set strtoll d_strtoll
12029 eval $inlibc
12030
12031 case "$d_longlong-$d_strtoll" in
12032 "$define-$define")
12033         $cat <<EOM
12034 Checking whether your strtoll() works okay...
12035 EOM
12036         $cat >try.c <<'EOCP'
12037 #include <errno.h>
12038 #ifdef __hpux
12039 #define strtoll __strtoll
12040 #endif
12041 #ifdef __EMX__
12042 #define strtoll _strtoll
12043 #endif
12044 #include <stdio.h>
12045 extern long long int strtoll(char *s, char **, int); 
12046 static int bad = 0;
12047 int check(char *s, long long ell, int een) {
12048         long long gll;
12049         errno = 0;
12050         gll = strtoll(s, 0, 10);
12051         if (!((gll == ell) && (errno == een)))
12052                 bad++;
12053 }
12054 int main() {
12055         check(" 1",                                      1LL, 0);
12056         check(" 0",                                      0LL, 0);
12057         check("-1",                                     -1LL, 0);
12058         check("-9223372036854775808", -9223372036854775808LL, 0);
12059         check("-9223372036854775808", -9223372036854775808LL, 0);
12060         check(" 9223372036854775807",  9223372036854775807LL, 0);
12061         check("-9223372036854775808", -9223372036854775808LL, 0);
12062         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
12063         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
12064         if (!bad)
12065                 printf("ok\n");
12066 }
12067 EOCP
12068         set try
12069         if eval $compile; then
12070                 yyy=`./try`
12071                 case "$yyy" in
12072                 ok) echo "Your strtoll() seems to be working okay." ;;
12073                 *) cat <<EOM >&4
12074 Your strtoll() doesn't seem to be working okay.
12075 EOM
12076                    d_strtoll="$undef"
12077                    ;;
12078                 esac
12079         else
12080                 echo "(I can't seem to compile the test program--assuming it doesn't)"
12081                 d_strtoll="$undef"
12082         fi
12083         ;;
12084 esac
12085
12086 : see if strtoq exists
12087 set strtoq d_strtoq
12088 eval $inlibc
12089
12090 : see if strtoul exists
12091 set strtoul d_strtoul
12092 eval $inlibc
12093
12094 case "$d_strtoul" in
12095 "$define")
12096         $cat <<EOM
12097 Checking whether your strtoul() works okay...
12098 EOM
12099         $cat >try.c <<'EOCP'
12100 #include <errno.h>
12101 #include <stdio.h>
12102 extern unsigned long int strtoul(char *s, char **, int); 
12103 static int bad = 0;
12104 void check(char *s, unsigned long eul, int een) {
12105         unsigned long gul;
12106         errno = 0;
12107         gul = strtoul(s, 0, 10);
12108         if (!((gul == eul) && (errno == een)))
12109                 bad++;
12110 }
12111 int main() {
12112         check(" 1", 1L, 0);
12113         check(" 0", 0L, 0);
12114 EOCP
12115         case "$longsize" in
12116         8)
12117             $cat >>try.c <<'EOCP'
12118         check("18446744073709551615", 18446744073709551615UL, 0);
12119         check("18446744073709551616", 18446744073709551615UL, ERANGE);
12120 #if 0 /* strtoul() for /^-/ strings is undefined. */
12121         check("-1", 18446744073709551615UL, 0);
12122         check("-18446744073709551614", 2, 0);
12123         check("-18446744073709551615", 1, 0);
12124         check("-18446744073709551616", 18446744073709551615UL, ERANGE);
12125         check("-18446744073709551617", 18446744073709551615UL, ERANGE);
12126 #endif
12127 EOCP
12128                 ;;
12129         4)
12130                     $cat >>try.c <<'EOCP'
12131         check("4294967295", 4294967295UL, 0);
12132         check("4294967296", 4294967295UL, ERANGE);
12133 #if 0 /* strtoul() for /^-/ strings is undefined. */
12134         check("-1", 4294967295UL, 0);
12135         check("-4294967294", 2, 0);
12136         check("-4294967295", 1, 0);
12137         check("-4294967296", 4294967295UL, ERANGE);
12138         check("-4294967297", 4294967295UL, ERANGE);
12139 #endif
12140 EOCP
12141                 ;;
12142         *)
12143 : Should we write these tests to be more portable by sprintf-ing
12144 : ~0 and then manipulating that char string as input for strtol?
12145                 ;;
12146         esac
12147         $cat >>try.c <<'EOCP'
12148         if (!bad)
12149                 printf("ok\n");
12150         return 0;
12151 }
12152 EOCP
12153         set try
12154         if eval $compile; then
12155                 case "`./try`" in
12156                 ok) echo "Your strtoul() seems to be working okay." ;;
12157                 *) cat <<EOM >&4
12158 Your strtoul() doesn't seem to be working okay.
12159 EOM
12160                    d_strtoul="$undef"
12161                    ;;
12162                 esac
12163         fi
12164         ;;
12165 esac
12166
12167 : see if strtoull exists
12168 set strtoull d_strtoull
12169 eval $inlibc
12170
12171 case "$d_longlong-$d_strtoull" in
12172 "$define-$define")
12173         $cat <<EOM
12174 Checking whether your strtoull() works okay...
12175 EOM
12176         $cat >try.c <<'EOCP'
12177 #include <errno.h>
12178 #ifdef __hpux
12179 #define strtoull __strtoull
12180 #endif
12181 #include <stdio.h>
12182 extern unsigned long long int strtoull(char *s, char **, int); 
12183 static int bad = 0;
12184 int check(char *s, long long eull, int een) {
12185         long long gull;
12186         errno = 0;
12187         gull = strtoull(s, 0, 10);
12188         if (!((gull == eull) && (errno == een)))
12189                 bad++;
12190 }
12191 int main() {
12192         check(" 1",                                        1LL, 0);
12193         check(" 0",                                        0LL, 0);
12194         check("18446744073709551615",  18446744073709551615ULL, 0);
12195         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
12196 #if 0 /* strtoull() for /^-/ strings is undefined. */
12197         check("-1",                    18446744073709551615ULL, 0);
12198         check("-18446744073709551614",                     2LL, 0);
12199         check("-18446744073709551615",                     1LL, 0);
12200         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
12201         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
12202 #endif
12203         if (!bad)
12204                 printf("ok\n");
12205 }
12206 EOCP
12207         set try
12208         if eval $compile; then
12209                 case "`./try`" in
12210                 ok) echo "Your strtoull() seems to be working okay." ;;
12211                 *) cat <<EOM >&4
12212 Your strtoull() doesn't seem to be working okay.
12213 EOM
12214                    d_strtoull="$undef"
12215                    ;;
12216                 esac
12217         fi
12218         ;;
12219 esac
12220
12221 : see if strtouq exists
12222 set strtouq d_strtouq
12223 eval $inlibc
12224
12225 case "$d_strtouq" in
12226 "$define")
12227         $cat <<EOM
12228 Checking whether your strtouq() works okay...
12229 EOM
12230         $cat >try.c <<'EOCP'
12231 #include <errno.h>
12232 #include <stdio.h>
12233 extern unsigned long long int strtouq(char *s, char **, int); 
12234 static int bad = 0;
12235 void check(char *s, unsigned long long eull, int een) {
12236         unsigned long long gull;
12237         errno = 0;
12238         gull = strtouq(s, 0, 10);
12239         if (!((gull == eull) && (errno == een)))
12240                 bad++;
12241 }
12242 int main() {
12243         check(" 1",                                        1LL, 0);
12244         check(" 0",                                        0LL, 0);
12245         check("18446744073709551615",  18446744073709551615ULL, 0);
12246         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
12247 #if 0 /* strtouq() for /^-/ strings is undefined. */
12248         check("-1",                    18446744073709551615ULL, 0);
12249         check("-18446744073709551614",                     2LL, 0);
12250         check("-18446744073709551615",                     1LL, 0);
12251         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
12252         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
12253 #endif
12254         if (!bad)
12255                 printf("ok\n");
12256         return 0;
12257 }
12258 EOCP
12259         set try
12260         if eval $compile; then
12261                 case "`./try`" in
12262                 ok) echo "Your strtouq() seems to be working okay." ;;
12263                 *) cat <<EOM >&4
12264 Your strtouq() doesn't seem to be working okay.
12265 EOM
12266                    d_strtouq="$undef"
12267                    ;;
12268                 esac
12269         fi
12270         ;;
12271 esac
12272
12273 : see if strxfrm exists
12274 set strxfrm d_strxfrm
12275 eval $inlibc
12276
12277 : see if symlink exists
12278 set symlink d_symlink
12279 eval $inlibc
12280
12281 : see if syscall exists
12282 set syscall d_syscall
12283 eval $inlibc
12284
12285 : see if sysconf exists
12286 set sysconf d_sysconf
12287 eval $inlibc
12288
12289 : see if system exists
12290 set system d_system
12291 eval $inlibc
12292
12293 : see if tcgetpgrp exists
12294 set tcgetpgrp d_tcgetpgrp
12295 eval $inlibc
12296
12297 : see if tcsetpgrp exists
12298 set tcsetpgrp d_tcsetpgrp
12299 eval $inlibc
12300
12301 : see if prototype for telldir is available
12302 echo " "
12303 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
12304 eval $hasproto
12305
12306 : see if this is a sys/times.h system
12307 set sys/times.h i_systimes
12308 eval $inhdr
12309
12310 : see if times exists
12311 echo " "
12312 if set times val -f d_times; eval $csym; $val; then
12313         echo 'times() found.' >&4
12314         d_times="$define"
12315         inc=''
12316         case "$i_systimes" in
12317         "$define") inc='sys/times.h';;
12318         esac
12319         rp="What is the type returned by times() on this system?"
12320         set clock_t clocktype long stdio.h sys/types.h $inc
12321         eval $typedef_ask
12322 else
12323         echo 'times() NOT found, hope that will do.' >&4
12324         d_times="$undef"
12325         clocktype='int'
12326 fi
12327
12328 : see if truncate exists
12329 set truncate d_truncate
12330 eval $inlibc
12331
12332 : see if tzname[] exists
12333 echo " "
12334 if set tzname val -a d_tzname; eval $csym; $val; then
12335         val="$define"
12336         echo 'tzname[] found.' >&4
12337 else
12338         val="$undef"
12339         echo 'tzname[] NOT found.' >&4
12340 fi
12341 set d_tzname
12342 eval $setvar
12343
12344 : see if umask exists
12345 set umask d_umask
12346 eval $inlibc
12347
12348 : see if ustat exists
12349 set ustat d_ustat
12350 eval $inlibc
12351
12352 : backward compatibility for d_hvfork
12353 if test X$d_hvfork != X; then
12354         d_vfork="$d_hvfork"
12355         d_hvfork=''
12356 fi
12357 : see if there is a vfork
12358 val=''
12359 set vfork val
12360 eval $inlibc
12361
12362 : Ok, but do we want to use it. vfork is reportedly unreliable in 
12363 : perl on Solaris 2.x, and probably elsewhere.
12364 case "$val" in
12365 $define)
12366         echo " "
12367         case "$usevfork" in
12368         false) dflt='n';;
12369         *) dflt='y';;
12370         esac
12371         cat <<'EOM'
12372  
12373 Perl can only use a vfork() that doesn't suffer from strict
12374 restrictions on calling functions or modifying global data in
12375 the child.  For example, glibc-2.1 contains such a vfork()
12376 that is unsuitable.  If your system provides a proper fork()
12377 call, chances are that you do NOT want perl to use vfork().
12378
12379 EOM
12380         rp="Do you still want to use vfork()?"
12381         . ./myread
12382         case "$ans" in
12383         y|Y) ;;
12384         *)
12385                 echo "Ok, we won't use vfork()."
12386                 val="$undef"
12387                 ;;
12388         esac
12389         ;;
12390 esac
12391 set d_vfork
12392 eval $setvar
12393 case "$d_vfork" in
12394 $define) usevfork='true';;
12395 *) usevfork='false';;
12396 esac
12397
12398 : see if this is an sysdir system
12399 set sys/dir.h i_sysdir
12400 eval $inhdr
12401
12402 : see if this is an sysndir system
12403 set sys/ndir.h i_sysndir
12404 eval $inhdr
12405
12406 : see if closedir exists
12407 set closedir d_closedir
12408 eval $inlibc
12409
12410 case "$d_closedir" in
12411 "$define")
12412         echo " "
12413         echo "Checking whether closedir() returns a status..." >&4
12414         cat > closedir.c <<EOM
12415 #$i_dirent I_DIRENT             /**/
12416 #$i_sysdir I_SYS_DIR            /**/
12417 #$i_sysndir I_SYS_NDIR          /**/
12418 #$i_systypes I_SYS_TYPES        /**/
12419
12420 #if defined(I_SYS_TYPES)
12421 #include <sys/types.h>
12422 #endif
12423 #if defined(I_DIRENT)
12424 #include <dirent.h>
12425 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
12426 #include <sys/dir.h>
12427 #endif
12428 #else
12429 #ifdef I_SYS_NDIR
12430 #include <sys/ndir.h>
12431 #else
12432 #ifdef I_SYS_DIR
12433 #ifdef hp9000s500
12434 #include <ndir.h>       /* may be wrong in the future */
12435 #else
12436 #include <sys/dir.h>
12437 #endif
12438 #endif
12439 #endif
12440 #endif 
12441 int main() { return closedir(opendir(".")); }
12442 EOM
12443         set closedir
12444         if eval $compile_ok; then
12445                 if ./closedir > /dev/null 2>&1 ; then
12446                         echo "Yes, it does."
12447                         val="$undef"
12448                 else
12449                         echo "No, it doesn't."
12450                         val="$define"
12451                 fi
12452         else
12453                 echo "(I can't seem to compile the test program--assuming it doesn't)"
12454                 val="$define"
12455         fi
12456         ;;
12457 *)
12458         val="$undef";
12459         ;;
12460 esac
12461 set d_void_closedir
12462 eval $setvar
12463 $rm -f closedir*
12464 : see if there is a wait4
12465 set wait4 d_wait4
12466 eval $inlibc
12467
12468 : see if waitpid exists
12469 set waitpid d_waitpid
12470 eval $inlibc
12471
12472 : see if wcstombs exists
12473 set wcstombs d_wcstombs
12474 eval $inlibc
12475
12476 : see if wctomb exists
12477 set wctomb d_wctomb
12478 eval $inlibc
12479
12480 : preserve RCS keywords in files with variable substitution, grrr
12481 Date='$Date'
12482 Id='$Id'
12483 Log='$Log'
12484 RCSfile='$RCSfile'
12485 Revision='$Revision'
12486
12487 case "$crosscompile" in
12488 ''|[nN]*) crosscompile="$undef" ;;
12489 esac
12490
12491 case "$osname" in
12492 next|rhapsody|darwin) multiarch="$define" ;;
12493 esac
12494 case "$multiarch" in
12495 ''|[nN]*) multiarch="$undef" ;;
12496 esac
12497
12498 : check for alignment requirements
12499 echo " "
12500 case "$crosscompile$multiarch" in
12501 *$define*)
12502         $cat <<EOM
12503 You seem to be either cross-compiling or doing a multiarchitecture build,
12504 skipping the memory alignment check.
12505
12506 EOM
12507         case "$alignbytes" in
12508         '') alignbytes=8 ;;
12509         esac
12510         ;;
12511 *)
12512         case "$alignbytes" in
12513         '') echo "Checking alignment constraints..." >&4
12514                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
12515                         $cat >try.c <<'EOCP'
12516 typedef long double NV;
12517 EOCP
12518                 else
12519                         $cat >try.c <<'EOCP'
12520 typedef double NV;
12521 EOCP
12522                 fi
12523                 $cat >>try.c <<'EOCP'
12524 #include <stdio.h>
12525 struct foobar {
12526         char foo;
12527         NV bar;
12528 } try_algn;
12529 int main()
12530 {
12531     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
12532     return(0);
12533 }
12534 EOCP
12535                 set try
12536                 if eval $compile_ok; then
12537                         dflt=`./try`
12538                 else
12539                         dflt='8'
12540                         echo "(I can't seem to compile the test program...)"
12541                 fi
12542                 ;;
12543         *) dflt="$alignbytes"
12544                 ;;
12545         esac
12546         rp="Doubles must be aligned on a how-many-byte boundary?"
12547         . ./myread
12548         alignbytes="$ans"
12549         $rm -f try.c try
12550         ;;
12551 esac
12552
12553
12554 : set the base revision
12555 baserev=5.0
12556
12557 : check for ordering of bytes in a long
12558 echo " "
12559 case "$crosscompile$multiarch" in
12560 *$define*)
12561         $cat <<EOM
12562 You seem to be either cross-compiling or doing a multiarchitecture build,
12563 skipping the byteorder check.
12564
12565 EOM
12566         byteorder='0xffff'
12567         ;;
12568 *)
12569         case "$byteorder" in
12570         '')
12571                 $cat <<'EOM'
12572 In the following, larger digits indicate more significance.  A big-endian
12573 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
12574 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
12575 machines may have weird orders like 3412.  A Cray will report 87654321,
12576 an Alpha will report 12345678. If the test program works the default is
12577 probably right.
12578 I'm now running the test program...
12579 EOM
12580                 $cat >try.c <<'EOCP'
12581 #include <stdio.h>
12582 int main()
12583 {
12584         int i;
12585         union {
12586                 unsigned long l;
12587                 char c[sizeof(long)];
12588         } u;
12589
12590         if (sizeof(long) > 4)
12591                 u.l = (0x08070605L << 32) | 0x04030201L;
12592         else
12593                 u.l = 0x04030201L;
12594         for (i = 0; i < sizeof(long); i++)
12595                 printf("%c", u.c[i]+'0');
12596         printf("\n");
12597         exit(0);
12598 }
12599 EOCP
12600                 xxx_prompt=y
12601                 set try
12602                 if eval $compile && ./try > /dev/null; then
12603                         dflt=`./try`
12604                         case "$dflt" in
12605                         [1-4][1-4][1-4][1-4]|12345678|87654321)
12606                                 echo "(The test program ran ok.)"
12607                                 echo "byteorder=$dflt"
12608                                 xxx_prompt=n
12609                         ;;
12610                         ????|????????) echo "(The test program ran ok.)" ;;
12611                         *) echo "(The test program didn't run right for some reason.)" ;;
12612                         esac
12613                 else
12614                         dflt='4321'
12615                         cat <<'EOM'
12616 (I can't seem to compile the test program.  Guessing big-endian...)
12617 EOM
12618                 fi
12619                 case "$xxx_prompt" in
12620                 y)
12621                         rp="What is the order of bytes in a long?"
12622                         . ./myread
12623                         byteorder="$ans"
12624                         ;;
12625                 *)      byteorder=$dflt
12626                         ;;
12627                 esac
12628                 ;;
12629         esac
12630         $rm -f try.c try
12631         ;;
12632 esac
12633
12634
12635 : how do we catenate cpp tokens here?
12636 echo " "
12637 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
12638 $cat >cpp_stuff.c <<'EOCP'
12639 #define RCAT(a,b)a/**/b
12640 #define ACAT(a,b)a ## b
12641 RCAT(Rei,ser)
12642 ACAT(Cir,cus)
12643 EOCP
12644 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
12645 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
12646         echo "Oh!  Smells like ANSI's been here." >&4
12647         echo "We can catify or stringify, separately or together!"
12648         cpp_stuff=42
12649 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
12650         echo "Ah, yes!  The good old days!" >&4
12651         echo "However, in the good old days we don't know how to stringify and"
12652         echo "catify at the same time."
12653         cpp_stuff=1
12654 else
12655         $cat >&4 <<EOM
12656 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
12657 to have to edit the values of CAT[2-5] in config.h...
12658 EOM
12659         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
12660 fi
12661 $rm -f cpp_stuff.*
12662
12663 : see if this is a db.h system
12664 set db.h i_db
12665 eval $inhdr
12666
12667 case "$i_db" in
12668 $define)
12669         : Check db version.
12670         echo " "
12671         echo "Checking Berkeley DB version ..." >&4
12672         $cat >try.c <<EOCP
12673 #$d_const HASCONST
12674 #ifndef HASCONST
12675 #define const
12676 #endif
12677 #include <sys/types.h>
12678 #include <stdio.h>
12679 #include <db.h>
12680 int main()
12681 {
12682 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
12683     int Major, Minor, Patch ;
12684     unsigned long Version ;
12685     (void)db_version(&Major, &Minor, &Patch) ;
12686     printf("You have Berkeley DB Version 2 or greater\n");
12687
12688     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
12689                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
12690     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
12691                 Major, Minor, Patch) ;
12692
12693     /* check that db.h & libdb are compatible */
12694     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
12695         printf("db.h and libdb are incompatible\n") ;
12696         exit(3);        
12697     }
12698
12699     printf("db.h and libdb are compatible\n") ;
12700
12701     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
12702                 + DB_VERSION_PATCH ;
12703
12704     /* needs to be >= 2.3.4 */
12705     if (Version < 2003004) {
12706     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
12707         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
12708         exit(2);        
12709     }
12710
12711     exit(0);
12712 #else
12713 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
12714     printf("You have Berkeley DB Version 1\n");
12715     exit(0);    /* DB version < 2: the coast is clear. */
12716 #else
12717     exit(1);    /* <db.h> not Berkeley DB? */
12718 #endif
12719 #endif
12720 }
12721 EOCP
12722         set try
12723         if eval $compile_ok && ./try; then
12724                 echo 'Looks OK.' >&4
12725         else
12726                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
12727                 i_db=$undef
12728                 case " $libs " in
12729                 *"-ldb "*)
12730                         : Remove db from list of libraries to use
12731                         echo "Removing unusable -ldb from library list" >&4
12732                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
12733                         shift
12734                         libs="$*"
12735                         echo "libs = $libs" >&4
12736                         ;;
12737                 esac
12738         fi
12739         $rm -f try.*
12740         ;;
12741 esac
12742
12743 case "$i_db" in
12744 define)
12745         : Check the return type needed for hash 
12746         echo " "
12747         echo "Checking return type needed for hash for Berkeley DB ..." >&4
12748         $cat >try.c <<EOCP
12749 #$d_const HASCONST
12750 #ifndef HASCONST
12751 #define const
12752 #endif
12753 #include <sys/types.h>
12754 #include <db.h>
12755
12756 #ifndef DB_VERSION_MAJOR
12757 u_int32_t hash_cb (ptr, size)
12758 const void *ptr;
12759 size_t size;
12760 {
12761 }
12762 HASHINFO info;
12763 int main()
12764 {
12765         info.hash = hash_cb;
12766 }
12767 #endif
12768 EOCP
12769         if $cc $ccflags -c try.c >try.out 2>&1 ; then
12770                 if $contains warning try.out >>/dev/null 2>&1 ; then
12771                         db_hashtype='int'
12772                 else
12773                         db_hashtype='u_int32_t'
12774                 fi
12775         else
12776                 : XXX Maybe we should just give up here.
12777                 db_hashtype=u_int32_t
12778                 $cat try.out >&4
12779                 echo "Help:  I can't seem to compile the db test program." >&4
12780                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
12781         fi
12782         $rm -f try.*
12783         echo "Your version of Berkeley DB uses $db_hashtype for hash."
12784         ;;
12785 *)      db_hashtype=u_int32_t
12786         ;;
12787 esac
12788 case "$i_db" in
12789 define)
12790         : Check the return type needed for prefix 
12791         echo " "
12792         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
12793         cat >try.c <<EOCP
12794 #$d_const HASCONST
12795 #ifndef HASCONST
12796 #define const
12797 #endif
12798 #include <sys/types.h>
12799 #include <db.h>
12800
12801 #ifndef DB_VERSION_MAJOR
12802 size_t prefix_cb (key1, key2)
12803 const DBT *key1;
12804 const DBT *key2;
12805 {
12806 }
12807 BTREEINFO info;
12808 int main()
12809 {
12810         info.prefix = prefix_cb;
12811 }
12812 #endif
12813 EOCP
12814         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
12815                 if $contains warning try.out >>/dev/null 2>&1 ; then
12816                         db_prefixtype='int'
12817                 else
12818                         db_prefixtype='size_t'
12819                 fi
12820         else
12821                 db_prefixtype='size_t'
12822                 : XXX Maybe we should just give up here.
12823                 $cat try.out >&4
12824                 echo "Help:  I can't seem to compile the db test program." >&4
12825                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
12826         fi
12827         $rm -f try.*
12828         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
12829         ;;
12830 *)      db_prefixtype='size_t'
12831         ;;
12832 esac
12833
12834 : check for void type
12835 echo " "
12836 echo "Checking to see how well your C compiler groks the void type..." >&4
12837 case "$voidflags" in
12838 '')
12839         $cat >try.c <<'EOCP'
12840 #if TRY & 1
12841 void sub() {
12842 #else
12843 sub() {
12844 #endif
12845         extern void moo();      /* function returning void */
12846         void (*goo)();          /* ptr to func returning void */
12847 #if TRY & 8
12848         void *hue;              /* generic ptr */
12849 #endif
12850 #if TRY & 2
12851         void (*foo[10])();
12852 #endif
12853
12854 #if TRY & 4
12855         if(goo == moo) {
12856                 exit(0);
12857         }
12858 #endif
12859         exit(0);
12860 }
12861 int main() { sub(); }
12862 EOCP
12863         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
12864                 voidflags=$defvoidused
12865         echo "Good.  It appears to support void to the level $package wants.">&4
12866                 if $contains warning .out >/dev/null 2>&1; then
12867                         echo "However, you might get some warnings that look like this:"
12868                         $cat .out
12869                 fi
12870         else
12871 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
12872                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
12873                         echo "It supports 1..."
12874                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
12875                                 echo "It also supports 2..."
12876                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
12877                                         voidflags=7
12878                                         echo "And it supports 4 but not 8 definitely."
12879                                 else
12880                                         echo "It doesn't support 4..."
12881                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
12882                                                 voidflags=11
12883                                                 echo "But it supports 8."
12884                                         else
12885                                                 voidflags=3
12886                                                 echo "Neither does it support 8."
12887                                         fi
12888                                 fi
12889                         else
12890                                 echo "It does not support 2..."
12891                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
12892                                         voidflags=13
12893                                         echo "But it supports 4 and 8."
12894                                 else
12895                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
12896                                                 voidflags=5
12897                                                 echo "And it supports 4 but has not heard about 8."
12898                                         else
12899                                                 echo "However it supports 8 but not 4."
12900                                         fi
12901                                 fi
12902                         fi
12903                 else
12904                         echo "There is no support at all for void."
12905                         voidflags=0
12906                 fi
12907         fi
12908 esac
12909 case "$voidflags" in
12910 "$defvoidused") ;;
12911 *)      $cat >&4 <<'EOM'
12912   Support flag bits are:
12913     1: basic void declarations.
12914     2: arrays of pointers to functions returning void.
12915     4: operations between pointers to and addresses of void functions.
12916     8: generic void pointers.
12917 EOM
12918         dflt="$voidflags";
12919         rp="Your void support flags add up to what?"
12920         . ./myread
12921         voidflags="$ans"
12922         ;;
12923 esac
12924 $rm -f try.* .out
12925
12926
12927 : How can we generate normalized random numbers ?
12928 echo " "
12929 echo "Looking for a random number function..." >&4
12930 case "$randfunc" in
12931 '')
12932         if set drand48 val -f; eval $csym; $val; then
12933                 dflt="drand48"
12934                 echo "Good, found drand48()." >&4
12935         elif set random val -f; eval $csym; $val; then
12936                 dflt="random"
12937                 echo "OK, found random()." >&4
12938         else
12939                 dflt="rand"
12940                 echo "Yick, looks like I have to use rand()." >&4
12941         fi
12942         echo " "
12943         ;;
12944 *)
12945         dflt="$randfunc"
12946         ;;
12947 esac
12948 cont=true
12949
12950 case "$ccflags" in
12951 *-Dmy_rand=*|*-Dmy_srand=*)
12952         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
12953         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
12954         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
12955         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
12956         ;;
12957 esac
12958
12959 while $test "$cont"; do
12960         rp="Use which function to generate random numbers?"
12961         . ./myread
12962         if $test "$ans" = "$dflt"; then
12963                 : null
12964         else
12965                 randbits=''
12966         fi
12967         randfunc="$ans"
12968         if set $ans val -f; eval $csym; $val; then
12969                 cont=''
12970         else
12971                 dflt=y
12972                 rp="I cannot find function $ans. Use that name anyway?"
12973                 . ./myread
12974                 dflt=rand
12975                 case "$ans" in
12976                         [yY]*) cont='';;
12977                 esac
12978         fi
12979         case "$cont" in
12980         '')
12981                 case "$randfunc" in
12982                 drand48)
12983                         drand01="drand48()"
12984                         seedfunc="srand48"
12985                         randbits=48
12986                         randseedtype=long
12987                         ;;
12988                 rand|random)
12989                         case "$randbits" in
12990                         '')
12991 echo "Checking to see how many bits your $randfunc() function produces..." >&4
12992                                 $cat >try.c <<EOCP
12993 #$i_unistd I_UNISTD
12994 #$i_stdlib I_STDLIB
12995 #include <stdio.h>
12996 #ifdef I_UNISTD
12997 #  include <unistd.h>
12998 #endif
12999 #ifdef I_STDLIB
13000 #  include <stdlib.h>
13001 #endif
13002 int main()
13003 {
13004         register int i;
13005         register unsigned long tmp;
13006         register unsigned long max = 0L;
13007
13008         for (i = 1000; i; i--) {
13009                 tmp = (unsigned long) $randfunc();
13010                 if (tmp > max) max = tmp;
13011         }
13012         for (i = 0; max; i++)
13013                 max /= 2;
13014         printf("%d\n",i);
13015 }
13016 EOCP
13017                                 set try
13018                                 if eval $compile_ok; then
13019                                         dflt=`try`
13020                                 else
13021                                         dflt='?'
13022                                         echo "(I can't seem to compile the test program...)"
13023                                 fi
13024                                 ;;
13025                         *)
13026                                 dflt="$randbits"
13027                                 ;;
13028                         esac
13029                         rp="How many bits does your $randfunc() function produce?"
13030                         . ./myread
13031                         randbits="$ans"
13032                         $rm -f try.c try
13033                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13034                         seedfunc="s$randfunc"
13035                         randseedtype=unsigned
13036                         ;;
13037                 *)
13038                         dflt="31"
13039                         rp="How many bits does your $randfunc() function produce?"
13040                         . ./myread
13041                         randbits="$ans"
13042                         seedfunc="s$randfunc"
13043                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13044                         if set $seedfunc val -f; eval $csym; $val; then
13045                                 echo "(Using $seedfunc() to seed random generator)"
13046                         else
13047                                 echo "(Warning: no $seedfunc() to seed random generator)"
13048                                 seedfunc=rand
13049                         fi
13050                         randseedtype=unsigned
13051                         ;;
13052                 esac
13053                 ;;
13054         esac
13055 done
13056
13057 echo " "
13058 echo "Determining whether or not we are on an EBCDIC system..." >&4
13059 $cat >tebcdic.c <<'EOM'
13060 int main()
13061 {
13062   if ('M'==0xd4) return 0;
13063   return 1;
13064 }
13065 EOM
13066
13067 val=$undef
13068 set tebcdic
13069 if eval $compile_ok; then
13070         if ./tebcdic; then
13071                 echo "You seem to speak EBCDIC." >&4
13072                 val="$define"
13073         else
13074                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF8." >&4
13075         fi
13076 else
13077         echo "I'm unable to compile the test program." >&4
13078         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
13079 fi
13080 $rm -f tebcdic.c tebcdic
13081 set ebcdic
13082 eval $setvar
13083
13084 echo " "
13085 $cat >&4 <<EOM
13086 Checking how to flush all pending stdio output...
13087 EOM
13088 # I only know how to find the first 32 possibly open files on SunOS.
13089 # See also hints/sunos_4_1.sh and util.c  --AD
13090 case "$osname" in
13091 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
13092 esac
13093 $cat >>try.c <<EOCP
13094 #include <stdio.h>
13095 #$i_unistd I_UNISTD
13096 #ifdef I_UNISTD
13097 # include <unistd.h>
13098 #endif
13099 #$d_sysconf HAS_SYSCONF
13100 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
13101 #ifdef HAS_STDIO_STREAM_ARRAY
13102 # define STDIO_STREAM_ARRAY $stdio_stream_array
13103 #endif
13104 int main() {
13105   FILE* p = fopen("try.out", "w");
13106 #ifdef TRY_FPUTC
13107   fputc('x', p);
13108 #else
13109 # ifdef TRY_FPRINTF
13110   fprintf(p, "x");
13111 # endif
13112 #endif
13113 #ifdef TRY_FFLUSH_NULL
13114   fflush(NULL);
13115 #endif
13116 #ifdef TRY_FFLUSH_ALL
13117   {
13118     long open_max = -1;
13119 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
13120     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
13121 # else
13122 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
13123     open_max = sysconf(_SC_OPEN_MAX);
13124 #  else
13125 #   ifdef FOPEN_MAX
13126     open_max = FOPEN_MAX;
13127 #   else
13128 #    ifdef OPEN_MAX
13129     open_max = OPEN_MAX;
13130 #    else
13131 #     ifdef _NFILE
13132     open_max = _NFILE;
13133 #     endif
13134 #    endif
13135 #   endif
13136 #  endif
13137 # endif 
13138 # ifdef HAS_STDIO_STREAM_ARRAY
13139     if (open_max > 0) {
13140       long i;
13141       for (i = 0; i < open_max; i++)
13142             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
13143                 STDIO_STREAM_ARRAY[i]._file < open_max &&
13144                 STDIO_STREAM_ARRAY[i]._flag)
13145                 fflush(&STDIO_STREAM_ARRAY[i]);
13146     }   
13147   }
13148 # endif
13149 #endif
13150   _exit(42);
13151 }
13152 EOCP
13153 : first we have to find out how _not_ to flush
13154 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
13155     output=''
13156     set try -DTRY_FPUTC
13157     if eval $compile; then
13158             $rm -f try.out
13159             ./try$exe_ext 2>/dev/null
13160             if $test ! -s try.out -a "X$?" = X42; then
13161                 output=-DTRY_FPUTC
13162             fi
13163     fi
13164     case "$output" in
13165     '')
13166             set try -DTRY_FPRINTF
13167             $rm -f try.out
13168             if eval $compile; then
13169                     $rm -f try.out
13170                     ./try$exe_ext 2>/dev/null
13171                     if $test ! -s try.out -a "X$?" = X42; then
13172                         output=-DTRY_FPRINTF
13173                     fi
13174             fi
13175         ;;
13176     esac
13177 fi
13178 : check for fflush NULL behaviour
13179 case "$fflushNULL" in
13180 '')     set try -DTRY_FFLUSH_NULL $output
13181         if eval $compile; then
13182                 $rm -f try.out
13183                 ./try$exe_ext 2>/dev/null
13184                 code="$?"
13185                 if $test -s try.out -a "X$code" = X42; then
13186                         fflushNULL="`$cat try.out`"
13187                 else
13188                         if $test "X$code" != X42; then
13189                                 $cat >&4 <<EOM
13190 (If this test failed, don't worry, we'll try another method shortly.)
13191 EOM
13192                         fi
13193                 fi
13194         fi
13195         $rm -f core try.core core.try.*
13196         case "$fflushNULL" in
13197         x)      $cat >&4 <<EOM
13198 Your fflush(NULL) works okay for output streams.
13199 Let's see if it clobbers input pipes...
13200 EOM
13201 # As of mid-March 2000 all versions of Solaris appear to have a stdio
13202 # bug that improperly flushes the input end of pipes.  So we avoid the
13203 # autoflush on fork/system/exec support for now. :-(
13204 $cat >tryp.c <<EOCP
13205 #include <stdio.h>
13206 int
13207 main(int argc, char **argv)
13208 {
13209     char buf[1024];
13210     int i;
13211     char *bp = buf;
13212     while (1) {
13213         while ((i = getc(stdin)) != -1
13214                && (*bp++ = i) != '\n'
13215                && bp < &buf[1024])
13216         /* DO NOTHING */ ;
13217         *bp = '\0';
13218         fprintf(stdout, "%s", buf);
13219         fflush(NULL);
13220         if (i == -1)
13221             return 0;
13222         bp = buf;
13223     }
13224 }
13225 EOCP
13226                 fflushNULL="$define"
13227                 set tryp
13228                 if eval $compile; then
13229                     $rm -f tryp.out
13230                     $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
13231                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
13232                        $cat >&4 <<EOM
13233 fflush(NULL) seems to behave okay with input streams.
13234 EOM
13235                         fflushNULL="$define"
13236                     else
13237                         $cat >&4 <<EOM
13238 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
13239 EOM
13240                         fflushNULL="$undef"
13241                     fi
13242                 fi
13243                 $rm -f core tryp.c tryp.core core.tryp.*
13244                 ;;
13245         '')     $cat >&4 <<EOM
13246 Your fflush(NULL) isn't working (contrary to ANSI C).
13247 EOM
13248                 fflushNULL="$undef"
13249                 ;;
13250         *)      $cat >&4 <<EOM
13251 Cannot figure out whether your fflush(NULL) works or not.
13252 I'm assuming it doesn't (contrary to ANSI C).
13253 EOM
13254                 fflushNULL="$undef"
13255                 ;;
13256         esac
13257         ;;
13258 $define|true|[yY]*)
13259         fflushNULL="$define"
13260         ;;
13261 *)
13262         fflushNULL="$undef"
13263         ;;
13264 esac
13265 : check explicit looping only if NULL did not work, and if the pipe
13266 : bug does not show up on an explicit flush too
13267 case "$fflushNULL" in
13268 "$undef")
13269         $cat >tryp.c <<EOCP
13270 #include <stdio.h>
13271 int
13272 main(int argc, char **argv)
13273 {
13274     char buf[1024];
13275     int i;
13276     char *bp = buf;
13277     while (1) {
13278         while ((i = getc(stdin)) != -1
13279                && (*bp++ = i) != '\n'
13280                && bp < &buf[1024])
13281         /* DO NOTHING */ ;
13282         *bp = '\0';
13283         fprintf(stdout, "%s", buf);
13284         fflush(stdin);
13285         if (i == -1)
13286             return 0;
13287         bp = buf;
13288     }
13289 }
13290 EOCP
13291         set tryp
13292         if eval $compile; then
13293             $rm -f tryp.out
13294             $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
13295             if cmp tryp.c tryp.out >/dev/null 2>&1; then
13296                $cat >&4 <<EOM
13297 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
13298 EOM
13299                 : now check for fflushall behaviour
13300                 case "$fflushall" in
13301                 '')     set try -DTRY_FFLUSH_ALL $output
13302                         if eval $compile; then
13303                                 $cat >&4 <<EOM
13304 (Now testing the other method--but note that this also may fail.)
13305 EOM
13306                                 $rm -f try.out
13307                                 ./try$exe_ext 2>/dev/null
13308                                 if $test -s try.out -a "X$?" = X42; then
13309                                         fflushall="`$cat try.out`"
13310                                 fi
13311                         fi
13312                         $rm -f core try.core core.try.*
13313                         case "$fflushall" in
13314                         x)      $cat >&4 <<EOM
13315 Whew. Flushing explicitly all the stdio streams works.
13316 EOM
13317                                 fflushall="$define"
13318                                 ;;
13319                         '')     $cat >&4 <<EOM
13320 Sigh. Flushing explicitly all the stdio streams doesn't work.
13321 EOM
13322                                 fflushall="$undef"
13323                                 ;;
13324                         *)      $cat >&4 <<EOM
13325 Cannot figure out whether flushing stdio streams explicitly works or not.
13326 I'm assuming it doesn't.
13327 EOM
13328                                 fflushall="$undef"
13329                                 ;;
13330                         esac
13331                         ;;
13332                 "$define"|true|[yY]*)
13333                         fflushall="$define"
13334                         ;;
13335                 *)
13336                         fflushall="$undef"
13337                         ;;
13338                 esac
13339             else
13340                 $cat >&4 <<EOM
13341 All is futile.  Even fflush(stdin) clobbers input pipes!
13342 EOM
13343                 fflushall="$undef"
13344             fi
13345         else
13346             fflushall="$undef"
13347         fi
13348         $rm -f core tryp.c tryp.core core.tryp.*
13349         ;;
13350 *)      fflushall="$undef"
13351         ;;
13352 esac
13353
13354 case "$fflushNULL$fflushall" in
13355 undefundef)
13356         $cat <<EOM
13357 OK, I give up.  I cannot figure out how to flush pending stdio output.
13358 We won't be flushing handles at all before fork/exec/popen.
13359 EOM
13360         ;;
13361 esac
13362 $rm -f try.* try$exe_ext
13363
13364 : Store the full pathname to the ar program for use in the C program
13365 : Respect a hint or command line value for full_ar.
13366 case "$full_ar" in
13367 '') full_ar=$ar ;;
13368 esac
13369
13370 : Store the full pathname to the sed program for use in the C program
13371 full_sed=$sed
13372
13373 : see what type gids are declared as in the kernel
13374 echo " "
13375 echo "Looking for the type for group ids returned by getgid()."
13376 set gid_t gidtype xxx stdio.h sys/types.h
13377 eval $typedef
13378 case "$gidtype" in
13379 xxx)
13380         xxx=`./findhdr sys/user.h`
13381         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
13382         case $1 in
13383         unsigned) dflt="$1 $2" ;;
13384         *) dflt="$1" ;;
13385         esac
13386         ;;
13387 *) dflt="$gidtype";;
13388 esac
13389 case "$gidtype" in
13390 gid_t) echo "gid_t found." ;;
13391 *)      rp="What is the type for group ids returned by getgid()?"
13392         . ./myread
13393         gidtype="$ans"
13394         ;;
13395 esac
13396
13397 echo " "
13398 case "$gidtype" in
13399 *_t) zzz="$gidtype"     ;;
13400 *)   zzz="gid"          ;;
13401 esac
13402 echo "Checking the size of $zzz..." >&4 
13403 cat > try.c <<EOCP
13404 #include <sys/types.h>
13405 #include <stdio.h>
13406 int main() {
13407     printf("%d\n", (int)sizeof($gidtype));
13408     exit(0);
13409 }
13410 EOCP
13411 set try
13412 if eval $compile_ok; then
13413         yyy=`./try`
13414         case "$yyy" in
13415         '')     gidsize=4
13416                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
13417                 ;;
13418         *)      gidsize=$yyy
13419                 echo "Your $zzz is $gidsize bytes long."
13420                 ;;
13421         esac
13422 else
13423         gidsize=4
13424         echo "(I can't compile the test program--guessing $gidsize.)" >&4
13425 fi
13426
13427
13428 echo " "
13429 case "$gidtype" in
13430 *_t) zzz="$gidtype"     ;;
13431 *)   zzz="gid"          ;;
13432 esac
13433 echo "Checking the sign of $zzz..." >&4 
13434 cat > try.c <<EOCP
13435 #include <sys/types.h>
13436 #include <stdio.h>
13437 int main() {
13438         $gidtype foo = -1;
13439         if (foo < 0)
13440                 printf("-1\n");
13441         else
13442                 printf("1\n");
13443 }
13444 EOCP
13445 set try
13446 if eval $compile; then
13447         yyy=`./try`
13448         case "$yyy" in
13449         '')     gidsign=1
13450                 echo "(I can't execute the test program--guessing unsigned.)" >&4
13451                 ;;
13452         *)      gidsign=$yyy
13453                 case "$gidsign" in
13454                  1) echo "Your $zzz is unsigned." ;;
13455                 -1) echo "Your $zzz is signed."   ;;
13456                 esac
13457                 ;;
13458         esac
13459 else
13460         gidsign=1
13461         echo "(I can't compile the test program--guessing unsigned.)" >&4
13462 fi
13463
13464
13465 echo " "
13466
13467 if $test X"$quadtype" != X; then
13468
13469 echo "Checking how to print 64-bit integers..." >&4
13470
13471 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
13472         $cat >try.c <<'EOCP'
13473 #include <sys/types.h>
13474 #include <stdio.h>
13475 int main() {
13476   int q = 12345678901;
13477   printf("%ld\n", q);
13478 }
13479 EOCP
13480         set try
13481         if eval $compile; then
13482                 yyy=`./try$exe_ext`
13483                 case "$yyy" in
13484                 12345678901)
13485                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
13486                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
13487                         echo "We will use %d."
13488                         ;;
13489                 esac
13490         fi
13491 fi
13492
13493 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
13494         $cat >try.c <<'EOCP'
13495 #include <sys/types.h>
13496 #include <stdio.h>
13497 int main() {
13498   long q = 12345678901;
13499   printf("%ld\n", q);
13500 }
13501 EOCP
13502         set try
13503         if eval $compile; then
13504                 yyy=`./try$exe_ext`
13505                 case "$yyy" in
13506                 12345678901)
13507                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
13508                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
13509                         echo "We will use %ld."
13510                         ;;
13511                 esac
13512         fi
13513 fi
13514
13515 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
13516         $cat >try.c <<'EOCP'
13517 #include <sys/types.h>
13518 #include <inttypes.h>
13519 #include <stdio.h>
13520 int main() {
13521   int64_t q = 12345678901;
13522   printf("%" PRId64 "\n", q);
13523 }
13524 EOCP
13525         set try
13526         if eval $compile; then
13527                 yyy=`./try$exe_ext`
13528                 case "$yyy" in
13529                 12345678901)
13530                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
13531                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
13532                         echo "We will use the C9X style."
13533                         ;;
13534                 esac
13535         fi
13536 fi
13537
13538 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
13539         $cat >try.c <<'EOCP'
13540 #include <sys/types.h>
13541 #include <stdio.h>
13542 int main() {
13543   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
13544   printf("%lld\n", q);
13545 }
13546 EOCP
13547         set try
13548         if eval $compile; then
13549                 yyy=`./try$exe_ext`
13550                 case "$yyy" in
13551                 12345678901)
13552                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
13553                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
13554                         echo "We will use the %lld style."
13555                         ;;
13556                 esac
13557         fi
13558 fi
13559
13560 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
13561         $cat >try.c <<EOCP
13562 #include <sys/types.h>
13563 #include <stdio.h>
13564 int main() {
13565   $quadtype q = 12345678901;
13566   printf("%Ld\n", q);
13567 }
13568 EOCP
13569         set try
13570         if eval $compile; then
13571                 yyy=`./try$exe_ext`
13572                 case "$yyy" in
13573                 12345678901)
13574                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
13575                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
13576                         echo "We will use %Ld."
13577                         ;;
13578                 esac
13579         fi
13580 fi
13581
13582 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
13583         $cat >try.c <<EOCP
13584 #include <sys/types.h>
13585 #include <stdio.h>
13586 int main() {
13587   $quadtype q = 12345678901;
13588   printf("%qd\n", q);
13589 }
13590 EOCP
13591         set try
13592         if eval $compile; then
13593                 yyy=`./try$exe_ext`
13594                 case "$yyy" in
13595                 12345678901)
13596                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
13597                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
13598                         echo "We will use %qd."
13599                         ;;
13600                 esac
13601         fi
13602 fi
13603
13604 if $test X"$sPRId64" = X; then
13605         echo "Cannot figure out how to print 64-bit integers." >&4
13606 fi
13607
13608 $rm -f try try.*
13609
13610 fi
13611
13612 case "$sPRId64" in
13613 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
13614         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; 
13615         ;;
13616 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
13617         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; 
13618         ;;
13619 esac
13620
13621
13622 echo " "
13623 $echo "Checking the format strings to be used for Perl's internal types..." >&4
13624
13625 if $test X"$ivsize" = X8; then
13626         ivdformat="$sPRId64"
13627         uvuformat="$sPRIu64"
13628         uvoformat="$sPRIo64"
13629         uvxformat="$sPRIx64"
13630         uvXUformat="$sPRIXU64"
13631 else
13632         if $test X"$ivsize" = X"$longsize"; then
13633                 ivdformat='"ld"'
13634                 uvuformat='"lu"'
13635                 uvoformat='"lo"'
13636                 uvxformat='"lx"'
13637                 uvXUformat='"lX"'
13638         else
13639                 if $test X"$ivsize" = X"$intsize"; then
13640                         ivdformat='"d"'
13641                         uvuformat='"u"'
13642                         uvoformat='"o"'
13643                         uvxformat='"x"'
13644                         uvXUformat='"X"'
13645                 else
13646                         : far out
13647                         if $test X"$ivsize" = X"$shortsize"; then
13648                                 ivdformat='"hd"'
13649                                 uvuformat='"hu"'
13650                                 uvoformat='"ho"'
13651                                 uvxformat='"hx"'
13652                                 uvXUformat='"hX"'
13653                         fi
13654                 fi
13655         fi
13656 fi
13657
13658 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
13659         nveformat="$sPRIeldbl"
13660         nvfformat="$sPRIfldbl"
13661         nvgformat="$sPRIgldbl"
13662         nvEUformat="$sPRIEUldbl"
13663         nvFUformat="$sPRIFUldbl"
13664         nvGUformat="$sPRIGUldbl"
13665 else
13666         nveformat='"e"'
13667         nvfformat='"f"'
13668         nvgformat='"g"'
13669         nvEUformat='"E"'
13670         nvFUformat='"F"'
13671         nvGUformat='"G"'
13672 fi
13673
13674 case "$ivdformat" in
13675 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
13676     exit 1
13677     ;;
13678 esac
13679
13680
13681 echo " "
13682 $echo "Checking the format string to be used for gids..." >&4
13683
13684 case "$gidsign" in
13685 -1)     if $test X"$gidsize" = X"$ivsize"; then
13686                 gidformat="$ivdformat"
13687         else
13688                 if $test X"$gidsize" = X"$longsize"; then
13689                         gidformat='"ld"'
13690                 else
13691                         if $test X"$gidsize" = X"$intsize"; then
13692                                 gidformat='"d"'
13693                         else
13694                                 if $test X"$gidsize" = X"$shortsize"; then
13695                                         gidformat='"hd"'
13696                                 fi
13697                         fi
13698                 fi
13699         fi
13700         ;;
13701 *)      if $test X"$gidsize" = X"$uvsize"; then
13702                 gidformat="$uvuformat"
13703         else
13704                 if $test X"$gidsize" = X"$longsize"; then
13705                         gidformat='"lu"'
13706                 else
13707                         if $test X"$gidsize" = X"$intsize"; then
13708                                 gidformat='"u"'
13709                         else
13710                                 if $test X"$gidsize" = X"$shortsize"; then
13711                                         gidformat='"hu"'
13712                                 fi
13713                         fi
13714                 fi
13715         fi
13716         ;;
13717 esac
13718
13719 : see if getgroups exists
13720 set getgroups d_getgrps
13721 eval $inlibc
13722
13723 : see if setgroups exists
13724 set setgroups d_setgrps
13725 eval $inlibc
13726
13727
13728 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
13729 echo " "
13730 case "$d_getgrps$d_setgrps" in
13731 *define*)
13732         case "$groupstype" in
13733         '') dflt="$gidtype" ;;
13734         *)  dflt="$groupstype" ;;
13735         esac
13736         $cat <<EOM
13737 What type of pointer is the second argument to getgroups() and setgroups()?
13738 Usually this is the same as group ids, $gidtype, but not always.
13739
13740 EOM
13741         rp='What type pointer is the second argument to getgroups() and setgroups()?'
13742         . ./myread
13743         groupstype="$ans"
13744         ;;
13745 *)  groupstype="$gidtype";;
13746 esac
13747
13748 echo " "
13749 echo "Checking if your $make program sets \$(MAKE)..." >&4
13750 case "$make_set_make" in
13751 '')
13752         $sed 's/^X //' > testmake.mak << 'EOF'
13753 Xall:
13754 X       @echo 'maketemp="$(MAKE)"'
13755 EOF
13756         case "`$make -f testmake.mak 2>/dev/null`" in
13757         *maketemp=*) make_set_make='#' ;;
13758         *)      make_set_make="MAKE=$make" ;;
13759         esac
13760         $rm -f testmake.mak
13761         ;;
13762 esac
13763 case "$make_set_make" in
13764 '#') echo "Yup, it does.";;
13765 *) echo "Nope, it doesn't.";;
13766 esac
13767
13768 : see what type is used for mode_t
13769 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
13770 set mode_t modetype int stdio.h sys/types.h
13771 eval $typedef_ask
13772
13773 : see if stdarg is available
13774 echo " "
13775 if $test `./findhdr stdarg.h`; then
13776         echo "<stdarg.h> found." >&4
13777         valstd="$define"
13778 else
13779         echo "<stdarg.h> NOT found." >&4
13780         valstd="$undef"
13781 fi
13782
13783 : see if varags is available
13784 echo " "
13785 if $test `./findhdr varargs.h`; then
13786         echo "<varargs.h> found." >&4
13787 else
13788         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
13789 fi
13790
13791 : set up the varargs testing programs
13792 $cat > varargs.c <<EOP
13793 #ifdef I_STDARG
13794 #include <stdarg.h>
13795 #endif
13796 #ifdef I_VARARGS
13797 #include <varargs.h>
13798 #endif
13799
13800 #ifdef I_STDARG
13801 int f(char *p, ...)
13802 #else
13803 int f(va_alist)
13804 va_dcl
13805 #endif
13806 {
13807         va_list ap;
13808 #ifndef I_STDARG
13809         char *p;
13810 #endif
13811 #ifdef I_STDARG
13812         va_start(ap,p);
13813 #else
13814         va_start(ap);
13815         p = va_arg(ap, char *);
13816 #endif
13817         va_end(ap);
13818 }
13819 EOP
13820 $cat > varargs <<EOP
13821 $startsh
13822 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
13823         echo "true"
13824 else
13825         echo "false"
13826 fi
13827 $rm -f varargs$_o
13828 EOP
13829 chmod +x varargs
13830
13831 : now check which varargs header should be included
13832 echo " "
13833 i_varhdr=''
13834 case "$valstd" in
13835 "$define")
13836         if `./varargs I_STDARG`; then
13837                 val='stdarg.h'
13838         elif `./varargs I_VARARGS`; then
13839                 val='varargs.h'
13840         fi
13841         ;;
13842 *)
13843         if `./varargs I_VARARGS`; then
13844                 val='varargs.h'
13845         fi
13846         ;;
13847 esac
13848 case "$val" in
13849 '')
13850 echo "I could not find the definition for va_dcl... You have problems..." >&4
13851         val="$undef"; set i_stdarg; eval $setvar
13852         val="$undef"; set i_varargs; eval $setvar
13853         ;;
13854 *) 
13855         set i_varhdr
13856         eval $setvar
13857         case "$i_varhdr" in
13858         stdarg.h)
13859                 val="$define"; set i_stdarg; eval $setvar
13860                 val="$undef"; set i_varargs; eval $setvar
13861                 ;;
13862         varargs.h)
13863                 val="$undef"; set i_stdarg; eval $setvar
13864                 val="$define"; set i_varargs; eval $setvar
13865                 ;;
13866         esac
13867         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
13868 esac
13869 $rm -f varargs*
13870
13871 : see if we need va_copy
13872 echo " "
13873 case "$i_stdarg" in
13874 "$define")
13875         $cat >try.c <<EOCP
13876 #include <stdarg.h>
13877 #include <stdio.h>
13878 #$i_stdlib I_STDLIB
13879 #ifdef I_STDLIB
13880 #include <stdlib.h>
13881 #endif
13882 #include <signal.h>
13883
13884 int
13885 ivfprintf(FILE *f, const char *fmt, va_list *valp)
13886 {
13887   return vfprintf(f, fmt, *valp);
13888 }
13889  
13890 int    
13891 myvfprintf(FILE *f, const  char *fmt, va_list val)
13892 {
13893   return ivfprintf(f, fmt, &val);
13894 }
13895       
13896 int
13897 myprintf(char *fmt, ...) 
13898 {
13899   va_list val;
13900   va_start(val, fmt);
13901   return myvfprintf(stdout, fmt, val); 
13902 }         
13903
13904 int
13905 main(int ac, char **av)
13906 {
13907   signal(SIGSEGV, exit);
13908
13909   myprintf("%s%cs all right, then\n", "that", '\'');                            
13910   exit(0);      
13911 }
13912 EOCP
13913         set try
13914         if eval $compile && ./try 2>&1 >/dev/null; then
13915                 case "`./try`" in
13916                 "that's all right, then")
13917                         okay=yes
13918                         ;;
13919                 esac
13920         fi
13921         case "$okay" in
13922         yes)    echo "It seems that you don't need va_copy()." >&4
13923                 need_va_copy="$undef"
13924                 ;;
13925         *)      echo "It seems that va_copy() or similar will be needed." >&4
13926                 need_va_copy="$define"
13927                 ;;
13928         esac
13929         $rm -f try.* core core.* *.core *.core.*
13930         ;;
13931 *)      echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
13932         ;;
13933 esac
13934
13935 : define a fucntion to check prototypes
13936 $cat > protochk <<EOSH
13937 $startsh
13938 cc="$cc"
13939 optimize="$optimize"
13940 ccflags="$ccflags"
13941 prototype="$prototype"
13942 define="$define"
13943 rm=$rm
13944 EOSH
13945
13946 $cat >> protochk <<'EOSH'
13947
13948 $rm -f try.c
13949 foo="$1"
13950 shift
13951 while test $# -ge 2; do
13952         case "$1" in
13953                 $define) echo "#include <$2>" >> try.c ;;
13954                 literal) echo "$2" >> try.c ;;
13955         esac
13956     shift 2
13957 done
13958 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
13959 cat >> try.c <<'EOCP'
13960 #ifdef CAN_PROTOTYPE
13961 #define _(args) args
13962 #else
13963 #define _(args) ()
13964 #endif
13965 EOCP
13966 echo "$foo" >> try.c
13967 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
13968 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
13969 status=$?
13970 $rm -f try.[co]
13971 exit $status
13972 EOSH
13973 chmod +x protochk
13974 $eunicefix protochk
13975
13976 : see what type is used for size_t
13977 rp="What is the type used for the length parameter for string functions?"
13978 set size_t sizetype 'unsigned int' stdio.h sys/types.h
13979 eval $typedef_ask
13980
13981 : check for type of arguments to gethostbyaddr. 
13982 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
13983         case "$d_gethbyaddr" in
13984         $define)
13985                 $cat <<EOM
13986
13987 Checking to see what type of arguments are accepted by gethostbyaddr().
13988 EOM
13989                 hdrs="$define sys/types.h
13990                         $d_socket sys/socket.h 
13991                         $i_niin netinet/in.h 
13992                         $i_netdb netdb.h
13993                         $i_unistd unistd.h"
13994                 : The first arg can 'char *' or 'void *'
13995                 : The second arg is some of integral type
13996                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
13997                         for yyy in size_t long int; do
13998                                 case "$netdb_host_type" in
13999                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
14000                                         if ./protochk "$try" $hdrs; then
14001                                                 echo "Your system accepts $xxx for the first arg."
14002                                                 echo "...and $yyy for the second arg."
14003                                                 netdb_host_type="$xxx"
14004                                                 netdb_hlen_type="$yyy"
14005                                         fi
14006                                         ;;
14007                                 esac
14008                         done
14009                 done
14010                 : In case none of those worked, prompt the user.
14011                 case "$netdb_host_type" in
14012                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
14013                         dflt='char *'
14014                         . ./myread
14015                         netdb_host_type=$ans
14016                         rp='What is the type for the 2nd argument to gethostbyaddr?'
14017                         dflt="$sizetype"
14018                         . ./myread
14019                         netdb_hlen_type=$ans
14020                         ;;
14021                 esac
14022                 ;;
14023         *)      : no gethostbyaddr, so pick harmless defaults
14024                 netdb_host_type='char *'
14025                 netdb_hlen_type="$sizetype"
14026                 ;;
14027         esac
14028         # Remove the "const" if needed. -- but then we'll have a 
14029         # prototype clash!
14030         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
14031 fi
14032
14033 : check for type of argument to gethostbyname. 
14034 if test "X$netdb_name_type" = X ; then
14035         case "$d_gethbyname" in
14036         $define)
14037                 $cat <<EOM
14038
14039 Checking to see what type of argument is accepted by gethostbyname().
14040 EOM
14041                 hdrs="$define sys/types.h
14042                         $d_socket sys/socket.h 
14043                         $i_niin netinet/in.h 
14044                         $i_netdb netdb.h
14045                         $i_unistd unistd.h"
14046                 for xxx in "const char *" "char *"; do
14047                         case "$netdb_name_type" in
14048                         '')     try="extern struct hostent *gethostbyname($xxx);"
14049                                 if ./protochk "$try" $hdrs; then
14050                                         echo "Your system accepts $xxx."
14051                                         netdb_name_type="$xxx"
14052                                 fi
14053                                 ;;
14054                         esac
14055                 done
14056                 : In case none of those worked, prompt the user.
14057                 case "$netdb_name_type" in
14058                 '')     rp='What is the type for the 1st argument to gethostbyname?'
14059                         dflt='char *'
14060                         . ./myread
14061                         netdb_name_type=$ans
14062                         ;;
14063                 esac
14064                 ;;
14065         *)      : no gethostbyname, so pick harmless default
14066                 netdb_name_type='char *'
14067                 ;;
14068         esac
14069 fi
14070
14071 : check for type of 1st argument to getnetbyaddr. 
14072 if test "X$netdb_net_type" = X ; then
14073         case "$d_getnbyaddr" in
14074         $define)
14075                 $cat <<EOM
14076
14077 Checking to see what type of 1st argument is accepted by getnetbyaddr().
14078 EOM
14079                 hdrs="$define sys/types.h
14080                         $d_socket sys/socket.h 
14081                         $i_niin netinet/in.h 
14082                         $i_netdb netdb.h
14083                         $i_unistd unistd.h"
14084                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
14085                         case "$netdb_net_type" in
14086                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
14087                                 if ./protochk "$try" $hdrs; then
14088                                         echo "Your system accepts $xxx."
14089                                         netdb_net_type="$xxx"
14090                                 fi
14091                                 ;;
14092                         esac
14093                 done
14094                 : In case none of those worked, prompt the user.
14095                 case "$netdb_net_type" in
14096                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
14097                         dflt='long'
14098                         . ./myread
14099                         netdb_net_type=$ans
14100                         ;;
14101                 esac
14102                 ;;
14103         *)      : no getnetbyaddr, so pick harmless default
14104                 netdb_net_type='long'
14105                 ;;
14106         esac
14107 fi
14108 : locate the preferred pager for this system
14109 case "$pager" in
14110 '')
14111         dflt=''
14112         case "$pg" in
14113         /*) dflt=$pg;;
14114         [a-zA-Z]:/*) dflt=$pg;;
14115         esac
14116         case "$more" in
14117         /*) dflt=$more;;
14118         [a-zA-Z]:/*) dflt=$more;;
14119         esac
14120         case "$less" in
14121         /*) dflt=$less;;
14122         [a-zA-Z]:/*) dflt=$less;;
14123         esac
14124         case "$dflt" in
14125         '') dflt=/usr/ucb/more;;
14126         esac
14127         ;;
14128 *) dflt="$pager";;
14129 esac
14130 echo " "
14131 fn=f/
14132 rp='What pager is used on your system?'
14133 . ./getfile
14134 pager="$ans"
14135
14136 : see what type pids are declared as in the kernel
14137 rp="What is the type of process ids on this system?"
14138 set pid_t pidtype int stdio.h sys/types.h
14139 eval $typedef_ask
14140
14141 : Find earliest binary compatible site_perl subdirectory perl can use.
14142 case "$bincompat5005" in
14143 "$define") xs_apiversion='5.005' ;;
14144 *) xs_apiversion=$version ;;   # The current site_perl version.
14145 esac
14146 : Find earliest pure perl site_perl subdirectory perl can use.
14147 : The versioned directories started at 5.005.
14148 pm_apiversion='5.005'
14149
14150 : check for length of pointer
14151 echo " "
14152 case "$ptrsize" in
14153 '')
14154         echo "Checking to see how big your pointers are..." >&4
14155         if test "$voidflags" -gt 7; then
14156                 echo '#define VOID_PTR char *' > try.c
14157         else
14158                 echo '#define VOID_PTR void *' > try.c
14159         fi
14160         $cat >>try.c <<'EOCP'
14161 #include <stdio.h>
14162 int main()
14163 {
14164     printf("%d\n", (int)sizeof(VOID_PTR));
14165     exit(0);
14166 }
14167 EOCP
14168         set try
14169         if eval $compile_ok; then
14170                 ptrsize=`./try`
14171                 echo "Your pointers are $ptrsize bytes long."
14172         else
14173                 dflt='4'
14174                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
14175                 rp="What is the size of a pointer (in bytes)?"
14176                 . ./myread
14177                 ptrsize="$ans"
14178         fi
14179         ;;
14180 esac
14181 $rm -f try.c try
14182
14183 : see if ar generates random libraries by itself
14184 echo " "
14185 echo "Checking how to generate random libraries on your machine..." >&4
14186 echo 'int bar1() { return bar2(); }' > bar1.c
14187 echo 'int bar2() { return 2; }' > bar2.c
14188 $cat > foo.c <<'EOP'
14189 int main() { printf("%d\n", bar1()); exit(0); }
14190 EOP
14191 $cc $ccflags -c bar1.c >/dev/null 2>&1
14192 $cc $ccflags -c bar2.c >/dev/null 2>&1
14193 $cc $ccflags -c foo.c >/dev/null 2>&1
14194 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
14195 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
14196         ./foobar >/dev/null 2>&1; then
14197         echo "$ar appears to generate random libraries itself."
14198         orderlib=false
14199         ranlib=":"
14200 elif $ar ts bar$_a >/dev/null 2>&1 &&
14201         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
14202         ./foobar >/dev/null 2>&1; then
14203                 echo "a table of contents needs to be added with '$ar ts'."
14204                 orderlib=false
14205                 ranlib="$ar ts"
14206 else
14207         case "$ranlib" in
14208         :) ranlib='';;
14209         '')
14210                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
14211                 $test -f $ranlib || ranlib=''
14212                 ;;
14213         esac
14214         if $test -n "$ranlib"; then
14215                 echo "your system has '$ranlib'; we'll use that."
14216                 orderlib=false
14217         else
14218                 echo "your system doesn't seem to support random libraries"
14219                 echo "so we'll use lorder and tsort to order the libraries."
14220                 orderlib=true
14221                 ranlib=":"
14222         fi
14223 fi
14224 $rm -f foo* bar* 
14225
14226 : check for type of arguments to select. 
14227 case "$selecttype" in
14228 '') case "$d_select" in
14229         $define)
14230                 echo " "
14231                 $cat <<EOM
14232 Checking to see what type of arguments are accepted by select().
14233 EOM
14234                 hdrs="$define sys/types.h
14235                         $i_systime sys/time.h 
14236                         $i_sysselct sys/select.h
14237                         $d_socket sys/socket.h"
14238                 : The first arg can be int, unsigned, or size_t
14239                 : The last arg may or may not be 'const'
14240                 val=''
14241                 : void pointer has been seen but using that
14242                 : breaks the selectminbits test
14243                 for xxx in 'fd_set *' 'int *'; do
14244                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
14245                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
14246                                         case "$val" in
14247                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
14248                                                 if ./protochk "$try" $hdrs; then
14249                                                         echo "Your system accepts $xxx."
14250                                                         val="$xxx"
14251                                                 fi
14252                                                 ;;
14253                                         esac
14254                                 done
14255                         done
14256                 done
14257                 case "$val" in
14258                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
14259                         case "$d_fd_set" in
14260                                 $define) dflt="fd_set *" ;;
14261                                 *)              dflt="int *" ;;
14262                         esac
14263                         . ./myread
14264                         val=$ans
14265                         ;;
14266                 esac
14267                 selecttype="$val"
14268                 ;;
14269         *)      : no select, so pick a harmless default
14270                 selecttype='int *'
14271                 ;;
14272         esac
14273         ;;
14274 esac
14275
14276 : check for the select 'width'
14277 case "$selectminbits" in
14278 '') case "$d_select" in
14279         $define)
14280                 $cat <<EOM
14281
14282 Checking to see on how many bits at a time your select() operates...
14283 EOM
14284                 $cat >try.c <<EOCP
14285 #include <sys/types.h>
14286 #$i_time I_TIME
14287 #$i_systime I_SYS_TIME
14288 #$i_systimek I_SYS_TIME_KERNEL
14289 #ifdef I_TIME
14290 #   include <time.h>
14291 #endif
14292 #ifdef I_SYS_TIME
14293 #   ifdef I_SYS_TIME_KERNEL
14294 #       define KERNEL
14295 #   endif
14296 #   include <sys/time.h>
14297 #   ifdef I_SYS_TIME_KERNEL
14298 #       undef KERNEL
14299 #   endif
14300 #endif
14301 #$i_sysselct I_SYS_SELECT
14302 #ifdef I_SYS_SELECT
14303 #include <sys/select.h>
14304 #endif
14305 #$d_socket HAS_SOCKET
14306 #ifdef HAS_SOCKET
14307 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
14308 #endif
14309 #include <stdio.h>
14310 $selecttype b;
14311 #define S sizeof(*(b))
14312 #define MINBITS 64
14313 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
14314 #define NBITS  (NBYTES * 8)
14315 int main() {
14316     char s[NBYTES];
14317     struct timeval t;
14318     int i;
14319     FILE* fp;
14320     int fd;
14321
14322     fclose(stdin);
14323     fp = fopen("try.c", "r");
14324     if (fp == 0)
14325       exit(1);
14326     fd = fileno(fp);
14327     if (fd < 0)
14328       exit(2);
14329     b = ($selecttype)s;
14330     for (i = 0; i < NBITS; i++)
14331         FD_SET(i, b);
14332     t.tv_sec  = 0;
14333     t.tv_usec = 0;
14334     select(fd + 1, b, 0, 0, &t);
14335     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
14336     printf("%d\n", i + 1);
14337     return 0;
14338 }
14339 EOCP
14340                 set try
14341                 if eval $compile_ok; then
14342                         selectminbits=`./try`
14343                         case "$selectminbits" in
14344                         '')     cat >&4 <<EOM
14345 Cannot figure out on how many bits at a time your select() operates.
14346 I'll play safe and guess it is 32 bits.
14347 EOM
14348                                 selectminbits=32
14349                                 bits="32 bits"
14350                                 ;;
14351                         1)      bits="1 bit" ;;
14352                         *)      bits="$selectminbits bits" ;;
14353                         esac
14354                         echo "Your select() operates on $bits at a time." >&4
14355                 else
14356                         rp='What is the minimum number of bits your select() operates on?'
14357                         case "$byteorder" in
14358                         1234|12345678)  dflt=32 ;;
14359                         *)              dflt=1  ;;
14360                         esac
14361                         . ./myread
14362                         val=$ans
14363                         selectminbits="$val"
14364                 fi
14365                 $rm -f try.* try
14366                 ;;
14367         *)      : no select, so pick a harmless default
14368                 selectminbits='32'
14369                 ;;
14370         esac
14371         ;;
14372 esac
14373
14374 : Trace out the files included by signal.h, then look for SIGxxx names.
14375 : Remove SIGARRAYSIZE used by HPUX.
14376 : Remove SIGSTKSIZE used by Linux.
14377 : Remove SIGSTKSZ used by Posix.
14378 : Remove SIGTYP void lines used by OS2.
14379 : Some cpps, like os390, dont give the file name anywhere
14380 if [ "X$fieldn" = X ]; then
14381         : Just make some guesses.  We check them later.
14382         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
14383 else
14384         xxx=`echo '#include <signal.h>' |
14385         $cppstdin $cppminus $cppflags 2>/dev/null |
14386         $grep '^[       ]*#.*include' | 
14387         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
14388 fi
14389 : Check this list of files to be sure we have parsed the cpp output ok.
14390 : This will also avoid potentially non-existent files, such 
14391 : as ../foo/bar.h
14392 xxxfiles=''
14393 for xx in $xxx /dev/null ; do
14394         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
14395 done
14396 : If we have found no files, at least try signal.h
14397 case "$xxxfiles" in
14398 '')     xxxfiles=`./findhdr signal.h` ;;
14399 esac
14400 xxx=`awk '
14401 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
14402         print substr($2, 4, 20)
14403 }
14404 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
14405         print substr($3, 4, 20)
14406 }' $xxxfiles`
14407 : Append some common names just in case the awk scan failed.
14408 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
14409 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
14410 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
14411 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
14412 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
14413
14414 : generate a few handy files for later
14415 $cat > signal.c <<'EOCP'
14416 #include <sys/types.h>
14417 #include <signal.h>
14418 #include <stdio.h>
14419 int main() {
14420
14421 /* Strange style to avoid deeply-nested #if/#else/#endif */
14422 #ifndef NSIG
14423 #  ifdef _NSIG
14424 #    define NSIG (_NSIG)
14425 #  endif
14426 #endif
14427
14428 #ifndef NSIG
14429 #  ifdef SIGMAX
14430 #    define NSIG (SIGMAX+1)
14431 #  endif
14432 #endif
14433
14434 #ifndef NSIG
14435 #  ifdef SIG_MAX
14436 #    define NSIG (SIG_MAX+1)
14437 #  endif
14438 #endif
14439
14440 #ifndef NSIG
14441 #  ifdef MAXSIG
14442 #    define NSIG (MAXSIG+1)
14443 #  endif
14444 #endif
14445
14446 #ifndef NSIG
14447 #  ifdef MAX_SIG
14448 #    define NSIG (MAX_SIG+1)
14449 #  endif
14450 #endif
14451
14452 #ifndef NSIG
14453 #  ifdef SIGARRAYSIZE
14454 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
14455 #  endif
14456 #endif
14457
14458 #ifndef NSIG
14459 #  ifdef _sys_nsig
14460 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
14461 #  endif
14462 #endif
14463
14464 /* Default to some arbitrary number that's big enough to get most
14465    of the common signals.
14466 */
14467 #ifndef NSIG
14468 #    define NSIG 50
14469 #endif
14470
14471 printf("NSIG %d\n", NSIG);
14472
14473 #ifndef JUST_NSIG
14474
14475 EOCP
14476
14477 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
14478 {
14479         printf "#ifdef SIG"; printf $1; printf "\n"
14480         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
14481         printf $1; printf ");\n"
14482         printf "#endif\n"
14483 }
14484 END {
14485         printf "#endif /* JUST_NSIG */\n";
14486         printf "exit(0);\n}\n";
14487 }
14488 ' >>signal.c
14489 $cat >signal.awk <<'EOP'
14490 BEGIN { ndups = 0 }
14491 $1 ~ /^NSIG$/ { nsig = $2 }
14492 ($1 !~ /^NSIG$/) && (NF == 2) {
14493     if ($2 > maxsig) { maxsig = $2 }
14494     if (sig_name[$2]) {
14495         dup_name[ndups] = $1
14496         dup_num[ndups] = $2
14497         ndups++ 
14498     }
14499     else {
14500         sig_name[$2] = $1
14501         sig_num[$2] = $2
14502     }
14503 }
14504 END { 
14505     if (nsig == 0) {
14506         nsig = maxsig + 1
14507     }
14508     printf("NSIG %d\n", nsig);
14509     for (n = 1; n < nsig; n++) {
14510         if (sig_name[n]) {
14511             printf("%s %d\n", sig_name[n], sig_num[n])
14512         }
14513         else {
14514             printf("NUM%d %d\n", n, n) 
14515         }
14516     }
14517     for (n = 0; n < ndups; n++) {
14518         printf("%s %d\n", dup_name[n], dup_num[n])
14519     }
14520 }
14521 EOP
14522 $cat >signal_cmd <<EOS
14523 $startsh
14524 if $test -s signal.lst; then
14525     echo "Using your existing signal.lst file"
14526         exit 0
14527 fi
14528 xxx="$xxx"
14529 EOS
14530 $cat >>signal_cmd <<'EOS'
14531
14532 set signal
14533 if eval $compile_ok; then
14534         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
14535 else
14536         echo "(I can't seem be able to compile the whole test program)" >&4
14537         echo "(I'll try it in little pieces.)" >&4
14538         set signal -DJUST_NSIG
14539         if eval $compile_ok; then
14540                 ./signal$_exe > signal.nsg
14541                 $cat signal.nsg
14542         else
14543                 echo "I can't seem to figure out how many signals you have." >&4
14544                 echo "Guessing 50." >&4
14545                 echo 'NSIG 50' > signal.nsg
14546         fi
14547         : Now look at all the signal names, one at a time.
14548         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
14549                 $cat > signal.c <<EOCP
14550 #include <sys/types.h>
14551 #include <signal.h>
14552 #include <stdio.h>
14553 int main() {
14554 printf("$xx %d\n", SIG${xx});
14555 return 0;
14556 }
14557 EOCP
14558                 set signal
14559                 if eval $compile; then
14560                         echo "SIG${xx} found."
14561                         ./signal$_exe  >> signal.ls1
14562                 else
14563                         echo "SIG${xx} NOT found."
14564                 fi
14565         done
14566         if $test -s signal.ls1; then
14567                 $cat signal.nsg signal.ls1 |
14568                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
14569         fi
14570
14571 fi
14572 if $test -s signal.lst; then
14573         :
14574 else
14575         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
14576         echo 'kill -l' >signal
14577         set X `csh -f <signal`
14578         $rm -f signal
14579         shift
14580         case $# in
14581         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
14582         esac
14583         echo $@ | $tr ' ' $trnl | \
14584             $awk '{ printf "%s %d\n", $1, ++s; }
14585                   END { printf "NSIG %d\n", ++s }' >signal.lst
14586 fi
14587 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
14588 EOS
14589 chmod a+x signal_cmd
14590 $eunicefix signal_cmd
14591
14592 : generate list of signal names
14593 echo " "
14594 case "$sig_name_init" in
14595 '') doinit=yes ;;
14596 *)  case "$sig_num_init" in
14597     ''|*,*) doinit=yes ;;
14598     esac ;;
14599 esac
14600 case "$doinit" in
14601 yes)
14602         echo "Generating a list of signal names and numbers..." >&4
14603         . ./signal_cmd
14604         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
14605         sig_name=`$awk 'BEGIN { printf "ZERO " }
14606                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
14607         sig_num=`$awk  'BEGIN { printf "0 " }
14608                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
14609         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
14610                              !/^NSIG/   { printf "\"%s\", ", $1 }
14611                              END        { printf "0\n" }' signal.lst`
14612         sig_num_init=`$awk  'BEGIN      { printf "0, " }
14613                              !/^NSIG/   { printf "%d, ", $2}
14614                              END        { printf "0\n"}' signal.lst`
14615         ;;
14616 esac
14617 echo "The following $sig_count signals are available:"
14618 echo " "
14619 echo $sig_name | $awk \
14620 'BEGIN { linelen = 0 }
14621 {
14622         for (i = 1; i <= NF; i++) {
14623                 name = "SIG" $i " "
14624                 linelen = linelen + length(name)
14625                 if (linelen > 70) {
14626                         printf "\n"
14627                         linelen = length(name)
14628                 }
14629                 printf "%s", name
14630         }
14631         printf "\n"
14632 }'
14633 sig_size=`echo $sig_name | awk '{print NF}'`
14634 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
14635
14636 echo " "
14637 case "$sizetype" in
14638 *_t) zzz="$sizetype"    ;;
14639 *)   zzz="filesize"     ;;
14640 esac
14641 echo "Checking the size of $zzz..." >&4 
14642 cat > try.c <<EOCP
14643 #include <sys/types.h>
14644 #include <stdio.h>
14645 int main() {
14646     printf("%d\n", (int)sizeof($sizetype));
14647     exit(0);
14648 }
14649 EOCP
14650 set try
14651 if eval $compile_ok; then
14652         yyy=`./try`
14653         case "$yyy" in
14654         '')     sizesize=4
14655                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
14656                 ;;
14657         *)      sizesize=$yyy
14658                 echo "Your $zzz size is $sizesize bytes."
14659                 ;;
14660         esac
14661 else
14662         sizesize=4
14663         echo "(I can't compile the test program--guessing $sizesize.)" >&4
14664 fi
14665
14666
14667 : check for socklen_t
14668 echo " "
14669 echo "Checking to see if you have socklen_t..." >&4
14670 $cat >try.c <<EOCP
14671 #include <sys/types.h>
14672 #$d_socket HAS_SOCKET
14673 #ifdef HAS_SOCKET
14674 #include <sys/socket.h>
14675 #endif
14676 int main() { socklen_t x = 16; }
14677 EOCP
14678 set try
14679 if eval $compile; then
14680         val="$define"
14681         echo "You have socklen_t."
14682 else
14683         val="$undef"
14684         echo "You do not have socklen_t."
14685         case "$sizetype" in
14686         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
14687         esac
14688 fi
14689 $rm -f try try.*
14690 set d_socklen_t
14691 eval $setvar
14692
14693 : see if this is a socks.h system
14694 set socks.h i_socks
14695 eval $inhdr
14696
14697 : check for type of the size argument to socket calls
14698 case "$d_socket" in
14699 "$define")
14700         $cat <<EOM
14701
14702 Checking to see what type is the last argument of accept().
14703 EOM
14704         yyy=''
14705         case "$d_socklen_t" in
14706         "$define") yyy="$yyy socklen_t"
14707         esac
14708         yyy="$yyy $sizetype int long unsigned"
14709         for xxx in $yyy; do
14710                 case "$socksizetype" in
14711                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
14712                         case "$usesocks" in
14713                         "$define")
14714                                 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
14715                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
14716                                         socksizetype="$xxx"
14717                                 fi
14718                                 ;;
14719                         *)      if ./protochk "$try"  $i_systypes sys/types.h $d_socket sys/socket.h; then
14720                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
14721                                         socksizetype="$xxx"
14722                                 fi
14723                                 ;;
14724                         esac
14725                         ;;
14726                 esac
14727         done
14728 : In case none of those worked, prompt the user.
14729         case "$socksizetype" in
14730         '')     rp='What is the type for socket address structure sizes?'
14731                 dflt='int'
14732                 . ./myread
14733                 socksizetype=$ans
14734                 ;;
14735         esac
14736         ;;
14737 *)      : no sockets, so pick relatively harmless default
14738         socksizetype='int'
14739         ;;
14740 esac
14741
14742 : see what type is used for signed size_t
14743 set ssize_t ssizetype int stdio.h sys/types.h
14744 eval $typedef
14745 dflt="$ssizetype"
14746 $cat > ssize.c <<EOM
14747 #include <stdio.h>
14748 #include <sys/types.h>
14749 #define Size_t $sizetype
14750 #define SSize_t $dflt
14751 int main()
14752 {
14753         if (sizeof(Size_t) == sizeof(SSize_t))
14754                 printf("$dflt\n");
14755         else if (sizeof(Size_t) == sizeof(int))
14756                 printf("int\n");
14757         else 
14758                 printf("long\n");
14759         exit(0);
14760 }
14761 EOM
14762 echo " "
14763 set ssize
14764 if eval $compile_ok && ./ssize > /dev/null; then
14765         ssizetype=`./ssize`
14766         echo "I'll be using $ssizetype for functions returning a byte count." >&4
14767 else
14768         $cat >&4 <<EOM
14769 Help! I can't compile and run the ssize_t test program: please enlighten me!
14770 (This is probably a misconfiguration in your system or libraries, and
14771 you really ought to fix it.  Still, I'll try anyway.)
14772
14773 I need a type that is the same size as $sizetype, but is guaranteed to
14774 be signed.  Common values are ssize_t, int and long.
14775
14776 EOM
14777         rp="What signed type is the same size as $sizetype?"
14778         . ./myread
14779         ssizetype="$ans"
14780 fi
14781 $rm -f ssize ssize.*
14782
14783 : see what type of char stdio uses.
14784 echo " "
14785 echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
14786 if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
14787         echo "Your stdio uses unsigned chars." >&4
14788         stdchar="unsigned char"
14789 else
14790         echo "Your stdio uses signed chars." >&4
14791         stdchar="char"
14792 fi
14793 $rm -f stdioh
14794
14795
14796
14797 : see if time exists
14798 echo " "
14799 if test "X$d_time" = X -o X"$timetype" = X; then
14800     if set time val -f d_time; eval $csym; $val; then
14801                 echo 'time() found.' >&4
14802                 val="$define"
14803                 rp="What is the type returned by time() on this system?"
14804                 set time_t timetype long stdio.h sys/types.h
14805                 eval $typedef_ask
14806     else
14807                 echo 'time() not found, hope that will do.' >&4
14808                 val="$undef"
14809                 timetype='int';
14810     fi
14811     set d_time
14812     eval $setvar
14813 fi
14814
14815 : see what type uids are declared as in the kernel
14816 echo " "
14817 echo "Looking for the type for user ids returned by getuid()."
14818 set uid_t uidtype xxx stdio.h sys/types.h
14819 eval $typedef
14820 case "$uidtype" in
14821 xxx)
14822         xxx=`./findhdr sys/user.h`
14823         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
14824         case $1 in
14825         unsigned) dflt="$1 $2" ;;
14826         *) dflt="$1" ;;
14827         esac
14828         ;;
14829 *) dflt="$uidtype";;
14830 esac
14831 case "$uidtype" in
14832 uid_t)  echo "uid_t found." ;;
14833 *)      rp="What is the type for user ids returned by getuid()?"
14834         . ./myread
14835         uidtype="$ans"
14836         ;;
14837 esac
14838
14839 echo " "
14840 case "$uidtype" in
14841 *_t) zzz="$uidtype"     ;;
14842 *)   zzz="uid"          ;;
14843 esac
14844 echo "Checking the size of $zzz..." >&4 
14845 cat > try.c <<EOCP
14846 #include <sys/types.h>
14847 #include <stdio.h>
14848 int main() {
14849     printf("%d\n", (int)sizeof($uidtype));
14850     exit(0);
14851 }
14852 EOCP
14853 set try
14854 if eval $compile_ok; then
14855         yyy=`./try`
14856         case "$yyy" in
14857         '')     uidsize=4
14858                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
14859                 ;;
14860         *)      uidsize=$yyy
14861                 echo "Your $zzz is $uidsize bytes long."
14862                 ;;
14863         esac
14864 else
14865         uidsize=4
14866         echo "(I can't compile the test program--guessing $uidsize.)" >&4
14867 fi
14868
14869 echo " "
14870 case "$uidtype" in
14871 *_t) zzz="$uidtype"     ;;
14872 *)   zzz="uid"          ;;
14873 esac
14874 echo "Checking the sign of $zzz..." >&4
14875 cat > try.c <<EOCP
14876 #include <sys/types.h>
14877 #include <stdio.h>
14878 int main() {
14879         $uidtype foo = -1;
14880         if (foo < 0)
14881                 printf("-1\n");
14882         else
14883                 printf("1\n");
14884 }
14885 EOCP
14886 set try
14887 if eval $compile; then
14888         yyy=`./try`
14889         case "$yyy" in
14890         '')     uidsign=1
14891                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14892                 ;;
14893         *)      uidsign=$yyy
14894                 case "$uidsign" in
14895                  1) echo "Your $zzz is unsigned." ;;
14896                 -1) echo "Your $zzz is signed."   ;;
14897                 esac
14898                 ;;
14899         esac
14900 else
14901         uidsign=1
14902         echo "(I can't compile the test program--guessing unsigned.)" >&4
14903 fi
14904
14905
14906
14907 echo " "
14908 $echo "Checking the format string to be used for uids..." >&4
14909
14910 case "$uidsign" in
14911 -1)     if $test X"$uidsize" = X"$ivsize"; then
14912                 uidformat="$ivdformat"
14913         else
14914                 if $test X"$uidsize" = X"$longsize"; then
14915                         uidformat='"ld"'
14916                 else
14917                         if $test X"$uidsize" = X"$intsize"; then
14918                                 uidformat='"d"'
14919                         else
14920                                 if $test X"$uidsize" = X"$shortsize"; then
14921                                         uidformat='"hd"'
14922                                 fi
14923                         fi
14924                 fi
14925         fi
14926         ;;
14927 *)      if $test X"$uidsize" = X"$uvsize"; then
14928                 uidformat="$uvuformat"
14929         else
14930                 if $test X"$uidsize" = X"$longsize"; then
14931                         uidformat='"lu"'
14932                 else
14933                         if $test X"$uidsize" = X"$intsize"; then
14934                                 uidformat='"u"'
14935                         else
14936                                 if $test X"$uidsize" = X"$shortsize"; then
14937                                         uidformat='"hu"'
14938                                 fi
14939                         fi
14940                 fi
14941         fi
14942         ;;
14943 esac
14944
14945 : determine compiler compiler
14946 case "$yacc" in
14947 '')
14948         dflt=yacc;;
14949 *)
14950         dflt="$yacc";;
14951 esac
14952 echo " "
14953 comp='yacc'
14954 if $test -f "$byacc"; then
14955         dflt="$byacc"
14956         comp="byacc or $comp"
14957 fi
14958 if $test -f "$bison"; then
14959         comp="$comp or bison -y"
14960 fi
14961 rp="Which compiler compiler ($comp) shall I use?"
14962 . ./myread
14963 yacc="$ans"
14964 case "$yacc" in
14965 *bis*)
14966         case "$yacc" in
14967         *-y*) ;;
14968         *)
14969                 yacc="$yacc -y"
14970                 echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
14971                 ;;
14972         esac
14973         ;;
14974 esac
14975
14976 : see if dbm.h is available
14977 : see if dbmclose exists
14978 set dbmclose d_dbmclose
14979 eval $inlibc
14980
14981 case "$d_dbmclose" in
14982 $define)
14983         set dbm.h i_dbm
14984         eval $inhdr
14985         case "$i_dbm" in
14986         $define)
14987                 val="$undef"
14988                 set i_rpcsvcdbm
14989                 eval $setvar
14990                 ;;
14991         *)      set rpcsvc/dbm.h i_rpcsvcdbm
14992                 eval $inhdr
14993                 ;;
14994         esac
14995         ;;
14996 *)      echo "We won't be including <dbm.h>"
14997         val="$undef"
14998         set i_dbm
14999         eval $setvar
15000         val="$undef"
15001         set i_rpcsvcdbm
15002         eval $setvar
15003         ;;
15004 esac
15005
15006 : see if this is a sys/file.h system
15007 val=''
15008 set sys/file.h val
15009 eval $inhdr
15010
15011 : do we need to include sys/file.h ?
15012 case "$val" in
15013 "$define")
15014         echo " "
15015         if $h_sysfile; then
15016                 val="$define"
15017                 echo "We'll be including <sys/file.h>." >&4
15018         else
15019                 val="$undef"
15020                 echo "We won't be including <sys/file.h>." >&4
15021         fi
15022         ;;
15023 *)
15024         h_sysfile=false
15025         ;;
15026 esac
15027 set i_sysfile
15028 eval $setvar
15029
15030 : see if fcntl.h is there
15031 val=''
15032 set fcntl.h val
15033 eval $inhdr
15034
15035 : see if we can include fcntl.h
15036 case "$val" in
15037 "$define")
15038         echo " "
15039         if $h_fcntl; then
15040                 val="$define"
15041                 echo "We'll be including <fcntl.h>." >&4
15042         else
15043                 val="$undef"
15044                 if $h_sysfile; then
15045         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
15046                 else
15047                         echo "We won't be including <fcntl.h>." >&4
15048                 fi
15049         fi
15050         ;;
15051 *)
15052         h_fcntl=false
15053         val="$undef"
15054         ;;
15055 esac
15056 set i_fcntl
15057 eval $setvar
15058
15059 : see if this is a iconv.h system
15060 set iconv.h i_iconv
15061 eval $inhdr
15062
15063 : see if this is a ieeefp.h system
15064 set ieeefp.h i_ieeefp
15065 eval $inhdr
15066
15067 : see if this is a libutil.h system
15068 set libutil.h i_libutil
15069 eval $inhdr
15070
15071 : see if locale.h is available
15072 set locale.h i_locale
15073 eval $inhdr
15074
15075 : see if mach cthreads are available
15076 if test "X$usethreads" = "X$define"; then
15077         set mach/cthreads.h i_machcthr
15078         eval $inhdr
15079 else
15080         i_machcthr="$undef"
15081 fi
15082
15083
15084
15085 : see if this is a math.h system
15086 set math.h i_math
15087 eval $inhdr
15088
15089 : see if this is a mntent.h system
15090 set mntent.h i_mntent
15091 eval $inhdr
15092
15093 : see if ndbm.h is available
15094 set ndbm.h t_ndbm
15095 eval $inhdr
15096 case "$t_ndbm" in
15097 $define)
15098         : see if dbm_open exists
15099         set dbm_open d_dbm_open
15100         eval $inlibc
15101         case "$d_dbm_open" in
15102         $undef)
15103                 t_ndbm="$undef"
15104                 echo "We won't be including <ndbm.h>"
15105                 ;;
15106         esac
15107         ;;
15108 esac
15109 val="$t_ndbm"
15110 set i_ndbm
15111 eval $setvar
15112
15113 : see if net/errno.h is available
15114 val=''
15115 set net/errno.h val
15116 eval $inhdr
15117
15118 : Unfortunately, it causes problems on some systems.  Arrgh.
15119 case "$val" in
15120 $define)
15121         cat > try.c <<'EOM'
15122 #include <stdio.h>
15123 #include <errno.h>
15124 #include <net/errno.h>
15125 int func()
15126 {
15127         return ENOTSOCK;
15128 }
15129 EOM
15130         if $cc $ccflags -c try.c >/dev/null 2>&1; then
15131                 echo "We'll be including <net/errno.h>." >&4
15132         else
15133                 echo "We won't be including <net/errno.h>." >&4
15134                 val="$undef"
15135         fi
15136         $rm -f try.* try
15137         ;;
15138 esac
15139 set i_neterrno
15140 eval $setvar
15141
15142 : see if netinet/tcp.h is available
15143 set netinet/tcp.h i_netinettcp
15144 eval $inhdr
15145
15146 : see if this is a poll.h system
15147 set poll.h i_poll
15148 eval $inhdr
15149
15150 : see if this is a prot.h system
15151 set prot.h i_prot
15152 eval $inhdr
15153
15154 echo " "
15155 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
15156 $cat <<'EOSH' > Cppsym.know
15157 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
15158 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
15159 alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
15160 ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
15161 BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
15162 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
15163 bull c cadmus clipper CMU COFF COMPILER_VERSION
15164 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
15165 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
15166 Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
15167 FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
15168 GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
15169 H3050R H3050RX hbullx20 hcx host_mips
15170 hp200 hp300 hp700 HP700 hp800 hp9000
15171 hp9000s200 hp9000s300 hp9000s400 hp9000s500
15172 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
15173 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
15174 IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
15175 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
15176 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
15177 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
15178 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
15179 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
15180 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
15181 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
15182 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
15183 MATH_HAS_NO_SIDE_EFFECTS
15184 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
15185 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
15186 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
15187 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
15188 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
15189 NetBSD news1500 news1700 news1800 news1900 news3700
15190 news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
15191 ns32016 ns32332 ns32k nsc32000
15192 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
15193 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
15194 pc532 pdp11 PGC PIC plexus PORTAR posix
15195 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
15196 POSIX_C_SOURCE POSIX_SOURCE POWER
15197 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
15198 riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
15199 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
15200 sony sony_news sonyrisc sparc sparclite spectrum
15201 stardent stdc STDC_EXT stratos sun sun3 sun386
15202 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
15203 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
15204 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
15205 sysV68 sysV88 Tek4132 Tek4300 titan
15206 TM3200 TM5400 TM5600
15207 tower tower32 tower32_200 tower32_600 tower32_700
15208 tower32_800 tower32_850 tss
15209 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
15210 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
15211 unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
15212 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
15213 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
15214 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
15215 z8000
15216 EOSH
15217 # Maybe put other stuff here too.
15218 cat <<EOSH >>Cppsym.know
15219 $osname
15220 EOSH
15221 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
15222 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
15223 $cat Cppsym.know > Cppsym.c
15224 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
15225 $rm -f Cppsym.a Cppsym.b Cppsym.c
15226 cat <<EOSH > Cppsym
15227 $startsh
15228 if $test \$# -gt 0; then
15229     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
15230     if $test -s Cppsym.got; then
15231         $rm -f Cppsym.got
15232         exit 0
15233     fi
15234     $rm -f Cppsym.got
15235     exit 1
15236 else
15237     $tr " " "$trnl" | ./Cppsym.try
15238     exit 0
15239 fi
15240 EOSH
15241 chmod +x Cppsym
15242 $eunicefix Cppsym
15243 cat <<EOSH > Cppsym.try
15244 $startsh
15245 cat <<'EOCP' > try.c
15246 #include <stdio.h>
15247 int main() {
15248 EOCP
15249 $awk \\
15250 EOSH
15251 cat <<'EOSH' >> Cppsym.try
15252 'length($1) > 0 {
15253     printf "#ifdef %s\n#if %s+0\nprintf(\"%s=%%ld\\n\", %s);\n#else\nprintf(\"%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
15254     printf "#ifdef _%s\n#if _%s+0\nprintf(\"_%s=%%ld\\n\", _%s);\n#else\nprintf(\"_%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
15255     printf "#ifdef __%s\n#if __%s+0\nprintf(\"__%s=%%ld\\n\", __%s);\n#else\nprintf(\"__%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
15256     printf "#ifdef __%s__\n#if __%s__+0\nprintf(\"__%s__=%%ld\\n\", __%s__);\n#else\nprintf(\"__%s__\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
15257 }'       >> try.c
15258 echo '}' >> try.c
15259 EOSH
15260 cat <<EOSH >> Cppsym.try
15261 ccflags="$ccflags"
15262 case "$osname-$gccversion" in
15263 irix-) ccflags="\$ccflags -woff 1178" ;;
15264 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
15265 esac
15266 $cc -o try $optimize \$ccflags $ldflags try.c $libs && ./try$exe_ext
15267 EOSH
15268 chmod +x Cppsym.try
15269 $eunicefix Cppsym.try
15270 ./Cppsym < Cppsym.know > Cppsym.true
15271 : now check the C compiler for additional symbols
15272 postprocess_cc_v=''
15273 case "$osname" in
15274 aix) postprocess_cc_v="|$tr , ' '" ;;
15275 esac
15276 $cat >ccsym <<EOS
15277 $startsh
15278 $cat >tmp.c <<EOF
15279 extern int foo;
15280 EOF
15281 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
15282 do
15283         case "\$i" in
15284         -D*) echo "\$i" | $sed 's/^-D//';;
15285         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
15286         esac
15287 done
15288 $rm -f try.c
15289 EOS
15290 postprocess_cc_v=''
15291 chmod +x ccsym
15292 $eunicefix ccsym
15293 ./ccsym > ccsym1.raw
15294 if $test -s ccsym1.raw; then
15295        $sort ccsym1.raw | $uniq >ccsym.raw
15296 else
15297        mv ccsym1.raw ccsym.raw
15298 fi
15299
15300 $awk '/\=/ { print $0; next }
15301         { print $0"=1" }' ccsym.raw >ccsym.list
15302 $awk '/\=/ { print $0; next }
15303         { print $0"=1" }' Cppsym.true >ccsym.true
15304 $comm -13 ccsym.true ccsym.list >ccsym.own
15305 $comm -12 ccsym.true ccsym.list >ccsym.com
15306 $comm -23 ccsym.true ccsym.list >ccsym.cpp
15307 also=''
15308 if $test -z ccsym.raw; then
15309         echo "Your C compiler doesn't seem to define any symbols!" >&4
15310         echo " "
15311         echo "However, your C preprocessor defines the following symbols:"
15312         $cat Cppsym.true
15313         ccsymbols=''
15314         cppsymbols=`$cat Cppsym.true`
15315         cppsymbols=`echo $cppsymbols`
15316         cppccsymbols="$cppsymbols"
15317 else
15318         if $test -s ccsym.com; then
15319                 echo "Your C compiler and pre-processor define these symbols:"
15320                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
15321                 also='also '
15322                 symbols='ones'
15323                 cppccsymbols=`$cat ccsym.com`
15324                 cppccsymbols=`echo $cppccsymbols`
15325                 $test "$silent" || sleep 1
15326         fi
15327         if $test -s ccsym.cpp; then
15328                 $test "$also" && echo " "
15329                 echo "Your C pre-processor ${also}defines the following symbols:"
15330                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
15331                 also='further '
15332                 cppsymbols=`$cat ccsym.cpp`
15333                 cppsymbols=`echo $cppsymbols`
15334                 $test "$silent" || sleep 1
15335         fi
15336         if $test -s ccsym.own; then
15337                 $test "$also" && echo " "
15338                 echo "Your C compiler ${also}defines the following cpp symbols:"
15339                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
15340                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
15341                 ccsymbols=`$cat ccsym.own`
15342                 ccsymbols=`echo $ccsymbols`
15343                 $test "$silent" || sleep 1
15344         fi
15345 fi
15346 $rm -f ccsym* Cppsym.*
15347
15348 : see if this is a termio system
15349 val="$undef"
15350 val2="$undef"
15351 val3="$undef"
15352 if $test `./findhdr termios.h`; then
15353         set tcsetattr i_termios
15354         eval $inlibc
15355         val3="$i_termios"
15356 fi
15357 echo " "
15358 case "$val3" in
15359 "$define") echo "You have POSIX termios.h... good!" >&4;;
15360 *) if ./Cppsym pyr; then
15361                 case "`/bin/universe`" in
15362                 ucb) if $test `./findhdr sgtty.h`; then
15363                                 val2="$define"
15364                                 echo "<sgtty.h> found." >&4
15365                         else
15366                                 echo "System is pyramid with BSD universe."
15367                                 echo "<sgtty.h> not found--you could have problems." >&4
15368                         fi;;
15369                 *) if $test `./findhdr termio.h`; then
15370                                 val="$define"
15371                                 echo "<termio.h> found." >&4
15372                         else
15373                                 echo "System is pyramid with USG universe."
15374                                 echo "<termio.h> not found--you could have problems." >&4
15375                         fi;;
15376                 esac
15377         elif ./usg; then
15378                 if $test `./findhdr termio.h`; then
15379                         echo "<termio.h> found." >&4
15380                         val="$define"
15381                 elif $test `./findhdr sgtty.h`; then
15382                         echo "<sgtty.h> found." >&4
15383                         val2="$define"
15384                 else
15385 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
15386                 fi
15387         else
15388                 if $test `./findhdr sgtty.h`; then
15389                         echo "<sgtty.h> found." >&4
15390                         val2="$define"
15391                 elif $test `./findhdr termio.h`; then
15392                         echo "<termio.h> found." >&4
15393                         val="$define"
15394                 else
15395 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
15396                 fi
15397         fi;;
15398 esac
15399 set i_termio; eval $setvar
15400 val=$val2; set i_sgtty; eval $setvar
15401 val=$val3; set i_termios; eval $setvar
15402
15403 : see if this is a shadow.h system
15404 set shadow.h i_shadow
15405 eval $inhdr
15406
15407 : see if stddef is available
15408 set stddef.h i_stddef
15409 eval $inhdr
15410
15411 : see if this is a sunmath.h system
15412 set sunmath.h i_sunmath
15413 eval $inhdr
15414
15415 : see if sys/access.h is available
15416 set sys/access.h i_sysaccess
15417 eval $inhdr
15418
15419 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
15420 set sys/filio.h i_sysfilio
15421 eval $inhdr
15422 echo " "
15423 if $test `./findhdr sys/ioctl.h`; then
15424         val="$define"
15425         echo '<sys/ioctl.h> found.' >&4
15426 else
15427         val="$undef"
15428         if $test $i_sysfilio = "$define"; then
15429             echo '<sys/ioctl.h> NOT found.' >&4
15430         else
15431                 $test $i_sgtty = "$define" && xxx="sgtty.h"
15432                 $test $i_termio = "$define" && xxx="termio.h"
15433                 $test $i_termios = "$define" && xxx="termios.h"
15434 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
15435         fi
15436 fi
15437 set i_sysioctl
15438 eval $setvar
15439
15440
15441 : see if this is a syslog.h system
15442 set syslog.h i_syslog
15443 eval $inhdr
15444
15445
15446 : see if this is a sys/mode.h system
15447 set sys/mode.h i_sysmode
15448 eval $inhdr
15449
15450 : see if sys/resource.h has to be included
15451 set sys/resource.h i_sysresrc
15452 eval $inhdr
15453
15454 : see if sys/security.h is available
15455 set sys/security.h i_syssecrt
15456 eval $inhdr
15457
15458 : see if this is a sys/statvfs.h system
15459 set sys/statvfs.h i_sysstatvfs
15460 eval $inhdr
15461
15462 : see if this is a sys/uio.h system
15463 set sys/uio.h i_sysuio
15464 eval $inhdr
15465
15466 : see if this is a sys/un.h system
15467 set sys/un.h i_sysun
15468 eval $inhdr
15469
15470
15471 : see if this is a sys/utsname.h system
15472 set sys/utsname.h i_sysutsname
15473 eval $inhdr
15474
15475 : see if this is a syswait system
15476 set sys/wait.h i_syswait
15477 eval $inhdr
15478
15479 : see if this is a ustat.h system
15480 set ustat.h i_ustat
15481 eval $inhdr
15482
15483 : see if this is an utime system
15484 set utime.h i_utime
15485 eval $inhdr
15486
15487 : see if this is a values.h system
15488 set values.h i_values
15489 eval $inhdr
15490
15491 : see if this is a vfork system
15492 case "$d_vfork" in
15493 "$define")
15494         set vfork.h i_vfork
15495         eval $inhdr
15496         ;;
15497 *)
15498         i_vfork="$undef"
15499         ;;
15500 esac
15501
15502 : see if gdbm.h is available
15503 set gdbm.h t_gdbm
15504 eval $inhdr
15505 case "$t_gdbm" in
15506 $define)
15507         : see if gdbm_open exists
15508         set gdbm_open d_gdbm_open
15509         eval $inlibc
15510         case "$d_gdbm_open" in
15511         $undef)
15512                 t_gdbm="$undef"
15513                 echo "We won't be including <gdbm.h>"
15514                 ;;
15515         esac
15516         ;;
15517 esac
15518 val="$t_gdbm"
15519 set i_gdbm
15520 eval $setvar
15521
15522 echo " "
15523 echo "Looking for extensions..." >&4
15524 : If we are using the old config.sh, known_extensions may contain
15525 : old or inaccurate or duplicate values.
15526 known_extensions=''
15527 nonxs_extensions=''
15528 : We do not use find because it might not be available.
15529 : We do not just use MANIFEST because the user may have dropped
15530 : some additional extensions into the source tree and expect them
15531 : to be built.
15532
15533 : Function to recursively find available extensions, ignoring DynaLoader
15534 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
15535 find_extensions='
15536     for xxx in *; do
15537        case "$xxx" in
15538            DynaLoader|dynaload) ;;
15539            *)
15540            if $test -f $xxx/$xxx.xs; then
15541                known_extensions="$known_extensions $1$xxx";
15542            elif $test -f $xxx/Makefile.PL; then
15543                nonxs_extensions="$nonxs_extensions $1$xxx";
15544            else
15545                if $test -d $xxx -a $# -lt 10; then
15546                    set $1$xxx/ $*;
15547                    cd $xxx;
15548                    eval $find_extensions;
15549                    cd ..;
15550                    shift;
15551                fi;
15552            fi
15553            ;;
15554        esac;
15555     done'
15556 tdir=`pwd`
15557 cd $rsrc/ext
15558 set X
15559 shift
15560 eval $find_extensions
15561 set X $nonxs_extensions
15562 shift
15563 nonxs_extensions="$*"
15564 set X $known_extensions
15565 shift
15566 known_extensions="$*"
15567 cd $tdir
15568
15569 : Now see which are supported on this system.
15570 avail_ext=''
15571 for xxx in $known_extensions ; do
15572         case "$xxx" in
15573         DB_File|db_file)
15574                 case "$i_db" in
15575                 $define) avail_ext="$avail_ext $xxx" ;;
15576                 esac
15577                 ;;
15578         GDBM_File|gdbm_fil)
15579                 case "$i_gdbm" in 
15580                 $define) avail_ext="$avail_ext $xxx" ;;
15581                 esac
15582                 ;;
15583         NDBM_File|ndbm_fil)
15584                 case "$i_ndbm" in
15585                 $define)
15586                     case "$osname-$use64bitint" in
15587                     hpux-define)
15588                         case "$libs" in
15589                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
15590                         esac
15591                         ;;
15592                     *) avail_ext="$avail_ext $xxx" ;;
15593                     esac
15594                     ;;
15595                 esac
15596                 ;;
15597         ODBM_File|odbm_fil) 
15598                 case "${i_dbm}${i_rpcsvcdbm}" in
15599                 *"${define}"*)
15600                     case "$osname-$use64bitint" in
15601                     hpux-define)
15602                         case "$libs" in
15603                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
15604                         esac
15605                         ;;
15606                     *) avail_ext="$avail_ext $xxx" ;;
15607                     esac
15608                     ;;
15609                 esac
15610                 ;;
15611         POSIX|posix)
15612                 case "$useposix" in
15613                 true|define|y) avail_ext="$avail_ext $xxx" ;;
15614                 esac
15615                 ;;
15616         Opcode|opcode)
15617                 case "$useopcode" in
15618                 true|define|y) avail_ext="$avail_ext $xxx" ;;
15619                 esac
15620                 ;;
15621         Socket|socket)
15622                 case "$d_socket" in 
15623                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15624                 esac
15625                 ;;
15626         Sys/Syslog|sys/syslog)
15627                 : XXX syslog requires socket
15628                 case "$d_socket" in 
15629                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15630                 esac
15631                 ;;
15632         Thread|thread)
15633                 case "$usethreads" in 
15634                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15635                 esac
15636                 ;;
15637         IPC/SysV|ipc/sysv)
15638                 : XXX Do we need a useipcsysv variable here
15639                 case "${d_msg}${d_sem}${d_shm}" in 
15640                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
15641                 esac
15642                 ;;
15643         *)      avail_ext="$avail_ext $xxx"
15644                 ;;
15645         esac
15646 done
15647
15648 set X $avail_ext
15649 shift
15650 avail_ext="$*"
15651
15652 : Now see which nonxs extensions are supported on this system.
15653 : For now assume all are.
15654 nonxs_ext=''
15655 for xxx in $nonxs_extensions ; do
15656         case "$xxx" in
15657         *)      nonxs_ext="$nonxs_ext $xxx"
15658                 ;;
15659         esac
15660 done
15661
15662 set X $nonxs_ext
15663 shift
15664 nonxs_ext="$*"
15665
15666 case $usedl in
15667 $define)
15668         $cat <<EOM
15669 A number of extensions are supplied with $package.  You may choose to
15670 compile these extensions for dynamic loading (the default), compile
15671 them into the $package executable (static loading), or not include
15672 them at all.  Answer "none" to include no extensions.
15673 Note that DynaLoader is always built and need not be mentioned here.
15674
15675 EOM
15676         case "$dynamic_ext" in
15677         '') dflt="$avail_ext" ;;
15678         *)      dflt="$dynamic_ext"
15679                 # Perhaps we are reusing an old out-of-date config.sh.
15680                 case "$hint" in
15681                 previous)
15682                         if test X"$dynamic_ext" != X"$avail_ext"; then
15683                                 $cat <<EOM
15684 NOTICE:  Your previous config.sh list may be incorrect. 
15685 The extensions now available to you are 
15686         ${avail_ext}
15687 but the default list from your previous config.sh is
15688         ${dynamic_ext} 
15689
15690 EOM
15691                         fi
15692                         ;;
15693                 esac
15694                 ;;
15695         esac
15696         case "$dflt" in
15697         '')     dflt=none;;
15698         esac
15699         rp="What extensions do you wish to load dynamically?"
15700         . ./myread
15701         case "$ans" in
15702         none) dynamic_ext=' ' ;;
15703         *) dynamic_ext="$ans" ;;
15704         esac
15705
15706         case "$static_ext" in
15707         '')
15708                 : Exclude those already listed in dynamic linking
15709                 dflt=''
15710                 for xxx in $avail_ext; do
15711                         case " $dynamic_ext " in
15712                         *" $xxx "*) ;;
15713                         *) dflt="$dflt $xxx" ;;
15714                         esac
15715                 done
15716                 set X $dflt
15717                 shift
15718                 dflt="$*"
15719                 ;;
15720         *)  dflt="$static_ext" 
15721                 ;;
15722         esac
15723
15724         case "$dflt" in
15725         '')     dflt=none;;
15726         esac
15727         rp="What extensions do you wish to load statically?"
15728         . ./myread
15729         case "$ans" in
15730         none) static_ext=' ' ;;
15731         *) static_ext="$ans" ;;
15732         esac
15733         ;;
15734 *)
15735         $cat <<EOM
15736 A number of extensions are supplied with $package.  Answer "none" 
15737 to include no extensions. 
15738 Note that DynaLoader is always built and need not be mentioned here.
15739
15740 EOM
15741         case "$static_ext" in
15742         '') dflt="$avail_ext" ;;
15743         *)      dflt="$static_ext"
15744                 # Perhaps we are reusing an old out-of-date config.sh.
15745                 case "$hint" in
15746                 previous)
15747                         if test X"$static_ext" != X"$avail_ext"; then
15748                                 $cat <<EOM
15749 NOTICE:  Your previous config.sh list may be incorrect. 
15750 The extensions now available to you are 
15751         ${avail_ext}
15752 but the default list from your previous config.sh is
15753         ${static_ext} 
15754
15755 EOM
15756                         fi
15757                         ;;
15758                 esac
15759                 ;;
15760         esac
15761         : Exclude those that are not xs extensions
15762         case "$dflt" in
15763         '')     dflt=none;;
15764         esac
15765         rp="What extensions do you wish to include?"
15766         . ./myread
15767         case "$ans" in
15768         none) static_ext=' ' ;;
15769         *) static_ext="$ans" ;;
15770         esac
15771         ;;
15772 esac
15773
15774 set X $dynamic_ext $static_ext $nonxs_ext
15775 shift
15776 extensions="$*"
15777
15778 : Remove libraries needed only for extensions
15779 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
15780 : The exception is SunOS 4.x, which needs them.
15781 case "${osname}X${osvers}" in
15782 sunos*X4*)
15783     perllibs="$libs"
15784     ;;
15785 *) case "$usedl" in
15786     $define|true|[yY]*)
15787             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'` 
15788             shift
15789             perllibs="$*"
15790             ;;
15791     *)  perllibs="$libs"
15792             ;;
15793     esac
15794     ;;
15795 esac
15796
15797 : Remove build directory name from cppstdin so it can be used from
15798 : either the present location or the final installed location.
15799 echo " "
15800 : Get out of the UU directory to get correct path name.
15801 cd ..
15802 case "$cppstdin" in
15803 `pwd`/cppstdin)
15804         echo "Stripping down cppstdin path name"
15805         cppstdin=cppstdin
15806         ;;
15807 esac
15808 cd UU
15809
15810 : end of configuration questions
15811 echo " "
15812 echo "End of configuration questions."
15813 echo " "
15814
15815 : back to where it started
15816 if test -d ../UU; then
15817         cd ..
15818 fi
15819
15820 : configuration may be patched via a 'config.over' file
15821 if $test -f config.over; then
15822         echo " "
15823         dflt=y
15824         rp='I see a config.over file.  Do you wish to load it?'
15825         . UU/myread
15826         case "$ans" in
15827         n*) echo "OK, I'll ignore it.";;
15828         *)      . ./config.over
15829                 echo "Configuration override changes have been loaded."
15830                 ;;
15831         esac
15832 fi
15833
15834 : in case they want portability, strip down executable paths
15835 case "$d_portable" in
15836 "$define")
15837         echo " "
15838         echo "Stripping down executable paths..." >&4
15839         for file in $loclist $trylist; do
15840                 eval temp=\$$file
15841                 eval $file=`basename $temp`
15842         done
15843         ;;
15844 esac
15845
15846 : create config.sh file
15847 echo " "
15848 echo "Creating config.sh..." >&4
15849 $spitshell <<EOT >config.sh
15850 $startsh
15851 #
15852 # This file was produced by running the Configure script. It holds all the
15853 # definitions figured out by Configure. Should you modify one of these values,
15854 # do not forget to propagate your changes by running "Configure -der". You may
15855 # instead choose to run each of the .SH files by yourself, or "Configure -S".
15856 #
15857
15858 # Package name      : $package
15859 # Source directory  : $src
15860 # Configuration time: $cf_time
15861 # Configured by     : $cf_by
15862 # Target system     : $myuname
15863
15864 Author='$Author'
15865 Date='$Date'
15866 Header='$Header'
15867 Id='$Id'
15868 Locker='$Locker'
15869 Log='$Log'
15870 Mcc='$Mcc'
15871 RCSfile='$RCSfile'
15872 Revision='$Revision'
15873 Source='$Source'
15874 State='$State'
15875 _a='$_a'
15876 _exe='$_exe'
15877 _o='$_o'
15878 afs='$afs'
15879 alignbytes='$alignbytes'
15880 ansi2knr='$ansi2knr'
15881 aphostname='$aphostname'
15882 api_revision='$api_revision'
15883 api_subversion='$api_subversion'
15884 api_version='$api_version'
15885 api_versionstring='$api_versionstring'
15886 ar='$ar'
15887 archlib='$archlib'
15888 archlibexp='$archlibexp'
15889 archname64='$archname64'
15890 archname='$archname'
15891 archobjs='$archobjs'
15892 awk='$awk'
15893 baserev='$baserev'
15894 bash='$bash'
15895 bin='$bin'
15896 bincompat5005='$bincompat5005'
15897 binexp='$binexp'
15898 bison='$bison'
15899 byacc='$byacc'
15900 byteorder='$byteorder'
15901 c='$c'
15902 castflags='$castflags'
15903 cat='$cat'
15904 cc='$cc'
15905 cccdlflags='$cccdlflags'
15906 ccdlflags='$ccdlflags'
15907 ccflags='$ccflags'
15908 ccflags_uselargefiles='$ccflags_uselargefiles'
15909 ccname='$ccname'
15910 ccsymbols='$ccsymbols'
15911 ccversion='$ccversion'
15912 cf_by='$cf_by'
15913 cf_email='$cf_email'
15914 cf_time='$cf_time'
15915 charsize='$charsize'
15916 chgrp='$chgrp'
15917 chmod='$chmod'
15918 chown='$chown'
15919 clocktype='$clocktype'
15920 comm='$comm'
15921 compress='$compress'
15922 contains='$contains'
15923 cp='$cp'
15924 cpio='$cpio'
15925 cpp='$cpp'
15926 cpp_stuff='$cpp_stuff'
15927 cppccsymbols='$cppccsymbols'
15928 cppflags='$cppflags'
15929 cpplast='$cpplast'
15930 cppminus='$cppminus'
15931 cpprun='$cpprun'
15932 cppstdin='$cppstdin'
15933 cppsymbols='$cppsymbols'
15934 crosscompile='$crosscompile'
15935 cryptlib='$cryptlib'
15936 csh='$csh'
15937 d_Gconvert='$d_Gconvert'
15938 d_PRIEUldbl='$d_PRIEUldbl'
15939 d_PRIFUldbl='$d_PRIFUldbl'
15940 d_PRIGUldbl='$d_PRIGUldbl'
15941 d_PRIXU64='$d_PRIXU64'
15942 d_PRId64='$d_PRId64'
15943 d_PRIeldbl='$d_PRIeldbl'
15944 d_PRIfldbl='$d_PRIfldbl'
15945 d_PRIgldbl='$d_PRIgldbl'
15946 d_PRIi64='$d_PRIi64'
15947 d_PRIo64='$d_PRIo64'
15948 d_PRIu64='$d_PRIu64'
15949 d_PRIx64='$d_PRIx64'
15950 d_SCNfldbl='$d_SCNfldbl'
15951 d__fwalk='$d__fwalk'
15952 d_access='$d_access'
15953 d_accessx='$d_accessx'
15954 d_alarm='$d_alarm'
15955 d_archlib='$d_archlib'
15956 d_atolf='$d_atolf'
15957 d_atoll='$d_atoll'
15958 d_attribut='$d_attribut'
15959 d_bcmp='$d_bcmp'
15960 d_bcopy='$d_bcopy'
15961 d_bincompat5005='$d_bincompat5005'
15962 d_bsd='$d_bsd'
15963 d_bsdgetpgrp='$d_bsdgetpgrp'
15964 d_bsdsetpgrp='$d_bsdsetpgrp'
15965 d_bzero='$d_bzero'
15966 d_casti32='$d_casti32'
15967 d_castneg='$d_castneg'
15968 d_charvspr='$d_charvspr'
15969 d_chown='$d_chown'
15970 d_chroot='$d_chroot'
15971 d_chsize='$d_chsize'
15972 d_closedir='$d_closedir'
15973 d_const='$d_const'
15974 d_crypt='$d_crypt'
15975 d_csh='$d_csh'
15976 d_cuserid='$d_cuserid'
15977 d_dbl_dig='$d_dbl_dig'
15978 d_difftime='$d_difftime'
15979 d_dirnamlen='$d_dirnamlen'
15980 d_dlerror='$d_dlerror'
15981 d_dlopen='$d_dlopen'
15982 d_dlsymun='$d_dlsymun'
15983 d_dosuid='$d_dosuid'
15984 d_drand48proto='$d_drand48proto'
15985 d_dup2='$d_dup2'
15986 d_eaccess='$d_eaccess'
15987 d_endgrent='$d_endgrent'
15988 d_endhent='$d_endhent'
15989 d_endnent='$d_endnent'
15990 d_endpent='$d_endpent'
15991 d_endpwent='$d_endpwent'
15992 d_endsent='$d_endsent'
15993 d_eofnblk='$d_eofnblk'
15994 d_eunice='$d_eunice'
15995 d_fchmod='$d_fchmod'
15996 d_fchown='$d_fchown'
15997 d_fcntl='$d_fcntl'
15998 d_fcntl_can_lock='$d_fcntl_can_lock'
15999 d_fd_macros='$d_fd_macros'
16000 d_fd_set='$d_fd_set'
16001 d_fds_bits='$d_fds_bits'
16002 d_fgetpos='$d_fgetpos'
16003 d_flexfnam='$d_flexfnam'
16004 d_flock='$d_flock'
16005 d_fork='$d_fork'
16006 d_fpathconf='$d_fpathconf'
16007 d_fpos64_t='$d_fpos64_t'
16008 d_frexpl='$d_frexpl'
16009 d_fs_data_s='$d_fs_data_s'
16010 d_fseeko='$d_fseeko'
16011 d_fsetpos='$d_fsetpos'
16012 d_fstatfs='$d_fstatfs'
16013 d_fstatvfs='$d_fstatvfs'
16014 d_fsync='$d_fsync'
16015 d_ftello='$d_ftello'
16016 d_ftime='$d_ftime'
16017 d_getcwd='$d_getcwd'
16018 d_getespwnam='$d_getespwnam'
16019 d_getfsstat='$d_getfsstat'
16020 d_getgrent='$d_getgrent'
16021 d_getgrps='$d_getgrps'
16022 d_gethbyaddr='$d_gethbyaddr'
16023 d_gethbyname='$d_gethbyname'
16024 d_gethent='$d_gethent'
16025 d_gethname='$d_gethname'
16026 d_gethostprotos='$d_gethostprotos'
16027 d_getlogin='$d_getlogin'
16028 d_getmnt='$d_getmnt'
16029 d_getmntent='$d_getmntent'
16030 d_getnbyaddr='$d_getnbyaddr'
16031 d_getnbyname='$d_getnbyname'
16032 d_getnent='$d_getnent'
16033 d_getnetprotos='$d_getnetprotos'
16034 d_getpagsz='$d_getpagsz'
16035 d_getpbyname='$d_getpbyname'
16036 d_getpbynumber='$d_getpbynumber'
16037 d_getpent='$d_getpent'
16038 d_getpgid='$d_getpgid'
16039 d_getpgrp2='$d_getpgrp2'
16040 d_getpgrp='$d_getpgrp'
16041 d_getppid='$d_getppid'
16042 d_getprior='$d_getprior'
16043 d_getprotoprotos='$d_getprotoprotos'
16044 d_getprpwnam='$d_getprpwnam'
16045 d_getpwent='$d_getpwent'
16046 d_getsbyname='$d_getsbyname'
16047 d_getsbyport='$d_getsbyport'
16048 d_getsent='$d_getsent'
16049 d_getservprotos='$d_getservprotos'
16050 d_getspnam='$d_getspnam'
16051 d_gettimeod='$d_gettimeod'
16052 d_gnulibc='$d_gnulibc'
16053 d_grpasswd='$d_grpasswd'
16054 d_hasmntopt='$d_hasmntopt'
16055 d_htonl='$d_htonl'
16056 d_iconv='$d_iconv'
16057 d_index='$d_index'
16058 d_inetaton='$d_inetaton'
16059 d_int64_t='$d_int64_t'
16060 d_isascii='$d_isascii'
16061 d_isnan='$d_isnan'
16062 d_isnanl='$d_isnanl'
16063 d_killpg='$d_killpg'
16064 d_lchown='$d_lchown'
16065 d_ldbl_dig='$d_ldbl_dig'
16066 d_link='$d_link'
16067 d_locconv='$d_locconv'
16068 d_lockf='$d_lockf'
16069 d_longdbl='$d_longdbl'
16070 d_longlong='$d_longlong'
16071 d_lseekproto='$d_lseekproto'
16072 d_lstat='$d_lstat'
16073 d_madvise='$d_madvise'
16074 d_mblen='$d_mblen'
16075 d_mbstowcs='$d_mbstowcs'
16076 d_mbtowc='$d_mbtowc'
16077 d_memchr='$d_memchr'
16078 d_memcmp='$d_memcmp'
16079 d_memcpy='$d_memcpy'
16080 d_memmove='$d_memmove'
16081 d_memset='$d_memset'
16082 d_mkdir='$d_mkdir'
16083 d_mkdtemp='$d_mkdtemp'
16084 d_mkfifo='$d_mkfifo'
16085 d_mkstemp='$d_mkstemp'
16086 d_mkstemps='$d_mkstemps'
16087 d_mktime='$d_mktime'
16088 d_mmap='$d_mmap'
16089 d_modfl='$d_modfl'
16090 d_mprotect='$d_mprotect'
16091 d_msg='$d_msg'
16092 d_msg_ctrunc='$d_msg_ctrunc'
16093 d_msg_dontroute='$d_msg_dontroute'
16094 d_msg_oob='$d_msg_oob'
16095 d_msg_peek='$d_msg_peek'
16096 d_msg_proxy='$d_msg_proxy'
16097 d_msgctl='$d_msgctl'
16098 d_msgget='$d_msgget'
16099 d_msgrcv='$d_msgrcv'
16100 d_msgsnd='$d_msgsnd'
16101 d_msync='$d_msync'
16102 d_munmap='$d_munmap'
16103 d_mymalloc='$d_mymalloc'
16104 d_nice='$d_nice'
16105 d_nv_preserves_uv='$d_nv_preserves_uv'
16106 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
16107 d_off64_t='$d_off64_t'
16108 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
16109 d_oldpthreads='$d_oldpthreads'
16110 d_oldsock='$d_oldsock'
16111 d_open3='$d_open3'
16112 d_pathconf='$d_pathconf'
16113 d_pause='$d_pause'
16114 d_perl_otherlibdirs='$d_perl_otherlibdirs'
16115 d_phostname='$d_phostname'
16116 d_pipe='$d_pipe'
16117 d_poll='$d_poll'
16118 d_portable='$d_portable'
16119 d_pthread_yield='$d_pthread_yield'
16120 d_pwage='$d_pwage'
16121 d_pwchange='$d_pwchange'
16122 d_pwclass='$d_pwclass'
16123 d_pwcomment='$d_pwcomment'
16124 d_pwexpire='$d_pwexpire'
16125 d_pwgecos='$d_pwgecos'
16126 d_pwpasswd='$d_pwpasswd'
16127 d_pwquota='$d_pwquota'
16128 d_qgcvt='$d_qgcvt'
16129 d_quad='$d_quad'
16130 d_readdir='$d_readdir'
16131 d_readlink='$d_readlink'
16132 d_rename='$d_rename'
16133 d_rewinddir='$d_rewinddir'
16134 d_rmdir='$d_rmdir'
16135 d_safebcpy='$d_safebcpy'
16136 d_safemcpy='$d_safemcpy'
16137 d_sanemcmp='$d_sanemcmp'
16138 d_sbrkproto='$d_sbrkproto'
16139 d_sched_yield='$d_sched_yield'
16140 d_scm_rights='$d_scm_rights'
16141 d_seekdir='$d_seekdir'
16142 d_select='$d_select'
16143 d_sem='$d_sem'
16144 d_semctl='$d_semctl'
16145 d_semctl_semid_ds='$d_semctl_semid_ds'
16146 d_semctl_semun='$d_semctl_semun'
16147 d_semget='$d_semget'
16148 d_semop='$d_semop'
16149 d_setegid='$d_setegid'
16150 d_seteuid='$d_seteuid'
16151 d_setgrent='$d_setgrent'
16152 d_setgrps='$d_setgrps'
16153 d_sethent='$d_sethent'
16154 d_setlinebuf='$d_setlinebuf'
16155 d_setlocale='$d_setlocale'
16156 d_setnent='$d_setnent'
16157 d_setpent='$d_setpent'
16158 d_setpgid='$d_setpgid'
16159 d_setpgrp2='$d_setpgrp2'
16160 d_setpgrp='$d_setpgrp'
16161 d_setprior='$d_setprior'
16162 d_setproctitle='$d_setproctitle'
16163 d_setpwent='$d_setpwent'
16164 d_setregid='$d_setregid'
16165 d_setresgid='$d_setresgid'
16166 d_setresuid='$d_setresuid'
16167 d_setreuid='$d_setreuid'
16168 d_setrgid='$d_setrgid'
16169 d_setruid='$d_setruid'
16170 d_setsent='$d_setsent'
16171 d_setsid='$d_setsid'
16172 d_setvbuf='$d_setvbuf'
16173 d_sfio='$d_sfio'
16174 d_shm='$d_shm'
16175 d_shmat='$d_shmat'
16176 d_shmatprototype='$d_shmatprototype'
16177 d_shmctl='$d_shmctl'
16178 d_shmdt='$d_shmdt'
16179 d_shmget='$d_shmget'
16180 d_sigaction='$d_sigaction'
16181 d_sigprocmask='$d_sigprocmask'
16182 d_sigsetjmp='$d_sigsetjmp'
16183 d_socket='$d_socket'
16184 d_socklen_t='$d_socklen_t'
16185 d_sockpair='$d_sockpair'
16186 d_socks5_init='$d_socks5_init'
16187 d_sqrtl='$d_sqrtl'
16188 d_statblks='$d_statblks'
16189 d_statfs_f_flags='$d_statfs_f_flags'
16190 d_statfs_s='$d_statfs_s'
16191 d_statvfs='$d_statvfs'
16192 d_stdio_cnt_lval='$d_stdio_cnt_lval'
16193 d_stdio_ptr_lval='$d_stdio_ptr_lval'
16194 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
16195 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
16196 d_stdio_stream_array='$d_stdio_stream_array'
16197 d_stdiobase='$d_stdiobase'
16198 d_stdstdio='$d_stdstdio'
16199 d_strchr='$d_strchr'
16200 d_strcoll='$d_strcoll'
16201 d_strctcpy='$d_strctcpy'
16202 d_strerrm='$d_strerrm'
16203 d_strerror='$d_strerror'
16204 d_strtod='$d_strtod'
16205 d_strtol='$d_strtol'
16206 d_strtold='$d_strtold'
16207 d_strtoll='$d_strtoll'
16208 d_strtoq='$d_strtoq'
16209 d_strtoul='$d_strtoul'
16210 d_strtoull='$d_strtoull'
16211 d_strtouq='$d_strtouq'
16212 d_strxfrm='$d_strxfrm'
16213 d_suidsafe='$d_suidsafe'
16214 d_symlink='$d_symlink'
16215 d_syscall='$d_syscall'
16216 d_sysconf='$d_sysconf'
16217 d_sysernlst='$d_sysernlst'
16218 d_syserrlst='$d_syserrlst'
16219 d_system='$d_system'
16220 d_tcgetpgrp='$d_tcgetpgrp'
16221 d_tcsetpgrp='$d_tcsetpgrp'
16222 d_telldir='$d_telldir'
16223 d_telldirproto='$d_telldirproto'
16224 d_time='$d_time'
16225 d_times='$d_times'
16226 d_truncate='$d_truncate'
16227 d_tzname='$d_tzname'
16228 d_umask='$d_umask'
16229 d_uname='$d_uname'
16230 d_union_semun='$d_union_semun'
16231 d_ustat='$d_ustat'
16232 d_vendorarch='$d_vendorarch'
16233 d_vendorbin='$d_vendorbin'
16234 d_vendorlib='$d_vendorlib'
16235 d_vfork='$d_vfork'
16236 d_void_closedir='$d_void_closedir'
16237 d_voidsig='$d_voidsig'
16238 d_voidtty='$d_voidtty'
16239 d_volatile='$d_volatile'
16240 d_vprintf='$d_vprintf'
16241 d_wait4='$d_wait4'
16242 d_waitpid='$d_waitpid'
16243 d_wcstombs='$d_wcstombs'
16244 d_wctomb='$d_wctomb'
16245 d_xenix='$d_xenix'
16246 date='$date'
16247 db_hashtype='$db_hashtype'
16248 db_prefixtype='$db_prefixtype'
16249 defvoidused='$defvoidused'
16250 direntrytype='$direntrytype'
16251 dlext='$dlext'
16252 dlsrc='$dlsrc'
16253 doublesize='$doublesize'
16254 drand01='$drand01'
16255 dynamic_ext='$dynamic_ext'
16256 eagain='$eagain'
16257 ebcdic='$ebcdic'
16258 echo='$echo'
16259 egrep='$egrep'
16260 emacs='$emacs'
16261 eunicefix='$eunicefix'
16262 exe_ext='$exe_ext'
16263 expr='$expr'
16264 extensions='$extensions'
16265 fflushNULL='$fflushNULL'
16266 fflushall='$fflushall'
16267 find='$find'
16268 firstmakefile='$firstmakefile'
16269 flex='$flex'
16270 fpossize='$fpossize'
16271 fpostype='$fpostype'
16272 freetype='$freetype'
16273 full_ar='$full_ar'
16274 full_csh='$full_csh'
16275 full_sed='$full_sed'
16276 gccosandvers='$gccosandvers'
16277 gccversion='$gccversion'
16278 gidformat='$gidformat'
16279 gidsign='$gidsign'
16280 gidsize='$gidsize'
16281 gidtype='$gidtype'
16282 glibpth='$glibpth'
16283 grep='$grep'
16284 groupcat='$groupcat'
16285 groupstype='$groupstype'
16286 gzip='$gzip'
16287 h_fcntl='$h_fcntl'
16288 h_sysfile='$h_sysfile'
16289 hint='$hint'
16290 hostcat='$hostcat'
16291 i16size='$i16size'
16292 i16type='$i16type'
16293 i32size='$i32size'
16294 i32type='$i32type'
16295 i64size='$i64size'
16296 i64type='$i64type'
16297 i8size='$i8size'
16298 i8type='$i8type'
16299 i_arpainet='$i_arpainet'
16300 i_bsdioctl='$i_bsdioctl'
16301 i_db='$i_db'
16302 i_dbm='$i_dbm'
16303 i_dirent='$i_dirent'
16304 i_dld='$i_dld'
16305 i_dlfcn='$i_dlfcn'
16306 i_fcntl='$i_fcntl'
16307 i_float='$i_float'
16308 i_gdbm='$i_gdbm'
16309 i_grp='$i_grp'
16310 i_iconv='$i_iconv'
16311 i_ieeefp='$i_ieeefp'
16312 i_inttypes='$i_inttypes'
16313 i_libutil='$i_libutil'
16314 i_limits='$i_limits'
16315 i_locale='$i_locale'
16316 i_machcthr='$i_machcthr'
16317 i_malloc='$i_malloc'
16318 i_math='$i_math'
16319 i_memory='$i_memory'
16320 i_mntent='$i_mntent'
16321 i_ndbm='$i_ndbm'
16322 i_netdb='$i_netdb'
16323 i_neterrno='$i_neterrno'
16324 i_netinettcp='$i_netinettcp'
16325 i_niin='$i_niin'
16326 i_poll='$i_poll'
16327 i_prot='$i_prot'
16328 i_pthread='$i_pthread'
16329 i_pwd='$i_pwd'
16330 i_rpcsvcdbm='$i_rpcsvcdbm'
16331 i_sfio='$i_sfio'
16332 i_sgtty='$i_sgtty'
16333 i_shadow='$i_shadow'
16334 i_socks='$i_socks'
16335 i_stdarg='$i_stdarg'
16336 i_stddef='$i_stddef'
16337 i_stdlib='$i_stdlib'
16338 i_string='$i_string'
16339 i_sunmath='$i_sunmath'
16340 i_sysaccess='$i_sysaccess'
16341 i_sysdir='$i_sysdir'
16342 i_sysfile='$i_sysfile'
16343 i_sysfilio='$i_sysfilio'
16344 i_sysin='$i_sysin'
16345 i_sysioctl='$i_sysioctl'
16346 i_syslog='$i_syslog'
16347 i_sysmman='$i_sysmman'
16348 i_sysmode='$i_sysmode'
16349 i_sysmount='$i_sysmount'
16350 i_sysndir='$i_sysndir'
16351 i_sysparam='$i_sysparam'
16352 i_sysresrc='$i_sysresrc'
16353 i_syssecrt='$i_syssecrt'
16354 i_sysselct='$i_sysselct'
16355 i_syssockio='$i_syssockio'
16356 i_sysstat='$i_sysstat'
16357 i_sysstatfs='$i_sysstatfs'
16358 i_sysstatvfs='$i_sysstatvfs'
16359 i_systime='$i_systime'
16360 i_systimek='$i_systimek'
16361 i_systimes='$i_systimes'
16362 i_systypes='$i_systypes'
16363 i_sysuio='$i_sysuio'
16364 i_sysun='$i_sysun'
16365 i_sysutsname='$i_sysutsname'
16366 i_sysvfs='$i_sysvfs'
16367 i_syswait='$i_syswait'
16368 i_termio='$i_termio'
16369 i_termios='$i_termios'
16370 i_time='$i_time'
16371 i_unistd='$i_unistd'
16372 i_ustat='$i_ustat'
16373 i_utime='$i_utime'
16374 i_values='$i_values'
16375 i_varargs='$i_varargs'
16376 i_varhdr='$i_varhdr'
16377 i_vfork='$i_vfork'
16378 ignore_versioned_solibs='$ignore_versioned_solibs'
16379 inc_version_list='$inc_version_list'
16380 inc_version_list_init='$inc_version_list_init'
16381 incpath='$incpath'
16382 inews='$inews'
16383 installarchlib='$installarchlib'
16384 installbin='$installbin'
16385 installman1dir='$installman1dir'
16386 installman3dir='$installman3dir'
16387 installprefix='$installprefix'
16388 installprefixexp='$installprefixexp'
16389 installprivlib='$installprivlib'
16390 installscript='$installscript'
16391 installsitearch='$installsitearch'
16392 installsitebin='$installsitebin'
16393 installsitelib='$installsitelib'
16394 installstyle='$installstyle'
16395 installusrbinperl='$installusrbinperl'
16396 installvendorarch='$installvendorarch'
16397 installvendorbin='$installvendorbin'
16398 installvendorlib='$installvendorlib'
16399 intsize='$intsize'
16400 issymlink='$issymlink'
16401 ivdformat='$ivdformat'
16402 ivsize='$ivsize'
16403 ivtype='$ivtype'
16404 known_extensions='$known_extensions'
16405 ksh='$ksh'
16406 ld='$ld'
16407 lddlflags='$lddlflags'
16408 ldflags='$ldflags'
16409 ldflags_uselargefiles='$ldflags_uselargefiles'
16410 ldlibpthname='$ldlibpthname'
16411 less='$less'
16412 lib_ext='$lib_ext'
16413 libc='$libc'
16414 libperl='$libperl'
16415 libpth='$libpth'
16416 libs='$libs'
16417 libsdirs='$libsdirs'
16418 libsfiles='$libsfiles'
16419 libsfound='$libsfound'
16420 libspath='$libspath'
16421 libswanted='$libswanted'
16422 libswanted_uselargefiles='$libswanted_uselargefiles'
16423 line='$line'
16424 lint='$lint'
16425 lkflags='$lkflags'
16426 ln='$ln'
16427 lns='$lns'
16428 locincpth='$locincpth'
16429 loclibpth='$loclibpth'
16430 longdblsize='$longdblsize'
16431 longlongsize='$longlongsize'
16432 longsize='$longsize'
16433 lp='$lp'
16434 lpr='$lpr'
16435 ls='$ls'
16436 lseeksize='$lseeksize'
16437 lseektype='$lseektype'
16438 mail='$mail'
16439 mailx='$mailx'
16440 make='$make'
16441 make_set_make='$make_set_make'
16442 mallocobj='$mallocobj'
16443 mallocsrc='$mallocsrc'
16444 malloctype='$malloctype'
16445 man1dir='$man1dir'
16446 man1direxp='$man1direxp'
16447 man1ext='$man1ext'
16448 man3dir='$man3dir'
16449 man3direxp='$man3direxp'
16450 man3ext='$man3ext'
16451 mips_type='$mips_type'
16452 mkdir='$mkdir'
16453 mmaptype='$mmaptype'
16454 modetype='$modetype'
16455 more='$more'
16456 multiarch='$multiarch'
16457 mv='$mv'
16458 myarchname='$myarchname'
16459 mydomain='$mydomain'
16460 myhostname='$myhostname'
16461 myuname='$myuname'
16462 n='$n'
16463 need_va_copy='$need_va_copy'
16464 netdb_hlen_type='$netdb_hlen_type'
16465 netdb_host_type='$netdb_host_type'
16466 netdb_name_type='$netdb_name_type'
16467 netdb_net_type='$netdb_net_type'
16468 nm='$nm'
16469 nm_opt='$nm_opt'
16470 nm_so_opt='$nm_so_opt'
16471 nonxs_ext='$nonxs_ext'
16472 nroff='$nroff'
16473 nvEUformat='$nvEUformat'
16474 nvFUformat='$nvFUformat'
16475 nvGUformat='$nvGUformat'
16476 nveformat='$nveformat'
16477 nvfformat='$nvfformat'
16478 nvgformat='$nvgformat'
16479 nvsize='$nvsize'
16480 nvtype='$nvtype'
16481 o_nonblock='$o_nonblock'
16482 obj_ext='$obj_ext'
16483 old_pthread_create_joinable='$old_pthread_create_joinable'
16484 optimize='$optimize'
16485 orderlib='$orderlib'
16486 osname='$osname'
16487 osvers='$osvers'
16488 otherlibdirs='$otherlibdirs'
16489 package='$package'
16490 pager='$pager'
16491 passcat='$passcat'
16492 patchlevel='$patchlevel'
16493 path_sep='$path_sep'
16494 perl5='$perl5'
16495 perl='$perl'
16496 perladmin='$perladmin'
16497 perllibs='$perllibs'
16498 perlpath='$perlpath'
16499 pg='$pg'
16500 phostname='$phostname'
16501 pidtype='$pidtype'
16502 plibpth='$plibpth'
16503 pm_apiversion='$pm_apiversion'
16504 pmake='$pmake'
16505 pr='$pr'
16506 prefix='$prefix'
16507 prefixexp='$prefixexp'
16508 privlib='$privlib'
16509 privlibexp='$privlibexp'
16510 prototype='$prototype'
16511 ptrsize='$ptrsize'
16512 quadkind='$quadkind'
16513 quadtype='$quadtype'
16514 randbits='$randbits'
16515 randfunc='$randfunc'
16516 randseedtype='$randseedtype'
16517 ranlib='$ranlib'
16518 rd_nodata='$rd_nodata'
16519 revision='$revision'
16520 rm='$rm'
16521 rmail='$rmail'
16522 runnm='$runnm'
16523 sPRIEUldbl='$sPRIEUldbl'
16524 sPRIFUldbl='$sPRIFUldbl'
16525 sPRIGUldbl='$sPRIGUldbl'
16526 sPRIXU64='$sPRIXU64'
16527 sPRId64='$sPRId64'
16528 sPRIeldbl='$sPRIeldbl'
16529 sPRIfldbl='$sPRIfldbl'
16530 sPRIgldbl='$sPRIgldbl'
16531 sPRIi64='$sPRIi64'
16532 sPRIo64='$sPRIo64'
16533 sPRIu64='$sPRIu64'
16534 sPRIx64='$sPRIx64'
16535 sSCNfldbl='$sSCNfldbl'
16536 sched_yield='$sched_yield'
16537 scriptdir='$scriptdir'
16538 scriptdirexp='$scriptdirexp'
16539 sed='$sed'
16540 seedfunc='$seedfunc'
16541 selectminbits='$selectminbits'
16542 selecttype='$selecttype'
16543 sendmail='$sendmail'
16544 sh='$sh'
16545 shar='$shar'
16546 sharpbang='$sharpbang'
16547 shmattype='$shmattype'
16548 shortsize='$shortsize'
16549 shrpenv='$shrpenv'
16550 shsharp='$shsharp'
16551 sig_count='$sig_count'
16552 sig_name='$sig_name'
16553 sig_name_init='$sig_name_init'
16554 sig_num='$sig_num'
16555 sig_num_init='$sig_num_init'
16556 sig_size='$sig_size'
16557 signal_t='$signal_t'
16558 sitearch='$sitearch'
16559 sitearchexp='$sitearchexp'
16560 sitebin='$sitebin'
16561 sitebinexp='$sitebinexp'
16562 sitelib='$sitelib'
16563 sitelib_stem='$sitelib_stem'
16564 sitelibexp='$sitelibexp'
16565 siteprefix='$siteprefix'
16566 siteprefixexp='$siteprefixexp'
16567 sizesize='$sizesize'
16568 sizetype='$sizetype'
16569 sleep='$sleep'
16570 smail='$smail'
16571 so='$so'
16572 sockethdr='$sockethdr'
16573 socketlib='$socketlib'
16574 socksizetype='$socksizetype'
16575 sort='$sort'
16576 spackage='$spackage'
16577 spitshell='$spitshell'
16578 src='$src'
16579 ssizetype='$ssizetype'
16580 startperl='$startperl'
16581 startsh='$startsh'
16582 static_ext='$static_ext'
16583 stdchar='$stdchar'
16584 stdio_base='$stdio_base'
16585 stdio_bufsiz='$stdio_bufsiz'
16586 stdio_cnt='$stdio_cnt'
16587 stdio_filbuf='$stdio_filbuf'
16588 stdio_ptr='$stdio_ptr'
16589 stdio_stream_array='$stdio_stream_array'
16590 strings='$strings'
16591 submit='$submit'
16592 subversion='$subversion'
16593 sysman='$sysman'
16594 tail='$tail'
16595 tar='$tar'
16596 tbl='$tbl'
16597 tee='$tee'
16598 test='$test'
16599 timeincl='$timeincl'
16600 timetype='$timetype'
16601 touch='$touch'
16602 tr='$tr'
16603 trnl='$trnl'
16604 troff='$troff'
16605 u16size='$u16size'
16606 u16type='$u16type'
16607 u32size='$u32size'
16608 u32type='$u32type'
16609 u64size='$u64size'
16610 u64type='$u64type'
16611 u8size='$u8size'
16612 u8type='$u8type'
16613 uidformat='$uidformat'
16614 uidsign='$uidsign'
16615 uidsize='$uidsize'
16616 uidtype='$uidtype'
16617 uname='$uname'
16618 uniq='$uniq'
16619 uquadtype='$uquadtype'
16620 use5005threads='$use5005threads'
16621 use64bitall='$use64bitall'
16622 use64bitint='$use64bitint'
16623 usedl='$usedl'
16624 useithreads='$useithreads'
16625 uselargefiles='$uselargefiles'
16626 uselongdouble='$uselongdouble'
16627 usemorebits='$usemorebits'
16628 usemultiplicity='$usemultiplicity'
16629 usemymalloc='$usemymalloc'
16630 usenm='$usenm'
16631 useopcode='$useopcode'
16632 useperlio='$useperlio'
16633 useposix='$useposix'
16634 usesfio='$usesfio'
16635 useshrplib='$useshrplib'
16636 usesocks='$usesocks'
16637 usethreads='$usethreads'
16638 usevendorprefix='$usevendorprefix'
16639 usevfork='$usevfork'
16640 usrinc='$usrinc'
16641 uuname='$uuname'
16642 uvXUformat='$uvXUformat'
16643 uvoformat='$uvoformat'
16644 uvsize='$uvsize'
16645 uvtype='$uvtype'
16646 uvuformat='$uvuformat'
16647 uvxformat='$uvxformat'
16648 vendorarch='$vendorarch'
16649 vendorarchexp='$vendorarchexp'
16650 vendorbin='$vendorbin'
16651 vendorbinexp='$vendorbinexp'
16652 vendorlib='$vendorlib'
16653 vendorlib_stem='$vendorlib_stem'
16654 vendorlibexp='$vendorlibexp'
16655 vendorprefix='$vendorprefix'
16656 vendorprefixexp='$vendorprefixexp'
16657 version='$version'
16658 versiononly='$versiononly'
16659 vi='$vi'
16660 voidflags='$voidflags'
16661 xlibpth='$xlibpth'
16662 xs_apiversion='$xs_apiversion'
16663 yacc='$yacc'
16664 yaccflags='$yaccflags'
16665 zcat='$zcat'
16666 zip='$zip'
16667 EOT
16668
16669 : Add in command line options if available
16670 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
16671
16672 : add special variables
16673 $test -f $src/patchlevel.h && \
16674 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
16675 echo "CONFIGDOTSH=true" >>config.sh
16676
16677 : propagate old symbols
16678 if $test -f UU/config.sh; then
16679         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
16680         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
16681         $sort | $uniq -u >UU/oldsyms
16682         set X `cat UU/oldsyms`
16683         shift
16684         case $# in
16685         0) ;;
16686         *)
16687                 cat <<EOM
16688 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
16689 EOM
16690                 echo "# Variables propagated from previous config.sh file." >>config.sh
16691                 for sym in `cat UU/oldsyms`; do
16692                         echo "    Propagating $hint variable "'$'"$sym..."
16693                         eval 'tmp="$'"${sym}"'"'
16694                         echo "$tmp" | \
16695                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
16696                 done
16697                 ;;
16698         esac
16699 fi
16700
16701 : Finish up by extracting the .SH files
16702 case "$alldone" in
16703 exit)
16704         $rm -rf UU
16705         echo "Done."
16706         exit 0
16707         ;;
16708 cont)
16709         ;;
16710 '')
16711         dflt=''
16712         nostick=true
16713         $cat <<EOM
16714
16715 If you'd like to make any changes to the config.sh file before I begin
16716 to configure things, do it as a shell escape now (e.g. !vi config.sh).
16717
16718 EOM
16719         rp="Press return or use a shell escape to edit config.sh:"
16720         . UU/myread
16721         nostick=''
16722         case "$ans" in
16723         '') ;;
16724         *) : in case they cannot read
16725                 sh 1>&4 -c "$ans";;
16726         esac
16727         ;;
16728 esac
16729
16730 : if this fails, just run all the .SH files by hand
16731 . ./config.sh
16732
16733 echo " "
16734 exec 1>&4
16735 . ./UU/extract
16736
16737 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
16738         dflt=y
16739         case "$silent" in
16740         true) ;;
16741         *)
16742                 $cat <<EOM
16743
16744 Now you need to generate make dependencies by running "$make depend".
16745 You might prefer to run it in background: "$make depend > makedepend.out &"
16746 It can take a while, so you might not want to run it right now.
16747
16748 EOM
16749                 ;;
16750         esac
16751         rp="Run $make depend now?"
16752         . UU/myread
16753         case "$ans" in
16754         y*)
16755                 $make depend && echo "Now you must run '$make'."
16756                 ;;
16757         *)
16758                 echo "You must run '$make depend' then '$make'."
16759                 ;;
16760         esac
16761 elif test -f [Mm]akefile; then
16762         echo " "
16763         echo "Now you must run a $make."
16764 else
16765         echo "Done."
16766 fi
16767
16768 if $test -f Policy.sh; then
16769     $cat <<EOM
16770
16771 If you compile $package on a different machine or from a different object
16772 directory, copy the Policy.sh file from this object directory to the
16773 new one before you run Configure -- this will help you with most of
16774 the policy defaults.
16775
16776 EOM
16777 fi
16778 if $test -f config.msg; then
16779     echo "Hmm.  I also noted the following information while running:"
16780     echo " "
16781     $cat config.msg >&4
16782     $rm -f config.msg
16783 fi
16784 $rm -f kit*isdone ark*isdone
16785 $rm -rf UU
16786
16787 : End of Configure
16788