Add getpagesize() probing, on non-UNIX guess 'undef'.
[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 Sat Nov 11 18:45:10 EET 2000 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.org)
25
26 cat >/tmp/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 >/tmp/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 /tmp/c1$$ /tmp/c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat /tmp/c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f /tmp/c1$$ /tmp/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_access=''
312 d_accessx=''
313 d_alarm=''
314 d_attribut=''
315 d_bcmp=''
316 d_bcopy=''
317 d_bzero=''
318 d_casti32=''
319 castflags=''
320 d_castneg=''
321 d_chown=''
322 d_chroot=''
323 d_chsize=''
324 d_closedir=''
325 d_void_closedir=''
326 d_const=''
327 cryptlib=''
328 d_crypt=''
329 d_csh=''
330 full_csh=''
331 d_cuserid=''
332 d_dbl_dig=''
333 d_difftime=''
334 d_dlerror=''
335 d_dlopen=''
336 d_dlsymun=''
337 d_dosuid=''
338 d_suidsafe=''
339 d_drand48proto=''
340 d_dup2=''
341 d_eaccess=''
342 d_endgrent=''
343 d_endhent=''
344 d_endnent=''
345 d_endpent=''
346 d_endpwent=''
347 d_endsent=''
348 d_fchmod=''
349 d_fchown=''
350 d_fcntl=''
351 d_fcntl_can_lock=''
352 d_fd_macros=''
353 d_fd_set=''
354 d_fds_bits=''
355 d_fgetpos=''
356 d_flexfnam=''
357 d_flock=''
358 d_fork=''
359 d_fpos64_t=''
360 d_frexpl=''
361 d_fs_data_s=''
362 d_fseeko=''
363 d_fsetpos=''
364 d_fstatfs=''
365 d_ftello=''
366 d_ftime=''
367 d_gettimeod=''
368 d_Gconvert=''
369 d_getcwd=''
370 d_getespwnam=''
371 d_getfsstat=''
372 d_getgrent=''
373 d_getgrps=''
374 d_gethbyaddr=''
375 d_gethbyname=''
376 d_gethent=''
377 aphostname=''
378 d_gethname=''
379 d_phostname=''
380 d_uname=''
381 d_gethostprotos=''
382 d_getlogin=''
383 d_getmnt=''
384 d_getmntent=''
385 d_getnbyaddr=''
386 d_getnbyname=''
387 d_getnent=''
388 d_getnetprotos=''
389 d_getpagsz=''
390 d_getpent=''
391 d_getpgid=''
392 d_getpgrp2=''
393 d_bsdgetpgrp=''
394 d_getpgrp=''
395 d_getppid=''
396 d_getprior=''
397 d_getpbyname=''
398 d_getpbynumber=''
399 d_getprotoprotos=''
400 d_getprpwnam=''
401 d_getpwent=''
402 d_getsent=''
403 d_getservprotos=''
404 d_getspnam=''
405 d_getsbyname=''
406 d_getsbyport=''
407 d_gnulibc=''
408 d_hasmntopt=''
409 d_htonl=''
410 d_iconv=''
411 d_inetaton=''
412 d_int64_t=''
413 d_isascii=''
414 d_isnan=''
415 d_isnanl=''
416 d_killpg=''
417 d_lchown=''
418 d_ldbl_dig=''
419 d_link=''
420 d_locconv=''
421 d_lockf=''
422 d_longdbl=''
423 longdblsize=''
424 d_longlong=''
425 longlongsize=''
426 d_lseekproto=''
427 d_lstat=''
428 d_madvise=''
429 d_mblen=''
430 d_mbstowcs=''
431 d_mbtowc=''
432 d_memchr=''
433 d_memcmp=''
434 d_memcpy=''
435 d_memmove=''
436 d_memset=''
437 d_mkdir=''
438 d_mkdtemp=''
439 d_mkfifo=''
440 d_mkstemp=''
441 d_mkstemps=''
442 d_mktime=''
443 d_mmap=''
444 mmaptype=''
445 d_modfl=''
446 d_mprotect=''
447 d_msg=''
448 d_msgctl=''
449 d_msgget=''
450 d_msgrcv=''
451 d_msgsnd=''
452 d_msync=''
453 d_munmap=''
454 d_nice=''
455 d_off64_t=''
456 d_open3=''
457 d_fpathconf=''
458 d_pathconf=''
459 d_pause=''
460 d_pipe=''
461 d_poll=''
462 d_portable=''
463 d_old_pthread_create_joinable=''
464 old_pthread_create_joinable=''
465 d_pthread_yield=''
466 d_sched_yield=''
467 sched_yield=''
468 d_qgcvt=''
469 d_readdir=''
470 d_rewinddir=''
471 d_seekdir=''
472 d_telldir=''
473 d_readlink=''
474 d_rename=''
475 d_rmdir=''
476 d_safebcpy=''
477 d_safemcpy=''
478 d_sanemcmp=''
479 d_select=''
480 d_sem=''
481 d_semctl=''
482 d_semget=''
483 d_semop=''
484 d_setegid=''
485 d_seteuid=''
486 d_setgrent=''
487 d_setgrps=''
488 d_sethent=''
489 d_setlinebuf=''
490 d_setlocale=''
491 d_setnent=''
492 d_setpent=''
493 d_setpgid=''
494 d_setpgrp2=''
495 d_bsdsetpgrp=''
496 d_setpgrp=''
497 d_setprior=''
498 d_setproctitle=''
499 d_setpwent=''
500 d_setregid=''
501 d_setresgid=''
502 d_setresuid=''
503 d_setreuid=''
504 d_setrgid=''
505 d_setruid=''
506 d_setsent=''
507 d_setsid=''
508 d_setvbuf=''
509 d_sfio=''
510 usesfio=''
511 d_shm=''
512 d_shmat=''
513 d_shmatprototype=''
514 shmattype=''
515 d_shmctl=''
516 d_shmdt=''
517 d_shmget=''
518 d_sigaction=''
519 d_sigsetjmp=''
520 d_msg_ctrunc=''
521 d_msg_dontroute=''
522 d_msg_oob=''
523 d_msg_peek=''
524 d_msg_proxy=''
525 d_oldsock=''
526 d_scm_rights=''
527 d_socket=''
528 d_sockpair=''
529 sockethdr=''
530 socketlib=''
531 d_socklen_t=''
532 d_socks5_init=''
533 d_sqrtl=''
534 d_statblks=''
535 d_statfs_f_flags=''
536 d_statfs_s=''
537 d_fstatvfs=''
538 d_statvfs=''
539 d_stdio_cnt_lval=''
540 d_stdio_ptr_lval=''
541 d_stdio_ptr_lval_nochange_cnt=''
542 d_stdio_ptr_lval_sets_cnt=''
543 d_stdiobase=''
544 d_stdstdio=''
545 stdio_base=''
546 stdio_bufsiz=''
547 stdio_cnt=''
548 stdio_filbuf=''
549 stdio_ptr=''
550 d_index=''
551 d_strchr=''
552 d_strcoll=''
553 d_strctcpy=''
554 d_strerrm=''
555 d_strerror=''
556 d_sysernlst=''
557 d_syserrlst=''
558 d_strtod=''
559 d_strtol=''
560 d_strtold=''
561 d_strtoll=''
562 d_strtoul=''
563 d_strtoull=''
564 d_strtouq=''
565 d_strxfrm=''
566 d_symlink=''
567 d_syscall=''
568 d_sysconf=''
569 d_system=''
570 d_tcgetpgrp=''
571 d_tcsetpgrp=''
572 d_telldirproto=''
573 d_time=''
574 timetype=''
575 clocktype=''
576 d_times=''
577 d_truncate=''
578 d_tzname=''
579 d_umask=''
580 d_semctl_semid_ds=''
581 d_semctl_semun=''
582 d_union_semun=''
583 d_ustat=''
584 d_vfork=''
585 usevfork=''
586 d_voidsig=''
587 signal_t=''
588 d_volatile=''
589 d_charvspr=''
590 d_vprintf=''
591 d_wait4=''
592 d_waitpid=''
593 d_wcstombs=''
594 d_wctomb=''
595 dlext=''
596 cccdlflags=''
597 ccdlflags=''
598 dlsrc=''
599 ld=''
600 lddlflags=''
601 usedl=''
602 doublesize=''
603 ebcdic=''
604 fflushNULL=''
605 fflushall=''
606 fpossize=''
607 fpostype=''
608 gccosandvers=''
609 gccversion=''
610 gidformat=''
611 gidsign=''
612 gidsize=''
613 gidtype=''
614 groupstype=''
615 h_fcntl=''
616 h_sysfile=''
617 i_arpainet=''
618 db_hashtype=''
619 db_prefixtype=''
620 i_db=''
621 i_dbm=''
622 i_rpcsvcdbm=''
623 d_dirnamlen=''
624 direntrytype=''
625 i_dirent=''
626 i_dld=''
627 i_dlfcn=''
628 i_fcntl=''
629 i_float=''
630 i_gdbm=''
631 d_grpasswd=''
632 i_grp=''
633 i_iconv=''
634 i_ieeefp=''
635 i_inttypes=''
636 i_libutil=''
637 i_limits=''
638 i_locale=''
639 i_machcthr=''
640 i_malloc=''
641 i_math=''
642 i_memory=''
643 i_mntent=''
644 i_ndbm=''
645 i_netdb=''
646 i_neterrno=''
647 i_netinettcp=''
648 i_niin=''
649 i_sysin=''
650 i_poll=''
651 i_prot=''
652 i_pthread=''
653 d_pwage=''
654 d_pwchange=''
655 d_pwclass=''
656 d_pwcomment=''
657 d_pwexpire=''
658 d_pwgecos=''
659 d_pwpasswd=''
660 d_pwquota=''
661 i_pwd=''
662 i_sfio=''
663 i_shadow=''
664 i_socks=''
665 i_stddef=''
666 i_stdlib=''
667 i_string=''
668 strings=''
669 i_sunmath=''
670 i_sysaccess=''
671 i_sysdir=''
672 i_sysfile=''
673 d_voidtty=''
674 i_bsdioctl=''
675 i_sysfilio=''
676 i_sysioctl=''
677 i_syssockio=''
678 i_syslog=''
679 i_sysmman=''
680 i_sysmode=''
681 i_sysmount=''
682 i_sysndir=''
683 i_sysparam=''
684 i_sysresrc=''
685 i_syssecrt=''
686 i_sysselct=''
687 i_sysstat=''
688 i_sysstatfs=''
689 i_sysstatvfs=''
690 i_systimes=''
691 i_systypes=''
692 i_sysuio=''
693 i_sysun=''
694 i_sysutsname=''
695 i_sysvfs=''
696 i_syswait=''
697 i_sgtty=''
698 i_termio=''
699 i_termios=''
700 i_systime=''
701 i_systimek=''
702 i_time=''
703 timeincl=''
704 i_unistd=''
705 i_ustat=''
706 i_utime=''
707 i_values=''
708 i_stdarg=''
709 i_varargs=''
710 i_varhdr=''
711 i_vfork=''
712 inc_version_list=''
713 inc_version_list_init=''
714 installprefix=''
715 installprefixexp=''
716 installstyle=''
717 installusrbinperl=''
718 intsize=''
719 longsize=''
720 shortsize=''
721 libc=''
722 ldlibpthname=''
723 libperl=''
724 shrpenv=''
725 useshrplib=''
726 glibpth=''
727 libpth=''
728 loclibpth=''
729 plibpth=''
730 xlibpth=''
731 ignore_versioned_solibs=''
732 libs=''
733 libsdirs=''
734 libsfiles=''
735 libsfound=''
736 libspath=''
737 lns=''
738 d_PRIEUldbl=''
739 d_PRIFUldbl=''
740 d_PRIGUldbl=''
741 d_PRIeldbl=''
742 d_PRIfldbl=''
743 d_PRIgldbl=''
744 d_SCNfldbl=''
745 sPRIEUldbl=''
746 sPRIFUldbl=''
747 sPRIGUldbl=''
748 sPRIeldbl=''
749 sPRIfldbl=''
750 sPRIgldbl=''
751 sSCNfldbl=''
752 lseeksize=''
753 lseektype=''
754 make_set_make=''
755 d_mymalloc=''
756 freetype=''
757 mallocobj=''
758 mallocsrc=''
759 malloctype=''
760 usemymalloc=''
761 installman1dir=''
762 man1dir=''
763 man1direxp=''
764 man1ext=''
765 installman3dir=''
766 man3dir=''
767 man3direxp=''
768 man3ext=''
769 modetype=''
770 multiarch=''
771 mydomain=''
772 myhostname=''
773 phostname=''
774 c=''
775 n=''
776 d_eofnblk=''
777 eagain=''
778 o_nonblock=''
779 rd_nodata=''
780 netdb_hlen_type=''
781 netdb_host_type=''
782 netdb_name_type=''
783 netdb_net_type=''
784 groupcat=''
785 hostcat=''
786 passcat=''
787 orderlib=''
788 ranlib=''
789 d_perl_otherlibdirs=''
790 otherlibdirs=''
791 package=''
792 spackage=''
793 pager=''
794 api_revision=''
795 api_subversion=''
796 api_version=''
797 api_versionstring=''
798 patchlevel=''
799 revision=''
800 subversion=''
801 version=''
802 perl5=''
803 perladmin=''
804 perlpath=''
805 d_nv_preserves_uv=''
806 d_nv_preserves_uv_bits=''
807 i16size=''
808 i16type=''
809 i32size=''
810 i32type=''
811 i64size=''
812 i64type=''
813 i8size=''
814 i8type=''
815 ivsize=''
816 ivtype=''
817 nvsize=''
818 nvtype=''
819 u16size=''
820 u16type=''
821 u32size=''
822 u32type=''
823 u64size=''
824 u64type=''
825 u8size=''
826 u8type=''
827 uvsize=''
828 uvtype=''
829 ivdformat=''
830 nvEUformat=''
831 nvFUformat=''
832 nvGUformat=''
833 nveformat=''
834 nvfformat=''
835 nvgformat=''
836 uvXUformat=''
837 uvoformat=''
838 uvuformat=''
839 uvxformat=''
840 pidtype=''
841 prefix=''
842 prefixexp=''
843 installprivlib=''
844 privlib=''
845 privlibexp=''
846 prototype=''
847 ptrsize=''
848 d_PRIXU64=''
849 d_PRId64=''
850 d_PRIi64=''
851 d_PRIo64=''
852 d_PRIu64=''
853 d_PRIx64=''
854 sPRIXU64=''
855 sPRId64=''
856 sPRIi64=''
857 sPRIo64=''
858 sPRIu64=''
859 sPRIx64=''
860 d_quad=''
861 quadkind=''
862 quadtype=''
863 uquadtype=''
864 drand01=''
865 randbits=''
866 randfunc=''
867 randseedtype=''
868 seedfunc=''
869 installscript=''
870 scriptdir=''
871 scriptdirexp=''
872 selectminbits=''
873 selecttype=''
874 sh=''
875 sig_count=''
876 sig_name=''
877 sig_name_init=''
878 sig_num=''
879 sig_num_init=''
880 installsitearch=''
881 sitearch=''
882 sitearchexp=''
883 installsitebin=''
884 sitebin=''
885 sitebinexp=''
886 installsitelib=''
887 sitelib=''
888 sitelib_stem=''
889 sitelibexp=''
890 siteprefix=''
891 siteprefixexp=''
892 sizesize=''
893 sizetype=''
894 so=''
895 socksizetype=''
896 sharpbang=''
897 shsharp=''
898 spitshell=''
899 src=''
900 ssizetype=''
901 startperl=''
902 startsh=''
903 stdchar=''
904 d_stdio_stream_array=''
905 stdio_stream_array=''
906 sysman=''
907 trnl=''
908 uidformat=''
909 uidsign=''
910 uidsize=''
911 uidtype=''
912 archname64=''
913 use64bitall=''
914 use64bitint=''
915 ccflags_uselargefiles=''
916 ldflags_uselargefiles=''
917 libswanted_uselargefiles=''
918 uselargefiles=''
919 uselongdouble=''
920 usemorebits=''
921 usemultiplicity=''
922 nm_opt=''
923 nm_so_opt=''
924 runnm=''
925 usenm=''
926 useperlio=''
927 usesocks=''
928 d_oldpthreads=''
929 use5005threads=''
930 useithreads=''
931 usethreads=''
932 incpath=''
933 mips_type=''
934 usrinc=''
935 d_vendorarch=''
936 installvendorarch=''
937 vendorarch=''
938 vendorarchexp=''
939 d_vendorbin=''
940 installvendorbin=''
941 vendorbin=''
942 vendorbinexp=''
943 d_vendorlib=''
944 installvendorlib=''
945 vendorlib=''
946 vendorlib_stem=''
947 vendorlibexp=''
948 usevendorprefix=''
949 vendorprefix=''
950 vendorprefixexp=''
951 versiononly=''
952 defvoidused=''
953 voidflags=''
954 pm_apiversion=''
955 xs_apiversion=''
956 CONFIG=''
957
958 define='define'
959 undef='undef'
960 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
961 rmlist=''
962
963 : We must find out about Eunice early
964 eunicefix=':'
965 if test -f /etc/unixtovms; then
966         eunicefix=/etc/unixtovms
967 fi
968 if test -f /etc/unixtovms.exe; then
969         eunicefix=/etc/unixtovms.exe
970 fi
971
972 i_whoami=''
973 ccname=''
974 ccversion=''
975 perllibs=''
976 : set useposix=false in your hint file to disable the POSIX extension.
977 useposix=true
978 : set useopcode=false in your hint file to disable the Opcode extension.
979 useopcode=true
980 : Trailing extension.  Override this in a hint file, if needed.
981 _exe=''
982 : Extra object files, if any, needed on this platform.
983 archobjs=''
984 archname=''
985 : Possible local include directories to search.
986 : Set locincpth to "" in a hint file to defeat local include searches.
987 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
988 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
989 :
990 : no include file wanted by default
991 inclwanted=''
992
993 groupstype=''
994 : change the next line if compiling for Xenix/286 on Xenix/386
995 xlibpth='/usr/lib/386 /lib/386'
996 : Possible local library directories to search.
997 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
998 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
999
1000 : general looking path for locating libraries
1001 glibpth="/lib /usr/lib $xlibpth"
1002 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1003 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1004 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1005
1006 : Private path used by Configure to find libraries.  Its value
1007 : is prepended to libpth. This variable takes care of special
1008 : machines, like the mips.  Usually, it should be empty.
1009 plibpth=''
1010
1011 : default library list
1012 libswanted=''
1013 : some systems want to use only the non-versioned libso:s
1014 ignore_versioned_solibs=''
1015 archname64=''
1016 ccflags_uselargefiles=''
1017 ldflags_uselargefiles=''
1018 libswanted_uselargefiles=''
1019 : set usemultiplicity on the Configure command line to enable multiplicity.
1020 : set usesocks on the Configure command line to enable socks.
1021 : set usethreads on the Configure command line to enable threads.
1022 : full support for void wanted by default
1023 defvoidused=15
1024
1025 : List of libraries we want.
1026 : If anyone needs -lnet, put it in a hint file.
1027 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1028 libswanted="$libswanted dld ld sun m c cposix posix"
1029 libswanted="$libswanted ndir dir crypt sec"
1030 libswanted="$libswanted ucb bsd BSD PW x iconv util"
1031 : We probably want to search /usr/shlib before most other libraries.
1032 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1033 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1034 glibpth="/usr/shlib $glibpth"
1035 : Do not use vfork unless overridden by a hint file.
1036 usevfork=false
1037
1038 : Find the basic shell for Bourne shell scripts
1039 case "$sh" in
1040 '')
1041         case "$SYSTYPE" in
1042         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1043         *) xxx='/bin/sh';;
1044         esac
1045         if test -f "$xxx"; then
1046                 sh="$xxx"
1047         else
1048                 : Build up a list and do a single loop so we can 'break' out.
1049                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1050                 for xxx in sh bash ksh pdksh ash; do
1051                         for p in $pth; do
1052                                 try="$try ${p}/${xxx}"
1053                         done
1054                 done
1055                 for xxx in $try; do
1056                         if test -f "$xxx"; then
1057                                 sh="$xxx";
1058                                 break
1059                         elif test -f "$xxx.exe"; then
1060                                 sh="$xxx";
1061                                 break
1062                         fi
1063                 done
1064         fi
1065         ;;
1066 esac
1067
1068 case "$sh" in
1069 '')     cat <<EOM >&2
1070 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1071
1072 Usually it's in /bin/sh.  How did you even get this far?
1073 Please contact me (Perl Maintainers) at perlbug@perl.org and 
1074 we'll try to straighten this all out.
1075 EOM
1076         exit 1
1077         ;;
1078 esac
1079
1080 : see if sh knows # comments
1081 if `$sh -c '#' >/dev/null 2>&1`; then
1082         shsharp=true
1083         spitshell=cat
1084         xcat=/bin/cat
1085         test -f $xcat || xcat=/usr/bin/cat
1086         echo "#!$xcat" >try
1087         $eunicefix try
1088         chmod +x try
1089         ./try > today
1090         if test -s today; then
1091                 sharpbang='#!'
1092         else
1093                 echo "#! $xcat" > try
1094                 $eunicefix try
1095                 chmod +x try
1096                 ./try > today
1097                 if test -s today; then
1098                         sharpbang='#! '
1099                 else
1100                         sharpbang=': use '
1101                 fi
1102         fi
1103 else
1104         echo " "
1105         echo "Your $sh doesn't grok # comments--I will strip them later on."
1106         shsharp=false
1107         cd ..
1108         echo "exec grep -v '^[  ]*#'" >spitshell
1109         chmod +x spitshell
1110         $eunicefix spitshell
1111         spitshell=`pwd`/spitshell
1112         cd UU
1113         echo "I presume that if # doesn't work, #! won't work either!"
1114         sharpbang=': use '
1115 fi
1116 rm -f try today
1117
1118 : figure out how to guarantee sh startup
1119 case "$startsh" in
1120 '') startsh=${sharpbang}${sh} ;;
1121 *)
1122 esac
1123 cat >try <<EOSS
1124 $startsh
1125 set abc
1126 test "$?abc" != 1
1127 EOSS
1128
1129 chmod +x try
1130 $eunicefix try
1131 if ./try; then
1132         : echo "Yup, it does."
1133 else
1134         echo "Hmm... '$startsh' does not guarantee sh startup..."
1135         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1136 fi
1137 rm -f try
1138
1139
1140 : Save command line options in file UU/cmdline.opt for later use in
1141 : generating config.sh.
1142 cat > cmdline.opt <<EOSH
1143 # Configure command line arguments.
1144 config_arg0='$0'
1145 config_args='$*'
1146 config_argc=$#
1147 EOSH
1148 argn=1
1149 for arg in "$@"; do
1150         cat >>cmdline.opt <<EOSH
1151 config_arg$argn='$arg'
1152 EOSH
1153         argn=`expr $argn + 1`
1154 done
1155
1156 : produce awk script to parse command line options
1157 cat >options.awk <<'EOF'
1158 BEGIN {
1159         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1160
1161         len = length(optstr);
1162         for (i = 1; i <= len; i++) {
1163                 c = substr(optstr, i, 1);
1164                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1165                 if (a == ":") {
1166                         arg[c] = 1;
1167                         i++;
1168                 }
1169                 opt[c] = 1;
1170         }
1171 }
1172 {
1173         expect = 0;
1174         str = $0;
1175         if (substr(str, 1, 1) != "-") {
1176                 printf("'%s'\n", str);
1177                 next;
1178         }
1179         len = length($0);
1180         for (i = 2; i <= len; i++) {
1181                 c = substr(str, i, 1);
1182                 if (!opt[c]) {
1183                         printf("-%s\n", substr(str, i));
1184                         next;
1185                 }
1186                 printf("-%s\n", c);
1187                 if (arg[c]) {
1188                         if (i < len)
1189                                 printf("'%s'\n", substr(str, i + 1));
1190                         else
1191                                 expect = 1;
1192                         next;
1193                 }
1194         }
1195 }
1196 END {
1197         if (expect)
1198                 print "?";
1199 }
1200 EOF
1201
1202 : process the command line options
1203 set X `for arg in "$@"; do echo "X$arg"; done |
1204         sed -e s/X// | awk -f options.awk`
1205 eval "set $*"
1206 shift
1207 rm -f options.awk
1208
1209 : set up default values
1210 fastread=''
1211 reuseval=false
1212 config_sh=''
1213 alldone=''
1214 error=''
1215 silent=''
1216 extractsh=''
1217 override=''
1218 knowitall=''
1219 rm -f optdef.sh posthint.sh
1220 cat >optdef.sh <<EOS
1221 $startsh
1222 EOS
1223
1224
1225 : option parsing
1226 while test $# -gt 0; do
1227         case "$1" in
1228         -d) shift; fastread=yes;;
1229         -e) shift; alldone=cont;;
1230         -f)
1231                 shift
1232                 cd ..
1233                 if test -r "$1"; then
1234                         config_sh="$1"
1235                 else
1236                         echo "$me: cannot read config file $1." >&2
1237                         error=true
1238                 fi
1239                 cd UU
1240                 shift;;
1241         -h) shift; error=true;;
1242         -r) shift; reuseval=true;;
1243         -s) shift; silent=true; realsilent=true;;
1244         -E) shift; alldone=exit;;
1245         -K) shift; knowitall=true;;
1246         -O) shift; override=true;;
1247         -S) shift; silent=true; extractsh=true;;
1248         -D)
1249                 shift
1250                 case "$1" in
1251                 *=)
1252                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1253                         echo "$me: ignoring -D $1" >&2
1254                         ;;
1255                 *=*) echo "$1" | \
1256                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1257                 *) echo "$1='define'" >> optdef.sh;;
1258                 esac
1259                 shift
1260                 ;;
1261         -U)
1262                 shift
1263                 case "$1" in
1264                 *=) echo "$1" >> optdef.sh;;
1265                 *=*)
1266                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1267                         echo "$me: ignoring -U $1" >&2
1268                         ;;
1269                 *) echo "$1='undef'" >> optdef.sh;;
1270                 esac
1271                 shift
1272                 ;;
1273         -A)
1274             shift
1275             xxx=''
1276             yyy="$1"
1277             zzz=''
1278             uuu=undef
1279             case "$yyy" in
1280             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1281                  case "$zzz" in
1282                  *:*) zzz='' ;;
1283                  *)   xxx=append
1284                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1285                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1286                  esac
1287                  ;;
1288             esac
1289             case "$xxx" in
1290             '')  case "$yyy" in
1291                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1292                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1293                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1294                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1295                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1296                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1297                  esac
1298                  ;;       
1299             esac
1300             case "$xxx" in
1301             append)
1302                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1303             clear)
1304                 echo "$yyy=''"                  >> posthint.sh ;;
1305             define)
1306                 case "$zzz" in
1307                 '') zzz=define ;;
1308                 esac
1309                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1310             eval)
1311                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1312             prepend)
1313                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1314             undef)
1315                 case "$zzz" in
1316                 '') zzz="$uuu" ;;
1317                 esac
1318                 echo "$yyy=$zzz"                >> posthint.sh ;;
1319             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1320             esac
1321             shift
1322             ;;
1323         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1324             exit 0;;
1325         --) break;;
1326         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1327         *) break;;
1328         esac
1329 done
1330
1331 case "$error" in
1332 true)
1333         cat >&2 <<EOM
1334 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1335                  [-U symbol] [-U symbol=] [-A command:symbol...]
1336   -d : use defaults for all answers.
1337   -e : go on without questioning past the production of config.sh.
1338   -f : specify an alternate default configuration file.
1339   -h : print this help message and exit (with an error status).
1340   -r : reuse C symbols value if possible (skips costly nm extraction).
1341   -s : silent mode, only echoes questions and essential information.
1342   -D : define symbol to have some value:
1343          -D symbol         symbol gets the value 'define'
1344          -D symbol=value   symbol gets the value 'value'
1345   -E : stop at the end of questions, after having produced config.sh.
1346   -K : do not use unless you know what you are doing.
1347   -O : let -D and -U override definitions from loaded configuration file.
1348   -S : perform variable substitutions on all .SH files (can mix with -f)
1349   -U : undefine symbol:
1350          -U symbol    symbol gets the value 'undef'
1351          -U symbol=   symbol gets completely empty
1352   -A : manipulate symbol after the platform specific hints have been applied:
1353          -A symbol=value                append " "value to symbol
1354          -A append:symbol=value         append value to symbol
1355          -A define:symbol=value         define symbol to have value
1356          -A clear:symbol                define symbol to be ''
1357          -A define:symbol               define symbol to be 'define'
1358          -A eval:symbol=value           define symbol to be eval of value
1359          -A prepend:symbol=value        prepend value to symbol
1360          -A undef:symbol                define symbol to be 'undef'
1361          -A undef:symbol=               define symbol to be ''
1362   -V : print version number and exit (with a zero status).
1363 EOM
1364         exit 1
1365         ;;
1366 esac
1367
1368 : Sanity checks
1369 case "$fastread$alldone" in
1370 yescont|yesexit) ;;
1371 *)
1372         case "$extractsh" in
1373         true) ;;
1374         *)
1375                 if test ! -t 0; then
1376                         echo "Say 'sh Configure', not 'sh <Configure'"
1377                         exit 1
1378                 fi
1379                 ;;
1380         esac
1381         ;;
1382 esac
1383
1384 exec 4>&1
1385 case "$silent" in
1386 true) exec 1>/dev/null;;
1387 esac
1388
1389 : run the defines and the undefines, if any, but leave the file out there...
1390 touch optdef.sh
1391 . ./optdef.sh
1392 : create the posthint manipulation script and leave the file out there...
1393 touch posthint.sh
1394
1395 : set package name
1396 package=perl5
1397 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1398 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1399 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1400 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1401 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1402 esac
1403
1404 : Some greps do not return status, grrr.
1405 echo "grimblepritz" >grimble
1406 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1407         contains=contains
1408 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1409         contains=grep
1410 else
1411         contains=contains
1412 fi
1413 rm -f grimble
1414 : the following should work in any shell
1415 case "$contains" in
1416 contains*)
1417         echo " "
1418         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1419         cat >contains <<'EOSS'
1420 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1421 EOSS
1422 chmod +x contains
1423 esac
1424
1425 : Find the path to the source tree
1426 case "$src" in
1427 '') case "$0" in
1428     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1429          case "$src" in
1430          /*)    ;;
1431          *)     src=`cd ../$src && pwd` ;;
1432          esac
1433          ;;
1434     *)   src='.';;
1435     esac;;
1436 esac
1437 case "$src" in
1438 '')     src=/
1439         rsrc=/
1440         ;;
1441 /*) rsrc="$src";;
1442 *) rsrc="../$src";;
1443 esac
1444 if test -f $rsrc/Configure && \
1445         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1446 then
1447    : found it, so we are ok.
1448 else
1449         rsrc=''
1450         for src in . .. ../.. ../../.. ../../../..; do
1451                 if test -f ../$src/Configure && \
1452                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1453                 then
1454                         rsrc=../$src
1455                         break
1456                 fi
1457         done
1458 fi
1459 case "$rsrc" in
1460 '')
1461         cat <<EOM >&4
1462
1463 Sorry, I can't seem to locate the source dir for $package.  Please start
1464 Configure with an explicit path -- i.e. /some/path/Configure.
1465
1466 EOM
1467         exit 1
1468         ;;
1469 ../.)   rsrc='..';;
1470 *)
1471         echo " "
1472         echo "Sources for $package found in \"$src\"." >&4
1473         ;;
1474 esac
1475
1476 : script used to extract .SH files with variable substitutions
1477 cat >extract <<'EOS'
1478 CONFIGDOTSH=true
1479 echo "Doing variable substitutions on .SH files..."
1480 if test -f $src/MANIFEST; then
1481         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1482 else
1483         echo "(Looking for .SH files under the source directory.)"
1484         set x `(cd $src; find . -name "*.SH" -print)`
1485 fi
1486 shift
1487 case $# in
1488 0) set x `(cd $src; echo *.SH)`; shift;;
1489 esac
1490 if test ! -f $src/$1; then
1491         shift
1492 fi
1493 mkdir_p='
1494 name=$1;
1495 create="";
1496 while test $name; do
1497         if test ! -d "$name"; then
1498                 create="$name $create";
1499                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1500                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1501         else
1502                 name="";
1503         fi;
1504 done;
1505 for file in $create; do
1506         mkdir $file;
1507 done
1508 '
1509 for file in $*; do
1510         case "$src" in
1511         ".")
1512                 case "$file" in
1513                 */*)
1514                         dir=`expr X$file : 'X\(.*\)/'`
1515                         file=`expr X$file : 'X.*/\(.*\)'`
1516                         (cd $dir && . ./$file)
1517                         ;;
1518                 *)
1519                         . ./$file
1520                         ;;
1521                 esac
1522                 ;;
1523         *)
1524                 case "$file" in
1525                 */*)
1526                         dir=`expr X$file : 'X\(.*\)/'`
1527                         file=`expr X$file : 'X.*/\(.*\)'`
1528                         (set x $dir; shift; eval $mkdir_p)
1529                         sh <$src/$dir/$file
1530                         ;;
1531                 *)
1532                         sh <$src/$file
1533                         ;;
1534                 esac
1535                 ;;
1536         esac
1537 done
1538 if test -f $src/config_h.SH; then
1539         if test ! -f config.h; then
1540         : oops, they left it out of MANIFEST, probably, so do it anyway.
1541         . $src/config_h.SH
1542         fi
1543 fi
1544 EOS
1545
1546 : extract files and exit if asked to do so
1547 case "$extractsh" in
1548 true)
1549         case "$realsilent" in
1550         true) ;;
1551         *) exec 1>&4;;
1552         esac
1553         case "$config_sh" in
1554         '') config_sh='config.sh';;
1555         esac
1556         echo " "
1557         echo "Fetching answers from $config_sh..."
1558         cd ..
1559         . $config_sh
1560         test "$override" && . ./optdef.sh
1561         echo " "
1562         . UU/extract
1563         rm -rf UU
1564         echo "Done."
1565         exit 0
1566         ;;
1567 esac
1568
1569 : Eunice requires " " instead of "", can you believe it
1570 echo " "
1571 : Here we go...
1572 echo "Beginning of configuration questions for $package."
1573
1574 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1575
1576 : first determine how to suppress newline on echo command
1577 echo " "
1578 echo "Checking echo to see how to suppress newlines..."
1579 (echo "hi there\c" ; echo " ") >.echotmp
1580 if $contains c .echotmp >/dev/null 2>&1 ; then
1581         echo "...using -n."
1582         n='-n'
1583         c=''
1584 else
1585         cat <<'EOM'
1586 ...using \c
1587 EOM
1588         n=''
1589         c='\c'
1590 fi
1591 echo $n "The star should be here-->$c"
1592 echo '*'
1593 rm -f .echotmp
1594
1595 : Now test for existence of everything in MANIFEST
1596 echo " "
1597 if test -f $rsrc/MANIFEST; then
1598         echo "First let's make sure your kit is complete.  Checking..." >&4
1599         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1600         rm -f missing
1601         tmppwd=`pwd`
1602         for filelist in x??; do
1603                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1604         done
1605         if test -s missing; then
1606                 cat missing >&4
1607                 cat >&4 <<'EOM'
1608
1609 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1610
1611 You have the option of continuing the configuration process, despite the
1612 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1613 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1614 and contact the author (perlbug@perl.org).
1615
1616 EOM
1617                 echo $n "Continue? [n] $c" >&4
1618                 read ans
1619                 case "$ans" in
1620                 y*)
1621                         echo "Continuing..." >&4
1622                         rm -f missing
1623                         ;;
1624                 *)
1625                         echo "ABORTING..." >&4
1626                         kill $$
1627                         ;;
1628                 esac
1629         else
1630                 echo "Looks good..."
1631         fi
1632 else
1633         echo "There is no MANIFEST file.  I hope your kit is complete !"
1634 fi
1635 rm -f missing x??
1636
1637 echo " "
1638 : Find the appropriate value for a newline for tr
1639 if test -n "$DJGPP"; then
1640        trnl='\012'
1641 fi
1642 if test X"$trnl" = X; then
1643         case "`echo foo|tr '\n' x 2>/dev/null`" in
1644         foox) trnl='\n' ;;
1645         esac
1646 fi
1647 if test X"$trnl" = X; then
1648         case "`echo foo|tr '\012' x 2>/dev/null`" in
1649         foox) trnl='\012' ;;
1650         esac
1651 fi
1652 if test X"$trnl" = X; then
1653         cat <<EOM >&2
1654
1655 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1656
1657 EOM
1658         exit 1
1659 fi
1660
1661 : compute the number of columns on the terminal for proper question formatting
1662 case "$COLUMNS" in
1663 '') COLUMNS='80';;
1664 esac
1665
1666 : set up the echo used in my read
1667 myecho="case \"\$xxxm\" in
1668 '') echo $n \"\$rp $c\" >&4;;
1669 *) case \"\$rp\" in
1670         '') echo $n \"[\$xxxm] $c\";;
1671         *)
1672                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1673                         echo \"\$rp\" >&4
1674                         echo $n \"[\$xxxm] $c\" >&4
1675                 else
1676                         echo $n \"\$rp [\$xxxm] $c\" >&4
1677                 fi
1678                 ;;
1679         esac;;
1680 esac"
1681
1682 : now set up to do reads with possible shell escape and default assignment
1683 cat <<EOSC >myread
1684 $startsh
1685 xxxm=\$dflt
1686 $myecho
1687 ans='!'
1688 case "\$fastread" in
1689 yes) case "\$dflt" in
1690         '') ;;
1691         *) ans='';
1692                 case "\$silent-\$rp" in
1693                 true-) ;;
1694                 *) echo " " >&4;;
1695                 esac;;
1696         esac;;
1697 *) case "\$silent" in
1698         true) case "\$rp" in
1699                 '') ans='';;
1700                 esac;;
1701         esac;;
1702 esac
1703 while expr "X\$ans" : "X!" >/dev/null; do
1704         read answ
1705         set x \$xxxm
1706         shift
1707         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1708         case  "\$answ" in
1709         "!")
1710                 sh 1>&4
1711                 echo " "
1712                 $myecho
1713                 ;;
1714         !*)
1715                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1716                 shift
1717                 sh 1>&4 -c "\$*"
1718                 echo " "
1719                 $myecho
1720                 ;;
1721         "\$ans")
1722                 case "\$ans" in
1723                 \\&*)
1724                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1725                         shift
1726                         case "\$1" in
1727                         -d)
1728                                 fastread=yes
1729                                 echo "(OK, I'll run with -d after this question.)" >&4
1730                                 ;;
1731                         -*)
1732                                 echo "*** Sorry, \$1 not supported yet." >&4
1733                                 ;;
1734                         esac
1735                         $myecho
1736                         ans=!
1737                         ;;
1738                 esac;;
1739         *)
1740                 case "\$aok" in
1741                 y)
1742                         echo "*** Substitution done -- please confirm."
1743                         xxxm="\$ans"
1744                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1745                         xxxm="\$ans"
1746                         ans=!
1747                         ;;
1748                 *)
1749                         echo "*** Error -- try again."
1750                         ans=!
1751                         ;;
1752                 esac
1753                 $myecho
1754                 ;;
1755         esac
1756         case "\$ans\$xxxm\$nostick" in
1757         '')
1758                 ans=!
1759                 $myecho
1760                 ;;
1761         esac
1762 done
1763 case "\$ans" in
1764 '') ans="\$xxxm";;
1765 esac
1766 EOSC
1767
1768 : create .config dir to save info across Configure sessions
1769 test -d ../.config || mkdir ../.config
1770 cat >../.config/README <<EOF
1771 This directory created by Configure to save information that should
1772 persist across sessions for $package.
1773
1774 You may safely delete it if you wish.
1775 EOF
1776
1777 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
1778 case "$usedevel" in
1779 $define|true|[yY]*) ;;
1780 *) case "$xversion" in
1781    *[13579])
1782         cat >&4 <<EOH
1783 *** WHOA THERE!!! ***
1784
1785     This is an UNSTABLE DEVELOPMENT release.
1786     The version of this $package distribution is $xversion, that is, odd,
1787     (as opposed to even) and that signifies a development release.
1788     If you want a maintenance release, you want an even-numbered version.
1789
1790     Do ***NOT*** install this into production use.
1791     Data corruption and crashes are possible.
1792
1793     It is most seriously suggested that you do not continue any further
1794     unless you want to help in developing and debugging Perl.
1795
1796 EOH
1797         rp='Do you really want to continue?'
1798         dflt='n'
1799         . ./myread
1800         case "$ans" in
1801         [yY]) echo >&4 "Okay, continuing." ;;
1802         *) echo >&4 "Okay, bye."
1803            exit 1
1804            ;;
1805         esac
1806         ;;
1807     esac
1808     ;;
1809 esac
1810
1811 : general instructions
1812 needman=true
1813 firsttime=true
1814 user=`(logname) 2>/dev/null`
1815 case "$user" in
1816 '') user=`whoami 2>&1`;;
1817 esac
1818 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1819         firsttime=false
1820         echo " "
1821         rp='Would you like to see the instructions?'
1822         dflt=n
1823         . ./myread
1824         case "$ans" in
1825         [yY]*) ;;
1826         *) needman=false;;
1827         esac
1828 fi
1829 if $needman; then
1830         cat <<EOH
1831
1832 This installation shell script will examine your system and ask you questions
1833 to determine how the perl5 package should be installed. If you get
1834 stuck on a question, you may use a ! shell escape to start a subshell or
1835 execute a command.  Many of the questions will have default answers in square
1836 brackets; typing carriage return will give you the default.
1837
1838 On some of the questions which ask for file or directory names you are allowed
1839 to use the ~name construct to specify the login directory belonging to "name",
1840 even if you don't have a shell which knows about that.  Questions where this is
1841 allowed will be marked "(~name ok)".
1842
1843 EOH
1844         rp=''
1845         dflt='Type carriage return to continue'
1846         . ./myread
1847         cat <<'EOH'
1848
1849 The prompter used in this script allows you to use shell variables and
1850 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1851 in the default answer, as if the default line was a set of arguments given to a
1852 script shell.  This means you may also use $* to repeat the whole default line,
1853 so you do not have to re-type everything to add something to the default.
1854
1855 Everytime there is a substitution, you will have to confirm.  If there is an
1856 error (e.g. an unmatched backtick), the default answer will remain unchanged
1857 and you will be prompted again.
1858
1859 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1860 the questions and use the computed defaults (or the previous answers if there
1861 was already a config.sh file). Type 'Configure -h' for a list of options.
1862 You may also start interactively and then answer '& -d' at any prompt to turn
1863 on the non-interactive behaviour for the remainder of the execution.
1864
1865 EOH
1866         . ./myread
1867         cat <<EOH
1868
1869 Much effort has been expended to ensure that this shell script will run on any
1870 Unix system.  If despite that it blows up on yours, your best bet is to edit
1871 Configure and run it again.  If you can't run Configure for some reason,
1872 you'll have to generate a config.sh file by hand.  Whatever problems you
1873 have, let me (perlbug@perl.org) know how I blew it.
1874
1875 This installation script affects things in two ways:
1876
1877 1) it may do direct variable substitutions on some of the files included
1878    in this kit.
1879 2) it builds a config.h file for inclusion in C programs.  You may edit
1880    any of these files as the need arises after running this script.
1881
1882 If you make a mistake on a question, there is no easy way to back up to it
1883 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1884 files.  Configure will offer to let you do this before it runs the SH files.
1885
1886 EOH
1887         dflt='Type carriage return to continue'
1888         . ./myread
1889         case "$firsttime" in
1890         true) echo $user >>../.config/instruct;;
1891         esac
1892 fi
1893
1894 : find out where common programs are
1895 echo " "
1896 echo "Locating common programs..." >&4
1897 cat <<EOSC >loc
1898 $startsh
1899 case \$# in
1900 0) exit 1;;
1901 esac
1902 thing=\$1
1903 shift
1904 dflt=\$1
1905 shift
1906 for dir in \$*; do
1907         case "\$thing" in
1908         .)
1909         if test -d \$dir/\$thing; then
1910                 echo \$dir
1911                 exit 0
1912         fi
1913         ;;
1914         *)
1915         for thisthing in \$dir/\$thing; do
1916                 : just loop through to pick last item
1917         done
1918         if test -f \$thisthing; then
1919                 echo \$thisthing
1920                 exit 0
1921         elif test -f \$dir/\$thing.exe; then
1922                 if test -n "$DJGPP"; then
1923                         echo \$dir/\$thing.exe
1924                 else
1925                         : on Eunice apparently
1926                         echo \$dir/\$thing
1927                 fi
1928                 exit 0
1929         fi
1930         ;;
1931         esac
1932 done
1933 echo \$dflt
1934 exit 1
1935 EOSC
1936 chmod +x loc
1937 $eunicefix loc
1938 loclist="
1939 awk
1940 cat
1941 comm
1942 cp
1943 echo
1944 expr
1945 grep
1946 ls
1947 make
1948 mkdir
1949 rm
1950 sed
1951 sort
1952 touch
1953 tr
1954 uniq
1955 "
1956 trylist="
1957 Mcc
1958 ar
1959 byacc
1960 cpp
1961 csh
1962 date
1963 egrep
1964 gzip
1965 less
1966 ln
1967 more
1968 nm
1969 nroff
1970 pg
1971 test
1972 uname
1973 zip
1974 "
1975 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1976 pth="$pth /lib /usr/lib"
1977 for file in $loclist; do
1978         eval xxx=\$$file
1979         case "$xxx" in
1980         /*|?:[\\/]*)
1981                 if test -f "$xxx"; then
1982                         : ok
1983                 else
1984                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1985                         xxx=`./loc $file $file $pth`
1986                 fi
1987                 ;;
1988         '') xxx=`./loc $file $file $pth`;;
1989         *) xxx=`./loc $xxx $xxx $pth`;;
1990         esac
1991         eval $file=$xxx
1992         eval _$file=$xxx
1993         case "$xxx" in
1994         /*)
1995                 echo $file is in $xxx.
1996                 ;;
1997         ?:[\\/]*)
1998                 echo $file is in $xxx.
1999                 ;;
2000         *)
2001                 echo "I don't know where '$file' is, and my life depends on it." >&4
2002                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2003                 exit 1
2004                 ;;
2005         esac
2006 done
2007 echo " "
2008 echo "Don't worry if any of the following aren't found..."
2009 say=offhand
2010 for file in $trylist; do
2011         eval xxx=\$$file
2012         case "$xxx" in
2013         /*|?:[\\/]*)
2014                 if test -f "$xxx"; then
2015                         : ok
2016                 else
2017                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2018                         xxx=`./loc $file $file $pth`
2019                 fi
2020                 ;;
2021         '') xxx=`./loc $file $file $pth`;;
2022         *) xxx=`./loc $xxx $xxx $pth`;;
2023         esac
2024         eval $file=$xxx
2025         eval _$file=$xxx
2026         case "$xxx" in
2027         /*)
2028                 echo $file is in $xxx.
2029                 ;;
2030         ?:[\\/]*)
2031                 echo $file is in $xxx.
2032                 ;;
2033         *)
2034                 echo "I don't see $file out there, $say."
2035                 say=either
2036                 ;;
2037         esac
2038 done
2039 case "$egrep" in
2040 egrep)
2041         echo "Substituting grep for egrep."
2042         egrep=$grep
2043         ;;
2044 esac
2045 case "$ln" in
2046 ln)
2047         echo "Substituting cp for ln."
2048         ln=$cp
2049         ;;
2050 esac
2051 case "$test" in
2052 test)
2053         echo "Hopefully test is built into your sh."
2054         ;;
2055 *)
2056         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2057                 echo "Using the test built into your sh."
2058                 test=test
2059                 _test=test
2060         fi
2061         ;;
2062 esac
2063 case "$echo" in
2064 echo)
2065         echo "Hopefully echo is built into your sh."
2066         ;;
2067 '') ;;
2068 *)
2069         echo " "
2070 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2071         $echo $n "hi there$c" >foo1
2072         echo $n "hi there$c" >foo2
2073         if cmp foo1 foo2 >/dev/null 2>&1; then
2074                 echo "They are compatible.  In fact, they may be identical."
2075         else
2076                 case "$n" in
2077                 '-n') n='' c='\c';;
2078                 *) n='-n' c='';;
2079                 esac
2080                 cat <<FOO
2081 They are not compatible!  You are probably running ksh on a non-USG system.
2082 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2083 have echo built in and we may have to run some Bourne shell scripts.  That
2084 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2085
2086 FOO
2087                 $echo $n "The star should be here-->$c"
2088                 $echo "*"
2089         fi
2090         $rm -f foo1 foo2
2091         ;;
2092 esac
2093
2094 cat <<EOS >checkcc
2095 $startsh
2096 EOS
2097 cat <<'EOSC' >>checkcc
2098 case "$cc" in
2099 '') ;;
2100 *)  $rm -f try try.*
2101     $cat >try.c <<EOM
2102 int main(int argc, char *argv[]) {
2103   return 0;
2104 }
2105 EOM
2106     if $cc -o try $ccflags try.c; then
2107        :
2108     else
2109         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2110         despair=yes
2111         trygcc=yes
2112         case "$cc" in
2113         *gcc*) trygcc=no ;;
2114         esac
2115         case "`$cc -v -c try.c 2>&1`" in
2116         *gcc*) trygcc=no ;;
2117         esac
2118         if $test X"$trygcc" = Xyes; then
2119             if gcc -o try -c try.c; then
2120                 echo " "
2121                 echo "You seem to have a working gcc, though." >&4
2122                 rp="Would you like to use it?"
2123                 dflt=y
2124                 if $test -f myread; then
2125                     . ./myread
2126                 else
2127                     if $test -f UU/myread; then
2128                         . ./UU/myread
2129                     else
2130                         echo "Cannot find myread, sorry.  Aborting." >&2
2131                         exit 1
2132                     fi
2133                 fi  
2134                 case "$ans" in
2135                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2136                 esac
2137             fi
2138         fi
2139         if $test X"$despair" = Xyes; then
2140             $cat >&4 <<EOM
2141 You need to find a working C compiler.
2142 Either (purchase and) install the C compiler supplied by your OS vendor,
2143 or for a free C compiler try http://gcc.gnu.org/
2144 I cannot continue any further, aborting.
2145 EOM
2146             exit 1
2147         fi
2148     fi
2149     $rm -f try try.*
2150     ;;
2151 esac
2152 EOSC
2153
2154 : determine whether symbolic links are supported
2155 echo " "
2156 $touch blurfl
2157 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2158         echo "Symbolic links are supported." >&4
2159         lns="$ln -s"
2160 else
2161         echo "Symbolic links are NOT supported." >&4
2162         lns="$ln"
2163 fi
2164 $rm -f blurfl sym
2165
2166 : see whether [:lower:] and [:upper:] are supported character classes
2167 echo " "
2168 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2169 ABYZ)
2170         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2171         up='[:upper:]'
2172         low='[:lower:]'
2173         ;;
2174 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2175         # (0xc9 and 0xd1), therefore that is a nice testing point.
2176         if test "X$up" = X -o "X$low" = X; then
2177             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2178             ij) up='[A-Z]'
2179                 low='[a-z]'
2180                 ;;
2181             esac
2182         fi
2183         if test "X$up" = X -o "X$low" = X; then
2184             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2185             ij) up='A-Z'
2186                 low='a-z'
2187                 ;;
2188             esac
2189         fi
2190         if test "X$up" = X -o "X$low" = X; then
2191             case "`echo IJ | od -x 2>/dev/null`" in
2192             *C9D1*|*c9d1*)
2193                 echo "Hey, this might be EBCDIC." >&4
2194                 if test "X$up" = X -o "X$low" = X; then
2195                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2196                     ij) up='[A-IJ-RS-Z]'
2197                         low='[a-ij-rs-z]'
2198                         ;;
2199                     esac
2200                 fi
2201                 if test "X$up" = X -o "X$low" = X; then
2202                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2203                     ij) up='A-IJ-RS-Z'
2204                         low='a-ij-rs-z'
2205                         ;;
2206                     esac
2207                 fi
2208                 ;;
2209             esac
2210         fi
2211 esac
2212 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2213 ij)
2214     echo "Using $up and $low to convert case." >&4
2215     ;;
2216 *)
2217     echo "I don't know how to translate letters from upper to lower case." >&4
2218     echo "Your tr is not acting any way I know of." >&4
2219     exit 1
2220     ;;
2221 esac
2222 : set up the translation script tr, must be called with ./tr of course
2223 cat >tr <<EOSC
2224 $startsh
2225 case "\$1\$2" in
2226 '[A-Z][a-z]') exec $tr '$up' '$low';;
2227 '[a-z][A-Z]') exec $tr '$low' '$up';;
2228 esac
2229 exec $tr "\$@"
2230 EOSC
2231 chmod +x tr
2232 $eunicefix tr
2233
2234 : Try to determine whether config.sh was made on this system
2235 case "$config_sh" in
2236 '')
2237 myuname=`$uname -a 2>/dev/null`
2238 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2239 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2240 # because the A-Z/a-z are not consecutive.
2241 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2242         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2243 newmyuname="$myuname"
2244 dflt=n
2245 case "$knowitall" in
2246 '')
2247         if test -f ../config.sh; then
2248                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2249                         eval "`grep myuname= ../config.sh`"
2250                 fi
2251                 if test "X$myuname" = "X$newmyuname"; then
2252                         dflt=y
2253                 fi
2254         fi
2255         ;;
2256 *) dflt=y;;
2257 esac
2258
2259 : Get old answers from old config file if Configure was run on the
2260 : same system, otherwise use the hints.
2261 hint=default
2262 cd ..
2263 if test -f config.sh; then
2264         echo " "
2265         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2266         . UU/myread
2267         case "$ans" in
2268         n*|N*) echo "OK, I'll ignore it."
2269                 mv config.sh config.sh.old
2270                 myuname="$newmyuname"
2271                 ;;
2272         *)  echo "Fetching default answers from your old config.sh file..." >&4
2273                 tmp_n="$n"
2274                 tmp_c="$c"
2275                 tmp_sh="$sh"
2276                 . ./config.sh
2277                 cp config.sh UU
2278                 n="$tmp_n"
2279                 c="$tmp_c"
2280                 : Older versions did not always set $sh.  Catch re-use of such
2281                 : an old config.sh.
2282                 case "$sh" in
2283                 '') sh="$tmp_sh" ;;
2284                 esac
2285                 hint=previous
2286                 ;;
2287         esac
2288 fi
2289 . ./UU/checkcc
2290 if test ! -f config.sh; then
2291         $cat <<EOM
2292
2293 First time through, eh?  I have some defaults handy for some systems
2294 that need some extra help getting the Configure answers right:
2295
2296 EOM
2297         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2298         dflt=''
2299         : Half the following guesses are probably wrong... If you have better
2300         : tests or hints, please send them to perlbug@perl.org
2301         : The metaconfig authors would also appreciate a copy...
2302         $test -f /irix && osname=irix
2303         $test -f /xenix && osname=sco_xenix
2304         $test -f /dynix && osname=dynix
2305         $test -f /dnix && osname=dnix
2306         $test -f /lynx.os && osname=lynxos
2307         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2308         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2309         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2310         $test -f /bin/mips && /bin/mips && osname=mips
2311         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2312                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2313         $test -d /usr/apollo/bin && osname=apollo
2314         $test -f /etc/saf/_sactab && osname=svr4
2315         $test -d /usr/include/minix && osname=minix
2316         if $test -d /MachTen -o -d /MachTen_Folder; then
2317                 osname=machten
2318                 if $test -x /sbin/version; then
2319                         osvers=`/sbin/version | $awk '{print $2}' |
2320                         $sed -e 's/[A-Za-z]$//'`
2321                 elif $test -x /usr/etc/version; then
2322                         osvers=`/usr/etc/version | $awk '{print $2}' |
2323                         $sed -e 's/[A-Za-z]$//'`
2324                 else
2325                         osvers="$2.$3"
2326                 fi
2327         fi
2328
2329         $test -f /sys/posix.dll &&
2330                 $test -f /usr/bin/what &&
2331                 set X `/usr/bin/what /sys/posix.dll` &&
2332                 $test "$3" = UWIN &&
2333                 osname=uwin &&
2334                 osvers="$5"
2335
2336         if $test -f $uname; then
2337                 set X $myuname
2338                 shift
2339
2340                 case "$5" in
2341                 fps*) osname=fps ;;
2342                 mips*)
2343                         case "$4" in
2344                         umips) osname=umips ;;
2345                         *) osname=mips ;;
2346                         esac;;
2347                 [23]100) osname=mips ;;
2348                 next*) osname=next ;;
2349                 i386*)
2350                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2351                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2352                                 osname='sco'
2353                                 osvers=$tmp
2354                         elif $test -f /etc/kconfig; then
2355                                 osname=isc
2356                                 if test "$lns" = "$ln -s"; then
2357                                         osvers=4
2358                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2359                                         osvers=3
2360                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2361                                         osvers=2
2362                                 fi
2363                         fi
2364                         tmp=''
2365                         ;;
2366                 pc*)
2367                         if test -n "$DJGPP"; then
2368                                 osname=dos
2369                                 osvers=djgpp
2370                         fi
2371                         ;;
2372                 esac
2373
2374                 case "$1" in
2375                 aix) osname=aix
2376                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2377                         case "$tmp" in
2378                         'not found') osvers="$4"."$3" ;;
2379                         '<3240'|'<>3240') osvers=3.2.0 ;;
2380                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2381                         '=3250'|'>3250') osvers=3.2.5 ;;
2382                         *) osvers=$tmp;;
2383                         esac
2384                         ;;
2385                 bsd386) osname=bsd386
2386                         osvers=`$uname -r`
2387                         ;;
2388                 cygwin*) osname=cygwin
2389                         osvers="$3"
2390                         ;;
2391                 *dc.osx) osname=dcosx
2392                         osvers="$3"
2393                         ;;
2394                 dnix) osname=dnix
2395                         osvers="$3"
2396                         ;;
2397                 domainos) osname=apollo
2398                         osvers="$3"
2399                         ;;
2400                 dgux) osname=dgux 
2401                         osvers="$3"
2402                         ;;
2403                 dynixptx*) osname=dynixptx
2404                         osvers=`echo "$4"|sed 's/^v//'`
2405                         ;;
2406                 freebsd) osname=freebsd 
2407                         osvers="$3" ;;
2408                 genix) osname=genix ;;
2409                 hp*) osname=hpux 
2410                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2411                         ;;
2412                 irix*) osname=irix
2413                         case "$3" in
2414                         4*) osvers=4 ;;
2415                         5*) osvers=5 ;;
2416                         *)      osvers="$3" ;;
2417                         esac
2418                         ;;
2419                 linux) osname=linux
2420                         case "$3" in
2421                         *)      osvers="$3" ;;
2422                         esac
2423                         ;;
2424                 MiNT) osname=mint
2425                         ;;
2426                 netbsd*) osname=netbsd
2427                         osvers="$3"
2428                         ;;
2429                 news-os) osvers="$3"
2430                         case "$3" in
2431                         4*) osname=newsos4 ;;
2432                         *) osname=newsos ;;
2433                         esac
2434                         ;;
2435                 next*) osname=next ;;
2436                 nonstop-ux) osname=nonstopux ;;
2437                 POSIX-BC | posix-bc ) osname=posix-bc
2438                         osvers="$3"
2439                         ;;
2440                 powerux | power_ux | powermax_os | powermaxos | \
2441                 powerunix | power_unix) osname=powerux
2442                         osvers="$3"
2443                         ;;
2444                 qnx) osname=qnx
2445                         osvers="$4"
2446                         ;;
2447                 solaris) osname=solaris
2448                         case "$3" in
2449                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2450                         *)      osvers="$3" ;;
2451                         esac
2452                         ;;
2453                 sunos) osname=sunos
2454                         case "$3" in
2455                         5*) osname=solaris
2456                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2457                         *)      osvers="$3" ;;
2458                         esac
2459                         ;;
2460                 titanos) osname=titanos
2461                         case "$3" in
2462                         1*) osvers=1 ;;
2463                         2*) osvers=2 ;;
2464                         3*) osvers=3 ;;
2465                         4*) osvers=4 ;;
2466                         *)      osvers="$3" ;;
2467                         esac
2468                         ;;
2469                 ultrix) osname=ultrix
2470                         osvers="$3"
2471                         ;;
2472                 osf1|mls+)      case "$5" in
2473                                 alpha)
2474                                         osname=dec_osf
2475                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
2476                                         case "$osvers" in
2477                                         [1-9].[0-9]*) ;;
2478                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
2479                                         esac
2480                                         ;;
2481                         hp*)    osname=hp_osf1  ;;
2482                         mips)   osname=mips_osf1 ;;
2483                         esac
2484                         ;;
2485                 unixware) osname=svr5
2486                         osvers="$4"
2487                         ;;
2488                 uts) osname=uts
2489                         osvers="$3"
2490                         ;;
2491                 $2) case "$osname" in
2492                         *isc*) ;;
2493                         *freebsd*) ;;
2494                         svr*)
2495                                 : svr4.x or possibly later
2496                                 case "svr$3" in 
2497                                 ${osname}*)
2498                                         osname=svr$3
2499                                         osvers=$4
2500                                         ;;
2501                                 esac
2502                                 case "$osname" in
2503                                 svr4.0)
2504                                         : Check for ESIX
2505                                         if test -f /stand/boot ; then
2506                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2507                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2508                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2509                                                         if test -n "$isesix"; then
2510                                                                 osname=esix4
2511                                                         fi
2512                                                 fi
2513                                         fi
2514                                         ;;
2515                                 esac
2516                                 ;;
2517                         *)      if test -f /etc/systemid; then
2518                                         osname=sco
2519                                         set `echo $3 | $sed 's/\./ /g'` $4
2520                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2521                                                 osvers=$1.$2.$3
2522                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2523                                                 osvers=$1.$2
2524                                         elif $test -f $src/hints/sco_$1.sh; then
2525                                                 osvers=$1
2526                                         fi
2527                                 else
2528                                         case "$osname" in
2529                                         '') : Still unknown.  Probably a generic Sys V.
2530                                                 osname="sysv"
2531                                                 osvers="$3"
2532                                                 ;;
2533                                         esac
2534                                 fi
2535                                 ;;
2536                         esac
2537                         ;;
2538                 *)      case "$osname" in
2539                         '') : Still unknown.  Probably a generic BSD.
2540                                 osname="$1"
2541                                 osvers="$3"
2542                                 ;;
2543                         esac
2544                         ;;
2545                 esac
2546         else
2547                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2548                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2549                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2550                                 osname=news_os
2551                         fi
2552                         $rm -f UU/kernel.what
2553                 elif test -d c:/.; then
2554                         set X $myuname
2555                         osname=os2
2556                         osvers="$5"
2557                 fi
2558         fi
2559         
2560         : Now look for a hint file osname_osvers, unless one has been
2561         : specified already.
2562         case "$hintfile" in
2563         ''|' ')
2564                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
2565                 : Also try without trailing minor version numbers.
2566                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
2567                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
2568                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
2569                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
2570                 case "$file" in
2571                 '') dflt=none ;;
2572                 *)  case "$osvers" in
2573                         '') dflt=$file
2574                                 ;;
2575                         *)  if $test -f $src/hints/$file.sh ; then
2576                                         dflt=$file
2577                                 elif $test -f $src/hints/$xfile.sh ; then
2578                                         dflt=$xfile
2579                                 elif $test -f $src/hints/$xxfile.sh ; then
2580                                         dflt=$xxfile
2581                                 elif $test -f $src/hints/$xxxfile.sh ; then
2582                                         dflt=$xxxfile
2583                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2584                                         dflt=$xxxxfile
2585                                 elif $test -f "$src/hints/${osname}.sh" ; then
2586                                         dflt="${osname}"
2587                                 else
2588                                         dflt=none
2589                                 fi
2590                                 ;;
2591                         esac
2592                         ;;
2593                 esac
2594                 if $test -f Policy.sh ; then
2595                         case "$dflt" in
2596                         *Policy*) ;;
2597                         none) dflt="Policy" ;;
2598                         *) dflt="Policy $dflt" ;;
2599                         esac
2600                 fi
2601                 ;;
2602         *)
2603                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2604                 ;;
2605         esac
2606
2607         if $test -f Policy.sh ; then
2608                 $cat <<EOM
2609
2610 There's also a Policy hint file available, which should make the
2611 site-specific (policy) questions easier to answer.
2612 EOM
2613
2614         fi
2615
2616         $cat <<EOM
2617
2618 You may give one or more space-separated answers, or "none" if appropriate.
2619 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2620 is a good thing.  DO NOT give a wrong version or a wrong OS.
2621
2622 EOM
2623
2624         rp="Which of these apply, if any?"
2625         . UU/myread
2626         tans=$ans
2627         for file in $tans; do
2628                 if $test X$file = XPolicy -a -f Policy.sh; then
2629                         . Policy.sh
2630                         $cat Policy.sh >> UU/config.sh
2631                 elif $test -f $src/hints/$file.sh; then
2632                         . $src/hints/$file.sh
2633                         $cat $src/hints/$file.sh >> UU/config.sh
2634                 elif $test X$tans = X -o X$tans = Xnone ; then
2635                         : nothing
2636                 else
2637                         : Give one chance to correct a possible typo.
2638                         echo "$file.sh does not exist"
2639                         dflt=$file
2640                         rp="hint to use instead?"
2641                         . UU/myread
2642                         for file in $ans; do
2643                                 if $test -f "$src/hints/$file.sh"; then
2644                                         . $src/hints/$file.sh
2645                                         $cat $src/hints/$file.sh >> UU/config.sh
2646                                 elif $test X$ans = X -o X$ans = Xnone ; then
2647                                         : nothing
2648                                 else
2649                                         echo "$file.sh does not exist -- ignored."
2650                                 fi
2651                         done
2652                 fi
2653         done
2654
2655         hint=recommended
2656         : Remember our hint file for later.
2657         if $test -f "$src/hints/$file.sh" ; then
2658                 hintfile="$file"
2659         else
2660                 hintfile=''
2661         fi
2662 fi
2663 cd UU
2664 ;;
2665 *)
2666         echo " "
2667         echo "Fetching default answers from $config_sh..." >&4
2668         tmp_n="$n"
2669         tmp_c="$c"
2670         cd ..
2671         cp $config_sh config.sh 2>/dev/null
2672         chmod +w config.sh
2673         . ./config.sh
2674         cd UU
2675         cp ../config.sh .
2676         n="$tmp_n"
2677         c="$tmp_c"
2678         hint=previous
2679         ;;
2680 esac
2681 test "$override" && . ./optdef.sh
2682
2683 : Restore computed paths
2684 for file in $loclist $trylist; do
2685         eval $file="\$_$file"
2686 done
2687
2688 cat << EOM
2689
2690 Configure uses the operating system name and version to set some defaults.
2691 The default value is probably right if the name rings a bell. Otherwise,
2692 since spelling matters for me, either accept the default or answer "none"
2693 to leave it blank.
2694
2695 EOM
2696 case "$osname" in
2697         ''|' ')
2698                 case "$hintfile" in
2699                 ''|' '|none) dflt=none ;;
2700                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2701                 esac
2702                 ;;
2703         *) dflt="$osname" ;;
2704 esac
2705 rp="Operating system name?"
2706 . ./myread
2707 case "$ans" in
2708 none)  osname='' ;;
2709 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2710 esac
2711 echo " "
2712 case "$osvers" in
2713         ''|' ')
2714                 case "$hintfile" in
2715                 ''|' '|none) dflt=none ;;
2716                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2717                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2718                         case "$dflt" in
2719                         ''|' ') dflt=none ;;
2720                         esac
2721                         ;;
2722                 esac
2723                 ;;
2724         *) dflt="$osvers" ;;
2725 esac
2726 rp="Operating system version?"
2727 . ./myread
2728 case "$ans" in
2729 none)  osvers='' ;;
2730 *) osvers="$ans" ;;
2731 esac
2732
2733
2734 . ./posthint.sh
2735
2736 : who configured the system
2737 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2738 cf_by=`(logname) 2>/dev/null`
2739 case "$cf_by" in
2740 "")
2741         cf_by=`(whoami) 2>/dev/null`
2742         case "$cf_by" in
2743         "") cf_by=unknown ;;
2744         esac ;;
2745 esac
2746
2747 : set up the script used to warn in case of inconsistency
2748 cat <<EOS >whoa
2749 $startsh
2750 EOS
2751 cat <<'EOSC' >>whoa
2752 dflt=y
2753 echo " "
2754 echo "*** WHOA THERE!!! ***" >&4
2755 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2756 rp="    Keep the $hint value?"
2757 . ./myread
2758 case "$ans" in
2759 y) td=$was; tu=$was;;
2760 esac
2761 EOSC
2762
2763 : function used to set $1 to $val
2764 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2765 case "$val$was" in
2766 $define$undef) . ./whoa; eval "$var=\$td";;
2767 $undef$define) . ./whoa; eval "$var=\$tu";;
2768 *) eval "$var=$val";;
2769 esac'
2770
2771 case "$usethreads" in
2772 $define|true|[yY]*)     dflt='y';;
2773 *) dflt='n';;
2774 esac
2775 cat <<EOM
2776
2777 Perl can be built to take advantage of threads on some systems.
2778 To do so, Configure can be run with -Dusethreads.
2779
2780 Note that threading is a highly experimental feature, and
2781 some known race conditions still remain.  If you choose to try
2782 it, be very sure to not actually deploy it for production
2783 purposes.  README.threads has more details, and is required
2784 reading if you enable threads.
2785
2786 If this doesn't make any sense to you, just accept the default '$dflt'.
2787 EOM
2788 rp='Build a threading Perl?'
2789 . ./myread
2790 case "$ans" in
2791 y|Y)    val="$define" ;;
2792 *)      val="$undef" ;;
2793 esac
2794 set usethreads
2795 eval $setvar
2796
2797 case "$usethreads" in
2798 $define)
2799         $cat <<EOM
2800
2801 As of 5.5.640, Perl has two different internal threading implementations,
2802 the 5.005 version (5005threads) and an interpreter-based version
2803 (ithreads) that has one interpreter per thread.  Both are very 
2804 experimental.  This arrangement exists to help developers work out
2805 which one is better.
2806
2807 If you're a casual user, you probably don't want interpreter-threads
2808 at this time.  There doesn't yet exist a way to create threads from
2809 within Perl in this model, i.e., "use Thread;" will NOT work.
2810 EOM
2811         : Default to ithreads unless overridden on command line or with
2812         : old config.sh
2813         dflt='y'
2814         case "$use5005threads" in
2815                 $define|true|[yY]*) dflt='n';;
2816         esac
2817         case "$useithreads" in
2818                 $undef|false|[nN]*) dflt='n';;
2819         esac
2820         rp='Use interpreter-based ithreads?'
2821         . ./myread
2822         case "$ans" in
2823         y|Y)    val="$define" ;;
2824         *)      val="$undef" ;;
2825         esac
2826         set useithreads
2827         eval $setvar
2828         : Now set use5005threads to the opposite value.
2829         case "$useithreads" in
2830         $define) val="$undef" ;;
2831         *) val="$define" ;;
2832         esac
2833         set use5005threads
2834         eval $setvar
2835         ;;
2836 *)
2837         useithreads="$undef"
2838         use5005threads="$undef"
2839         ;;
2840 esac
2841
2842 case "$d_oldpthreads" in
2843 '')     : Configure tests would be welcome here.  For now, assume undef.
2844         val="$undef" ;;
2845 *)      val="$d_oldpthreads" ;;
2846 esac
2847 set d_oldpthreads
2848 eval $setvar
2849
2850
2851 case "$usethreads" in
2852 "$define"|true|[yY]*)
2853 : Look for a hint-file generated 'call-back-unit'.  If the
2854 : user has specified that a threading perl is to be built,
2855 : we may need to set or change some other defaults.
2856         if $test -f usethreads.cbu; then
2857                 echo "Your platform has some specific hints for threaded builds, using them..."
2858                 . ./usethreads.cbu
2859         else
2860                 $cat <<EOM
2861 (Your platform doesn't have any specific hints for threaded builds.
2862  Assuming POSIX threads, then.)
2863 EOM
2864         fi
2865         ;;
2866 esac
2867
2868 cat <<EOM
2869
2870 Perl can be built so that multiple Perl interpreters can coexist
2871 within the same Perl executable.
2872 EOM
2873
2874 case "$useithreads" in
2875 $define)
2876         cat <<EOM
2877 This multiple interpreter support is required for interpreter-based threads.
2878 EOM
2879         val="$define"
2880         ;;
2881 *)      case "$usemultiplicity" in
2882         $define|true|[yY]*)     dflt='y';;
2883         *) dflt='n';;
2884         esac
2885         echo " "
2886         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
2887         rp='Build Perl for multiplicity?'
2888         . ./myread
2889         case "$ans" in
2890         y|Y)    val="$define" ;;
2891         *)      val="$undef" ;;
2892         esac
2893         ;;
2894 esac
2895 set usemultiplicity
2896 eval $setvar
2897
2898 : make some quick guesses about what we are up against
2899 echo " "
2900 $echo $n "Hmm...  $c"
2901 echo exit 1 >bsd
2902 echo exit 1 >usg
2903 echo exit 1 >v7
2904 echo exit 1 >osf1
2905 echo exit 1 >eunice
2906 echo exit 1 >xenix
2907 echo exit 1 >venix
2908 echo exit 1 >os2
2909 d_bsd="$undef"
2910 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
2911 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
2912 then
2913         echo "Looks kind of like an OSF/1 system, but we'll see..."
2914         echo exit 0 >osf1
2915 elif test `echo abc | $tr a-z A-Z` = Abc ; then
2916         xxx=`./loc addbib blurfl $pth`
2917         if $test -f $xxx; then
2918         echo "Looks kind of like a USG system with BSD features, but we'll see..."
2919                 echo exit 0 >bsd
2920                 echo exit 0 >usg
2921         else
2922                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
2923                         echo "Looks kind of like an extended USG system, but we'll see..."
2924                 else
2925                         echo "Looks kind of like a USG system, but we'll see..."
2926                 fi
2927                 echo exit 0 >usg
2928         fi
2929 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
2930         echo "Looks kind of like a BSD system, but we'll see..."
2931         d_bsd="$define"
2932         echo exit 0 >bsd
2933 else
2934         echo "Looks kind of like a Version 7 system, but we'll see..."
2935         echo exit 0 >v7
2936 fi
2937 case "$eunicefix" in
2938 *unixtovms*)
2939         $cat <<'EOI'
2940 There is, however, a strange, musty smell in the air that reminds me of
2941 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
2942 EOI
2943         echo exit 0 >eunice
2944         d_eunice="$define"
2945 : it so happens the Eunice I know will not run shell scripts in Unix format
2946         ;;
2947 *)
2948         echo " "
2949         echo "Congratulations.  You aren't running Eunice."
2950         d_eunice="$undef"
2951         ;;
2952 esac
2953 : Detect OS2.  The p_ variable is set above in the Head.U unit.
2954 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
2955 : semicolon as a patch separator
2956 case "$p_" in
2957 :) ;;
2958 *)
2959         $cat <<'EOI'
2960 I have the feeling something is not exactly right, however...don't tell me...
2961 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
2962 (Or you may be running DOS with DJGPP.)
2963 EOI
2964         echo exit 0 >os2
2965         ;;
2966 esac
2967 if test -f /xenix; then
2968         echo "Actually, this looks more like a XENIX system..."
2969         echo exit 0 >xenix
2970         d_xenix="$define"
2971 else
2972         echo " "
2973         echo "It's not Xenix..."
2974         d_xenix="$undef"
2975 fi
2976 chmod +x xenix
2977 $eunicefix xenix
2978 if test -f /venix; then
2979         echo "Actually, this looks more like a VENIX system..."
2980         echo exit 0 >venix
2981 else
2982         echo " "
2983         if ./xenix; then
2984                 : null
2985         else
2986                 echo "Nor is it Venix..."
2987         fi
2988 fi
2989 chmod +x bsd usg v7 osf1 eunice xenix venix os2
2990 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
2991 $rm -f foo
2992
2993 case "$cc" in
2994 '') dflt=cc;;
2995 *) dflt="$cc";;
2996 esac
2997 rp="Use which C compiler?"
2998 . ./myread
2999 cc="$ans"
3000 : Look for a hint-file generated 'call-back-unit'.  Now that the
3001 : user has specified the compiler, we may need to set or change some
3002 : other defaults.
3003 if $test -f cc.cbu; then
3004     . ./cc.cbu
3005 fi
3006 . ./checkcc
3007
3008 echo " "
3009 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3010 $cat >gccvers.c <<EOM
3011 #include <stdio.h>
3012 int main() {
3013 #ifdef __GNUC__
3014 #ifdef __VERSION__
3015         printf("%s\n", __VERSION__);
3016 #else
3017         printf("%s\n", "1");
3018 #endif
3019 #endif
3020         exit(0);
3021 }
3022 EOM
3023 if $cc -o gccvers $ldflags gccvers.c; then
3024         gccversion=`./gccvers`
3025         case "$gccversion" in
3026         '') echo "You are not using GNU cc." ;;
3027         *)  echo "You are using GNU cc $gccversion."
3028             ccname=gcc  
3029             ;;
3030         esac
3031 else
3032         echo " "
3033         echo "*** WHOA THERE!!! ***" >&4
3034         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3035         case "$knowitall" in
3036         '')
3037         echo "    You'd better start hunting for one and let me know about it." >&4
3038                 exit 1
3039                 ;;
3040         esac
3041 fi
3042 $rm -f gccvers*
3043 case "$gccversion" in
3044 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3045 esac
3046 case "$gccversion" in
3047 '') gccosandvers='' ;;
3048 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3049    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3050    gccshortvers=''
3051    case "$gccosandvers" in
3052    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3053    $osname$osvers) ;; # looking good
3054    $osname*) cat <<EOM >&4
3055
3056 *** WHOA THERE!!! ***
3057
3058     Your gcc has not been compiled for the exact release of
3059     your operating system ($gccosandvers versus $osname$osvers).
3060
3061     In general it is a good idea to keep gcc synchronized with
3062     the operating system because otherwise serious problems
3063     may ensue when trying to compile software, like Perl.
3064
3065     I'm trying to be optimistic here, though, and will continue.
3066     If later during the configuration and build icky compilation
3067     problems appear (headerfile conflicts being the most common
3068     manifestation), I suggest reinstalling the gcc to match
3069     your operating system release.
3070
3071 EOM
3072       ;;
3073    *) gccosandvers='' ;; # failed to parse, better be silent
3074    esac
3075    ;;
3076 esac
3077 case "$ccname" in
3078 '') ccname="$cc" ;;
3079 esac
3080
3081 : see how we invoke the C preprocessor
3082 echo " "
3083 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3084 cat <<'EOT' >testcpp.c
3085 #define ABC abc
3086 #define XYZ xyz
3087 ABC.XYZ
3088 EOT
3089 cd ..
3090 if test ! -f cppstdin; then
3091         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3092                 # AIX cc -E doesn't show the absolute headerfile
3093                 # locations but we'll cheat by using the -M flag.
3094                 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
3095         else
3096                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3097         fi
3098 else
3099         echo "Keeping your $hint cppstdin wrapper."
3100 fi
3101 chmod 755 cppstdin
3102 wrapper=`pwd`/cppstdin
3103 ok='false'
3104 cd UU
3105
3106 if $test "X$cppstdin" != "X" && \
3107         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3108         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3109 then
3110         echo "You used to use $cppstdin $cppminus so we'll use that again."
3111         case "$cpprun" in
3112         '') echo "But let's see if we can live without a wrapper..." ;;
3113         *)
3114                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3115                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3116                 then
3117                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3118                         ok='true'
3119                 else
3120                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3121                 fi
3122                 ;;
3123         esac
3124 else
3125         case "$cppstdin" in
3126         '') ;;
3127         *)
3128                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3129                 ;;
3130         esac
3131 fi
3132
3133 if $ok; then
3134         : nothing
3135 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3136         $cc -E <testcpp.c >testcpp.out 2>&1; \
3137         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3138         echo "Yup, it does."
3139         x_cpp="$cc -E"
3140         x_minus='';
3141 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3142         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3143         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3144         echo "Yup, it does."
3145         x_cpp="$cc -E"
3146         x_minus='-';
3147 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3148         $cc -P <testcpp.c >testcpp.out 2>&1; \
3149         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3150         echo "Yipee, that works!"
3151         x_cpp="$cc -P"
3152         x_minus='';
3153 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3154         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3155         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3156         echo "At long last!"
3157         x_cpp="$cc -P"
3158         x_minus='-';
3159 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3160         $cpp <testcpp.c >testcpp.out 2>&1; \
3161         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3162         echo "It works!"
3163         x_cpp="$cpp"
3164         x_minus='';
3165 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3166         $cpp - <testcpp.c >testcpp.out 2>&1; \
3167         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3168         echo "Hooray, it works!  I was beginning to wonder."
3169         x_cpp="$cpp"
3170         x_minus='-';
3171 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3172         $wrapper <testcpp.c >testcpp.out 2>&1; \
3173         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3174         x_cpp="$wrapper"
3175         x_minus=''
3176         echo "Eureka!"
3177 else
3178         dflt=''
3179         rp="No dice.  I can't find a C preprocessor.  Name one:"
3180         . ./myread
3181         x_cpp="$ans"
3182         x_minus=''
3183         $x_cpp <testcpp.c >testcpp.out 2>&1
3184         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3185                 echo "OK, that will do." >&4
3186         else
3187 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3188                 exit 1
3189         fi
3190 fi
3191
3192 case "$ok" in
3193 false)
3194         cppstdin="$x_cpp"
3195         cppminus="$x_minus"
3196         cpprun="$x_cpp"
3197         cpplast="$x_minus"
3198         set X $x_cpp
3199         shift
3200         case "$1" in
3201         "$cpp")
3202                 echo "Perhaps can we force $cc -E using a wrapper..."
3203                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3204                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3205                 then
3206                         echo "Yup, we can."
3207                         cppstdin="$wrapper"
3208                         cppminus='';
3209                 else
3210                         echo "Nope, we'll have to live without it..."
3211                 fi
3212                 ;;
3213         esac
3214         case "$cpprun" in
3215         "$wrapper")
3216                 cpprun=''
3217                 cpplast=''
3218                 ;;
3219         esac
3220         ;;
3221 esac
3222
3223 case "$cppstdin" in
3224 "$wrapper"|'cppstdin') ;;
3225 *) $rm -f $wrapper;;
3226 esac
3227 $rm -f testcpp.c testcpp.out
3228
3229 : decide how portable to be.  Allow command line overrides.
3230 case "$d_portable" in
3231 "$undef") ;;
3232 *)      d_portable="$define" ;;
3233 esac
3234
3235 : set up shell script to do ~ expansion
3236 cat >filexp <<EOSS
3237 $startsh
3238 : expand filename
3239 case "\$1" in
3240  ~/*|~)
3241         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3242         ;;
3243  ~*)
3244         if $test -f /bin/csh; then
3245                 /bin/csh -f -c "glob \$1"
3246                 failed=\$?
3247                 echo ""
3248                 exit \$failed
3249         else
3250                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3251                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3252                 if $test ! -d "\$dir"; then
3253                         me=\`basename \$0\`
3254                         echo "\$me: can't locate home directory for: \$name" >&2
3255                         exit 1
3256                 fi
3257                 case "\$1" in
3258                 */*)
3259                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3260                         ;;
3261                 *)
3262                         echo \$dir
3263                         ;;
3264                 esac
3265         fi
3266         ;;
3267 *)
3268         echo \$1
3269         ;;
3270 esac
3271 EOSS
3272 chmod +x filexp
3273 $eunicefix filexp
3274
3275 : now set up to get a file name
3276 cat <<EOS >getfile
3277 $startsh
3278 EOS
3279 cat <<'EOSC' >>getfile
3280 tilde=''
3281 fullpath=''
3282 already=''
3283 skip=''
3284 none_ok=''
3285 exp_file=''
3286 nopath_ok=''
3287 orig_rp="$rp"
3288 orig_dflt="$dflt"
3289 case "$gfpth" in
3290 '') gfpth='.' ;;
3291 esac
3292
3293 case "$fn" in
3294 *\(*)
3295         expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3296         fn=`echo $fn | sed 's/(.*)//'`
3297         ;;
3298 esac
3299
3300 case "$fn" in
3301 *:*)
3302         loc_file=`expr $fn : '.*:\(.*\)'`
3303         fn=`expr $fn : '\(.*\):.*'`
3304         ;;
3305 esac
3306
3307 case "$fn" in
3308 *~*) tilde=true;;
3309 esac
3310 case "$fn" in
3311 */*) fullpath=true;;
3312 esac
3313 case "$fn" in
3314 *+*) skip=true;;
3315 esac
3316 case "$fn" in
3317 *n*) none_ok=true;;
3318 esac
3319 case "$fn" in
3320 *e*) exp_file=true;;
3321 esac
3322 case "$fn" in
3323 *p*) nopath_ok=true;;
3324 esac
3325
3326 case "$fn" in
3327 *f*) type='File';;
3328 *d*) type='Directory';;
3329 *l*) type='Locate';;
3330 esac
3331
3332 what="$type"
3333 case "$what" in
3334 Locate) what='File';;
3335 esac
3336
3337 case "$exp_file" in
3338 '')
3339         case "$d_portable" in
3340         "$define") ;;
3341         *) exp_file=true;;
3342         esac
3343         ;;
3344 esac
3345
3346 cd ..
3347 while test "$type"; do
3348         redo=''
3349         rp="$orig_rp"
3350         dflt="$orig_dflt"
3351         case "$tilde" in
3352         true) rp="$rp (~name ok)";;
3353         esac
3354         . UU/myread
3355         if test -f UU/getfile.ok && \
3356                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3357         then
3358                 value="$ans"
3359                 ansexp="$ans"
3360                 break
3361         fi
3362         case "$ans" in
3363         none)
3364                 value=''
3365                 ansexp=''
3366                 case "$none_ok" in
3367                 true) type='';;
3368                 esac
3369                 ;;
3370         *)
3371                 case "$tilde" in
3372                 '') value="$ans"
3373                         ansexp="$ans";;
3374                 *)
3375                         value=`UU/filexp $ans`
3376                         case $? in
3377                         0)
3378                                 if test "$ans" != "$value"; then
3379                                         echo "(That expands to $value on this system.)"
3380                                 fi
3381                                 ;;
3382                         *) value="$ans";;
3383                         esac
3384                         ansexp="$value"
3385                         case "$exp_file" in
3386                         '') value="$ans";;
3387                         esac
3388                         ;;
3389                 esac
3390                 case "$fullpath" in
3391                 true)
3392                         case "$ansexp" in
3393                         /*) value="$ansexp" ;;
3394                         [a-zA-Z]:/*) value="$ansexp" ;;
3395                         *)
3396                                 redo=true
3397                                 case "$already" in
3398                                 true)
3399                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3400                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3401                                         ;;
3402                                 *)
3403                                 echo "Please give a full path name, starting with slash." >&4
3404                                         case "$tilde" in
3405                                         true)
3406                                 echo "Note that using ~name is ok provided it expands well." >&4
3407                                                 already=true
3408                                                 ;;
3409                                         esac
3410                                 esac
3411                                 ;;
3412                         esac
3413                         ;;
3414                 esac
3415                 case "$redo" in
3416                 '')
3417                         case "$type" in
3418                         File)
3419                                 for fp in $gfpth; do
3420                                         if test "X$fp" = X.; then
3421                                             pf="$ansexp"
3422                                         else    
3423                                             pf="$fp/$ansexp"
3424                                         fi
3425                                         if test -f "$pf"; then
3426                                                 type=''
3427                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3428                                         then
3429                                                 echo "($value is not a plain file, but that's ok.)"
3430                                                 type=''
3431                                         fi
3432                                         if test X"$type" = X; then
3433                                             value="$pf"
3434                                             break
3435                                         fi
3436                                 done
3437                                 ;;
3438                         Directory)
3439                                 for fp in $gfpth; do
3440                                         if test "X$fp" = X.; then
3441                                             dir="$ans"
3442                                             direxp="$ansexp"
3443                                         else    
3444                                             dir="$fp/$ansexp"
3445                                             direxp="$fp/$ansexp"
3446                                         fi
3447                                         if test -d "$direxp"; then
3448                                                 type=''
3449                                                 value="$dir"
3450                                                 break
3451                                         fi
3452                                 done
3453                                 ;;
3454                         Locate)
3455                                 if test -d "$ansexp"; then
3456                                         echo "(Looking for $loc_file in directory $value.)"
3457                                         value="$value/$loc_file"
3458                                         ansexp="$ansexp/$loc_file"
3459                                 fi
3460                                 if test -f "$ansexp"; then
3461                                         type=''
3462                                 fi
3463                                 case "$nopath_ok" in
3464                                 true)   case "$value" in
3465                                         */*) ;;
3466                                         *)      echo "Assuming $value will be in people's path."
3467                                                 type=''
3468                                                 ;;
3469                                         esac
3470                                         ;;
3471                                 esac
3472                                 ;;
3473                         esac
3474
3475                         case "$skip" in
3476                         true) type='';
3477                         esac
3478
3479                         case "$type" in
3480                         '') ;;
3481                         *)
3482                                 if test "$fastread" = yes; then
3483                                         dflt=y
3484                                 else
3485                                         dflt=n
3486                                 fi
3487                                 rp="$what $value doesn't exist.  Use that name anyway?"
3488                                 . UU/myread
3489                                 dflt=''
3490                                 case "$ans" in
3491                                 y*) type='';;
3492                                 *) echo " ";;
3493                                 esac
3494                                 ;;
3495                         esac
3496                         ;;
3497                 esac
3498                 ;;
3499         esac
3500 done
3501 cd UU
3502 ans="$value"
3503 rp="$orig_rp"
3504 dflt="$orig_dflt"
3505 rm -f getfile.ok
3506 test "X$gfpthkeep" != Xy && gfpth=""
3507 EOSC
3508
3509 : What should the include directory be ?
3510 echo " "
3511 $echo $n "Hmm...  $c"
3512 dflt='/usr/include'
3513 incpath=''
3514 mips_type=''
3515 if $test -f /bin/mips && /bin/mips; then
3516         echo "Looks like a MIPS system..."
3517         $cat >usr.c <<'EOCP'
3518 #ifdef SYSTYPE_BSD43
3519 /bsd43
3520 #endif
3521 EOCP
3522         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3523                 dflt='/bsd43/usr/include'
3524                 incpath='/bsd43'
3525                 mips_type='BSD 4.3'
3526         else
3527                 mips_type='System V'
3528         fi
3529         $rm -f usr.c usr.out
3530         echo "and you're compiling with the $mips_type compiler and libraries."
3531         xxx_prompt=y
3532         echo "exit 0" >mips
3533 else
3534         echo "Doesn't look like a MIPS system."
3535         xxx_prompt=n
3536         echo "exit 1" >mips
3537 fi
3538 chmod +x mips
3539 $eunicefix mips
3540 case "$usrinc" in
3541 '') ;;
3542 *) dflt="$usrinc";;
3543 esac
3544 case "$xxx_prompt" in
3545 y)      fn=d/
3546         echo " "
3547         rp='Where are the include files you want to use?'
3548         . ./getfile
3549         usrinc="$ans"
3550         ;;
3551 *)      usrinc="$dflt"
3552         ;;
3553 esac
3554
3555 : Set private lib path
3556 case "$plibpth" in
3557 '') if ./mips; then
3558                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3559         fi;;
3560 esac
3561 case "$libpth" in
3562 ' ') dlist='';;
3563 '') dlist="$loclibpth $plibpth $glibpth";;
3564 *) dlist="$libpth";;
3565 esac
3566
3567 : Now check and see which directories actually exist, avoiding duplicates
3568 libpth=''
3569 for xxx in $dlist
3570 do
3571     if $test -d $xxx; then
3572                 case " $libpth " in
3573                 *" $xxx "*) ;;
3574                 *) libpth="$libpth $xxx";;
3575                 esac
3576     fi
3577 done
3578 $cat <<'EOM'
3579
3580 Some systems have incompatible or broken versions of libraries.  Among
3581 the directories listed in the question below, please remove any you
3582 know not to be holding relevant libraries, and add any that are needed.
3583 Say "none" for none.
3584
3585 EOM
3586 case "$libpth" in
3587 '') dflt='none';;
3588 *)
3589         set X $libpth
3590         shift
3591         dflt=${1+"$@"}
3592         ;;
3593 esac
3594 rp="Directories to use for library searches?"
3595 . ./myread
3596 case "$ans" in
3597 none) libpth=' ';;
3598 *) libpth="$ans";;
3599 esac
3600
3601 : compute shared library extension
3602 case "$so" in
3603 '')
3604         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3605                 dflt='sl'
3606         else
3607                 dflt='so'
3608         fi
3609         ;;
3610 *) dflt="$so";;
3611 esac
3612 $cat <<EOM
3613
3614 On some systems, shared libraries may be available.  Answer 'none' if
3615 you want to suppress searching of shared libraries for the remainder
3616 of this configuration.
3617
3618 EOM
3619 rp='What is the file extension used for shared libraries?'
3620 . ./myread
3621 so="$ans"
3622
3623 : Define several unixisms.
3624 : Hints files or command line option can be used to override them.
3625 : The convoluted testing is in case hints files set either the old
3626 : or the new name.
3627 case "$_exe" in
3628 '')     case "$exe_ext" in
3629     '') ;;
3630         *)      _exe="$exe_ext" ;;
3631         esac
3632         ;;
3633 esac
3634 case "$_a" in
3635 '')     case "$lib_ext" in
3636     '') _a='.a';;
3637         *)      _a="$lib_ext" ;;
3638         esac
3639         ;;
3640 esac
3641 case "$_o" in
3642 '') case "$obj_ext" in
3643         '')     _o='.o';;
3644         *)      _o="$obj_ext";;
3645         esac
3646         ;;
3647 esac
3648 case "$p_" in
3649 '') case "$path_sep" in
3650         '')     p_=':';;
3651         *)      p_="$path_sep";;
3652         esac
3653         ;;
3654 esac
3655 exe_ext=$_exe
3656 lib_ext=$_a
3657 obj_ext=$_o
3658 path_sep=$p_
3659
3660 : Which makefile gets called first.  This is used by make depend.
3661 case "$firstmakefile" in
3662 '') firstmakefile='makefile';;
3663 esac
3664
3665 case "$usesocks" in
3666 $define|true|[yY]*)     dflt='y';;
3667 *) dflt='n';;
3668 esac
3669 cat <<EOM
3670
3671 Perl can be built to use the SOCKS proxy protocol library.  To do so,
3672 Configure must be run with -Dusesocks.
3673
3674 If this doesn't make any sense to you, just accept the default '$dflt'.
3675 EOM
3676 rp='Build Perl for SOCKS?'
3677 . ./myread
3678 case "$ans" in
3679 y|Y)    val="$define" ;;     
3680 *)      val="$undef" ;;
3681 esac
3682 set usesocks
3683 eval $setvar
3684
3685 : Looking for optional libraries
3686 echo " "
3687 echo "Checking for optional libraries..." >&4
3688 case "$libs" in
3689 ' '|'') dflt='';;
3690 *) dflt="$libs";;
3691 esac
3692 case "$libswanted" in
3693 '') libswanted='c_s';;
3694 esac
3695 case "$usesocks" in
3696 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
3697 esac
3698 libsfound=''
3699 libsfiles=''
3700 libsdirs=''
3701 libspath=''
3702 for thisdir in $libpth $xlibpth; do
3703   test -d $thisdir && libspath="$libspath $thisdir"
3704 done
3705 for thislib in $libswanted; do
3706         for thisdir in $libspath; do
3707             xxx=''
3708             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3709                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
3710                 $test -f "$xxx" && eval $libscheck
3711                 $test -f "$xxx" && libstyle=shared
3712             fi
3713             if test ! -f "$xxx"; then
3714                 xxx=$thisdir/lib$thislib.$so
3715                 $test -f "$xxx" && eval $libscheck
3716                 $test -f "$xxx" && libstyle=shared
3717             fi  
3718             if test ! -f "$xxx"; then
3719                 xxx=$thisdir/lib$thislib$_a
3720                 $test -f "$xxx" && eval $libscheck
3721                 $test -f "$xxx" && libstyle=static
3722             fi
3723             if test ! -f "$xxx"; then
3724                 xxx=$thisdir/$thislib$_a
3725                 $test -f "$xxx" && eval $libscheck
3726                 $test -f "$xxx" && libstyle=static
3727             fi
3728             if test ! -f "$xxx"; then
3729                 xxx=$thisdir/lib${thislib}_s$_a
3730                 $test -f "$xxx" && eval $libscheck
3731                 $test -f "$xxx" && libstyle=static
3732                 $test -f "$xxx" && thislib=${thislib}_s
3733             fi
3734             if test ! -f "$xxx"; then
3735                 xxx=$thisdir/Slib$thislib$_a
3736                 $test -f "$xxx" && eval $libscheck
3737                 $test -f "$xxx" && libstyle=static
3738             fi
3739             if $test -f "$xxx"; then
3740                 case "$libstyle" in
3741                 shared) echo "Found -l$thislib (shared)." ;;
3742                 static) echo "Found -l$thislib." ;;
3743                 *)      echo "Found -l$thislib ($libstyle)." ;;
3744                 esac
3745                 case " $dflt " in
3746                 *"-l$thislib "*);;
3747                 *) dflt="$dflt -l$thislib"
3748                    libsfound="$libsfound $xxx"
3749                    yyy=`basename $xxx`
3750                    libsfiles="$libsfiles $yyy"
3751                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
3752                    case " $libsdirs " in
3753                    *" $yyy "*) ;;
3754                    *) libsdirs="$libsdirs $yyy" ;;
3755                    esac
3756                    ;;
3757                 esac
3758                 break
3759             fi  
3760         done
3761         if $test ! -f "$xxx"; then
3762             echo "No -l$thislib."
3763         fi
3764 done
3765 set X $dflt
3766 shift
3767 dflt="$*"
3768 case "$libs" in
3769 '') dflt="$dflt";;
3770 *) dflt="$libs";;
3771 esac
3772 case "$dflt" in
3773 ' '|'') dflt='none';;
3774 esac
3775
3776 $cat <<EOM
3777
3778 In order to compile $package on your machine, a number of libraries
3779 are usually needed.  Include any other special libraries here as well.
3780 Say "none" for none.  The default list is almost always right.
3781 EOM
3782
3783 echo " "
3784 rp="What libraries to use?"
3785 . ./myread
3786 case "$ans" in
3787 none) libs=' ';;
3788 *) libs="$ans";;
3789 esac
3790
3791 : determine optimization, if desired, or use for debug flag also
3792 case "$optimize" in
3793 ' '|$undef) dflt='none';;
3794 '') dflt='-O';;
3795 *) dflt="$optimize";;
3796 esac
3797 $cat <<EOH
3798
3799 By default, $package compiles with the -O flag to use the optimizer.
3800 Alternately, you might want to use the symbolic debugger, which uses
3801 the -g flag (on traditional Unix systems).  Either flag can be
3802 specified here.  To use neither flag, specify the word "none".
3803
3804 EOH
3805 rp="What optimizer/debugger flag should be used?"
3806 . ./myread
3807 optimize="$ans"
3808 case "$optimize" in
3809 'none') optimize=" ";;
3810 esac
3811
3812 dflt=''
3813 : We will not override a previous value, but we might want to
3814 : augment a hint file
3815 case "$hint" in
3816 default|recommended)
3817         case "$gccversion" in
3818         1*) dflt='-fpcc-struct-return' ;;
3819         esac
3820         case "$optimize" in
3821         *-g*) dflt="$dflt -DDEBUGGING";;
3822         esac
3823         case "$gccversion" in
3824         2*) if test -d /etc/conf/kconfig.d &&
3825                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
3826                 then
3827                         dflt="$dflt -posix"
3828                 fi
3829                 ;;
3830         esac
3831         case "$gccversion" in
3832         1*) ;;
3833         2.[0-8]*) ;;
3834         ?*)     echo " "
3835                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
3836                 echo 'int main(void) { return 0; }' > gcctest.c
3837                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
3838                         echo "Yes, it does." 2>&1
3839                         case "$ccflags" in
3840                         *strict-aliasing*) 
3841                                 echo "Leaving current flags $ccflags alone." 2>&1
3842                                 ;;
3843                         *) dflt="$dflt -fno-strict-aliasing" ;;
3844                         esac
3845                 else
3846                         echo "Nope, it doesn't, but that's ok." 2>&1
3847                 fi
3848                 ;;
3849         esac
3850         ;;
3851 esac
3852
3853 case "$mips_type" in
3854 *BSD*|'') inclwanted="$locincpth $usrinc";;
3855 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
3856 esac
3857 for thisincl in $inclwanted; do
3858         if $test -d $thisincl; then
3859                 if $test x$thisincl != x$usrinc; then
3860                         case "$dflt" in
3861                         *" -I$thisincl "*);;
3862                         *) dflt="$dflt -I$thisincl ";;
3863                         esac
3864                 fi
3865         fi
3866 done
3867
3868 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
3869         xxx=true;
3870 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
3871         xxx=true;
3872 else
3873         xxx=false;
3874 fi;
3875 if $xxx; then
3876         case "$dflt" in
3877         *$2*);;
3878         *) dflt="$dflt -D$2";;
3879         esac;
3880 fi'
3881
3882 set signal.h LANGUAGE_C; eval $inctest
3883
3884 case "$usesocks" in
3885 $define)
3886         ccflags="$ccflags -DSOCKS"
3887         ;;
3888 esac
3889
3890 case "$hint" in
3891 default|recommended) dflt="$ccflags $dflt" ;;
3892 *) dflt="$ccflags";;
3893 esac
3894
3895 case "$dflt" in
3896 ''|' ') dflt=none;;
3897 esac
3898
3899 $cat <<EOH
3900
3901 Your C compiler may want other flags.  For this question you should include
3902 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
3903 but you should NOT include libraries or ld flags like -lwhatever.  If you
3904 want $package to honor its debug switch, you should include -DDEBUGGING here.
3905 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
3906
3907 To use no flags, specify the word "none".
3908
3909 EOH
3910 set X $dflt
3911 shift
3912 dflt=${1+"$@"}
3913 rp="Any additional cc flags?"
3914 . ./myread
3915 case "$ans" in
3916 none) ccflags='';;
3917 *) ccflags="$ans";;
3918 esac
3919
3920 : the following weeds options from ccflags that are of no interest to cpp
3921 cppflags="$ccflags"
3922 case "$gccversion" in
3923 1*) cppflags="$cppflags -D__GNUC__"
3924 esac
3925 case "$mips_type" in
3926 '');;
3927 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
3928 esac
3929 case "$cppflags" in
3930 '');;
3931 *)
3932         echo " "
3933         echo "Let me guess what the preprocessor flags are..." >&4
3934         set X $cppflags
3935         shift
3936         cppflags=''
3937         $cat >cpp.c <<'EOM'
3938 #define BLURFL foo
3939
3940 BLURFL xx LFRULB
3941 EOM
3942         previous=''
3943         for flag in $*
3944         do
3945                 case "$flag" in
3946                 -*) ftry="$flag";;
3947                 *) ftry="$previous $flag";;
3948                 esac
3949                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
3950                         >cpp1.out 2>/dev/null && \
3951                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
3952                         >cpp2.out 2>/dev/null && \
3953                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
3954                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
3955                 then
3956                         cppflags="$cppflags $ftry"
3957                         previous=''
3958                 else
3959                         previous="$flag"
3960                 fi
3961         done
3962         set X $cppflags
3963         shift
3964         cppflags=${1+"$@"}
3965         case "$cppflags" in
3966         *-*)  echo "They appear to be: $cppflags";;
3967         esac
3968         $rm -f cpp.c cpp?.out
3969         ;;
3970 esac
3971
3972 : flags used in final linking phase
3973 case "$ldflags" in
3974 '') if ./venix; then
3975                 dflt='-i -z'
3976         else
3977                 dflt=''
3978         fi
3979         case "$ccflags" in
3980         *-posix*) dflt="$dflt -posix" ;;
3981         esac
3982         ;;
3983 *) dflt="$ldflags";;
3984 esac
3985
3986 : Try to guess additional flags to pick up local libraries.
3987 for thislibdir in $libpth; do
3988         case " $loclibpth " in
3989         *" $thislibdir "*)
3990                 case "$dflt " in 
3991                 *"-L$thislibdir "*) ;;
3992                 *)  dflt="$dflt -L$thislibdir" ;;
3993                 esac
3994                 ;;
3995         esac
3996 done
3997
3998 case "$dflt" in
3999 '') dflt='none' ;;
4000 esac
4001
4002 $cat <<EOH
4003
4004 Your C linker may need flags.  For this question you should
4005 include -L/whatever and any other flags used by the C linker, but you
4006 should NOT include libraries like -lwhatever.
4007
4008 Make sure you include the appropriate -L/path flags if your C linker
4009 does not normally search all of the directories you specified above,
4010 namely
4011         $libpth
4012 To use no flags, specify the word "none".
4013
4014 EOH
4015
4016 rp="Any additional ld flags (NOT including libraries)?"
4017 . ./myread
4018 case "$ans" in
4019 none) ldflags='';;
4020 *) ldflags="$ans";;
4021 esac
4022 rmlist="$rmlist pdp11"
4023
4024 : coherency check
4025 echo " "
4026 echo "Checking your choice of C compiler and flags for coherency..." >&4
4027 $cat > try.c <<'EOF'
4028 #include <stdio.h>
4029 int main() { printf("Ok\n"); exit(0); }
4030 EOF
4031 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
4032 shift
4033 $cat >try.msg <<'EOM'
4034 I've tried to compile and run the following simple program:
4035
4036 EOM
4037 $cat try.c >> try.msg
4038
4039 $cat >> try.msg <<EOM
4040
4041 I used the command:
4042
4043         $*
4044         ./try
4045
4046 and I got the following output:
4047
4048 EOM
4049 dflt=y
4050 if sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
4051         if sh -c './try' >>try.msg 2>&1; then
4052                 xxx=`./try`
4053                 case "$xxx" in
4054                 "Ok") dflt=n ;;
4055                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4056                         case " $libs " in
4057                         *" -lsfio "*)
4058                                 cat >> try.msg <<'EOQS'
4059 If $libs contains -lsfio, and sfio is mis-configured, then it
4060 sometimes (apparently) runs and exits with a 0 status, but with no
4061 output!  It may have to do with sfio's use of _exit vs. exit.
4062
4063 EOQS
4064                                 rp="You have a big problem.  Shall I abort Configure"
4065                                 dflt=y
4066                                 ;;
4067                         esac
4068                         ;;
4069                 esac
4070         else
4071                 echo "The program compiled OK, but exited with status $?." >>try.msg
4072                 rp="You have a problem.  Shall I abort Configure"
4073                 dflt=y
4074         fi
4075 else
4076         echo "I can't compile the test program." >>try.msg
4077         rp="You have a BIG problem.  Shall I abort Configure"
4078         dflt=y
4079 fi
4080 case "$dflt" in
4081 y)
4082         $cat try.msg >&4
4083         case "$knowitall" in
4084         '')
4085                 echo "(The supplied flags or libraries might be incorrect.)"
4086                 ;;
4087         *) dflt=n;;
4088         esac
4089         echo " "
4090         . ./myread
4091         case "$ans" in
4092         n*|N*) ;;
4093         *)      echo "Ok.  Stopping Configure." >&4
4094                 exit 1
4095                 ;;
4096         esac
4097         ;;
4098 n) echo "OK, that should do.";;
4099 esac
4100 $rm -f try try.* core
4101
4102 : define an is-a-typedef? function
4103 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4104 case "$inclist" in
4105 "") inclist="sys/types.h";;
4106 esac;
4107 eval "varval=\$$var";
4108 case "$varval" in
4109 "")
4110         $rm -f temp.c;
4111         for inc in $inclist; do
4112                 echo "#include <$inc>" >>temp.c;
4113         done;
4114         echo "#ifdef $type" >> temp.c;
4115         echo "printf(\"We have $type\");" >> temp.c;
4116         echo "#endif" >> temp.c;
4117         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4118         if $contains $type temp.E >/dev/null 2>&1; then
4119                 eval "$var=\$type";
4120         else
4121                 eval "$var=\$def";
4122         fi;
4123         $rm -f temp.?;;
4124 *) eval "$var=\$varval";;
4125 esac'
4126
4127 : define an is-a-typedef? function that prompts if the type is not available.
4128 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4129 case "$inclist" in
4130 "") inclist="sys/types.h";;
4131 esac;
4132 eval "varval=\$$var";
4133 case "$varval" in
4134 "")
4135         $rm -f temp.c;
4136         for inc in $inclist; do
4137                 echo "#include <$inc>" >>temp.c;
4138         done;
4139         echo "#ifdef $type" >> temp.c;
4140         echo "printf(\"We have $type\");" >> temp.c;
4141         echo "#endif" >> temp.c;
4142         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4143         echo " " ;
4144         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
4145         if $contains $type temp.E >/dev/null 2>&1; then
4146                 echo "$type found." >&4;
4147                 eval "$var=\$type";
4148         else
4149                 echo "$type NOT found." >&4;
4150                 dflt="$def";
4151                 . ./myread ;
4152                 eval "$var=\$ans";
4153         fi;
4154         $rm -f temp.?;;
4155 *) eval "$var=\$varval";;
4156 esac'
4157
4158 : define a shorthand compile call
4159 compile='
4160 mc_file=$1;
4161 shift;
4162 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
4163 : define a shorthand compile call for compilations that should be ok.
4164 compile_ok='
4165 mc_file=$1;
4166 shift;
4167 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
4168
4169 : check for lengths of integral types
4170 echo " "
4171 case "$intsize" in
4172 '')
4173         echo "Checking to see how big your integers are..." >&4
4174         $cat >intsize.c <<'EOCP'
4175 #include <stdio.h>
4176 int main()
4177 {
4178         printf("intsize=%d;\n", (int)sizeof(int));
4179         printf("longsize=%d;\n", (int)sizeof(long));
4180         printf("shortsize=%d;\n", (int)sizeof(short));
4181         exit(0);
4182 }
4183 EOCP
4184         set intsize
4185         if eval $compile_ok && ./intsize > /dev/null; then
4186                 eval `./intsize`
4187                 echo "Your integers are $intsize bytes long."
4188                 echo "Your long integers are $longsize bytes long."
4189                 echo "Your short integers are $shortsize bytes long."
4190         else
4191                 $cat >&4 <<EOM
4192 !
4193 Help! I can't compile and run the intsize test program: please enlighten me!
4194 (This is probably a misconfiguration in your system or libraries, and
4195 you really ought to fix it.  Still, I'll try anyway.)
4196 !
4197 EOM
4198                 dflt=4
4199                 rp="What is the size of an integer (in bytes)?"
4200                 . ./myread
4201                 intsize="$ans"
4202                 dflt=$intsize
4203                 rp="What is the size of a long integer (in bytes)?"
4204                 . ./myread
4205                 longsize="$ans"
4206                 dflt=2
4207                 rp="What is the size of a short integer (in bytes)?"
4208                 . ./myread
4209                 shortsize="$ans"
4210         fi
4211         ;;
4212 esac
4213 $rm -f intsize intsize.*
4214
4215 : see what type lseek is declared as in the kernel
4216 rp="What is the type used for lseek's offset on this system?"
4217 set off_t lseektype long stdio.h sys/types.h
4218 eval $typedef_ask
4219
4220 echo " "
4221 echo "Checking to see how big your file offsets are..." >&4
4222 $cat >try.c <<EOCP
4223 #include <sys/types.h>
4224 #include <stdio.h>
4225 int main()
4226 {
4227     printf("%d\n", (int)sizeof($lseektype));
4228     return(0); 
4229 }
4230 EOCP
4231 set try
4232 if eval $compile_ok; then
4233         lseeksize=`./try`
4234         echo "Your file offsets are $lseeksize bytes long."
4235 else
4236         dflt=$longsize
4237         echo " "
4238         echo "(I can't seem to compile the test program.  Guessing...)"
4239         rp="What is the size of your file offsets (in bytes)?"
4240         . ./myread
4241         lseeksize="$ans"
4242 fi
4243 $rm -f try.c try
4244
4245 : see what type file positions are declared as in the library
4246 rp="What is the type for file position used by fsetpos()?"
4247 set fpos_t fpostype long stdio.h sys/types.h
4248 eval $typedef_ask
4249
4250 echo " "
4251 case "$fpostype" in
4252 *_t) zzz="$fpostype"    ;;
4253 *)   zzz="fpos_t"       ;;
4254 esac
4255 echo "Checking the size of $zzz..." >&4 
4256 cat > try.c <<EOCP
4257 #include <sys/types.h>
4258 #include <stdio.h>
4259 int main() {
4260     printf("%d\n", (int)sizeof($fpostype));
4261     exit(0);
4262 }
4263 EOCP
4264 set try
4265 if eval $compile_ok; then
4266         yyy=`./try`
4267         case "$yyy" in
4268         '')     fpossize=4
4269                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4270                 ;;
4271         *)      fpossize=$yyy
4272                 echo "Your $zzz is $fpossize bytes long."
4273                 ;;
4274         esac
4275 else
4276         dflt="$longsize"
4277         echo " " >&4
4278         echo "(I can't compile the test program.  Guessing...)" >&4
4279         rp="What is the size of your file positions (in bytes)?"
4280         . ./myread
4281         fpossize="$ans"
4282 fi
4283
4284
4285
4286 # Backward compatibility (uselfs is deprecated).
4287 case "$uselfs" in
4288 "$define"|true|[yY]*)
4289         cat <<EOM >&4
4290
4291 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
4292 EOM
4293         uselargefiles="$define"
4294         ;;
4295 esac                          
4296
4297 case "$lseeksize:$fpossize" in
4298 8:8) cat <<EOM
4299
4300 You can have files larger than 2 gigabytes.
4301 EOM
4302    val="$define" ;;
4303 *)    case "$uselargefiles" in
4304    "$undef"|false|[nN]*) dflt='n' ;;
4305    *)   dflt='y' ;;
4306    esac
4307    cat <<EOM
4308
4309 Perl can be built to understand large files (files larger than 2 gigabytes)
4310 on some systems.  To do so, Configure can be run with -Duselargefiles.
4311
4312 If this doesn't make any sense to you, just accept the default '$dflt'.
4313 EOM
4314    rp='Try to understand large files, if available?'
4315    . ./myread
4316    case "$ans" in
4317    y|Y)         val="$define" ;;
4318    *)           val="$undef"  ;;
4319    esac
4320    ;;
4321 esac
4322 set uselargefiles
4323 eval $setvar
4324 case "$uselargefiles" in
4325 "$define")
4326 : Look for a hint-file generated 'call-back-unit'.  If the
4327 : user has specified that a large files perl is to be built,
4328 : we may need to set or change some other defaults.
4329         if $test -f uselargefiles.cbu; then
4330                 echo "Your platform has some specific hints for large file builds, using them..."
4331                 . ./uselargefiles.cbu
4332                 echo " "
4333                 echo "Rechecking to see how big your file offsets are..." >&4
4334                 $cat >try.c <<EOCP
4335 #include <sys/types.h>
4336 #include <stdio.h>
4337 int main()
4338 {
4339     printf("%d\n", (int)sizeof($lseektype));
4340     return(0); 
4341 }
4342 EOCP
4343                 set try
4344                 if eval $compile_ok; then
4345                         lseeksize=`./try`
4346                         $echo "Your file offsets are now $lseeksize bytes long."
4347                 else
4348                         dflt="$lseeksize"
4349                         echo " "
4350                         echo "(I can't seem to compile the test program.  Guessing...)"
4351                         rp="What is the size of your file offsets (in bytes)?"
4352                         . ./myread
4353                         lseeksize="$ans"
4354                 fi
4355                 case "$fpostype" in
4356                 *_t) zzz="$fpostype"    ;;
4357                 *)   zzz="fpos_t"       ;;
4358                 esac
4359                 $echo $n "Rechecking the size of $zzz...$c" >&4 
4360                 $cat > try.c <<EOCP
4361 #include <sys/types.h>
4362 #include <stdio.h>
4363 int main() {
4364     printf("%d\n", (int)sizeof($fpostype));
4365     exit(0);
4366 }
4367 EOCP
4368                 set try
4369                 if eval $compile_ok; then
4370                         yyy=`./try`
4371                         dflt="$lseeksize"
4372                         case "$yyy" in
4373                         '')     echo " "
4374                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4375                                 ;;
4376                         *)      fpossize=$yyy
4377                                 echo " $fpossize bytes." >&4
4378                                 ;;
4379                         esac
4380                 else
4381                         dflt="$fpossize"
4382                         echo " "
4383                         echo "(I can't compile the test program.  Guessing...)" >&4
4384                         rp="What is the size of your file positions (in bytes)?"
4385                         . ./myread
4386                         fpossize="$ans"
4387                 fi
4388                 $rm -f try.c try
4389         fi
4390         ;;
4391 esac
4392
4393
4394 case "$usemorebits" in
4395 "$define"|true|[yY]*)
4396         use64bitint="$define"
4397         uselongdouble="$define"
4398         usemorebits="$define"
4399         ;;
4400 *)      usemorebits="$undef"
4401         ;;
4402 esac
4403
4404
4405 case "$uselonglong" in
4406 "$define"|true|[yY]*)
4407         cat <<EOM >&4
4408
4409 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
4410 EOM
4411         use64bitint="$define"
4412         ;;
4413 esac                          
4414 case "$use64bits" in
4415 "$define"|true|[yY]*)
4416         cat <<EOM >&4
4417
4418 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
4419 EOM
4420         use64bitint="$define"
4421         ;;
4422 esac                          
4423 case "$use64bitints" in
4424 "$define"|true|[yY]*)
4425         cat <<EOM >&4
4426
4427 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
4428 EOM
4429         use64bitint="$define"
4430         ;;
4431 esac                          
4432 case "$use64bitsint" in
4433 "$define"|true|[yY]*)
4434         cat <<EOM >&4
4435
4436 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
4437 EOM
4438         use64bitint="$define"
4439         ;;
4440 esac                          
4441 case "$uselonglongs" in
4442 "$define"|true|[yY]*)
4443         cat <<EOM >&4
4444
4445 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
4446 EOM
4447         use64bitint="$define"
4448         ;;
4449 esac                          
4450 case "$use64bitsall" in
4451 "$define"|true|[yY]*)
4452         cat <<EOM >&4
4453
4454 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
4455 EOM
4456         use64bitall="$define"
4457         ;;
4458 esac                          
4459
4460 case "$ccflags" in
4461 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
4462 esac
4463 case "$use64bitall" in
4464 "$define"|true|[yY]*) use64bitint="$define" ;;
4465 esac
4466
4467 case "$longsize" in
4468 8) cat <<EOM
4469
4470 You have natively 64-bit long integers.
4471 EOM
4472    val="$define"
4473    ;;
4474 *) case "$use64bitint" in
4475    "$define"|true|[yY]*) dflt='y';;
4476    *) dflt='n';;
4477    esac
4478    cat <<EOM
4479
4480 Perl can be built to take advantage of 64-bit integer types
4481 on some systems.  To do so, Configure can be run with -Duse64bitint.
4482 Choosing this option will most probably introduce binary incompatibilities.
4483
4484 If this doesn't make any sense to you, just accept the default '$dflt'.
4485 EOM
4486    rp='Try to use 64-bit integers, if available?'
4487    . ./myread
4488    case "$ans" in
4489    [yY]*) val="$define" ;;
4490    *)     val="$undef"  ;;
4491    esac
4492    ;;
4493 esac
4494 set use64bitint
4495 eval $setvar
4496
4497 case "$use64bitall" in
4498 "$define"|true|[yY]*) dflt='y' ;;
4499 *) case "$longsize" in
4500    8) dflt='y' ;;
4501    *) dflt='n' ;;
4502    esac
4503    ;;
4504 esac    
4505 cat <<EOM
4506
4507 You may also choose to try maximal 64-bitness.  It means using as much
4508 64-bitness as possible on the platform.  This in turn means even more
4509 binary incompatibilities.  On the other hand, your platform may not
4510 have any more 64-bitness available than what you already have chosen.
4511
4512 If this doesn't make any sense to you, just accept the default '$dflt'.
4513 EOM
4514 rp='Try to use maximal 64-bit support, if available?'
4515 . ./myread
4516 case "$ans" in
4517 [yY]*) val="$define" ;;
4518 *)     val="$undef"  ;;
4519 esac
4520 set use64bitall
4521 eval $setvar
4522 case "$use64bitall" in
4523 "$define")
4524         case "$use64bitint" in
4525         "$undef")
4526                 cat <<EOM
4527
4528 Since you have chosen a maximally 64-bit build, I'm also turning on
4529 the use of 64-bit integers.
4530 EOM
4531                 use64bitint="$define" ;;
4532         esac
4533         ;;
4534 esac
4535
4536 case "$use64bitint" in
4537 "$define"|true|[yY]*)
4538 : Look for a hint-file generated 'call-back-unit'.  If the
4539 : user has specified that a 64-bit perl is to be built,
4540 : we may need to set or change some other defaults.
4541         if $test -f use64bitint.cbu; then
4542                 echo "Your platform has some specific hints for 64-bit integers, using them..."
4543                 . ./use64bitint.cbu
4544         fi
4545         case "$longsize" in
4546         4) case "$archname64" in
4547            '') archname64=64int ;;
4548            esac
4549            ;;
4550         esac
4551         ;;
4552 esac
4553
4554 case "$use64bitall" in
4555 "$define"|true|[yY]*)
4556 : Look for a hint-file generated 'call-back-unit'.  If the
4557 : user has specified that a maximally 64-bit perl is to be built,
4558 : we may need to set or change some other defaults.
4559         if $test -f use64bitall.cbu; then
4560                 echo "Your platform has some specific hints for 64-bit builds, using them..."
4561                 . ./use64bitall.cbu
4562         fi
4563         case "$longsize" in
4564         4) case "$archname64" in
4565            ''|64int) archname64=64all ;;
4566            esac
4567            ;;
4568         esac
4569         ;;
4570 esac
4571
4572 echo " "
4573 echo "Checking for GNU C Library..." >&4
4574 cat >gnulibc.c <<EOM
4575 #include <stdio.h>
4576 int main()
4577 {
4578 #ifdef __GLIBC__
4579     exit(0);
4580 #else
4581     exit(1);
4582 #endif
4583 }
4584 EOM
4585 set gnulibc
4586 if eval $compile_ok && ./gnulibc; then
4587         val="$define"
4588         echo "You are using the GNU C Library"
4589 else
4590         val="$undef"
4591         echo "You are not using the GNU C Library"
4592 fi
4593 $rm -f gnulibc*
4594 set d_gnulibc
4595 eval $setvar
4596
4597 : see if nm is to be used to determine whether a symbol is defined or not
4598 case "$usenm" in
4599 '')
4600         dflt=''
4601         case "$d_gnulibc" in
4602         "$define")
4603                 echo " "
4604                 echo "nm probably won't work on the GNU C Library." >&4
4605                 dflt=n
4606                 ;;
4607         esac
4608         case "$dflt" in
4609         '') 
4610                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4611                         echo " "
4612                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4613                         echo "'nm' won't be sufficient on this sytem." >&4
4614                         dflt=n
4615                 fi
4616                 ;;
4617         esac
4618         case "$dflt" in
4619         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4620                 if $test $dflt -gt 20; then
4621                         dflt=y
4622                 else
4623                         dflt=n
4624                 fi
4625                 ;;
4626         esac
4627         ;;
4628 *)
4629         case "$usenm" in
4630         true|$define) dflt=y;;
4631         *) dflt=n;;
4632         esac
4633         ;;
4634 esac
4635 $cat <<EOM
4636
4637 I can use $nm to extract the symbols from your C libraries. This
4638 is a time consuming task which may generate huge output on the disk (up
4639 to 3 megabytes) but that should make the symbols extraction faster. The
4640 alternative is to skip the 'nm' extraction part and to compile a small
4641 test program instead to determine whether each symbol is present. If
4642 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4643 this may be the best solution.
4644
4645 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4646
4647 EOM
4648 rp="Shall I use $nm to extract C symbols from the libraries?"
4649 . ./myread
4650 case "$ans" in
4651 [Nn]*) usenm=false;;
4652 *) usenm=true;;
4653 esac
4654
4655 runnm=$usenm
4656 case "$reuseval" in
4657 true) runnm=false;;
4658 esac
4659
4660 : nm options which may be necessary
4661 case "$nm_opt" in
4662 '') if $test -f /mach_boot; then
4663                 nm_opt=''       # Mach
4664         elif $test -d /usr/ccs/lib; then
4665                 nm_opt='-p'     # Solaris (and SunOS?)
4666         elif $test -f /dgux; then
4667                 nm_opt='-p'     # DG-UX
4668         elif $test -f /lib64/rld; then
4669                 nm_opt='-p'     # 64-bit Irix
4670         else
4671                 nm_opt=''
4672         fi;;
4673 esac
4674
4675 : nm options which may be necessary for shared libraries but illegal
4676 : for archive libraries.  Thank you, Linux.
4677 case "$nm_so_opt" in
4678 '')     case "$myuname" in
4679         *linux*)
4680                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4681                         nm_so_opt='--dynamic'
4682                 fi
4683                 ;;
4684         esac
4685         ;;
4686 esac
4687
4688 case "$runnm" in
4689 true)
4690 : get list of predefined functions in a handy place
4691 echo " "
4692 case "$libc" in
4693 '') libc=unknown
4694         case "$libs" in
4695         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4696         esac
4697         ;;
4698 esac
4699 libnames='';
4700 case "$libs" in
4701 '') ;;
4702 *)  for thislib in $libs; do
4703         case "$thislib" in
4704         -lc|-lc_s)
4705                 : Handle C library specially below.
4706                 ;;
4707         -l*)
4708                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4709                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4710                         :
4711                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4712                         :
4713                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4714                         :
4715                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4716                         :
4717                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4718                         :
4719                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4720                         :
4721                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4722                         :
4723                 else
4724                         try=''
4725                 fi
4726                 libnames="$libnames $try"
4727                 ;;
4728         *) libnames="$libnames $thislib" ;;
4729         esac
4730         done
4731         ;;
4732 esac
4733 xxx=normal
4734 case "$libc" in
4735 unknown)
4736         set /lib/libc.$so
4737         for xxx in $libpth; do
4738                 $test -r $1 || set $xxx/libc.$so
4739                 : The messy sed command sorts on library version numbers.
4740                 $test -r $1 || \
4741                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4742                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4743                                 h
4744                                 s/[0-9][0-9]*/0000&/g
4745                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4746                                 G
4747                                 s/\n/ /' | \
4748                          $sort | $sed -e 's/^.* //'`
4749                 eval set \$$#
4750         done
4751         $test -r $1 || set /usr/ccs/lib/libc.$so
4752         $test -r $1 || set /lib/libsys_s$_a
4753         ;;
4754 *)
4755         set blurfl
4756         ;;
4757 esac
4758 if $test -r "$1"; then
4759         echo "Your (shared) C library seems to be in $1."
4760         libc="$1"
4761 elif $test -r /lib/libc && $test -r /lib/clib; then
4762         echo "Your C library seems to be in both /lib/clib and /lib/libc."
4763         xxx=apollo
4764         libc='/lib/clib /lib/libc'
4765         if $test -r /lib/syslib; then
4766                 echo "(Your math library is in /lib/syslib.)"
4767                 libc="$libc /lib/syslib"
4768         fi
4769 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4770         echo "Your C library seems to be in $libc, as you said before."
4771 elif $test -r $incpath/usr/lib/libc$_a; then
4772         libc=$incpath/usr/lib/libc$_a;
4773         echo "Your C library seems to be in $libc.  That's fine."
4774 elif $test -r /lib/libc$_a; then
4775         libc=/lib/libc$_a;
4776         echo "Your C library seems to be in $libc.  You're normal."
4777 else
4778         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
4779                 :
4780         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4781                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4782         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4783                 :
4784         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4785                 :
4786         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4787                 :
4788         else
4789                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4790         fi
4791         if $test -r "$tans"; then
4792                 echo "Your C library seems to be in $tans, of all places."
4793                 libc=$tans
4794         else
4795                 libc='blurfl'
4796         fi
4797 fi
4798 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4799         dflt="$libc"
4800         cat <<EOM
4801
4802 If the guess above is wrong (which it might be if you're using a strange
4803 compiler, or your machine supports multiple models), you can override it here.
4804
4805 EOM
4806 else
4807         dflt=''
4808         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
4809         cat >&4 <<EOM
4810 I can't seem to find your C library.  I've looked in the following places:
4811
4812 EOM
4813         $sed 's/^/      /' libpath
4814         cat <<EOM
4815
4816 None of these seems to contain your C library. I need to get its name...
4817
4818 EOM
4819 fi
4820 fn=f
4821 rp='Where is your C library?'
4822 . ./getfile
4823 libc="$ans"
4824
4825 echo " "
4826 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
4827 set X `cat libnames`
4828 shift
4829 xxx=files
4830 case $# in 1) xxx=file; esac
4831 echo "Extracting names from the following $xxx for later perusal:" >&4
4832 echo " "
4833 $sed 's/^/      /' libnames >&4
4834 echo " "
4835 $echo $n "This may take a while...$c" >&4
4836
4837 for file in $*; do
4838         case $file in
4839         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
4840         *) $nm $nm_opt $file 2>/dev/null;;
4841         esac
4842 done >libc.tmp
4843
4844 $echo $n ".$c"
4845 $grep fprintf libc.tmp > libc.ptf
4846 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
4847 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
4848 xxx='[ADTSIW]'
4849 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
4850         eval $xscan;\
4851         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4852                 eval $xrun
4853 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
4854         eval $xscan;\
4855         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4856                 eval $xrun
4857 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
4858         eval $xscan;\
4859         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4860                 eval $xrun
4861 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
4862         eval $xscan;\
4863         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4864                 eval $xrun
4865 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
4866         eval $xscan;\
4867         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4868                 eval $xrun
4869 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
4870         eval $xscan;\
4871         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4872                 eval $xrun
4873 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
4874                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
4875         eval $xscan;\
4876         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4877                 eval $xrun
4878 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
4879         eval $xscan;\
4880         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4881                 eval $xrun
4882 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
4883         eval $xscan;\
4884         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4885                 eval $xrun
4886 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
4887         eval $xscan;\
4888         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4889                 eval $xrun
4890 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
4891         eval $xscan;\
4892         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4893                 eval $xrun
4894 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
4895         eval $xscan;\
4896         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4897                 eval $xrun
4898 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
4899         eval $xscan;\
4900         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4901                 eval $xrun
4902 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
4903         eval $xscan;\
4904         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4905                 eval $xrun
4906 else
4907         $nm -p $* 2>/dev/null >libc.tmp
4908         $grep fprintf libc.tmp > libc.ptf
4909         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
4910                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
4911         then
4912                 nm_opt='-p'
4913                 eval $xrun
4914         else
4915                 echo " "
4916                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
4917                 com=''
4918                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
4919                         for thisname in $libnames $libc; do
4920                                 $ar t $thisname >>libc.tmp
4921                         done
4922                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
4923                         echo "Ok." >&4
4924                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
4925                         # Repeat libc to extract forwarders to DLL entries too
4926                         for thisname in $libnames $libc; do
4927                                 $ar tv $thisname >>libc.tmp
4928                                 # Revision 50 of EMX has bug in $ar.
4929                                 # it will not extract forwarders to DLL entries
4930                                 # Use emximp which will extract exactly them.
4931                                 emximp -o tmp.imp $thisname \
4932                                     2>/dev/null && \
4933                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
4934                                     < tmp.imp >>libc.tmp
4935                                 $rm tmp.imp
4936                         done
4937                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
4938                         echo "Ok." >&4
4939                 else
4940                         echo "$ar didn't seem to work right." >&4
4941                         echo "Maybe this is a Cray...trying bld instead..." >&4
4942                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
4943                         then
4944                                 for thisname in $libnames; do
4945                                         bld t $libnames | \
4946                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
4947                                         $ar t $thisname >>libc.tmp
4948                                 done
4949                                 echo "Ok." >&4
4950                         else
4951                                 echo "That didn't work either.  Giving up." >&4
4952                                 exit 1
4953                         fi
4954                 fi
4955         fi
4956 fi
4957 nm_extract="$com"
4958 if $test -f /lib/syscalls.exp; then
4959         echo " "
4960         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
4961         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
4962 fi
4963 ;;
4964 esac
4965 $rm -f libnames libpath
4966
4967 : is a C symbol defined?
4968 csym='tlook=$1;
4969 case "$3" in
4970 -v) tf=libc.tmp; tc=""; tdc="";;
4971 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
4972 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
4973 esac;
4974 tx=yes;
4975 case "$reuseval-$4" in
4976 true-) ;;
4977 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
4978 esac;
4979 case "$tx" in
4980 yes)
4981         case "$runnm" in
4982         true)
4983                 if $contains $tlook $tf >/dev/null 2>&1;
4984                 then tval=true;
4985                 else tval=false;
4986                 fi;;
4987         *)
4988                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
4989                 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
4990                 then tval=true;
4991                 else tval=false;
4992                 fi;
4993                 $rm -f t t.c;;
4994         esac;;
4995 *)
4996         case "$tval" in
4997         $define) tval=true;;
4998         *) tval=false;;
4999         esac;;
5000 esac;
5001 eval "$2=$tval"'
5002
5003 : define an is-in-libc? function
5004 inlibc='echo " "; td=$define; tu=$undef;
5005 sym=$1; var=$2; eval "was=\$$2";
5006 tx=yes;
5007 case "$reuseval$was" in
5008 true) ;;
5009 true*) tx=no;;
5010 esac;
5011 case "$tx" in
5012 yes)
5013         set $sym tres -f;
5014         eval $csym;
5015         case "$tres" in
5016         true)
5017                 echo "$sym() found." >&4;
5018                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5019         *)
5020                 echo "$sym() NOT found." >&4;
5021                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5022         esac;;
5023 *)
5024         case "$was" in
5025         $define) echo "$sym() found." >&4;;
5026         *) echo "$sym() NOT found." >&4;;
5027         esac;;
5028 esac'
5029
5030 : see if sqrtl exists
5031 set sqrtl d_sqrtl
5032 eval $inlibc
5033
5034 case "$ccflags" in
5035 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
5036 esac
5037
5038 case "$uselongdouble" in
5039 $define|true|[yY]*)     dflt='y';;
5040 *) dflt='n';;
5041 esac
5042 cat <<EOM
5043
5044 Perl can be built to take advantage of long doubles which
5045 (if available) may give more accuracy and range for floating point numbers.
5046
5047 If this doesn't make any sense to you, just accept the default '$dflt'.
5048 EOM
5049 rp='Try to use long doubles if available?'
5050 . ./myread
5051 case "$ans" in
5052 y|Y)    val="$define"   ;;
5053 *)      val="$undef"    ;;
5054 esac
5055 set uselongdouble
5056 eval $setvar
5057
5058 case "$uselongdouble" in
5059 true|[yY]*) uselongdouble="$define" ;;
5060 esac
5061
5062 case "$uselongdouble" in
5063 $define)
5064 : Look for a hint-file generated 'call-back-unit'.  If the
5065 : user has specified that long doubles should be used,
5066 : we may need to set or change some other defaults.
5067         if $test -f uselongdouble.cbu; then
5068                 echo "Your platform has some specific hints for long doubles, using them..."
5069                 . ./uselongdouble.cbu
5070         else
5071                 $cat <<EOM
5072 (Your platform doesn't have any specific hints for long doubles.)
5073 EOM
5074         fi
5075         ;;
5076 esac
5077
5078 case "$uselongdouble:$d_sqrtl" in
5079 $define:$undef)
5080                 $cat <<EOM >&4
5081
5082 *** You requested the use of long doubles but you do not seem to have
5083 *** the mathematic functions for long doubles.  I'm disabling the use
5084 *** of long doubles.
5085
5086 EOM
5087         uselongdouble=$undef
5088         ;;
5089 esac
5090
5091 : check for length of double
5092 echo " "
5093 case "$doublesize" in
5094 '')
5095         echo "Checking to see how big your double precision numbers are..." >&4
5096         $cat >try.c <<'EOCP'
5097 #include <stdio.h>
5098 int main()
5099 {
5100     printf("%d\n", (int)sizeof(double));
5101     exit(0);
5102 }
5103 EOCP
5104         set try
5105         if eval $compile_ok; then
5106                 doublesize=`./try`
5107                 echo "Your double is $doublesize bytes long."
5108         else
5109                 dflt='8'
5110                 echo "(I can't seem to compile the test program.  Guessing...)"
5111                 rp="What is the size of a double precision number (in bytes)?"
5112                 . ./myread
5113                 doublesize="$ans"
5114         fi
5115         ;;
5116 esac
5117 $rm -f try.c try
5118
5119 : check for long doubles
5120 echo " "
5121 echo "Checking to see if you have long double..." >&4
5122 echo 'int main() { long double x = 7.0; }' > try.c
5123 set try
5124 if eval $compile; then
5125         val="$define"
5126         echo "You have long double."
5127 else
5128         val="$undef"
5129         echo "You do not have long double."
5130 fi
5131 $rm try.*
5132 set d_longdbl
5133 eval $setvar
5134
5135 : check for length of long double
5136 case "${d_longdbl}${longdblsize}" in
5137 $define)
5138         echo " "
5139         echo "Checking to see how big your long doubles are..." >&4
5140         $cat >try.c <<'EOCP'
5141 #include <stdio.h>
5142 int main()
5143 {
5144         printf("%d\n", sizeof(long double));
5145 }
5146 EOCP
5147         set try
5148         set try
5149         if eval $compile; then
5150                 longdblsize=`./try$exe_ext`
5151                 echo "Your long doubles are $longdblsize bytes long."
5152         else
5153                 dflt='8'
5154                 echo " "
5155                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
5156                 rp="What is the size of a long double (in bytes)?"
5157                 . ./myread
5158                 longdblsize="$ans"
5159         fi
5160         if $test "X$doublesize" = "X$longdblsize"; then
5161                 echo "(That isn't any different from an ordinary double.)"
5162         fi      
5163         ;;
5164 esac
5165 $rm -f try.* try
5166
5167 : determine the architecture name
5168 echo " "
5169 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
5170         tarch=`arch`"-$osname"
5171 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
5172         if uname -m > tmparch 2>&1 ; then
5173                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
5174                         -e 's/$/'"-$osname/" tmparch`
5175         else
5176                 tarch="$osname"
5177         fi
5178         $rm -f tmparch
5179 else
5180         tarch="$osname"
5181 fi
5182 case "$myarchname" in
5183 ''|"$tarch") ;;
5184 *)
5185         echo "(Your architecture name used to be $myarchname.)"
5186         archname=''
5187         ;;
5188 esac
5189 myarchname="$tarch"
5190 case "$archname" in
5191 '') dflt="$tarch";;
5192 *) dflt="$archname";;
5193 esac
5194 rp='What is your architecture name'
5195 . ./myread
5196 archname="$ans"
5197 case "$usethreads" in
5198 $define)
5199         echo "Threads selected." >&4
5200         case "$archname" in
5201         *-thread*) echo "...and architecture name already has -thread." >&4
5202                 ;;
5203         *)      archname="$archname-thread"
5204                 echo "...setting architecture name to $archname." >&4
5205                 ;;
5206         esac
5207         ;;
5208 esac
5209 case "$usemultiplicity" in
5210 $define)
5211         echo "Multiplicity selected." >&4
5212         case "$archname" in
5213         *-multi*) echo "...and architecture name already has -multi." >&4
5214                 ;;
5215         *)      archname="$archname-multi"
5216                 echo "...setting architecture name to $archname." >&4
5217                 ;;
5218         esac
5219         ;;
5220 esac
5221 case "$use64bitint$use64bitall" in
5222 *"$define"*)
5223         case "$archname64" in
5224         '')
5225                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
5226                 ;;
5227         *)
5228                 case "$use64bitint" in
5229                 "$define") echo "64 bit integers selected." >&4 ;;
5230                 esac
5231                 case "$use64bitall" in
5232                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
5233                 esac
5234                 case "$archname" in
5235                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
5236                         ;;
5237                 *)      archname="$archname-$archname64"
5238                         echo "...setting architecture name to $archname." >&4
5239                         ;;
5240                 esac
5241                 ;;
5242         esac
5243 esac
5244 case "$uselongdouble" in
5245 $define)
5246         echo "Long doubles selected." >&4
5247         case "$longdblsize" in
5248         $doublesize)
5249                 "...but long doubles are equal to doubles, not changing architecture name." >&4
5250                 ;;
5251         *)
5252                 case "$archname" in
5253                 *-ld*) echo "...and architecture name already has -ld." >&4
5254                         ;;
5255                 *)      archname="$archname-ld"
5256                         echo "...setting architecture name to $archname." >&4
5257                         ;;
5258                 esac
5259                 ;;
5260         esac
5261         ;;
5262 esac
5263
5264 : determine root of directory hierarchy where package will be installed.
5265 case "$prefix" in
5266 '')
5267         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
5268         ;;
5269 *)
5270         dflt="$prefix"
5271         ;;
5272 esac
5273 $cat <<EOM
5274
5275 By default, $package will be installed in $dflt/bin, manual pages
5276 under $dflt/man, etc..., i.e. with $dflt as prefix for all
5277 installation directories. Typically this is something like /usr/local.
5278 If you wish to have binaries under /usr/bin but other parts of the
5279 installation under /usr/local, that's ok: you will be prompted
5280 separately for each of the installation directories, the prefix being
5281 only used to set the defaults.
5282
5283 EOM
5284 fn=d~
5285 rp='Installation prefix to use?'
5286 . ./getfile
5287 oldprefix=''
5288 case "$prefix" in
5289 '') ;;
5290 *)
5291         case "$ans" in
5292         "$prefix") ;;
5293         *) oldprefix="$prefix";;
5294         esac
5295         ;;
5296 esac
5297 prefix="$ans"
5298 prefixexp="$ansexp"
5299
5300 : is AFS running?
5301 echo " "
5302 case "$afs" in
5303 $define|true)   afs=true ;;
5304 $undef|false)   afs=false ;;
5305 *)      if test -d /afs; then
5306                 afs=true
5307         else
5308                 afs=false
5309         fi
5310         ;;
5311 esac
5312 if $afs; then
5313         echo "AFS may be running... I'll be extra cautious then..." >&4
5314 else
5315         echo "AFS does not seem to be running..." >&4
5316 fi
5317
5318 : determine installation prefix for where package is to be installed.
5319 if $afs; then 
5320 $cat <<EOM
5321
5322 Since you are running AFS, I need to distinguish the directory in which
5323 files will reside from the directory in which they are installed (and from
5324 which they are presumably copied to the former directory by occult means).
5325
5326 EOM
5327         case "$installprefix" in
5328         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
5329         *) dflt="$installprefix";;
5330         esac
5331 else
5332 $cat <<EOM
5333
5334 In some special cases, particularly when building $package for distribution,
5335 it is convenient to distinguish between the directory in which files should 
5336 be installed from the directory ($prefix) in which they 
5337 will eventually reside.  For most users, these two directories are the same.
5338
5339 EOM
5340         case "$installprefix" in
5341         '') dflt=$prefix ;;
5342         *) dflt=$installprefix;;
5343         esac
5344 fi
5345 fn=d~
5346 rp='What installation prefix should I use for installing files?'
5347 . ./getfile
5348 installprefix="$ans"
5349 installprefixexp="$ansexp"
5350
5351 : set the prefixit variable, to compute a suitable default value
5352 prefixit='case "$3" in
5353 ""|none)
5354         case "$oldprefix" in
5355         "") eval "$1=\"\$$2\"";;
5356         *)
5357                 case "$3" in
5358                 "") eval "$1=";;
5359                 none)
5360                         eval "tp=\"\$$2\"";
5361                         case "$tp" in
5362                         ""|" ") eval "$1=\"\$$2\"";;
5363                         *) eval "$1=";;
5364                         esac;;
5365                 esac;;
5366         esac;;
5367 *)
5368         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
5369         case "$tp" in
5370         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
5371         /*-$oldprefix/*|\~*-$oldprefix/*)
5372                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
5373         *) eval "$1=\"\$$2\"";;
5374         esac;;
5375 esac'
5376
5377
5378 : get the patchlevel
5379 echo " "
5380 echo "Getting the current patchlevel..." >&4
5381 if $test -r $rsrc/patchlevel.h;then
5382         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
5383         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
5384         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
5385         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
5386         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
5387         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
5388 else
5389         revision=0
5390         patchlevel=0
5391         subversion=0
5392         api_revision=0
5393         api_version=0
5394         api_subversion=0
5395 fi
5396 $echo "(You have $package version $patchlevel subversion $subversion.)"
5397 case "$osname" in
5398 dos|vms)
5399         : XXX Should be a Configure test for double-dots in filenames.
5400         version=`echo $revision $patchlevel $subversion | \
5401                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
5402         api_versionstring=`echo $api_revision $api_version $api_subversion | \
5403                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
5404         ;;
5405 *)
5406         version=`echo $revision $patchlevel $subversion | \
5407                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
5408         api_versionstring=`echo $api_revision $api_version $api_subversion | \
5409                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
5410         ;;
5411 esac
5412 : Special case the 5.005_xx maintenance series, which used 5.005
5413 : without any subversion label as a subdirectory in $sitelib
5414 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
5415         api_versionstring='5.005'
5416 fi
5417
5418 : determine installation style
5419 : For now, try to deduce it from prefix unless it is already set.
5420 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
5421 case "$installstyle" in
5422 '')     case "$prefix" in
5423                 *perl*) dflt='lib';;
5424                 *) dflt='lib/perl5' ;;
5425         esac
5426         ;;
5427 *)      dflt="$installstyle" ;;
5428 esac
5429 : Probably not worth prompting for this since we prompt for all
5430 : the directories individually, and the prompt would be too long and
5431 : confusing anyway.
5432 installstyle=$dflt
5433
5434 : determine where private library files go
5435 : Usual default is /usr/local/lib/perl5/$version.
5436 : Also allow things like /opt/perl/lib/$version, since 
5437 : /opt/perl/lib/perl5... would be redundant.
5438 : The default "style" setting is made in installstyle.U
5439 case "$installstyle" in
5440 *lib/perl5*) set dflt privlib lib/$package/$version ;;
5441 *)       set dflt privlib lib/$version ;;
5442 esac
5443 eval $prefixit
5444 $cat <<EOM
5445
5446 There are some auxiliary files for $package that need to be put into a
5447 private library directory that is accessible by everyone.
5448
5449 EOM
5450 fn=d~+
5451 rp='Pathname where the private library files will reside?'
5452 . ./getfile
5453 privlib="$ans"
5454 privlibexp="$ansexp"
5455 : Change installation prefix, if necessary.
5456 if $test X"$prefix" != X"$installprefix"; then
5457         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
5458 else
5459         installprivlib="$privlibexp"
5460 fi
5461
5462 : set the prefixup variable, to restore leading tilda escape
5463 prefixup='case "$prefixexp" in
5464 "$prefix") ;;
5465 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
5466 esac'
5467
5468 : determine where public architecture dependent libraries go
5469 set archlib archlib
5470 eval $prefixit
5471 : privlib default is /usr/local/lib/$package/$version
5472 : archlib default is /usr/local/lib/$package/$version/$archname
5473 : privlib may have an optional trailing /share.
5474 tdflt=`echo $privlib | $sed 's,/share$,,'`
5475 tdflt=$tdflt/$archname
5476 case "$archlib" in
5477 '')     dflt=$tdflt
5478         ;;
5479 *)      dflt="$archlib"
5480     ;;
5481 esac
5482 $cat <<EOM
5483
5484 $spackage contains architecture-dependent library files.  If you are
5485 sharing libraries in a heterogeneous environment, you might store
5486 these files in a separate location.  Otherwise, you can just include
5487 them with the rest of the public library files.
5488
5489 EOM
5490 fn=d+~
5491 rp='Where do you want to put the public architecture-dependent libraries?'
5492 . ./getfile
5493 archlib="$ans"
5494 archlibexp="$ansexp"
5495 if $test X"$archlib" = X"$privlib"; then
5496         d_archlib="$undef"
5497 else
5498         d_archlib="$define"
5499 fi
5500 : Change installation prefix, if necessary.
5501 if $test X"$prefix" != X"$installprefix"; then
5502         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
5503 else
5504         installarchlib="$archlibexp"
5505 fi
5506
5507
5508 : Binary compatibility with 5.005 is not possible for builds
5509 : with advanced features
5510 case "$usethreads$usemultiplicity" in
5511 *define*)
5512         bincompat5005="$undef"
5513         d_bincompat5005="$undef"
5514         ;;
5515 *)      $cat <<EOM
5516
5517 This version of Perl can be compiled for binary compatibility with 5.005.
5518 If you decide to do so, you will be able to continue using most of the
5519 extensions that were compiled for Perl 5.005.
5520
5521 EOM
5522         case "$bincompat5005$d_bincompat5005" in
5523         *"$undef"*) dflt=n ;;
5524         *) dflt=y ;;
5525         esac
5526         rp='Binary compatibility with Perl 5.005?'
5527         . ./myread
5528         case "$ans" in
5529         y*) val="$define" ;;
5530         *)  val="$undef" ;;
5531         esac
5532         set d_bincompat5005
5533         eval $setvar
5534         case "$d_bincompat5005" in
5535         "$define")
5536                 bincompat5005="$define"
5537                 ;;
5538         *)      bincompat5005="$undef"
5539                 d_bincompat5005="$undef"
5540                 ;;
5541         esac
5542         ;;
5543 esac
5544
5545
5546 : see if setuid scripts can be secure
5547 $cat <<EOM
5548
5549 Some kernels have a bug that prevents setuid #! scripts from being
5550 secure.  Some sites have disabled setuid #! scripts because of this.
5551
5552 First let's decide if your kernel supports secure setuid #! scripts.
5553 (If setuid #! scripts would be secure but have been disabled anyway,
5554 don't say that they are secure if asked.)
5555
5556 EOM
5557
5558 val="$undef"
5559 if $test -d /dev/fd; then
5560         echo "#!$ls" >reflect
5561         chmod +x,u+s reflect
5562         ./reflect >flect 2>&1
5563         if $contains "/dev/fd" flect >/dev/null; then
5564                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
5565                 val="$define"
5566         else
5567                 $cat <<EOM
5568 If you are not sure if they are secure, I can check but I'll need a
5569 username and password different from the one you are using right now.
5570 If you don't have such a username or don't want me to test, simply
5571 enter 'none'.
5572
5573 EOM
5574                 rp='Other username to test security of setuid scripts with?'
5575                 dflt='none'
5576                 . ./myread
5577                 case "$ans" in
5578                 n|none)
5579                         case "$d_suidsafe" in
5580                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
5581                                 dflt=n;;
5582                         "$undef")
5583                                 echo "Well, the $hint value is *not* secure." >&4
5584                                 dflt=n;;
5585                         *)      echo "Well, the $hint value *is* secure." >&4
5586                                 dflt=y;;
5587                         esac
5588                         ;;
5589                 *)
5590                         $rm -f reflect flect
5591                         echo "#!$ls" >reflect
5592                         chmod +x,u+s reflect
5593                         echo >flect
5594                         chmod a+w flect
5595                         echo '"su" will (probably) prompt you for '"$ans's password."
5596                         su $ans -c './reflect >flect'
5597                         if $contains "/dev/fd" flect >/dev/null; then
5598                                 echo "Okay, it looks like setuid scripts are secure." >&4
5599                                 dflt=y
5600                         else
5601                                 echo "I don't think setuid scripts are secure." >&4
5602                                 dflt=n
5603                         fi
5604                         ;;
5605                 esac
5606                 rp='Does your kernel have *secure* setuid scripts?'
5607                 . ./myread
5608                 case "$ans" in
5609                 [yY]*)  val="$define";;
5610                 *)      val="$undef";;
5611                 esac
5612         fi
5613 else
5614         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
5615         echo "(That's for file descriptors, not floppy disks.)"
5616         val="$undef"
5617 fi
5618 set d_suidsafe
5619 eval $setvar
5620
5621 $rm -f reflect flect
5622
5623 : now see if they want to do setuid emulation
5624 echo " "
5625 val="$undef"
5626 case "$d_suidsafe" in
5627 "$define")
5628         val="$undef"
5629         echo "No need to emulate SUID scripts since they are secure here." >& 4
5630         ;;
5631 *)
5632         $cat <<EOM
5633 Some systems have disabled setuid scripts, especially systems where
5634 setuid scripts cannot be secure.  On systems where setuid scripts have
5635 been disabled, the setuid/setgid bits on scripts are currently
5636 useless.  It is possible for $package to detect those bits and emulate
5637 setuid/setgid in a secure fashion.  This emulation will only work if
5638 setuid scripts have been disabled in your kernel.
5639
5640 EOM
5641         case "$d_dosuid" in
5642         "$define") dflt=y ;;
5643         *) dflt=n ;;
5644         esac
5645         rp="Do you want to do setuid/setgid emulation?"
5646         . ./myread
5647         case "$ans" in
5648         [yY]*)  val="$define";;
5649         *)      val="$undef";;
5650         esac
5651         ;;
5652 esac
5653 set d_dosuid
5654 eval $setvar
5655
5656 : determine filename position in cpp output
5657 echo " "
5658 echo "Computing filename position in cpp output for #include directives..." >&4
5659 echo '#include <stdio.h>' > foo.c
5660 $cat >fieldn <<EOF
5661 $startsh
5662 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
5663 $grep '^[       ]*#.*stdio\.h' | \
5664 while read cline; do
5665         pos=1
5666         set \$cline
5667         while $test \$# -gt 0; do
5668                 if $test -r \`echo \$1 | $tr -d '"'\`; then
5669                         echo "\$pos"
5670                         exit 0
5671                 fi
5672                 shift
5673                 pos=\`expr \$pos + 1\`
5674         done
5675 done
5676 EOF
5677 chmod +x fieldn
5678 fieldn=`./fieldn`
5679 $rm -f foo.c fieldn
5680 case $fieldn in
5681 '') pos='???';;
5682 1) pos=first;;
5683 2) pos=second;;
5684 3) pos=third;;
5685 *) pos="${fieldn}th";;
5686 esac
5687 echo "Your cpp writes the filename in the $pos field of the line."
5688
5689 : locate header file
5690 $cat >findhdr <<EOF
5691 $startsh
5692 wanted=\$1
5693 name=''
5694 for usrincdir in $usrinc
5695 do
5696         if test -f \$usrincdir/\$wanted; then
5697                 echo "\$usrincdir/\$wanted"
5698                 exit 0
5699         fi
5700 done
5701 awkprg='{ print \$$fieldn }'
5702 echo "#include <\$wanted>" > foo\$\$.c
5703 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
5704 $grep "^[       ]*#.*\$wanted" | \
5705 while read cline; do
5706         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
5707         case "\$name" in
5708         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
5709         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
5710         *) exit 2;;
5711         esac;
5712 done;
5713 #
5714 # status = 0: grep returned 0 lines, case statement not executed
5715 # status = 1: headerfile found
5716 # status = 2: while loop executed, no headerfile found
5717 #
5718 status=\$?
5719 $rm -f foo\$\$.c;
5720 if test \$status -eq 1; then
5721         exit 0;
5722 fi
5723 exit 1
5724 EOF
5725 chmod +x findhdr
5726
5727 : define an alternate in-header-list? function
5728 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
5729 cont=true; xxf="echo \"<\$1> found.\" >&4";
5730 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
5731 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
5732 esac;
5733 case $# in 4) instead=instead;; *) instead="at last";; esac;
5734 while $test "$cont"; do
5735         xxx=`./findhdr $1`
5736         var=$2; eval "was=\$$2";
5737         if $test "$xxx" && $test -r "$xxx";
5738         then eval $xxf;
5739         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5740                 cont="";
5741         else eval $xxnf;
5742         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5743         set $yyy; shift; shift; yyy=$@;
5744         case $# in 0) cont="";;
5745         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5746                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5747         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5748                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5749         esac;
5750 done;
5751 while $test "$yyy";
5752 do set $yyy; var=$2; eval "was=\$$2";
5753         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5754         set $yyy; shift; shift; yyy=$@;
5755 done'
5756
5757 : see if this is a malloc.h system
5758 set malloc.h i_malloc
5759 eval $inhdr
5760
5761 : see if stdlib is available
5762 set stdlib.h i_stdlib
5763 eval $inhdr
5764
5765 : determine which malloc to compile in
5766 echo " "
5767 case "$usemymalloc" in
5768 ''|[yY]*|true|$define)  dflt='y' ;;
5769 *)      dflt='n' ;;
5770 esac
5771 rp="Do you wish to attempt to use the malloc that comes with $package?"
5772 . ./myread
5773 usemymalloc="$ans"
5774 case "$ans" in
5775 y*|true)
5776         usemymalloc='y'
5777         mallocsrc='malloc.c'
5778         mallocobj="malloc$_o"
5779         d_mymalloc="$define"
5780         case "$libs" in
5781         *-lmalloc*)
5782                 : Remove malloc from list of libraries to use
5783                 echo "Removing unneeded -lmalloc from library list" >&4
5784                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
5785                 shift
5786                 libs="$*"
5787                 echo "libs = $libs" >&4
5788                 ;;
5789         esac
5790         ;;
5791 *)
5792         usemymalloc='n'
5793         mallocsrc=''
5794         mallocobj=''
5795         d_mymalloc="$undef"
5796         ;;
5797 esac
5798
5799 : compute the return types of malloc and free
5800 echo " "
5801 $cat >malloc.c <<END
5802 #$i_malloc I_MALLOC
5803 #$i_stdlib I_STDLIB
5804 #include <stdio.h>
5805 #include <sys/types.h>
5806 #ifdef I_MALLOC
5807 #include <malloc.h>
5808 #endif
5809 #ifdef I_STDLIB
5810 #include <stdlib.h>
5811 #endif
5812 #ifdef TRY_MALLOC
5813 void *malloc();
5814 #endif
5815 #ifdef TRY_FREE
5816 void free();
5817 #endif
5818 END
5819 case "$malloctype" in
5820 '')
5821         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
5822                 malloctype='void *'
5823         else
5824                 malloctype='char *'
5825         fi
5826         ;;
5827 esac
5828 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
5829
5830 case "$freetype" in
5831 '')
5832         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
5833                 freetype='void'
5834         else
5835                 freetype='int'
5836         fi
5837         ;;
5838 esac
5839 echo "Your system uses $freetype free(), it would seem." >&4
5840 $rm -f malloc.[co]
5841 $cat <<EOM
5842
5843 After $package is installed, you may wish to install various
5844 add-on modules and utilities.  Typically, these add-ons will
5845 be installed under $prefix with the rest
5846 of this package.  However, you may wish to install such add-ons
5847 elsewhere under a different prefix.
5848
5849 If you do not wish to put everything under a single prefix, that's
5850 ok.  You will be prompted for the individual locations; this siteprefix
5851 is only used to suggest the defaults.
5852
5853 The default should be fine for most people.
5854
5855 EOM
5856 fn=d~+
5857 rp='Installation prefix to use for add-on modules and utilities?'
5858 : XXX Here might be another good place for an installstyle setting.
5859 case "$siteprefix" in
5860 '') dflt=$prefix ;;
5861 *)  dflt=$siteprefix ;;
5862 esac
5863 . ./getfile
5864 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
5865 oldsiteprefix=''
5866 case "$siteprefix" in
5867 '') ;;
5868 *)      case "$ans" in
5869         "$prefix") ;;
5870         *) oldsiteprefix="$prefix";;
5871         esac
5872         ;;
5873 esac
5874 siteprefix="$ans"
5875 siteprefixexp="$ansexp"
5876
5877 : determine where site specific libraries go.
5878 : Usual default is /usr/local/lib/perl5/site_perl/$version
5879 : The default "style" setting is made in installstyle.U
5880 : XXX No longer works with Prefixit stuff.
5881 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5882 case "$sitelib" in
5883 '') case "$installstyle" in
5884         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
5885         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
5886         esac
5887         ;;
5888 *)      dflt="$sitelib"
5889         ;;
5890 esac
5891 $cat <<EOM
5892
5893 The installation process will create a directory for
5894 site-specific extensions and modules.  Most users find it convenient
5895 to place all site-specific files in this directory rather than in the
5896 main distribution directory.
5897
5898 EOM
5899 fn=d~+
5900 rp='Pathname for the site-specific library files?'
5901 . ./getfile
5902 sitelib="$ans"
5903 sitelibexp="$ansexp"
5904 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
5905 : Change installation prefix, if necessary.
5906 if $test X"$prefix" != X"$installprefix"; then
5907         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
5908 else
5909         installsitelib="$sitelibexp"
5910 fi
5911
5912 : determine where site specific architecture-dependent libraries go.
5913 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
5914 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
5915 : sitelib may have an optional trailing /share.
5916 case "$sitearch" in
5917 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
5918         dflt="$dflt/$archname"
5919         ;;
5920 *)      dflt="$sitearch"
5921         ;;
5922 esac
5923 set sitearch sitearch none
5924 eval $prefixit
5925 $cat <<EOM
5926
5927 The installation process will also create a directory for
5928 architecture-dependent site-specific extensions and modules.
5929
5930 EOM
5931 fn=d~+
5932 rp='Pathname for the site-specific architecture-dependent library files?'
5933 . ./getfile
5934 sitearch="$ans"
5935 sitearchexp="$ansexp"
5936 : Change installation prefix, if necessary.
5937 if $test X"$prefix" != X"$installprefix"; then
5938         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
5939 else
5940         installsitearch="$sitearchexp"
5941 fi
5942
5943 $cat <<EOM
5944
5945 The installation process will also create a directory for
5946 vendor-supplied add-ons.  Vendors who supply perl with their system
5947 may find it convenient to place all vendor-supplied files in this
5948 directory rather than in the main distribution directory.  This will
5949 ease upgrades between binary-compatible maintenance versions of perl.
5950
5951 Of course you may also use these directories in whatever way you see
5952 fit.  For example, you might use them to access modules shared over a
5953 company-wide network.
5954
5955 The default answer should be fine for most people.
5956 This causes further questions about vendor add-ons to be skipped
5957 and no vendor-specific directories will be configured for perl.
5958
5959 EOM
5960 rp='Do you want to configure vendor-specific add-on directories?'
5961 case "$usevendorprefix" in
5962 define|true|[yY]*) dflt=y ;;
5963 *)      : User may have set vendorprefix directly on Configure command line.
5964         case "$vendorprefix" in
5965         ''|' ') dflt=n ;;
5966         *)      dflt=y ;;
5967         esac
5968         ;;
5969 esac
5970 . ./myread
5971 case "$ans" in
5972 [yY]*)  fn=d~+
5973         rp='Installation prefix to use for vendor-supplied add-ons?'
5974         case "$vendorprefix" in
5975         '') dflt='' ;;
5976         *)  dflt=$vendorprefix ;;
5977         esac
5978         . ./getfile
5979         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
5980         oldvendorprefix=''
5981         case "$vendorprefix" in
5982         '') ;;
5983         *)      case "$ans" in
5984                 "$prefix") ;;
5985                 *) oldvendorprefix="$prefix";;
5986                 esac
5987                 ;;
5988         esac
5989         usevendorprefix="$define"
5990         vendorprefix="$ans"
5991         vendorprefixexp="$ansexp"
5992         ;;
5993 *)      usevendorprefix="$undef"
5994         vendorprefix=''
5995         vendorprefixexp=''
5996         ;;
5997 esac
5998
5999 case "$vendorprefix" in
6000 '')     d_vendorlib="$undef"
6001         vendorlib=''
6002         vendorlibexp=''
6003         ;;
6004 *)      d_vendorlib="$define"
6005         : determine where vendor-supplied modules go.
6006         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6007         case "$vendorlib" in
6008         '')
6009                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6010                 case "$installstyle" in
6011                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6012                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6013                 esac
6014                 ;;
6015         *)      dflt="$vendorlib"
6016                 ;;
6017         esac
6018         fn=d~+
6019         rp='Pathname for the vendor-supplied library files?'
6020         . ./getfile
6021         vendorlib="$ans"
6022         vendorlibexp="$ansexp"
6023         ;;
6024 esac
6025 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6026 : Change installation prefix, if necessary.
6027 if $test X"$prefix" != X"$installprefix"; then
6028         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6029 else
6030         installvendorlib="$vendorlibexp"
6031 fi
6032
6033 case "$vendorprefix" in
6034 '')     d_vendorarch="$undef"
6035         vendorarch=''
6036         vendorarchexp=''
6037         ;;
6038 *)      d_vendorarch="$define"
6039         : determine where vendor-supplied architecture-dependent libraries go.
6040         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
6041         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6042         : vendorlib may have an optional trailing /share.
6043         case "$vendorarch" in
6044         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
6045                 dflt="$dflt/$archname"
6046                 ;;
6047         *)      dflt="$vendorarch" ;;
6048         esac
6049         fn=d~+
6050         rp='Pathname for vendor-supplied architecture-dependent files?'
6051         . ./getfile
6052         vendorarch="$ans"
6053         vendorarchexp="$ansexp"
6054         ;;
6055 esac
6056 : Change installation prefix, if necessary.
6057 if $test X"$prefix" != X"$installprefix"; then
6058         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6059 else
6060         installvendorarch="$vendorarchexp"
6061 fi
6062
6063 : Final catch-all directories to search
6064 $cat <<EOM
6065
6066 Lastly, you can have perl look in other directories for extensions and
6067 modules in addition to those already specified.
6068 These directories will be searched after 
6069         $sitearch 
6070         $sitelib 
6071 EOM
6072 test X"$vendorlib" != "X" && echo '     ' $vendorlib
6073 test X"$vendorarch" != "X" && echo '    ' $vendorarch
6074 echo ' '
6075 case "$otherlibdirs" in
6076 ''|' ') dflt='none' ;;
6077 *)      dflt="$otherlibdirs" ;;
6078 esac
6079 $cat <<EOM
6080 Enter a colon-separated set of extra paths to include in perl's @INC
6081 search path, or enter 'none' for no extra paths.
6082
6083 EOM
6084
6085 rp='Colon-separated list of additional directories for perl to search?'
6086 . ./myread
6087 case "$ans" in
6088 ' '|''|none)    otherlibdirs=' ' ;;     
6089 *)      otherlibdirs="$ans" ;;
6090 esac
6091 case "$otherlibdirs" in
6092 ' ') val=$undef ;;
6093 *)      val=$define ;;
6094 esac
6095 set d_perl_otherlibdirs
6096 eval $setvar
6097
6098 : Cruising for prototypes
6099 echo " "
6100 echo "Checking out function prototypes..." >&4
6101 $cat >prototype.c <<'EOCP'
6102 int main(int argc, char *argv[]) {
6103         exit(0);}
6104 EOCP
6105 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
6106         echo "Your C compiler appears to support function prototypes."
6107         val="$define"
6108 else
6109         echo "Your C compiler doesn't seem to understand function prototypes."
6110         val="$undef"
6111 fi
6112 set prototype
6113 eval $setvar
6114 $rm -f prototype*
6115
6116 case "$prototype" in
6117 "$define") ;;
6118 *)      ansi2knr='ansi2knr'
6119         echo " "
6120         cat <<EOM >&4
6121
6122 $me:  FATAL ERROR:
6123 This version of $package can only be compiled by a compiler that 
6124 understands function prototypes.  Unfortunately, your C compiler 
6125         $cc $ccflags
6126 doesn't seem to understand them.  Sorry about that.
6127
6128 If GNU cc is available for your system, perhaps you could try that instead.  
6129
6130 Eventually, we hope to support building Perl with pre-ANSI compilers.
6131 If you would like to help in that effort, please contact <perlbug@perl.org>.
6132
6133 Aborting Configure now.
6134 EOM
6135         exit 2
6136         ;;
6137 esac
6138
6139 : determine where public executables go
6140 echo " "
6141 set dflt bin bin
6142 eval $prefixit
6143 fn=d~
6144 rp='Pathname where the public executables will reside?'
6145 . ./getfile
6146 if $test "X$ansexp" != "X$binexp"; then
6147         installbin=''
6148 fi
6149 bin="$ans"
6150 binexp="$ansexp"
6151 : Change installation prefix, if necessary.
6152 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
6153 if $test X"$prefix" != X"$installprefix"; then
6154         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
6155 else
6156         installbin="$binexp"
6157 fi
6158
6159 : Find perl5.005 or later.
6160 echo "Looking for a previously installed perl5.005 or later... "
6161 case "$perl5" in
6162 '')     for tdir in `echo "$binexp:$PATH" | $sed "s/$path_sep/ /g"`; do
6163                 : Check if this perl is recent and can load a simple module
6164                 if $test -x $tdir/perl && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6165                         perl5=$tdir/perl
6166                         break;
6167                 elif $test -x $tdir/perl5 && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6168                         perl5=$tdir/perl
6169                         break;
6170                 fi
6171         done
6172         ;;
6173 *)      perl5="$perl5"
6174         ;;
6175 esac
6176 case "$perl5" in
6177 '')     echo "None found.  That's ok.";;
6178 *)      echo "Using $perl5." ;;
6179 esac
6180
6181 : Determine list of previous versions to include in @INC
6182 $cat > getverlist <<EOPL
6183 #!$perl5 -w
6184 use File::Basename;
6185 \$api_versionstring = "$api_versionstring";
6186 \$version = "$version";
6187 \$stem = "$sitelib_stem";
6188 \$archname = "$archname";
6189 EOPL
6190         $cat >> getverlist <<'EOPL'
6191 # Can't have leading @ because metaconfig interprets it as a command!
6192 ;@inc_version_list=();
6193 # XXX Redo to do opendir/readdir? 
6194 if (-d $stem) {
6195     chdir($stem);
6196     ;@candidates = glob("5.*");
6197 }
6198 else {
6199     ;@candidates = ();
6200 }
6201
6202 # XXX ToDo:  These comparisons must be reworked when two-digit
6203 # subversions come along, so that 5.7.10 compares as greater than
6204 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
6205 # widespread that we can use the built-in version vectors rather
6206 # than reinventing them here.  For 5.6.0, however, we must
6207 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
6208 foreach $d (@candidates) {
6209     if ($d lt $version) {
6210         if ($d ge $api_versionstring) {
6211             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
6212         }
6213         elsif ($d ge "5.005") {
6214             unshift(@inc_version_list, grep { -d } $d);
6215         }
6216     }
6217     else {
6218         # Skip newer version.  I.e. don't look in
6219         # 5.7.0 if we're installing 5.6.1.
6220     }
6221 }
6222
6223 if (@inc_version_list) {
6224     print join(' ', @inc_version_list);
6225 }
6226 else {
6227     # Blank space to preserve value for next Configure run.
6228     print " ";
6229 }
6230 EOPL
6231 chmod +x getverlist
6232 case "$inc_version_list" in
6233 '')     if test -x "$perl5"; then
6234                 dflt=`$perl5 getverlist`
6235         else
6236                 dflt='none'
6237         fi
6238         ;;
6239 $undef) dflt='none' ;;
6240 *)  dflt="$inc_version_list" ;;
6241 esac
6242 case "$dflt" in
6243 ''|' ') dflt=none ;;
6244 esac
6245 case "$dflt" in
6246 5.005) case "$bincompat5005" in
6247        $define|true|[yY]*) ;;
6248        *) dflt=none ;;
6249        esac
6250        ;;
6251 esac
6252 $cat <<'EOM'
6253
6254 In order to ease the process of upgrading, this version of perl 
6255 can be configured to use modules built and installed with earlier 
6256 versions of perl that were installed under $prefix.  Specify here
6257 the list of earlier versions that this version of perl should check.
6258 If Configure detected no earlier versions of perl installed under
6259 $prefix, then the list will be empty.  Answer 'none' to tell perl
6260 to not search earlier versions.
6261
6262 The default should almost always be sensible, so if you're not sure,
6263 just accept the default.
6264 EOM
6265
6266 rp='List of earlier versions to include in @INC?'
6267 . ./myread
6268 case "$ans" in
6269 [Nn]one|''|' ') inc_version_list=' ' ;;
6270 *) inc_version_list="$ans" ;;
6271 esac
6272 case "$inc_version_list" in
6273 ''|' ') 
6274         inc_version_list_init='0';;
6275 *)      inc_version_list_init=`echo $inc_version_list |
6276                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
6277         ;;
6278 esac
6279 $rm -f getverlist
6280
6281 : determine whether to install perl also as /usr/bin/perl
6282
6283 echo " "
6284 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
6285         $cat <<EOM
6286 Many scripts expect perl to be installed as /usr/bin/perl.
6287 I can install the perl you are about to compile also as /usr/bin/perl
6288 (in addition to $installbin/perl).
6289 EOM
6290         case "$installusrbinperl" in
6291         "$undef"|[nN]*) dflt='n';;
6292         *)              dflt='y';;
6293         esac
6294         rp="Do you want to install perl as /usr/bin/perl?"
6295         . ./myread
6296         case "$ans" in
6297         [yY]*)  val="$define";;
6298         *)      val="$undef" ;;
6299         esac
6300 else
6301         val="$undef"
6302 fi
6303 set installusrbinperl
6304 eval $setvar
6305
6306 : see if dld is available
6307 set dld.h i_dld
6308 eval $inhdr
6309
6310 : see if dlopen exists
6311 xxx_runnm="$runnm"
6312 runnm=false
6313 set dlopen d_dlopen
6314 eval $inlibc
6315 runnm="$xxx_runnm"
6316
6317 : determine which dynamic loading, if any, to compile in
6318 echo " "
6319 dldir="ext/DynaLoader"
6320 case "$usedl" in
6321 $define|y|true)
6322         dflt='y'
6323         usedl="$define"
6324         ;;
6325 $undef|n|false)
6326         dflt='n'
6327         usedl="$undef"
6328         ;;
6329 *) 
6330         dflt='n'
6331         case "$d_dlopen" in
6332             $define) dflt='y' ;;
6333         esac
6334         case "$i_dld" in
6335             $define) dflt='y' ;;
6336         esac
6337         : Does a dl_xxx.xs file exist for this operating system
6338         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
6339         ;;
6340 esac
6341 rp="Do you wish to use dynamic loading?"
6342 . ./myread
6343 usedl="$ans"
6344 case "$ans" in
6345 y*) usedl="$define"
6346         case "$dlsrc" in
6347         '')
6348                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
6349                         dflt="$dldir/dl_${osname}.xs"
6350                 elif $test "$d_dlopen" = "$define" ; then
6351                         dflt="$dldir/dl_dlopen.xs"
6352                 elif $test "$i_dld" = "$define" ; then
6353                         dflt="$dldir/dl_dld.xs"
6354                 else
6355                         dflt=''
6356                 fi
6357                 ;;
6358         *)      dflt="$dldir/$dlsrc"
6359                 ;;
6360         esac
6361     echo "The following dynamic loading files are available:"
6362         : Can not go over to $dldir because getfile has path hard-coded in.
6363         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
6364         rp="Source file to use for dynamic loading"
6365         fn="fne"
6366         gfpth="$src"
6367         . ./getfile
6368         usedl="$define"
6369         : emulate basename
6370         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
6371
6372         $cat << EOM
6373
6374 Some systems may require passing special flags to $cc -c to
6375 compile modules that will be used to create a shared library.
6376 To use no flags, say "none".
6377
6378 EOM
6379     case "$cccdlflags" in
6380     '') case "$gccversion" in
6381                 '') case "$osname" in
6382                         hpux)   dflt='+z' ;;
6383                         next)   dflt='none' ;;
6384                         irix*)  dflt='-KPIC' ;;
6385                         svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
6386                         sunos)  dflt='-pic' ;;
6387                         *)      dflt='none' ;;
6388                     esac
6389                         ;;
6390                 *)  case "$osname" in
6391                         svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
6392                         *)      dflt='-fpic' ;;
6393                     esac ;;
6394             esac ;;
6395         ' ') dflt='none' ;;
6396     *)  dflt="$cccdlflags" ;;
6397     esac
6398     rp="Any special flags to pass to $cc -c to compile shared library modules?"
6399     . ./myread
6400     case "$ans" in
6401     none) cccdlflags=' ' ;;
6402     *) cccdlflags="$ans" ;;
6403     esac
6404
6405     cat << EOM
6406
6407 Some systems use ld to create libraries that can be dynamically loaded,
6408 while other systems (such as those using ELF) use $cc.
6409
6410 EOM
6411         case "$ld" in
6412         '')     $cat >try.c <<'EOM'
6413 /* Test for whether ELF binaries are produced */
6414 #include <fcntl.h>
6415 #include <stdlib.h>
6416 int main() {
6417         char b[4];
6418         int i = open("a.out",O_RDONLY);
6419         if(i == -1) 
6420                 exit(1); /* fail */
6421         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
6422                 exit(0); /* succeed (yes, it's ELF) */
6423         else
6424                 exit(1); /* fail */
6425 }
6426 EOM
6427                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
6428                         cat <<EOM
6429 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
6430 EOM
6431                         dflt="$cc"
6432                 else
6433                         echo "I'll use ld to build dynamic libraries."
6434                         dflt='ld'
6435                 fi
6436                 rm -f try.c a.out
6437                 ;;
6438         *)      dflt="$ld"
6439                 ;;
6440         esac
6441
6442     rp="What command should be used to create dynamic libraries?"
6443     . ./myread
6444         ld="$ans"
6445
6446     cat << EOM
6447
6448 Some systems may require passing special flags to $ld to create a
6449 library that can be dynamically loaded.  If your ld flags include
6450 -L/other/path options to locate libraries outside your loader's normal
6451 search path, you may need to specify those -L options here as well.  To
6452 use no flags, say "none".
6453
6454 EOM
6455     case "$lddlflags" in
6456     '') case "$osname" in
6457                         beos) dflt='-nostart' ;;
6458                         hpux) dflt='-b';
6459                               case "$gccversion" in
6460                               '') dflt="$dflt +vnocompatwarnings" ;;
6461                               esac
6462                               ;;        
6463                         linux|irix*)    dflt='-shared' ;;
6464                         next)  dflt='none' ;;
6465                         solaris) dflt='-G' ;;
6466                         sunos) dflt='-assert nodefinitions' ;;
6467                         svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
6468                 *)     dflt='none' ;;
6469                         esac
6470                         ;;
6471     *) dflt="$lddlflags" ;;
6472     esac
6473
6474         : Try to guess additional flags to pick up local libraries.
6475         : Be careful not to append to a plain 'none'
6476         case "$dflt" in
6477         none) dflt='' ;;
6478         esac
6479         for thisflag in $ldflags; do
6480                 case "$thisflag" in
6481                 -L*|-R*)
6482                         case " $dflt " in
6483                         *" $thisflag "*) ;;
6484                         *) dflt="$dflt $thisflag" ;;
6485                         esac
6486                         ;;
6487                 esac
6488         done
6489
6490         case "$dflt" in
6491         ''|' ') dflt='none' ;;
6492         esac
6493
6494     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
6495     . ./myread
6496     case "$ans" in
6497     none) lddlflags=' ' ;;
6498     *) lddlflags="$ans" ;;
6499     esac
6500
6501         cat <<EOM
6502
6503 Some systems may require passing special flags to $cc to indicate that
6504 the resulting executable will use dynamic linking.  To use no flags,
6505 say "none".
6506
6507 EOM
6508     case "$ccdlflags" in
6509     '') case "$osname" in
6510                 hpux)   dflt='-Wl,-E' ;;
6511                 linux)  dflt='-rdynamic' ;;
6512                 next)   dflt='none' ;;
6513                 sunos)  dflt='none' ;;
6514                 *)      dflt='none' ;;
6515             esac ;;
6516     ' ')  dflt='none' ;;
6517     *)  dflt="$ccdlflags" ;;
6518     esac
6519     rp="Any special flags to pass to $cc to use dynamic linking?"
6520     . ./myread
6521     case "$ans" in
6522     none) ccdlflags=' ' ;;
6523     *) ccdlflags="$ans" ;;
6524     esac
6525     ;;
6526 *)  usedl="$undef"
6527         ld='ld'
6528     dlsrc='dl_none.xs'
6529     lddlflags=''
6530     ccdlflags=''
6531     ;;
6532 esac
6533
6534 also=''
6535 case "$usedl" in
6536 $undef)
6537         # No dynamic loading being used, so don't bother even to prompt.
6538         useshrplib='false'
6539         ;;
6540 *)      case "$useshrplib" in
6541         '')     case "$osname" in
6542                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
6543                         dflt=y
6544                         also='Building a shared libperl is required for dynamic loading to work on your system.'
6545                         ;;
6546                 next*)
6547                         case "$osvers" in
6548                         4*)     dflt=y
6549                                 also='Building a shared libperl is needed for MAB support.'
6550                                 ;;
6551                         *)      dflt=n
6552                                 ;;
6553                         esac
6554                         ;;
6555                 *)      dflt=n
6556                         ;;
6557                 esac
6558                 ;;
6559         $define|true|[Yy]*)
6560                 dflt=y
6561                 ;;
6562         *)      dflt=n
6563                 ;;
6564         esac
6565         $cat << EOM
6566
6567 The perl executable is normally obtained by linking perlmain.c with
6568 libperl${_a}, any static extensions (usually just DynaLoader), and
6569 any other libraries needed on this system (such as -lm, etc.).  Since
6570 your system supports dynamic loading, it is probably possible to build
6571 a shared libperl.$so.  If you will have more than one executable linked
6572 to libperl.$so, this will significantly reduce the size of each
6573 executable, but it may have a noticeable affect on performance.  The
6574 default is probably sensible for your system.
6575 $also
6576
6577 EOM
6578         rp="Build a shared libperl.$so (y/n)"
6579         . ./myread
6580         case "$ans" in
6581         true|$define|[Yy]*)
6582                 useshrplib='true'  ;;
6583         *)      useshrplib='false' ;;
6584         esac
6585         ;;
6586 esac
6587
6588 case "$useshrplib" in
6589 true)
6590         case "$libperl" in
6591         '')
6592                 # Figure out a good name for libperl.so.  Since it gets stored in
6593                 # a version-specific architecture-dependent library, the version
6594                 # number isn't really that important, except for making cc/ld happy.
6595                 #
6596                 # A name such as libperl.so.3.1
6597                 majmin="libperl.$so.$patchlevel.$subversion"
6598                 # A name such as libperl.so.301
6599                 majonly=`echo $patchlevel $subversion |
6600                         $awk '{printf "%d%02d", $1, $2}'`
6601                 majonly=libperl.$so.$majonly
6602                 # I'd prefer to keep the os-specific stuff here to a minimum, and
6603                 # rely on figuring it out from the naming of libc.
6604                 case "${osname}${osvers}" in
6605                 next4*)
6606                         dflt=libperl.5.$so
6607                         # XXX How handle the --version stuff for MAB?
6608                         ;;
6609                 linux*)  # ld won't link with a bare -lperl otherwise.
6610                         dflt=libperl.$so
6611                         ;;
6612                 cygwin*) # include version
6613                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
6614                         ;;
6615                 *)      # Try to guess based on whether libc has major.minor.
6616                         case "$libc" in
6617                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
6618                         *libc.$so.[0-9]*) dflt=$majonly ;;
6619                         *)      dflt=libperl.$so ;;
6620                         esac
6621                         ;;
6622                 esac
6623                 ;;
6624         *)      dflt=$libperl
6625                 ;;
6626         esac
6627         cat << EOM
6628
6629 I need to select a good name for the shared libperl.  If your system uses
6630 library names with major and minor numbers, then you might want something
6631 like $majmin.  Alternatively, if your system uses a single version
6632 number for shared libraries, then you might want to use $majonly.
6633 Or, your system might be quite happy with a simple libperl.$so.
6634
6635 Since the shared libperl will get installed into a version-specific
6636 architecture-dependent directory, the version number of the shared perl
6637 library probably isn't important, so the default should be o.k.
6638
6639 EOM
6640         rp='What name do you want to give to the shared libperl?'
6641         . ./myread
6642         libperl=$ans
6643         echo "Ok, I'll use $libperl"
6644         ;;
6645 *)
6646         libperl="libperl${_a}"
6647         ;;
6648 esac
6649
6650 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
6651 case "$shrpdir" in
6652 '') ;;
6653 *)      $cat >&4 <<EOM
6654 WARNING:  Use of the shrpdir variable for the installation location of
6655 the shared $libperl is not supported.  It was never documented and
6656 will not work in this version.  Let me (perlbug@perl.org)
6657 know of any problems this may cause.
6658
6659 EOM
6660         case "$shrpdir" in
6661         "$archlibexp/CORE")
6662                 $cat >&4 <<EOM
6663 But your current setting of $shrpdir is
6664 the default anyway, so it's harmless.
6665 EOM
6666                 ;;
6667         *)
6668                 $cat >&4 <<EOM
6669 Further, your current attempted setting of $shrpdir
6670 conflicts with the value of $archlibexp/CORE
6671 that installperl will use.
6672 EOM
6673                 ;;
6674         esac
6675         ;;
6676 esac
6677
6678 # How will the perl executable find the installed shared $libperl?
6679 # Add $xxx to ccdlflags.
6680 # If we can't figure out a command-line option, use $shrpenv to
6681 # set env LD_RUN_PATH.  The main perl makefile uses this.
6682 shrpdir=$archlibexp/CORE
6683 xxx=''
6684 tmp_shrpenv=''
6685 if "$useshrplib"; then
6686     case "$osname" in 
6687         aix)
6688                 # We'll set it in Makefile.SH...
6689                 ;;
6690         solaris|netbsd)
6691                 xxx="-R $shrpdir"
6692                 ;;
6693         freebsd)
6694                 xxx="-Wl,-R$shrpdir"
6695                 ;;
6696         linux|irix*|dec_osf)
6697                 xxx="-Wl,-rpath,$shrpdir"
6698                 ;;
6699         next)
6700                 # next doesn't like the default...
6701                 ;;
6702         beos)
6703                 # beos doesn't like the default, either.
6704                 ;;
6705         hpux*)
6706                 # hpux doesn't like the default, either.
6707                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
6708                 ;;
6709         *)
6710                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
6711                 ;;
6712         esac
6713         case "$xxx" in
6714         '') ;;
6715         *)      
6716                 # Only add $xxx if it isn't already in ccdlflags.
6717                 case " $ccdlflags " in
6718                 *" $xxx "*)     ;;
6719                 *)      ccdlflags="$ccdlflags $xxx"
6720                         cat <<EOM >&4
6721
6722 Adding $xxx to the flags
6723 passed to $ld so that the perl executable will find the 
6724 installed shared $libperl.
6725
6726 EOM
6727                         ;;
6728                 esac
6729                 ;;
6730         esac
6731 fi
6732 # Fix ccdlflags in AIX for building external extensions.
6733 # (For building Perl itself bare -bE:perl.exp is needed,
6734 #  Makefile.SH takes care of this.)
6735 case "$osname" in
6736 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
6737 esac
6738 # Respect a hint or command-line value.
6739 case "$shrpenv" in
6740 '') shrpenv="$tmp_shrpenv" ;;
6741 esac
6742 case "$ldlibpthname" in
6743 '')     ldlibpthname=LD_LIBRARY_PATH ;;
6744 none)   ldlibpthname='' ;;
6745 esac
6746
6747 : determine where manual pages are on this system
6748 echo " "
6749 case "$sysman" in
6750 '') 
6751         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
6752         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
6753         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
6754         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
6755         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
6756         sysman=`./loc . /usr/man/man1 $syspath`
6757         ;;
6758 esac
6759 if $test -d "$sysman"; then
6760         echo "System manual is in $sysman." >&4
6761 else
6762         echo "Could not find manual pages in source form." >&4
6763 fi
6764
6765 : determine where manual pages go
6766 set man1dir man1dir none
6767 eval $prefixit
6768 $cat <<EOM
6769
6770 $spackage has manual pages available in source form.
6771 EOM
6772 case "$nroff" in
6773 nroff)
6774         echo "However, you don't have nroff, so they're probably useless to you."
6775         case "$man1dir" in
6776         '') man1dir="none";;
6777         esac;;
6778 esac
6779 echo "If you don't want the manual sources installed, answer 'none'."
6780 case "$man1dir" in
6781 ' ') dflt=none
6782         ;;
6783 '')
6784         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
6785         lookpath="$lookpath $prefixexp/man/p_man/man1"
6786         lookpath="$lookpath $prefixexp/man/u_man/man1"
6787         lookpath="$lookpath $prefixexp/man/man.1"
6788         case "$sysman" in
6789         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
6790         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
6791         esac
6792         set dflt
6793         eval $prefixup
6794         ;;
6795 *)  dflt="$man1dir"
6796         ;;
6797 esac
6798 echo " "
6799 fn=dn+~
6800 rp="Where do the main $spackage manual pages (source) go?"
6801 . ./getfile
6802 if $test "X$man1direxp" != "X$ansexp"; then
6803         installman1dir=''
6804 fi
6805 man1dir="$ans"
6806 man1direxp="$ansexp"
6807 case "$man1dir" in
6808 '')     man1dir=' '
6809         installman1dir='';;
6810 esac
6811
6812 : Change installation prefix, if necessary.
6813 if $test X"$prefix" != X"$installprefix"; then
6814         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
6815 else
6816         installman1dir="$man1direxp"
6817 fi
6818
6819 : What suffix to use on installed man pages
6820
6821 case "$man1dir" in
6822 ' ')
6823         man1ext='0'
6824         ;;
6825 *)
6826         rp="What suffix should be used for the main $spackage man pages?"
6827         case "$man1ext" in
6828         '')     case "$man1dir" in
6829                 *1)  dflt=1 ;;
6830                 *1p) dflt=1p ;;
6831                 *1pm) dflt=1pm ;;
6832                 *l) dflt=l;;
6833                 *n) dflt=n;;
6834                 *o) dflt=o;;
6835                 *p) dflt=p;;
6836                 *C) dflt=C;;
6837                 *L) dflt=L;;
6838                 *L1) dflt=L1;;
6839                 *) dflt=1;;
6840                 esac
6841                 ;;
6842         *)      dflt="$man1ext";;
6843         esac
6844         . ./myread
6845         man1ext="$ans"
6846         ;;
6847 esac
6848
6849 : see if we can have long filenames
6850 echo " "
6851 first=123456789abcdef
6852 $rm -f $first
6853 if (echo hi >$first) 2>/dev/null; then
6854         if $test -f 123456789abcde; then
6855                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
6856                 val="$undef"
6857         else
6858                 echo 'You can have filenames longer than 14 characters.'>&4
6859                 val="$define"
6860         fi
6861 else
6862         $cat <<'EOM'
6863 You can't have filenames longer than 14 chars.
6864 You can't even think about them!
6865 EOM
6866         val="$undef"
6867 fi 
6868 set d_flexfnam
6869 eval $setvar
6870 $rm -rf 123456789abcde*
6871
6872 : determine where library module manual pages go
6873 set man3dir man3dir none
6874 eval $prefixit
6875 $cat <<EOM
6876
6877 $spackage has manual pages for many of the library modules.
6878 EOM
6879
6880 case "$nroff" in
6881 nroff)
6882         $cat <<'EOM'
6883 However, you don't have nroff, so they're probably useless to you.
6884 EOM
6885         case "$man3dir" in
6886         '') man3dir="none";;
6887         esac;;
6888 esac
6889
6890 case "$d_flexfnam" in
6891 undef)
6892         $cat <<'EOM'
6893 However, your system can't handle the long file names like File::Basename.3. 
6894 EOM
6895         case "$man3dir" in
6896         '') man3dir="none";;
6897         esac;;
6898 esac
6899
6900 echo "If you don't want the manual sources installed, answer 'none'."
6901 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6902 case "$man3dir" in
6903 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
6904         if $test -d "$privlib/man/man3"; then
6905                 cat <<EOM >&4
6906
6907 WARNING:  Previous versions of perl installed man3 pages into
6908 $privlib/man/man3.  This version will suggest a 
6909 new default of $dflt.  
6910 EOM
6911                 tdflt=$dflt
6912                 dflt='n'
6913                 rp='Do you wish to preserve the old behavior?(y/n)'
6914                 . ./myread
6915                 case "$ans" in
6916                 y*) dflt="$privlib/man/man3" ;;
6917                 *)  dflt=$tdflt ;;
6918                 esac
6919     fi
6920         ;;
6921 *)      dflt="$man3dir" ;;
6922 esac
6923 case "$dflt" in
6924 ' ') dflt=none ;;
6925 esac
6926 echo " "
6927 fn=dn+~
6928 rp="Where do the $package library man pages (source) go?"
6929 . ./getfile
6930 man3dir="$ans"
6931 man3direxp="$ansexp"
6932 case "$man3dir" in
6933 '')     man3dir=' '
6934         installman3dir='';;
6935 esac
6936
6937 : Change installation prefix, if necessary.
6938 if $test X"$prefix" != X"$installprefix"; then
6939         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
6940 else
6941         installman3dir="$man3direxp"
6942 fi
6943
6944 : What suffix to use on installed man pages
6945 case "$man3dir" in
6946 ' ')
6947         man3ext='0'
6948         ;;
6949 *)
6950         rp="What suffix should be used for the $package library man pages?"
6951         case "$man3ext" in
6952         '')     case "$man3dir" in
6953                 *3)  dflt=3 ;;
6954                 *3p) dflt=3p ;;
6955                 *3pm) dflt=3pm ;;
6956                 *l) dflt=l;;
6957                 *n) dflt=n;;
6958                 *o) dflt=o;;
6959                 *p) dflt=p;;
6960                 *C) dflt=C;;
6961                 *L) dflt=L;;
6962                 *L3) dflt=L3;;
6963                 *) dflt=3;;
6964                 esac
6965                 ;;
6966         *)      dflt="$man3ext";;
6967         esac
6968         . ./myread
6969         man3ext="$ans"
6970         ;;
6971 esac
6972
6973 : see if we have to deal with yellow pages, now NIS.
6974 if $test -d /usr/etc/yp || $test -d /etc/yp; then
6975         if $test -f /usr/etc/nibindd; then
6976                 echo " "
6977                 echo "I'm fairly confident you're on a NeXT."
6978                 echo " "
6979                 rp='Do you get the hosts file via NetInfo?'
6980                 dflt=y
6981                 case "$hostcat" in
6982                 nidump*) ;;
6983                 '') ;;
6984                 *) dflt=n;;
6985                 esac
6986                 . ./myread
6987                 case "$ans" in
6988                 y*) hostcat='nidump hosts .';;
6989                 *)      case "$hostcat" in
6990                         nidump*) hostcat='';;
6991                         esac
6992                         ;;
6993                 esac
6994         fi
6995         case "$hostcat" in
6996         nidump*) ;;
6997         *)
6998                 case "$hostcat" in
6999                 *ypcat*) dflt=y;;
7000                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7001                                 dflt=y
7002                         else
7003                                 dflt=n
7004                         fi;;
7005                 *) dflt=n;;
7006                 esac
7007                 echo " "
7008                 rp='Are you getting the hosts file via yellow pages?'
7009                 . ./myread
7010                 case "$ans" in
7011                 y*) hostcat='ypcat hosts';;
7012                 *) hostcat='cat /etc/hosts';;
7013                 esac
7014                 ;;
7015         esac
7016 fi
7017 case "$hostcat" in
7018 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
7019 esac
7020 case "$groupcat" in
7021 '') test -f /etc/group && groupcat='cat /etc/group';;
7022 esac
7023 case "$passcat" in
7024 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
7025 esac
7026
7027 : now get the host name
7028 echo " "
7029 echo "Figuring out host name..." >&4
7030 case "$myhostname" in
7031 '') cont=true
7032         echo 'Maybe "hostname" will work...'
7033         if tans=`sh -c hostname 2>&1` ; then
7034                 myhostname=$tans
7035                 phostname=hostname
7036                 cont=''
7037         fi
7038         ;;
7039 *) cont='';;
7040 esac
7041 if $test "$cont"; then
7042         if ./xenix; then
7043                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
7044                 if tans=`cat /etc/systemid 2>&1` ; then
7045                         myhostname=$tans
7046                         phostname='cat /etc/systemid'
7047                         echo "Whadyaknow.  Xenix always was a bit strange..."
7048                         cont=''
7049                 fi
7050         elif $test -r /etc/systemid; then
7051                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
7052         fi
7053 fi
7054 if $test "$cont"; then
7055         echo 'No, maybe "uuname -l" will work...'
7056         if tans=`sh -c 'uuname -l' 2>&1` ; then
7057                 myhostname=$tans
7058                 phostname='uuname -l'
7059         else
7060                 echo 'Strange.  Maybe "uname -n" will work...'
7061                 if tans=`sh -c 'uname -n' 2>&1` ; then
7062                         myhostname=$tans
7063                         phostname='uname -n'
7064                 else
7065                         echo 'Oh well, maybe I can mine it out of whoami.h...'
7066                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
7067                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
7068                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
7069                         else
7070                                 case "$myhostname" in
7071                                 '') echo "Does this machine have an identity crisis or something?"
7072                                         phostname='';;
7073                                 *)
7074                                         echo "Well, you said $myhostname before..."
7075                                         phostname='echo $myhostname';;
7076                                 esac
7077                         fi
7078                 fi
7079         fi
7080 fi
7081 : you do not want to know about this
7082 set $myhostname
7083 myhostname=$1
7084
7085 : verify guess
7086 if $test "$myhostname" ; then
7087         dflt=y
7088         rp='Your host name appears to be "'$myhostname'".'" Right?"
7089         . ./myread
7090         case "$ans" in
7091         y*) ;;
7092         *) myhostname='';;
7093         esac
7094 fi
7095
7096 : bad guess or no guess
7097 while $test "X$myhostname" = X ; do
7098         dflt=''
7099         rp="Please type the (one word) name of your host:"
7100         . ./myread
7101         myhostname="$ans"
7102 done
7103
7104 : translate upper to lower if necessary
7105 case "$myhostname" in
7106 *[A-Z]*)
7107         echo "(Normalizing case in your host name)"
7108         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
7109         ;;
7110 esac
7111
7112 case "$myhostname" in
7113 *.*)
7114         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
7115         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
7116         echo "(Trimming domain name from host name--host name is now $myhostname)"
7117         ;;
7118 *) case "$mydomain" in
7119         '')
7120                 {
7121                         test "X$hostcat" = "Xypcat hosts" &&
7122                         ypmatch "$myhostname" hosts 2>/dev/null |\
7123                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
7124                         $test -s hosts
7125                 } || {
7126                         test "X$hostcat" != "X" &&
7127                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
7128                                         /[       ]$myhostname[  . ]/p" > hosts
7129                 }
7130                 tmp_re="[       . ]"
7131                 if $test -f hosts; then
7132                         $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
7133                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
7134                         dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
7135                                 hosts | $sort | $uniq | \
7136                                 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
7137                         case `$echo X$dflt` in
7138                         X*\ *)  echo "(Several hosts in the database matched hostname)"
7139                                 dflt=.
7140                                 ;;
7141                         X.) echo "(You do not have fully-qualified names in the hosts database)"
7142                                 ;;
7143                         esac
7144                 else
7145                         echo "(I cannot locate a hosts database anywhere)"
7146                         dflt=.
7147                 fi
7148                 case "$dflt" in
7149                 .)
7150                         tans=`./loc resolv.conf X /etc /usr/etc`
7151                         if $test -f "$tans"; then
7152                                 echo "(Attempting domain name extraction from $tans)"
7153                                 dflt=.`$sed -n -e 's/   / /g' \
7154                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
7155                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7156                                 case "$dflt" in
7157                                 .) dflt=.`$sed -n -e 's/        / /g' \
7158                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
7159                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7160                                         ;;
7161                                 esac
7162                         fi
7163                         ;;
7164                 esac
7165                 case "$dflt" in
7166                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
7167                         dflt=.`sh -c domainname 2>/dev/null`
7168                         case "$dflt" in
7169                         '') dflt='.';;
7170                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
7171                         esac
7172                         ;;
7173                 esac
7174                 case "$dflt" in
7175                 .) echo "(Lost all hope -- silly guess then)"
7176                         dflt='.uucp'
7177                         ;;
7178                 esac
7179                 $rm -f hosts
7180                 ;;
7181         *) dflt="$mydomain";;
7182         esac;;
7183 esac
7184 echo " "
7185 rp="What is your domain name?"
7186 . ./myread
7187 tans="$ans"
7188 case "$ans" in
7189 '') ;;
7190 .*) ;;
7191 *) tans=".$tans";;
7192 esac
7193 mydomain="$tans"
7194
7195 : translate upper to lower if necessary
7196 case "$mydomain" in
7197 *[A-Z]*)
7198         echo "(Normalizing case in your domain name)"
7199         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
7200         ;;
7201 esac
7202
7203 : a little sanity check here
7204 case "$phostname" in
7205 '') ;;
7206 *)
7207         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
7208         $myhostname$mydomain|$myhostname) ;;
7209         *)
7210                 case "$phostname" in
7211                 sed*)
7212                         echo "(That doesn't agree with your whoami.h file, by the way.)"
7213                         ;;
7214                 *)
7215                         echo "(That doesn't agree with your $phostname command, by the way.)"
7216                         ;;
7217                 esac
7218         ;;
7219         esac
7220         ;;
7221 esac
7222
7223 $cat <<EOM
7224
7225 I need to get your e-mail address in Internet format if possible, i.e.
7226 something like user@host.domain. Please answer accurately since I have
7227 no easy means to double check it. The default value provided below
7228 is most probably close to reality but may not be valid from outside
7229 your organization...
7230
7231 EOM
7232 cont=x
7233 while test "$cont"; do
7234         case "$cf_email" in
7235         '') dflt="$cf_by@$myhostname$mydomain";;
7236         *) dflt="$cf_email";;
7237         esac
7238         rp='What is your e-mail address?'
7239         . ./myread
7240         cf_email="$ans"
7241         case "$cf_email" in
7242         *@*.*) cont='' ;;
7243         *)
7244                 rp='Address does not look like an Internet one.  Use it anyway?'
7245                 case "$fastread" in
7246                 yes) dflt=y ;;
7247                 *) dflt=n ;;
7248                 esac
7249                 . ./myread
7250                 case "$ans" in
7251                 y*) cont='' ;;
7252                 *) echo " " ;;
7253                 esac
7254                 ;;
7255         esac
7256 done
7257
7258 $cat <<EOM
7259
7260 If you or somebody else will be maintaining perl at your site, please
7261 fill in the correct e-mail address here so that they may be contacted
7262 if necessary. Currently, the "perlbug" program included with perl
7263 will send mail to this address in addition to perlbug@perl.org. You may
7264 enter "none" for no administrator.
7265
7266 EOM
7267 case "$perladmin" in
7268 '') dflt="$cf_email";;
7269 *) dflt="$perladmin";;
7270 esac
7271 rp='Perl administrator e-mail address'
7272 . ./myread
7273 perladmin="$ans"
7274
7275 : determine whether to only install version-specific parts.
7276 echo " "
7277 $cat <<EOM
7278 Do you want to install only the version-specific parts of the perl
7279 distribution?  Usually you do *not* want to do this.
7280 EOM
7281 case "$versiononly" in
7282 "$define"|[Yy]*|true) dflt='y' ;;
7283 *) dflt='n';
7284 esac
7285 rp="Do you want to install only the version-specific parts of perl?"
7286 . ./myread
7287 case "$ans" in
7288 [yY]*)  val="$define";;
7289 *)      val="$undef" ;;
7290 esac
7291 set versiononly
7292 eval $setvar
7293
7294 : figure out how to guarantee perl startup
7295 case "$startperl" in
7296 '')
7297         case "$sharpbang" in
7298         *!)
7299                 $cat <<EOH
7300
7301 I can use the #! construct to start perl on your system. This will
7302 make startup of perl scripts faster, but may cause problems if you
7303 want to share those scripts and perl is not in a standard place
7304 ($binexp/perl) on all your platforms. The alternative is to force
7305 a shell by starting the script with a single ':' character.
7306
7307 EOH
7308                 case "$versiononly" in
7309                 "$define")      dflt="$binexp/perl$version";;  
7310                 *)              dflt="$binexp/perl";;
7311                 esac
7312                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
7313                 . ./myread
7314                 case "$ans" in
7315                 none)   startperl=": # use perl";;
7316                 *)      startperl="#!$ans"
7317                         if $test 30 -lt `echo "$ans" | wc -c`; then
7318                                 $cat >&4 <<EOM
7319
7320 WARNING:  Some systems limit the #! command to 32 characters.
7321 If you experience difficulty running Perl scripts with #!, try
7322 installing Perl in a directory with a shorter pathname.
7323
7324 EOM
7325                         fi ;;
7326                 esac
7327                 ;;
7328         *) startperl=": # use perl"
7329                 ;;
7330         esac
7331         ;;
7332 esac
7333 echo "I'll use $startperl to start perl scripts."
7334
7335 : figure best path for perl in scripts
7336 case "$perlpath" in
7337 '')
7338         perlpath="$binexp/perl"
7339         case "$startperl" in
7340         *!*) ;;
7341         *)
7342                 $cat <<EOH
7343
7344 I will use the "eval 'exec'" idiom to start Perl on your system.
7345 I can use the full path of your Perl binary for this purpose, but
7346 doing so may cause problems if you want to share those scripts and
7347 Perl is not always in a standard place ($binexp/perl).
7348
7349 EOH
7350                 dflt="$binexp/perl"
7351                 rp="What path shall I use in \"eval 'exec'\"?"
7352                 . ./myread
7353                 perlpath="$ans"
7354                 ;;
7355         esac
7356         ;;
7357 esac
7358 case "$startperl" in
7359 *!*)    ;;
7360 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
7361 esac
7362
7363 : determine where public executable scripts go
7364 set scriptdir scriptdir
7365 eval $prefixit
7366 case "$scriptdir" in
7367 '')
7368         dflt="$bin"
7369         : guess some guesses
7370         $test -d /usr/share/scripts && dflt=/usr/share/scripts
7371         $test -d /usr/share/bin     && dflt=/usr/share/bin
7372         $test -d /usr/local/script  && dflt=/usr/local/script
7373         $test -d /usr/local/scripts && dflt=/usr/local/scripts
7374         $test -d $prefixexp/script  && dflt=$prefixexp/script
7375         set dflt
7376         eval $prefixup
7377         ;;
7378 *)  dflt="$scriptdir"
7379         ;;
7380 esac
7381 $cat <<EOM
7382  
7383 Some installations have a separate directory just for executable scripts so
7384 that they can mount it across multiple architectures but keep the scripts in
7385 one spot.  You might, for example, have a subdirectory of /usr/share for this.
7386 Or you might just lump your scripts in with all your other executables.
7387  
7388 EOM
7389 fn=d~
7390 rp='Where do you keep publicly executable scripts?'
7391 . ./getfile
7392 if $test "X$ansexp" != "X$scriptdirexp"; then
7393         installscript=''
7394 fi
7395 scriptdir="$ans"
7396 scriptdirexp="$ansexp"
7397 : Change installation prefix, if necessary.
7398 if $test X"$prefix" != X"$installprefix"; then
7399         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
7400 else
7401         installscript="$scriptdirexp"
7402 fi
7403
7404 : determine where add-on public executables go
7405 case "$sitebin" in
7406 '')     dflt=$siteprefix/bin ;;
7407 *)      dflt=$sitebin ;;
7408 esac
7409 fn=d~
7410 rp='Pathname where the add-on public executables should be installed?'
7411 . ./getfile
7412 sitebin="$ans"
7413 sitebinexp="$ansexp"
7414 : Change installation prefix, if necessary.
7415 if $test X"$prefix" != X"$installprefix"; then
7416         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
7417 else
7418         installsitebin="$sitebinexp"
7419 fi
7420
7421 case "$useperlio" in
7422 $define|true|[yY]*)     dflt='y';;
7423 *) dflt='n';;
7424 esac
7425 cat <<EOM
7426
7427 Previous version of $package used the standard IO mechanisms as defined
7428 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
7429 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
7430 the default.  This abstraction layer can use AT&T's sfio (if you already
7431 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
7432 problems with some extension modules.  Using PerlIO with stdio is safe,
7433 but it is slower than plain stdio and therefore is not the default.
7434
7435 If this doesn't make any sense to you, just accept the default '$dflt'.
7436 EOM
7437 rp='Use the experimental PerlIO abstraction layer?'
7438 . ./myread
7439 case "$ans" in
7440 y|Y) 
7441         val="$define"
7442         ;;     
7443 *)      
7444         echo "Ok, doing things the stdio way"
7445         val="$undef"
7446         ;;
7447 esac
7448 set useperlio
7449 eval $setvar 
7450
7451 case "$vendorprefix" in
7452 '')     d_vendorbin="$undef"
7453         vendorbin=''
7454         vendorbinexp=''
7455         ;;
7456 *)      d_vendorbin="$define"
7457         : determine where vendor-supplied executables go.
7458         case "$vendorbin" in
7459         '') dflt=$vendorprefix/bin ;;
7460         *)      dflt="$vendorbin" ;;
7461         esac
7462         fn=d~+
7463         rp='Pathname for the vendor-supplied executables directory?'
7464         . ./getfile
7465         vendorbin="$ans"
7466         vendorbinexp="$ansexp"
7467         ;;
7468 esac
7469 : Change installation prefix, if necessary.
7470 if $test X"$prefix" != X"$installprefix"; then
7471         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
7472 else
7473         installvendorbin="$vendorbinexp"
7474 fi
7475
7476 : see if qgcvt exists
7477 set qgcvt d_qgcvt
7478 eval $inlibc
7479
7480 echo " "
7481
7482 if $test X"$d_longdbl" = X"$define"; then
7483
7484 echo "Checking how to print long doubles..." >&4
7485
7486 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
7487         $cat >try.c <<'EOCP'
7488 #include <sys/types.h>
7489 #include <stdio.h>
7490 int main() {
7491   double d = 123.456;
7492   printf("%.3f\n", d);
7493 }
7494 EOCP
7495         set try
7496         if eval $compile; then
7497                 yyy=`./try$exe_ext`
7498                 case "$yyy" in
7499                 123.456)
7500                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
7501                         sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
7502                         echo "We will use %f."
7503                         ;;
7504                 esac
7505         fi
7506 fi
7507
7508 if $test X"$sPRIfldbl" = X; then
7509         $cat >try.c <<'EOCP'
7510 #include <sys/types.h>
7511 #include <stdio.h>
7512 int main() {
7513   long double d = 123.456;
7514   printf("%.3llf\n", d);
7515 }
7516 EOCP
7517         set try
7518         if eval $compile; then
7519                 yyy=`./try$exe_ext`
7520                 case "$yyy" in
7521                 123.456)
7522                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
7523                         sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
7524                         echo "We will use %llf."
7525                         ;;
7526                 esac
7527         fi
7528 fi
7529
7530 if $test X"$sPRIfldbl" = X; then
7531         $cat >try.c <<'EOCP'
7532 #include <sys/types.h>
7533 #include <stdio.h>
7534 int main() {
7535   long double d = 123.456;
7536   printf("%.3Lf\n", d);
7537 }
7538 EOCP
7539         set try
7540         if eval $compile; then
7541                 yyy=`./try$exe_ext`
7542                 case "$yyy" in
7543                 123.456)
7544                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
7545                         sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
7546                         echo "We will use %Lf."
7547                         ;;
7548                 esac
7549         fi
7550 fi
7551
7552 if $test X"$sPRIfldbl" = X; then
7553         $cat >try.c <<'EOCP'
7554 #include <sys/types.h>
7555 #include <stdio.h>
7556 int main() {
7557   long double d = 123.456;
7558   printf("%.3lf\n", d);
7559 }
7560 EOCP
7561         set try
7562         if eval $compile; then
7563                 yyy=`./try$exe_ext`
7564                 case "$yyy" in
7565                 123.456)
7566                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
7567                         sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
7568                         echo "We will use %lf."
7569                         ;;
7570                 esac
7571         fi
7572 fi
7573
7574 if $test X"$sPRIfldbl" = X; then
7575         echo "Cannot figure out how to print long doubles." >&4
7576 else
7577         sSCNfldbl=$sPRIfldbl    # expect consistency
7578 fi
7579
7580 $rm -f try try.*
7581
7582 fi # d_longdbl
7583
7584 case "$sPRIfldbl" in
7585 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
7586         d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; 
7587         d_SCNfldbl="$undef";
7588         ;;
7589 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
7590         d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; 
7591         d_SCNfldbl="$define";
7592         ;;
7593 esac
7594
7595 : Check how to convert floats to strings.
7596 echo " "
7597 echo "Checking for an efficient way to convert floats to strings."
7598 echo " " > try.c
7599 case "$uselongdouble" in
7600 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
7601 esac
7602 case "$d_longdbl" in
7603 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
7604 esac
7605 case "$d_PRIgldbl" in
7606 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
7607 esac
7608 $cat >>try.c <<EOP
7609 #ifdef TRY_gconvert
7610 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
7611 char *myname = "gconvert";
7612 #endif
7613 #ifdef TRY_gcvt
7614 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
7615 char *myname = "gcvt";
7616 #endif
7617 #ifdef TRY_qgcvt
7618 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
7619 char *myname = "qgcvt";
7620 #define DOUBLETYPE long double
7621 #endif
7622 #ifdef TRY_sprintf
7623 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
7624 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
7625 #else
7626 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
7627 #endif
7628 char *myname = "sprintf";
7629 #endif
7630
7631 #ifndef DOUBLETYPE
7632 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
7633 #define DOUBLETYPE long double
7634 #else
7635 #define DOUBLETYPE double
7636 #endif
7637 #endif
7638
7639 #include <stdio.h>
7640
7641 #define I_STDLIB $i_stdlib
7642 #ifdef I_STDLIB
7643 #include <stdlib.h>
7644 #endif
7645
7646 int
7647 checkit(expect, got)
7648 char *expect;
7649 char *got;
7650 {
7651     if (strcmp(expect, got)) {
7652                 printf("%s oddity:  Expected %s, got %s\n",
7653                         myname, expect, got);
7654                 exit(1);
7655         }
7656 }
7657
7658 int main()
7659
7660         char buf[64]; 
7661         buf[63] = '\0';
7662
7663         /* This must be 1st test on (which?) platform */
7664         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
7665         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
7666         checkit("0.1", buf);
7667
7668         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
7669         checkit("1", buf);
7670
7671         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
7672         checkit("1.1", buf);
7673
7674         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
7675         checkit("1.01", buf);
7676
7677         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
7678         checkit("1.001", buf);
7679
7680         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
7681         checkit("1.0001", buf);
7682
7683         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
7684         checkit("1.00001", buf);
7685
7686         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
7687         checkit("1.000001", buf);
7688
7689         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
7690         checkit("0", buf);
7691
7692         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
7693         checkit("-1", buf);
7694
7695         /* Some Linux gcvt's give 1.e+5 here. */
7696         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
7697         checkit("100000", buf);
7698         
7699         /* Some Linux gcvt's give -1.e+5 here. */
7700         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
7701         checkit("-100000", buf);
7702
7703         Gconvert((DOUBLETYPE)123.456, 8, 0, buf); 
7704         checkit("123.456", buf);
7705
7706         exit(0);
7707 }
7708 EOP
7709 case "$d_Gconvert" in
7710 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
7711 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
7712 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
7713 *) xxx_list='gconvert gcvt sprintf' ;;
7714 esac
7715
7716 case "$d_longdbl$uselongdouble$d_PRIgldbl" in
7717 "$define$define$define")
7718     # for long doubles prefer first qgcvt, then sprintf
7719     xxx_list="`echo $xxx_list|sed s/sprintf//`" 
7720     xxx_list="sprintf $xxx_list"
7721     case "$d_qgcvt" in
7722     "$define") xxx_list="qgcvt $xxx_list" ;;
7723     esac
7724     ;;
7725 esac
7726
7727 for xxx_convert in $xxx_list; do
7728         echo "Trying $xxx_convert..."
7729         $rm -f try try$_o
7730         set try -DTRY_$xxx_convert
7731         if eval $compile; then
7732                 echo "$xxx_convert() found." >&4
7733                 if ./try; then
7734                         echo "I'll use $xxx_convert to convert floats into a string." >&4
7735                         break;
7736                 else
7737                         echo "...But $xxx_convert didn't work as I expected."
7738                 fi
7739         else
7740                 echo "$xxx_convert NOT found." >&4
7741         fi
7742 done
7743         
7744 case "$xxx_convert" in
7745 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
7746 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
7747 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
7748 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
7749    "$define$define$define")
7750       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
7751    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
7752    esac
7753    ;;  
7754 esac
7755
7756 : Initialize h_fcntl
7757 h_fcntl=false
7758
7759 : Initialize h_sysfile
7760 h_sysfile=false
7761
7762 : access call always available on UNIX
7763 set access d_access
7764 eval $inlibc
7765
7766 : locate the flags for 'access()'
7767 case "$d_access" in
7768 "$define")
7769         echo " "
7770         $cat >access.c <<'EOCP'
7771 #include <sys/types.h>
7772 #ifdef I_FCNTL
7773 #include <fcntl.h>
7774 #endif
7775 #ifdef I_SYS_FILE
7776 #include <sys/file.h>
7777 #endif
7778 #ifdef I_UNISTD
7779 #include <unistd.h>
7780 #endif
7781 int main() {
7782         exit(R_OK);
7783 }
7784 EOCP
7785         : check sys/file.h first, no particular reason here
7786         if $test `./findhdr sys/file.h` && \
7787                 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
7788                 h_sysfile=true;
7789                 echo "<sys/file.h> defines the *_OK access constants." >&4
7790         elif $test `./findhdr fcntl.h` && \
7791                 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
7792                 h_fcntl=true;
7793                 echo "<fcntl.h> defines the *_OK access constants." >&4
7794         elif $test `./findhdr unistd.h` && \
7795                 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
7796                 echo "<unistd.h> defines the *_OK access constants." >&4
7797         else
7798                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
7799         fi
7800         ;;
7801 esac
7802 $rm -f access*
7803
7804 : see if accessx exists
7805 set accessx d_accessx
7806 eval $inlibc
7807
7808 : see if alarm exists
7809 set alarm d_alarm
7810 eval $inlibc
7811
7812 : see if atolf exists
7813 set atolf d_atolf
7814 eval $inlibc
7815
7816 : see if atoll exists
7817 set atoll d_atoll
7818 eval $inlibc
7819
7820 : Look for GNU-cc style attribute checking
7821 echo " "
7822 echo "Checking whether your compiler can handle __attribute__ ..." >&4
7823 $cat >attrib.c <<'EOCP'
7824 #include <stdio.h>
7825 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
7826 EOCP
7827 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
7828         if $contains 'warning' attrib.out >/dev/null 2>&1; then
7829                 echo "Your C compiler doesn't fully support __attribute__."
7830                 val="$undef"
7831         else
7832                 echo "Your C compiler supports __attribute__."
7833                 val="$define"
7834         fi
7835 else
7836         echo "Your C compiler doesn't seem to understand __attribute__ at all."
7837         val="$undef"
7838 fi
7839 set d_attribut
7840 eval $setvar
7841 $rm -f attrib*
7842
7843 : see if bcmp exists
7844 set bcmp d_bcmp
7845 eval $inlibc
7846
7847 : see if bcopy exists
7848 set bcopy d_bcopy
7849 eval $inlibc
7850
7851 : see if this is a unistd.h system
7852 set unistd.h i_unistd
7853 eval $inhdr
7854
7855 : see if getpgrp exists
7856 set getpgrp d_getpgrp
7857 eval $inlibc
7858
7859 case "$d_getpgrp" in
7860 "$define")
7861         echo " "
7862         echo "Checking to see which flavor of getpgrp is in use..."
7863         $cat >set.c <<EOP
7864 #$i_unistd I_UNISTD
7865 #include <sys/types.h>
7866 #ifdef I_UNISTD
7867 #  include <unistd.h>
7868 #endif
7869 int main()
7870 {
7871         if (getuid() == 0) {
7872                 printf("(I see you are running Configure as super-user...)\n");
7873                 setuid(1);
7874         }
7875 #ifdef TRY_BSD_PGRP
7876         if (getpgrp(1) == 0)
7877                 exit(0);
7878 #else
7879         if (getpgrp() > 0)
7880                 exit(0);
7881 #endif
7882         exit(1);
7883 }
7884 EOP
7885         if $cc -o set -DTRY_BSD_PGRP $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
7886                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
7887                 val="$define"
7888         elif $cc -o set $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
7889                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
7890                 val="$undef"
7891         else
7892                 echo "I can't seem to compile and run the test program."
7893                 if ./usg; then
7894                         xxx="a USG one, i.e. you use getpgrp()."
7895                 else
7896                         # SVR4 systems can appear rather BSD-ish.
7897                         case "$i_unistd" in
7898                         $undef)
7899                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
7900                                 val="$define"
7901                                 ;;
7902                         $define)
7903                                 xxx="probably a USG one, i.e. you use getpgrp()."
7904                                 val="$undef"
7905                                 ;;
7906                         esac
7907                 fi
7908                 echo "Assuming your getpgrp is $xxx" >&4
7909         fi
7910         ;;
7911 *) val="$undef";;
7912 esac
7913 set d_bsdgetpgrp
7914 eval $setvar
7915 $rm -f set set.c
7916
7917 : see if setpgrp exists
7918 set setpgrp d_setpgrp
7919 eval $inlibc
7920
7921 case "$d_setpgrp" in
7922 "$define")
7923         echo " "
7924         echo "Checking to see which flavor of setpgrp is in use..."
7925         $cat >set.c <<EOP
7926 #$i_unistd I_UNISTD
7927 #include <sys/types.h>
7928 #ifdef I_UNISTD
7929 #  include <unistd.h>
7930 #endif
7931 int main()
7932 {
7933         if (getuid() == 0) {
7934                 printf("(I see you are running Configure as super-user...)\n");
7935                 setuid(1);
7936         }
7937 #ifdef TRY_BSD_PGRP
7938         if (-1 == setpgrp(1, 1))
7939                 exit(0);
7940 #else
7941         if (setpgrp() != -1)
7942                 exit(0);
7943 #endif
7944         exit(1);
7945 }
7946 EOP
7947         if $cc -o set -DTRY_BSD_PGRP $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
7948                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
7949                 val="$define"
7950         elif $cc -o set $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
7951                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
7952                 val="$undef"
7953         else
7954                 echo "(I can't seem to compile and run the test program.)"
7955                 if ./usg; then
7956                         xxx="a USG one, i.e. you use setpgrp()."
7957                 else
7958                         # SVR4 systems can appear rather BSD-ish.
7959                         case "$i_unistd" in
7960                         $undef)
7961                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
7962                                 val="$define"
7963                                 ;;
7964                         $define)
7965                                 xxx="probably a USG one, i.e. you use setpgrp()."
7966                                 val="$undef"
7967                                 ;;
7968                         esac
7969                 fi
7970                 echo "Assuming your setpgrp is $xxx" >&4
7971         fi
7972         ;;
7973 *) val="$undef";;
7974 esac
7975 set d_bsdsetpgrp
7976 eval $setvar
7977 $rm -f set set.c
7978 : see if bzero exists
7979 set bzero d_bzero
7980 eval $inlibc
7981
7982 : see if signal is declared as pointer to function returning int or void
7983 echo " "
7984 xxx=`./findhdr signal.h`
7985 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
7986 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
7987         echo "You have int (*signal())() instead of void." >&4
7988         val="$undef"
7989 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
7990         echo "You have void (*signal())()." >&4
7991         val="$define"
7992 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
7993         echo "You have int (*signal())() instead of void." >&4
7994         val="$undef"
7995 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
7996         echo "You have void (*signal())()." >&4
7997         val="$define"
7998 else
7999         case "$d_voidsig" in
8000         '')
8001         echo "I can't determine whether signal handler returns void or int..." >&4
8002                 dflt=void
8003                 rp="What type does your signal handler return?"
8004                 . ./myread
8005                 case "$ans" in
8006                 v*) val="$define";;
8007                 *) val="$undef";;
8008                 esac;;
8009         "$define")
8010                 echo "As you already told me, signal handler returns void." >&4
8011                 val="$define"
8012                 ;;
8013         *)      echo "As you already told me, signal handler returns int." >&4
8014                 val="$undef"
8015                 ;;
8016         esac
8017 fi
8018 set d_voidsig
8019 eval $setvar
8020 case "$d_voidsig" in
8021 "$define") signal_t="void";;
8022 *) signal_t="int";;
8023 esac
8024 $rm -f $$.tmp
8025
8026 : check for ability to cast large floats to 32-bit ints.
8027 echo " "
8028 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
8029 if $test "$intsize" -ge 4; then
8030         xxx=int
8031 else
8032         xxx=long
8033 fi
8034 $cat >try.c <<EOCP
8035 #include <stdio.h>
8036 #include <sys/types.h>
8037 #include <signal.h>
8038 $signal_t blech(s) int s; { exit(3); }
8039 int main()
8040 {
8041         $xxx i32;
8042         double f, g;
8043         int result = 0;
8044         char str[16];
8045         signal(SIGFPE, blech);
8046
8047         /* Don't let compiler optimize the test away.  Store the number 
8048            in a writable string for gcc to pass to sscanf under HP/UX.
8049         */
8050         sprintf(str, "2147483647");
8051         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
8052         g = 10 * f;
8053         i32  = ($xxx) g;
8054
8055         /* x86 processors will probably give 0x8000 0000, which is a
8056        sign change.  We don't want that.  We want to mimic SPARC
8057            behavior here, which is to preserve the sign and give
8058            back 0x7fff ffff.
8059         */
8060         if (i32 != ($xxx) f)
8061                 result |= 1;
8062         exit(result);
8063 }
8064 EOCP
8065 set try
8066 if eval $compile_ok; then
8067         ./try
8068         yyy=$?
8069 else
8070         echo "(I can't seem to compile the test program--assuming it can't)"
8071         yyy=1
8072 fi
8073 case "$yyy" in
8074 0)      val="$define"
8075         echo "Yup, it can."
8076         ;;
8077 *)      val="$undef"
8078         echo "Nope, it can't."
8079         ;;
8080 esac
8081 set d_casti32
8082 eval $setvar
8083 $rm -f try try.*
8084
8085 : check for ability to cast negative floats to unsigned
8086 echo " "
8087 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
8088 $cat >try.c <<EOCP
8089 #include <stdio.h>
8090 #include <sys/types.h>
8091 #include <signal.h>
8092 $signal_t blech(s) int s; { exit(7); }
8093 $signal_t blech_in_list(s) int s; { exit(4); }
8094 unsigned long dummy_long(p) unsigned long p; { return p; }
8095 unsigned int dummy_int(p) unsigned int p; { return p; }
8096 unsigned short dummy_short(p) unsigned short p; { return p; }
8097 int main()
8098 {
8099         double f;
8100         unsigned long along;
8101         unsigned int aint;
8102         unsigned short ashort;
8103         int result = 0;
8104         char str[16];
8105         
8106         /* Frustrate gcc-2.7.2's optimizer which failed this test with
8107            a direct f = -123. assignment.  gcc-2.8.0 reportedly
8108            optimized the whole file away
8109         */
8110         /* Store the number in a writable string for gcc to pass to 
8111            sscanf under HP/UX.
8112         */
8113         sprintf(str, "-123");
8114         sscanf(str, "%lf", &f);  /* f = -123.; */
8115
8116         signal(SIGFPE, blech);
8117         along = (unsigned long)f;
8118         aint = (unsigned int)f;
8119         ashort = (unsigned short)f;
8120         if (along != (unsigned long)-123)
8121                 result |= 1;
8122         if (aint != (unsigned int)-123)
8123                 result |= 1;
8124         if (ashort != (unsigned short)-123)
8125                 result |= 1;
8126         sprintf(str, "1073741824.");
8127         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
8128         f = f + f;
8129         along = 0;
8130         along = (unsigned long)f;
8131         if (along != 0x80000000)
8132                 result |= 2;
8133         f -= 1.;
8134         along = 0;
8135         along = (unsigned long)f;
8136         if (along != 0x7fffffff)
8137                 result |= 1;
8138         f += 2.;
8139         along = 0;
8140         along = (unsigned long)f;
8141         if (along != 0x80000001)
8142                 result |= 2;
8143         if (result)
8144                 exit(result);
8145         signal(SIGFPE, blech_in_list);
8146         sprintf(str, "123.");
8147         sscanf(str, "%lf", &f);  /* f = 123.; */
8148         along = dummy_long((unsigned long)f);
8149         aint = dummy_int((unsigned int)f);
8150         ashort = dummy_short((unsigned short)f);
8151         if (along != (unsigned long)123)
8152                 result |= 4;
8153         if (aint != (unsigned int)123)
8154                 result |= 4;
8155         if (ashort != (unsigned short)123)
8156                 result |= 4;
8157         exit(result);
8158
8159 }
8160 EOCP
8161 set try
8162 if eval $compile_ok; then
8163         ./try
8164         castflags=$?
8165 else
8166         echo "(I can't seem to compile the test program--assuming it can't)"
8167         castflags=7
8168 fi
8169 case "$castflags" in
8170 0)      val="$define"
8171         echo "Yup, it can."
8172         ;;
8173 *)      val="$undef"
8174         echo "Nope, it can't."
8175         ;;
8176 esac
8177 set d_castneg
8178 eval $setvar
8179 $rm -f try.*
8180
8181 : see if vprintf exists
8182 echo " "
8183 if set vprintf val -f d_vprintf; eval $csym; $val; then
8184         echo 'vprintf() found.' >&4
8185         val="$define"
8186         $cat >vprintf.c <<'EOF'
8187 #include <varargs.h>
8188
8189 int main() { xxx("foo"); }
8190
8191 xxx(va_alist)
8192 va_dcl
8193 {
8194         va_list args;
8195         char buf[10];
8196
8197         va_start(args);
8198         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
8199 }
8200 EOF
8201         set vprintf
8202         if eval $compile && ./vprintf; then
8203                 echo "Your vsprintf() returns (int)." >&4
8204                 val2="$undef"
8205         else
8206                 echo "Your vsprintf() returns (char*)." >&4
8207                 val2="$define"
8208         fi
8209 else
8210         echo 'vprintf() NOT found.' >&4
8211                 val="$undef"
8212                 val2="$undef"
8213 fi
8214 set d_vprintf
8215 eval $setvar
8216 val=$val2
8217 set d_charvspr
8218 eval $setvar
8219
8220 : see if chown exists
8221 set chown d_chown
8222 eval $inlibc
8223
8224 : see if chroot exists
8225 set chroot d_chroot
8226 eval $inlibc
8227
8228 : see if chsize exists
8229 set chsize d_chsize
8230 eval $inlibc
8231
8232 : check for const keyword
8233 echo " "
8234 echo 'Checking to see if your C compiler knows about "const"...' >&4
8235 $cat >const.c <<'EOCP'
8236 typedef struct spug { int drokk; } spug;
8237 int main()
8238 {
8239         const char *foo;
8240         const spug y;
8241 }
8242 EOCP
8243 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
8244         val="$define"
8245         echo "Yup, it does."
8246 else
8247         val="$undef"
8248         echo "Nope, it doesn't."
8249 fi
8250 set d_const
8251 eval $setvar
8252
8253 : see if crypt exists
8254 echo " "
8255 if set crypt val -f d_crypt; eval $csym; $val; then
8256         echo 'crypt() found.' >&4
8257         val="$define"
8258         cryptlib=''
8259 else
8260         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
8261         if $test -z "$cryptlib"; then
8262                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
8263         else
8264                 cryptlib=-lcrypt
8265         fi
8266         if $test -z "$cryptlib"; then
8267                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
8268         else
8269                 cryptlib=-lcrypt
8270         fi
8271         if $test -z "$cryptlib"; then
8272                 cryptlib=`./loc libcrypt$_a "" $libpth`
8273         else
8274                 cryptlib=-lcrypt
8275         fi
8276         if $test -z "$cryptlib"; then
8277                 echo 'crypt() NOT found.' >&4
8278                 val="$undef"
8279         else
8280                 val="$define"
8281         fi
8282 fi
8283 set d_crypt
8284 eval $setvar
8285
8286 : get csh whereabouts
8287 case "$csh" in
8288 'csh') val="$undef" ;;
8289 *) val="$define" ;;
8290 esac
8291 set d_csh
8292 eval $setvar
8293 : Respect a hint or command line value for full_csh.
8294 case "$full_csh" in
8295 '') full_csh=$csh ;;
8296 esac
8297
8298 : see if cuserid exists
8299 set cuserid d_cuserid
8300 eval $inlibc
8301
8302 : see if this is a limits.h system
8303 set limits.h i_limits
8304 eval $inhdr
8305
8306 : see if this is a float.h system
8307 set float.h i_float
8308 eval $inhdr
8309
8310 : See if number of significant digits in a double precision number is known
8311 echo " "
8312 $cat >dbl_dig.c <<EOM
8313 #$i_limits I_LIMITS
8314 #$i_float I_FLOAT
8315 #ifdef I_LIMITS
8316 #include <limits.h>
8317 #endif
8318 #ifdef I_FLOAT
8319 #include <float.h>
8320 #endif
8321 #ifdef DBL_DIG
8322 printf("Contains DBL_DIG");
8323 #endif
8324 EOM
8325 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
8326 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
8327         echo "DBL_DIG found." >&4
8328         val="$define"
8329 else
8330         echo "DBL_DIG NOT found." >&4
8331         val="$undef"
8332 fi
8333 $rm -f dbl_dig.?
8334 set d_dbl_dig
8335 eval $setvar
8336
8337 : see if difftime exists
8338 set difftime d_difftime
8339 eval $inlibc
8340
8341 : see if this is a dirent system
8342 echo " "
8343 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
8344         val="$define"
8345         echo "<dirent.h> found." >&4
8346 else
8347         val="$undef"
8348         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
8349                 echo "<sys/dir.h> found." >&4
8350                 echo " "
8351         else
8352                 xinc=`./findhdr sys/ndir.h`
8353         fi
8354         echo "<dirent.h> NOT found." >&4
8355 fi
8356 set i_dirent
8357 eval $setvar
8358
8359 : Look for type of directory structure.
8360 echo " "
8361 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8362
8363 case "$direntrytype" in
8364 ''|' ')
8365         case "$i_dirent" in
8366         $define) guess1='struct dirent' ;;
8367         *) guess1='struct direct'  ;;
8368         esac
8369         ;;
8370 *)      guess1="$direntrytype"
8371         ;;
8372 esac
8373
8374 case "$guess1" in
8375 'struct dirent') guess2='struct direct' ;;
8376 *) guess2='struct dirent' ;;
8377 esac
8378                 
8379 if $contains "$guess1" try.c >/dev/null 2>&1; then
8380         direntrytype="$guess1"
8381         echo "Your directory entries are $direntrytype." >&4
8382 elif $contains "$guess2" try.c >/dev/null 2>&1; then
8383         direntrytype="$guess2"
8384         echo "Your directory entries seem to be $direntrytype." >&4
8385 else
8386         echo "I don't recognize your system's directory entries." >&4
8387         rp="What type is used for directory entries on this system?"
8388         dflt="$guess1"
8389         . ./myread
8390         direntrytype="$ans"
8391 fi
8392 $rm -f try.c
8393
8394
8395 : see if the directory entry stores field length
8396 echo " "
8397 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8398 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
8399         echo "Good, your directory entry keeps length information in d_namlen." >&4
8400         val="$define"
8401 else
8402         echo "Your directory entry does not know about the d_namlen field." >&4
8403         val="$undef"
8404 fi
8405 set d_dirnamlen
8406 eval $setvar
8407 $rm -f try.c
8408
8409 : see if dlerror exists
8410 xxx_runnm="$runnm"
8411 runnm=false
8412 set dlerror d_dlerror
8413 eval $inlibc
8414 runnm="$xxx_runnm"
8415
8416 : see if dlfcn is available
8417 set dlfcn.h i_dlfcn
8418 eval $inhdr
8419
8420 case "$usedl" in
8421 $define|y|true)
8422         $cat << EOM
8423
8424 On a few systems, the dynamically loaded modules that perl generates and uses
8425 will need a different extension than shared libs. The default will probably
8426 be appropriate.
8427
8428 EOM
8429         case "$dlext" in
8430         '')     dflt="$so" ;;
8431         *)      dflt="$dlext" ;;
8432         esac
8433         rp='What is the extension of dynamically loaded modules'
8434         . ./myread
8435         dlext="$ans"
8436         ;;
8437 *)
8438         dlext="none"
8439         ;;
8440 esac
8441
8442 : Check if dlsym need a leading underscore
8443 echo " "
8444 val="$undef"
8445
8446 case "$dlsrc" in
8447 dl_dlopen.xs)
8448         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
8449         $cat >dyna.c <<'EOM'
8450 fred () { }
8451 EOM
8452
8453 $cat >fred.c<<EOM
8454
8455 #include <stdio.h>
8456 #$i_dlfcn I_DLFCN
8457 #ifdef I_DLFCN
8458 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
8459 #else
8460 #include <sys/types.h>
8461 #include <nlist.h>
8462 #include <link.h>
8463 #endif
8464
8465 extern int fred() ;
8466
8467 int main()
8468 {
8469     void * handle ;
8470     void * symbol ;
8471 #ifndef RTLD_LAZY
8472     int mode = 1 ;
8473 #else
8474     int mode = RTLD_LAZY ;
8475 #endif
8476     handle = dlopen("./dyna.$dlext", mode) ;
8477     if (handle == NULL) {
8478         printf ("1\n") ;
8479         fflush (stdout) ;
8480         exit(0);
8481     }
8482     symbol = dlsym(handle, "fred") ;
8483     if (symbol == NULL) {
8484         /* try putting a leading underscore */
8485         symbol = dlsym(handle, "_fred") ;
8486         if (symbol == NULL) {
8487             printf ("2\n") ;
8488             fflush (stdout) ;
8489             exit(0);
8490         }
8491         printf ("3\n") ;
8492     }
8493     else
8494         printf ("4\n") ;
8495     fflush (stdout) ;
8496     exit(0);
8497 }
8498 EOM
8499         : Call the object file tmp-dyna.o in case dlext=o.
8500         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
8501                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
8502                 $ld -o dyna.$dlext $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && 
8503                 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
8504                 xxx=`./fred`
8505                 case $xxx in
8506                 1)      echo "Test program failed using dlopen." >&4
8507                         echo "Perhaps you should not use dynamic loading." >&4;;
8508                 2)      echo "Test program failed using dlsym." >&4
8509                         echo "Perhaps you should not use dynamic loading." >&4;;
8510                 3)      echo "dlsym needs a leading underscore" >&4
8511                         val="$define" ;;
8512                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
8513                 esac
8514         else
8515                 echo "I can't compile and run the test program." >&4
8516                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
8517         fi
8518         ;;
8519 esac
8520                 
8521 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
8522
8523 set d_dlsymun
8524 eval $setvar
8525
8526 hasproto='varname=$1; func=$2; shift; shift;
8527 while $test $# -ge 2; do
8528         case "$1" in
8529         $define) echo "#include <$2>";;
8530         esac ;
8531     shift 2;
8532 done > try.c;
8533 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
8534 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
8535         echo "$func() prototype found.";
8536         val="$define";
8537 else
8538         echo "$func() prototype NOT found.";
8539         val="$undef";
8540 fi;
8541 set $varname;
8542 eval $setvar;
8543 $rm -f try.c tryout.c'
8544
8545 : see if prototype for drand48 is available
8546 echo " "
8547 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
8548 eval $hasproto
8549
8550 : see if dup2 exists
8551 set dup2 d_dup2
8552 eval $inlibc
8553
8554 : see if eaccess exists
8555 set eaccess d_eaccess
8556 eval $inlibc
8557
8558 : see if endgrent exists
8559 set endgrent d_endgrent
8560 eval $inlibc
8561
8562 : see if endhostent exists
8563 set endhostent d_endhent
8564 eval $inlibc
8565
8566 : see if endnetent exists
8567 set endnetent d_endnent
8568 eval $inlibc
8569
8570 : see if endprotoent exists
8571 set endprotoent d_endpent
8572 eval $inlibc
8573
8574 : see if endpwent exists
8575 set endpwent d_endpwent
8576 eval $inlibc
8577
8578 : see if endservent exists
8579 set endservent d_endsent
8580 eval $inlibc
8581
8582 : Locate the flags for 'open()'
8583 echo " "
8584 $cat >open3.c <<'EOCP'
8585 #include <sys/types.h>
8586 #ifdef I_FCNTL
8587 #include <fcntl.h>
8588 #endif
8589 #ifdef I_SYS_FILE
8590 #include <sys/file.h>
8591 #endif
8592 int main() {
8593         if(O_RDONLY);
8594 #ifdef O_TRUNC
8595         exit(0);
8596 #else
8597         exit(1);
8598 #endif
8599 }
8600 EOCP
8601 : check sys/file.h first to get FREAD on Sun
8602 if $test `./findhdr sys/file.h` && \
8603                 set open3 -DI_SYS_FILE && eval $compile; then
8604         h_sysfile=true;
8605         echo "<sys/file.h> defines the O_* constants..." >&4
8606         if ./open3; then
8607                 echo "and you have the 3 argument form of open()." >&4
8608                 val="$define"
8609         else
8610                 echo "but not the 3 argument form of open().  Oh, well." >&4
8611                 val="$undef"
8612         fi
8613 elif $test `./findhdr fcntl.h` && \
8614                 set open3 -DI_FCNTL && eval $compile; then
8615         h_fcntl=true;
8616         echo "<fcntl.h> defines the O_* constants..." >&4
8617         if ./open3; then
8618                 echo "and you have the 3 argument form of open()." >&4
8619                 val="$define"
8620         else
8621                 echo "but not the 3 argument form of open().  Oh, well." >&4
8622                 val="$undef"
8623         fi
8624 else
8625         val="$undef"
8626         echo "I can't find the O_* constant definitions!  You got problems." >&4
8627 fi
8628 set d_open3
8629 eval $setvar
8630 $rm -f open3*
8631
8632 : see which of string.h or strings.h is needed
8633 echo " "
8634 strings=`./findhdr string.h`
8635 if $test "$strings" && $test -r "$strings"; then
8636         echo "Using <string.h> instead of <strings.h>." >&4
8637         val="$define"
8638 else
8639         val="$undef"
8640         strings=`./findhdr strings.h`
8641         if $test "$strings" && $test -r "$strings"; then
8642                 echo "Using <strings.h> instead of <string.h>." >&4
8643         else
8644                 echo "No string header found -- You'll surely have problems." >&4
8645         fi
8646 fi
8647 set i_string
8648 eval $setvar
8649 case "$i_string" in
8650 "$undef") strings=`./findhdr strings.h`;;
8651 *)        strings=`./findhdr string.h`;;
8652 esac
8653
8654 : check for non-blocking I/O stuff
8655 case "$h_sysfile" in
8656 true) echo "#include <sys/file.h>" > head.c;;
8657 *)
8658         case "$h_fcntl" in
8659         true) echo "#include <fcntl.h>" > head.c;;
8660         *) echo "#include <sys/fcntl.h>" > head.c;;
8661         esac
8662         ;;
8663 esac
8664 echo " "
8665 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
8666 case "$o_nonblock" in
8667 '')
8668         $cat head.c > try.c
8669         $cat >>try.c <<'EOCP'
8670 #include <stdio.h>
8671 int main() {
8672 #ifdef O_NONBLOCK
8673         printf("O_NONBLOCK\n");
8674         exit(0);
8675 #endif
8676 #ifdef O_NDELAY
8677         printf("O_NDELAY\n");
8678         exit(0);
8679 #endif
8680 #ifdef FNDELAY
8681         printf("FNDELAY\n");
8682         exit(0);
8683 #endif
8684         exit(0);
8685 }
8686 EOCP
8687         set try
8688         if eval $compile_ok; then
8689                 o_nonblock=`./try`
8690                 case "$o_nonblock" in
8691                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
8692                 *) echo "Seems like we can use $o_nonblock.";;
8693                 esac
8694         else
8695                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
8696         fi
8697         ;;
8698 *) echo "Using $hint value $o_nonblock.";;
8699 esac
8700 $rm -f try try.* .out core
8701
8702 echo " "
8703 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
8704 case "$eagain" in
8705 '')
8706         $cat head.c > try.c
8707         $cat >>try.c <<EOCP
8708 #include <errno.h>
8709 #include <sys/types.h>
8710 #include <signal.h>
8711 #include <stdio.h> 
8712 #define MY_O_NONBLOCK $o_nonblock
8713 #ifndef errno  /* XXX need better Configure test */
8714 extern int errno;
8715 #endif
8716 #$i_unistd I_UNISTD
8717 #ifdef I_UNISTD
8718 #include <unistd.h>
8719 #endif
8720 #$i_string I_STRING
8721 #ifdef I_STRING
8722 #include <string.h>
8723 #else
8724 #include <strings.h>
8725 #endif
8726 $signal_t blech(x) int x; { exit(3); }
8727 EOCP
8728         $cat >> try.c <<'EOCP'
8729 int main()
8730 {
8731         int pd[2];
8732         int pu[2];
8733         char buf[1];
8734         char string[100];
8735
8736         pipe(pd);       /* Down: child -> parent */
8737         pipe(pu);       /* Up: parent -> child */
8738         if (0 != fork()) {
8739                 int ret;
8740                 close(pd[1]);   /* Parent reads from pd[0] */
8741                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
8742                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
8743                         exit(1);
8744                 signal(SIGALRM, blech);
8745                 alarm(5);
8746                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
8747                         exit(2);
8748                 sprintf(string, "%d\n", ret);
8749                 write(2, string, strlen(string));
8750                 alarm(0);
8751 #ifdef EAGAIN
8752                 if (errno == EAGAIN) {
8753                         printf("EAGAIN\n");
8754                         goto ok;
8755                 }
8756 #endif
8757 #ifdef EWOULDBLOCK
8758                 if (errno == EWOULDBLOCK)
8759                         printf("EWOULDBLOCK\n");
8760 #endif
8761         ok:
8762                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
8763                 sleep(2);                               /* Give it time to close our pipe */
8764                 alarm(5);
8765                 ret = read(pd[0], buf, 1);      /* Should read EOF */
8766                 alarm(0);
8767                 sprintf(string, "%d\n", ret);
8768                 write(3, string, strlen(string));
8769                 exit(0);
8770         }
8771
8772         close(pd[0]);                   /* We write to pd[1] */
8773         close(pu[1]);                   /* We read from pu[0] */
8774         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
8775         close(pd[1]);                   /* Pipe pd is now fully closed! */
8776         exit(0);                                /* Bye bye, thank you for playing! */
8777 }
8778 EOCP
8779         set try
8780         if eval $compile_ok; then
8781                 echo "$startsh" >mtry
8782                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
8783                 chmod +x mtry
8784                 ./mtry >/dev/null 2>&1
8785                 case $? in
8786                 0) eagain=`$cat try.out`;;
8787                 1) echo "Could not perform non-blocking setting!";;
8788                 2) echo "I did a successful read() for something that was not there!";;
8789                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
8790                 *) echo "Something terribly wrong happened during testing.";;
8791                 esac
8792                 rd_nodata=`$cat try.ret`
8793                 echo "A read() system call with no data present returns $rd_nodata."
8794                 case "$rd_nodata" in
8795                 0|-1) ;;
8796                 *)
8797                         echo "(That's peculiar, fixing that to be -1.)"
8798                         rd_nodata=-1
8799                         ;;
8800                 esac
8801                 case "$eagain" in
8802                 '')
8803                         echo "Forcing errno EAGAIN on read() with no data available."
8804                         eagain=EAGAIN
8805                         ;;
8806                 *)
8807                         echo "Your read() sets errno to $eagain when no data is available."
8808                         ;;
8809                 esac
8810                 status=`$cat try.err`
8811                 case "$status" in
8812                 0) echo "And it correctly returns 0 to signal EOF.";;
8813                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
8814                 *) echo "However, your read() returns '$status' on EOF??";;
8815                 esac
8816                 val="$define"
8817                 if test "$status" = "$rd_nodata"; then
8818                         echo "WARNING: you can't distinguish between EOF and no data!"
8819                         val="$undef"
8820                 fi
8821         else
8822                 echo "I can't compile the test program--assuming errno EAGAIN will do."
8823                 eagain=EAGAIN
8824         fi
8825         set d_eofnblk
8826         eval $setvar
8827         ;;
8828 *)
8829         echo "Using $hint value $eagain."
8830         echo "Your read() returns $rd_nodata when no data is present."
8831         case "$d_eofnblk" in
8832         "$define") echo "And you can see EOF because read() returns 0.";;
8833         "$undef") echo "But you can't see EOF status from read() returned value.";;
8834         *)
8835                 echo "(Assuming you can't see EOF status from read anyway.)"
8836                 d_eofnblk=$undef
8837                 ;;
8838         esac
8839         ;;
8840 esac
8841 $rm -f try try.* .out core head.c mtry
8842
8843 : see if fchmod exists
8844 set fchmod d_fchmod
8845 eval $inlibc
8846
8847 : see if fchown exists
8848 set fchown d_fchown
8849 eval $inlibc
8850
8851 : see if this is an fcntl system
8852 set fcntl d_fcntl
8853 eval $inlibc
8854
8855 echo " "
8856 : See if fcntl-based locking works.
8857 $cat >try.c <<'EOCP'
8858 #include <stdlib.h>
8859 #include <unistd.h>
8860 #include <fcntl.h>
8861 int main() {
8862 #if defined(F_SETLK) && defined(F_SETLKW)
8863      struct flock flock;
8864      int retval, fd;
8865      fd = open("try.c", O_RDONLY);
8866      flock.l_type = F_RDLCK;
8867      flock.l_whence = SEEK_SET;
8868      flock.l_start = flock.l_len = 0;
8869      retval = fcntl(fd, F_SETLK, &flock);
8870      close(fd);
8871      (retval < 0 ? exit(2) : exit(0));
8872 #else
8873      exit(2);
8874 #endif
8875 }
8876 EOCP
8877 echo "Checking if fcntl-based file locking works... "
8878 case "$d_fcntl" in
8879 "$define")
8880         set try
8881         if eval $compile_ok; then
8882                 if ./try; then
8883                         echo "Yes, it seems to work."
8884                         val="$define"
8885                 else
8886                         echo "Nope, it didn't work."
8887                         val="$undef"
8888                 fi
8889         else
8890                 echo "I'm unable to compile the test program, so I'll assume not."
8891                 val="$undef"
8892         fi
8893         ;;
8894 *) val="$undef";
8895         echo "Nope, since you don't even have fcntl()."
8896         ;;
8897 esac
8898 set d_fcntl_can_lock
8899 eval $setvar
8900 $rm -f try*
8901
8902
8903 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
8904 while $test $# -ge 2; do
8905         case "$1" in
8906         $define) echo "#include <$2>";;
8907         esac ;
8908     shift 2;
8909 done > try.c;
8910 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
8911 set try;
8912 if eval $compile; then
8913         val="$define";
8914 else
8915         val="$undef";
8916 fi;
8917 set $varname;
8918 eval $setvar;
8919 $rm -f try.c try.o'
8920
8921 socketlib=''
8922 sockethdr=''
8923 : see whether socket exists
8924 echo " "
8925 $echo $n "Hmm... $c" >&4
8926 if set socket val -f d_socket; eval $csym; $val; then
8927         echo "Looks like you have Berkeley networking support." >&4
8928         d_socket="$define"
8929         if set setsockopt val -f; eval $csym; $val; then
8930                 d_oldsock="$undef"
8931         else
8932                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
8933                 d_oldsock="$define"
8934         fi
8935 else
8936         if $contains socklib libc.list >/dev/null 2>&1; then
8937                 echo "Looks like you have Berkeley networking support." >&4
8938                 d_socket="$define"
8939                 : we will have to assume that it supports the 4.2 BSD interface
8940                 d_oldsock="$undef"
8941         else
8942                 echo "You don't have Berkeley networking in libc$_a..." >&4
8943                 if test "X$d_socket" = "X$define"; then
8944                    echo "...but you seem to believe that you have sockets." >&4
8945                 else
8946                         for net in net socket
8947                         do
8948                                 if test -f /usr/lib/lib$net$_a; then
8949                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
8950                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
8951                                         if $contains socket libc.list >/dev/null 2>&1; then
8952                                                 d_socket="$define"
8953                                                 socketlib="-l$net"
8954                                                 case "$net" in
8955                                                 net)
8956                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
8957                                                         sockethdr="-I/usr/netinclude"
8958                                                         ;;
8959                                                 esac
8960                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
8961                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
8962                                                         d_oldsock="$undef"
8963                                                 else
8964                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
8965                                                         d_oldsock="$define"
8966                                                 fi
8967                                                 break
8968                                         fi
8969                                 fi
8970                         done
8971                         if test "X$d_socket" != "X$define"; then
8972                            echo "or anywhere else I see." >&4
8973                            d_socket="$undef"
8974                            d_oldsock="$undef"
8975                         fi
8976                 fi
8977         fi
8978 fi
8979
8980 : see if socketpair exists
8981 set socketpair d_sockpair
8982 eval $inlibc
8983
8984
8985 echo " "
8986 echo "Checking the availability of certain socket constants..." >& 4
8987 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
8988         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
8989         $cat >try.c <<EOF
8990 #include <sys/types.h>
8991 #include <sys/socket.h>
8992 int main() {
8993     int i = $ENUM;
8994 }
8995 EOF
8996         val="$undef"
8997         set try; if eval $compile; then
8998                 val="$define"
8999         fi
9000         set d_${enum}; eval $setvar
9001         $rm -f try.c try
9002 done
9003
9004 : see if sys/select.h has to be included
9005 set sys/select.h i_sysselct
9006 eval $inhdr
9007
9008 : see if we should include time.h, sys/time.h, or both
9009 echo " "
9010 if test "X$timeincl" = X; then
9011         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
9012         $echo $n "I'm now running the test program...$c"
9013         $cat >try.c <<'EOCP'
9014 #include <sys/types.h>
9015 #ifdef I_TIME
9016 #include <time.h>
9017 #endif
9018 #ifdef I_SYSTIME
9019 #ifdef SYSTIMEKERNEL
9020 #define KERNEL
9021 #endif
9022 #include <sys/time.h>
9023 #endif
9024 #ifdef I_SYSSELECT
9025 #include <sys/select.h>
9026 #endif
9027 int main()
9028 {
9029         struct tm foo;
9030 #ifdef S_TIMEVAL
9031         struct timeval bar;
9032 #endif
9033 #ifdef S_TIMEZONE
9034         struct timezone tzp;
9035 #endif
9036         if (foo.tm_sec == foo.tm_sec)
9037                 exit(0);
9038 #ifdef S_TIMEVAL
9039         if (bar.tv_sec == bar.tv_sec)
9040                 exit(0);
9041 #endif
9042         exit(1);
9043 }
9044 EOCP
9045         flags=''
9046         for s_timezone in '-DS_TIMEZONE' ''; do
9047         sysselect=''
9048         for s_timeval in '-DS_TIMEVAL' ''; do
9049         for i_systimek in '' '-DSYSTIMEKERNEL'; do
9050         for i_time in '' '-DI_TIME'; do
9051         for i_systime in '-DI_SYSTIME' ''; do
9052                 case "$flags" in
9053                 '') $echo $n ".$c"
9054                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
9055                         if eval $compile; then
9056                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
9057                                 shift
9058                                 flags="$*"
9059                                 echo " "
9060                                 $echo $n "Succeeded with $flags$c"
9061                         fi
9062                         ;;
9063                 esac
9064         done
9065         done
9066         done
9067         done
9068         done
9069         timeincl=''
9070         echo " "
9071         case "$flags" in
9072         *SYSTIMEKERNEL*) i_systimek="$define"
9073                 timeincl=`./findhdr sys/time.h`
9074                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
9075         *) i_systimek="$undef";;
9076         esac
9077         case "$flags" in
9078         *I_TIME*) i_time="$define"
9079                 timeincl=`./findhdr time.h`" $timeincl"
9080                 echo "We'll include <time.h>." >&4;;
9081         *) i_time="$undef";;
9082         esac
9083         case "$flags" in
9084         *I_SYSTIME*) i_systime="$define"
9085                 timeincl=`./findhdr sys/time.h`" $timeincl"
9086                 echo "We'll include <sys/time.h>." >&4;;
9087         *) i_systime="$undef";;
9088         esac
9089         $rm -f try.c try
9090 fi
9091
9092 : check for fd_set items
9093 $cat <<EOM
9094
9095 Checking to see how well your C compiler handles fd_set and friends ...
9096 EOM
9097 $cat >fd_set.c <<EOCP
9098 #$i_systime I_SYS_TIME
9099 #$i_sysselct I_SYS_SELECT
9100 #$d_socket HAS_SOCKET
9101 #include <sys/types.h>
9102 #ifdef HAS_SOCKET
9103 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
9104 #endif
9105 #ifdef I_SYS_TIME
9106 #include <sys/time.h>
9107 #endif
9108 #ifdef I_SYS_SELECT
9109 #include <sys/select.h>
9110 #endif
9111 int main() {
9112         fd_set fds;
9113
9114 #ifdef TRYBITS
9115         if(fds.fds_bits);
9116 #endif
9117
9118 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
9119         exit(0);
9120 #else
9121         exit(1);
9122 #endif
9123 }
9124 EOCP
9125 set fd_set -DTRYBITS
9126 if eval $compile; then
9127         d_fds_bits="$define"
9128         d_fd_set="$define"
9129         echo "Well, your system knows about the normal fd_set typedef..." >&4
9130         if ./fd_set; then
9131                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
9132                 d_fd_macros="$define"
9133         else
9134                 $cat >&4 <<'EOM'
9135 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
9136 EOM
9137                 d_fd_macros="$undef"
9138         fi
9139 else
9140         $cat <<'EOM'
9141 Hmm, your compiler has some difficulty with fd_set.  Checking further...
9142 EOM
9143         set fd_set
9144         if eval $compile; then
9145                 d_fds_bits="$undef"
9146                 d_fd_set="$define"
9147                 echo "Well, your system has some sort of fd_set available..." >&4
9148                 if ./fd_set; then
9149                         echo "and you have the normal fd_set macros." >&4
9150                         d_fd_macros="$define"
9151                 else
9152                         $cat <<'EOM'
9153 but not the normal fd_set macros!  Gross!  More work for me...
9154 EOM
9155                         d_fd_macros="$undef"
9156                 fi
9157         else
9158         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
9159                 d_fd_set="$undef"
9160                 d_fds_bits="$undef"
9161                 d_fd_macros="$undef"
9162         fi
9163 fi
9164 $rm -f fd_set*
9165
9166 : see if fgetpos exists
9167 set fgetpos d_fgetpos
9168 eval $inlibc
9169
9170 : see if flock exists
9171 set flock d_flock
9172 eval $inlibc
9173
9174 : see if fork exists
9175 set fork d_fork
9176 eval $inlibc
9177
9178 : see if pathconf exists
9179 set pathconf d_pathconf
9180 eval $inlibc
9181
9182 : see if fpathconf exists
9183 set fpathconf d_fpathconf
9184 eval $inlibc
9185
9186
9187 : check for fpos64_t
9188 echo " "
9189 echo "Checking to see if you have fpos64_t..." >&4
9190 $cat >try.c <<EOCP
9191 #include <stdio.h>
9192 int main() { fpos64_t x = 7; }
9193 EOCP
9194 set try
9195 if eval $compile; then
9196         val="$define"
9197         echo "You have fpos64_t."
9198 else
9199         val="$undef"
9200         echo "You do not have fpos64_t."
9201         case "$fpossize" in
9202         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
9203         esac
9204 fi
9205 $rm -f try.* try
9206 set d_fpos64_t
9207 eval $setvar
9208
9209 : see if frexpl exists
9210 set frexpl d_frexpl
9211 eval $inlibc
9212
9213 hasstruct='varname=$1; struct=$2; shift; shift;
9214 while $test $# -ge 2; do
9215         case "$1" in
9216         $define) echo "#include <$2>";;
9217         esac ;
9218     shift 2;
9219 done > try.c;
9220 echo "int main () { struct $struct foo; }" >> try.c;
9221 set try;
9222 if eval $compile; then
9223         val="$define";
9224 else
9225         val="$undef";
9226 fi;
9227 set $varname;
9228 eval $setvar;
9229 $rm -f try.c try.o'
9230
9231 : see if this is a sys/param system
9232 set sys/param.h i_sysparam
9233 eval $inhdr
9234
9235 : see if this is a sys/mount.h system
9236 set sys/mount.h i_sysmount
9237 eval $inhdr
9238
9239 : see if sys/types.h has to be included
9240 set sys/types.h i_systypes
9241 eval $inhdr
9242
9243
9244 echo " "
9245 echo "Checking to see if your system supports struct fs_data..." >&4
9246 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
9247 eval $hasstruct
9248 case "$d_fs_data_s" in
9249 "$define")      echo "Yes, it does."   ;;
9250 *)              echo "No, it doesn't." ;;
9251 esac
9252
9253 : see if fseeko exists
9254 set fseeko d_fseeko
9255 eval $inlibc
9256 case "$longsize" in
9257 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
9258 esac
9259
9260 : see if fsetpos exists
9261 set fsetpos d_fsetpos
9262 eval $inlibc
9263
9264
9265 : see if fstatfs exists
9266 set fstatfs d_fstatfs
9267 eval $inlibc
9268
9269
9270 : see if statvfs exists
9271 set statvfs d_statvfs
9272 eval $inlibc
9273
9274 : see if fstatvfs exists
9275 set fstatvfs d_fstatvfs
9276 eval $inlibc
9277
9278
9279 : see if ftello exists
9280 set ftello d_ftello
9281 eval $inlibc
9282 case "$longsize" in
9283 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
9284 esac
9285
9286 : see if getcwd exists
9287 set getcwd d_getcwd
9288 eval $inlibc
9289
9290 : see if getespwnam exists
9291 set getespwnam d_getespwnam
9292 eval $inlibc
9293
9294
9295 : see if getfsstat exists
9296 set getfsstat d_getfsstat
9297 eval $inlibc
9298
9299 : see if getgrent exists
9300 set getgrent d_getgrent
9301 eval $inlibc
9302
9303 : see if gethostbyaddr exists
9304 set gethostbyaddr d_gethbyaddr
9305 eval $inlibc
9306
9307 : see if gethostbyname exists
9308 set gethostbyname d_gethbyname
9309 eval $inlibc
9310
9311 : see if gethostent exists
9312 set gethostent d_gethent
9313 eval $inlibc
9314
9315 : see how we will look up host name
9316 echo " "
9317 call=''
9318 if set gethostname val -f d_gethname; eval $csym; $val; then
9319         echo 'gethostname() found.' >&4
9320         d_gethname="$define"
9321         call=gethostname
9322 fi
9323 if set uname val -f d_uname; eval $csym; $val; then
9324         if ./xenix; then
9325                 $cat <<'EOM'
9326 uname() was found, but you're running xenix, and older versions of xenix
9327 have a broken uname(). If you don't really know whether your xenix is old
9328 enough to have a broken system call, use the default answer.
9329
9330 EOM
9331                 dflt=y
9332                 case "$d_uname" in
9333                 "$define") dflt=n;;
9334                 esac
9335                 rp='Is your uname() broken?'
9336                 . ./myread
9337                 case "$ans" in
9338                 n*) d_uname="$define"; call=uname;;
9339                 esac
9340         else
9341                 echo 'uname() found.' >&4
9342                 d_uname="$define"
9343                 case "$call" in
9344                 '') call=uname ;;
9345                 esac
9346         fi
9347 fi
9348 case "$d_gethname" in
9349 '') d_gethname="$undef";;
9350 esac
9351 case "$d_uname" in
9352 '') d_uname="$undef";;
9353 esac
9354 case "$d_uname$d_gethname" in
9355 *define*)
9356         dflt=n
9357         cat <<EOM
9358  
9359 Every now and then someone has a $call() that lies about the hostname
9360 but can't be fixed for political or economic reasons.  If you wish, I can
9361 pretend $call() isn't there and maybe compute hostname at run-time
9362 thanks to the '$phostname' command.
9363
9364 EOM
9365         rp="Shall I ignore $call() from now on?"
9366         . ./myread
9367         case "$ans" in
9368         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
9369         esac;;
9370 esac
9371 case "$phostname" in
9372 '') aphostname='';;
9373 *) case "$aphostname" in
9374         /*) ;;
9375         *) set X $phostname
9376                 shift
9377                 file=$1
9378                 shift
9379                 file=`./loc $file $file $pth`
9380                 aphostname=`echo $file $*`
9381                 ;;
9382         esac
9383         ;;
9384 esac
9385 case "$d_uname$d_gethname" in
9386 *define*) ;;
9387 *)
9388         case "$phostname" in
9389         '')
9390                 echo "There will be no way for $package to get your hostname." >&4;;
9391         *)
9392         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
9393                 ;;
9394         esac;;
9395 esac
9396 case "$d_phostname" in
9397 '') d_phostname="$undef";;
9398 esac
9399
9400 : see if this is a netdb.h system
9401 set netdb.h i_netdb
9402 eval $inhdr
9403
9404 : see if prototypes for various gethostxxx netdb.h functions are available
9405 echo " "
9406 set d_gethostprotos gethostent $i_netdb netdb.h
9407 eval $hasproto
9408
9409 : see if getlogin exists
9410 set getlogin d_getlogin
9411 eval $inlibc
9412
9413 : see if getmnt exists
9414 set getmnt d_getmnt
9415 eval $inlibc
9416
9417 : see if getmntent exists
9418 set getmntent d_getmntent
9419 eval $inlibc
9420
9421 : see if getnetbyaddr exists
9422 set getnetbyaddr d_getnbyaddr
9423 eval $inlibc
9424
9425 : see if getnetbyname exists
9426 set getnetbyname d_getnbyname
9427 eval $inlibc
9428
9429 : see if getnetent exists
9430 set getnetent d_getnent
9431 eval $inlibc
9432
9433 : see if prototypes for various getnetxxx netdb.h functions are available
9434 echo " "
9435 set d_getnetprotos getnetent $i_netdb netdb.h
9436 eval $hasproto
9437
9438 : see if getpagesize exists
9439 set getpagesize d_getpagsz
9440 eval $inlibc
9441
9442
9443 : see if getprotobyname exists
9444 set getprotobyname d_getpbyname
9445 eval $inlibc
9446
9447 : see if getprotobynumber exists
9448 set getprotobynumber d_getpbynumber
9449 eval $inlibc
9450
9451 : see if getprotoent exists
9452 set getprotoent d_getpent
9453 eval $inlibc
9454
9455 : see if getpgid exists
9456 set getpgid d_getpgid
9457 eval $inlibc
9458
9459 : see if getpgrp2 exists
9460 set getpgrp2 d_getpgrp2
9461 eval $inlibc
9462
9463 : see if getppid exists
9464 set getppid d_getppid
9465 eval $inlibc
9466
9467 : see if getpriority exists
9468 set getpriority d_getprior
9469 eval $inlibc
9470
9471 : see if prototypes for various getprotoxxx netdb.h functions are available
9472 echo " "
9473 set d_getprotoprotos getprotoent $i_netdb netdb.h
9474 eval $hasproto
9475
9476 : see if getprpwnam exists
9477 set getprpwnam d_getprpwnam
9478 eval $inlibc
9479
9480 : see if getpwent exists
9481 set getpwent d_getpwent
9482 eval $inlibc
9483
9484
9485 : see if getservbyname exists
9486 set getservbyname d_getsbyname
9487 eval $inlibc
9488
9489 : see if getservbyport exists
9490 set getservbyport d_getsbyport
9491 eval $inlibc
9492
9493 : see if getservent exists
9494 set getservent d_getsent
9495 eval $inlibc
9496
9497 : see if prototypes for various getservxxx netdb.h functions are available
9498 echo " "
9499 set d_getservprotos getservent $i_netdb netdb.h
9500 eval $hasproto
9501
9502 : see if getspnam exists
9503 set getspnam d_getspnam
9504 eval $inlibc
9505
9506 : see if gettimeofday or ftime exists
9507 set gettimeofday d_gettimeod
9508 eval $inlibc
9509 case "$d_gettimeod" in
9510 "$undef")
9511         set ftime d_ftime 
9512         eval $inlibc
9513         ;;
9514 *)
9515         val="$undef"; set d_ftime; eval $setvar
9516         ;;
9517 esac
9518 case "$d_gettimeod$d_ftime" in
9519 "$undef$undef")
9520         echo " "
9521         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
9522         ;;
9523 esac
9524
9525 : see if this is an grp system
9526 set grp.h i_grp
9527 eval $inhdr
9528
9529 case "$i_grp" in
9530 $define)
9531         xxx=`./findhdr grp.h`
9532         $cppstdin $cppflags $cppminus < $xxx >$$.h
9533
9534         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
9535                 val="$define"
9536         else
9537                 val="$undef"
9538         fi
9539         set d_grpasswd
9540         eval $setvar
9541
9542         $rm -f $$.h
9543         ;;
9544 *)
9545         val="$undef";
9546         set d_grpasswd; eval $setvar
9547         ;;
9548 esac
9549
9550 : see if hasmntopt exists
9551 set hasmntopt d_hasmntopt
9552 eval $inlibc
9553
9554 : see if this is a netinet/in.h or sys/in.h system
9555 set netinet/in.h i_niin sys/in.h i_sysin
9556 eval $inhdr
9557
9558 : see if arpa/inet.h has to be included
9559 set arpa/inet.h i_arpainet
9560 eval $inhdr
9561
9562 : see if htonl --and friends-- exists
9563 val=''
9564 set htonl val
9565 eval $inlibc
9566
9567 : Maybe they are macros.
9568 case "$val" in
9569 $undef)
9570         $cat >htonl.c <<EOM
9571 #include <stdio.h>
9572 #include <sys/types.h>
9573 #$i_niin I_NETINET_IN
9574 #$i_sysin I_SYS_IN
9575 #$i_arpainet I_ARPA_INET
9576 #ifdef I_NETINET_IN
9577 #include <netinet/in.h>
9578 #endif
9579 #ifdef I_SYS_IN
9580 #include <sys/in.h>
9581 #endif
9582 #ifdef I_ARPA_INET
9583 #include <arpa/inet.h>
9584 #endif
9585 #ifdef htonl
9586 printf("Defined as a macro.");
9587 #endif
9588 EOM
9589         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
9590         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
9591                 val="$define"
9592                 echo "But it seems to be defined as a macro." >&4
9593         fi
9594         $rm -f htonl.?
9595         ;;
9596 esac
9597 set d_htonl
9598 eval $setvar
9599
9600 : see if iconv exists
9601 set iconv d_iconv
9602 eval $inlibc
9603
9604 : index or strchr
9605 echo " "
9606 if set index val -f; eval $csym; $val; then
9607         if set strchr val -f d_strchr; eval $csym; $val; then
9608                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
9609                         val="$define"
9610                         vali="$undef"
9611                         echo "strchr() found." >&4
9612                 else
9613                         val="$undef"
9614                         vali="$define"
9615                         echo "index() found." >&4
9616                 fi
9617         else
9618                 val="$undef"
9619                 vali="$define"
9620                 echo "index() found." >&4
9621         fi
9622 else
9623         if set strchr val -f d_strchr; eval $csym; $val; then
9624                 val="$define"
9625                 vali="$undef"
9626                 echo "strchr() found." >&4
9627         else
9628                 echo "No index() or strchr() found!" >&4
9629                 val="$undef"
9630                 vali="$undef"
9631         fi
9632 fi
9633 set d_strchr; eval $setvar
9634 val="$vali"
9635 set d_index; eval $setvar
9636
9637 : check whether inet_aton exists
9638 set inet_aton d_inetaton
9639 eval $inlibc
9640
9641 : see if inttypes.h is available
9642 : we want a real compile instead of Inhdr because some systems
9643 : have an inttypes.h which includes non-existent headers
9644 echo " "
9645 $cat >try.c <<EOCP
9646 #include <inttypes.h>
9647 int main() {
9648         static int32_t foo32 = 0x12345678;
9649 }
9650 EOCP
9651 set try
9652 if eval $compile; then
9653         echo "<inttypes.h> found." >&4
9654         val="$define"
9655 else
9656         echo "<inttypes.h> NOT found." >&4
9657         val="$undef"
9658 fi
9659 $rm -f try.c try
9660 set i_inttypes
9661 eval $setvar
9662
9663 : check for int64_t
9664 echo " "
9665 echo "Checking to see if you have int64_t..." >&4
9666 $cat >try.c <<EOCP
9667 #include <sys/types.h>
9668 #$i_inttypes I_INTTYPES
9669 #ifdef I_INTTYPES
9670 #include <inttypes.h>
9671 #endif
9672 int main() { int64_t x = 7; }
9673 EOCP
9674 set try
9675 if eval $compile; then
9676         val="$define"
9677         echo "You have int64_t."
9678 else
9679         val="$undef"
9680         echo "You do not have int64_t."
9681 fi
9682 $rm -f try try.*
9683 set d_int64_t
9684 eval $setvar
9685
9686 : Look for isascii
9687 echo " "
9688 $cat >isascii.c <<'EOCP'
9689 #include <stdio.h>
9690 #include <ctype.h>
9691 int main() {
9692         int c = 'A';
9693         if (isascii(c))
9694                 exit(0);
9695         else
9696                 exit(1);
9697 }
9698 EOCP
9699 set isascii
9700 if eval $compile; then
9701         echo "isascii() found." >&4
9702         val="$define"
9703 else
9704         echo "isascii() NOT found." >&4
9705         val="$undef"
9706 fi
9707 set d_isascii
9708 eval $setvar
9709 $rm -f isascii*
9710
9711 : see if isnan exists
9712 set isnan d_isnan
9713 eval $inlibc
9714
9715 : see if isnanl exists
9716 set isnanl d_isnanl
9717 eval $inlibc
9718
9719 : see if killpg exists
9720 set killpg d_killpg
9721 eval $inlibc
9722
9723 : see if lchown exists
9724 echo " "
9725 $cat > try.c <<'EOCP'
9726 /* System header to define __stub macros and hopefully few prototypes,
9727     which can conflict with char lchown(); below.  */
9728 #include <assert.h>
9729 /* Override any gcc2 internal prototype to avoid an error.  */
9730 /* We use char because int might match the return type of a gcc2
9731    builtin and then its argument prototype would still apply.  */
9732 char lchown();
9733 int main() {
9734     /*  The GNU C library defines this for functions which it implements
9735         to always fail with ENOSYS.  Some functions are actually named
9736         something starting with __ and the normal name is an alias.  */
9737 #if defined (__stub_lchown) || defined (__stub___lchown)
9738 choke me
9739 #else
9740 lchown();
9741 #endif
9742 ; return 0; }
9743 EOCP
9744 set try
9745 if eval $compile; then
9746     $echo "lchown() found." >&4
9747     val="$define"
9748 else
9749     $echo "lchown() NOT found." >&4
9750     val="$undef"
9751 fi
9752 set d_lchown
9753 eval $setvar
9754
9755 : See if number of significant digits in a double precision number is known
9756 echo " "
9757 $cat >ldbl_dig.c <<EOM
9758 #$i_limits I_LIMITS
9759 #$i_float I_FLOAT
9760 #ifdef I_LIMITS
9761 #include <limits.h>
9762 #endif
9763 #ifdef I_FLOAT
9764 #include <float.h>
9765 #endif
9766 #ifdef LDBL_DIG
9767 printf("Contains LDBL_DIG");
9768 #endif
9769 EOM
9770 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
9771 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
9772         echo "LDBL_DIG found." >&4
9773         val="$define"
9774 else
9775         echo "LDBL_DIG NOT found." >&4
9776         val="$undef"
9777 fi
9778 $rm -f ldbl_dig.?
9779 set d_ldbl_dig
9780 eval $setvar
9781
9782 : see if link exists
9783 set link d_link
9784 eval $inlibc
9785
9786 : see if localeconv exists
9787 set localeconv d_locconv
9788 eval $inlibc
9789
9790 : see if lockf exists
9791 set lockf d_lockf
9792 eval $inlibc
9793
9794 : check for long long
9795 echo " "
9796 echo "Checking to see if you have long long..." >&4
9797 echo 'int main() { long long x = 7; return 0; }' > try.c
9798 set try
9799 if eval $compile; then
9800         val="$define"
9801         echo "You have long long."
9802 else
9803         val="$undef"
9804         echo "You do not have long long."
9805 fi
9806 $rm try.*
9807 set d_longlong
9808 eval $setvar
9809
9810 : check for length of long long
9811 case "${d_longlong}${longlongsize}" in
9812 $define)
9813         echo " "
9814         echo "Checking to see how big your long longs are..." >&4
9815         $cat >try.c <<'EOCP'
9816 #include <stdio.h>
9817 int main()
9818 {
9819     printf("%d\n", (int)sizeof(long long));
9820     return(0);
9821 }
9822 EOCP
9823         set try
9824         if eval $compile_ok; then
9825                 longlongsize=`./try$exe_ext`
9826                 echo "Your long longs are $longlongsize bytes long."
9827         else
9828                 dflt='8'
9829                 echo " "
9830                 echo "(I can't seem to compile the test program.  Guessing...)"
9831                 rp="What is the size of a long long (in bytes)?"
9832                 . ./myread
9833                 longlongsize="$ans"
9834         fi
9835         if $test "X$longsize" = "X$longlongsize"; then
9836                 echo "(That isn't any different from an ordinary long.)"
9837         fi      
9838         ;;
9839 esac
9840 $rm -f try.* try
9841
9842 : see if prototype for lseek is available
9843 echo " "
9844 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
9845 eval $hasproto
9846
9847 : see if lstat exists
9848 set lstat d_lstat
9849 eval $inlibc
9850
9851 : see if madvise exists
9852 set madvise d_madvise
9853 eval $inlibc
9854
9855 : see if mblen exists
9856 set mblen d_mblen
9857 eval $inlibc
9858
9859 : see if mbstowcs exists
9860 set mbstowcs d_mbstowcs
9861 eval $inlibc
9862
9863 : see if mbtowc exists
9864 set mbtowc d_mbtowc
9865 eval $inlibc
9866
9867 : see if memchr exists
9868 set memchr d_memchr
9869 eval $inlibc
9870
9871 : see if memcmp exists
9872 set memcmp d_memcmp
9873 eval $inlibc
9874
9875 : see if memcpy exists
9876 set memcpy d_memcpy
9877 eval $inlibc
9878
9879 : see if memmove exists
9880 set memmove d_memmove
9881 eval $inlibc
9882
9883 : see if memset exists
9884 set memset d_memset
9885 eval $inlibc
9886
9887 : see if mkdir exists
9888 set mkdir d_mkdir
9889 eval $inlibc
9890
9891 : see if mkdtemp exists
9892 set mkdtemp d_mkdtemp
9893 eval $inlibc
9894
9895 : see if mkfifo exists
9896 set mkfifo d_mkfifo
9897 eval $inlibc
9898
9899 : see if mkstemp exists
9900 set mkstemp d_mkstemp
9901 eval $inlibc
9902
9903 : see if mkstemps exists
9904 set mkstemps d_mkstemps
9905 eval $inlibc
9906
9907 : see if mktime exists
9908 set mktime d_mktime
9909 eval $inlibc
9910
9911 : see if this is a sys/mman.h system
9912 set sys/mman.h i_sysmman
9913 eval $inhdr
9914
9915 : see if mmap exists
9916 set mmap d_mmap
9917 eval $inlibc
9918 : see what shmat returns
9919 : default to something harmless
9920 mmaptype='void *'
9921 case "$i_sysmman$d_mmap" in
9922 "$define$define")
9923         $cat >mmap.c <<'END'
9924 #include <sys/mman.h>
9925 void *mmap();
9926 END
9927         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
9928                 mmaptype='void *'
9929         else
9930                 mmaptype='caddr_t'
9931         fi
9932         echo "and it returns ($mmaptype)." >&4
9933         ;;
9934 esac
9935
9936
9937
9938 : see if modfl exists
9939 set modfl d_modfl
9940 eval $inlibc
9941
9942 : see if mprotect exists
9943 set mprotect d_mprotect
9944 eval $inlibc
9945
9946 : see if msgctl exists
9947 set msgctl d_msgctl
9948 eval $inlibc
9949
9950 : see if msgget exists
9951 set msgget d_msgget
9952 eval $inlibc
9953
9954 : see if msgsnd exists
9955 set msgsnd d_msgsnd
9956 eval $inlibc
9957
9958 : see if msgrcv exists
9959 set msgrcv d_msgrcv
9960 eval $inlibc
9961
9962 : see how much of the 'msg*(2)' library is present.
9963 h_msg=true
9964 echo " "
9965 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
9966 *"$undef"*) h_msg=false;;
9967 esac
9968 case "$osname" in
9969 freebsd)
9970     case "`ipcs 2>&1`" in
9971     "SVID messages"*"not configured"*)
9972         echo "Your $osname does not have the msg*(2) configured." >&4
9973         h_msg=false
9974         val="$undef"
9975         set msgctl d_msgctl
9976         eval $setvar
9977         set msgget d_msgget
9978         eval $setvar
9979         set msgsnd d_msgsnd
9980         eval $setvar
9981         set msgrcv d_msgrcv
9982         eval $setvar
9983         ;;
9984     esac
9985     ;;
9986 esac
9987 : we could also check for sys/ipc.h ...
9988 if $h_msg && $test `./findhdr sys/msg.h`; then
9989         echo "You have the full msg*(2) library." >&4
9990         val="$define"
9991 else
9992         echo "You don't have the full msg*(2) library." >&4
9993         val="$undef"
9994 fi
9995 set d_msg
9996 eval $setvar
9997
9998 : see if msync exists
9999 set msync d_msync
10000 eval $inlibc
10001
10002 : see if munmap exists
10003 set munmap d_munmap
10004 eval $inlibc
10005
10006 : see if nice exists
10007 set nice d_nice
10008 eval $inlibc
10009
10010
10011 echo " "
10012 echo "Checking which 64-bit integer type we could use..." >&4
10013
10014 case "$intsize" in
10015 8) val=int
10016    set quadtype
10017    eval $setvar
10018    val='"unsigned int"'
10019    set uquadtype
10020    eval $setvar
10021    quadkind=1
10022    ;;
10023 *) case "$longsize" in
10024    8) val=long
10025       set quadtype
10026       eval $setvar
10027       val='"unsigned long"'
10028       set uquadtype
10029       eval $setvar
10030       quadkind=2
10031       ;;
10032    *) case "$d_longlong:$longlongsize" in
10033       define:8)
10034         val='"long long"'
10035         set quadtype
10036         eval $setvar
10037         val='"unsigned long long"'
10038         set uquadtype
10039         eval $setvar
10040         quadkind=3
10041         ;;
10042       *) case "$d_int64_t" in
10043          define)
10044            val=int64_t
10045            set quadtype
10046            eval $setvar
10047            val=uint64_t
10048            set uquadtype
10049            eval $setvar
10050            quadkind=4
10051            ;;
10052          esac
10053          ;;
10054       esac
10055       ;;
10056    esac
10057    ;;
10058 esac
10059
10060 case "$quadtype" in
10061 '')     echo "Alas, no 64-bit integer types in sight." >&4
10062         d_quad="$undef"
10063         ;;
10064 *)      if test X"$use64bitint" = Xdefine -o X"$longsize" = X8; then
10065             verb="will"
10066         else
10067             verb="could"
10068         fi
10069         echo "We $verb use '$quadtype' for 64-bit integers." >&4
10070         d_quad="$define"
10071         ;;
10072 esac
10073
10074 : check for length of character
10075 echo " "
10076 case "$charsize" in
10077 '')
10078         echo "Checking to see how big your characters are (hey, you never know)..." >&4
10079         $cat >try.c <<'EOCP'
10080 #include <stdio.h>
10081 int main()
10082 {
10083     printf("%d\n", (int)sizeof(char));
10084     exit(0);
10085 }
10086 EOCP
10087         set try
10088         if eval $compile_ok; then
10089                 dflt=`./try`
10090         else
10091                 dflt='1'
10092                 echo "(I can't seem to compile the test program.  Guessing...)"
10093         fi
10094         ;;
10095 *)
10096         dflt="$charsize"
10097         ;;
10098 esac
10099 rp="What is the size of a character (in bytes)?"
10100 . ./myread
10101 charsize="$ans"
10102 $rm -f try.c try
10103
10104 : check for volatile keyword
10105 echo " "
10106 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10107 $cat >try.c <<'EOCP'
10108 int main()
10109 {
10110         typedef struct _goo_struct goo_struct;
10111         goo_struct * volatile goo = ((goo_struct *)0);
10112         struct _goo_struct {
10113                 long long_int;
10114                 int reg_int;
10115                 char char_var;
10116         };
10117         typedef unsigned short foo_t;
10118         char *volatile foo;
10119         volatile int bar;
10120         volatile foo_t blech;
10121         foo = foo;
10122 }
10123 EOCP
10124 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10125         val="$define"
10126         echo "Yup, it does."
10127 else
10128         val="$undef"
10129         echo "Nope, it doesn't."
10130 fi
10131 set d_volatile
10132 eval $setvar
10133 $rm -f try.*
10134
10135
10136 echo " "
10137 $echo "Choosing the C types to be used for Perl's internal types..." >&4
10138
10139 case "$use64bitint:$d_quad:$quadtype" in
10140 define:define:?*)
10141         ivtype="$quadtype"
10142         uvtype="$uquadtype"
10143         ivsize=8
10144         uvsize=8
10145         ;;
10146 *)      ivtype="long"
10147         uvtype="unsigned long"
10148         ivsize=$longsize
10149         uvsize=$longsize
10150         ;;
10151 esac
10152
10153 case "$uselongdouble:$d_longdbl" in
10154 define:define)
10155         nvtype="long double"
10156         nvsize=$longdblsize
10157         ;;
10158 *)      nvtype=double
10159         nvsize=$doublesize
10160         ;;
10161 esac
10162
10163 $echo "(IV will be "$ivtype", $ivsize bytes)"
10164 $echo "(UV will be "$uvtype", $uvsize bytes)"
10165 $echo "(NV will be "$nvtype", $nvsize bytes)"
10166
10167 $cat >try.c <<EOCP
10168 #$i_inttypes I_INTTYPES
10169 #ifdef I_INTTYPES
10170 #include <inttypes.h>
10171 #endif
10172 #include <stdio.h>
10173 int main() {
10174 #ifdef INT8
10175    int8_t i =  INT8_MAX;
10176   uint8_t u = UINT8_MAX;
10177   printf("int8_t\n");
10178 #endif
10179 #ifdef INT16
10180    int16_t i =  INT16_MAX;
10181   uint16_t i = UINT16_MAX;
10182   printf("int16_t\n");
10183 #endif
10184 #ifdef INT32
10185    int32_t i =  INT32_MAX;
10186   uint32_t u = UINT32_MAX;
10187   printf("int32_t\n");
10188 #endif
10189 }
10190 EOCP
10191
10192 case "$i8type" in
10193 '')     case "$charsize" in
10194         1)      i8type=char
10195                 u8type="unsigned char"
10196                 i8size=$charsize
10197                 u8size=$charsize
10198                 ;;
10199         esac
10200         ;;
10201 esac
10202 case "$i8type" in
10203 '')     set try -DINT8
10204         if eval $compile; then
10205                 case "`./try$exe_ext`" in
10206                 int8_t) i8type=int8_t
10207                         u8type=uint8_t
10208                         i8size=1
10209                         u8size=1
10210                         ;;
10211                 esac
10212         fi
10213         ;;
10214 esac
10215 case "$i8type" in
10216 '')     if $test $charsize -ge 1; then
10217                 i8type=char
10218                 u8type="unsigned char"
10219                 i8size=$charsize
10220                 u8size=$charsize
10221         fi
10222         ;;
10223 esac
10224
10225 case "$i16type" in
10226 '')     case "$shortsize" in
10227         2)      i16type=short
10228                 u16type="unsigned short"
10229                 i16size=$shortsize
10230                 u16size=$shortsize
10231                 ;;
10232         esac
10233         ;;
10234 esac
10235 case "$i16type" in
10236 '')     set try -DINT16
10237         if eval $compile; then
10238                 case "`./try$exe_ext`" in
10239                 int16_t)
10240                         i16type=int16_t
10241                         u16type=uint16_t
10242                         i16size=2
10243                         u16size=2
10244                         ;;
10245                 esac
10246         fi
10247         ;;
10248 esac
10249 case "$i16type" in
10250 '')     if $test $shortsize -ge 2; then
10251                 i16type=short
10252                 u16type="unsigned short"
10253                 i16size=$shortsize
10254                 u16size=$shortsize
10255         fi
10256         ;;
10257 esac
10258
10259 case "$i32type" in
10260 '')     case "$longsize" in
10261         4)      i32type=long
10262                 u32type="unsigned long"
10263                 i32size=$longsize
10264                 u32size=$longsize
10265                 ;;
10266         *)      case "$intsize" in
10267                 4)      i32type=int
10268                         u32type="unsigned int"
10269                         i32size=$intsize
10270                         u32size=$intsize
10271                         ;;
10272                 esac
10273                 ;;
10274         esac
10275         ;;
10276 esac
10277 case "$i32type" in
10278 '')     set try -DINT32
10279         if eval $compile; then
10280                 case "`./try$exe_ext`" in
10281                 int32_t)
10282                         i32type=int32_t
10283                         u32type=uint32_t
10284                         i32size=4
10285                         u32size=4
10286                         ;;
10287                 esac
10288         fi
10289         ;;
10290 esac
10291 case "$i32type" in
10292 '')     if $test $intsize -ge 4; then
10293                 i32type=int
10294                 u32type="unsigned int"
10295                 i32size=$intsize
10296                 u32size=$intsize
10297         fi
10298         ;;
10299 esac
10300
10301 case "$i64type" in
10302 '')     case "$d_quad:$quadtype" in
10303         define:?*)
10304                 i64type="$quadtype"
10305                 u64type="$uquadtype"
10306                 i64size=8
10307                 u64size=8
10308                 ;;
10309         esac
10310         ;;
10311 esac
10312
10313 $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
10314 : volatile so that the compiler has to store it out to memory.
10315 if test X"$d_volatile" = X"$define"; then
10316         volatile=volatile
10317 fi
10318 $cat <<EOP >try.c
10319 #include <stdio.h>
10320 #include <sys/types.h>
10321 #include <signal.h>
10322 #ifdef SIGFPE
10323 $volatile int bletched = 0;
10324 $signal_t blech(s) int s; { bletched = 1; }
10325 #endif
10326 int main() {
10327     $uvtype u = 0;
10328     $nvtype d;
10329     int     n = 8 * $uvsize;
10330     int     i;
10331 #ifdef SIGFPE
10332     signal(SIGFPE, blech);
10333 #endif
10334
10335     for (i = 0; i < n; i++) {
10336       u = u << 1 | ($uvtype)1;
10337       d = ($nvtype)u;
10338       if (($uvtype)d != u)
10339         break;
10340       if (d <= 0)
10341         break;
10342       d = ($nvtype)(u - 1);
10343       if (($uvtype)d != (u - 1))
10344         break;
10345 #ifdef SIGFPE
10346       if (bletched) {
10347         break;
10348 #endif
10349       } 
10350     }
10351     printf("%d\n", ((i == n) ? -n : i));
10352     exit(0);
10353 }
10354 EOP
10355 set try
10356
10357 d_nv_preserves_uv="$undef"
10358 if eval $compile; then
10359         d_nv_preserves_uv_bits="`./try$exe_ext`"
10360 fi
10361 case "$d_nv_preserves_uv_bits" in
10362 \-[1-9]*)       
10363         d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
10364         $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs."  2>&1
10365         d_nv_preserves_uv="$define"
10366         ;;
10367 [1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs."  2>&1
10368         d_nv_preserves_uv="$undef" ;;
10369 *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
10370         d_nv_preserves_uv_bits="$undef" ;;
10371 esac
10372
10373 $rm -f try.* try
10374
10375
10376 : check for off64_t
10377 echo " "
10378 echo "Checking to see if you have off64_t..." >&4
10379 $cat >try.c <<EOCP
10380 #include <sys/types.h>
10381 #include <unistd.h>
10382 int main() { off64_t x = 7; }
10383 EOCP
10384 set try
10385 if eval $compile; then
10386         val="$define"
10387         echo "You have off64_t."
10388 else
10389         val="$undef"
10390         echo "You do not have off64_t."
10391         case "$lseeksize" in
10392         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
10393         esac
10394 fi
10395 $rm -f try.* try
10396 set d_off64_t
10397 eval $setvar
10398
10399 : see if POSIX threads are available
10400 set pthread.h i_pthread
10401 eval $inhdr
10402
10403
10404
10405
10406 : how to create joinable pthreads
10407 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
10408         echo " "
10409         echo "Checking what constant to use for creating joinable pthreads..." >&4 
10410         $cat >try.c <<'EOCP'
10411 #include <pthread.h>
10412 int main() {
10413     int detachstate = JOINABLE;
10414 }
10415 EOCP
10416         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
10417         if eval $compile; then
10418                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
10419                 val="$undef" # Yes, undef.
10420                 set d_old_pthread_create_joinable
10421                 eval $setvar
10422                 val=""
10423                 set old_pthread_create_joinable
10424                 eval $setvar
10425         else
10426                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
10427                 if eval $compile; then
10428                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
10429                         val="$define"
10430                         set d_old_pthread_create_joinable
10431                         eval $setvar
10432                         val=PTHREAD_CREATE_UNDETACHED
10433                         set old_pthread_create_joinable
10434                         eval $setvar
10435                 else            
10436                         set try -DJOINABLE=__UNDETACHED
10437                         if eval $compile; then
10438                                 echo "You seem to use __UNDETACHED." >&4
10439                                 val="$define"
10440                                 set d_old_pthread_create_joinable
10441                                 eval $setvar
10442                                 val=__UNDETACHED
10443                                 set old_pthread_create_joinable
10444                                 eval $setvar
10445                         else
10446                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
10447                                 val="$define"
10448                                 set d_old_pthread_create_joinable
10449                                 eval $setvar
10450                                 val=0
10451                                 set old_pthread_create_joinable
10452                                 eval $setvar
10453                         fi
10454                 fi
10455         fi
10456         $rm -f try try.*
10457 else
10458     d_old_pthread_create_joinable="$undef"
10459     old_pthread_create_joinable=""
10460 fi
10461
10462 : see if pause exists
10463 set pause d_pause
10464 eval $inlibc
10465
10466 : see if pipe exists
10467 set pipe d_pipe
10468 eval $inlibc
10469
10470 : see if poll exists
10471 set poll d_poll
10472 eval $inlibc
10473
10474
10475 : see whether the various POSIXish _yields exist
10476 $cat >try.c <<EOP
10477 #include <pthread.h>
10478 #include <stdio.h>
10479 int main() {
10480 #ifdef SCHED_YIELD
10481         sched_yield();
10482 #else
10483 #ifdef PTHREAD_YIELD
10484         pthread_yield();
10485 #else
10486 #ifdef PTHREAD_YIELD_NULL
10487         pthread_yield(NULL);
10488 #endif
10489 #endif
10490 #endif
10491 }
10492 EOP
10493 : see if sched_yield exists
10494 set try -DSCHED_YIELD
10495 if eval $compile; then
10496     val="$define"
10497     sched_yield='sched_yield()'
10498 else
10499     val="$undef"
10500 fi
10501 case "$usethreads" in
10502 $define)
10503         case "$val" in
10504         $define) echo 'sched_yield() found.' >&4        ;;
10505         *)       echo 'sched_yield() NOT found.' >&4    ;;
10506         esac
10507 esac
10508 set d_sched_yield
10509 eval $setvar
10510
10511 : see if pthread_yield exists
10512 set try -DPTHREAD_YIELD
10513 if eval $compile; then
10514     val="$define"
10515     case "$sched_yield" in
10516     '') sched_yield='pthread_yield()' ;;
10517     esac
10518 else
10519     set try -DPTHREAD_YIELD_NULL
10520     if eval $compile; then
10521         val="$define"
10522         case "$sched_yield" in
10523         '') sched_yield='pthread_yield(NULL)' ;;
10524         esac
10525     else
10526         val="$undef"
10527     fi
10528 fi
10529 case "$usethreads" in
10530 $define)
10531         case "$val" in
10532         $define) echo 'pthread_yield() found.' >&4      ;;
10533         *)       echo 'pthread_yield() NOT found.' >&4  ;;
10534         esac
10535         ;;
10536 esac
10537 set d_pthread_yield
10538 eval $setvar
10539
10540 case "$sched_yield" in
10541 '') sched_yield=undef ;;
10542 esac
10543
10544 $rm -f try try.*
10545
10546 : see if this is a pwd.h system
10547 set pwd.h i_pwd
10548 eval $inhdr
10549
10550 case "$i_pwd" in
10551 $define)
10552         xxx=`./findhdr pwd.h`
10553         $cppstdin $cppflags $cppminus < $xxx >$$.h
10554
10555         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
10556                 val="$define"
10557         else
10558                 val="$undef"
10559         fi
10560         set d_pwquota
10561         eval $setvar
10562
10563         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
10564                 val="$define"
10565         else
10566                 val="$undef"
10567         fi
10568         set d_pwage
10569         eval $setvar
10570
10571         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
10572                 val="$define"
10573         else
10574                 val="$undef"
10575         fi
10576         set d_pwchange
10577         eval $setvar
10578
10579         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
10580                 val="$define"
10581         else
10582                 val="$undef"
10583         fi
10584         set d_pwclass
10585         eval $setvar
10586
10587         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
10588                 val="$define"
10589         else
10590                 val="$undef"
10591         fi
10592         set d_pwexpire
10593         eval $setvar
10594
10595         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
10596                 val="$define"
10597         else
10598                 val="$undef"
10599         fi
10600         set d_pwcomment
10601         eval $setvar
10602
10603         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
10604                 val="$define"
10605         else
10606                 val="$undef"
10607         fi
10608         set d_pwgecos
10609         eval $setvar
10610
10611         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
10612                 val="$define"
10613         else
10614                 val="$undef"
10615         fi
10616         set d_pwpasswd
10617         eval $setvar
10618
10619         $rm -f $$.h
10620         ;;
10621 *)
10622         val="$undef"; 
10623         set d_pwquota; eval $setvar
10624         set d_pwage; eval $setvar
10625         set d_pwchange; eval $setvar
10626         set d_pwclass; eval $setvar
10627         set d_pwexpire; eval $setvar
10628         set d_pwcomment; eval $setvar
10629         set d_pwgecos; eval $setvar
10630         set d_pwpasswd; eval $setvar
10631         ;;
10632 esac
10633
10634 : see if readdir and friends exist
10635 set readdir d_readdir
10636 eval $inlibc
10637 set seekdir d_seekdir
10638 eval $inlibc
10639 set telldir d_telldir
10640 eval $inlibc
10641 set rewinddir d_rewinddir
10642 eval $inlibc
10643
10644 : see if readlink exists
10645 set readlink d_readlink
10646 eval $inlibc
10647
10648 : see if rename exists
10649 set rename d_rename
10650 eval $inlibc
10651
10652 : see if rmdir exists
10653 set rmdir d_rmdir
10654 eval $inlibc
10655
10656 : see if memory.h is available.
10657 val=''
10658 set memory.h val
10659 eval $inhdr
10660
10661 : See if it conflicts with string.h
10662 case "$val" in
10663 $define)
10664         case "$strings" in
10665         '') ;;
10666         *)
10667                 $cppstdin $cppflags $cppminus < $strings > mem.h
10668                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
10669                         echo " "
10670                         echo "We won't be including <memory.h>."
10671                         val="$undef"
10672                 fi
10673                 $rm -f mem.h
10674                 ;;
10675         esac
10676 esac
10677 set i_memory
10678 eval $setvar
10679
10680 : can bcopy handle overlapping blocks?
10681 val="$undef"
10682 case "$d_bcopy" in
10683 "$define")
10684         echo " "
10685         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
10686         $cat >try.c <<EOCP
10687 #$i_memory I_MEMORY
10688 #$i_stdlib I_STDLIB
10689 #$i_string I_STRING
10690 #$i_unistd I_UNISTD
10691 EOCP
10692         $cat >>try.c <<'EOCP'
10693 #include <stdio.h>
10694 #ifdef I_MEMORY
10695 #  include <memory.h>
10696 #endif
10697 #ifdef I_STDLIB
10698 #  include <stdlib.h>
10699 #endif
10700 #ifdef I_STRING
10701 #  include <string.h>
10702 #else
10703 #  include <strings.h>
10704 #endif
10705 #ifdef I_UNISTD
10706 #  include <unistd.h>  /* Needed for NetBSD */
10707 #endif
10708 int main()
10709 {
10710 char buf[128], abc[128];
10711 char *b;
10712 int len;
10713 int off;
10714 int align;
10715
10716 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
10717
10718 for (align = 7; align >= 0; align--) {
10719         for (len = 36; len; len--) {
10720                 b = buf+align;
10721                 bcopy(abc, b, len);
10722                 for (off = 1; off <= len; off++) {
10723                         bcopy(b, b+off, len);
10724                         bcopy(b+off, b, len);
10725                         if (bcmp(b, abc, len))
10726                                 exit(1);
10727                 }
10728         }
10729 }
10730 exit(0);
10731 }
10732 EOCP
10733         set try
10734         if eval $compile_ok; then
10735                 if ./try 2>/dev/null; then
10736                         echo "Yes, it can."
10737                         val="$define"
10738                 else
10739                         echo "It can't, sorry."
10740                         case "$d_memmove" in
10741                         "$define") echo "But that's Ok since you have memmove()." ;;
10742                         esac
10743                 fi
10744         else
10745                 echo "(I can't compile the test program, so we'll assume not...)"
10746                 case "$d_memmove" in
10747                 "$define") echo "But that's Ok since you have memmove()." ;;
10748                 esac
10749         fi
10750         ;;
10751 esac
10752 $rm -f try.* try core
10753 set d_safebcpy
10754 eval $setvar
10755
10756 : can memcpy handle overlapping blocks?
10757 val="$undef"
10758 case "$d_memcpy" in
10759 "$define")
10760         echo " "
10761         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
10762         $cat >try.c <<EOCP
10763 #$i_memory I_MEMORY
10764 #$i_stdlib I_STDLIB
10765 #$i_string I_STRING
10766 #$i_unistd I_UNISTD
10767 EOCP
10768         $cat >>try.c <<'EOCP'
10769 #include <stdio.h>
10770 #ifdef I_MEMORY
10771 #  include <memory.h>
10772 #endif
10773 #ifdef I_STDLIB
10774 #  include <stdlib.h>
10775 #endif
10776 #ifdef I_STRING
10777 #  include <string.h>
10778 #else
10779 #  include <strings.h>
10780 #endif
10781 #ifdef I_UNISTD
10782 #  include <unistd.h>  /* Needed for NetBSD */
10783 #endif
10784 int main()
10785 {
10786 char buf[128], abc[128];
10787 char *b;
10788 int len;
10789 int off;
10790 int align;
10791
10792 /* Copy "abcde..." string to char abc[] so that gcc doesn't
10793    try to store the string in read-only memory. */
10794 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
10795
10796 for (align = 7; align >= 0; align--) {
10797         for (len = 36; len; len--) {
10798                 b = buf+align;
10799                 memcpy(b, abc, len);
10800                 for (off = 1; off <= len; off++) {
10801                         memcpy(b+off, b, len);
10802                         memcpy(b, b+off, len);
10803                         if (memcmp(b, abc, len))
10804                                 exit(1);
10805                 }
10806         }
10807 }
10808 exit(0);
10809 }
10810 EOCP
10811         set try
10812         if eval $compile_ok; then
10813                 if ./try 2>/dev/null; then
10814                         echo "Yes, it can."
10815                         val="$define"
10816                 else
10817                         echo "It can't, sorry."
10818                         case "$d_memmove" in
10819                         "$define") echo "But that's Ok since you have memmove()." ;;
10820                         esac
10821                 fi
10822         else
10823                 echo "(I can't compile the test program, so we'll assume not...)"
10824                 case "$d_memmove" in
10825                 "$define") echo "But that's Ok since you have memmove()." ;;
10826                 esac
10827         fi
10828         ;;
10829 esac
10830 $rm -f try.* try core
10831 set d_safemcpy
10832 eval $setvar
10833
10834 : can memcmp be trusted to compare relative magnitude?
10835 val="$undef"
10836 case "$d_memcmp" in
10837 "$define")
10838         echo " "
10839         echo "Checking if your memcmp() can compare relative magnitude..." >&4
10840         $cat >try.c <<EOCP
10841 #$i_memory I_MEMORY
10842 #$i_stdlib I_STDLIB
10843 #$i_string I_STRING
10844 #$i_unistd I_UNISTD
10845 EOCP
10846         $cat >>try.c <<'EOCP'
10847 #include <stdio.h>
10848 #ifdef I_MEMORY
10849 #  include <memory.h>
10850 #endif
10851 #ifdef I_STDLIB
10852 #  include <stdlib.h>
10853 #endif
10854 #ifdef I_STRING
10855 #  include <string.h>
10856 #else
10857 #  include <strings.h>
10858 #endif
10859 #ifdef I_UNISTD
10860 #  include <unistd.h>  /* Needed for NetBSD */
10861 #endif
10862 int main()
10863 {
10864 char a = -1;
10865 char b = 0;
10866 if ((a < b) && memcmp(&a, &b, 1) < 0)
10867         exit(1);
10868 exit(0);
10869 }
10870 EOCP
10871         set try
10872         if eval $compile_ok; then
10873                 if ./try 2>/dev/null; then
10874                         echo "Yes, it can."
10875                         val="$define"
10876                 else
10877                         echo "No, it can't (it uses signed chars)."
10878                 fi
10879         else
10880                 echo "(I can't compile the test program, so we'll assume not...)"
10881         fi
10882         ;;
10883 esac
10884 $rm -f try.* try core
10885 set d_sanemcmp
10886 eval $setvar
10887
10888 : see if select exists
10889 set select d_select
10890 eval $inlibc
10891
10892 : see if semctl exists
10893 set semctl d_semctl
10894 eval $inlibc
10895
10896 : see if semget exists
10897 set semget d_semget
10898 eval $inlibc
10899
10900 : see if semop exists
10901 set semop d_semop
10902 eval $inlibc
10903
10904 : see how much of the 'sem*(2)' library is present.
10905 h_sem=true
10906 echo " "
10907 case "$d_semctl$d_semget$d_semop" in
10908 *"$undef"*) h_sem=false;;
10909 esac
10910 case "$osname" in
10911 freebsd)
10912     case "`ipcs 2>&1`" in
10913     "SVID messages"*"not configured"*)
10914         echo "Your $osname does not have the sem*(2) configured." >&4
10915         h_sem=false
10916         val="$undef"
10917         set semctl d_semctl
10918         eval $setvar
10919         set semget d_semget
10920         eval $setvar
10921         set semop d_semop
10922         eval $setvar
10923         ;;
10924     esac
10925     ;;
10926 esac
10927 : we could also check for sys/ipc.h ...
10928 if $h_sem && $test `./findhdr sys/sem.h`; then
10929         echo "You have the full sem*(2) library." >&4
10930         val="$define"
10931 else
10932         echo "You don't have the full sem*(2) library." >&4
10933         val="$undef"
10934 fi
10935 set d_sem
10936 eval $setvar
10937
10938 : see whether sys/sem.h defines union semun
10939 echo " "
10940 $cat > try.c <<'END'
10941 #include <sys/types.h>
10942 #include <sys/ipc.h>
10943 #include <sys/sem.h>
10944 int main () { union semun semun; semun.buf = 0; }
10945 END
10946 set try
10947 if eval $compile; then
10948     echo "You have union semun in <sys/sem.h>." >&4
10949     val="$define"
10950 else
10951     echo "You do not have union semun in <sys/sem.h>." >&4
10952     val="$undef"
10953 fi
10954 $rm -f try try.c try.h
10955 set d_union_semun
10956 eval $setvar
10957
10958 : see how to do semctl IPC_STAT
10959 case "$d_sem" in
10960 $define)
10961     : see whether semctl IPC_STAT can use union semun
10962     echo " "
10963     $cat > try.h <<END
10964 #ifndef S_IRUSR
10965 #   ifdef S_IREAD
10966 #       define S_IRUSR S_IREAD
10967 #       define S_IWUSR S_IWRITE
10968 #       define S_IXUSR S_IEXEC
10969 #   else
10970 #       define S_IRUSR 0400
10971 #       define S_IWUSR 0200
10972 #       define S_IXUSR 0100
10973 #   endif
10974 #   define S_IRGRP (S_IRUSR>>3)
10975 #   define S_IWGRP (S_IWUSR>>3)
10976 #   define S_IXGRP (S_IXUSR>>3)
10977 #   define S_IROTH (S_IRUSR>>6)
10978 #   define S_IWOTH (S_IWUSR>>6)
10979 #   define S_IXOTH (S_IXUSR>>6)
10980 #endif
10981 #ifndef S_IRWXU
10982 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
10983 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
10984 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
10985 #endif
10986 END
10987
10988     $cat > try.c <<END
10989 #include <sys/types.h>
10990 #include <sys/ipc.h>
10991 #include <sys/sem.h>
10992 #include <sys/stat.h>
10993 #include <stdio.h>
10994 #include <errno.h>
10995 #include "try.h"
10996 #ifndef errno
10997 extern int errno;
10998 #endif
10999 #$d_union_semun HAS_UNION_SEMUN
11000 int main() {
11001     union semun
11002 #ifndef HAS_UNION_SEMUN
11003     {
11004         int val;
11005         struct semid_ds *buf;
11006         unsigned short *array;
11007     }
11008 #endif
11009     arg;
11010     int sem, st;
11011
11012 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
11013     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11014     if (sem > -1) {
11015         struct semid_ds argbuf;
11016         arg.buf = &argbuf;
11017 #       ifdef IPC_STAT
11018         st = semctl(sem, 0, IPC_STAT, arg);
11019         if (st == 0)
11020             printf("semun\n");
11021         else
11022 #       endif /* IPC_STAT */
11023             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11024 #       ifdef IPC_RMID
11025         if (semctl(sem, 0, IPC_RMID, arg) != 0)
11026 #       endif /* IPC_RMID */
11027             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11028     } else
11029 #endif /* IPC_PRIVATE && ... */
11030         printf("semget failed: errno = %d\n", errno);
11031   return 0;
11032 }
11033 END
11034     val="$undef"
11035     set try
11036     if eval $compile; then
11037         xxx=`./try`
11038         case "$xxx" in
11039         semun) val="$define" ;;
11040         esac
11041     fi
11042     $rm -f try try.c
11043     set d_semctl_semun
11044     eval $setvar
11045     case "$d_semctl_semun" in
11046     $define)
11047         echo "You can use union semun for semctl IPC_STAT." >&4
11048         also='also'
11049         ;;
11050     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
11051         also=''
11052         ;;
11053     esac
11054
11055     : see whether semctl IPC_STAT can use struct semid_ds pointer
11056     $cat > try.c <<'END'
11057 #include <sys/types.h>
11058 #include <sys/ipc.h>
11059 #include <sys/sem.h>
11060 #include <sys/stat.h>
11061 #include "try.h"
11062 #include <stdio.h>
11063 #include <errno.h>
11064 #ifndef errno
11065 extern int errno;
11066 #endif
11067 int main() {
11068     struct semid_ds arg;
11069     int sem, st;
11070
11071 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
11072     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11073     if (sem > -1) {
11074 #       ifdef IPC_STAT
11075         st = semctl(sem, 0, IPC_STAT, &arg);
11076         if (st == 0)
11077             printf("semid_ds\n");
11078         else
11079 #       endif /* IPC_STAT */
11080             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11081 #       ifdef IPC_RMID
11082         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
11083 #       endif /* IPC_RMID */
11084             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11085     } else
11086 #endif /* IPC_PRIVATE && ... */
11087         printf("semget failed: errno = %d\n", errno);
11088
11089     return 0;
11090 }
11091 END
11092     val="$undef"
11093     set try
11094     if eval $compile; then
11095         xxx=`./try`
11096         case "$xxx" in
11097         semid_ds) val="$define" ;;
11098         esac
11099     fi
11100     $rm -f try try.c
11101     set d_semctl_semid_ds
11102     eval $setvar
11103     case "$d_semctl_semid_ds" in
11104     $define)
11105         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
11106         ;;
11107     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
11108         ;;
11109     esac
11110     $rm -f try.h
11111     ;;
11112 *)  val="$undef"
11113
11114     # We do not have the full sem*(2) library, so assume we can not
11115     # use either.
11116
11117     set d_semctl_semun
11118     eval $setvar
11119
11120     set d_semctl_semid_ds
11121     eval $setvar
11122     ;;
11123 esac
11124
11125 : see if setegid exists
11126 set setegid d_setegid
11127 eval $inlibc
11128
11129 : see if seteuid exists
11130 set seteuid d_seteuid
11131 eval $inlibc
11132
11133 : see if setgrent exists
11134 set setgrent d_setgrent
11135 eval $inlibc
11136
11137 : see if sethostent exists
11138 set sethostent d_sethent
11139 eval $inlibc
11140
11141 : see if setlinebuf exists
11142 set setlinebuf d_setlinebuf
11143 eval $inlibc
11144
11145 : see if setlocale exists
11146 set setlocale d_setlocale
11147 eval $inlibc
11148
11149 : see if setnetent exists
11150 set setnetent d_setnent
11151 eval $inlibc
11152
11153 : see if setprotoent exists
11154 set setprotoent d_setpent
11155 eval $inlibc
11156
11157 : see if setpgid exists
11158 set setpgid d_setpgid
11159 eval $inlibc
11160
11161 : see if setpgrp2 exists
11162 set setpgrp2 d_setpgrp2
11163 eval $inlibc
11164
11165 : see if setpriority exists
11166 set setpriority d_setprior
11167 eval $inlibc
11168
11169 : see if setproctitle exists
11170 set setproctitle d_setproctitle
11171 eval $inlibc
11172
11173 : see if setpwent exists
11174 set setpwent d_setpwent
11175 eval $inlibc
11176
11177 : see if setregid exists
11178 set setregid d_setregid
11179 eval $inlibc
11180 set setresgid d_setresgid
11181 eval $inlibc
11182
11183 : see if setreuid exists
11184 set setreuid d_setreuid
11185 eval $inlibc
11186 set setresuid d_setresuid
11187 eval $inlibc
11188
11189 : see if setrgid exists
11190 set setrgid d_setrgid
11191 eval $inlibc
11192
11193 : see if setruid exists
11194 set setruid d_setruid
11195 eval $inlibc
11196
11197 : see if setservent exists
11198 set setservent d_setsent
11199 eval $inlibc
11200
11201 : see if setsid exists
11202 set setsid d_setsid
11203 eval $inlibc
11204
11205 : see if setvbuf exists
11206 set setvbuf d_setvbuf
11207 eval $inlibc
11208
11209 : see if sfio.h is available
11210 set sfio.h i_sfio
11211 eval $inhdr
11212
11213
11214 : see if sfio library is available
11215 case "$i_sfio" in
11216 $define)
11217         val=''
11218         set sfreserve val
11219         eval $inlibc
11220         ;;
11221 *)
11222         val="$undef"
11223         ;;
11224 esac
11225 : Ok, but do we want to use it.
11226 case "$val" in
11227 $define)
11228         case "$usesfio" in
11229         true|$define|[yY]*) dflt='y';;
11230         *) dflt='n';;
11231         esac
11232         echo "$package can use the sfio library, but it is experimental."
11233         case "$useperlio" in
11234         "$undef")
11235             echo "For sfio also the PerlIO abstraction layer is needed."
11236             echo "Earlier you said you wouldn't want that."
11237             ;;
11238         esac
11239         rp="You seem to have sfio available, do you want to try using it?"
11240         . ./myread
11241         case "$ans" in
11242         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
11243                 useperlio="$define"
11244                 val="$define"
11245                 ;;
11246         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
11247                 val="$undef"
11248                 : Remove sfio from list of libraries to use
11249                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
11250                 shift
11251                 libs="$*"
11252                 echo "libs = $libs" >&4
11253                 ;;
11254         esac
11255         ;;
11256 *)      case "$usesfio" in
11257         true|$define|[yY]*)
11258                 echo "Sorry, cannot find sfio on this machine." >&4
11259                 echo "Ignoring your setting of usesfio=$usesfio." >&4
11260                 val="$undef"
11261                 ;;
11262         esac
11263         ;;
11264 esac
11265 set d_sfio
11266 eval $setvar
11267 case "$d_sfio" in
11268 $define) usesfio='true';;
11269 *) usesfio='false';;
11270 esac
11271
11272 : see if shmctl exists
11273 set shmctl d_shmctl
11274 eval $inlibc
11275
11276 : see if shmget exists
11277 set shmget d_shmget
11278 eval $inlibc
11279
11280 : see if shmat exists
11281 set shmat d_shmat
11282 eval $inlibc
11283 : see what shmat returns
11284 case "$d_shmat" in
11285 "$define")
11286         $cat >shmat.c <<'END'
11287 #include <sys/shm.h>
11288 void *shmat();
11289 END
11290         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
11291                 shmattype='void *'
11292         else
11293                 shmattype='char *'
11294         fi
11295         echo "and it returns ($shmattype)." >&4
11296         : see if a prototype for shmat is available
11297         xxx=`./findhdr sys/shm.h`
11298         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
11299         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
11300                 val="$define"
11301         else
11302                 val="$undef"
11303         fi
11304         $rm -f shmat.[co]
11305         ;;
11306 *)
11307         val="$undef"
11308         ;;
11309 esac
11310 set d_shmatprototype
11311 eval $setvar
11312
11313 : see if shmdt exists
11314 set shmdt d_shmdt
11315 eval $inlibc
11316
11317 : see how much of the 'shm*(2)' library is present.
11318 h_shm=true
11319 echo " "
11320 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
11321 *"$undef"*) h_shm=false;;
11322 esac
11323 case "$osname" in
11324 freebsd)
11325     case "`ipcs 2>&1`" in
11326     "SVID shared memory"*"not configured"*)
11327         echo "Your $osname does not have the shm*(2) configured." >&4
11328         h_shm=false
11329         val="$undef"
11330         set shmctl d_shmctl
11331         evat $setvar
11332         set shmget d_shmget
11333         evat $setvar
11334         set shmat d_shmat
11335         evat $setvar
11336         set shmdt d_shmdt
11337         evat $setvar
11338         ;;
11339     esac
11340     ;;
11341 esac
11342 : we could also check for sys/ipc.h ...
11343 if $h_shm && $test `./findhdr sys/shm.h`; then
11344         echo "You have the full shm*(2) library." >&4
11345         val="$define"
11346 else
11347         echo "You don't have the full shm*(2) library." >&4
11348         val="$undef"
11349 fi
11350 set d_shm
11351 eval $setvar
11352
11353 echo " "
11354 : see if we have sigaction
11355 if set sigaction val -f d_sigaction; eval $csym; $val; then
11356         echo 'sigaction() found.' >&4
11357         $cat > try.c <<'EOP'
11358 #include <stdio.h>
11359 #include <sys/types.h>
11360 #include <signal.h>
11361 int main()
11362 {
11363     struct sigaction act, oact;
11364     act.sa_flags = 0;
11365     oact.sa_handler = 0;
11366     /* so that act and oact are used */
11367     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
11368 }
11369 EOP
11370         set try
11371         if eval $compile_ok; then
11372                 val="$define"
11373         else
11374                 echo "But you don't seem to have a useable struct sigaction." >&4
11375                 val="$undef"
11376         fi
11377 else
11378         echo 'sigaction NOT found.' >&4
11379         val="$undef"
11380 fi
11381 set d_sigaction; eval $setvar
11382 $rm -f try try$_o try.c
11383
11384 : see if sigsetjmp exists
11385 echo " "
11386 case "$d_sigsetjmp" in
11387 '')
11388         $cat >try.c <<'EOP'
11389 #include <setjmp.h>
11390 sigjmp_buf env;
11391 int set = 1;
11392 int main()
11393 {
11394         if (sigsetjmp(env,1))
11395                 exit(set);
11396         set = 0;
11397         siglongjmp(env, 1);
11398         exit(1);
11399 }
11400 EOP
11401         set try
11402         if eval $compile; then
11403                 if ./try >/dev/null 2>&1; then
11404                         echo "POSIX sigsetjmp found." >&4
11405                         val="$define"
11406                 else
11407                         $cat >&4 <<EOM
11408 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
11409 I'll ignore them.
11410 EOM
11411                         val="$undef"
11412                 fi
11413         else
11414                 echo "sigsetjmp not found." >&4
11415                 val="$undef"
11416         fi
11417         ;;
11418 *) val="$d_sigsetjmp"
11419         case "$d_sigsetjmp" in
11420         $define) echo "POSIX sigsetjmp found." >&4;;
11421         $undef) echo "sigsetjmp not found." >&4;;
11422         esac
11423         ;;
11424 esac
11425 set d_sigsetjmp
11426 eval $setvar
11427 $rm -f try.c try
11428
11429 : see if socks5_init exists
11430 set socks5_init d_socks5_init
11431 eval $inlibc
11432
11433 : see if sys/stat.h is available
11434 set sys/stat.h i_sysstat
11435 eval $inhdr
11436
11437
11438 : see if stat knows about block sizes
11439 echo " "
11440 echo "Checking to see if your struct stat has st_blocks field..." >&4
11441 set d_statblks stat st_blocks $i_sysstat sys/stat.h
11442 eval $hasfield
11443
11444
11445 : see if this is a sys/vfs.h system
11446 set sys/vfs.h i_sysvfs
11447 eval $inhdr
11448
11449
11450 : see if this is a sys/statfs.h system
11451 set sys/statfs.h i_sysstatfs
11452 eval $inhdr
11453
11454
11455 echo " "
11456 echo "Checking to see if your system supports struct statfs..." >&4
11457 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
11458 eval $hasstruct
11459 case "$d_statfs_s" in
11460 "$define")      echo "Yes, it does."   ;;
11461 *)              echo "No, it doesn't." ;;
11462 esac
11463
11464
11465
11466 : see if struct statfs knows about f_flags
11467 case "$d_statfs_s" in
11468 define) 
11469         echo " "
11470         echo "Checking to see if your struct statfs has f_flags field..." >&4
11471         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
11472         eval $hasfield
11473         ;;
11474 *)      val="$undef"
11475         set d_statfs_f_flags
11476         eval $setvar
11477         ;;
11478 esac
11479 case "$d_statfs_f_flags" in
11480 "$define")      echo "Yes, it does."   ;;
11481 *)              echo "No, it doesn't." ;;
11482 esac
11483
11484 : see if _ptr and _cnt from stdio act std
11485 echo " "
11486
11487 if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
11488         echo "(Looks like you have stdio.h from BSD.)"
11489         case "$stdio_ptr" in
11490         '') stdio_ptr='((fp)->_p)'
11491                 ptr_lval=$define
11492                 ;;
11493         *)      ptr_lval=$d_stdio_ptr_lval;;
11494         esac
11495         case "$stdio_cnt" in
11496         '') stdio_cnt='((fp)->_r)'
11497                 cnt_lval=$define
11498                 ;;
11499         *)      cnt_lval=$d_stdio_cnt_lval;;
11500         esac
11501         case "$stdio_base" in
11502         '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
11503         esac
11504         case "$stdio_bufsiz" in
11505         '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
11506         esac
11507 elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
11508         echo "(Looks like you have stdio.h from Linux.)"
11509         case "$stdio_ptr" in
11510         '') stdio_ptr='((fp)->_IO_read_ptr)'
11511                 ptr_lval=$define
11512                 ;;
11513         *)      ptr_lval=$d_stdio_ptr_lval;;
11514         esac
11515         case "$stdio_cnt" in
11516         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
11517                 cnt_lval=$undef
11518                 ;;
11519         *)      cnt_lval=$d_stdio_cnt_lval;;
11520         esac
11521         case "$stdio_base" in
11522         '') stdio_base='((fp)->_IO_read_base)';;
11523         esac
11524         case "$stdio_bufsiz" in
11525         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
11526         esac
11527 else
11528         case "$stdio_ptr" in
11529         '') stdio_ptr='((fp)->_ptr)'
11530                 ptr_lval=$define
11531                 ;;
11532         *)      ptr_lval=$d_stdio_ptr_lval;;
11533         esac
11534         case "$stdio_cnt" in
11535         '') stdio_cnt='((fp)->_cnt)'
11536                 cnt_lval=$define
11537                 ;;
11538         *)      cnt_lval=$d_stdio_cnt_lval;;
11539         esac
11540         case "$stdio_base" in
11541         '') stdio_base='((fp)->_base)';;
11542         esac
11543         case "$stdio_bufsiz" in
11544         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
11545         esac
11546 fi
11547
11548 : test whether _ptr and _cnt really work
11549 echo "Checking how std your stdio is..." >&4
11550 $cat >try.c <<EOP
11551 #include <stdio.h>
11552 #define FILE_ptr(fp)    $stdio_ptr
11553 #define FILE_cnt(fp)    $stdio_cnt
11554 int main() {
11555         FILE *fp = fopen("try.c", "r");
11556         char c = getc(fp);
11557         if (
11558                 18 <= FILE_cnt(fp) &&
11559                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
11560         )
11561                 exit(0);
11562         exit(1);
11563 }
11564 EOP
11565 val="$undef"
11566 set try
11567 if eval $compile; then
11568         if ./try; then
11569                 echo "Your stdio acts pretty std."
11570                 val="$define"
11571         else
11572                 echo "Your stdio isn't very std."
11573         fi
11574 else
11575         echo "Your stdio doesn't appear very std."
11576 fi
11577 $rm -f try.c try
11578 set d_stdstdio
11579 eval $setvar
11580
11581 : Can _ptr be used as an lvalue?
11582 case "$d_stdstdio$ptr_lval" in
11583 $define$define) val=$define ;;
11584 *) val=$undef ;;
11585 esac
11586 set d_stdio_ptr_lval
11587 eval $setvar
11588
11589 : Can _cnt be used as an lvalue?
11590 case "$d_stdstdio$cnt_lval" in
11591 $define$define) val=$define ;;
11592 *) val=$undef ;;
11593 esac
11594 set d_stdio_cnt_lval
11595 eval $setvar
11596
11597
11598 : test whether setting _ptr sets _cnt as a side effect
11599 d_stdio_ptr_lval_sets_cnt="$undef"
11600 d_stdio_ptr_lval_nochange_cnt="$undef"
11601 case "$d_stdio_ptr_lval$d_stdstdio" in
11602 $define$define)
11603         echo "Checking to see what happens if we set the stdio ptr..." >&4
11604 $cat >try.c <<EOP
11605 #include <stdio.h>
11606 /* Can we scream? */
11607 /* Eat dust sed :-) */
11608 /* In the buffer space, no one can hear you scream. */
11609 #define FILE_ptr(fp)    $stdio_ptr
11610 #define FILE_cnt(fp)    $stdio_cnt
11611 #include <sys/types.h>
11612 int main() {
11613         FILE *fp = fopen("try.c", "r");
11614         int c;
11615         char *ptr;
11616         size_t cnt;
11617         if (!fp) {
11618             puts("Fail even to read");
11619             exit(1);
11620         }
11621         c = getc(fp); /* Read away the first # */
11622         if (c == EOF) {
11623             puts("Fail even to read");
11624             exit(1);
11625         }
11626         if (!(
11627                 18 <= FILE_cnt(fp) &&
11628                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
11629         )) {
11630                 puts("Fail even to read");
11631                 exit (1);
11632         }
11633         ptr = (char*) FILE_ptr(fp);
11634         cnt = (size_t)FILE_cnt(fp);
11635
11636         FILE_ptr(fp) += 42;
11637
11638         if ((char*)FILE_ptr(fp) != (ptr + 42)) {
11639                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
11640                 exit (1);
11641         }
11642         if (FILE_cnt(fp) <= 20) {
11643                 printf ("Fail (<20 chars to test)");
11644                 exit (1);
11645         }
11646         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
11647                 puts("Fail compare");
11648                 exit (1);
11649         }
11650         if (cnt == FILE_cnt(fp)) {
11651                 puts("Pass_unchanged");
11652                 exit (0);
11653         }       
11654         if (FILE_cnt(fp) == (cnt - 42)) {
11655                 puts("Pass_changed");
11656                 exit (0);
11657         }
11658         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
11659         return 1;
11660
11661 }
11662 EOP
11663         set try
11664         if eval $compile; then
11665                 case `./try$exe_ext` in
11666                 Pass_changed)
11667                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
11668                         d_stdio_ptr_lval_sets_cnt="$define" ;;
11669                 Pass_unchanged)
11670                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
11671                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
11672                 Fail*)
11673                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
11674                 *)
11675                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
11676         esac
11677         else
11678                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
11679         fi
11680         $rm -f try.c try
11681         ;;
11682 esac
11683
11684 : see if _base is also standard
11685 val="$undef"
11686 case "$d_stdstdio" in
11687 $define)
11688         $cat >try.c <<EOP
11689 #include <stdio.h>
11690 #define FILE_base(fp)   $stdio_base
11691 #define FILE_bufsiz(fp) $stdio_bufsiz
11692 int main() {
11693         FILE *fp = fopen("try.c", "r");
11694         char c = getc(fp);
11695         if (
11696                 19 <= FILE_bufsiz(fp) &&
11697                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
11698         )
11699                 exit(0);
11700         exit(1);
11701 }
11702 EOP
11703         set try
11704         if eval $compile; then
11705                 if ./try; then
11706                         echo "And its _base field acts std."
11707                         val="$define"
11708                 else
11709                         echo "But its _base field isn't std."
11710                 fi
11711         else
11712                 echo "However, it seems to be lacking the _base field."
11713         fi
11714         $rm -f try.c try
11715         ;;
11716 esac
11717 set d_stdiobase
11718 eval $setvar
11719
11720 $cat >&4 <<EOM
11721 Checking how to access stdio streams by file descriptor number...
11722 EOM
11723 case "$stdio_stream_array" in
11724 '')     $cat >try.c <<EOCP
11725 #include <stdio.h>
11726 int main() {
11727   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
11728     printf("yes\n");
11729 }
11730 EOCP
11731         for s in _iob __iob __sF
11732         do
11733                 set try -DSTDIO_STREAM_ARRAY=$s
11734                 if eval $compile; then
11735                         case "`./try$exe_ext`" in
11736                         yes)    stdio_stream_array=$s; break ;;
11737                         esac
11738                 fi
11739         done
11740         $rm -f try.* try$exe_ext
11741 esac
11742 case "$stdio_stream_array" in
11743 '')     $cat >&4 <<EOM
11744 I can't figure out how to access stdio streams by file descriptor number.
11745 EOM
11746         d_stdio_stream_array="$undef"
11747         ;;
11748 *)      $cat >&4 <<EOM
11749 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
11750 EOM
11751         d_stdio_stream_array="$define"
11752         ;;
11753 esac
11754
11755 : see if strcoll exists
11756 set strcoll d_strcoll
11757 eval $inlibc
11758
11759 : check for structure copying
11760 echo " "
11761 echo "Checking to see if your C compiler can copy structs..." >&4
11762 $cat >try.c <<'EOCP'
11763 int main()
11764 {
11765         struct blurfl {
11766                 int dyick;
11767         } foo, bar;
11768
11769         foo = bar;
11770 }
11771 EOCP
11772 if $cc -c try.c >/dev/null 2>&1 ; then
11773         val="$define"
11774         echo "Yup, it can."
11775 else
11776         val="$undef"
11777         echo "Nope, it can't."
11778 fi
11779 set d_strctcpy
11780 eval $setvar
11781 $rm -f try.*
11782
11783 : see if strerror and/or sys_errlist[] exist
11784 echo " "
11785 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
11786     if set strerror val -f d_strerror; eval $csym; $val; then
11787                 echo 'strerror() found.' >&4
11788                 d_strerror="$define"
11789                 d_strerrm='strerror(e)'
11790                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11791                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
11792                         d_syserrlst="$define"
11793                 else
11794                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
11795                         d_syserrlst="$undef"
11796                 fi
11797     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
11798                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
11799                 echo 'strerror() found in string header.' >&4
11800                 d_strerror="$define"
11801                 d_strerrm='strerror(e)'
11802                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11803                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
11804                                 d_syserrlst="$define"
11805                 else
11806                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
11807                         d_syserrlst="$undef"
11808                 fi
11809     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
11810                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
11811                 d_strerror="$undef"
11812                 d_syserrlst="$define"
11813                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
11814     else
11815                 echo 'strerror() and sys_errlist[] NOT found.' >&4
11816                 d_strerror="$undef"
11817                 d_syserrlst="$undef"
11818                 d_strerrm='"unknown"'
11819     fi
11820 fi
11821
11822 : see if strtod exists
11823 set strtod d_strtod
11824 eval $inlibc
11825
11826 : see if strtol exists
11827 set strtol d_strtol
11828 eval $inlibc
11829
11830 : see if strtold exists
11831 set strtold d_strtold
11832 eval $inlibc
11833
11834 : see if strtoll exists
11835 set strtoll d_strtoll
11836 eval $inlibc
11837
11838 case "$d_longlong-$d_strtoll" in
11839 "$define-$define")
11840         $cat <<EOM
11841 Checking whether your strtoll() works okay...
11842 EOM
11843         $cat >try.c <<'EOCP'
11844 #include <errno.h>
11845 #ifdef __hpux
11846 #define strtoll __strtoll
11847 #endif
11848 #ifdef __EMX__
11849 #define strtoll _strtoll
11850 #endif
11851 #include <stdio.h>
11852 extern long long int strtoll(char *s, char **, int); 
11853 static int bad = 0;
11854 int check(char *s, long long ell, int een) {
11855         long long gll;
11856         errno = 0;
11857         gll = strtoll(s, 0, 10);
11858         if (!((gll == ell) && (errno == een)))
11859                 bad++;
11860 }
11861 int main() {
11862         check(" 1",                                      1LL, 0);
11863         check(" 0",                                      0LL, 0);
11864         check("-1",                                     -1LL, 0);
11865         check("-9223372036854775808", -9223372036854775808LL, 0);
11866         check("-9223372036854775808", -9223372036854775808LL, 0);
11867         check(" 9223372036854775807",  9223372036854775807LL, 0);
11868         check("-9223372036854775808", -9223372036854775808LL, 0);
11869         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
11870         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
11871         if (!bad)
11872                 printf("ok\n");
11873 }
11874 EOCP
11875         set try
11876         if eval $compile; then
11877                 yyy=`./try`
11878                 case "$yyy" in
11879                 ok) echo "Your strtoll() seems to be working okay." ;;
11880                 *) cat <<EOM >&4
11881 Your strtoll() doesn't seem to be working okay.
11882 EOM
11883                    d_strtoll="$undef"
11884                    ;;
11885                 esac
11886         else
11887                 echo "(I can't seem to compile the test program--assuming it doesn't)"
11888                 d_strtoll="$undef"
11889         fi
11890         ;;
11891 esac
11892
11893 : see if strtoul exists
11894 set strtoul d_strtoul
11895 eval $inlibc
11896
11897 : see if strtoull exists
11898 set strtoull d_strtoull
11899 eval $inlibc
11900
11901 case "$d_longlong-$d_strtoull" in
11902 "$define-$define")
11903         $cat <<EOM
11904 Checking whether your strtoull() works okay...
11905 EOM
11906         $cat >try.c <<'EOCP'
11907 #include <errno.h>
11908 #ifdef __hpux
11909 #define strtoull __strtoull
11910 #endif
11911 #include <stdio.h>
11912 extern unsigned long long int strtoull(char *s, char **, int); 
11913 static int bad = 0;
11914 int check(char *s, long long eull, int een) {
11915         long long gull;
11916         errno = 0;
11917         gull = strtoull(s, 0, 10);
11918         if (!((gull == eull) && (errno == een)))
11919                 bad++;
11920 }
11921 int main() {
11922         check(" 1",                                       1LL, 0);
11923         check(" 0",                                       0LL, 0);
11924         check("18446744073709551615", 18446744073709551615ULL, 0);
11925         check("18446744073709551616", 18446744073709551615ULL, ERANGE);
11926         if (!bad)
11927                 printf("ok\n");
11928 }
11929 EOCP
11930         set try
11931         if eval $compile; then
11932                 case "`./try`" in
11933                 ok) echo "Your strtoull() seems to be working okay." ;;
11934                 *) cat <<EOM >&4
11935 Your strtoull() doesn't seem to be working okay.
11936 EOM
11937                    d_strtoull="$undef"
11938                    ;;
11939                 esac
11940         fi
11941         ;;
11942 esac
11943
11944 : see if strtouq exists
11945 set strtouq d_strtouq
11946 eval $inlibc
11947
11948 : see if strxfrm exists
11949 set strxfrm d_strxfrm
11950 eval $inlibc
11951
11952 : see if symlink exists
11953 set symlink d_symlink
11954 eval $inlibc
11955
11956 : see if syscall exists
11957 set syscall d_syscall
11958 eval $inlibc
11959
11960 : see if sysconf exists
11961 set sysconf d_sysconf
11962 eval $inlibc
11963
11964 : see if system exists
11965 set system d_system
11966 eval $inlibc
11967
11968 : see if tcgetpgrp exists
11969 set tcgetpgrp d_tcgetpgrp
11970 eval $inlibc
11971
11972 : see if tcsetpgrp exists
11973 set tcsetpgrp d_tcsetpgrp
11974 eval $inlibc
11975
11976 : see if prototype for telldir is available
11977 echo " "
11978 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
11979 eval $hasproto
11980
11981 : see if this is a sys/times.h system
11982 set sys/times.h i_systimes
11983 eval $inhdr
11984
11985 : see if times exists
11986 echo " "
11987 if set times val -f d_times; eval $csym; $val; then
11988         echo 'times() found.' >&4
11989         d_times="$define"
11990         inc=''
11991         case "$i_systimes" in
11992         "$define") inc='sys/times.h';;
11993         esac
11994         rp="What is the type returned by times() on this system?"
11995         set clock_t clocktype long stdio.h sys/types.h $inc
11996         eval $typedef_ask
11997 else
11998         echo 'times() NOT found, hope that will do.' >&4
11999         d_times="$undef"
12000         clocktype='int'
12001 fi
12002
12003 : see if truncate exists
12004 set truncate d_truncate
12005 eval $inlibc
12006
12007 : see if tzname[] exists
12008 echo " "
12009 if set tzname val -a d_tzname; eval $csym; $val; then
12010         val="$define"
12011         echo 'tzname[] found.' >&4
12012 else
12013         val="$undef"
12014         echo 'tzname[] NOT found.' >&4
12015 fi
12016 set d_tzname
12017 eval $setvar
12018
12019 : see if umask exists
12020 set umask d_umask
12021 eval $inlibc
12022
12023 : see if ustat exists
12024 set ustat d_ustat
12025 eval $inlibc
12026
12027 : backward compatibility for d_hvfork
12028 if test X$d_hvfork != X; then
12029         d_vfork="$d_hvfork"
12030         d_hvfork=''
12031 fi
12032 : see if there is a vfork
12033 val=''
12034 set vfork val
12035 eval $inlibc
12036
12037 : Ok, but do we want to use it. vfork is reportedly unreliable in 
12038 : perl on Solaris 2.x, and probably elsewhere.
12039 case "$val" in
12040 $define)
12041         echo " "
12042         case "$usevfork" in
12043         false) dflt='n';;
12044         *) dflt='y';;
12045         esac
12046         cat <<'EOM'
12047  
12048 Perl can only use a vfork() that doesn't suffer from strict
12049 restrictions on calling functions or modifying global data in
12050 the child.  For example, glibc-2.1 contains such a vfork()
12051 that is unsuitable.  If your system provides a proper fork()
12052 call, chances are that you do NOT want perl to use vfork().
12053
12054 EOM
12055         rp="Do you still want to use vfork()?"
12056         . ./myread
12057         case "$ans" in
12058         y|Y) ;;
12059         *)
12060                 echo "Ok, we won't use vfork()."
12061                 val="$undef"
12062                 ;;
12063         esac
12064         ;;
12065 esac
12066 set d_vfork
12067 eval $setvar
12068 case "$d_vfork" in
12069 $define) usevfork='true';;
12070 *) usevfork='false';;
12071 esac
12072
12073 : see if this is an sysdir system
12074 set sys/dir.h i_sysdir
12075 eval $inhdr
12076
12077 : see if this is an sysndir system
12078 set sys/ndir.h i_sysndir
12079 eval $inhdr
12080
12081 : see if closedir exists
12082 set closedir d_closedir
12083 eval $inlibc
12084
12085 case "$d_closedir" in
12086 "$define")
12087         echo " "
12088         echo "Checking whether closedir() returns a status..." >&4
12089         cat > closedir.c <<EOM
12090 #$i_dirent I_DIRENT             /**/
12091 #$i_sysdir I_SYS_DIR            /**/
12092 #$i_sysndir I_SYS_NDIR          /**/
12093 #$i_systypes I_SYS_TYPES        /**/
12094
12095 #if defined(I_SYS_TYPES)
12096 #include <sys/types.h>
12097 #endif
12098 #if defined(I_DIRENT)
12099 #include <dirent.h>
12100 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
12101 #include <sys/dir.h>
12102 #endif
12103 #else
12104 #ifdef I_SYS_NDIR
12105 #include <sys/ndir.h>
12106 #else
12107 #ifdef I_SYS_DIR
12108 #ifdef hp9000s500
12109 #include <ndir.h>       /* may be wrong in the future */
12110 #else
12111 #include <sys/dir.h>
12112 #endif
12113 #endif
12114 #endif
12115 #endif 
12116 int main() { return closedir(opendir(".")); }
12117 EOM
12118         set closedir
12119         if eval $compile_ok; then
12120                 if ./closedir > /dev/null 2>&1 ; then
12121                         echo "Yes, it does."
12122                         val="$undef"
12123                 else
12124                         echo "No, it doesn't."
12125                         val="$define"
12126                 fi
12127         else
12128                 echo "(I can't seem to compile the test program--assuming it doesn't)"
12129                 val="$define"
12130         fi
12131         ;;
12132 *)
12133         val="$undef";
12134         ;;
12135 esac
12136 set d_void_closedir
12137 eval $setvar
12138 $rm -f closedir*
12139 : see if there is a wait4
12140 set wait4 d_wait4
12141 eval $inlibc
12142
12143 : see if waitpid exists
12144 set waitpid d_waitpid
12145 eval $inlibc
12146
12147 : see if wcstombs exists
12148 set wcstombs d_wcstombs
12149 eval $inlibc
12150
12151 : see if wctomb exists
12152 set wctomb d_wctomb
12153 eval $inlibc
12154
12155 : preserve RCS keywords in files with variable substitution, grrr
12156 Date='$Date'
12157 Id='$Id'
12158 Log='$Log'
12159 RCSfile='$RCSfile'
12160 Revision='$Revision'
12161
12162 case "$crosscompile" in
12163 ''|[nN]*) crosscompile="$undef" ;;
12164 esac
12165
12166 case "$osname" in
12167 next|rhapsody|darwin) multiarch="$define" ;;
12168 esac
12169 case "$multiarch" in
12170 ''|[nN]*) multiarch="$undef" ;;
12171 esac
12172
12173 : check for alignment requirements
12174 echo " "
12175 case "$crosscompile$multiarch" in
12176 *$define*)
12177         $cat <<EOM
12178 You seem to be either cross-compiling or doing a multiarchitecture build,
12179 skipping the memory alignment check.
12180
12181 EOM
12182         case "$alignbytes" in
12183         '') alignbytes=8 ;;
12184         esac
12185         ;;
12186 *)
12187         case "$alignbytes" in
12188         '') echo "Checking alignment constraints..." >&4
12189                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
12190                         $cat >try.c <<'EOCP'
12191 typedef long double NV;
12192 EOCP
12193                 else
12194                         $cat >try.c <<'EOCP'
12195 typedef double NV;
12196 EOCP
12197                 fi
12198                 $cat >>try.c <<'EOCP'
12199 #include <stdio.h>
12200 struct foobar {
12201         char foo;
12202         NV bar;
12203 } try_algn;
12204 int main()
12205 {
12206     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
12207     return(0);
12208 }
12209 EOCP
12210                 set try
12211                 if eval $compile_ok; then
12212                         dflt=`./try`
12213                 else
12214                         dflt='8'
12215                         echo "(I can't seem to compile the test program...)"
12216                 fi
12217                 ;;
12218         *) dflt="$alignbytes"
12219                 ;;
12220         esac
12221         rp="Doubles must be aligned on a how-many-byte boundary?"
12222         . ./myread
12223         alignbytes="$ans"
12224         $rm -f try.c try
12225         ;;
12226 esac
12227
12228
12229 : set the base revision
12230 baserev=5.0
12231
12232 : check for ordering of bytes in a long
12233 echo " "
12234 case "$crosscompile$multiarch" in
12235 *$define*)
12236         $cat <<EOM
12237 You seem to be either cross-compiling or doing a multiarchitecture build,
12238 skipping the byteorder check.
12239
12240 EOM
12241         byteorder='0xffff'
12242         ;;
12243 *)
12244         case "$byteorder" in
12245         '')
12246                 $cat <<'EOM'
12247 In the following, larger digits indicate more significance.  A big-endian
12248 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
12249 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
12250 machines may have weird orders like 3412.  A Cray will report 87654321,
12251 an Alpha will report 12345678. If the test program works the default is
12252 probably right.
12253 I'm now running the test program...
12254 EOM
12255                 $cat >try.c <<'EOCP'
12256 #include <stdio.h>
12257 int main()
12258 {
12259         int i;
12260         union {
12261                 unsigned long l;
12262                 char c[sizeof(long)];
12263         } u;
12264
12265         if (sizeof(long) > 4)
12266                 u.l = (0x08070605L << 32) | 0x04030201L;
12267         else
12268                 u.l = 0x04030201L;
12269         for (i = 0; i < sizeof(long); i++)
12270                 printf("%c", u.c[i]+'0');
12271         printf("\n");
12272         exit(0);
12273 }
12274 EOCP
12275                 xxx_prompt=y
12276                 set try
12277                 if eval $compile && ./try > /dev/null; then
12278                         dflt=`./try`
12279                         case "$dflt" in
12280                         [1-4][1-4][1-4][1-4]|12345678|87654321)
12281                                 echo "(The test program ran ok.)"
12282                                 echo "byteorder=$dflt"
12283                                 xxx_prompt=n
12284                         ;;
12285                         ????|????????) echo "(The test program ran ok.)" ;;
12286                         *) echo "(The test program didn't run right for some reason.)" ;;
12287                         esac
12288                 else
12289                         dflt='4321'
12290                         cat <<'EOM'
12291 (I can't seem to compile the test program.  Guessing big-endian...)
12292 EOM
12293                 fi
12294                 case "$xxx_prompt" in
12295                 y)
12296                         rp="What is the order of bytes in a long?"
12297                         . ./myread
12298                         byteorder="$ans"
12299                         ;;
12300                 *)      byteorder=$dflt
12301                         ;;
12302                 esac
12303                 ;;
12304         esac
12305         $rm -f try.c try
12306         ;;
12307 esac
12308
12309
12310 : how do we catenate cpp tokens here?
12311 echo " "
12312 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
12313 $cat >cpp_stuff.c <<'EOCP'
12314 #define RCAT(a,b)a/**/b
12315 #define ACAT(a,b)a ## b
12316 RCAT(Rei,ser)
12317 ACAT(Cir,cus)
12318 EOCP
12319 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
12320 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
12321         echo "Oh!  Smells like ANSI's been here." >&4
12322         echo "We can catify or stringify, separately or together!"
12323         cpp_stuff=42
12324 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
12325         echo "Ah, yes!  The good old days!" >&4
12326         echo "However, in the good old days we don't know how to stringify and"
12327         echo "catify at the same time."
12328         cpp_stuff=1
12329 else
12330         $cat >&4 <<EOM
12331 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
12332 to have to edit the values of CAT[2-5] in config.h...
12333 EOM
12334         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
12335 fi
12336 $rm -f cpp_stuff.*
12337
12338 : see if this is a db.h system
12339 set db.h i_db
12340 eval $inhdr
12341
12342 case "$i_db" in
12343 $define)
12344         : Check db version.
12345         echo " "
12346         echo "Checking Berkeley DB version ..." >&4
12347         $cat >try.c <<EOCP
12348 #$d_const HASCONST
12349 #ifndef HASCONST
12350 #define const
12351 #endif
12352 #include <sys/types.h>
12353 #include <stdio.h>
12354 #include <db.h>
12355 int main()
12356 {
12357 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
12358     int Major, Minor, Patch ;
12359     unsigned long Version ;
12360     (void)db_version(&Major, &Minor, &Patch) ;
12361     printf("You have Berkeley DB Version 2 or greater\n");
12362
12363     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
12364                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
12365     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
12366                 Major, Minor, Patch) ;
12367
12368     /* check that db.h & libdb are compatible */
12369     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
12370         printf("db.h and libdb are incompatible\n") ;
12371         exit(3);        
12372     }
12373
12374     printf("db.h and libdb are compatible\n") ;
12375
12376     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
12377                 + DB_VERSION_PATCH ;
12378
12379     /* needs to be >= 2.3.4 */
12380     if (Version < 2003004) {
12381     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
12382         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
12383         exit(2);        
12384     }
12385
12386     exit(0);
12387 #else
12388 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
12389     printf("You have Berkeley DB Version 1\n");
12390     exit(0);    /* DB version < 2: the coast is clear. */
12391 #else
12392     exit(1);    /* <db.h> not Berkeley DB? */
12393 #endif
12394 #endif
12395 }
12396 EOCP
12397         set try
12398         if eval $compile_ok && ./try; then
12399                 echo 'Looks OK.' >&4
12400         else
12401                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
12402                 i_db=$undef
12403                 case " $libs " in
12404                 *"-ldb "*)
12405                         : Remove db from list of libraries to use
12406                         echo "Removing unusable -ldb from library list" >&4
12407                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
12408                         shift
12409                         libs="$*"
12410                         echo "libs = $libs" >&4
12411                         ;;
12412                 esac
12413         fi
12414         $rm -f try.*
12415         ;;
12416 esac
12417
12418 case "$i_db" in
12419 define)
12420         : Check the return type needed for hash 
12421         echo " "
12422         echo "Checking return type needed for hash for Berkeley DB ..." >&4
12423         $cat >try.c <<EOCP
12424 #$d_const HASCONST
12425 #ifndef HASCONST
12426 #define const
12427 #endif
12428 #include <sys/types.h>
12429 #include <db.h>
12430
12431 #ifndef DB_VERSION_MAJOR
12432 u_int32_t hash_cb (ptr, size)
12433 const void *ptr;
12434 size_t size;
12435 {
12436 }
12437 HASHINFO info;
12438 int main()
12439 {
12440         info.hash = hash_cb;
12441 }
12442 #endif
12443 EOCP
12444         if $cc $ccflags -c try.c >try.out 2>&1 ; then
12445                 if $contains warning try.out >>/dev/null 2>&1 ; then
12446                         db_hashtype='int'
12447                 else
12448                         db_hashtype='u_int32_t'
12449                 fi
12450         else
12451                 : XXX Maybe we should just give up here.
12452                 db_hashtype=u_int32_t
12453                 $cat try.out >&4
12454                 echo "Help:  I can't seem to compile the db test program." >&4
12455                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
12456         fi
12457         $rm -f try.*
12458         echo "Your version of Berkeley DB uses $db_hashtype for hash."
12459         ;;
12460 *)      db_hashtype=u_int32_t
12461         ;;
12462 esac
12463 case "$i_db" in
12464 define)
12465         : Check the return type needed for prefix 
12466         echo " "
12467         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
12468         cat >try.c <<EOCP
12469 #$d_const HASCONST
12470 #ifndef HASCONST
12471 #define const
12472 #endif
12473 #include <sys/types.h>
12474 #include <db.h>
12475
12476 #ifndef DB_VERSION_MAJOR
12477 size_t prefix_cb (key1, key2)
12478 const DBT *key1;
12479 const DBT *key2;
12480 {
12481 }
12482 BTREEINFO info;
12483 int main()
12484 {
12485         info.prefix = prefix_cb;
12486 }
12487 #endif
12488 EOCP
12489         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
12490                 if $contains warning try.out >>/dev/null 2>&1 ; then
12491                         db_prefixtype='int'
12492                 else
12493                         db_prefixtype='size_t'
12494                 fi
12495         else
12496                 db_prefixtype='size_t'
12497                 : XXX Maybe we should just give up here.
12498                 $cat try.out >&4
12499                 echo "Help:  I can't seem to compile the db test program." >&4
12500                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
12501         fi
12502         $rm -f try.*
12503         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
12504         ;;
12505 *)      db_prefixtype='size_t'
12506         ;;
12507 esac
12508
12509 : check for void type
12510 echo " "
12511 echo "Checking to see how well your C compiler groks the void type..." >&4
12512 case "$voidflags" in
12513 '')
12514         $cat >try.c <<'EOCP'
12515 #if TRY & 1
12516 void sub() {
12517 #else
12518 sub() {
12519 #endif
12520         extern void moo();      /* function returning void */
12521         void (*goo)();          /* ptr to func returning void */
12522 #if TRY & 8
12523         void *hue;              /* generic ptr */
12524 #endif
12525 #if TRY & 2
12526         void (*foo[10])();
12527 #endif
12528
12529 #if TRY & 4
12530         if(goo == moo) {
12531                 exit(0);
12532         }
12533 #endif
12534         exit(0);
12535 }
12536 int main() { sub(); }
12537 EOCP
12538         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
12539                 voidflags=$defvoidused
12540         echo "Good.  It appears to support void to the level $package wants.">&4
12541                 if $contains warning .out >/dev/null 2>&1; then
12542                         echo "However, you might get some warnings that look like this:"
12543                         $cat .out
12544                 fi
12545         else
12546 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
12547                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
12548                         echo "It supports 1..."
12549                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
12550                                 echo "It also supports 2..."
12551                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
12552                                         voidflags=7
12553                                         echo "And it supports 4 but not 8 definitely."
12554                                 else
12555                                         echo "It doesn't support 4..."
12556                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
12557                                                 voidflags=11
12558                                                 echo "But it supports 8."
12559                                         else
12560                                                 voidflags=3
12561                                                 echo "Neither does it support 8."
12562                                         fi
12563                                 fi
12564                         else
12565                                 echo "It does not support 2..."
12566                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
12567                                         voidflags=13
12568                                         echo "But it supports 4 and 8."
12569                                 else
12570                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
12571                                                 voidflags=5
12572                                                 echo "And it supports 4 but has not heard about 8."
12573                                         else
12574                                                 echo "However it supports 8 but not 4."
12575                                         fi
12576                                 fi
12577                         fi
12578                 else
12579                         echo "There is no support at all for void."
12580                         voidflags=0
12581                 fi
12582         fi
12583 esac
12584 case "$voidflags" in
12585 "$defvoidused") ;;
12586 *)      $cat >&4 <<'EOM'
12587   Support flag bits are:
12588     1: basic void declarations.
12589     2: arrays of pointers to functions returning void.
12590     4: operations between pointers to and addresses of void functions.
12591     8: generic void pointers.
12592 EOM
12593         dflt="$voidflags";
12594         rp="Your void support flags add up to what?"
12595         . ./myread
12596         voidflags="$ans"
12597         ;;
12598 esac
12599 $rm -f try.* .out
12600
12601
12602 : How can we generate normalized random numbers ?
12603 echo " "
12604 echo "Looking for a random number function..." >&4
12605 case "$randfunc" in
12606 '')
12607         if set drand48 val -f; eval $csym; $val; then
12608                 dflt="drand48"
12609                 echo "Good, found drand48()." >&4
12610         elif set random val -f; eval $csym; $val; then
12611                 dflt="random"
12612                 echo "OK, found random()." >&4
12613         else
12614                 dflt="rand"
12615                 echo "Yick, looks like I have to use rand()." >&4
12616         fi
12617         echo " "
12618         ;;
12619 *)
12620         dflt="$randfunc"
12621         ;;
12622 esac
12623 cont=true
12624
12625 case "$ccflags" in
12626 *-Dmy_rand=*|*-Dmy_srand=*)
12627         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
12628         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
12629         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
12630         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
12631         ;;
12632 esac
12633
12634 while $test "$cont"; do
12635         rp="Use which function to generate random numbers?"
12636         . ./myread
12637         if $test "$ans" = "$dflt"; then
12638                 : null
12639         else
12640                 randbits=''
12641         fi
12642         randfunc="$ans"
12643         if set $ans val -f; eval $csym; $val; then
12644                 cont=''
12645         else
12646                 dflt=y
12647                 rp="I cannot find function $ans. Use that name anyway?"
12648                 . ./myread
12649                 dflt=rand
12650                 case "$ans" in
12651                         [yY]*) cont='';;
12652                 esac
12653         fi
12654         case "$cont" in
12655         '')
12656                 case "$randfunc" in
12657                 drand48)
12658                         drand01="drand48()"
12659                         seedfunc="srand48"
12660                         randbits=48
12661                         randseedtype=long
12662                         ;;
12663                 rand|random)
12664                         case "$randbits" in
12665                         '')
12666 echo "Checking to see how many bits your $randfunc() function produces..." >&4
12667                                 $cat >try.c <<EOCP
12668 #$i_unistd I_UNISTD
12669 #$i_stdlib I_STDLIB
12670 #include <stdio.h>
12671 #ifdef I_UNISTD
12672 #  include <unistd.h>
12673 #endif
12674 #ifdef I_STDLIB
12675 #  include <stdlib.h>
12676 #endif
12677 int main()
12678 {
12679         register int i;
12680         register unsigned long tmp;
12681         register unsigned long max = 0L;
12682
12683         for (i = 1000; i; i--) {
12684                 tmp = (unsigned long) $randfunc();
12685                 if (tmp > max) max = tmp;
12686         }
12687         for (i = 0; max; i++)
12688                 max /= 2;
12689         printf("%d\n",i);
12690 }
12691 EOCP
12692                                 set try
12693                                 if eval $compile_ok; then
12694                                         dflt=`try`
12695                                 else
12696                                         dflt='?'
12697                                         echo "(I can't seem to compile the test program...)"
12698                                 fi
12699                                 ;;
12700                         *)
12701                                 dflt="$randbits"
12702                                 ;;
12703                         esac
12704                         rp="How many bits does your $randfunc() function produce?"
12705                         . ./myread
12706                         randbits="$ans"
12707                         $rm -f try.c try
12708                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12709                         seedfunc="s$randfunc"
12710                         randseedtype=unsigned
12711                         ;;
12712                 *)
12713                         dflt="31"
12714                         rp="How many bits does your $randfunc() function produce?"
12715                         . ./myread
12716                         randbits="$ans"
12717                         seedfunc="s$randfunc"
12718                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12719                         if set $seedfunc val -f; eval $csym; $val; then
12720                                 echo "(Using $seedfunc() to seed random generator)"
12721                         else
12722                                 echo "(Warning: no $seedfunc() to seed random generator)"
12723                                 seedfunc=rand
12724                         fi
12725                         randseedtype=unsigned
12726                         ;;
12727                 esac
12728                 ;;
12729         esac
12730 done
12731
12732 echo " "
12733 echo "Determining whether or not we are on an EBCDIC system..." >&4
12734 $cat >tebcdic.c <<'EOM'
12735 int main()
12736 {
12737   if ('M'==0xd4) return 0;
12738   return 1;
12739 }
12740 EOM
12741
12742 val=$undef
12743 set tebcdic
12744 if eval $compile_ok; then
12745         if ./tebcdic; then
12746                 echo "You seem to speak EBCDIC." >&4
12747                 val="$define"
12748         else
12749                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF8." >&4
12750         fi
12751 else
12752         echo "I'm unable to compile the test program." >&4
12753         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
12754 fi
12755 $rm -f tebcdic.c tebcdic
12756 set ebcdic
12757 eval $setvar
12758
12759 echo " "
12760 $cat >&4 <<EOM
12761 Checking how to flush all pending stdio output...
12762 EOM
12763 # I only know how to find the first 32 possibly open files on SunOS.
12764 # See also hints/sunos_4_1.sh and util.c  --AD
12765 case "$osname" in
12766 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
12767 esac
12768 $cat >>try.c <<EOCP
12769 #include <stdio.h>
12770 #$i_unistd I_UNISTD
12771 #ifdef I_UNISTD
12772 # include <unistd.h>
12773 #endif
12774 #$d_sysconf HAS_SYSCONF
12775 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
12776 #ifdef HAS_STDIO_STREAM_ARRAY
12777 # define STDIO_STREAM_ARRAY $stdio_stream_array
12778 #endif
12779 int main() {
12780   FILE* p = fopen("try.out", "w");
12781 #ifdef TRY_FPUTC
12782   fputc('x', p);
12783 #else
12784 # ifdef TRY_FPRINTF
12785   fprintf(p, "x");
12786 # endif
12787 #endif
12788 #ifdef TRY_FFLUSH_NULL
12789   fflush(NULL);
12790 #endif
12791 #ifdef TRY_FFLUSH_ALL
12792   {
12793     long open_max = -1;
12794 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
12795     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
12796 # else
12797 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
12798     open_max = sysconf(_SC_OPEN_MAX);
12799 #  else
12800 #   ifdef FOPEN_MAX
12801     open_max = FOPEN_MAX;
12802 #   else
12803 #    ifdef OPEN_MAX
12804     open_max = OPEN_MAX;
12805 #    else
12806 #     ifdef _NFILE
12807     open_max = _NFILE;
12808 #     endif
12809 #    endif
12810 #   endif
12811 #  endif
12812 # endif 
12813 # ifdef HAS_STDIO_STREAM_ARRAY
12814     if (open_max > 0) {
12815       long i;
12816       for (i = 0; i < open_max; i++)
12817             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
12818                 STDIO_STREAM_ARRAY[i]._file < open_max &&
12819                 STDIO_STREAM_ARRAY[i]._flag)
12820                 fflush(&STDIO_STREAM_ARRAY[i]);
12821     }   
12822   }
12823 # endif
12824 #endif
12825   _exit(42);
12826 }
12827 EOCP
12828 : first we have to find out how _not_ to flush
12829 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
12830     output=''
12831     set try -DTRY_FPUTC
12832     if eval $compile; then
12833             $rm -f try.out
12834             ./try$exe_ext 2>/dev/null
12835             if $test ! -s try.out -a "X$?" = X42; then
12836                 output=-DTRY_FPUTC
12837             fi
12838     fi
12839     case "$output" in
12840     '')
12841             set try -DTRY_FPRINTF
12842             $rm -f try.out
12843             if eval $compile; then
12844                     $rm -f try.out
12845                     ./try$exe_ext 2>/dev/null
12846                     if $test ! -s try.out -a "X$?" = X42; then
12847                         output=-DTRY_FPRINTF
12848                     fi
12849             fi
12850         ;;
12851     esac
12852 fi
12853 : check for fflush NULL behaviour
12854 case "$fflushNULL" in
12855 '')     set try -DTRY_FFLUSH_NULL $output
12856         if eval $compile; then
12857                 $rm -f try.out
12858                 ./try$exe_ext 2>/dev/null
12859                 code="$?"
12860                 if $test -s try.out -a "X$code" = X42; then
12861                         fflushNULL="`$cat try.out`"
12862                 else
12863                         if $test "X$code" != X42; then
12864                                 $cat >&4 <<EOM
12865 (If this test failed, don't worry, we'll try another method shortly.)
12866 EOM
12867                         fi
12868                 fi
12869         fi
12870         $rm -f core try.core core.try.*
12871         case "$fflushNULL" in
12872         x)      $cat >&4 <<EOM
12873 Your fflush(NULL) works okay for output streams.
12874 Let's see if it clobbers input pipes...
12875 EOM
12876 # As of mid-March 2000 all versions of Solaris appear to have a stdio
12877 # bug that improperly flushes the input end of pipes.  So we avoid the
12878 # autoflush on fork/system/exec support for now. :-(
12879 $cat >tryp.c <<EOCP
12880 #include <stdio.h>
12881 int
12882 main(int argc, char **argv)
12883 {
12884     char buf[1024];
12885     int i;
12886     char *bp = buf;
12887     while (1) {
12888         while ((i = getc(stdin)) != -1
12889                && (*bp++ = i) != '\n'
12890                && bp < &buf[1024])
12891         /* DO NOTHING */ ;
12892         *bp = '\0';
12893         fprintf(stdout, "%s", buf);
12894         fflush(NULL);
12895         if (i == -1)
12896             return 0;
12897         bp = buf;
12898     }
12899 }
12900 EOCP
12901                 fflushNULL="$define"
12902                 set tryp
12903                 if eval $compile; then
12904                     $rm -f tryp.out
12905                     $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
12906                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
12907                        $cat >&4 <<EOM
12908 fflush(NULL) seems to behave okay with input streams.
12909 EOM
12910                         fflushNULL="$define"
12911                     else
12912                         $cat >&4 <<EOM
12913 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
12914 EOM
12915                         fflushNULL="$undef"
12916                     fi
12917                 fi
12918                 $rm -f core tryp.c tryp.core core.tryp.*
12919                 ;;
12920         '')     $cat >&4 <<EOM
12921 Your fflush(NULL) isn't working (contrary to ANSI C).
12922 EOM
12923                 fflushNULL="$undef"
12924                 ;;
12925         *)      $cat >&4 <<EOM
12926 Cannot figure out whether your fflush(NULL) works or not.
12927 I'm assuming it doesn't (contrary to ANSI C).
12928 EOM
12929                 fflushNULL="$undef"
12930                 ;;
12931         esac
12932         ;;
12933 $define|true|[yY]*)
12934         fflushNULL="$define"
12935         ;;
12936 *)
12937         fflushNULL="$undef"
12938         ;;
12939 esac
12940 : check explicit looping only if NULL did not work, and if the pipe
12941 : bug does not show up on an explicit flush too
12942 case "$fflushNULL" in
12943 "$undef")
12944         $cat >tryp.c <<EOCP
12945 #include <stdio.h>
12946 int
12947 main(int argc, char **argv)
12948 {
12949     char buf[1024];
12950     int i;
12951     char *bp = buf;
12952     while (1) {
12953         while ((i = getc(stdin)) != -1
12954                && (*bp++ = i) != '\n'
12955                && bp < &buf[1024])
12956         /* DO NOTHING */ ;
12957         *bp = '\0';
12958         fprintf(stdout, "%s", buf);
12959         fflush(stdin);
12960         if (i == -1)
12961             return 0;
12962         bp = buf;
12963     }
12964 }
12965 EOCP
12966         set tryp
12967         if eval $compile; then
12968             $rm -f tryp.out
12969             $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
12970             if cmp tryp.c tryp.out >/dev/null 2>&1; then
12971                $cat >&4 <<EOM
12972 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
12973 EOM
12974                 : now check for fflushall behaviour
12975                 case "$fflushall" in
12976                 '')     set try -DTRY_FFLUSH_ALL $output
12977                         if eval $compile; then
12978                                 $cat >&4 <<EOM
12979 (Now testing the other method--but note that this also may fail.)
12980 EOM
12981                                 $rm -f try.out
12982                                 ./try$exe_ext 2>/dev/null
12983                                 if $test -s try.out -a "X$?" = X42; then
12984                                         fflushall="`$cat try.out`"
12985                                 fi
12986                         fi
12987                         $rm -f core try.core core.try.*
12988                         case "$fflushall" in
12989                         x)      $cat >&4 <<EOM
12990 Whew. Flushing explicitly all the stdio streams works.
12991 EOM
12992                                 fflushall="$define"
12993                                 ;;
12994                         '')     $cat >&4 <<EOM
12995 Sigh. Flushing explicitly all the stdio streams doesn't work.
12996 EOM
12997                                 fflushall="$undef"
12998                                 ;;
12999                         *)      $cat >&4 <<EOM
13000 Cannot figure out whether flushing stdio streams explicitly works or not.
13001 I'm assuming it doesn't.
13002 EOM
13003                                 fflushall="$undef"
13004                                 ;;
13005                         esac
13006                         ;;
13007                 "$define"|true|[yY]*)
13008                         fflushall="$define"
13009                         ;;
13010                 *)
13011                         fflushall="$undef"
13012                         ;;
13013                 esac
13014             else
13015                 $cat >&4 <<EOM
13016 All is futile.  Even fflush(stdin) clobbers input pipes!
13017 EOM
13018                 fflushall="$undef"
13019             fi
13020         else
13021             fflushall="$undef"
13022         fi
13023         $rm -f core tryp.c tryp.core core.tryp.*
13024         ;;
13025 *)      fflushall="$undef"
13026         ;;
13027 esac
13028
13029 case "$fflushNULL$fflushall" in
13030 undefundef)
13031         $cat <<EOM
13032 OK, I give up.  I cannot figure out how to flush pending stdio output.
13033 We won't be flushing handles at all before fork/exec/popen.
13034 EOM
13035         ;;
13036 esac
13037 $rm -f try.* try$exe_ext
13038
13039 : Store the full pathname to the ar program for use in the C program
13040 : Respect a hint or command line value for full_ar.
13041 case "$full_ar" in
13042 '') full_ar=$ar ;;
13043 esac
13044
13045 : Store the full pathname to the sed program for use in the C program
13046 full_sed=$sed
13047
13048 : see what type gids are declared as in the kernel
13049 echo " "
13050 echo "Looking for the type for group ids returned by getgid()."
13051 set gid_t gidtype xxx stdio.h sys/types.h
13052 eval $typedef
13053 case "$gidtype" in
13054 xxx)
13055         xxx=`./findhdr sys/user.h`
13056         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
13057         case $1 in
13058         unsigned) dflt="$1 $2" ;;
13059         *) dflt="$1" ;;
13060         esac
13061         ;;
13062 *) dflt="$gidtype";;
13063 esac
13064 case "$gidtype" in
13065 gid_t) echo "gid_t found." ;;
13066 *)      rp="What is the type for group ids returned by getgid()?"
13067         . ./myread
13068         gidtype="$ans"
13069         ;;
13070 esac
13071
13072 echo " "
13073 case "$gidtype" in
13074 *_t) zzz="$gidtype"     ;;
13075 *)   zzz="gid"          ;;
13076 esac
13077 echo "Checking the size of $zzz..." >&4 
13078 cat > try.c <<EOCP
13079 #include <sys/types.h>
13080 #include <stdio.h>
13081 int main() {
13082     printf("%d\n", (int)sizeof($gidtype));
13083     exit(0);
13084 }
13085 EOCP
13086 set try
13087 if eval $compile_ok; then
13088         yyy=`./try`
13089         case "$yyy" in
13090         '')     gidsize=4
13091                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
13092                 ;;
13093         *)      gidsize=$yyy
13094                 echo "Your $zzz is $gidsize bytes long."
13095                 ;;
13096         esac
13097 else
13098         gidsize=4
13099         echo "(I can't compile the test program--guessing $gidsize.)" >&4
13100 fi
13101
13102
13103 echo " "
13104 case "$gidtype" in
13105 *_t) zzz="$gidtype"     ;;
13106 *)   zzz="gid"          ;;
13107 esac
13108 echo "Checking the sign of $zzz..." >&4 
13109 cat > try.c <<EOCP
13110 #include <sys/types.h>
13111 #include <stdio.h>
13112 int main() {
13113         $gidtype foo = -1;
13114         if (foo < 0)
13115                 printf("-1\n");
13116         else
13117                 printf("1\n");
13118 }
13119 EOCP
13120 set try
13121 if eval $compile; then
13122         yyy=`./try`
13123         case "$yyy" in
13124         '')     gidsign=1
13125                 echo "(I can't execute the test program--guessing unsigned.)" >&4
13126                 ;;
13127         *)      gidsign=$yyy
13128                 case "$gidsign" in
13129                  1) echo "Your $zzz is unsigned." ;;
13130                 -1) echo "Your $zzz is signed."   ;;
13131                 esac
13132                 ;;
13133         esac
13134 else
13135         gidsign=1
13136         echo "(I can't compile the test program--guessing unsigned.)" >&4
13137 fi
13138
13139
13140 echo " "
13141
13142 if $test X"$quadtype" != X; then
13143
13144 echo "Checking how to print 64-bit integers..." >&4
13145
13146 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
13147         $cat >try.c <<'EOCP'
13148 #include <sys/types.h>
13149 #include <stdio.h>
13150 int main() {
13151   int q = 12345678901;
13152   printf("%ld\n", q);
13153 }
13154 EOCP
13155         set try
13156         if eval $compile; then
13157                 yyy=`./try$exe_ext`
13158                 case "$yyy" in
13159                 12345678901)
13160                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
13161                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
13162                         echo "We will use %d."
13163                         ;;
13164                 esac
13165         fi
13166 fi
13167
13168 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
13169         $cat >try.c <<'EOCP'
13170 #include <sys/types.h>
13171 #include <stdio.h>
13172 int main() {
13173   long q = 12345678901;
13174   printf("%ld\n", q);
13175 }
13176 EOCP
13177         set try
13178         if eval $compile; then
13179                 yyy=`./try$exe_ext`
13180                 case "$yyy" in
13181                 12345678901)
13182                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
13183                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
13184                         echo "We will use %ld."
13185                         ;;
13186                 esac
13187         fi
13188 fi
13189
13190 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
13191         $cat >try.c <<'EOCP'
13192 #include <sys/types.h>
13193 #include <inttypes.h>
13194 #include <stdio.h>
13195 int main() {
13196   int64_t q = 12345678901;
13197   printf("%" PRId64 "\n", q);
13198 }
13199 EOCP
13200         set try
13201         if eval $compile; then
13202                 yyy=`./try$exe_ext`
13203                 case "$yyy" in
13204                 12345678901)
13205                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
13206                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
13207                         echo "We will use the C9X style."
13208                         ;;
13209                 esac
13210         fi
13211 fi
13212
13213 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
13214         $cat >try.c <<'EOCP'
13215 #include <sys/types.h>
13216 #include <stdio.h>
13217 int main() {
13218   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
13219   printf("%lld\n", q);
13220 }
13221 EOCP
13222         set try
13223         if eval $compile; then
13224                 yyy=`./try$exe_ext`
13225                 case "$yyy" in
13226                 12345678901)
13227                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
13228                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
13229                         echo "We will use the %lld style."
13230                         ;;
13231                 esac
13232         fi
13233 fi
13234
13235 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
13236         $cat >try.c <<EOCP
13237 #include <sys/types.h>
13238 #include <stdio.h>
13239 int main() {
13240   $quadtype q = 12345678901;
13241   printf("%Ld\n", q);
13242 }
13243 EOCP
13244         set try
13245         if eval $compile; then
13246                 yyy=`./try$exe_ext`
13247                 case "$yyy" in
13248                 12345678901)
13249                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
13250                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
13251                         echo "We will use %Ld."
13252                         ;;
13253                 esac
13254         fi
13255 fi
13256
13257 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
13258         $cat >try.c <<EOCP
13259 #include <sys/types.h>
13260 #include <stdio.h>
13261 int main() {
13262   $quadtype q = 12345678901;
13263   printf("%qd\n", q);
13264 }
13265 EOCP
13266         set try
13267         if eval $compile; then
13268                 yyy=`./try$exe_ext`
13269                 case "$yyy" in
13270                 12345678901)
13271                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
13272                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
13273                         echo "We will use %qd."
13274                         ;;
13275                 esac
13276         fi
13277 fi
13278
13279 if $test X"$sPRId64" = X; then
13280         echo "Cannot figure out how to print 64-bit integers." >&4
13281 fi
13282
13283 $rm -f try try.*
13284
13285 fi
13286
13287 case "$sPRId64" in
13288 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
13289         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; 
13290         ;;
13291 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
13292         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; 
13293         ;;
13294 esac
13295
13296
13297 echo " "
13298 $echo "Checking the format strings to be used for Perl's internal types..." >&4
13299
13300 if $test X"$ivsize" = X8; then
13301         ivdformat="$sPRId64"
13302         uvuformat="$sPRIu64"
13303         uvoformat="$sPRIo64"
13304         uvxformat="$sPRIx64"
13305         uvXUformat="$sPRIXU64"
13306 else
13307         if $test X"$ivsize" = X"$longsize"; then
13308                 ivdformat='"ld"'
13309                 uvuformat='"lu"'
13310                 uvoformat='"lo"'
13311                 uvxformat='"lx"'
13312                 uvXUformat='"lX"'
13313         else
13314                 if $test X"$ivsize" = X"$intsize"; then
13315                         ivdformat='"d"'
13316                         uvuformat='"u"'
13317                         uvoformat='"o"'
13318                         uvxformat='"x"'
13319                         uvXUformat='"X"'
13320                 else
13321                         : far out
13322                         if $test X"$ivsize" = X"$shortsize"; then
13323                                 ivdformat='"hd"'
13324                                 uvuformat='"hu"'
13325                                 uvoformat='"ho"'
13326                                 uvxformat='"hx"'
13327                                 uvXUformat='"hX"'
13328                         fi
13329                 fi
13330         fi
13331 fi
13332
13333 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
13334         nveformat="$sPRIeldbl"
13335         nvfformat="$sPRIfldbl"
13336         nvgformat="$sPRIgldbl"
13337         nvEUformat="$sPRIEUldbl"
13338         nvFUformat="$sPRIFUldbl"
13339         nvGUformat="$sPRIGUldbl"
13340 else
13341         nveformat='"e"'
13342         nvfformat='"f"'
13343         nvgformat='"g"'
13344         nvEUformat='"E"'
13345         nvFUformat='"F"'
13346         nvGUformat='"G"'
13347 fi
13348
13349 case "$ivdformat" in
13350 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
13351     exit 1
13352     ;;
13353 esac
13354
13355
13356 echo " "
13357 $echo "Checking the format string to be used for gids..." >&4
13358
13359 case "$gidsign" in
13360 -1)     if $test X"$gidsize" = X"$ivsize"; then
13361                 gidformat="$ivdformat"
13362         else
13363                 if $test X"$gidsize" = X"$longsize"; then
13364                         gidformat='"ld"'
13365                 else
13366                         if $test X"$gidsize" = X"$intsize"; then
13367                                 gidformat='"d"'
13368                         else
13369                                 if $test X"$gidsize" = X"$shortsize"; then
13370                                         gidformat='"hd"'
13371                                 fi
13372                         fi
13373                 fi
13374         fi
13375         ;;
13376 *)      if $test X"$gidsize" = X"$uvsize"; then
13377                 gidformat="$uvuformat"
13378         else
13379                 if $test X"$gidsize" = X"$longsize"; then
13380                         gidformat='"lu"'
13381                 else
13382                         if $test X"$gidsize" = X"$intsize"; then
13383                                 gidformat='"u"'
13384                         else
13385                                 if $test X"$gidsize" = X"$shortsize"; then
13386                                         gidformat='"hu"'
13387                                 fi
13388                         fi
13389                 fi
13390         fi
13391         ;;
13392 esac
13393
13394 : see if getgroups exists
13395 set getgroups d_getgrps
13396 eval $inlibc
13397
13398 : see if setgroups exists
13399 set setgroups d_setgrps
13400 eval $inlibc
13401
13402
13403 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
13404 echo " "
13405 case "$d_getgrps$d_setgrps" in
13406 *define*)
13407         case "$groupstype" in
13408         '') dflt="$gidtype" ;;
13409         *)  dflt="$groupstype" ;;
13410         esac
13411         $cat <<EOM
13412 What type of pointer is the second argument to getgroups() and setgroups()?
13413 Usually this is the same as group ids, $gidtype, but not always.
13414
13415 EOM
13416         rp='What type pointer is the second argument to getgroups() and setgroups()?'
13417         . ./myread
13418         groupstype="$ans"
13419         ;;
13420 *)  groupstype="$gidtype";;
13421 esac
13422
13423 echo " "
13424 echo "Checking if your $make program sets \$(MAKE)..." >&4
13425 case "$make_set_make" in
13426 '')
13427         $sed 's/^X //' > testmake.mak << 'EOF'
13428 Xall:
13429 X       @echo 'maketemp="$(MAKE)"'
13430 EOF
13431         case "`$make -f testmake.mak 2>/dev/null`" in
13432         *maketemp=*) make_set_make='#' ;;
13433         *)      make_set_make="MAKE=$make" ;;
13434         esac
13435         $rm -f testmake.mak
13436         ;;
13437 esac
13438 case "$make_set_make" in
13439 '#') echo "Yup, it does.";;
13440 *) echo "Nope, it doesn't.";;
13441 esac
13442
13443 : see what type is used for mode_t
13444 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
13445 set mode_t modetype int stdio.h sys/types.h
13446 eval $typedef_ask
13447
13448 : define a fucntion to check prototypes
13449 $cat > protochk <<EOSH
13450 $startsh
13451 cc="$cc"
13452 optimize="$optimize"
13453 ccflags="$ccflags"
13454 prototype="$prototype"
13455 define="$define"
13456 rm=$rm
13457 EOSH
13458
13459 $cat >> protochk <<'EOSH'
13460
13461 $rm -f try.c
13462 foo="$1"
13463 shift
13464 while test $# -ge 2; do
13465         case "$1" in
13466                 $define) echo "#include <$2>" >> try.c ;;
13467                 literal) echo "$2" >> try.c ;;
13468         esac
13469     shift 2
13470 done
13471 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
13472 cat >> try.c <<'EOCP'
13473 #ifdef CAN_PROTOTYPE
13474 #define _(args) args
13475 #else
13476 #define _(args) ()
13477 #endif
13478 EOCP
13479 echo "$foo" >> try.c
13480 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
13481 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
13482 status=$?
13483 $rm -f try.[co]
13484 exit $status
13485 EOSH
13486 chmod +x protochk
13487 $eunicefix protochk
13488
13489 : see what type is used for size_t
13490 rp="What is the type used for the length parameter for string functions?"
13491 set size_t sizetype 'unsigned int' stdio.h sys/types.h
13492 eval $typedef_ask
13493
13494 : check for type of arguments to gethostbyaddr. 
13495 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
13496         case "$d_gethbyaddr" in
13497         $define)
13498                 $cat <<EOM
13499
13500 Checking to see what type of arguments are accepted by gethostbyaddr().
13501 EOM
13502                 hdrs="$define sys/types.h
13503                         $d_socket sys/socket.h 
13504                         $i_niin netinet/in.h 
13505                         $i_netdb netdb.h
13506                         $i_unistd unistd.h"
13507                 : The first arg can 'char *' or 'void *'
13508                 : The second arg is some of integral type
13509                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
13510                         for yyy in size_t long int; do
13511                                 case "$netdb_host_type" in
13512                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
13513                                         if ./protochk "$try" $hdrs; then
13514                                                 echo "Your system accepts $xxx for the first arg."
13515                                                 echo "...and $yyy for the second arg."
13516                                                 netdb_host_type="$xxx"
13517                                                 netdb_hlen_type="$yyy"
13518                                         fi
13519                                         ;;
13520                                 esac
13521                         done
13522                 done
13523                 : In case none of those worked, prompt the user.
13524                 case "$netdb_host_type" in
13525                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
13526                         dflt='char *'
13527                         . ./myread
13528                         netdb_host_type=$ans
13529                         rp='What is the type for the 2nd argument to gethostbyaddr?'
13530                         dflt="$sizetype"
13531                         . ./myread
13532                         netdb_hlen_type=$ans
13533                         ;;
13534                 esac
13535                 ;;
13536         *)      : no gethostbyaddr, so pick harmless defaults
13537                 netdb_host_type='char *'
13538                 netdb_hlen_type="$sizetype"
13539                 ;;
13540         esac
13541         # Remove the "const" if needed. -- but then we'll have a 
13542         # prototype clash!
13543         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
13544 fi
13545
13546 : check for type of argument to gethostbyname. 
13547 if test "X$netdb_name_type" = X ; then
13548         case "$d_gethbyname" in
13549         $define)
13550                 $cat <<EOM
13551
13552 Checking to see what type of argument is accepted by gethostbyname().
13553 EOM
13554                 hdrs="$define sys/types.h
13555                         $d_socket sys/socket.h 
13556                         $i_niin netinet/in.h 
13557                         $i_netdb netdb.h
13558                         $i_unistd unistd.h"
13559                 for xxx in "const char *" "char *"; do
13560                         case "$netdb_name_type" in
13561                         '')     try="extern struct hostent *gethostbyname($xxx);"
13562                                 if ./protochk "$try" $hdrs; then
13563                                         echo "Your system accepts $xxx."
13564                                         netdb_name_type="$xxx"
13565                                 fi
13566                                 ;;
13567                         esac
13568                 done
13569                 : In case none of those worked, prompt the user.
13570                 case "$netdb_name_type" in
13571                 '')     rp='What is the type for the 1st argument to gethostbyname?'
13572                         dflt='char *'
13573                         . ./myread
13574                         netdb_name_type=$ans
13575                         ;;
13576                 esac
13577                 ;;
13578         *)      : no gethostbyname, so pick harmless default
13579                 netdb_name_type='char *'
13580                 ;;
13581         esac
13582 fi
13583
13584 : check for type of 1st argument to getnetbyaddr. 
13585 if test "X$netdb_net_type" = X ; then
13586         case "$d_getnbyaddr" in
13587         $define)
13588                 $cat <<EOM
13589
13590 Checking to see what type of 1st argument is accepted by getnetbyaddr().
13591 EOM
13592                 hdrs="$define sys/types.h
13593                         $d_socket sys/socket.h 
13594                         $i_niin netinet/in.h 
13595                         $i_netdb netdb.h
13596                         $i_unistd unistd.h"
13597                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
13598                         case "$netdb_net_type" in
13599                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
13600                                 if ./protochk "$try" $hdrs; then
13601                                         echo "Your system accepts $xxx."
13602                                         netdb_net_type="$xxx"
13603                                 fi
13604                                 ;;
13605                         esac
13606                 done
13607                 : In case none of those worked, prompt the user.
13608                 case "$netdb_net_type" in
13609                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
13610                         dflt='long'
13611                         . ./myread
13612                         netdb_net_type=$ans
13613                         ;;
13614                 esac
13615                 ;;
13616         *)      : no getnetbyaddr, so pick harmless default
13617                 netdb_net_type='long'
13618                 ;;
13619         esac
13620 fi
13621 : locate the preferred pager for this system
13622 case "$pager" in
13623 '')
13624         dflt=''
13625         case "$pg" in
13626         /*) dflt=$pg;;
13627         [a-zA-Z]:/*) dflt=$pg;;
13628         esac
13629         case "$more" in
13630         /*) dflt=$more;;
13631         [a-zA-Z]:/*) dflt=$more;;
13632         esac
13633         case "$less" in
13634         /*) dflt=$less;;
13635         [a-zA-Z]:/*) dflt=$less;;
13636         esac
13637         case "$dflt" in
13638         '') dflt=/usr/ucb/more;;
13639         esac
13640         ;;
13641 *) dflt="$pager";;
13642 esac
13643 echo " "
13644 fn=f/
13645 rp='What pager is used on your system?'
13646 . ./getfile
13647 pager="$ans"
13648
13649 : see what type pids are declared as in the kernel
13650 rp="What is the type of process ids on this system?"
13651 set pid_t pidtype int stdio.h sys/types.h
13652 eval $typedef_ask
13653
13654 : Find earliest binary compatible site_perl subdirectory perl can use.
13655 case "$bincompat5005" in
13656 "$define") xs_apiversion='5.005' ;;
13657 *) xs_apiversion=$version ;;   # The current site_perl version.
13658 esac
13659 : Find earliest pure perl site_perl subdirectory perl can use.
13660 : The versioned directories started at 5.005.
13661 pm_apiversion='5.005'
13662
13663 : check for length of pointer
13664 echo " "
13665 case "$ptrsize" in
13666 '')
13667         echo "Checking to see how big your pointers are..." >&4
13668         if test "$voidflags" -gt 7; then
13669                 echo '#define VOID_PTR char *' > try.c
13670         else
13671                 echo '#define VOID_PTR void *' > try.c
13672         fi
13673         $cat >>try.c <<'EOCP'
13674 #include <stdio.h>
13675 int main()
13676 {
13677     printf("%d\n", (int)sizeof(VOID_PTR));
13678     exit(0);
13679 }
13680 EOCP
13681         set try
13682         if eval $compile_ok; then
13683                 ptrsize=`./try`
13684                 echo "Your pointers are $ptrsize bytes long."
13685         else
13686                 dflt='4'
13687                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
13688                 rp="What is the size of a pointer (in bytes)?"
13689                 . ./myread
13690                 ptrsize="$ans"
13691         fi
13692         ;;
13693 esac
13694 $rm -f try.c try
13695
13696 : see if ar generates random libraries by itself
13697 echo " "
13698 echo "Checking how to generate random libraries on your machine..." >&4
13699 echo 'int bar1() { return bar2(); }' > bar1.c
13700 echo 'int bar2() { return 2; }' > bar2.c
13701 $cat > foo.c <<'EOP'
13702 int main() { printf("%d\n", bar1()); exit(0); }
13703 EOP
13704 $cc $ccflags -c bar1.c >/dev/null 2>&1
13705 $cc $ccflags -c bar2.c >/dev/null 2>&1
13706 $cc $ccflags -c foo.c >/dev/null 2>&1
13707 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
13708 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
13709         ./foobar >/dev/null 2>&1; then
13710         echo "$ar appears to generate random libraries itself."
13711         orderlib=false
13712         ranlib=":"
13713 elif $ar ts bar$_a >/dev/null 2>&1 &&
13714         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
13715         ./foobar >/dev/null 2>&1; then
13716                 echo "a table of contents needs to be added with '$ar ts'."
13717                 orderlib=false
13718                 ranlib="$ar ts"
13719 else
13720         case "$ranlib" in
13721         :) ranlib='';;
13722         '')
13723                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
13724                 $test -f $ranlib || ranlib=''
13725                 ;;
13726         esac
13727         if $test -n "$ranlib"; then
13728                 echo "your system has '$ranlib'; we'll use that."
13729                 orderlib=false
13730         else
13731                 echo "your system doesn't seem to support random libraries"
13732                 echo "so we'll use lorder and tsort to order the libraries."
13733                 orderlib=true
13734                 ranlib=":"
13735         fi
13736 fi
13737 $rm -f foo* bar* 
13738
13739 : check for type of arguments to select. 
13740 case "$selecttype" in
13741 '') case "$d_select" in
13742         $define)
13743                 echo " "
13744                 $cat <<EOM
13745 Checking to see what type of arguments are accepted by select().
13746 EOM
13747                 hdrs="$define sys/types.h
13748                         $i_systime sys/time.h 
13749                         $i_sysselct sys/select.h
13750                         $d_socket sys/socket.h"
13751                 : The first arg can be int, unsigned, or size_t
13752                 : The last arg may or may not be 'const'
13753                 val=''
13754                 : void pointer has been seen but using that
13755                 : breaks the selectminbits test
13756                 for xxx in 'fd_set *' 'int *'; do
13757                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
13758                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
13759                                         case "$val" in
13760                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
13761                                                 if ./protochk "$try" $hdrs; then
13762                                                         echo "Your system accepts $xxx."
13763                                                         val="$xxx"
13764                                                 fi
13765                                                 ;;
13766                                         esac
13767                                 done
13768                         done
13769                 done
13770                 case "$val" in
13771                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
13772                         case "$d_fd_set" in
13773                                 $define) dflt="fd_set *" ;;
13774                                 *)              dflt="int *" ;;
13775                         esac
13776                         . ./myread
13777                         val=$ans
13778                         ;;
13779                 esac
13780                 selecttype="$val"
13781                 ;;
13782         *)      : no select, so pick a harmless default
13783                 selecttype='int *'
13784                 ;;
13785         esac
13786         ;;
13787 esac
13788
13789 : check for the select 'width'
13790 case "$selectminbits" in
13791 '') case "$d_select" in
13792         $define)
13793                 $cat <<EOM
13794
13795 Checking to see on how many bits at a time your select() operates...
13796 EOM
13797                 $cat >try.c <<EOCP
13798 #include <sys/types.h>
13799 #$i_time I_TIME
13800 #$i_systime I_SYS_TIME
13801 #$i_systimek I_SYS_TIME_KERNEL
13802 #ifdef I_TIME
13803 #   include <time.h>
13804 #endif
13805 #ifdef I_SYS_TIME
13806 #   ifdef I_SYS_TIME_KERNEL
13807 #       define KERNEL
13808 #   endif
13809 #   include <sys/time.h>
13810 #   ifdef I_SYS_TIME_KERNEL
13811 #       undef KERNEL
13812 #   endif
13813 #endif
13814 #$i_sysselct I_SYS_SELECT
13815 #ifdef I_SYS_SELECT
13816 #include <sys/select.h>
13817 #endif
13818 #$d_socket HAS_SOCKET
13819 #ifdef HAS_SOCKET
13820 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
13821 #endif
13822 #include <stdio.h>
13823 $selecttype b;
13824 #define S sizeof(*(b))
13825 #define MINBITS 64
13826 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
13827 #define NBITS  (NBYTES * 8)
13828 int main() {
13829     char s[NBYTES];
13830     struct timeval t;
13831     int i;
13832     FILE* fp;
13833     int fd;
13834
13835     fclose(stdin);
13836     fp = fopen("try.c", "r");
13837     if (fp == 0)
13838       exit(1);
13839     fd = fileno(fp);
13840     if (fd < 0)
13841       exit(2);
13842     b = ($selecttype)s;
13843     for (i = 0; i < NBITS; i++)
13844         FD_SET(i, b);
13845     t.tv_sec  = 0;
13846     t.tv_usec = 0;
13847     select(fd + 1, b, 0, 0, &t);
13848     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
13849     printf("%d\n", i + 1);
13850     return 0;
13851 }
13852 EOCP
13853                 set try
13854                 if eval $compile_ok; then
13855                         selectminbits=`./try`
13856                         case "$selectminbits" in
13857                         '')     cat >&4 <<EOM
13858 Cannot figure out on how many bits at a time your select() operates.
13859 I'll play safe and guess it is 32 bits.
13860 EOM
13861                                 selectminbits=32
13862                                 bits="32 bits"
13863                                 ;;
13864                         1)      bits="1 bit" ;;
13865                         *)      bits="$selectminbits bits" ;;
13866                         esac
13867                         echo "Your select() operates on $bits at a time." >&4
13868                 else
13869                         rp='What is the minimum number of bits your select() operates on?'
13870                         case "$byteorder" in
13871                         1234|12345678)  dflt=32 ;;
13872                         *)              dflt=1  ;;
13873                         esac
13874                         . ./myread
13875                         val=$ans
13876                         selectminbits="$val"
13877                 fi
13878                 $rm -f try.* try
13879                 ;;
13880         *)      : no select, so pick a harmless default
13881                 selectminbits='32'
13882                 ;;
13883         esac
13884         ;;
13885 esac
13886
13887 : Trace out the files included by signal.h, then look for SIGxxx names.
13888 : Remove SIGARRAYSIZE used by HPUX.
13889 : Remove SIGSTKSIZE used by Linux.
13890 : Remove SIGSTKSZ used by Posix.
13891 : Remove SIGTYP void lines used by OS2.
13892 : Some cpps, like os390, dont give the file name anywhere
13893 if [ "X$fieldn" = X ]; then
13894         : Just make some guesses.  We check them later.
13895         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
13896 else
13897         xxx=`echo '#include <signal.h>' |
13898         $cppstdin $cppminus $cppflags 2>/dev/null |
13899         $grep '^[       ]*#.*include' | 
13900         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
13901 fi
13902 : Check this list of files to be sure we have parsed the cpp output ok.
13903 : This will also avoid potentially non-existent files, such 
13904 : as ../foo/bar.h
13905 xxxfiles=''
13906 for xx in $xxx /dev/null ; do
13907         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
13908 done
13909 : If we have found no files, at least try signal.h
13910 case "$xxxfiles" in
13911 '')     xxxfiles=`./findhdr signal.h` ;;
13912 esac
13913 xxx=`awk '
13914 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
13915         print substr($2, 4, 20)
13916 }
13917 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
13918         print substr($3, 4, 20)
13919 }' $xxxfiles`
13920 : Append some common names just in case the awk scan failed.
13921 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
13922 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
13923 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
13924 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
13925 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
13926
13927 : generate a few handy files for later
13928 $cat > signal.c <<'EOCP'
13929 #include <sys/types.h>
13930 #include <signal.h>
13931 #include <stdio.h>
13932 int main() {
13933
13934 /* Strange style to avoid deeply-nested #if/#else/#endif */
13935 #ifndef NSIG
13936 #  ifdef _NSIG
13937 #    define NSIG (_NSIG)
13938 #  endif
13939 #endif
13940
13941 #ifndef NSIG
13942 #  ifdef SIGMAX
13943 #    define NSIG (SIGMAX+1)
13944 #  endif
13945 #endif
13946
13947 #ifndef NSIG
13948 #  ifdef SIG_MAX
13949 #    define NSIG (SIG_MAX+1)
13950 #  endif
13951 #endif
13952
13953 #ifndef NSIG
13954 #  ifdef MAXSIG
13955 #    define NSIG (MAXSIG+1)
13956 #  endif
13957 #endif
13958
13959 #ifndef NSIG
13960 #  ifdef MAX_SIG
13961 #    define NSIG (MAX_SIG+1)
13962 #  endif
13963 #endif
13964
13965 #ifndef NSIG
13966 #  ifdef SIGARRAYSIZE
13967 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
13968 #  endif
13969 #endif
13970
13971 #ifndef NSIG
13972 #  ifdef _sys_nsig
13973 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
13974 #  endif
13975 #endif
13976
13977 /* Default to some arbitrary number that's big enough to get most
13978    of the common signals.
13979 */
13980 #ifndef NSIG
13981 #    define NSIG 50
13982 #endif
13983
13984 printf("NSIG %d\n", NSIG);
13985
13986 #ifndef JUST_NSIG
13987
13988 EOCP
13989
13990 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
13991 {
13992         printf "#ifdef SIG"; printf $1; printf "\n"
13993         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
13994         printf $1; printf ");\n"
13995         printf "#endif\n"
13996 }
13997 END {
13998         printf "#endif /* JUST_NSIG */\n";
13999         printf "exit(0);\n}\n";
14000 }
14001 ' >>signal.c
14002 $cat >signal.awk <<'EOP'
14003 BEGIN { ndups = 0 }
14004 $1 ~ /^NSIG$/ { nsig = $2 }
14005 ($1 !~ /^NSIG$/) && (NF == 2) {
14006     if ($2 > maxsig) { maxsig = $2 }
14007     if (sig_name[$2]) {
14008         dup_name[ndups] = $1
14009         dup_num[ndups] = $2
14010         ndups++ 
14011     }
14012     else {
14013         sig_name[$2] = $1
14014         sig_num[$2] = $2
14015     }
14016 }
14017 END { 
14018     if (nsig == 0) {
14019         nsig = maxsig + 1
14020     }
14021     printf("NSIG %d\n", nsig);
14022     for (n = 1; n < nsig; n++) {
14023         if (sig_name[n]) {
14024             printf("%s %d\n", sig_name[n], sig_num[n])
14025         }
14026         else {
14027             printf("NUM%d %d\n", n, n) 
14028         }
14029     }
14030     for (n = 0; n < ndups; n++) {
14031         printf("%s %d\n", dup_name[n], dup_num[n])
14032     }
14033 }
14034 EOP
14035 $cat >signal_cmd <<EOS
14036 $startsh
14037 if $test -s signal.lst; then
14038     echo "Using your existing signal.lst file"
14039         exit 0
14040 fi
14041 xxx="$xxx"
14042 EOS
14043 $cat >>signal_cmd <<'EOS'
14044
14045 set signal
14046 if eval $compile_ok; then
14047         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
14048 else
14049         echo "(I can't seem be able to compile the whole test program)" >&4
14050         echo "(I'll try it in little pieces.)" >&4
14051         set signal -DJUST_NSIG
14052         if eval $compile_ok; then
14053                 ./signal$_exe > signal.nsg
14054                 $cat signal.nsg
14055         else
14056                 echo "I can't seem to figure out how many signals you have." >&4
14057                 echo "Guessing 50." >&4
14058                 echo 'NSIG 50' > signal.nsg
14059         fi
14060         : Now look at all the signal names, one at a time.
14061         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
14062                 $cat > signal.c <<EOCP
14063 #include <sys/types.h>
14064 #include <signal.h>
14065 #include <stdio.h>
14066 int main() {
14067 printf("$xx %d\n", SIG${xx});
14068 return 0;
14069 }
14070 EOCP
14071                 set signal
14072                 if eval $compile; then
14073                         echo "SIG${xx} found."
14074                         ./signal$_exe  >> signal.ls1
14075                 else
14076                         echo "SIG${xx} NOT found."
14077                 fi
14078         done
14079         if $test -s signal.ls1; then
14080                 $cat signal.nsg signal.ls1 |
14081                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
14082         fi
14083
14084 fi
14085 if $test -s signal.lst; then
14086         :
14087 else
14088         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
14089         echo 'kill -l' >signal
14090         set X `csh -f <signal`
14091         $rm -f signal
14092         shift
14093         case $# in
14094         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
14095         esac
14096         echo $@ | $tr ' ' $trnl | \
14097             $awk '{ printf "%s %d\n", $1, ++s; }
14098                   END { printf "NSIG %d\n", ++s }' >signal.lst
14099 fi
14100 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
14101 EOS
14102 chmod a+x signal_cmd
14103 $eunicefix signal_cmd
14104
14105 : generate list of signal names
14106 echo " "
14107 case "$sig_name_init" in
14108 '') doinit=yes ;;
14109 *)  case "$sig_num_init" in
14110     ''|*,*) doinit=yes ;;
14111     esac ;;
14112 esac
14113 case "$doinit" in
14114 yes)
14115         echo "Generating a list of signal names and numbers..." >&4
14116         . ./signal_cmd
14117         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
14118         sig_name=`$awk 'BEGIN { printf "ZERO " }
14119                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
14120         sig_num=`$awk  'BEGIN { printf "0 " }
14121                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
14122         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
14123                              !/^NSIG/   { printf "\"%s\", ", $1 }
14124                              END        { printf "0\n" }' signal.lst`
14125         sig_num_init=`$awk  'BEGIN      { printf "0, " }
14126                              !/^NSIG/   { printf "%d, ", $2}
14127                              END        { printf "0\n"}' signal.lst`
14128         ;;
14129 esac
14130 echo "The following $sig_count signals are available:"
14131 echo " "
14132 echo $sig_name | $awk \
14133 'BEGIN { linelen = 0 }
14134 {
14135         for (i = 1; i <= NF; i++) {
14136                 name = "SIG" $i " "
14137                 linelen = linelen + length(name)
14138                 if (linelen > 70) {
14139                         printf "\n"
14140                         linelen = length(name)
14141                 }
14142                 printf "%s", name
14143         }
14144         printf "\n"
14145 }'
14146 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
14147
14148 echo " "
14149 case "$sizetype" in
14150 *_t) zzz="$sizetype"    ;;
14151 *)   zzz="filesize"     ;;
14152 esac
14153 echo "Checking the size of $zzz..." >&4 
14154 cat > try.c <<EOCP
14155 #include <sys/types.h>
14156 #include <stdio.h>
14157 int main() {
14158     printf("%d\n", (int)sizeof($sizetype));
14159     exit(0);
14160 }
14161 EOCP
14162 set try
14163 if eval $compile_ok; then
14164         yyy=`./try`
14165         case "$yyy" in
14166         '')     sizesize=4
14167                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
14168                 ;;
14169         *)      sizesize=$yyy
14170                 echo "Your $zzz size is $sizesize bytes."
14171                 ;;
14172         esac
14173 else
14174         sizesize=4
14175         echo "(I can't compile the test program--guessing $sizesize.)" >&4
14176 fi
14177
14178
14179 : check for socklen_t
14180 echo " "
14181 echo "Checking to see if you have socklen_t..." >&4
14182 $cat >try.c <<EOCP
14183 #include <sys/types.h>
14184 #$d_socket HAS_SOCKET
14185 #ifdef HAS_SOCKET
14186 #include <sys/socket.h>
14187 #endif
14188 int main() { socklen_t x = 16; }
14189 EOCP
14190 set try
14191 if eval $compile; then
14192         val="$define"
14193         echo "You have socklen_t."
14194 else
14195         val="$undef"
14196         echo "You do not have socklen_t."
14197         case "$sizetype" in
14198         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
14199         esac
14200 fi
14201 $rm -f try try.*
14202 set d_socklen_t
14203 eval $setvar
14204
14205 : check for type of the size argument to socket calls
14206 case "$d_socket" in
14207 "$define")
14208         $cat <<EOM
14209
14210 Checking to see what type is the last argument of accept().
14211 EOM
14212         hdrs="$define sys/types.h $d_socket sys/socket.h" 
14213         yyy=''
14214         case "$d_socklen_t" in
14215         "$define") yyy="$yyy socklen_t"
14216         esac
14217         yyy="$yyy $sizetype int long unsigned"
14218         for xxx in $yyy; do
14219                 case "$socksizetype" in
14220                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
14221                         if ./protochk "$try" $hdrs; then
14222                                 echo "Your system accepts '$xxx *' for the last argument of accept()."
14223                                 socksizetype="$xxx"
14224                         fi
14225                         ;;
14226                 esac
14227         done
14228 : In case none of those worked, prompt the user.
14229         case "$socksizetype" in
14230         '')     rp='What is the type for socket address structure sizes?'
14231                 dflt='int'
14232                 . ./myread
14233                 socksizetype=$ans
14234                 ;;
14235         esac
14236         ;;
14237 *)      : no sockets, so pick relatively harmless default
14238         socksizetype='int'
14239         ;;
14240 esac
14241
14242 : see what type is used for signed size_t
14243 set ssize_t ssizetype int stdio.h sys/types.h
14244 eval $typedef
14245 dflt="$ssizetype"
14246 $cat > ssize.c <<EOM
14247 #include <stdio.h>
14248 #include <sys/types.h>
14249 #define Size_t $sizetype
14250 #define SSize_t $dflt
14251 int main()
14252 {
14253         if (sizeof(Size_t) == sizeof(SSize_t))
14254                 printf("$dflt\n");
14255         else if (sizeof(Size_t) == sizeof(int))
14256                 printf("int\n");
14257         else 
14258                 printf("long\n");
14259         exit(0);
14260 }
14261 EOM
14262 echo " "
14263 set ssize
14264 if eval $compile_ok && ./ssize > /dev/null; then
14265         ssizetype=`./ssize`
14266         echo "I'll be using $ssizetype for functions returning a byte count." >&4
14267 else
14268         $cat >&4 <<EOM
14269 Help! I can't compile and run the ssize_t test program: please enlighten me!
14270 (This is probably a misconfiguration in your system or libraries, and
14271 you really ought to fix it.  Still, I'll try anyway.)
14272
14273 I need a type that is the same size as $sizetype, but is guaranteed to
14274 be signed.  Common values are ssize_t, int and long.
14275
14276 EOM
14277         rp="What signed type is the same size as $sizetype?"
14278         . ./myread
14279         ssizetype="$ans"
14280 fi
14281 $rm -f ssize ssize.*
14282
14283 : see what type of char stdio uses.
14284 echo " "
14285 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
14286         echo "Your stdio uses unsigned chars." >&4
14287         stdchar="unsigned char"
14288 else
14289         echo "Your stdio uses signed chars." >&4
14290         stdchar="char"
14291 fi
14292
14293 : see if time exists
14294 echo " "
14295 if test "X$d_time" = X -o X"$timetype" = X; then
14296     if set time val -f d_time; eval $csym; $val; then
14297                 echo 'time() found.' >&4
14298                 val="$define"
14299                 rp="What is the type returned by time() on this system?"
14300                 set time_t timetype long stdio.h sys/types.h
14301                 eval $typedef_ask
14302     else
14303                 echo 'time() not found, hope that will do.' >&4
14304                 val="$undef"
14305                 timetype='int';
14306     fi
14307     set d_time
14308     eval $setvar
14309 fi
14310
14311 : see what type uids are declared as in the kernel
14312 echo " "
14313 echo "Looking for the type for user ids returned by getuid()."
14314 set uid_t uidtype xxx stdio.h sys/types.h
14315 eval $typedef
14316 case "$uidtype" in
14317 xxx)
14318         xxx=`./findhdr sys/user.h`
14319         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
14320         case $1 in
14321         unsigned) dflt="$1 $2" ;;
14322         *) dflt="$1" ;;
14323         esac
14324         ;;
14325 *) dflt="$uidtype";;
14326 esac
14327 case "$uidtype" in
14328 uid_t)  echo "uid_t found." ;;
14329 *)      rp="What is the type for user ids returned by getuid()?"
14330         . ./myread
14331         uidtype="$ans"
14332         ;;
14333 esac
14334
14335 echo " "
14336 case "$uidtype" in
14337 *_t) zzz="$uidtype"     ;;
14338 *)   zzz="uid"          ;;
14339 esac
14340 echo "Checking the size of $zzz..." >&4 
14341 cat > try.c <<EOCP
14342 #include <sys/types.h>
14343 #include <stdio.h>
14344 int main() {
14345     printf("%d\n", (int)sizeof($uidtype));
14346     exit(0);
14347 }
14348 EOCP
14349 set try
14350 if eval $compile_ok; then
14351         yyy=`./try`
14352         case "$yyy" in
14353         '')     uidsize=4
14354                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
14355                 ;;
14356         *)      uidsize=$yyy
14357                 echo "Your $zzz is $uidsize bytes long."
14358                 ;;
14359         esac
14360 else
14361         uidsize=4
14362         echo "(I can't compile the test program--guessing $uidsize.)" >&4
14363 fi
14364
14365 echo " "
14366 case "$uidtype" in
14367 *_t) zzz="$uidtype"     ;;
14368 *)   zzz="uid"          ;;
14369 esac
14370 echo "Checking the sign of $zzz..." >&4
14371 cat > try.c <<EOCP
14372 #include <sys/types.h>
14373 #include <stdio.h>
14374 int main() {
14375         $uidtype foo = -1;
14376         if (foo < 0)
14377                 printf("-1\n");
14378         else
14379                 printf("1\n");
14380 }
14381 EOCP
14382 set try
14383 if eval $compile; then
14384         yyy=`./try`
14385         case "$yyy" in
14386         '')     uidsign=1
14387                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14388                 ;;
14389         *)      uidsign=$yyy
14390                 case "$uidsign" in
14391                  1) echo "Your $zzz is unsigned." ;;
14392                 -1) echo "Your $zzz is signed."   ;;
14393                 esac
14394                 ;;
14395         esac
14396 else
14397         uidsign=1
14398         echo "(I can't compile the test program--guessing unsigned.)" >&4
14399 fi
14400
14401
14402
14403 echo " "
14404 $echo "Checking the format string to be used for uids..." >&4
14405
14406 case "$uidsign" in
14407 -1)     if $test X"$uidsize" = X"$ivsize"; then
14408                 uidformat="$ivdformat"
14409         else
14410                 if $test X"$uidsize" = X"$longsize"; then
14411                         uidformat='"ld"'
14412                 else
14413                         if $test X"$uidsize" = X"$intsize"; then
14414                                 uidformat='"d"'
14415                         else
14416                                 if $test X"$uidsize" = X"$shortsize"; then
14417                                         uidformat='"hd"'
14418                                 fi
14419                         fi
14420                 fi
14421         fi
14422         ;;
14423 *)      if $test X"$uidsize" = X"$uvsize"; then
14424                 uidformat="$uvuformat"
14425         else
14426                 if $test X"$uidsize" = X"$longsize"; then
14427                         uidformat='"lu"'
14428                 else
14429                         if $test X"$uidsize" = X"$intsize"; then
14430                                 uidformat='"u"'
14431                         else
14432                                 if $test X"$uidsize" = X"$shortsize"; then
14433                                         uidformat='"hu"'
14434                                 fi
14435                         fi
14436                 fi
14437         fi
14438         ;;
14439 esac
14440
14441 : see if dbm.h is available
14442 : see if dbmclose exists
14443 set dbmclose d_dbmclose
14444 eval $inlibc
14445
14446 case "$d_dbmclose" in
14447 $define)
14448         set dbm.h i_dbm
14449         eval $inhdr
14450         case "$i_dbm" in
14451         $define)
14452                 val="$undef"
14453                 set i_rpcsvcdbm
14454                 eval $setvar
14455                 ;;
14456         *)      set rpcsvc/dbm.h i_rpcsvcdbm
14457                 eval $inhdr
14458                 ;;
14459         esac
14460         ;;
14461 *)      echo "We won't be including <dbm.h>"
14462         val="$undef"
14463         set i_dbm
14464         eval $setvar
14465         val="$undef"
14466         set i_rpcsvcdbm
14467         eval $setvar
14468         ;;
14469 esac
14470
14471 : see if this is a sys/file.h system
14472 val=''
14473 set sys/file.h val
14474 eval $inhdr
14475
14476 : do we need to include sys/file.h ?
14477 case "$val" in
14478 "$define")
14479         echo " "
14480         if $h_sysfile; then
14481                 val="$define"
14482                 echo "We'll be including <sys/file.h>." >&4
14483         else
14484                 val="$undef"
14485                 echo "We won't be including <sys/file.h>." >&4
14486         fi
14487         ;;
14488 *)
14489         h_sysfile=false
14490         ;;
14491 esac
14492 set i_sysfile
14493 eval $setvar
14494
14495 : see if fcntl.h is there
14496 val=''
14497 set fcntl.h val
14498 eval $inhdr
14499
14500 : see if we can include fcntl.h
14501 case "$val" in
14502 "$define")
14503         echo " "
14504         if $h_fcntl; then
14505                 val="$define"
14506                 echo "We'll be including <fcntl.h>." >&4
14507         else
14508                 val="$undef"
14509                 if $h_sysfile; then
14510         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
14511                 else
14512                         echo "We won't be including <fcntl.h>." >&4
14513                 fi
14514         fi
14515         ;;
14516 *)
14517         h_fcntl=false
14518         val="$undef"
14519         ;;
14520 esac
14521 set i_fcntl
14522 eval $setvar
14523
14524 : see if this is a iconv.h system
14525 set iconv.h i_iconv
14526 eval $inhdr
14527
14528 : see if this is a ieeefp.h system
14529 set ieeefp.h i_ieeefp
14530 eval $inhdr
14531
14532 : see if this is a libutil.h system
14533 set libutil.h i_libutil
14534 eval $inhdr
14535
14536 : see if locale.h is available
14537 set locale.h i_locale
14538 eval $inhdr
14539
14540 : see if mach cthreads are available
14541 if test "X$usethreads" = "X$define"; then
14542         set mach/cthreads.h i_machcthr
14543         eval $inhdr
14544 else
14545         i_machcthr="$undef"
14546 fi
14547
14548
14549
14550 : see if this is a math.h system
14551 set math.h i_math
14552 eval $inhdr
14553
14554 : see if this is a mntent.h system
14555 set mntent.h i_mntent
14556 eval $inhdr
14557
14558 : see if ndbm.h is available
14559 set ndbm.h t_ndbm
14560 eval $inhdr
14561 case "$t_ndbm" in
14562 $define)
14563         : see if dbm_open exists
14564         set dbm_open d_dbm_open
14565         eval $inlibc
14566         case "$d_dbm_open" in
14567         $undef)
14568                 t_ndbm="$undef"
14569                 echo "We won't be including <ndbm.h>"
14570                 ;;
14571         esac
14572         ;;
14573 esac
14574 val="$t_ndbm"
14575 set i_ndbm
14576 eval $setvar
14577
14578 : see if net/errno.h is available
14579 val=''
14580 set net/errno.h val
14581 eval $inhdr
14582
14583 : Unfortunately, it causes problems on some systems.  Arrgh.
14584 case "$val" in
14585 $define)
14586         cat > try.c <<'EOM'
14587 #include <stdio.h>
14588 #include <errno.h>
14589 #include <net/errno.h>
14590 int func()
14591 {
14592         return ENOTSOCK;
14593 }
14594 EOM
14595         if $cc $ccflags -c try.c >/dev/null 2>&1; then
14596                 echo "We'll be including <net/errno.h>." >&4
14597         else
14598                 echo "We won't be including <net/errno.h>." >&4
14599                 val="$undef"
14600         fi
14601         $rm -f try.* try
14602         ;;
14603 esac
14604 set i_neterrno
14605 eval $setvar
14606
14607 : see if netinet/tcp.h is available
14608 set netinet/tcp.h i_netinettcp
14609 eval $inhdr
14610
14611 : see if this is a poll.h system
14612 set poll.h i_poll
14613 eval $inhdr
14614
14615 : see if this is a prot.h system
14616 set prot.h i_prot
14617 eval $inhdr
14618
14619 echo " "
14620 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
14621 $cat <<'EOSH' > Cppsym.know
14622 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
14623 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
14624 alliant alpha am29000 AM29000 amiga AMIGAOS AMIX
14625 ansi ANSI_C_SOURCE apollo ardent atarist att386 att3b BeOS
14626 BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
14627 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
14628 bull c cadmus clipper CMU COFF COMPILER_VERSION
14629 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
14630 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
14631 Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
14632 FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
14633 GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
14634 H3050R H3050RX hbullx20 hcx host_mips
14635 hp200 hp300 hp700 HP700 hp800 hp9000
14636 hp9000s200 hp9000s300 hp9000s400 hp9000s500
14637 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
14638 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
14639 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
14640 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
14641 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
14642 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
14643 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
14644 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
14645 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
14646 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
14647 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
14648 MATH_HAS_NO_SIDE_EFFECTS
14649 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
14650 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
14651 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
14652 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
14653 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
14654 NetBSD news1500 news1700 news1800 news1900 news3700
14655 news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
14656 ns32016 ns32332 ns32k nsc32000
14657 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
14658 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
14659 pc532 pdp11 PGC PIC plexus PORTAR posix
14660 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
14661 POSIX_C_SOURCE POSIX_SOURCE POWER
14662 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
14663 riscix riscos RT scs SCO sequent sgi SGI_SOURCE sinix
14664 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
14665 sony sony_news sonyrisc sparc sparclite spectrum
14666 stardent stdc STDC_EXT stratos sun sun3 sun386
14667 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
14668 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
14669 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
14670 sysV68 sysV88 Tek4132 Tek4300 titan
14671 tower tower32 tower32_200 tower32_600 tower32_700
14672 tower32_800 tower32_850 tss
14673 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
14674 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
14675 unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
14676 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
14677 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
14678 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
14679 z8000
14680 EOSH
14681 # Maybe put other stuff here too.
14682 cat <<EOSH >>Cppsym.know
14683 $osname
14684 EOSH
14685 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
14686 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
14687 $cat Cppsym.know > Cppsym.c
14688 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
14689 $rm -f Cppsym.a Cppsym.b Cppsym.c
14690 cat <<EOSH > Cppsym
14691 $startsh
14692 if $test \$# -gt 0; then
14693     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
14694     if $test -s Cppsym.got; then
14695         $rm -f Cppsym.got
14696         exit 0
14697     fi
14698     $rm -f Cppsym.got
14699     exit 1
14700 else
14701     $tr " " "$trnl" | ./Cppsym.try
14702     exit 0
14703 fi
14704 EOSH
14705 chmod +x Cppsym
14706 $eunicefix Cppsym
14707 cat <<EOSH > Cppsym.try
14708 $startsh
14709 cat <<'EOCP' > try.c
14710 #include <stdio.h>
14711 int main() {
14712 EOCP
14713 $awk \\
14714 EOSH
14715 cat <<'EOSH' >> Cppsym.try
14716 'length($1) > 0 {
14717     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
14718     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
14719     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
14720     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
14721 }'       >> try.c
14722 echo '}' >> try.c
14723 EOSH
14724 cat <<EOSH >> Cppsym.try
14725 ccflags="$ccflags"
14726 case "$osname-$gccversion" in
14727 irix-) ccflags="\$ccflags -woff 1178" ;;
14728 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
14729 esac
14730 $cc -o try $optimize \$ccflags $ldflags try.c $libs && ./try$exe_ext
14731 EOSH
14732 chmod +x Cppsym.try
14733 $eunicefix Cppsym.try
14734 ./Cppsym < Cppsym.know > Cppsym.true
14735 : now check the C compiler for additional symbols
14736 postprocess_cc_v=''
14737 case "$osname" in
14738 aix) postprocess_cc_v="|$tr , ' '" ;;
14739 esac
14740 $cat >ccsym <<EOS
14741 $startsh
14742 $cat >tmp.c <<EOF
14743 extern int foo;
14744 EOF
14745 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
14746 do
14747         case "\$i" in
14748         -D*) echo "\$i" | $sed 's/^-D//';;
14749         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
14750         esac
14751 done
14752 $rm -f try.c
14753 EOS
14754 postprocess_cc_v=''
14755 chmod +x ccsym
14756 $eunicefix ccsym
14757 ./ccsym > ccsym1.raw
14758 if $test -s ccsym1.raw; then
14759        $sort ccsym1.raw | $uniq >ccsym.raw
14760 else
14761        mv ccsym1.raw ccsym.raw
14762 fi
14763
14764 $awk '/\=/ { print $0; next }
14765         { print $0"=1" }' ccsym.raw >ccsym.list
14766 $awk '/\=/ { print $0; next }
14767         { print $0"=1" }' Cppsym.true >ccsym.true
14768 $comm -13 ccsym.true ccsym.list >ccsym.own
14769 $comm -12 ccsym.true ccsym.list >ccsym.com
14770 $comm -23 ccsym.true ccsym.list >ccsym.cpp
14771 also=''
14772 if $test -z ccsym.raw; then
14773         echo "Your C compiler doesn't seem to define any symbols!" >&4
14774         echo " "
14775         echo "However, your C preprocessor defines the following symbols:"
14776         $cat Cppsym.true
14777         ccsymbols=''
14778         cppsymbols=`$cat Cppsym.true`
14779         cppsymbols=`echo $cppsymbols`
14780         cppccsymbols="$cppsymbols"
14781 else
14782         if $test -s ccsym.com; then
14783                 echo "Your C compiler and pre-processor define these symbols:"
14784                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
14785                 also='also '
14786                 symbols='ones'
14787                 cppccsymbols=`$cat ccsym.com`
14788                 cppccsymbols=`echo $cppccsymbols`
14789                 $test "$silent" || sleep 1
14790         fi
14791         if $test -s ccsym.cpp; then
14792                 $test "$also" && echo " "
14793                 echo "Your C pre-processor ${also}defines the following symbols:"
14794                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
14795                 also='further '
14796                 cppsymbols=`$cat ccsym.cpp`
14797                 cppsymbols=`echo $cppsymbols`
14798                 $test "$silent" || sleep 1
14799         fi
14800         if $test -s ccsym.own; then
14801                 $test "$also" && echo " "
14802                 echo "Your C compiler ${also}defines the following cpp symbols:"
14803                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
14804                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
14805                 ccsymbols=`$cat ccsym.own`
14806                 ccsymbols=`echo $ccsymbols`
14807                 $test "$silent" || sleep 1
14808         fi
14809 fi
14810 $rm -f ccsym* Cppsym.*
14811
14812 : see if this is a termio system
14813 val="$undef"
14814 val2="$undef"
14815 val3="$undef"
14816 if $test `./findhdr termios.h`; then
14817         set tcsetattr i_termios
14818         eval $inlibc
14819         val3="$i_termios"
14820 fi
14821 echo " "
14822 case "$val3" in
14823 "$define") echo "You have POSIX termios.h... good!" >&4;;
14824 *) if ./Cppsym pyr; then
14825                 case "`/bin/universe`" in
14826                 ucb) if $test `./findhdr sgtty.h`; then
14827                                 val2="$define"
14828                                 echo "<sgtty.h> found." >&4
14829                         else
14830                                 echo "System is pyramid with BSD universe."
14831                                 echo "<sgtty.h> not found--you could have problems." >&4
14832                         fi;;
14833                 *) if $test `./findhdr termio.h`; then
14834                                 val="$define"
14835                                 echo "<termio.h> found." >&4
14836                         else
14837                                 echo "System is pyramid with USG universe."
14838                                 echo "<termio.h> not found--you could have problems." >&4
14839                         fi;;
14840                 esac
14841         elif ./usg; then
14842                 if $test `./findhdr termio.h`; then
14843                         echo "<termio.h> found." >&4
14844                         val="$define"
14845                 elif $test `./findhdr sgtty.h`; then
14846                         echo "<sgtty.h> found." >&4
14847                         val2="$define"
14848                 else
14849 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
14850                 fi
14851         else
14852                 if $test `./findhdr sgtty.h`; then
14853                         echo "<sgtty.h> found." >&4
14854                         val2="$define"
14855                 elif $test `./findhdr termio.h`; then
14856                         echo "<termio.h> found." >&4
14857                         val="$define"
14858                 else
14859 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
14860                 fi
14861         fi;;
14862 esac
14863 set i_termio; eval $setvar
14864 val=$val2; set i_sgtty; eval $setvar
14865 val=$val3; set i_termios; eval $setvar
14866
14867 : see if this is a shadow.h system
14868 set shadow.h i_shadow
14869 eval $inhdr
14870
14871 : see if this is a socks.h system
14872 set socks.h i_socks
14873 eval $inhdr
14874
14875 : see if stdarg is available
14876 echo " "
14877 if $test `./findhdr stdarg.h`; then
14878         echo "<stdarg.h> found." >&4
14879         valstd="$define"
14880 else
14881         echo "<stdarg.h> NOT found." >&4
14882         valstd="$undef"
14883 fi
14884
14885 : see if varags is available
14886 echo " "
14887 if $test `./findhdr varargs.h`; then
14888         echo "<varargs.h> found." >&4
14889 else
14890         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14891 fi
14892
14893 : set up the varargs testing programs
14894 $cat > varargs.c <<EOP
14895 #ifdef I_STDARG
14896 #include <stdarg.h>
14897 #endif
14898 #ifdef I_VARARGS
14899 #include <varargs.h>
14900 #endif
14901
14902 #ifdef I_STDARG
14903 int f(char *p, ...)
14904 #else
14905 int f(va_alist)
14906 va_dcl
14907 #endif
14908 {
14909         va_list ap;
14910 #ifndef I_STDARG
14911         char *p;
14912 #endif
14913 #ifdef I_STDARG
14914         va_start(ap,p);
14915 #else
14916         va_start(ap);
14917         p = va_arg(ap, char *);
14918 #endif
14919         va_end(ap);
14920 }
14921 EOP
14922 $cat > varargs <<EOP
14923 $startsh
14924 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14925         echo "true"
14926 else
14927         echo "false"
14928 fi
14929 $rm -f varargs$_o
14930 EOP
14931 chmod +x varargs
14932
14933 : now check which varargs header should be included
14934 echo " "
14935 i_varhdr=''
14936 case "$valstd" in
14937 "$define")
14938         if `./varargs I_STDARG`; then
14939                 val='stdarg.h'
14940         elif `./varargs I_VARARGS`; then
14941                 val='varargs.h'
14942         fi
14943         ;;
14944 *)
14945         if `./varargs I_VARARGS`; then
14946                 val='varargs.h'
14947         fi
14948         ;;
14949 esac
14950 case "$val" in
14951 '')
14952 echo "I could not find the definition for va_dcl... You have problems..." >&4
14953         val="$undef"; set i_stdarg; eval $setvar
14954         val="$undef"; set i_varargs; eval $setvar
14955         ;;
14956 *) 
14957         set i_varhdr
14958         eval $setvar
14959         case "$i_varhdr" in
14960         stdarg.h)
14961                 val="$define"; set i_stdarg; eval $setvar
14962                 val="$undef"; set i_varargs; eval $setvar
14963                 ;;
14964         varargs.h)
14965                 val="$undef"; set i_stdarg; eval $setvar
14966                 val="$define"; set i_varargs; eval $setvar
14967                 ;;
14968         esac
14969         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14970 esac
14971 $rm -f varargs*
14972
14973 : see if stddef is available
14974 set stddef.h i_stddef
14975 eval $inhdr
14976
14977 : see if this is a sunmath.h system
14978 set sunmath.h i_sunmath
14979 eval $inhdr
14980
14981 : see if sys/access.h is available
14982 set sys/access.h i_sysaccess
14983 eval $inhdr
14984
14985 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
14986 set sys/filio.h i_sysfilio
14987 eval $inhdr
14988 echo " "
14989 if $test `./findhdr sys/ioctl.h`; then
14990         val="$define"
14991         echo '<sys/ioctl.h> found.' >&4
14992 else
14993         val="$undef"
14994         if $test $i_sysfilio = "$define"; then
14995             echo '<sys/ioctl.h> NOT found.' >&4
14996         else
14997                 $test $i_sgtty = "$define" && xxx="sgtty.h"
14998                 $test $i_termio = "$define" && xxx="termio.h"
14999                 $test $i_termios = "$define" && xxx="termios.h"
15000 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
15001         fi
15002 fi
15003 set i_sysioctl
15004 eval $setvar
15005
15006
15007 : see if this is a syslog.h system
15008 set syslog.h i_syslog
15009 eval $inhdr
15010
15011
15012 : see if this is a sys/mode.h system
15013 set sys/mode.h i_sysmode
15014 eval $inhdr
15015
15016 : see if sys/resource.h has to be included
15017 set sys/resource.h i_sysresrc
15018 eval $inhdr
15019
15020 : see if sys/security.h is available
15021 set sys/security.h i_syssecrt
15022 eval $inhdr
15023
15024 : see if this is a sys/statvfs.h system
15025 set sys/statvfs.h i_sysstatvfs
15026 eval $inhdr
15027
15028 : see if this is a sys/uio.h system
15029 set sys/uio.h i_sysuio
15030 eval $inhdr
15031
15032 : see if this is a sys/un.h system
15033 set sys/un.h i_sysun
15034 eval $inhdr
15035
15036
15037 : see if this is a sys/utsname.h system
15038 set sys/utsname.h i_sysutsname
15039 eval $inhdr
15040
15041 : see if this is a syswait system
15042 set sys/wait.h i_syswait
15043 eval $inhdr
15044
15045 : see if this is a ustat.h system
15046 set ustat.h i_ustat
15047 eval $inhdr
15048
15049 : see if this is an utime system
15050 set utime.h i_utime
15051 eval $inhdr
15052
15053 : see if this is a values.h system
15054 set values.h i_values
15055 eval $inhdr
15056
15057 : see if this is a vfork system
15058 case "$d_vfork" in
15059 "$define")
15060         set vfork.h i_vfork
15061         eval $inhdr
15062         ;;
15063 *)
15064         i_vfork="$undef"
15065         ;;
15066 esac
15067
15068 : see if gdbm.h is available
15069 set gdbm.h t_gdbm
15070 eval $inhdr
15071 case "$t_gdbm" in
15072 $define)
15073         : see if gdbm_open exists
15074         set gdbm_open d_gdbm_open
15075         eval $inlibc
15076         case "$d_gdbm_open" in
15077         $undef)
15078                 t_gdbm="$undef"
15079                 echo "We won't be including <gdbm.h>"
15080                 ;;
15081         esac
15082         ;;
15083 esac
15084 val="$t_gdbm"
15085 set i_gdbm
15086 eval $setvar
15087
15088 echo " "
15089 echo "Looking for extensions..." >&4
15090 : If we are using the old config.sh, known_extensions may contain
15091 : old or inaccurate or duplicate values.
15092 known_extensions=''
15093 nonxs_extensions=''
15094 : We do not use find because it might not be available.
15095 : We do not just use MANIFEST because the user may have dropped
15096 : some additional extensions into the source tree and expect them
15097 : to be built.
15098
15099 : Function to recursively find available extensions, ignoring DynaLoader
15100 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
15101 find_extensions='
15102     for xxx in *; do
15103        case "$xxx" in
15104            DynaLoader|dynaload) ;;
15105            *)
15106            if $test -f $xxx/$xxx.xs; then
15107                known_extensions="$known_extensions $1$xxx";
15108            elif $test -f $xxx/Makefile.PL; then
15109                nonxs_extensions="$nonxs_extensions $1$xxx";
15110            else
15111                if $test -d $xxx -a $# -lt 10; then
15112                    set $1$xxx/ $*;
15113                    cd $xxx;
15114                    eval $find_extensions;
15115                    cd ..;
15116                    shift;
15117                fi;
15118            fi
15119            ;;
15120        esac;
15121     done'
15122 tdir=`pwd`
15123 cd $rsrc/ext
15124 set X
15125 shift
15126 eval $find_extensions
15127 set X $nonxs_extensions
15128 shift
15129 nonxs_extensions="$*"
15130 set X $known_extensions
15131 shift
15132 known_extensions="$*"
15133 cd $tdir
15134
15135 : Now see which are supported on this system.
15136 avail_ext=''
15137 for xxx in $known_extensions ; do
15138         case "$xxx" in
15139         DB_File|db_file)
15140                 case "$i_db" in
15141                 $define) avail_ext="$avail_ext $xxx" ;;
15142                 esac
15143                 ;;
15144         GDBM_File|gdbm_fil)
15145                 case "$i_gdbm" in 
15146                 $define) avail_ext="$avail_ext $xxx" ;;
15147                 esac
15148                 ;;
15149         NDBM_File|ndbm_fil)
15150                 case "$i_ndbm" in
15151                 $define)
15152                     case "$osname-$use64bitint" in
15153                     hpux-define)
15154                         case "$libs" in
15155                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
15156                         esac
15157                         ;;
15158                     *) avail_ext="$avail_ext $xxx" ;;
15159                     esac
15160                     ;;
15161                 esac
15162                 ;;
15163         ODBM_File|odbm_fil) 
15164                 case "${i_dbm}${i_rpcsvcdbm}" in
15165                 *"${define}"*)
15166                     case "$osname-$use64bitint" in
15167                     hpux-define)
15168                         case "$libs" in
15169                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
15170                         esac
15171                         ;;
15172                     *) avail_ext="$avail_ext $xxx" ;;
15173                     esac
15174                     ;;
15175                 esac
15176                 ;;
15177         POSIX|posix)
15178                 case "$useposix" in
15179                 true|define|y) avail_ext="$avail_ext $xxx" ;;
15180                 esac
15181                 ;;
15182         Opcode|opcode)
15183                 case "$useopcode" in
15184                 true|define|y) avail_ext="$avail_ext $xxx" ;;
15185                 esac
15186                 ;;
15187         Socket|socket)
15188                 case "$d_socket" in 
15189                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15190                 esac
15191                 ;;
15192         Sys/Syslog|sys/syslog)
15193                 : XXX syslog requires socket
15194                 case "$d_socket" in 
15195                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15196                 esac
15197                 ;;
15198         Thread|thread)
15199                 case "$usethreads" in 
15200                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15201                 esac
15202                 ;;
15203         IPC/SysV|ipc/sysv)
15204                 : XXX Do we need a useipcsysv variable here
15205                 case "${d_msg}${d_sem}${d_shm}" in 
15206                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
15207                 esac
15208                 ;;
15209         *)      avail_ext="$avail_ext $xxx"
15210                 ;;
15211         esac
15212 done
15213
15214 set X $avail_ext
15215 shift
15216 avail_ext="$*"
15217
15218 : Now see which nonxs extensions are supported on this system.
15219 : For now assume all are.
15220 nonxs_ext=''
15221 for xxx in $nonxs_extensions ; do
15222         case "$xxx" in
15223         *)      nonxs_ext="$nonxs_ext $xxx"
15224                 ;;
15225         esac
15226 done
15227
15228 set X $nonxs_ext
15229 shift
15230 nonxs_ext="$*"
15231
15232 case $usedl in
15233 $define)
15234         $cat <<EOM
15235 A number of extensions are supplied with $package.  You may choose to
15236 compile these extensions for dynamic loading (the default), compile
15237 them into the $package executable (static loading), or not include
15238 them at all.  Answer "none" to include no extensions.
15239 Note that DynaLoader is always built and need not be mentioned here.
15240
15241 EOM
15242         case "$dynamic_ext" in
15243         '') dflt="$avail_ext" ;;
15244         *)      dflt="$dynamic_ext"
15245                 # Perhaps we are reusing an old out-of-date config.sh.
15246                 case "$hint" in
15247                 previous)
15248                         if test X"$dynamic_ext" != X"$avail_ext"; then
15249                                 $cat <<EOM
15250 NOTICE:  Your previous config.sh list may be incorrect. 
15251 The extensions now available to you are 
15252         ${avail_ext}
15253 but the default list from your previous config.sh is
15254         ${dynamic_ext} 
15255
15256 EOM
15257                         fi
15258                         ;;
15259                 esac
15260                 ;;
15261         esac
15262         case "$dflt" in
15263         '')     dflt=none;;
15264         esac
15265         rp="What extensions do you wish to load dynamically?"
15266         . ./myread
15267         case "$ans" in
15268         none) dynamic_ext=' ' ;;
15269         *) dynamic_ext="$ans" ;;
15270         esac
15271
15272         case "$static_ext" in
15273         '')
15274                 : Exclude those already listed in dynamic linking
15275                 dflt=''
15276                 for xxx in $avail_ext; do
15277                         case " $dynamic_ext " in
15278                         *" $xxx "*) ;;
15279                         *) dflt="$dflt $xxx" ;;
15280                         esac
15281                 done
15282                 set X $dflt
15283                 shift
15284                 dflt="$*"
15285                 ;;
15286         *)  dflt="$static_ext" 
15287                 ;;
15288         esac
15289
15290         case "$dflt" in
15291         '')     dflt=none;;
15292         esac
15293         rp="What extensions do you wish to load statically?"
15294         . ./myread
15295         case "$ans" in
15296         none) static_ext=' ' ;;
15297         *) static_ext="$ans" ;;
15298         esac
15299         ;;
15300 *)
15301         $cat <<EOM
15302 A number of extensions are supplied with $package.  Answer "none" 
15303 to include no extensions. 
15304 Note that DynaLoader is always built and need not be mentioned here.
15305
15306 EOM
15307         case "$static_ext" in
15308         '') dflt="$avail_ext" ;;
15309         *)      dflt="$static_ext"
15310                 # Perhaps we are reusing an old out-of-date config.sh.
15311                 case "$hint" in
15312                 previous)
15313                         if test X"$static_ext" != X"$avail_ext"; then
15314                                 $cat <<EOM
15315 NOTICE:  Your previous config.sh list may be incorrect. 
15316 The extensions now available to you are 
15317         ${avail_ext}
15318 but the default list from your previous config.sh is
15319         ${static_ext} 
15320
15321 EOM
15322                         fi
15323                         ;;
15324                 esac
15325                 ;;
15326         esac
15327         : Exclude those that are not xs extensions
15328         case "$dflt" in
15329         '')     dflt=none;;
15330         esac
15331         rp="What extensions do you wish to include?"
15332         . ./myread
15333         case "$ans" in
15334         none) static_ext=' ' ;;
15335         *) static_ext="$ans" ;;
15336         esac
15337         ;;
15338 esac
15339
15340 set X $dynamic_ext $static_ext $nonxs_ext
15341 shift
15342 extensions="$*"
15343
15344 : Remove libraries needed only for extensions
15345 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
15346 : The exception is SunOS 4.x, which needs them.
15347 case "${osname}X${osvers}" in
15348 sunos*X4*)
15349     perllibs="$libs"
15350     ;;
15351 *) case "$usedl" in
15352     $define|true|[yY]*)
15353             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'` 
15354             shift
15355             perllibs="$*"
15356             ;;
15357     *)  perllibs="$libs"
15358             ;;
15359     esac
15360     ;;
15361 esac
15362
15363 : Remove build directory name from cppstdin so it can be used from
15364 : either the present location or the final installed location.
15365 echo " "
15366 : Get out of the UU directory to get correct path name.
15367 cd ..
15368 case "$cppstdin" in
15369 `pwd`/cppstdin)
15370         echo "Stripping down cppstdin path name"
15371         cppstdin=cppstdin
15372         ;;
15373 esac
15374 cd UU
15375
15376 : end of configuration questions
15377 echo " "
15378 echo "End of configuration questions."
15379 echo " "
15380
15381 : back to where it started
15382 if test -d ../UU; then
15383         cd ..
15384 fi
15385
15386 : configuration may be patched via a 'config.over' file
15387 if $test -f config.over; then
15388         echo " "
15389         dflt=y
15390         rp='I see a config.over file.  Do you wish to load it?'
15391         . UU/myread
15392         case "$ans" in
15393         n*) echo "OK, I'll ignore it.";;
15394         *)      . ./config.over
15395                 echo "Configuration override changes have been loaded."
15396                 ;;
15397         esac
15398 fi
15399
15400 : in case they want portability, strip down executable paths
15401 case "$d_portable" in
15402 "$define")
15403         echo " "
15404         echo "Stripping down executable paths..." >&4
15405         for file in $loclist $trylist; do
15406                 eval temp=\$$file
15407                 eval $file=`basename $temp`
15408         done
15409         ;;
15410 esac
15411
15412 : create config.sh file
15413 echo " "
15414 echo "Creating config.sh..." >&4
15415 $spitshell <<EOT >config.sh
15416 $startsh
15417 #
15418 # This file was produced by running the Configure script. It holds all the
15419 # definitions figured out by Configure. Should you modify one of these values,
15420 # do not forget to propagate your changes by running "Configure -der". You may
15421 # instead choose to run each of the .SH files by yourself, or "Configure -S".
15422 #
15423
15424 # Package name      : $package
15425 # Source directory  : $src
15426 # Configuration time: $cf_time
15427 # Configured by     : $cf_by
15428 # Target system     : $myuname
15429
15430 Author='$Author'
15431 Date='$Date'
15432 Header='$Header'
15433 Id='$Id'
15434 Locker='$Locker'
15435 Log='$Log'
15436 Mcc='$Mcc'
15437 RCSfile='$RCSfile'
15438 Revision='$Revision'
15439 Source='$Source'
15440 State='$State'
15441 _a='$_a'
15442 _exe='$_exe'
15443 _o='$_o'
15444 afs='$afs'
15445 alignbytes='$alignbytes'
15446 ansi2knr='$ansi2knr'
15447 aphostname='$aphostname'
15448 api_revision='$api_revision'
15449 api_subversion='$api_subversion'
15450 api_version='$api_version'
15451 api_versionstring='$api_versionstring'
15452 ar='$ar'
15453 archlib='$archlib'
15454 archlibexp='$archlibexp'
15455 archname64='$archname64'
15456 archname='$archname'
15457 archobjs='$archobjs'
15458 awk='$awk'
15459 baserev='$baserev'
15460 bash='$bash'
15461 bin='$bin'
15462 bincompat5005='$bincompat5005'
15463 binexp='$binexp'
15464 bison='$bison'
15465 byacc='$byacc'
15466 byteorder='$byteorder'
15467 c='$c'
15468 castflags='$castflags'
15469 cat='$cat'
15470 cc='$cc'
15471 cccdlflags='$cccdlflags'
15472 ccdlflags='$ccdlflags'
15473 ccflags='$ccflags'
15474 ccflags_uselargefiles='$ccflags_uselargefiles'
15475 ccname='$ccname'
15476 ccsymbols='$ccsymbols'
15477 ccversion='$ccversion'
15478 cf_by='$cf_by'
15479 cf_email='$cf_email'
15480 cf_time='$cf_time'
15481 charsize='$charsize'
15482 chgrp='$chgrp'
15483 chmod='$chmod'
15484 chown='$chown'
15485 clocktype='$clocktype'
15486 comm='$comm'
15487 compress='$compress'
15488 contains='$contains'
15489 cp='$cp'
15490 cpio='$cpio'
15491 cpp='$cpp'
15492 cpp_stuff='$cpp_stuff'
15493 cppccsymbols='$cppccsymbols'
15494 cppflags='$cppflags'
15495 cpplast='$cpplast'
15496 cppminus='$cppminus'
15497 cpprun='$cpprun'
15498 cppstdin='$cppstdin'
15499 cppsymbols='$cppsymbols'
15500 crosscompile='$crosscompile'
15501 cryptlib='$cryptlib'
15502 csh='$csh'
15503 d_Gconvert='$d_Gconvert'
15504 d_PRIEUldbl='$d_PRIEUldbl'
15505 d_PRIFUldbl='$d_PRIFUldbl'
15506 d_PRIGUldbl='$d_PRIGUldbl'
15507 d_PRIXU64='$d_PRIXU64'
15508 d_PRId64='$d_PRId64'
15509 d_PRIeldbl='$d_PRIeldbl'
15510 d_PRIfldbl='$d_PRIfldbl'
15511 d_PRIgldbl='$d_PRIgldbl'
15512 d_PRIi64='$d_PRIi64'
15513 d_PRIo64='$d_PRIo64'
15514 d_PRIu64='$d_PRIu64'
15515 d_PRIx64='$d_PRIx64'
15516 d_SCNfldbl='$d_SCNfldbl'
15517 d_access='$d_access'
15518 d_accessx='$d_accessx'
15519 d_alarm='$d_alarm'
15520 d_archlib='$d_archlib'
15521 d_atolf='$d_atolf'
15522 d_atoll='$d_atoll'
15523 d_attribut='$d_attribut'
15524 d_bcmp='$d_bcmp'
15525 d_bcopy='$d_bcopy'
15526 d_bincompat5005='$d_bincompat5005'
15527 d_bsd='$d_bsd'
15528 d_bsdgetpgrp='$d_bsdgetpgrp'
15529 d_bsdsetpgrp='$d_bsdsetpgrp'
15530 d_bzero='$d_bzero'
15531 d_casti32='$d_casti32'
15532 d_castneg='$d_castneg'
15533 d_charvspr='$d_charvspr'
15534 d_chown='$d_chown'
15535 d_chroot='$d_chroot'
15536 d_chsize='$d_chsize'
15537 d_closedir='$d_closedir'
15538 d_const='$d_const'
15539 d_crypt='$d_crypt'
15540 d_csh='$d_csh'
15541 d_cuserid='$d_cuserid'
15542 d_dbl_dig='$d_dbl_dig'
15543 d_difftime='$d_difftime'
15544 d_dirnamlen='$d_dirnamlen'
15545 d_dlerror='$d_dlerror'
15546 d_dlopen='$d_dlopen'
15547 d_dlsymun='$d_dlsymun'
15548 d_dosuid='$d_dosuid'
15549 d_drand48proto='$d_drand48proto'
15550 d_dup2='$d_dup2'
15551 d_eaccess='$d_eaccess'
15552 d_endgrent='$d_endgrent'
15553 d_endhent='$d_endhent'
15554 d_endnent='$d_endnent'
15555 d_endpent='$d_endpent'
15556 d_endpwent='$d_endpwent'
15557 d_endsent='$d_endsent'
15558 d_eofnblk='$d_eofnblk'
15559 d_eunice='$d_eunice'
15560 d_fchmod='$d_fchmod'
15561 d_fchown='$d_fchown'
15562 d_fcntl='$d_fcntl'
15563 d_fcntl_can_lock='$d_fcntl_can_lock'
15564 d_fd_macros='$d_fd_macros'
15565 d_fd_set='$d_fd_set'
15566 d_fds_bits='$d_fds_bits'
15567 d_fgetpos='$d_fgetpos'
15568 d_flexfnam='$d_flexfnam'
15569 d_flock='$d_flock'
15570 d_fork='$d_fork'
15571 d_fpathconf='$d_fpathconf'
15572 d_fpos64_t='$d_fpos64_t'
15573 d_frexpl='$d_frexpl'
15574 d_fs_data_s='$d_fs_data_s'
15575 d_fseeko='$d_fseeko'
15576 d_fsetpos='$d_fsetpos'
15577 d_fstatfs='$d_fstatfs'
15578 d_fstatvfs='$d_fstatvfs'
15579 d_ftello='$d_ftello'
15580 d_ftime='$d_ftime'
15581 d_getcwd='$d_getcwd'
15582 d_getespwnam='$d_getespwnam'
15583 d_getfsstat='$d_getfsstat'
15584 d_getgrent='$d_getgrent'
15585 d_getgrps='$d_getgrps'
15586 d_gethbyaddr='$d_gethbyaddr'
15587 d_gethbyname='$d_gethbyname'
15588 d_gethent='$d_gethent'
15589 d_gethname='$d_gethname'
15590 d_gethostprotos='$d_gethostprotos'
15591 d_getlogin='$d_getlogin'
15592 d_getmnt='$d_getmnt'
15593 d_getmntent='$d_getmntent'
15594 d_getnbyaddr='$d_getnbyaddr'
15595 d_getnbyname='$d_getnbyname'
15596 d_getnent='$d_getnent'
15597 d_getnetprotos='$d_getnetprotos'
15598 d_getpagsz='$d_getpagsz'
15599 d_getpbyname='$d_getpbyname'
15600 d_getpbynumber='$d_getpbynumber'
15601 d_getpent='$d_getpent'
15602 d_getpgid='$d_getpgid'
15603 d_getpgrp2='$d_getpgrp2'
15604 d_getpgrp='$d_getpgrp'
15605 d_getppid='$d_getppid'
15606 d_getprior='$d_getprior'
15607 d_getprotoprotos='$d_getprotoprotos'
15608 d_getprpwnam='$d_getprpwnam'
15609 d_getpwent='$d_getpwent'
15610 d_getsbyname='$d_getsbyname'
15611 d_getsbyport='$d_getsbyport'
15612 d_getsent='$d_getsent'
15613 d_getservprotos='$d_getservprotos'
15614 d_getspnam='$d_getspnam'
15615 d_gettimeod='$d_gettimeod'
15616 d_gnulibc='$d_gnulibc'
15617 d_grpasswd='$d_grpasswd'
15618 d_hasmntopt='$d_hasmntopt'
15619 d_htonl='$d_htonl'
15620 d_iconv='$d_iconv'
15621 d_index='$d_index'
15622 d_inetaton='$d_inetaton'
15623 d_int64_t='$d_int64_t'
15624 d_isascii='$d_isascii'
15625 d_isnan='$d_isnan'
15626 d_isnanl='$d_isnanl'
15627 d_killpg='$d_killpg'
15628 d_lchown='$d_lchown'
15629 d_ldbl_dig='$d_ldbl_dig'
15630 d_link='$d_link'
15631 d_locconv='$d_locconv'
15632 d_lockf='$d_lockf'
15633 d_longdbl='$d_longdbl'
15634 d_longlong='$d_longlong'
15635 d_lseekproto='$d_lseekproto'
15636 d_lstat='$d_lstat'
15637 d_madvise='$d_madvise'
15638 d_mblen='$d_mblen'
15639 d_mbstowcs='$d_mbstowcs'
15640 d_mbtowc='$d_mbtowc'
15641 d_memchr='$d_memchr'
15642 d_memcmp='$d_memcmp'
15643 d_memcpy='$d_memcpy'
15644 d_memmove='$d_memmove'
15645 d_memset='$d_memset'
15646 d_mkdir='$d_mkdir'
15647 d_mkdtemp='$d_mkdtemp'
15648 d_mkfifo='$d_mkfifo'
15649 d_mkstemp='$d_mkstemp'
15650 d_mkstemps='$d_mkstemps'
15651 d_mktime='$d_mktime'
15652 d_mmap='$d_mmap'
15653 d_modfl='$d_modfl'
15654 d_mprotect='$d_mprotect'
15655 d_msg='$d_msg'
15656 d_msg_ctrunc='$d_msg_ctrunc'
15657 d_msg_dontroute='$d_msg_dontroute'
15658 d_msg_oob='$d_msg_oob'
15659 d_msg_peek='$d_msg_peek'
15660 d_msg_proxy='$d_msg_proxy'
15661 d_msgctl='$d_msgctl'
15662 d_msgget='$d_msgget'
15663 d_msgrcv='$d_msgrcv'
15664 d_msgsnd='$d_msgsnd'
15665 d_msync='$d_msync'
15666 d_munmap='$d_munmap'
15667 d_mymalloc='$d_mymalloc'
15668 d_nice='$d_nice'
15669 d_nv_preserves_uv='$d_nv_preserves_uv'
15670 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
15671 d_off64_t='$d_off64_t'
15672 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
15673 d_oldpthreads='$d_oldpthreads'
15674 d_oldsock='$d_oldsock'
15675 d_open3='$d_open3'
15676 d_pathconf='$d_pathconf'
15677 d_pause='$d_pause'
15678 d_perl_otherlibdirs='$d_perl_otherlibdirs'
15679 d_phostname='$d_phostname'
15680 d_pipe='$d_pipe'
15681 d_poll='$d_poll'
15682 d_portable='$d_portable'
15683 d_pthread_yield='$d_pthread_yield'
15684 d_pwage='$d_pwage'
15685 d_pwchange='$d_pwchange'
15686 d_pwclass='$d_pwclass'
15687 d_pwcomment='$d_pwcomment'
15688 d_pwexpire='$d_pwexpire'
15689 d_pwgecos='$d_pwgecos'
15690 d_pwpasswd='$d_pwpasswd'
15691 d_pwquota='$d_pwquota'
15692 d_qgcvt='$d_qgcvt'
15693 d_quad='$d_quad'
15694 d_readdir='$d_readdir'
15695 d_readlink='$d_readlink'
15696 d_rename='$d_rename'
15697 d_rewinddir='$d_rewinddir'
15698 d_rmdir='$d_rmdir'
15699 d_safebcpy='$d_safebcpy'
15700 d_safemcpy='$d_safemcpy'
15701 d_sanemcmp='$d_sanemcmp'
15702 d_sched_yield='$d_sched_yield'
15703 d_scm_rights='$d_scm_rights'
15704 d_seekdir='$d_seekdir'
15705 d_select='$d_select'
15706 d_sem='$d_sem'
15707 d_semctl='$d_semctl'
15708 d_semctl_semid_ds='$d_semctl_semid_ds'
15709 d_semctl_semun='$d_semctl_semun'
15710 d_semget='$d_semget'
15711 d_semop='$d_semop'
15712 d_setegid='$d_setegid'
15713 d_seteuid='$d_seteuid'
15714 d_setgrent='$d_setgrent'
15715 d_setgrps='$d_setgrps'
15716 d_sethent='$d_sethent'
15717 d_setlinebuf='$d_setlinebuf'
15718 d_setlocale='$d_setlocale'
15719 d_setnent='$d_setnent'
15720 d_setpent='$d_setpent'
15721 d_setpgid='$d_setpgid'
15722 d_setpgrp2='$d_setpgrp2'
15723 d_setpgrp='$d_setpgrp'
15724 d_setprior='$d_setprior'
15725 d_setproctitle='$d_setproctitle'
15726 d_setpwent='$d_setpwent'
15727 d_setregid='$d_setregid'
15728 d_setresgid='$d_setresgid'
15729 d_setresuid='$d_setresuid'
15730 d_setreuid='$d_setreuid'
15731 d_setrgid='$d_setrgid'
15732 d_setruid='$d_setruid'
15733 d_setsent='$d_setsent'
15734 d_setsid='$d_setsid'
15735 d_setvbuf='$d_setvbuf'
15736 d_sfio='$d_sfio'
15737 d_shm='$d_shm'
15738 d_shmat='$d_shmat'
15739 d_shmatprototype='$d_shmatprototype'
15740 d_shmctl='$d_shmctl'
15741 d_shmdt='$d_shmdt'
15742 d_shmget='$d_shmget'
15743 d_sigaction='$d_sigaction'
15744 d_sigsetjmp='$d_sigsetjmp'
15745 d_socket='$d_socket'
15746 d_socklen_t='$d_socklen_t'
15747 d_sockpair='$d_sockpair'
15748 d_socks5_init='$d_socks5_init'
15749 d_sqrtl='$d_sqrtl'
15750 d_statblks='$d_statblks'
15751 d_statfs_f_flags='$d_statfs_f_flags'
15752 d_statfs_s='$d_statfs_s'
15753 d_statvfs='$d_statvfs'
15754 d_stdio_cnt_lval='$d_stdio_cnt_lval'
15755 d_stdio_ptr_lval='$d_stdio_ptr_lval'
15756 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
15757 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
15758 d_stdio_stream_array='$d_stdio_stream_array'
15759 d_stdiobase='$d_stdiobase'
15760 d_stdstdio='$d_stdstdio'
15761 d_strchr='$d_strchr'
15762 d_strcoll='$d_strcoll'
15763 d_strctcpy='$d_strctcpy'
15764 d_strerrm='$d_strerrm'
15765 d_strerror='$d_strerror'
15766 d_strtod='$d_strtod'
15767 d_strtol='$d_strtol'
15768 d_strtold='$d_strtold'
15769 d_strtoll='$d_strtoll'
15770 d_strtoul='$d_strtoul'
15771 d_strtoull='$d_strtoull'
15772 d_strtouq='$d_strtouq'
15773 d_strxfrm='$d_strxfrm'
15774 d_suidsafe='$d_suidsafe'
15775 d_symlink='$d_symlink'
15776 d_syscall='$d_syscall'
15777 d_sysconf='$d_sysconf'
15778 d_sysernlst='$d_sysernlst'
15779 d_syserrlst='$d_syserrlst'
15780 d_system='$d_system'
15781 d_tcgetpgrp='$d_tcgetpgrp'
15782 d_tcsetpgrp='$d_tcsetpgrp'
15783 d_telldir='$d_telldir'
15784 d_telldirproto='$d_telldirproto'
15785 d_time='$d_time'
15786 d_times='$d_times'
15787 d_truncate='$d_truncate'
15788 d_tzname='$d_tzname'
15789 d_umask='$d_umask'
15790 d_uname='$d_uname'
15791 d_union_semun='$d_union_semun'
15792 d_ustat='$d_ustat'
15793 d_vendorarch='$d_vendorarch'
15794 d_vendorbin='$d_vendorbin'
15795 d_vendorlib='$d_vendorlib'
15796 d_vfork='$d_vfork'
15797 d_void_closedir='$d_void_closedir'
15798 d_voidsig='$d_voidsig'
15799 d_voidtty='$d_voidtty'
15800 d_volatile='$d_volatile'
15801 d_vprintf='$d_vprintf'
15802 d_wait4='$d_wait4'
15803 d_waitpid='$d_waitpid'
15804 d_wcstombs='$d_wcstombs'
15805 d_wctomb='$d_wctomb'
15806 d_xenix='$d_xenix'
15807 date='$date'
15808 db_hashtype='$db_hashtype'
15809 db_prefixtype='$db_prefixtype'
15810 defvoidused='$defvoidused'
15811 direntrytype='$direntrytype'
15812 dlext='$dlext'
15813 dlsrc='$dlsrc'
15814 doublesize='$doublesize'
15815 drand01='$drand01'
15816 dynamic_ext='$dynamic_ext'
15817 eagain='$eagain'
15818 ebcdic='$ebcdic'
15819 echo='$echo'
15820 egrep='$egrep'
15821 emacs='$emacs'
15822 eunicefix='$eunicefix'
15823 exe_ext='$exe_ext'
15824 expr='$expr'
15825 extensions='$extensions'
15826 fflushNULL='$fflushNULL'
15827 fflushall='$fflushall'
15828 find='$find'
15829 firstmakefile='$firstmakefile'
15830 flex='$flex'
15831 fpossize='$fpossize'
15832 fpostype='$fpostype'
15833 freetype='$freetype'
15834 full_ar='$full_ar'
15835 full_csh='$full_csh'
15836 full_sed='$full_sed'
15837 gccosandvers='$gccosandvers'
15838 gccversion='$gccversion'
15839 gidformat='$gidformat'
15840 gidsign='$gidsign'
15841 gidsize='$gidsize'
15842 gidtype='$gidtype'
15843 glibpth='$glibpth'
15844 grep='$grep'
15845 groupcat='$groupcat'
15846 groupstype='$groupstype'
15847 gzip='$gzip'
15848 h_fcntl='$h_fcntl'
15849 h_sysfile='$h_sysfile'
15850 hint='$hint'
15851 hostcat='$hostcat'
15852 i16size='$i16size'
15853 i16type='$i16type'
15854 i32size='$i32size'
15855 i32type='$i32type'
15856 i64size='$i64size'
15857 i64type='$i64type'
15858 i8size='$i8size'
15859 i8type='$i8type'
15860 i_arpainet='$i_arpainet'
15861 i_bsdioctl='$i_bsdioctl'
15862 i_db='$i_db'
15863 i_dbm='$i_dbm'
15864 i_dirent='$i_dirent'
15865 i_dld='$i_dld'
15866 i_dlfcn='$i_dlfcn'
15867 i_fcntl='$i_fcntl'
15868 i_float='$i_float'
15869 i_gdbm='$i_gdbm'
15870 i_grp='$i_grp'
15871 i_iconv='$i_iconv'
15872 i_ieeefp='$i_ieeefp'
15873 i_inttypes='$i_inttypes'
15874 i_libutil='$i_libutil'
15875 i_limits='$i_limits'
15876 i_locale='$i_locale'
15877 i_machcthr='$i_machcthr'
15878 i_malloc='$i_malloc'
15879 i_math='$i_math'
15880 i_memory='$i_memory'
15881 i_mntent='$i_mntent'
15882 i_ndbm='$i_ndbm'
15883 i_netdb='$i_netdb'
15884 i_neterrno='$i_neterrno'
15885 i_netinettcp='$i_netinettcp'
15886 i_niin='$i_niin'
15887 i_poll='$i_poll'
15888 i_prot='$i_prot'
15889 i_pthread='$i_pthread'
15890 i_pwd='$i_pwd'
15891 i_rpcsvcdbm='$i_rpcsvcdbm'
15892 i_sfio='$i_sfio'
15893 i_sgtty='$i_sgtty'
15894 i_shadow='$i_shadow'
15895 i_socks='$i_socks'
15896 i_stdarg='$i_stdarg'
15897 i_stddef='$i_stddef'
15898 i_stdlib='$i_stdlib'
15899 i_string='$i_string'
15900 i_sunmath='$i_sunmath'
15901 i_sysaccess='$i_sysaccess'
15902 i_sysdir='$i_sysdir'
15903 i_sysfile='$i_sysfile'
15904 i_sysfilio='$i_sysfilio'
15905 i_sysin='$i_sysin'
15906 i_sysioctl='$i_sysioctl'
15907 i_syslog='$i_syslog'
15908 i_sysmman='$i_sysmman'
15909 i_sysmode='$i_sysmode'
15910 i_sysmount='$i_sysmount'
15911 i_sysndir='$i_sysndir'
15912 i_sysparam='$i_sysparam'
15913 i_sysresrc='$i_sysresrc'
15914 i_syssecrt='$i_syssecrt'
15915 i_sysselct='$i_sysselct'
15916 i_syssockio='$i_syssockio'
15917 i_sysstat='$i_sysstat'
15918 i_sysstatfs='$i_sysstatfs'
15919 i_sysstatvfs='$i_sysstatvfs'
15920 i_systime='$i_systime'
15921 i_systimek='$i_systimek'
15922 i_systimes='$i_systimes'
15923 i_systypes='$i_systypes'
15924 i_sysuio='$i_sysuio'
15925 i_sysun='$i_sysun'
15926 i_sysutsname='$i_sysutsname'
15927 i_sysvfs='$i_sysvfs'
15928 i_syswait='$i_syswait'
15929 i_termio='$i_termio'
15930 i_termios='$i_termios'
15931 i_time='$i_time'
15932 i_unistd='$i_unistd'
15933 i_ustat='$i_ustat'
15934 i_utime='$i_utime'
15935 i_values='$i_values'
15936 i_varargs='$i_varargs'
15937 i_varhdr='$i_varhdr'
15938 i_vfork='$i_vfork'
15939 ignore_versioned_solibs='$ignore_versioned_solibs'
15940 inc_version_list='$inc_version_list'
15941 inc_version_list_init='$inc_version_list_init'
15942 incpath='$incpath'
15943 inews='$inews'
15944 installarchlib='$installarchlib'
15945 installbin='$installbin'
15946 installman1dir='$installman1dir'
15947 installman3dir='$installman3dir'
15948 installprefix='$installprefix'
15949 installprefixexp='$installprefixexp'
15950 installprivlib='$installprivlib'
15951 installscript='$installscript'
15952 installsitearch='$installsitearch'
15953 installsitebin='$installsitebin'
15954 installsitelib='$installsitelib'
15955 installstyle='$installstyle'
15956 installusrbinperl='$installusrbinperl'
15957 installvendorarch='$installvendorarch'
15958 installvendorbin='$installvendorbin'
15959 installvendorlib='$installvendorlib'
15960 intsize='$intsize'
15961 ivdformat='$ivdformat'
15962 ivsize='$ivsize'
15963 ivtype='$ivtype'
15964 known_extensions='$known_extensions'
15965 ksh='$ksh'
15966 ld='$ld'
15967 lddlflags='$lddlflags'
15968 ldflags='$ldflags'
15969 ldflags_uselargefiles='$ldflags_uselargefiles'
15970 ldlibpthname='$ldlibpthname'
15971 less='$less'
15972 lib_ext='$lib_ext'
15973 libc='$libc'
15974 libperl='$libperl'
15975 libpth='$libpth'
15976 libs='$libs'
15977 libsdirs='$libsdirs'
15978 libsfiles='$libsfiles'
15979 libsfound='$libsfound'
15980 libspath='$libspath'
15981 libswanted='$libswanted'
15982 libswanted_uselargefiles='$libswanted_uselargefiles'
15983 line='$line'
15984 lint='$lint'
15985 lkflags='$lkflags'
15986 ln='$ln'
15987 lns='$lns'
15988 locincpth='$locincpth'
15989 loclibpth='$loclibpth'
15990 longdblsize='$longdblsize'
15991 longlongsize='$longlongsize'
15992 longsize='$longsize'
15993 lp='$lp'
15994 lpr='$lpr'
15995 ls='$ls'
15996 lseeksize='$lseeksize'
15997 lseektype='$lseektype'
15998 mail='$mail'
15999 mailx='$mailx'
16000 make='$make'
16001 make_set_make='$make_set_make'
16002 mallocobj='$mallocobj'
16003 mallocsrc='$mallocsrc'
16004 malloctype='$malloctype'
16005 man1dir='$man1dir'
16006 man1direxp='$man1direxp'
16007 man1ext='$man1ext'
16008 man3dir='$man3dir'
16009 man3direxp='$man3direxp'
16010 man3ext='$man3ext'
16011 mips_type='$mips_type'
16012 mkdir='$mkdir'
16013 mmaptype='$mmaptype'
16014 modetype='$modetype'
16015 more='$more'
16016 multiarch='$multiarch'
16017 mv='$mv'
16018 myarchname='$myarchname'
16019 mydomain='$mydomain'
16020 myhostname='$myhostname'
16021 myuname='$myuname'
16022 n='$n'
16023 netdb_hlen_type='$netdb_hlen_type'
16024 netdb_host_type='$netdb_host_type'
16025 netdb_name_type='$netdb_name_type'
16026 netdb_net_type='$netdb_net_type'
16027 nm='$nm'
16028 nm_opt='$nm_opt'
16029 nm_so_opt='$nm_so_opt'
16030 nonxs_ext='$nonxs_ext'
16031 nroff='$nroff'
16032 nvEUformat='$nvEUformat'
16033 nvFUformat='$nvFUformat'
16034 nvGUformat='$nvGUformat'
16035 nveformat='$nveformat'
16036 nvfformat='$nvfformat'
16037 nvgformat='$nvgformat'
16038 nvsize='$nvsize'
16039 nvtype='$nvtype'
16040 o_nonblock='$o_nonblock'
16041 obj_ext='$obj_ext'
16042 old_pthread_create_joinable='$old_pthread_create_joinable'
16043 optimize='$optimize'
16044 orderlib='$orderlib'
16045 osname='$osname'
16046 osvers='$osvers'
16047 otherlibdirs='$otherlibdirs'
16048 package='$package'
16049 pager='$pager'
16050 passcat='$passcat'
16051 patchlevel='$patchlevel'
16052 path_sep='$path_sep'
16053 perl5='$perl5'
16054 perl='$perl'
16055 perladmin='$perladmin'
16056 perllibs='$perllibs'
16057 perlpath='$perlpath'
16058 pg='$pg'
16059 phostname='$phostname'
16060 pidtype='$pidtype'
16061 plibpth='$plibpth'
16062 pm_apiversion='$pm_apiversion'
16063 pmake='$pmake'
16064 pr='$pr'
16065 prefix='$prefix'
16066 prefixexp='$prefixexp'
16067 privlib='$privlib'
16068 privlibexp='$privlibexp'
16069 prototype='$prototype'
16070 ptrsize='$ptrsize'
16071 quadkind='$quadkind'
16072 quadtype='$quadtype'
16073 randbits='$randbits'
16074 randfunc='$randfunc'
16075 randseedtype='$randseedtype'
16076 ranlib='$ranlib'
16077 rd_nodata='$rd_nodata'
16078 revision='$revision'
16079 rm='$rm'
16080 rmail='$rmail'
16081 runnm='$runnm'
16082 sPRIEUldbl='$sPRIEUldbl'
16083 sPRIFUldbl='$sPRIFUldbl'
16084 sPRIGUldbl='$sPRIGUldbl'
16085 sPRIXU64='$sPRIXU64'
16086 sPRId64='$sPRId64'
16087 sPRIeldbl='$sPRIeldbl'
16088 sPRIfldbl='$sPRIfldbl'
16089 sPRIgldbl='$sPRIgldbl'
16090 sPRIi64='$sPRIi64'
16091 sPRIo64='$sPRIo64'
16092 sPRIu64='$sPRIu64'
16093 sPRIx64='$sPRIx64'
16094 sSCNfldbl='$sSCNfldbl'
16095 sched_yield='$sched_yield'
16096 scriptdir='$scriptdir'
16097 scriptdirexp='$scriptdirexp'
16098 sed='$sed'
16099 seedfunc='$seedfunc'
16100 selectminbits='$selectminbits'
16101 selecttype='$selecttype'
16102 sendmail='$sendmail'
16103 sh='$sh'
16104 shar='$shar'
16105 sharpbang='$sharpbang'
16106 shmattype='$shmattype'
16107 shortsize='$shortsize'
16108 shrpenv='$shrpenv'
16109 shsharp='$shsharp'
16110 sig_count='$sig_count'
16111 sig_name='$sig_name'
16112 sig_name_init='$sig_name_init'
16113 sig_num='$sig_num'
16114 sig_num_init='$sig_num_init'
16115 signal_t='$signal_t'
16116 sitearch='$sitearch'
16117 sitearchexp='$sitearchexp'
16118 sitebin='$sitebin'
16119 sitebinexp='$sitebinexp'
16120 sitelib='$sitelib'
16121 sitelib_stem='$sitelib_stem'
16122 sitelibexp='$sitelibexp'
16123 siteprefix='$siteprefix'
16124 siteprefixexp='$siteprefixexp'
16125 sizesize='$sizesize'
16126 sizetype='$sizetype'
16127 sleep='$sleep'
16128 smail='$smail'
16129 so='$so'
16130 sockethdr='$sockethdr'
16131 socketlib='$socketlib'
16132 socksizetype='$socksizetype'
16133 sort='$sort'
16134 spackage='$spackage'
16135 spitshell='$spitshell'
16136 src='$src'
16137 ssizetype='$ssizetype'
16138 startperl='$startperl'
16139 startsh='$startsh'
16140 static_ext='$static_ext'
16141 stdchar='$stdchar'
16142 stdio_base='$stdio_base'
16143 stdio_bufsiz='$stdio_bufsiz'
16144 stdio_cnt='$stdio_cnt'
16145 stdio_filbuf='$stdio_filbuf'
16146 stdio_ptr='$stdio_ptr'
16147 stdio_stream_array='$stdio_stream_array'
16148 strings='$strings'
16149 submit='$submit'
16150 subversion='$subversion'
16151 sysman='$sysman'
16152 tail='$tail'
16153 tar='$tar'
16154 tbl='$tbl'
16155 tee='$tee'
16156 test='$test'
16157 timeincl='$timeincl'
16158 timetype='$timetype'
16159 touch='$touch'
16160 tr='$tr'
16161 trnl='$trnl'
16162 troff='$troff'
16163 u16size='$u16size'
16164 u16type='$u16type'
16165 u32size='$u32size'
16166 u32type='$u32type'
16167 u64size='$u64size'
16168 u64type='$u64type'
16169 u8size='$u8size'
16170 u8type='$u8type'
16171 uidformat='$uidformat'
16172 uidsign='$uidsign'
16173 uidsize='$uidsize'
16174 uidtype='$uidtype'
16175 uname='$uname'
16176 uniq='$uniq'
16177 uquadtype='$uquadtype'
16178 use5005threads='$use5005threads'
16179 use64bitall='$use64bitall'
16180 use64bitint='$use64bitint'
16181 usedl='$usedl'
16182 useithreads='$useithreads'
16183 uselargefiles='$uselargefiles'
16184 uselongdouble='$uselongdouble'
16185 usemorebits='$usemorebits'
16186 usemultiplicity='$usemultiplicity'
16187 usemymalloc='$usemymalloc'
16188 usenm='$usenm'
16189 useopcode='$useopcode'
16190 useperlio='$useperlio'
16191 useposix='$useposix'
16192 usesfio='$usesfio'
16193 useshrplib='$useshrplib'
16194 usesocks='$usesocks'
16195 usethreads='$usethreads'
16196 usevendorprefix='$usevendorprefix'
16197 usevfork='$usevfork'
16198 usrinc='$usrinc'
16199 uuname='$uuname'
16200 uvXUformat='$uvXUformat'
16201 uvoformat='$uvoformat'
16202 uvsize='$uvsize'
16203 uvtype='$uvtype'
16204 uvuformat='$uvuformat'
16205 uvxformat='$uvxformat'
16206 vendorarch='$vendorarch'
16207 vendorarchexp='$vendorarchexp'
16208 vendorbin='$vendorbin'
16209 vendorbinexp='$vendorbinexp'
16210 vendorlib='$vendorlib'
16211 vendorlib_stem='$vendorlib_stem'
16212 vendorlibexp='$vendorlibexp'
16213 vendorprefix='$vendorprefix'
16214 vendorprefixexp='$vendorprefixexp'
16215 version='$version'
16216 versiononly='$versiononly'
16217 vi='$vi'
16218 voidflags='$voidflags'
16219 xlibpth='$xlibpth'
16220 xs_apiversion='$xs_apiversion'
16221 zcat='$zcat'
16222 zip='$zip'
16223 EOT
16224
16225 : Add in command line options if available
16226 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
16227
16228 : add special variables
16229 $test -f $src/patchlevel.h && \
16230 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
16231 echo "CONFIGDOTSH=true" >>config.sh
16232
16233 : propagate old symbols
16234 if $test -f UU/config.sh; then
16235         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
16236         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
16237         $sort | $uniq -u >UU/oldsyms
16238         set X `cat UU/oldsyms`
16239         shift
16240         case $# in
16241         0) ;;
16242         *)
16243                 cat <<EOM
16244 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
16245 EOM
16246                 echo "# Variables propagated from previous config.sh file." >>config.sh
16247                 for sym in `cat UU/oldsyms`; do
16248                         echo "    Propagating $hint variable "'$'"$sym..."
16249                         eval 'tmp="$'"${sym}"'"'
16250                         echo "$tmp" | \
16251                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
16252                 done
16253                 ;;
16254         esac
16255 fi
16256
16257 : Finish up by extracting the .SH files
16258 case "$alldone" in
16259 exit)
16260         $rm -rf UU
16261         echo "Done."
16262         exit 0
16263         ;;
16264 cont)
16265         ;;
16266 '')
16267         dflt=''
16268         nostick=true
16269         $cat <<EOM
16270
16271 If you'd like to make any changes to the config.sh file before I begin
16272 to configure things, do it as a shell escape now (e.g. !vi config.sh).
16273
16274 EOM
16275         rp="Press return or use a shell escape to edit config.sh:"
16276         . UU/myread
16277         nostick=''
16278         case "$ans" in
16279         '') ;;
16280         *) : in case they cannot read
16281                 sh 1>&4 -c "$ans";;
16282         esac
16283         ;;
16284 esac
16285
16286 : if this fails, just run all the .SH files by hand
16287 . ./config.sh
16288
16289 echo " "
16290 exec 1>&4
16291 . ./UU/extract
16292
16293 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
16294         dflt=y
16295         case "$silent" in
16296         true) ;;
16297         *)
16298                 $cat <<EOM
16299
16300 Now you need to generate make dependencies by running "$make depend".
16301 You might prefer to run it in background: "$make depend > makedepend.out &"
16302 It can take a while, so you might not want to run it right now.
16303
16304 EOM
16305                 ;;
16306         esac
16307         rp="Run $make depend now?"
16308         . UU/myread
16309         case "$ans" in
16310         y*)
16311                 $make depend && echo "Now you must run '$make'."
16312                 ;;
16313         *)
16314                 echo "You must run '$make depend' then '$make'."
16315                 ;;
16316         esac
16317 elif test -f [Mm]akefile; then
16318         echo " "
16319         echo "Now you must run a $make."
16320 else
16321         echo "Done."
16322 fi
16323
16324 if $test -f Policy.sh; then
16325     $cat <<EOM
16326
16327 If you compile $package on a different machine or from a different object
16328 directory, copy the Policy.sh file from this object directory to the
16329 new one before you run Configure -- this will help you with most of
16330 the policy defaults.
16331
16332 EOM
16333 fi
16334 if $test -f config.msg; then
16335     echo "Hmm.  I also noted the following information while running:"
16336     echo " "
16337     $cat config.msg >&4
16338     $rm -f config.msg
16339 fi
16340 $rm -f kit*isdone ark*isdone
16341 $rm -rf UU
16342
16343 : End of Configure
16344