94238e57d35885447b6ce1a13310f1f8df0be808
[p5sagit/p5-mst-13.2.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Tue Oct 31 16:26:33 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_fd_macros=''
352 d_fd_set=''
353 d_fds_bits=''
354 d_fgetpos=''
355 d_flexfnam=''
356 d_flock=''
357 d_fork=''
358 d_fpos64_t=''
359 d_frexpl=''
360 d_fs_data_s=''
361 d_fseeko=''
362 d_fsetpos=''
363 d_fstatfs=''
364 d_ftello=''
365 d_ftime=''
366 d_gettimeod=''
367 d_Gconvert=''
368 d_getcwd=''
369 d_getespwnam=''
370 d_getfsstat=''
371 d_getgrent=''
372 d_getgrps=''
373 d_gethbyaddr=''
374 d_gethbyname=''
375 d_gethent=''
376 aphostname=''
377 d_gethname=''
378 d_phostname=''
379 d_uname=''
380 d_gethostprotos=''
381 d_getlogin=''
382 d_getmnt=''
383 d_getmntent=''
384 d_getnbyaddr=''
385 d_getnbyname=''
386 d_getnent=''
387 d_getnetprotos=''
388 d_getpent=''
389 d_getpgid=''
390 d_getpgrp2=''
391 d_bsdgetpgrp=''
392 d_getpgrp=''
393 d_getppid=''
394 d_getprior=''
395 d_getpbyname=''
396 d_getpbynumber=''
397 d_getprotoprotos=''
398 d_getprpwnam=''
399 d_getpwent=''
400 d_getsent=''
401 d_getservprotos=''
402 d_getspnam=''
403 d_getsbyname=''
404 d_getsbyport=''
405 d_gnulibc=''
406 d_hasmntopt=''
407 d_htonl=''
408 d_iconv=''
409 d_inetaton=''
410 d_int64_t=''
411 d_isascii=''
412 d_isnan=''
413 d_isnanl=''
414 d_killpg=''
415 d_lchown=''
416 d_ldbl_dig=''
417 d_link=''
418 d_locconv=''
419 d_lockf=''
420 d_longdbl=''
421 longdblsize=''
422 d_longlong=''
423 longlongsize=''
424 d_lseekproto=''
425 d_lstat=''
426 d_madvise=''
427 d_mblen=''
428 d_mbstowcs=''
429 d_mbtowc=''
430 d_memchr=''
431 d_memcmp=''
432 d_memcpy=''
433 d_memmove=''
434 d_memset=''
435 d_mkdir=''
436 d_mkdtemp=''
437 d_mkfifo=''
438 d_mkstemp=''
439 d_mkstemps=''
440 d_mktime=''
441 d_mmap=''
442 mmaptype=''
443 d_modfl=''
444 d_mprotect=''
445 d_msg=''
446 d_msgctl=''
447 d_msgget=''
448 d_msgrcv=''
449 d_msgsnd=''
450 d_msync=''
451 d_munmap=''
452 d_nice=''
453 d_off64_t=''
454 d_open3=''
455 d_fpathconf=''
456 d_pathconf=''
457 d_pause=''
458 d_pipe=''
459 d_poll=''
460 d_portable=''
461 d_old_pthread_create_joinable=''
462 old_pthread_create_joinable=''
463 d_pthread_yield=''
464 d_sched_yield=''
465 sched_yield=''
466 d_qgcvt=''
467 d_readdir=''
468 d_rewinddir=''
469 d_seekdir=''
470 d_telldir=''
471 d_readlink=''
472 d_rename=''
473 d_rmdir=''
474 d_safebcpy=''
475 d_safemcpy=''
476 d_sanemcmp=''
477 d_select=''
478 d_sem=''
479 d_semctl=''
480 d_semget=''
481 d_semop=''
482 d_setegid=''
483 d_seteuid=''
484 d_setgrent=''
485 d_setgrps=''
486 d_sethent=''
487 d_setlinebuf=''
488 d_setlocale=''
489 d_setnent=''
490 d_setpent=''
491 d_setpgid=''
492 d_setpgrp2=''
493 d_bsdsetpgrp=''
494 d_setpgrp=''
495 d_setprior=''
496 d_setproctitle=''
497 d_setpwent=''
498 d_setregid=''
499 d_setresgid=''
500 d_setresuid=''
501 d_setreuid=''
502 d_setrgid=''
503 d_setruid=''
504 d_setsent=''
505 d_setsid=''
506 d_setvbuf=''
507 d_sfio=''
508 usesfio=''
509 d_shm=''
510 d_shmat=''
511 d_shmatprototype=''
512 shmattype=''
513 d_shmctl=''
514 d_shmdt=''
515 d_shmget=''
516 d_sigaction=''
517 d_sigsetjmp=''
518 d_msg_ctrunc=''
519 d_msg_dontroute=''
520 d_msg_oob=''
521 d_msg_peek=''
522 d_msg_proxy=''
523 d_oldsock=''
524 d_scm_rights=''
525 d_socket=''
526 d_sockpair=''
527 sockethdr=''
528 socketlib=''
529 d_socklen_t=''
530 d_socks5_init=''
531 d_sqrtl=''
532 d_statblks=''
533 d_statfs_f_flags=''
534 d_statfs_s=''
535 d_fstatvfs=''
536 d_statvfs=''
537 d_stdio_cnt_lval=''
538 d_stdio_ptr_lval=''
539 d_stdio_ptr_lval_nochange_cnt=''
540 d_stdio_ptr_lval_sets_cnt=''
541 d_stdiobase=''
542 d_stdstdio=''
543 stdio_base=''
544 stdio_bufsiz=''
545 stdio_cnt=''
546 stdio_filbuf=''
547 stdio_ptr=''
548 d_index=''
549 d_strchr=''
550 d_strcoll=''
551 d_strctcpy=''
552 d_strerrm=''
553 d_strerror=''
554 d_sysernlst=''
555 d_syserrlst=''
556 d_strtod=''
557 d_strtol=''
558 d_strtold=''
559 d_strtoll=''
560 d_strtoul=''
561 d_strtoull=''
562 d_strtouq=''
563 d_strxfrm=''
564 d_symlink=''
565 d_syscall=''
566 d_sysconf=''
567 d_system=''
568 d_tcgetpgrp=''
569 d_tcsetpgrp=''
570 d_telldirproto=''
571 d_time=''
572 timetype=''
573 clocktype=''
574 d_times=''
575 d_truncate=''
576 d_tzname=''
577 d_umask=''
578 d_semctl_semid_ds=''
579 d_semctl_semun=''
580 d_union_semun=''
581 d_ustat=''
582 d_vfork=''
583 usevfork=''
584 d_voidsig=''
585 signal_t=''
586 d_volatile=''
587 d_charvspr=''
588 d_vprintf=''
589 d_wait4=''
590 d_waitpid=''
591 d_wcstombs=''
592 d_wctomb=''
593 dlext=''
594 cccdlflags=''
595 ccdlflags=''
596 dlsrc=''
597 ld=''
598 lddlflags=''
599 usedl=''
600 doublesize=''
601 ebcdic=''
602 fflushNULL=''
603 fflushall=''
604 fpossize=''
605 fpostype=''
606 gccosandvers=''
607 gccversion=''
608 gidformat=''
609 gidsign=''
610 gidsize=''
611 gidtype=''
612 groupstype=''
613 h_fcntl=''
614 h_sysfile=''
615 i_arpainet=''
616 db_hashtype=''
617 db_prefixtype=''
618 i_db=''
619 i_dbm=''
620 i_rpcsvcdbm=''
621 d_dirnamlen=''
622 direntrytype=''
623 i_dirent=''
624 i_dld=''
625 i_dlfcn=''
626 i_fcntl=''
627 i_float=''
628 i_gdbm=''
629 d_grpasswd=''
630 i_grp=''
631 i_iconv=''
632 i_ieeefp=''
633 i_inttypes=''
634 i_libutil=''
635 i_limits=''
636 i_locale=''
637 i_machcthr=''
638 i_malloc=''
639 i_math=''
640 i_memory=''
641 i_mntent=''
642 i_ndbm=''
643 i_netdb=''
644 i_neterrno=''
645 i_netinettcp=''
646 i_niin=''
647 i_sysin=''
648 i_poll=''
649 i_prot=''
650 i_pthread=''
651 d_pwage=''
652 d_pwchange=''
653 d_pwclass=''
654 d_pwcomment=''
655 d_pwexpire=''
656 d_pwgecos=''
657 d_pwpasswd=''
658 d_pwquota=''
659 i_pwd=''
660 i_sfio=''
661 i_shadow=''
662 i_socks=''
663 i_stddef=''
664 i_stdlib=''
665 i_string=''
666 strings=''
667 i_sunmath=''
668 i_sysaccess=''
669 i_sysdir=''
670 i_sysfile=''
671 d_voidtty=''
672 i_bsdioctl=''
673 i_sysfilio=''
674 i_sysioctl=''
675 i_syssockio=''
676 i_syslog=''
677 i_sysmman=''
678 i_sysmode=''
679 i_sysmount=''
680 i_sysndir=''
681 i_sysparam=''
682 i_sysresrc=''
683 i_syssecrt=''
684 i_sysselct=''
685 i_sysstat=''
686 i_sysstatfs=''
687 i_sysstatvfs=''
688 i_systimes=''
689 i_systypes=''
690 i_sysuio=''
691 i_sysun=''
692 i_sysutsname=''
693 i_sysvfs=''
694 i_syswait=''
695 i_sgtty=''
696 i_termio=''
697 i_termios=''
698 i_systime=''
699 i_systimek=''
700 i_time=''
701 timeincl=''
702 i_unistd=''
703 i_ustat=''
704 i_utime=''
705 i_values=''
706 i_stdarg=''
707 i_varargs=''
708 i_varhdr=''
709 i_vfork=''
710 inc_version_list=''
711 inc_version_list_init=''
712 installprefix=''
713 installprefixexp=''
714 installstyle=''
715 installusrbinperl=''
716 intsize=''
717 longsize=''
718 shortsize=''
719 libc=''
720 ldlibpthname=''
721 libperl=''
722 shrpenv=''
723 useshrplib=''
724 glibpth=''
725 libpth=''
726 loclibpth=''
727 plibpth=''
728 xlibpth=''
729 ignore_versioned_solibs=''
730 libs=''
731 libsdirs=''
732 libsfiles=''
733 libsfound=''
734 libspath=''
735 lns=''
736 d_PRIEUldbl=''
737 d_PRIFUldbl=''
738 d_PRIGUldbl=''
739 d_PRIeldbl=''
740 d_PRIfldbl=''
741 d_PRIgldbl=''
742 d_SCNfldbl=''
743 sPRIEUldbl=''
744 sPRIFUldbl=''
745 sPRIGUldbl=''
746 sPRIeldbl=''
747 sPRIfldbl=''
748 sPRIgldbl=''
749 sSCNfldbl=''
750 lseeksize=''
751 lseektype=''
752 make_set_make=''
753 d_mymalloc=''
754 freetype=''
755 mallocobj=''
756 mallocsrc=''
757 malloctype=''
758 usemymalloc=''
759 installman1dir=''
760 man1dir=''
761 man1direxp=''
762 man1ext=''
763 installman3dir=''
764 man3dir=''
765 man3direxp=''
766 man3ext=''
767 modetype=''
768 multiarch=''
769 mydomain=''
770 myhostname=''
771 phostname=''
772 c=''
773 n=''
774 d_eofnblk=''
775 eagain=''
776 o_nonblock=''
777 rd_nodata=''
778 netdb_hlen_type=''
779 netdb_host_type=''
780 netdb_name_type=''
781 netdb_net_type=''
782 groupcat=''
783 hostcat=''
784 passcat=''
785 orderlib=''
786 ranlib=''
787 d_perl_otherlibdirs=''
788 otherlibdirs=''
789 package=''
790 spackage=''
791 pager=''
792 api_revision=''
793 api_subversion=''
794 api_version=''
795 api_versionstring=''
796 patchlevel=''
797 revision=''
798 subversion=''
799 version=''
800 perl5=''
801 perladmin=''
802 perlpath=''
803 d_nv_preserves_uv=''
804 d_nv_preserves_uv_bits=''
805 i16size=''
806 i16type=''
807 i32size=''
808 i32type=''
809 i64size=''
810 i64type=''
811 i8size=''
812 i8type=''
813 ivsize=''
814 ivtype=''
815 nvsize=''
816 nvtype=''
817 u16size=''
818 u16type=''
819 u32size=''
820 u32type=''
821 u64size=''
822 u64type=''
823 u8size=''
824 u8type=''
825 uvsize=''
826 uvtype=''
827 ivdformat=''
828 nvEUformat=''
829 nvFUformat=''
830 nvGUformat=''
831 nveformat=''
832 nvfformat=''
833 nvgformat=''
834 uvXUformat=''
835 uvoformat=''
836 uvuformat=''
837 uvxformat=''
838 pidtype=''
839 prefix=''
840 prefixexp=''
841 installprivlib=''
842 privlib=''
843 privlibexp=''
844 prototype=''
845 ptrsize=''
846 d_PRIXU64=''
847 d_PRId64=''
848 d_PRIi64=''
849 d_PRIo64=''
850 d_PRIu64=''
851 d_PRIx64=''
852 sPRIXU64=''
853 sPRId64=''
854 sPRIi64=''
855 sPRIo64=''
856 sPRIu64=''
857 sPRIx64=''
858 d_quad=''
859 quadkind=''
860 quadtype=''
861 uquadtype=''
862 drand01=''
863 randbits=''
864 randfunc=''
865 randseedtype=''
866 seedfunc=''
867 installscript=''
868 scriptdir=''
869 scriptdirexp=''
870 selectminbits=''
871 selecttype=''
872 sh=''
873 sig_count=''
874 sig_name=''
875 sig_name_init=''
876 sig_num=''
877 sig_num_init=''
878 installsitearch=''
879 sitearch=''
880 sitearchexp=''
881 installsitebin=''
882 sitebin=''
883 sitebinexp=''
884 installsitelib=''
885 sitelib=''
886 sitelib_stem=''
887 sitelibexp=''
888 siteprefix=''
889 siteprefixexp=''
890 sizesize=''
891 sizetype=''
892 so=''
893 socksizetype=''
894 sharpbang=''
895 shsharp=''
896 spitshell=''
897 src=''
898 ssizetype=''
899 startperl=''
900 startsh=''
901 stdchar=''
902 d_stdio_stream_array=''
903 stdio_stream_array=''
904 sysman=''
905 trnl=''
906 uidformat=''
907 uidsign=''
908 uidsize=''
909 uidtype=''
910 archname64=''
911 use64bitall=''
912 use64bitint=''
913 ccflags_uselargefiles=''
914 ldflags_uselargefiles=''
915 libswanted_uselargefiles=''
916 uselargefiles=''
917 uselongdouble=''
918 usemorebits=''
919 usemultiplicity=''
920 nm_opt=''
921 nm_so_opt=''
922 runnm=''
923 usenm=''
924 useperlio=''
925 usesocks=''
926 d_oldpthreads=''
927 use5005threads=''
928 useithreads=''
929 usethreads=''
930 incpath=''
931 mips_type=''
932 usrinc=''
933 d_vendorarch=''
934 installvendorarch=''
935 vendorarch=''
936 vendorarchexp=''
937 d_vendorbin=''
938 installvendorbin=''
939 vendorbin=''
940 vendorbinexp=''
941 d_vendorlib=''
942 installvendorlib=''
943 vendorlib=''
944 vendorlib_stem=''
945 vendorlibexp=''
946 usevendorprefix=''
947 vendorprefix=''
948 vendorprefixexp=''
949 versiononly=''
950 defvoidused=''
951 voidflags=''
952 pm_apiversion=''
953 xs_apiversion=''
954 CONFIG=''
955
956 define='define'
957 undef='undef'
958 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
959 rmlist=''
960
961 : We must find out about Eunice early
962 eunicefix=':'
963 if test -f /etc/unixtovms; then
964         eunicefix=/etc/unixtovms
965 fi
966 if test -f /etc/unixtovms.exe; then
967         eunicefix=/etc/unixtovms.exe
968 fi
969
970 i_whoami=''
971 ccname=''
972 ccversion=''
973 perllibs=''
974 : set useposix=false in your hint file to disable the POSIX extension.
975 useposix=true
976 : set useopcode=false in your hint file to disable the Opcode extension.
977 useopcode=true
978 : Trailing extension.  Override this in a hint file, if needed.
979 _exe=''
980 : Extra object files, if any, needed on this platform.
981 archobjs=''
982 archname=''
983 : Possible local include directories to search.
984 : Set locincpth to "" in a hint file to defeat local include searches.
985 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
986 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
987 :
988 : no include file wanted by default
989 inclwanted=''
990
991 groupstype=''
992 : change the next line if compiling for Xenix/286 on Xenix/386
993 xlibpth='/usr/lib/386 /lib/386'
994 : Possible local library directories to search.
995 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
996 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
997
998 : general looking path for locating libraries
999 glibpth="/lib /usr/lib $xlibpth"
1000 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1001 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1002 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1003
1004 : Private path used by Configure to find libraries.  Its value
1005 : is prepended to libpth. This variable takes care of special
1006 : machines, like the mips.  Usually, it should be empty.
1007 plibpth=''
1008
1009 : default library list
1010 libswanted=''
1011 : some systems want to use only the non-versioned libso:s
1012 ignore_versioned_solibs=''
1013 archname64=''
1014 ccflags_uselargefiles=''
1015 ldflags_uselargefiles=''
1016 libswanted_uselargefiles=''
1017 : set usemultiplicity on the Configure command line to enable multiplicity.
1018 : set usesocks on the Configure command line to enable socks.
1019 : set usethreads on the Configure command line to enable threads.
1020 : full support for void wanted by default
1021 defvoidused=15
1022
1023 : List of libraries we want.
1024 : If anyone needs -lnet, put it in a hint file.
1025 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1026 libswanted="$libswanted dld ld sun m c cposix posix"
1027 libswanted="$libswanted ndir dir crypt sec"
1028 libswanted="$libswanted ucb bsd BSD PW x iconv util"
1029 : We probably want to search /usr/shlib before most other libraries.
1030 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1031 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1032 glibpth="/usr/shlib $glibpth"
1033 : Do not use vfork unless overridden by a hint file.
1034 usevfork=false
1035
1036 : Find the basic shell for Bourne shell scripts
1037 case "$sh" in
1038 '')
1039         case "$SYSTYPE" in
1040         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1041         *) xxx='/bin/sh';;
1042         esac
1043         if test -f "$xxx"; then
1044                 sh="$xxx"
1045         else
1046                 : Build up a list and do a single loop so we can 'break' out.
1047                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1048                 for xxx in sh bash ksh pdksh ash; do
1049                         for p in $pth; do
1050                                 try="$try ${p}/${xxx}"
1051                         done
1052                 done
1053                 for xxx in $try; do
1054                         if test -f "$xxx"; then
1055                                 sh="$xxx";
1056                                 break
1057                         elif test -f "$xxx.exe"; then
1058                                 sh="$xxx";
1059                                 break
1060                         fi
1061                 done
1062         fi
1063         ;;
1064 esac
1065
1066 case "$sh" in
1067 '')     cat <<EOM >&2
1068 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1069
1070 Usually it's in /bin/sh.  How did you even get this far?
1071 Please contact me (Perl Maintainers) at perlbug@perl.org and 
1072 we'll try to straighten this all out.
1073 EOM
1074         exit 1
1075         ;;
1076 esac
1077
1078 : see if sh knows # comments
1079 if `$sh -c '#' >/dev/null 2>&1`; then
1080         shsharp=true
1081         spitshell=cat
1082         xcat=/bin/cat
1083         test -f $xcat || xcat=/usr/bin/cat
1084         echo "#!$xcat" >try
1085         $eunicefix try
1086         chmod +x try
1087         ./try > today
1088         if test -s today; then
1089                 sharpbang='#!'
1090         else
1091                 echo "#! $xcat" > try
1092                 $eunicefix try
1093                 chmod +x try
1094                 ./try > today
1095                 if test -s today; then
1096                         sharpbang='#! '
1097                 else
1098                         sharpbang=': use '
1099                 fi
1100         fi
1101 else
1102         echo " "
1103         echo "Your $sh doesn't grok # comments--I will strip them later on."
1104         shsharp=false
1105         cd ..
1106         echo "exec grep -v '^[  ]*#'" >spitshell
1107         chmod +x spitshell
1108         $eunicefix spitshell
1109         spitshell=`pwd`/spitshell
1110         cd UU
1111         echo "I presume that if # doesn't work, #! won't work either!"
1112         sharpbang=': use '
1113 fi
1114 rm -f try today
1115
1116 : figure out how to guarantee sh startup
1117 case "$startsh" in
1118 '') startsh=${sharpbang}${sh} ;;
1119 *)
1120 esac
1121 cat >try <<EOSS
1122 $startsh
1123 set abc
1124 test "$?abc" != 1
1125 EOSS
1126
1127 chmod +x try
1128 $eunicefix try
1129 if ./try; then
1130         : echo "Yup, it does."
1131 else
1132         echo "Hmm... '$startsh' does not guarantee sh startup..."
1133         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1134 fi
1135 rm -f try
1136
1137
1138 : Save command line options in file UU/cmdline.opt for later use in
1139 : generating config.sh.
1140 cat > cmdline.opt <<EOSH
1141 # Configure command line arguments.
1142 config_arg0='$0'
1143 config_args='$*'
1144 config_argc=$#
1145 EOSH
1146 argn=1
1147 for arg in "$@"; do
1148         cat >>cmdline.opt <<EOSH
1149 config_arg$argn='$arg'
1150 EOSH
1151         argn=`expr $argn + 1`
1152 done
1153
1154 : produce awk script to parse command line options
1155 cat >options.awk <<'EOF'
1156 BEGIN {
1157         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1158
1159         len = length(optstr);
1160         for (i = 1; i <= len; i++) {
1161                 c = substr(optstr, i, 1);
1162                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1163                 if (a == ":") {
1164                         arg[c] = 1;
1165                         i++;
1166                 }
1167                 opt[c] = 1;
1168         }
1169 }
1170 {
1171         expect = 0;
1172         str = $0;
1173         if (substr(str, 1, 1) != "-") {
1174                 printf("'%s'\n", str);
1175                 next;
1176         }
1177         len = length($0);
1178         for (i = 2; i <= len; i++) {
1179                 c = substr(str, i, 1);
1180                 if (!opt[c]) {
1181                         printf("-%s\n", substr(str, i));
1182                         next;
1183                 }
1184                 printf("-%s\n", c);
1185                 if (arg[c]) {
1186                         if (i < len)
1187                                 printf("'%s'\n", substr(str, i + 1));
1188                         else
1189                                 expect = 1;
1190                         next;
1191                 }
1192         }
1193 }
1194 END {
1195         if (expect)
1196                 print "?";
1197 }
1198 EOF
1199
1200 : process the command line options
1201 set X `for arg in "$@"; do echo "X$arg"; done |
1202         sed -e s/X// | awk -f options.awk`
1203 eval "set $*"
1204 shift
1205 rm -f options.awk
1206
1207 : set up default values
1208 fastread=''
1209 reuseval=false
1210 config_sh=''
1211 alldone=''
1212 error=''
1213 silent=''
1214 extractsh=''
1215 override=''
1216 knowitall=''
1217 rm -f optdef.sh posthint.sh
1218 cat >optdef.sh <<EOS
1219 $startsh
1220 EOS
1221
1222
1223 : option parsing
1224 while test $# -gt 0; do
1225         case "$1" in
1226         -d) shift; fastread=yes;;
1227         -e) shift; alldone=cont;;
1228         -f)
1229                 shift
1230                 cd ..
1231                 if test -r "$1"; then
1232                         config_sh="$1"
1233                 else
1234                         echo "$me: cannot read config file $1." >&2
1235                         error=true
1236                 fi
1237                 cd UU
1238                 shift;;
1239         -h) shift; error=true;;
1240         -r) shift; reuseval=true;;
1241         -s) shift; silent=true; realsilent=true;;
1242         -E) shift; alldone=exit;;
1243         -K) shift; knowitall=true;;
1244         -O) shift; override=true;;
1245         -S) shift; silent=true; extractsh=true;;
1246         -D)
1247                 shift
1248                 case "$1" in
1249                 *=)
1250                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1251                         echo "$me: ignoring -D $1" >&2
1252                         ;;
1253                 *=*) echo "$1" | \
1254                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1255                 *) echo "$1='define'" >> optdef.sh;;
1256                 esac
1257                 shift
1258                 ;;
1259         -U)
1260                 shift
1261                 case "$1" in
1262                 *=) echo "$1" >> optdef.sh;;
1263                 *=*)
1264                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1265                         echo "$me: ignoring -U $1" >&2
1266                         ;;
1267                 *) echo "$1='undef'" >> optdef.sh;;
1268                 esac
1269                 shift
1270                 ;;
1271         -A)
1272             shift
1273             xxx=''
1274             yyy="$1"
1275             zzz=''
1276             uuu=undef
1277             case "$yyy" in
1278             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1279                  case "$zzz" in
1280                  *:*) zzz='' ;;
1281                  *)   xxx=append
1282                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1283                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1284                  esac
1285                  ;;
1286             esac
1287             case "$xxx" in
1288             '')  case "$yyy" in
1289                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1290                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1291                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1292                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1293                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1294                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1295                  esac
1296                  ;;       
1297             esac
1298             case "$xxx" in
1299             append)
1300                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1301             clear)
1302                 echo "$yyy=''"                  >> posthint.sh ;;
1303             define)
1304                 case "$zzz" in
1305                 '') zzz=define ;;
1306                 esac
1307                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1308             eval)
1309                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1310             prepend)
1311                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1312             undef)
1313                 case "$zzz" in
1314                 '') zzz="$uuu" ;;
1315                 esac
1316                 echo "$yyy=$zzz"                >> posthint.sh ;;
1317             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1318             esac
1319             shift
1320             ;;
1321         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1322             exit 0;;
1323         --) break;;
1324         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1325         *) break;;
1326         esac
1327 done
1328
1329 case "$error" in
1330 true)
1331         cat >&2 <<EOM
1332 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1333                  [-U symbol] [-U symbol=] [-A command:symbol...]
1334   -d : use defaults for all answers.
1335   -e : go on without questioning past the production of config.sh.
1336   -f : specify an alternate default configuration file.
1337   -h : print this help message and exit (with an error status).
1338   -r : reuse C symbols value if possible (skips costly nm extraction).
1339   -s : silent mode, only echoes questions and essential information.
1340   -D : define symbol to have some value:
1341          -D symbol         symbol gets the value 'define'
1342          -D symbol=value   symbol gets the value 'value'
1343   -E : stop at the end of questions, after having produced config.sh.
1344   -K : do not use unless you know what you are doing.
1345   -O : let -D and -U override definitions from loaded configuration file.
1346   -S : perform variable substitutions on all .SH files (can mix with -f)
1347   -U : undefine symbol:
1348          -U symbol    symbol gets the value 'undef'
1349          -U symbol=   symbol gets completely empty
1350   -A : manipulate symbol after the platform specific hints have been applied:
1351          -A symbol=value                append " "value to symbol
1352          -A append:symbol=value         append value to symbol
1353          -A define:symbol=value         define symbol to have value
1354          -A clear:symbol                define symbol to be ''
1355          -A define:symbol               define symbol to be 'define'
1356          -A eval:symbol=value           define symbol to be eval of value
1357          -A prepend:symbol=value        prepend value to symbol
1358          -A undef:symbol                define symbol to be 'undef'
1359          -A undef:symbol=               define symbol to be ''
1360   -V : print version number and exit (with a zero status).
1361 EOM
1362         exit 1
1363         ;;
1364 esac
1365
1366 : Sanity checks
1367 case "$fastread$alldone" in
1368 yescont|yesexit) ;;
1369 *)
1370         case "$extractsh" in
1371         true) ;;
1372         *)
1373                 if test ! -t 0; then
1374                         echo "Say 'sh Configure', not 'sh <Configure'"
1375                         exit 1
1376                 fi
1377                 ;;
1378         esac
1379         ;;
1380 esac
1381
1382 exec 4>&1
1383 case "$silent" in
1384 true) exec 1>/dev/null;;
1385 esac
1386
1387 : run the defines and the undefines, if any, but leave the file out there...
1388 touch optdef.sh
1389 . ./optdef.sh
1390 : create the posthint manipulation script and leave the file out there...
1391 touch posthint.sh
1392
1393 : set package name
1394 package=perl5
1395 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1396 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1397 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1398 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1399 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1400 esac
1401
1402 : Some greps do not return status, grrr.
1403 echo "grimblepritz" >grimble
1404 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1405         contains=contains
1406 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1407         contains=grep
1408 else
1409         contains=contains
1410 fi
1411 rm -f grimble
1412 : the following should work in any shell
1413 case "$contains" in
1414 contains*)
1415         echo " "
1416         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1417         cat >contains <<'EOSS'
1418 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1419 EOSS
1420 chmod +x contains
1421 esac
1422
1423 : Find the path to the source tree
1424 case "$src" in
1425 '') case "$0" in
1426     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1427          case "$src" in
1428          /*)    ;;
1429          *)     src=`cd ../$src && pwd` ;;
1430          esac
1431          ;;
1432     *)   src='.';;
1433     esac;;
1434 esac
1435 case "$src" in
1436 '')     src=/
1437         rsrc=/
1438         ;;
1439 /*) rsrc="$src";;
1440 *) rsrc="../$src";;
1441 esac
1442 if test -f $rsrc/Configure && \
1443         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1444 then
1445    : found it, so we are ok.
1446 else
1447         rsrc=''
1448         for src in . .. ../.. ../../.. ../../../..; do
1449                 if test -f ../$src/Configure && \
1450                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1451                 then
1452                         rsrc=../$src
1453                         break
1454                 fi
1455         done
1456 fi
1457 case "$rsrc" in
1458 '')
1459         cat <<EOM >&4
1460
1461 Sorry, I can't seem to locate the source dir for $package.  Please start
1462 Configure with an explicit path -- i.e. /some/path/Configure.
1463
1464 EOM
1465         exit 1
1466         ;;
1467 ../.)   rsrc='..';;
1468 *)
1469         echo " "
1470         echo "Sources for $package found in \"$src\"." >&4
1471         ;;
1472 esac
1473
1474 : script used to extract .SH files with variable substitutions
1475 cat >extract <<'EOS'
1476 CONFIGDOTSH=true
1477 echo "Doing variable substitutions on .SH files..."
1478 if test -f $src/MANIFEST; then
1479         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1480 else
1481         echo "(Looking for .SH files under the source directory.)"
1482         set x `(cd $src; find . -name "*.SH" -print)`
1483 fi
1484 shift
1485 case $# in
1486 0) set x `(cd $src; echo *.SH)`; shift;;
1487 esac
1488 if test ! -f $src/$1; then
1489         shift
1490 fi
1491 mkdir_p='
1492 name=$1;
1493 create="";
1494 while test $name; do
1495         if test ! -d "$name"; then
1496                 create="$name $create";
1497                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1498                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1499         else
1500                 name="";
1501         fi;
1502 done;
1503 for file in $create; do
1504         mkdir $file;
1505 done
1506 '
1507 for file in $*; do
1508         case "$src" in
1509         ".")
1510                 case "$file" in
1511                 */*)
1512                         dir=`expr X$file : 'X\(.*\)/'`
1513                         file=`expr X$file : 'X.*/\(.*\)'`
1514                         (cd $dir && . ./$file)
1515                         ;;
1516                 *)
1517                         . ./$file
1518                         ;;
1519                 esac
1520                 ;;
1521         *)
1522                 case "$file" in
1523                 */*)
1524                         dir=`expr X$file : 'X\(.*\)/'`
1525                         file=`expr X$file : 'X.*/\(.*\)'`
1526                         (set x $dir; shift; eval $mkdir_p)
1527                         sh <$src/$dir/$file
1528                         ;;
1529                 *)
1530                         sh <$src/$file
1531                         ;;
1532                 esac
1533                 ;;
1534         esac
1535 done
1536 if test -f $src/config_h.SH; then
1537         if test ! -f config.h; then
1538         : oops, they left it out of MANIFEST, probably, so do it anyway.
1539         . $src/config_h.SH
1540         fi
1541 fi
1542 EOS
1543
1544 : extract files and exit if asked to do so
1545 case "$extractsh" in
1546 true)
1547         case "$realsilent" in
1548         true) ;;
1549         *) exec 1>&4;;
1550         esac
1551         case "$config_sh" in
1552         '') config_sh='config.sh';;
1553         esac
1554         echo " "
1555         echo "Fetching answers from $config_sh..."
1556         cd ..
1557         . $config_sh
1558         test "$override" && . ./optdef.sh
1559         echo " "
1560         . UU/extract
1561         rm -rf UU
1562         echo "Done."
1563         exit 0
1564         ;;
1565 esac
1566
1567 : Eunice requires " " instead of "", can you believe it
1568 echo " "
1569 : Here we go...
1570 echo "Beginning of configuration questions for $package."
1571
1572 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1573
1574 : first determine how to suppress newline on echo command
1575 echo " "
1576 echo "Checking echo to see how to suppress newlines..."
1577 (echo "hi there\c" ; echo " ") >.echotmp
1578 if $contains c .echotmp >/dev/null 2>&1 ; then
1579         echo "...using -n."
1580         n='-n'
1581         c=''
1582 else
1583         cat <<'EOM'
1584 ...using \c
1585 EOM
1586         n=''
1587         c='\c'
1588 fi
1589 echo $n "The star should be here-->$c"
1590 echo '*'
1591 rm -f .echotmp
1592
1593 : Now test for existence of everything in MANIFEST
1594 echo " "
1595 if test -f $rsrc/MANIFEST; then
1596         echo "First let's make sure your kit is complete.  Checking..." >&4
1597         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1598         rm -f missing
1599         tmppwd=`pwd`
1600         for filelist in x??; do
1601                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1602         done
1603         if test -s missing; then
1604                 cat missing >&4
1605                 cat >&4 <<'EOM'
1606
1607 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1608
1609 You have the option of continuing the configuration process, despite the
1610 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1611 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1612 and contact the author (perlbug@perl.org).
1613
1614 EOM
1615                 echo $n "Continue? [n] $c" >&4
1616                 read ans
1617                 case "$ans" in
1618                 y*)
1619                         echo "Continuing..." >&4
1620                         rm -f missing
1621                         ;;
1622                 *)
1623                         echo "ABORTING..." >&4
1624                         kill $$
1625                         ;;
1626                 esac
1627         else
1628                 echo "Looks good..."
1629         fi
1630 else
1631         echo "There is no MANIFEST file.  I hope your kit is complete !"
1632 fi
1633 rm -f missing x??
1634
1635 echo " "
1636 : Find the appropriate value for a newline for tr
1637 if test -n "$DJGPP"; then
1638        trnl='\012'
1639 fi
1640 if test X"$trnl" = X; then
1641         case "`echo foo|tr '\n' x 2>/dev/null`" in
1642         foox) trnl='\n' ;;
1643         esac
1644 fi
1645 if test X"$trnl" = X; then
1646         case "`echo foo|tr '\012' x 2>/dev/null`" in
1647         foox) trnl='\012' ;;
1648         esac
1649 fi
1650 if test X"$trnl" = X; then
1651         cat <<EOM >&2
1652
1653 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1654
1655 EOM
1656         exit 1
1657 fi
1658
1659 : compute the number of columns on the terminal for proper question formatting
1660 case "$COLUMNS" in
1661 '') COLUMNS='80';;
1662 esac
1663
1664 : set up the echo used in my read
1665 myecho="case \"\$xxxm\" in
1666 '') echo $n \"\$rp $c\" >&4;;
1667 *) case \"\$rp\" in
1668         '') echo $n \"[\$xxxm] $c\";;
1669         *)
1670                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1671                         echo \"\$rp\" >&4
1672                         echo $n \"[\$xxxm] $c\" >&4
1673                 else
1674                         echo $n \"\$rp [\$xxxm] $c\" >&4
1675                 fi
1676                 ;;
1677         esac;;
1678 esac"
1679
1680 : now set up to do reads with possible shell escape and default assignment
1681 cat <<EOSC >myread
1682 $startsh
1683 xxxm=\$dflt
1684 $myecho
1685 ans='!'
1686 case "\$fastread" in
1687 yes) case "\$dflt" in
1688         '') ;;
1689         *) ans='';
1690                 case "\$silent-\$rp" in
1691                 true-) ;;
1692                 *) echo " " >&4;;
1693                 esac;;
1694         esac;;
1695 *) case "\$silent" in
1696         true) case "\$rp" in
1697                 '') ans='';;
1698                 esac;;
1699         esac;;
1700 esac
1701 while expr "X\$ans" : "X!" >/dev/null; do
1702         read answ
1703         set x \$xxxm
1704         shift
1705         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1706         case  "\$answ" in
1707         "!")
1708                 sh 1>&4
1709                 echo " "
1710                 $myecho
1711                 ;;
1712         !*)
1713                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1714                 shift
1715                 sh 1>&4 -c "\$*"
1716                 echo " "
1717                 $myecho
1718                 ;;
1719         "\$ans")
1720                 case "\$ans" in
1721                 \\&*)
1722                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1723                         shift
1724                         case "\$1" in
1725                         -d)
1726                                 fastread=yes
1727                                 echo "(OK, I'll run with -d after this question.)" >&4
1728                                 ;;
1729                         -*)
1730                                 echo "*** Sorry, \$1 not supported yet." >&4
1731                                 ;;
1732                         esac
1733                         $myecho
1734                         ans=!
1735                         ;;
1736                 esac;;
1737         *)
1738                 case "\$aok" in
1739                 y)
1740                         echo "*** Substitution done -- please confirm."
1741                         xxxm="\$ans"
1742                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1743                         xxxm="\$ans"
1744                         ans=!
1745                         ;;
1746                 *)
1747                         echo "*** Error -- try again."
1748                         ans=!
1749                         ;;
1750                 esac
1751                 $myecho
1752                 ;;
1753         esac
1754         case "\$ans\$xxxm\$nostick" in
1755         '')
1756                 ans=!
1757                 $myecho
1758                 ;;
1759         esac
1760 done
1761 case "\$ans" in
1762 '') ans="\$xxxm";;
1763 esac
1764 EOSC
1765
1766 : create .config dir to save info across Configure sessions
1767 test -d ../.config || mkdir ../.config
1768 cat >../.config/README <<EOF
1769 This directory created by Configure to save information that should
1770 persist across sessions for $package.
1771
1772 You may safely delete it if you wish.
1773 EOF
1774
1775 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
1776 case "$usedevel" in
1777 $define|true|[yY]*) ;;
1778 *) case "$xversion" in
1779    *[13579])
1780         cat >&4 <<EOH
1781 *** WHOA THERE!!! ***
1782
1783     This is an UNSTABLE DEVELOPMENT release.
1784     The version of this $package distribution is $xversion, that is, odd,
1785     (as opposed to even) and that signifies a development release.
1786     If you want a maintenance release, you want an even-numbered version.
1787
1788     Do ***NOT*** install this into production use.
1789     Data corruption and crashes are possible.
1790
1791     It is most seriously suggested that you do not continue any further
1792     unless you want to help in developing and debugging Perl.
1793
1794 EOH
1795         rp='Do you really want to continue?'
1796         dflt='n'
1797         . ./myread
1798         case "$ans" in
1799         [yY]) echo >&4 "Okay, continuing." ;;
1800         *) echo >&4 "Okay, bye."
1801            exit 1
1802            ;;
1803         esac
1804         ;;
1805     esac
1806     ;;
1807 esac
1808
1809 : general instructions
1810 needman=true
1811 firsttime=true
1812 user=`(logname) 2>/dev/null`
1813 case "$user" in
1814 '') user=`whoami 2>&1`;;
1815 esac
1816 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1817         firsttime=false
1818         echo " "
1819         rp='Would you like to see the instructions?'
1820         dflt=n
1821         . ./myread
1822         case "$ans" in
1823         [yY]*) ;;
1824         *) needman=false;;
1825         esac
1826 fi
1827 if $needman; then
1828         cat <<EOH
1829
1830 This installation shell script will examine your system and ask you questions
1831 to determine how the perl5 package should be installed. If you get
1832 stuck on a question, you may use a ! shell escape to start a subshell or
1833 execute a command.  Many of the questions will have default answers in square
1834 brackets; typing carriage return will give you the default.
1835
1836 On some of the questions which ask for file or directory names you are allowed
1837 to use the ~name construct to specify the login directory belonging to "name",
1838 even if you don't have a shell which knows about that.  Questions where this is
1839 allowed will be marked "(~name ok)".
1840
1841 EOH
1842         rp=''
1843         dflt='Type carriage return to continue'
1844         . ./myread
1845         cat <<'EOH'
1846
1847 The prompter used in this script allows you to use shell variables and
1848 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1849 in the default answer, as if the default line was a set of arguments given to a
1850 script shell.  This means you may also use $* to repeat the whole default line,
1851 so you do not have to re-type everything to add something to the default.
1852
1853 Everytime there is a substitution, you will have to confirm.  If there is an
1854 error (e.g. an unmatched backtick), the default answer will remain unchanged
1855 and you will be prompted again.
1856
1857 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1858 the questions and use the computed defaults (or the previous answers if there
1859 was already a config.sh file). Type 'Configure -h' for a list of options.
1860 You may also start interactively and then answer '& -d' at any prompt to turn
1861 on the non-interactive behaviour for the remainder of the execution.
1862
1863 EOH
1864         . ./myread
1865         cat <<EOH
1866
1867 Much effort has been expended to ensure that this shell script will run on any
1868 Unix system.  If despite that it blows up on yours, your best bet is to edit
1869 Configure and run it again.  If you can't run Configure for some reason,
1870 you'll have to generate a config.sh file by hand.  Whatever problems you
1871 have, let me (perlbug@perl.org) know how I blew it.
1872
1873 This installation script affects things in two ways:
1874
1875 1) it may do direct variable substitutions on some of the files included
1876    in this kit.
1877 2) it builds a config.h file for inclusion in C programs.  You may edit
1878    any of these files as the need arises after running this script.
1879
1880 If you make a mistake on a question, there is no easy way to back up to it
1881 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1882 files.  Configure will offer to let you do this before it runs the SH files.
1883
1884 EOH
1885         dflt='Type carriage return to continue'
1886         . ./myread
1887         case "$firsttime" in
1888         true) echo $user >>../.config/instruct;;
1889         esac
1890 fi
1891
1892 : find out where common programs are
1893 echo " "
1894 echo "Locating common programs..." >&4
1895 cat <<EOSC >loc
1896 $startsh
1897 case \$# in
1898 0) exit 1;;
1899 esac
1900 thing=\$1
1901 shift
1902 dflt=\$1
1903 shift
1904 for dir in \$*; do
1905         case "\$thing" in
1906         .)
1907         if test -d \$dir/\$thing; then
1908                 echo \$dir
1909                 exit 0
1910         fi
1911         ;;
1912         *)
1913         for thisthing in \$dir/\$thing; do
1914                 : just loop through to pick last item
1915         done
1916         if test -f \$thisthing; then
1917                 echo \$thisthing
1918                 exit 0
1919         elif test -f \$dir/\$thing.exe; then
1920                 if test -n "$DJGPP"; then
1921                         echo \$dir/\$thing.exe
1922                 else
1923                         : on Eunice apparently
1924                         echo \$dir/\$thing
1925                 fi
1926                 exit 0
1927         fi
1928         ;;
1929         esac
1930 done
1931 echo \$dflt
1932 exit 1
1933 EOSC
1934 chmod +x loc
1935 $eunicefix loc
1936 loclist="
1937 awk
1938 cat
1939 comm
1940 cp
1941 echo
1942 expr
1943 grep
1944 ls
1945 make
1946 mkdir
1947 rm
1948 sed
1949 sort
1950 touch
1951 tr
1952 uniq
1953 "
1954 trylist="
1955 Mcc
1956 ar
1957 byacc
1958 cpp
1959 csh
1960 date
1961 egrep
1962 gzip
1963 less
1964 ln
1965 more
1966 nm
1967 nroff
1968 pg
1969 test
1970 uname
1971 zip
1972 "
1973 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1974 pth="$pth /lib /usr/lib"
1975 for file in $loclist; do
1976         eval xxx=\$$file
1977         case "$xxx" in
1978         /*|?:[\\/]*)
1979                 if test -f "$xxx"; then
1980                         : ok
1981                 else
1982                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1983                         xxx=`./loc $file $file $pth`
1984                 fi
1985                 ;;
1986         '') xxx=`./loc $file $file $pth`;;
1987         *) xxx=`./loc $xxx $xxx $pth`;;
1988         esac
1989         eval $file=$xxx
1990         eval _$file=$xxx
1991         case "$xxx" in
1992         /*)
1993                 echo $file is in $xxx.
1994                 ;;
1995         ?:[\\/]*)
1996                 echo $file is in $xxx.
1997                 ;;
1998         *)
1999                 echo "I don't know where '$file' is, and my life depends on it." >&4
2000                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2001                 exit 1
2002                 ;;
2003         esac
2004 done
2005 echo " "
2006 echo "Don't worry if any of the following aren't found..."
2007 say=offhand
2008 for file in $trylist; do
2009         eval xxx=\$$file
2010         case "$xxx" in
2011         /*|?:[\\/]*)
2012                 if test -f "$xxx"; then
2013                         : ok
2014                 else
2015                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2016                         xxx=`./loc $file $file $pth`
2017                 fi
2018                 ;;
2019         '') xxx=`./loc $file $file $pth`;;
2020         *) xxx=`./loc $xxx $xxx $pth`;;
2021         esac
2022         eval $file=$xxx
2023         eval _$file=$xxx
2024         case "$xxx" in
2025         /*)
2026                 echo $file is in $xxx.
2027                 ;;
2028         ?:[\\/]*)
2029                 echo $file is in $xxx.
2030                 ;;
2031         *)
2032                 echo "I don't see $file out there, $say."
2033                 say=either
2034                 ;;
2035         esac
2036 done
2037 case "$egrep" in
2038 egrep)
2039         echo "Substituting grep for egrep."
2040         egrep=$grep
2041         ;;
2042 esac
2043 case "$ln" in
2044 ln)
2045         echo "Substituting cp for ln."
2046         ln=$cp
2047         ;;
2048 esac
2049 case "$test" in
2050 test)
2051         echo "Hopefully test is built into your sh."
2052         ;;
2053 *)
2054         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2055                 echo "Using the test built into your sh."
2056                 test=test
2057                 _test=test
2058         fi
2059         ;;
2060 esac
2061 case "$echo" in
2062 echo)
2063         echo "Hopefully echo is built into your sh."
2064         ;;
2065 '') ;;
2066 *)
2067         echo " "
2068 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2069         $echo $n "hi there$c" >foo1
2070         echo $n "hi there$c" >foo2
2071         if cmp foo1 foo2 >/dev/null 2>&1; then
2072                 echo "They are compatible.  In fact, they may be identical."
2073         else
2074                 case "$n" in
2075                 '-n') n='' c='\c';;
2076                 *) n='-n' c='';;
2077                 esac
2078                 cat <<FOO
2079 They are not compatible!  You are probably running ksh on a non-USG system.
2080 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2081 have echo built in and we may have to run some Bourne shell scripts.  That
2082 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2083
2084 FOO
2085                 $echo $n "The star should be here-->$c"
2086                 $echo "*"
2087         fi
2088         $rm -f foo1 foo2
2089         ;;
2090 esac
2091
2092 cat <<EOS >checkcc
2093 $startsh
2094 EOS
2095 cat <<'EOSC' >>checkcc
2096 case "$cc" in
2097 '') ;;
2098 *)  $rm -f try try.*
2099     $cat >try.c <<EOM
2100 int main(int argc, char *argv[]) {
2101   return 0;
2102 }
2103 EOM
2104     if $cc -o try $ccflags try.c; then
2105        :
2106     else
2107         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2108         despair=yes
2109         trygcc=yes
2110         case "$cc" in
2111         *gcc*) trygcc=no ;;
2112         esac
2113         case "`$cc -v -c try.c 2>&1`" in
2114         *gcc*) trygcc=no ;;
2115         esac
2116         if $test X"$trygcc" = Xyes; then
2117             if gcc -o try -c try.c; then
2118                 echo " "
2119                 echo "You seem to have a working gcc, though." >&4
2120                 rp="Would you like to use it?"
2121                 dflt=y
2122                 if $test -f myread; then
2123                     . ./myread
2124                 else
2125                     if $test -f UU/myread; then
2126                         . ./UU/myread
2127                     else
2128                         echo "Cannot find myread, sorry.  Aborting." >&2
2129                         exit 1
2130                     fi
2131                 fi  
2132                 case "$ans" in
2133                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2134                 esac
2135             fi
2136         fi
2137         if $test X"$despair" = Xyes; then
2138             $cat >&4 <<EOM
2139 You need to find a working C compiler.
2140 Either (purchase and) install the C compiler supplied by your OS vendor,
2141 or for a free C compiler try http://gcc.gnu.org/
2142 I cannot continue any further, aborting.
2143 EOM
2144             exit 1
2145         fi
2146     fi
2147     $rm -f try try.*
2148     ;;
2149 esac
2150 EOSC
2151
2152 : determine whether symbolic links are supported
2153 echo " "
2154 $touch blurfl
2155 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2156         echo "Symbolic links are supported." >&4
2157         lns="$ln -s"
2158 else
2159         echo "Symbolic links are NOT supported." >&4
2160         lns="$ln"
2161 fi
2162 $rm -f blurfl sym
2163
2164 : see whether [:lower:] and [:upper:] are supported character classes
2165 echo " "
2166 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2167 ABYZ)
2168         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2169         up='[:upper:]'
2170         low='[:lower:]'
2171         ;;
2172 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2173         # (0xc9 and 0xd1), therefore that is a nice testing point.
2174         if test "X$up" = X -o "X$low" = X; then
2175             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2176             ij) up='[A-Z]'
2177                 low='[a-z]'
2178                 ;;
2179             esac
2180         fi
2181         if test "X$up" = X -o "X$low" = X; then
2182             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2183             ij) up='A-Z'
2184                 low='a-z'
2185                 ;;
2186             esac
2187         fi
2188         if test "X$up" = X -o "X$low" = X; then
2189             case "`echo IJ | od -x 2>/dev/null`" in
2190             *C9D1*|*c9d1*)
2191                 echo "Hey, this might be EBCDIC." >&4
2192                 if test "X$up" = X -o "X$low" = X; then
2193                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2194                     ij) up='[A-IJ-RS-Z]'
2195                         low='[a-ij-rs-z]'
2196                         ;;
2197                     esac
2198                 fi
2199                 if test "X$up" = X -o "X$low" = X; then
2200                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2201                     ij) up='A-IJ-RS-Z'
2202                         low='a-ij-rs-z'
2203                         ;;
2204                     esac
2205                 fi
2206                 ;;
2207             esac
2208         fi
2209 esac
2210 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2211 ij)
2212     echo "Using $up and $low to convert case." >&4
2213     ;;
2214 *)
2215     echo "I don't know how to translate letters from upper to lower case." >&4
2216     echo "Your tr is not acting any way I know of." >&4
2217     exit 1
2218     ;;
2219 esac
2220 : set up the translation script tr, must be called with ./tr of course
2221 cat >tr <<EOSC
2222 $startsh
2223 case "\$1\$2" in
2224 '[A-Z][a-z]') exec $tr '$up' '$low';;
2225 '[a-z][A-Z]') exec $tr '$low' '$up';;
2226 esac
2227 exec $tr "\$@"
2228 EOSC
2229 chmod +x tr
2230 $eunicefix tr
2231
2232 : Try to determine whether config.sh was made on this system
2233 case "$config_sh" in
2234 '')
2235 myuname=`$uname -a 2>/dev/null`
2236 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2237 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2238 # because the A-Z/a-z are not consecutive.
2239 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2240         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2241 newmyuname="$myuname"
2242 dflt=n
2243 case "$knowitall" in
2244 '')
2245         if test -f ../config.sh; then
2246                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2247                         eval "`grep myuname= ../config.sh`"
2248                 fi
2249                 if test "X$myuname" = "X$newmyuname"; then
2250                         dflt=y
2251                 fi
2252         fi
2253         ;;
2254 *) dflt=y;;
2255 esac
2256
2257 : Get old answers from old config file if Configure was run on the
2258 : same system, otherwise use the hints.
2259 hint=default
2260 cd ..
2261 if test -f config.sh; then
2262         echo " "
2263         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2264         . UU/myread
2265         case "$ans" in
2266         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2267         *)  echo "Fetching default answers from your old config.sh file..." >&4
2268                 tmp_n="$n"
2269                 tmp_c="$c"
2270                 tmp_sh="$sh"
2271                 . ./config.sh
2272                 cp config.sh UU
2273                 n="$tmp_n"
2274                 c="$tmp_c"
2275                 : Older versions did not always set $sh.  Catch re-use of such
2276                 : an old config.sh.
2277                 case "$sh" in
2278                 '') sh="$tmp_sh" ;;
2279                 esac
2280                 hint=previous
2281                 ;;
2282         esac
2283 fi
2284 . ./UU/checkcc
2285 if test ! -f config.sh; then
2286         $cat <<EOM
2287
2288 First time through, eh?  I have some defaults handy for some systems
2289 that need some extra help getting the Configure answers right:
2290
2291 EOM
2292         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2293         dflt=''
2294         : Half the following guesses are probably wrong... If you have better
2295         : tests or hints, please send them to perlbug@perl.org
2296         : The metaconfig authors would also appreciate a copy...
2297         $test -f /irix && osname=irix
2298         $test -f /xenix && osname=sco_xenix
2299         $test -f /dynix && osname=dynix
2300         $test -f /dnix && osname=dnix
2301         $test -f /lynx.os && osname=lynxos
2302         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2303         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2304         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2305         $test -f /bin/mips && /bin/mips && osname=mips
2306         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2307                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2308         $test -d /usr/apollo/bin && osname=apollo
2309         $test -f /etc/saf/_sactab && osname=svr4
2310         $test -d /usr/include/minix && osname=minix
2311         if $test -d /MachTen -o -d /MachTen_Folder; then
2312                 osname=machten
2313                 if $test -x /sbin/version; then
2314                         osvers=`/sbin/version | $awk '{print $2}' |
2315                         $sed -e 's/[A-Za-z]$//'`
2316                 elif $test -x /usr/etc/version; then
2317                         osvers=`/usr/etc/version | $awk '{print $2}' |
2318                         $sed -e 's/[A-Za-z]$//'`
2319                 else
2320                         osvers="$2.$3"
2321                 fi
2322         fi
2323
2324         $test -f /sys/posix.dll &&
2325                 $test -f /usr/bin/what &&
2326                 set X `/usr/bin/what /sys/posix.dll` &&
2327                 $test "$3" = UWIN &&
2328                 osname=uwin &&
2329                 osvers="$5"
2330
2331         if $test -f $uname; then
2332                 set X $myuname
2333                 shift
2334
2335                 case "$5" in
2336                 fps*) osname=fps ;;
2337                 mips*)
2338                         case "$4" in
2339                         umips) osname=umips ;;
2340                         *) osname=mips ;;
2341                         esac;;
2342                 [23]100) osname=mips ;;
2343                 next*) osname=next ;;
2344                 i386*)
2345                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2346                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2347                                 osname='sco'
2348                                 osvers=$tmp
2349                         elif $test -f /etc/kconfig; then
2350                                 osname=isc
2351                                 if test "$lns" = "$ln -s"; then
2352                                         osvers=4
2353                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2354                                         osvers=3
2355                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2356                                         osvers=2
2357                                 fi
2358                         fi
2359                         tmp=''
2360                         ;;
2361                 pc*)
2362                         if test -n "$DJGPP"; then
2363                                 osname=dos
2364                                 osvers=djgpp
2365                         fi
2366                         ;;
2367                 esac
2368
2369                 case "$1" in
2370                 aix) osname=aix
2371                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2372                         case "$tmp" in
2373                         'not found') osvers="$4"."$3" ;;
2374                         '<3240'|'<>3240') osvers=3.2.0 ;;
2375                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2376                         '=3250'|'>3250') osvers=3.2.5 ;;
2377                         *) osvers=$tmp;;
2378                         esac
2379                         ;;
2380                 bsd386) osname=bsd386
2381                         osvers=`$uname -r`
2382                         ;;
2383                 cygwin*) osname=cygwin
2384                         osvers="$3"
2385                         ;;
2386                 *dc.osx) osname=dcosx
2387                         osvers="$3"
2388                         ;;
2389                 dnix) osname=dnix
2390                         osvers="$3"
2391                         ;;
2392                 domainos) osname=apollo
2393                         osvers="$3"
2394                         ;;
2395                 dgux) osname=dgux 
2396                         osvers="$3"
2397                         ;;
2398                 dynixptx*) osname=dynixptx
2399                         osvers=`echo "$4"|sed 's/^v//'`
2400                         ;;
2401                 freebsd) osname=freebsd 
2402                         osvers="$3" ;;
2403                 genix) osname=genix ;;
2404                 hp*) osname=hpux 
2405                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2406                         ;;
2407                 irix*) osname=irix
2408                         case "$3" in
2409                         4*) osvers=4 ;;
2410                         5*) osvers=5 ;;
2411                         *)      osvers="$3" ;;
2412                         esac
2413                         ;;
2414                 linux) osname=linux
2415                         case "$3" in
2416                         *)      osvers="$3" ;;
2417                         esac
2418                         ;;
2419                 MiNT) osname=mint
2420                         ;;
2421                 netbsd*) osname=netbsd
2422                         osvers="$3"
2423                         ;;
2424                 news-os) osvers="$3"
2425                         case "$3" in
2426                         4*) osname=newsos4 ;;
2427                         *) osname=newsos ;;
2428                         esac
2429                         ;;
2430                 next*) osname=next ;;
2431                 NonStop-UX) osname=nonstopux ;;
2432                 POSIX-BC | posix-bc ) osname=posix-bc
2433                         osvers="$3"
2434                         ;;
2435                 powerux | power_ux | powermax_os | powermaxos | \
2436                 powerunix | power_unix) osname=powerux
2437                         osvers="$3"
2438                         ;;
2439                 qnx) osname=qnx
2440                         osvers="$4"
2441                         ;;
2442                 solaris) osname=solaris
2443                         case "$3" in
2444                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2445                         *)      osvers="$3" ;;
2446                         esac
2447                         ;;
2448                 sunos) osname=sunos
2449                         case "$3" in
2450                         5*) osname=solaris
2451                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2452                         *)      osvers="$3" ;;
2453                         esac
2454                         ;;
2455                 titanos) osname=titanos
2456                         case "$3" in
2457                         1*) osvers=1 ;;
2458                         2*) osvers=2 ;;
2459                         3*) osvers=3 ;;
2460                         4*) osvers=4 ;;
2461                         *)      osvers="$3" ;;
2462                         esac
2463                         ;;
2464                 ultrix) osname=ultrix
2465                         osvers="$3"
2466                         ;;
2467                 osf1|mls+)      case "$5" in
2468                                 alpha)
2469                                         osname=dec_osf
2470                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
2471                                         case "$osvers" in
2472                                         [1-9].[0-9]*) ;;
2473                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
2474                                         esac
2475                                         ;;
2476                         hp*)    osname=hp_osf1  ;;
2477                         mips)   osname=mips_osf1 ;;
2478                         esac
2479                         ;;
2480                 unixware) osname=svr5
2481                         osvers="$4"
2482                         ;;
2483                 uts) osname=uts
2484                         osvers="$3"
2485                         ;;
2486                 $2) case "$osname" in
2487                         *isc*) ;;
2488                         *freebsd*) ;;
2489                         svr*)
2490                                 : svr4.x or possibly later
2491                                 case "svr$3" in 
2492                                 ${osname}*)
2493                                         osname=svr$3
2494                                         osvers=$4
2495                                         ;;
2496                                 esac
2497                                 case "$osname" in
2498                                 svr4.0)
2499                                         : Check for ESIX
2500                                         if test -f /stand/boot ; then
2501                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2502                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2503                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2504                                                         if test -n "$isesix"; then
2505                                                                 osname=esix4
2506                                                         fi
2507                                                 fi
2508                                         fi
2509                                         ;;
2510                                 esac
2511                                 ;;
2512                         *)      if test -f /etc/systemid; then
2513                                         osname=sco
2514                                         set `echo $3 | $sed 's/\./ /g'` $4
2515                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2516                                                 osvers=$1.$2.$3
2517                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2518                                                 osvers=$1.$2
2519                                         elif $test -f $src/hints/sco_$1.sh; then
2520                                                 osvers=$1
2521                                         fi
2522                                 else
2523                                         case "$osname" in
2524                                         '') : Still unknown.  Probably a generic Sys V.
2525                                                 osname="sysv"
2526                                                 osvers="$3"
2527                                                 ;;
2528                                         esac
2529                                 fi
2530                                 ;;
2531                         esac
2532                         ;;
2533                 *)      case "$osname" in
2534                         '') : Still unknown.  Probably a generic BSD.
2535                                 osname="$1"
2536                                 osvers="$3"
2537                                 ;;
2538                         esac
2539                         ;;
2540                 esac
2541         else
2542                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2543                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2544                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2545                                 osname=news_os
2546                         fi
2547                         $rm -f UU/kernel.what
2548                 elif test -d c:/.; then
2549                         set X $myuname
2550                         osname=os2
2551                         osvers="$5"
2552                 fi
2553         fi
2554         
2555         : Now look for a hint file osname_osvers, unless one has been
2556         : specified already.
2557         case "$hintfile" in
2558         ''|' ')
2559                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
2560                 : Also try without trailing minor version numbers.
2561                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
2562                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
2563                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
2564                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
2565                 case "$file" in
2566                 '') dflt=none ;;
2567                 *)  case "$osvers" in
2568                         '') dflt=$file
2569                                 ;;
2570                         *)  if $test -f $src/hints/$file.sh ; then
2571                                         dflt=$file
2572                                 elif $test -f $src/hints/$xfile.sh ; then
2573                                         dflt=$xfile
2574                                 elif $test -f $src/hints/$xxfile.sh ; then
2575                                         dflt=$xxfile
2576                                 elif $test -f $src/hints/$xxxfile.sh ; then
2577                                         dflt=$xxxfile
2578                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2579                                         dflt=$xxxxfile
2580                                 elif $test -f "$src/hints/${osname}.sh" ; then
2581                                         dflt="${osname}"
2582                                 else
2583                                         dflt=none
2584                                 fi
2585                                 ;;
2586                         esac
2587                         ;;
2588                 esac
2589                 if $test -f Policy.sh ; then
2590                         case "$dflt" in
2591                         *Policy*) ;;
2592                         none) dflt="Policy" ;;
2593                         *) dflt="Policy $dflt" ;;
2594                         esac
2595                 fi
2596                 ;;
2597         *)
2598                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2599                 ;;
2600         esac
2601
2602         if $test -f Policy.sh ; then
2603                 $cat <<EOM
2604
2605 There's also a Policy hint file available, which should make the
2606 site-specific (policy) questions easier to answer.
2607 EOM
2608
2609         fi
2610
2611         $cat <<EOM
2612
2613 You may give one or more space-separated answers, or "none" if appropriate.
2614 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2615 is a good thing.  DO NOT give a wrong version or a wrong OS.
2616
2617 EOM
2618
2619         rp="Which of these apply, if any?"
2620         . UU/myread
2621         tans=$ans
2622         for file in $tans; do
2623                 if $test X$file = XPolicy -a -f Policy.sh; then
2624                         . Policy.sh
2625                         $cat Policy.sh >> UU/config.sh
2626                 elif $test -f $src/hints/$file.sh; then
2627                         . $src/hints/$file.sh
2628                         $cat $src/hints/$file.sh >> UU/config.sh
2629                 elif $test X$tans = X -o X$tans = Xnone ; then
2630                         : nothing
2631                 else
2632                         : Give one chance to correct a possible typo.
2633                         echo "$file.sh does not exist"
2634                         dflt=$file
2635                         rp="hint to use instead?"
2636                         . UU/myread
2637                         for file in $ans; do
2638                                 if $test -f "$src/hints/$file.sh"; then
2639                                         . $src/hints/$file.sh
2640                                         $cat $src/hints/$file.sh >> UU/config.sh
2641                                 elif $test X$ans = X -o X$ans = Xnone ; then
2642                                         : nothing
2643                                 else
2644                                         echo "$file.sh does not exist -- ignored."
2645                                 fi
2646                         done
2647                 fi
2648         done
2649
2650         hint=recommended
2651         : Remember our hint file for later.
2652         if $test -f "$src/hints/$file.sh" ; then
2653                 hintfile="$file"
2654         else
2655                 hintfile=''
2656         fi
2657 fi
2658 cd UU
2659 ;;
2660 *)
2661         echo " "
2662         echo "Fetching default answers from $config_sh..." >&4
2663         tmp_n="$n"
2664         tmp_c="$c"
2665         cd ..
2666         cp $config_sh config.sh 2>/dev/null
2667         chmod +w config.sh
2668         . ./config.sh
2669         cd UU
2670         cp ../config.sh .
2671         n="$tmp_n"
2672         c="$tmp_c"
2673         hint=previous
2674         ;;
2675 esac
2676 test "$override" && . ./optdef.sh
2677 myuname="$newmyuname"
2678
2679 : Restore computed paths
2680 for file in $loclist $trylist; do
2681         eval $file="\$_$file"
2682 done
2683
2684 cat << EOM
2685
2686 Configure uses the operating system name and version to set some defaults.
2687 The default value is probably right if the name rings a bell. Otherwise,
2688 since spelling matters for me, either accept the default or answer "none"
2689 to leave it blank.
2690
2691 EOM
2692 case "$osname" in
2693         ''|' ')
2694                 case "$hintfile" in
2695                 ''|' '|none) dflt=none ;;
2696                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2697                 esac
2698                 ;;
2699         *) dflt="$osname" ;;
2700 esac
2701 rp="Operating system name?"
2702 . ./myread
2703 case "$ans" in
2704 none)  osname='' ;;
2705 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2706 esac
2707 echo " "
2708 case "$osvers" in
2709         ''|' ')
2710                 case "$hintfile" in
2711                 ''|' '|none) dflt=none ;;
2712                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2713                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2714                         case "$dflt" in
2715                         ''|' ') dflt=none ;;
2716                         esac
2717                         ;;
2718                 esac
2719                 ;;
2720         *) dflt="$osvers" ;;
2721 esac
2722 rp="Operating system version?"
2723 . ./myread
2724 case "$ans" in
2725 none)  osvers='' ;;
2726 *) osvers="$ans" ;;
2727 esac
2728
2729
2730 . ./posthint.sh
2731
2732 : who configured the system
2733 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2734 cf_by=`(logname) 2>/dev/null`
2735 case "$cf_by" in
2736 "")
2737         cf_by=`(whoami) 2>/dev/null`
2738         case "$cf_by" in
2739         "") cf_by=unknown ;;
2740         esac ;;
2741 esac
2742
2743 : set up the script used to warn in case of inconsistency
2744 cat <<EOS >whoa
2745 $startsh
2746 EOS
2747 cat <<'EOSC' >>whoa
2748 dflt=y
2749 echo " "
2750 echo "*** WHOA THERE!!! ***" >&4
2751 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2752 rp="    Keep the $hint value?"
2753 . ./myread
2754 case "$ans" in
2755 y) td=$was; tu=$was;;
2756 esac
2757 EOSC
2758
2759 : function used to set $1 to $val
2760 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2761 case "$val$was" in
2762 $define$undef) . ./whoa; eval "$var=\$td";;
2763 $undef$define) . ./whoa; eval "$var=\$tu";;
2764 *) eval "$var=$val";;
2765 esac'
2766
2767 case "$usethreads" in
2768 $define|true|[yY]*)     dflt='y';;
2769 *) dflt='n';;
2770 esac
2771 cat <<EOM
2772
2773 Perl can be built to take advantage of threads on some systems.
2774 To do so, Configure can be run with -Dusethreads.
2775
2776 Note that threading is a highly experimental feature, and
2777 some known race conditions still remain.  If you choose to try
2778 it, be very sure to not actually deploy it for production
2779 purposes.  README.threads has more details, and is required
2780 reading if you enable threads.
2781
2782 If this doesn't make any sense to you, just accept the default '$dflt'.
2783 EOM
2784 rp='Build a threading Perl?'
2785 . ./myread
2786 case "$ans" in
2787 y|Y)    val="$define" ;;
2788 *)      val="$undef" ;;
2789 esac
2790 set usethreads
2791 eval $setvar
2792
2793 case "$usethreads" in
2794 $define)
2795         $cat <<EOM
2796
2797 As of 5.5.640, Perl has two different internal threading implementations,
2798 the 5.005 version (5005threads) and an interpreter-based version
2799 (ithreads) that has one interpreter per thread.  Both are very 
2800 experimental.  This arrangement exists to help developers work out
2801 which one is better.
2802
2803 If you're a casual user, you probably don't want interpreter-threads
2804 at this time.  There doesn't yet exist a way to create threads from
2805 within Perl in this model, i.e., "use Thread;" will NOT work.
2806 EOM
2807         : Default to ithreads unless overridden on command line or with
2808         : old config.sh
2809         dflt='y'
2810         case "$use5005threads" in
2811                 $define|true|[yY]*) dflt='n';;
2812         esac
2813         case "$useithreads" in
2814                 $undef|false|[nN]*) dflt='n';;
2815         esac
2816         rp='Use interpreter-based ithreads?'
2817         . ./myread
2818         case "$ans" in
2819         y|Y)    val="$define" ;;
2820         *)      val="$undef" ;;
2821         esac
2822         set useithreads
2823         eval $setvar
2824         : Now set use5005threads to the opposite value.
2825         case "$useithreads" in
2826         $define) val="$undef" ;;
2827         *) val="$define" ;;
2828         esac
2829         set use5005threads
2830         eval $setvar
2831         ;;
2832 *)
2833         useithreads="$undef"
2834         use5005threads="$undef"
2835         ;;
2836 esac
2837
2838 case "$d_oldpthreads" in
2839 '')     : Configure tests would be welcome here.  For now, assume undef.
2840         val="$undef" ;;
2841 *)      val="$d_oldpthreads" ;;
2842 esac
2843 set d_oldpthreads
2844 eval $setvar
2845
2846
2847 case "$usethreads" in
2848 "$define"|true|[yY]*)
2849 : Look for a hint-file generated 'call-back-unit'.  If the
2850 : user has specified that a threading perl is to be built,
2851 : we may need to set or change some other defaults.
2852         if $test -f usethreads.cbu; then
2853                 echo "Your platform has some specific hints for threaded builds, using them..."
2854                 . ./usethreads.cbu
2855         else
2856                 $cat <<EOM
2857 (Your platform doesn't have any specific hints for threaded builds.
2858  Assuming POSIX threads, then.)
2859 EOM
2860         fi
2861         ;;
2862 esac
2863
2864 cat <<EOM
2865
2866 Perl can be built so that multiple Perl interpreters can coexist
2867 within the same Perl executable.
2868 EOM
2869
2870 case "$useithreads" in
2871 $define)
2872         cat <<EOM
2873 This multiple interpreter support is required for interpreter-based threads.
2874 EOM
2875         val="$define"
2876         ;;
2877 *)      case "$usemultiplicity" in
2878         $define|true|[yY]*)     dflt='y';;
2879         *) dflt='n';;
2880         esac
2881         echo " "
2882         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
2883         rp='Build Perl for multiplicity?'
2884         . ./myread
2885         case "$ans" in
2886         y|Y)    val="$define" ;;
2887         *)      val="$undef" ;;
2888         esac
2889         ;;
2890 esac
2891 set usemultiplicity
2892 eval $setvar
2893
2894 : make some quick guesses about what we are up against
2895 echo " "
2896 $echo $n "Hmm...  $c"
2897 echo exit 1 >bsd
2898 echo exit 1 >usg
2899 echo exit 1 >v7
2900 echo exit 1 >osf1
2901 echo exit 1 >eunice
2902 echo exit 1 >xenix
2903 echo exit 1 >venix
2904 echo exit 1 >os2
2905 d_bsd="$undef"
2906 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
2907 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
2908 then
2909         echo "Looks kind of like an OSF/1 system, but we'll see..."
2910         echo exit 0 >osf1
2911 elif test `echo abc | $tr a-z A-Z` = Abc ; then
2912         xxx=`./loc addbib blurfl $pth`
2913         if $test -f $xxx; then
2914         echo "Looks kind of like a USG system with BSD features, but we'll see..."
2915                 echo exit 0 >bsd
2916                 echo exit 0 >usg
2917         else
2918                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
2919                         echo "Looks kind of like an extended USG system, but we'll see..."
2920                 else
2921                         echo "Looks kind of like a USG system, but we'll see..."
2922                 fi
2923                 echo exit 0 >usg
2924         fi
2925 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
2926         echo "Looks kind of like a BSD system, but we'll see..."
2927         d_bsd="$define"
2928         echo exit 0 >bsd
2929 else
2930         echo "Looks kind of like a Version 7 system, but we'll see..."
2931         echo exit 0 >v7
2932 fi
2933 case "$eunicefix" in
2934 *unixtovms*)
2935         $cat <<'EOI'
2936 There is, however, a strange, musty smell in the air that reminds me of
2937 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
2938 EOI
2939         echo exit 0 >eunice
2940         d_eunice="$define"
2941 : it so happens the Eunice I know will not run shell scripts in Unix format
2942         ;;
2943 *)
2944         echo " "
2945         echo "Congratulations.  You aren't running Eunice."
2946         d_eunice="$undef"
2947         ;;
2948 esac
2949 : Detect OS2.  The p_ variable is set above in the Head.U unit.
2950 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
2951 : semicolon as a patch separator
2952 case "$p_" in
2953 :) ;;
2954 *)
2955         $cat <<'EOI'
2956 I have the feeling something is not exactly right, however...don't tell me...
2957 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
2958 (Or you may be running DOS with DJGPP.)
2959 EOI
2960         echo exit 0 >os2
2961         ;;
2962 esac
2963 if test -f /xenix; then
2964         echo "Actually, this looks more like a XENIX system..."
2965         echo exit 0 >xenix
2966         d_xenix="$define"
2967 else
2968         echo " "
2969         echo "It's not Xenix..."
2970         d_xenix="$undef"
2971 fi
2972 chmod +x xenix
2973 $eunicefix xenix
2974 if test -f /venix; then
2975         echo "Actually, this looks more like a VENIX system..."
2976         echo exit 0 >venix
2977 else
2978         echo " "
2979         if ./xenix; then
2980                 : null
2981         else
2982                 echo "Nor is it Venix..."
2983         fi
2984 fi
2985 chmod +x bsd usg v7 osf1 eunice xenix venix os2
2986 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
2987 $rm -f foo
2988
2989 case "$cc" in
2990 '') dflt=cc;;
2991 *) dflt="$cc";;
2992 esac
2993 rp="Use which C compiler?"
2994 . ./myread
2995 cc="$ans"
2996 : Look for a hint-file generated 'call-back-unit'.  Now that the
2997 : user has specified the compiler, we may need to set or change some
2998 : other defaults.
2999 if $test -f cc.cbu; then
3000     . ./cc.cbu
3001 fi
3002 . ./checkcc
3003
3004 echo " "
3005 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3006 $cat >gccvers.c <<EOM
3007 #include <stdio.h>
3008 int main() {
3009 #ifdef __GNUC__
3010 #ifdef __VERSION__
3011         printf("%s\n", __VERSION__);
3012 #else
3013         printf("%s\n", "1");
3014 #endif
3015 #endif
3016         exit(0);
3017 }
3018 EOM
3019 if $cc -o gccvers $ldflags gccvers.c; then
3020         gccversion=`./gccvers`
3021         case "$gccversion" in
3022         '') echo "You are not using GNU cc." ;;
3023         *)  echo "You are using GNU cc $gccversion."
3024             ccname=gcc  
3025             ;;
3026         esac
3027 else
3028         echo " "
3029         echo "*** WHOA THERE!!! ***" >&4
3030         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3031         case "$knowitall" in
3032         '')
3033         echo "    You'd better start hunting for one and let me know about it." >&4
3034                 exit 1
3035                 ;;
3036         esac
3037 fi
3038 $rm -f gccvers*
3039 case "$gccversion" in
3040 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3041 esac
3042 case "$gccversion" in
3043 '') gccosandvers='' ;;
3044 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3045    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3046    gccshortvers=''
3047    case "$gccosandvers" in
3048    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3049    $osname$osvers) ;; # looking good
3050    $osname*) cat <<EOM >&4
3051
3052 *** WHOA THERE!!! ***
3053
3054     Your gcc has not been compiled for the exact release of
3055     your operating system ($gccosandvers versus $osname$osvers).
3056
3057     In general it is a good idea to keep gcc synchronized with
3058     the operating system because otherwise serious problems
3059     may ensue when trying to compile software, like Perl.
3060
3061     I'm trying to be optimistic here, though, and will continue.
3062     If later during the configuration and build icky compilation
3063     problems appear (headerfile conflicts being the most common
3064     manifestation), I suggest reinstalling the gcc to match
3065     your operating system release.
3066
3067 EOM
3068       ;;
3069    *) gccosandvers='' ;; # failed to parse, better be silent
3070    esac
3071    ;;
3072 esac
3073 case "$ccname" in
3074 '') ccname="$cc" ;;
3075 esac
3076
3077 : see how we invoke the C preprocessor
3078 echo " "
3079 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3080 cat <<'EOT' >testcpp.c
3081 #define ABC abc
3082 #define XYZ xyz
3083 ABC.XYZ
3084 EOT
3085 cd ..
3086 if test ! -f cppstdin; then
3087         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3088                 # AIX cc -E doesn't show the absolute headerfile
3089                 # locations but we'll cheat by using the -M flag.
3090                 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
3091         else
3092                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3093         fi
3094 else
3095         echo "Keeping your $hint cppstdin wrapper."
3096 fi
3097 chmod 755 cppstdin
3098 wrapper=`pwd`/cppstdin
3099 ok='false'
3100 cd UU
3101
3102 if $test "X$cppstdin" != "X" && \
3103         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3104         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3105 then
3106         echo "You used to use $cppstdin $cppminus so we'll use that again."
3107         case "$cpprun" in
3108         '') echo "But let's see if we can live without a wrapper..." ;;
3109         *)
3110                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3111                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3112                 then
3113                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3114                         ok='true'
3115                 else
3116                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3117                 fi
3118                 ;;
3119         esac
3120 else
3121         case "$cppstdin" in
3122         '') ;;
3123         *)
3124                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3125                 ;;
3126         esac
3127 fi
3128
3129 if $ok; then
3130         : nothing
3131 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3132         $cc -E <testcpp.c >testcpp.out 2>&1; \
3133         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3134         echo "Yup, it does."
3135         x_cpp="$cc -E"
3136         x_minus='';
3137 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3138         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3139         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3140         echo "Yup, it does."
3141         x_cpp="$cc -E"
3142         x_minus='-';
3143 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3144         $cc -P <testcpp.c >testcpp.out 2>&1; \
3145         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3146         echo "Yipee, that works!"
3147         x_cpp="$cc -P"
3148         x_minus='';
3149 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3150         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3151         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3152         echo "At long last!"
3153         x_cpp="$cc -P"
3154         x_minus='-';
3155 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3156         $cpp <testcpp.c >testcpp.out 2>&1; \
3157         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3158         echo "It works!"
3159         x_cpp="$cpp"
3160         x_minus='';
3161 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3162         $cpp - <testcpp.c >testcpp.out 2>&1; \
3163         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3164         echo "Hooray, it works!  I was beginning to wonder."
3165         x_cpp="$cpp"
3166         x_minus='-';
3167 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3168         $wrapper <testcpp.c >testcpp.out 2>&1; \
3169         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3170         x_cpp="$wrapper"
3171         x_minus=''
3172         echo "Eureka!"
3173 else
3174         dflt=''
3175         rp="No dice.  I can't find a C preprocessor.  Name one:"
3176         . ./myread
3177         x_cpp="$ans"
3178         x_minus=''
3179         $x_cpp <testcpp.c >testcpp.out 2>&1
3180         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3181                 echo "OK, that will do." >&4
3182         else
3183 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3184                 exit 1
3185         fi
3186 fi
3187
3188 case "$ok" in
3189 false)
3190         cppstdin="$x_cpp"
3191         cppminus="$x_minus"
3192         cpprun="$x_cpp"
3193         cpplast="$x_minus"
3194         set X $x_cpp
3195         shift
3196         case "$1" in
3197         "$cpp")
3198                 echo "Perhaps can we force $cc -E using a wrapper..."
3199                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3200                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3201                 then
3202                         echo "Yup, we can."
3203                         cppstdin="$wrapper"
3204                         cppminus='';
3205                 else
3206                         echo "Nope, we'll have to live without it..."
3207                 fi
3208                 ;;
3209         esac
3210         case "$cpprun" in
3211         "$wrapper")
3212                 cpprun=''
3213                 cpplast=''
3214                 ;;
3215         esac
3216         ;;
3217 esac
3218
3219 case "$cppstdin" in
3220 "$wrapper"|'cppstdin') ;;
3221 *) $rm -f $wrapper;;
3222 esac
3223 $rm -f testcpp.c testcpp.out
3224
3225 : decide how portable to be.  Allow command line overrides.
3226 case "$d_portable" in
3227 "$undef") ;;
3228 *)      d_portable="$define" ;;
3229 esac
3230
3231 : set up shell script to do ~ expansion
3232 cat >filexp <<EOSS
3233 $startsh
3234 : expand filename
3235 case "\$1" in
3236  ~/*|~)
3237         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3238         ;;
3239  ~*)
3240         if $test -f /bin/csh; then
3241                 /bin/csh -f -c "glob \$1"
3242                 failed=\$?
3243                 echo ""
3244                 exit \$failed
3245         else
3246                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3247                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3248                 if $test ! -d "\$dir"; then
3249                         me=\`basename \$0\`
3250                         echo "\$me: can't locate home directory for: \$name" >&2
3251                         exit 1
3252                 fi
3253                 case "\$1" in
3254                 */*)
3255                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3256                         ;;
3257                 *)
3258                         echo \$dir
3259                         ;;
3260                 esac
3261         fi
3262         ;;
3263 *)
3264         echo \$1
3265         ;;
3266 esac
3267 EOSS
3268 chmod +x filexp
3269 $eunicefix filexp
3270
3271 : now set up to get a file name
3272 cat <<EOS >getfile
3273 $startsh
3274 EOS
3275 cat <<'EOSC' >>getfile
3276 tilde=''
3277 fullpath=''
3278 already=''
3279 skip=''
3280 none_ok=''
3281 exp_file=''
3282 nopath_ok=''
3283 orig_rp="$rp"
3284 orig_dflt="$dflt"
3285 case "$gfpth" in
3286 '') gfpth='.' ;;
3287 esac
3288
3289 case "$fn" in
3290 *\(*)
3291         expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3292         fn=`echo $fn | sed 's/(.*)//'`
3293         ;;
3294 esac
3295
3296 case "$fn" in
3297 *:*)
3298         loc_file=`expr $fn : '.*:\(.*\)'`
3299         fn=`expr $fn : '\(.*\):.*'`
3300         ;;
3301 esac
3302
3303 case "$fn" in
3304 *~*) tilde=true;;
3305 esac
3306 case "$fn" in
3307 */*) fullpath=true;;
3308 esac
3309 case "$fn" in
3310 *+*) skip=true;;
3311 esac
3312 case "$fn" in
3313 *n*) none_ok=true;;
3314 esac
3315 case "$fn" in
3316 *e*) exp_file=true;;
3317 esac
3318 case "$fn" in
3319 *p*) nopath_ok=true;;
3320 esac
3321
3322 case "$fn" in
3323 *f*) type='File';;
3324 *d*) type='Directory';;
3325 *l*) type='Locate';;
3326 esac
3327
3328 what="$type"
3329 case "$what" in
3330 Locate) what='File';;
3331 esac
3332
3333 case "$exp_file" in
3334 '')
3335         case "$d_portable" in
3336         "$define") ;;
3337         *) exp_file=true;;
3338         esac
3339         ;;
3340 esac
3341
3342 cd ..
3343 while test "$type"; do
3344         redo=''
3345         rp="$orig_rp"
3346         dflt="$orig_dflt"
3347         case "$tilde" in
3348         true) rp="$rp (~name ok)";;
3349         esac
3350         . UU/myread
3351         if test -f UU/getfile.ok && \
3352                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3353         then
3354                 value="$ans"
3355                 ansexp="$ans"
3356                 break
3357         fi
3358         case "$ans" in
3359         none)
3360                 value=''
3361                 ansexp=''
3362                 case "$none_ok" in
3363                 true) type='';;
3364                 esac
3365                 ;;
3366         *)
3367                 case "$tilde" in
3368                 '') value="$ans"
3369                         ansexp="$ans";;
3370                 *)
3371                         value=`UU/filexp $ans`
3372                         case $? in
3373                         0)
3374                                 if test "$ans" != "$value"; then
3375                                         echo "(That expands to $value on this system.)"
3376                                 fi
3377                                 ;;
3378                         *) value="$ans";;
3379                         esac
3380                         ansexp="$value"
3381                         case "$exp_file" in
3382                         '') value="$ans";;
3383                         esac
3384                         ;;
3385                 esac
3386                 case "$fullpath" in
3387                 true)
3388                         case "$ansexp" in
3389                         /*) value="$ansexp" ;;
3390                         [a-zA-Z]:/*) value="$ansexp" ;;
3391                         *)
3392                                 redo=true
3393                                 case "$already" in
3394                                 true)
3395                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3396                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3397                                         ;;
3398                                 *)
3399                                 echo "Please give a full path name, starting with slash." >&4
3400                                         case "$tilde" in
3401                                         true)
3402                                 echo "Note that using ~name is ok provided it expands well." >&4
3403                                                 already=true
3404                                                 ;;
3405                                         esac
3406                                 esac
3407                                 ;;
3408                         esac
3409                         ;;
3410                 esac
3411                 case "$redo" in
3412                 '')
3413                         case "$type" in
3414                         File)
3415                                 for fp in $gfpth; do
3416                                         if test "X$fp" = X.; then
3417                                             pf="$ansexp"
3418                                         else    
3419                                             pf="$fp/$ansexp"
3420                                         fi
3421                                         if test -f "$pf"; then
3422                                                 type=''
3423                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3424                                         then
3425                                                 echo "($value is not a plain file, but that's ok.)"
3426                                                 type=''
3427                                         fi
3428                                         if test X"$type" = X; then
3429                                             value="$pf"
3430                                             break
3431                                         fi
3432                                 done
3433                                 ;;
3434                         Directory)
3435                                 for fp in $gfpth; do
3436                                         if test "X$fp" = X.; then
3437                                             dir="$ans"
3438                                             direxp="$ansexp"
3439                                         else    
3440                                             dir="$fp/$ansexp"
3441                                             direxp="$fp/$ansexp"
3442                                         fi
3443                                         if test -d "$direxp"; then
3444                                                 type=''
3445                                                 value="$dir"
3446                                                 break
3447                                         fi
3448                                 done
3449                                 ;;
3450                         Locate)
3451                                 if test -d "$ansexp"; then
3452                                         echo "(Looking for $loc_file in directory $value.)"
3453                                         value="$value/$loc_file"
3454                                         ansexp="$ansexp/$loc_file"
3455                                 fi
3456                                 if test -f "$ansexp"; then
3457                                         type=''
3458                                 fi
3459                                 case "$nopath_ok" in
3460                                 true)   case "$value" in
3461                                         */*) ;;
3462                                         *)      echo "Assuming $value will be in people's path."
3463                                                 type=''
3464                                                 ;;
3465                                         esac
3466                                         ;;
3467                                 esac
3468                                 ;;
3469                         esac
3470
3471                         case "$skip" in
3472                         true) type='';
3473                         esac
3474
3475                         case "$type" in
3476                         '') ;;
3477                         *)
3478                                 if test "$fastread" = yes; then
3479                                         dflt=y
3480                                 else
3481                                         dflt=n
3482                                 fi
3483                                 rp="$what $value doesn't exist.  Use that name anyway?"
3484                                 . UU/myread
3485                                 dflt=''
3486                                 case "$ans" in
3487                                 y*) type='';;
3488                                 *) echo " ";;
3489                                 esac
3490                                 ;;
3491                         esac
3492                         ;;
3493                 esac
3494                 ;;
3495         esac
3496 done
3497 cd UU
3498 ans="$value"
3499 rp="$orig_rp"
3500 dflt="$orig_dflt"
3501 rm -f getfile.ok
3502 test "X$gfpthkeep" != Xy && gfpth=""
3503 EOSC
3504
3505 : What should the include directory be ?
3506 echo " "
3507 $echo $n "Hmm...  $c"
3508 dflt='/usr/include'
3509 incpath=''
3510 mips_type=''
3511 if $test -f /bin/mips && /bin/mips; then
3512         echo "Looks like a MIPS system..."
3513         $cat >usr.c <<'EOCP'
3514 #ifdef SYSTYPE_BSD43
3515 /bsd43
3516 #endif
3517 EOCP
3518         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3519                 dflt='/bsd43/usr/include'
3520                 incpath='/bsd43'
3521                 mips_type='BSD 4.3'
3522         else
3523                 mips_type='System V'
3524         fi
3525         $rm -f usr.c usr.out
3526         echo "and you're compiling with the $mips_type compiler and libraries."
3527         xxx_prompt=y
3528         echo "exit 0" >mips
3529 else
3530         echo "Doesn't look like a MIPS system."
3531         xxx_prompt=n
3532         echo "exit 1" >mips
3533 fi
3534 chmod +x mips
3535 $eunicefix mips
3536 case "$usrinc" in
3537 '') ;;
3538 *) dflt="$usrinc";;
3539 esac
3540 case "$xxx_prompt" in
3541 y)      fn=d/
3542         echo " "
3543         rp='Where are the include files you want to use?'
3544         . ./getfile
3545         usrinc="$ans"
3546         ;;
3547 *)      usrinc="$dflt"
3548         ;;
3549 esac
3550
3551 : Set private lib path
3552 case "$plibpth" in
3553 '') if ./mips; then
3554                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3555         fi;;
3556 esac
3557 case "$libpth" in
3558 ' ') dlist='';;
3559 '') dlist="$loclibpth $plibpth $glibpth";;
3560 *) dlist="$libpth";;
3561 esac
3562
3563 : Now check and see which directories actually exist, avoiding duplicates
3564 libpth=''
3565 for xxx in $dlist
3566 do
3567     if $test -d $xxx; then
3568                 case " $libpth " in
3569                 *" $xxx "*) ;;
3570                 *) libpth="$libpth $xxx";;
3571                 esac
3572     fi
3573 done
3574 $cat <<'EOM'
3575
3576 Some systems have incompatible or broken versions of libraries.  Among
3577 the directories listed in the question below, please remove any you
3578 know not to be holding relevant libraries, and add any that are needed.
3579 Say "none" for none.
3580
3581 EOM
3582 case "$libpth" in
3583 '') dflt='none';;
3584 *)
3585         set X $libpth
3586         shift
3587         dflt=${1+"$@"}
3588         ;;
3589 esac
3590 rp="Directories to use for library searches?"
3591 . ./myread
3592 case "$ans" in
3593 none) libpth=' ';;
3594 *) libpth="$ans";;
3595 esac
3596
3597 : compute shared library extension
3598 case "$so" in
3599 '')
3600         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3601                 dflt='sl'
3602         else
3603                 dflt='so'
3604         fi
3605         ;;
3606 *) dflt="$so";;
3607 esac
3608 $cat <<EOM
3609
3610 On some systems, shared libraries may be available.  Answer 'none' if
3611 you want to suppress searching of shared libraries for the remainder
3612 of this configuration.
3613
3614 EOM
3615 rp='What is the file extension used for shared libraries?'
3616 . ./myread
3617 so="$ans"
3618
3619 : Define several unixisms.
3620 : Hints files or command line option can be used to override them.
3621 : The convoluted testing is in case hints files set either the old
3622 : or the new name.
3623 case "$_exe" in
3624 '')     case "$exe_ext" in
3625     '') ;;
3626         *)      _exe="$exe_ext" ;;
3627         esac
3628         ;;
3629 esac
3630 case "$_a" in
3631 '')     case "$lib_ext" in
3632     '') _a='.a';;
3633         *)      _a="$lib_ext" ;;
3634         esac
3635         ;;
3636 esac
3637 case "$_o" in
3638 '') case "$obj_ext" in
3639         '')     _o='.o';;
3640         *)      _o="$obj_ext";;
3641         esac
3642         ;;
3643 esac
3644 case "$p_" in
3645 '') case "$path_sep" in
3646         '')     p_=':';;
3647         *)      p_="$path_sep";;
3648         esac
3649         ;;
3650 esac
3651 exe_ext=$_exe
3652 lib_ext=$_a
3653 obj_ext=$_o
3654 path_sep=$p_
3655
3656 : Which makefile gets called first.  This is used by make depend.
3657 case "$firstmakefile" in
3658 '') firstmakefile='makefile';;
3659 esac
3660
3661 case "$usesocks" in
3662 $define|true|[yY]*)     dflt='y';;
3663 *) dflt='n';;
3664 esac
3665 cat <<EOM
3666
3667 Perl can be built to use the SOCKS proxy protocol library.  To do so,
3668 Configure must be run with -Dusesocks.
3669
3670 If this doesn't make any sense to you, just accept the default '$dflt'.
3671 EOM
3672 rp='Build Perl for SOCKS?'
3673 . ./myread
3674 case "$ans" in
3675 y|Y)    val="$define" ;;     
3676 *)      val="$undef" ;;
3677 esac
3678 set usesocks
3679 eval $setvar
3680
3681 : Looking for optional libraries
3682 echo " "
3683 echo "Checking for optional libraries..." >&4
3684 case "$libs" in
3685 ' '|'') dflt='';;
3686 *) dflt="$libs";;
3687 esac
3688 case "$libswanted" in
3689 '') libswanted='c_s';;
3690 esac
3691 case "$usesocks" in
3692 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
3693 esac
3694 libsfound=''
3695 libsfiles=''
3696 libsdirs=''
3697 libspath=''
3698 for thisdir in $libpth $xlibpth; do
3699   test -d $thisdir && libspath="$libspath $thisdir"
3700 done
3701 for thislib in $libswanted; do
3702         for thisdir in $libspath; do
3703             xxx=''
3704             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3705                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
3706                 $test -f "$xxx" && eval $libscheck
3707                 $test -f "$xxx" && libstyle=shared
3708             fi
3709             if test ! -f "$xxx"; then
3710                 xxx=$thisdir/lib$thislib.$so
3711                 $test -f "$xxx" && eval $libscheck
3712                 $test -f "$xxx" && libstyle=shared
3713             fi  
3714             if test ! -f "$xxx"; then
3715                 xxx=$thisdir/lib$thislib$_a
3716                 $test -f "$xxx" && eval $libscheck
3717                 $test -f "$xxx" && libstyle=static
3718             fi
3719             if test ! -f "$xxx"; then
3720                 xxx=$thisdir/$thislib$_a
3721                 $test -f "$xxx" && eval $libscheck
3722                 $test -f "$xxx" && libstyle=static
3723             fi
3724             if test ! -f "$xxx"; then
3725                 xxx=$thisdir/lib${thislib}_s$_a
3726                 $test -f "$xxx" && eval $libscheck
3727                 $test -f "$xxx" && libstyle=static
3728                 $test -f "$xxx" && thislib=${thislib}_s
3729             fi
3730             if test ! -f "$xxx"; then
3731                 xxx=$thisdir/Slib$thislib$_a
3732                 $test -f "$xxx" && eval $libscheck
3733                 $test -f "$xxx" && libstyle=static
3734             fi
3735             if $test -f "$xxx"; then
3736                 case "$libstyle" in
3737                 shared) echo "Found -l$thislib (shared)." ;;
3738                 static) echo "Found -l$thislib." ;;
3739                 *)      echo "Found -l$thislib ($libstyle)." ;;
3740                 esac
3741                 case " $dflt " in
3742                 *"-l$thislib "*);;
3743                 *) dflt="$dflt -l$thislib"
3744                    libsfound="$libsfound $xxx"
3745                    yyy=`basename $xxx`
3746                    libsfiles="$libsfiles $yyy"
3747                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
3748                    case " $libsdirs " in
3749                    *" $yyy "*) ;;
3750                    *) libsdirs="$libsdirs $yyy" ;;
3751                    esac
3752                    ;;
3753                 esac
3754                 break
3755             fi  
3756         done
3757         if $test ! -f "$xxx"; then
3758             echo "No -l$thislib."
3759         fi
3760 done
3761 set X $dflt
3762 shift
3763 dflt="$*"
3764 case "$libs" in
3765 '') dflt="$dflt";;
3766 *) dflt="$libs";;
3767 esac
3768 case "$dflt" in
3769 ' '|'') dflt='none';;
3770 esac
3771
3772 $cat <<EOM
3773
3774 In order to compile $package on your machine, a number of libraries
3775 are usually needed.  Include any other special libraries here as well.
3776 Say "none" for none.  The default list is almost always right.
3777 EOM
3778
3779 echo " "
3780 rp="What libraries to use?"
3781 . ./myread
3782 case "$ans" in
3783 none) libs=' ';;
3784 *) libs="$ans";;
3785 esac
3786
3787 : determine optimization, if desired, or use for debug flag also
3788 case "$optimize" in
3789 ' '|$undef) dflt='none';;
3790 '') dflt='-O';;
3791 *) dflt="$optimize";;
3792 esac
3793 $cat <<EOH
3794
3795 By default, $package compiles with the -O flag to use the optimizer.
3796 Alternately, you might want to use the symbolic debugger, which uses
3797 the -g flag (on traditional Unix systems).  Either flag can be
3798 specified here.  To use neither flag, specify the word "none".
3799
3800 EOH
3801 rp="What optimizer/debugger flag should be used?"
3802 . ./myread
3803 optimize="$ans"
3804 case "$optimize" in
3805 'none') optimize=" ";;
3806 esac
3807
3808 dflt=''
3809 : We will not override a previous value, but we might want to
3810 : augment a hint file
3811 case "$hint" in
3812 default|recommended)
3813         case "$gccversion" in
3814         1*) dflt='-fpcc-struct-return' ;;
3815         esac
3816         case "$optimize" in
3817         *-g*) dflt="$dflt -DDEBUGGING";;
3818         esac
3819         case "$gccversion" in
3820         2*) if test -d /etc/conf/kconfig.d &&
3821                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
3822                 then
3823                         dflt="$dflt -posix"
3824                 fi
3825                 ;;
3826         esac
3827         case "$gccversion" in
3828         1*) ;;
3829         2.[0-8]*) ;;
3830         ?*)     echo " "
3831                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
3832                 echo 'int main(void) { return 0; }' > gcctest.c
3833                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
3834                         echo "Yes, it does." 2>&1
3835                         case "$ccflags" in
3836                         *strict-aliasing*) 
3837                                 echo "Leaving current flags $ccflags alone." 2>&1
3838                                 ;;
3839                         *) dflt="$dflt -fno-strict-aliasing" ;;
3840                         esac
3841                 else
3842                         echo "Nope, it doesn't, but that's ok." 2>&1
3843                 fi
3844                 ;;
3845         esac
3846         ;;
3847 esac
3848
3849 case "$mips_type" in
3850 *BSD*|'') inclwanted="$locincpth $usrinc";;
3851 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
3852 esac
3853 for thisincl in $inclwanted; do
3854         if $test -d $thisincl; then
3855                 if $test x$thisincl != x$usrinc; then
3856                         case "$dflt" in
3857                         *" -I$thisincl "*);;
3858                         *) dflt="$dflt -I$thisincl ";;
3859                         esac
3860                 fi
3861         fi
3862 done
3863
3864 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
3865         xxx=true;
3866 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
3867         xxx=true;
3868 else
3869         xxx=false;
3870 fi;
3871 if $xxx; then
3872         case "$dflt" in
3873         *$2*);;
3874         *) dflt="$dflt -D$2";;
3875         esac;
3876 fi'
3877
3878 set signal.h LANGUAGE_C; eval $inctest
3879
3880 case "$usesocks" in
3881 $define)
3882         ccflags="$ccflags -DSOCKS"
3883         ;;
3884 esac
3885
3886 case "$hint" in
3887 default|recommended) dflt="$ccflags $dflt" ;;
3888 *) dflt="$ccflags";;
3889 esac
3890
3891 case "$dflt" in
3892 ''|' ') dflt=none;;
3893 esac
3894
3895 $cat <<EOH
3896
3897 Your C compiler may want other flags.  For this question you should include
3898 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
3899 but you should NOT include libraries or ld flags like -lwhatever.  If you
3900 want $package to honor its debug switch, you should include -DDEBUGGING here.
3901 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
3902
3903 To use no flags, specify the word "none".
3904
3905 EOH
3906 set X $dflt
3907 shift
3908 dflt=${1+"$@"}
3909 rp="Any additional cc flags?"
3910 . ./myread
3911 case "$ans" in
3912 none) ccflags='';;
3913 *) ccflags="$ans";;
3914 esac
3915
3916 : the following weeds options from ccflags that are of no interest to cpp
3917 cppflags="$ccflags"
3918 case "$gccversion" in
3919 1*) cppflags="$cppflags -D__GNUC__"
3920 esac
3921 case "$mips_type" in
3922 '');;
3923 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
3924 esac
3925 case "$cppflags" in
3926 '');;
3927 *)
3928         echo " "
3929         echo "Let me guess what the preprocessor flags are..." >&4
3930         set X $cppflags
3931         shift
3932         cppflags=''
3933         $cat >cpp.c <<'EOM'
3934 #define BLURFL foo
3935
3936 BLURFL xx LFRULB
3937 EOM
3938         previous=''
3939         for flag in $*
3940         do
3941                 case "$flag" in
3942                 -*) ftry="$flag";;
3943                 *) ftry="$previous $flag";;
3944                 esac
3945                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
3946                         >cpp1.out 2>/dev/null && \
3947                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
3948                         >cpp2.out 2>/dev/null && \
3949                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
3950                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
3951                 then
3952                         cppflags="$cppflags $ftry"
3953                         previous=''
3954                 else
3955                         previous="$flag"
3956                 fi
3957         done
3958         set X $cppflags
3959         shift
3960         cppflags=${1+"$@"}
3961         case "$cppflags" in
3962         *-*)  echo "They appear to be: $cppflags";;
3963         esac
3964         $rm -f cpp.c cpp?.out
3965         ;;
3966 esac
3967
3968 : flags used in final linking phase
3969 case "$ldflags" in
3970 '') if ./venix; then
3971                 dflt='-i -z'
3972         else
3973                 dflt=''
3974         fi
3975         case "$ccflags" in
3976         *-posix*) dflt="$dflt -posix" ;;
3977         esac
3978         ;;
3979 *) dflt="$ldflags";;
3980 esac
3981
3982 : Try to guess additional flags to pick up local libraries.
3983 for thislibdir in $libpth; do
3984         case " $loclibpth " in
3985         *" $thislibdir "*)
3986                 case "$dflt " in 
3987                 *"-L$thislibdir "*) ;;
3988                 *)  dflt="$dflt -L$thislibdir" ;;
3989                 esac
3990                 ;;
3991         esac
3992 done
3993
3994 case "$dflt" in
3995 '') dflt='none' ;;
3996 esac
3997
3998 $cat <<EOH
3999
4000 Your C linker may need flags.  For this question you should
4001 include -L/whatever and any other flags used by the C linker, but you
4002 should NOT include libraries like -lwhatever.
4003
4004 Make sure you include the appropriate -L/path flags if your C linker
4005 does not normally search all of the directories you specified above,
4006 namely
4007         $libpth
4008 To use no flags, specify the word "none".
4009
4010 EOH
4011
4012 rp="Any additional ld flags (NOT including libraries)?"
4013 . ./myread
4014 case "$ans" in
4015 none) ldflags='';;
4016 *) ldflags="$ans";;
4017 esac
4018 rmlist="$rmlist pdp11"
4019
4020 : coherency check
4021 echo " "
4022 echo "Checking your choice of C compiler and flags for coherency..." >&4
4023 $cat > try.c <<'EOF'
4024 #include <stdio.h>
4025 int main() { printf("Ok\n"); exit(0); }
4026 EOF
4027 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
4028 shift
4029 $cat >try.msg <<'EOM'
4030 I've tried to compile and run the following simple program:
4031
4032 EOM
4033 $cat try.c >> try.msg
4034
4035 $cat >> try.msg <<EOM
4036
4037 I used the command:
4038
4039         $*
4040         ./try
4041
4042 and I got the following output:
4043
4044 EOM
4045 dflt=y
4046 if sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
4047         if sh -c './try' >>try.msg 2>&1; then
4048                 xxx=`./try`
4049                 case "$xxx" in
4050                 "Ok") dflt=n ;;
4051                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4052                         case " $libs " in
4053                         *" -lsfio "*)
4054                                 cat >> try.msg <<'EOQS'
4055 If $libs contains -lsfio, and sfio is mis-configured, then it
4056 sometimes (apparently) runs and exits with a 0 status, but with no
4057 output!  It may have to do with sfio's use of _exit vs. exit.
4058
4059 EOQS
4060                                 rp="You have a big problem.  Shall I abort Configure"
4061                                 dflt=y
4062                                 ;;
4063                         esac
4064                         ;;
4065                 esac
4066         else
4067                 echo "The program compiled OK, but exited with status $?." >>try.msg
4068                 rp="You have a problem.  Shall I abort Configure"
4069                 dflt=y
4070         fi
4071 else
4072         echo "I can't compile the test program." >>try.msg
4073         rp="You have a BIG problem.  Shall I abort Configure"
4074         dflt=y
4075 fi
4076 case "$dflt" in
4077 y)
4078         $cat try.msg >&4
4079         case "$knowitall" in
4080         '')
4081                 echo "(The supplied flags or libraries might be incorrect.)"
4082                 ;;
4083         *) dflt=n;;
4084         esac
4085         echo " "
4086         . ./myread
4087         case "$ans" in
4088         n*|N*) ;;
4089         *)      echo "Ok.  Stopping Configure." >&4
4090                 exit 1
4091                 ;;
4092         esac
4093         ;;
4094 n) echo "OK, that should do.";;
4095 esac
4096 $rm -f try try.* core
4097
4098 : define an is-a-typedef? function
4099 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4100 case "$inclist" in
4101 "") inclist="sys/types.h";;
4102 esac;
4103 eval "varval=\$$var";
4104 case "$varval" in
4105 "")
4106         $rm -f temp.c;
4107         for inc in $inclist; do
4108                 echo "#include <$inc>" >>temp.c;
4109         done;
4110         echo "#ifdef $type" >> temp.c;
4111         echo "printf(\"We have $type\");" >> temp.c;
4112         echo "#endif" >> temp.c;
4113         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4114         if $contains $type temp.E >/dev/null 2>&1; then
4115                 eval "$var=\$type";
4116         else
4117                 eval "$var=\$def";
4118         fi;
4119         $rm -f temp.?;;
4120 *) eval "$var=\$varval";;
4121 esac'
4122
4123 : define an is-a-typedef? function that prompts if the type is not available.
4124 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4125 case "$inclist" in
4126 "") inclist="sys/types.h";;
4127 esac;
4128 eval "varval=\$$var";
4129 case "$varval" in
4130 "")
4131         $rm -f temp.c;
4132         for inc in $inclist; do
4133                 echo "#include <$inc>" >>temp.c;
4134         done;
4135         echo "#ifdef $type" >> temp.c;
4136         echo "printf(\"We have $type\");" >> temp.c;
4137         echo "#endif" >> temp.c;
4138         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4139         echo " " ;
4140         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
4141         if $contains $type temp.E >/dev/null 2>&1; then
4142                 echo "$type found." >&4;
4143                 eval "$var=\$type";
4144         else
4145                 echo "$type NOT found." >&4;
4146                 dflt="$def";
4147                 . ./myread ;
4148                 eval "$var=\$ans";
4149         fi;
4150         $rm -f temp.?;;
4151 *) eval "$var=\$varval";;
4152 esac'
4153
4154 : define a shorthand compile call
4155 compile='
4156 mc_file=$1;
4157 shift;
4158 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
4159 : define a shorthand compile call for compilations that should be ok.
4160 compile_ok='
4161 mc_file=$1;
4162 shift;
4163 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
4164
4165 : check for lengths of integral types
4166 echo " "
4167 case "$intsize" in
4168 '')
4169         echo "Checking to see how big your integers are..." >&4
4170         $cat >intsize.c <<'EOCP'
4171 #include <stdio.h>
4172 int main()
4173 {
4174         printf("intsize=%d;\n", (int)sizeof(int));
4175         printf("longsize=%d;\n", (int)sizeof(long));
4176         printf("shortsize=%d;\n", (int)sizeof(short));
4177         exit(0);
4178 }
4179 EOCP
4180         set intsize
4181         if eval $compile_ok && ./intsize > /dev/null; then
4182                 eval `./intsize`
4183                 echo "Your integers are $intsize bytes long."
4184                 echo "Your long integers are $longsize bytes long."
4185                 echo "Your short integers are $shortsize bytes long."
4186         else
4187                 $cat >&4 <<EOM
4188 !
4189 Help! I can't compile and run the intsize test program: please enlighten me!
4190 (This is probably a misconfiguration in your system or libraries, and
4191 you really ought to fix it.  Still, I'll try anyway.)
4192 !
4193 EOM
4194                 dflt=4
4195                 rp="What is the size of an integer (in bytes)?"
4196                 . ./myread
4197                 intsize="$ans"
4198                 dflt=$intsize
4199                 rp="What is the size of a long integer (in bytes)?"
4200                 . ./myread
4201                 longsize="$ans"
4202                 dflt=2
4203                 rp="What is the size of a short integer (in bytes)?"
4204                 . ./myread
4205                 shortsize="$ans"
4206         fi
4207         ;;
4208 esac
4209 $rm -f intsize intsize.*
4210
4211 : see what type lseek is declared as in the kernel
4212 rp="What is the type used for lseek's offset on this system?"
4213 set off_t lseektype long stdio.h sys/types.h
4214 eval $typedef_ask
4215
4216 echo " "
4217 echo "Checking to see how big your file offsets are..." >&4
4218 $cat >try.c <<EOCP
4219 #include <sys/types.h>
4220 #include <stdio.h>
4221 int main()
4222 {
4223     printf("%d\n", (int)sizeof($lseektype));
4224     return(0); 
4225 }
4226 EOCP
4227 set try
4228 if eval $compile_ok; then
4229         lseeksize=`./try`
4230         echo "Your file offsets are $lseeksize bytes long."
4231 else
4232         dflt=$longsize
4233         echo " "
4234         echo "(I can't seem to compile the test program.  Guessing...)"
4235         rp="What is the size of your file offsets (in bytes)?"
4236         . ./myread
4237         lseeksize="$ans"
4238 fi
4239 $rm -f try.c try
4240
4241 : see what type file positions are declared as in the library
4242 rp="What is the type for file position used by fsetpos()?"
4243 set fpos_t fpostype long stdio.h sys/types.h
4244 eval $typedef_ask
4245
4246 echo " "
4247 case "$fpostype" in
4248 *_t) zzz="$fpostype"    ;;
4249 *)   zzz="fpos_t"       ;;
4250 esac
4251 echo "Checking the size of $zzz..." >&4 
4252 cat > try.c <<EOCP
4253 #include <sys/types.h>
4254 #include <stdio.h>
4255 int main() {
4256     printf("%d\n", (int)sizeof($fpostype));
4257     exit(0);
4258 }
4259 EOCP
4260 set try
4261 if eval $compile_ok; then
4262         yyy=`./try`
4263         case "$yyy" in
4264         '')     fpossize=4
4265                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4266                 ;;
4267         *)      fpossize=$yyy
4268                 echo "Your $zzz is $fpossize bytes long."
4269                 ;;
4270         esac
4271 else
4272         dflt="$longsize"
4273         echo " " >&4
4274         echo "(I can't compile the test program.  Guessing...)" >&4
4275         rp="What is the size of your file positions (in bytes)?"
4276         . ./myread
4277         fpossize="$ans"
4278 fi
4279
4280
4281
4282 # Backward compatibility (uselfs is deprecated).
4283 case "$uselfs" in
4284 "$define"|true|[yY]*)
4285         cat <<EOM >&4
4286
4287 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
4288 EOM
4289         uselargefiles="$define"
4290         ;;
4291 esac                          
4292
4293 case "$lseeksize:$fpossize" in
4294 8:8) cat <<EOM
4295
4296 You can have files larger than 2 gigabytes.
4297 EOM
4298    val="$define" ;;
4299 *)    case "$uselargefiles" in
4300    "$undef"|false|[nN]*) dflt='n' ;;
4301    *)   dflt='y' ;;
4302    esac
4303    cat <<EOM
4304
4305 Perl can be built to understand large files (files larger than 2 gigabytes)
4306 on some systems.  To do so, Configure can be run with -Duselargefiles.
4307
4308 If this doesn't make any sense to you, just accept the default '$dflt'.
4309 EOM
4310    rp='Try to understand large files, if available?'
4311    . ./myread
4312    case "$ans" in
4313    y|Y)         val="$define" ;;
4314    *)           val="$undef"  ;;
4315    esac
4316    ;;
4317 esac
4318 set uselargefiles
4319 eval $setvar
4320 case "$uselargefiles" in
4321 "$define")
4322 : Look for a hint-file generated 'call-back-unit'.  If the
4323 : user has specified that a large files perl is to be built,
4324 : we may need to set or change some other defaults.
4325         if $test -f uselargefiles.cbu; then
4326                 echo "Your platform has some specific hints for large file builds, using them..."
4327                 . ./uselargefiles.cbu
4328                 echo " "
4329                 echo "Rechecking to see how big your file offsets are..." >&4
4330                 $cat >try.c <<EOCP
4331 #include <sys/types.h>
4332 #include <stdio.h>
4333 int main()
4334 {
4335     printf("%d\n", (int)sizeof($lseektype));
4336     return(0); 
4337 }
4338 EOCP
4339                 set try
4340                 if eval $compile_ok; then
4341                         lseeksize=`./try`
4342                         $echo "Your file offsets are now $lseeksize bytes long."
4343                 else
4344                         dflt="$lseeksize"
4345                         echo " "
4346                         echo "(I can't seem to compile the test program.  Guessing...)"
4347                         rp="What is the size of your file offsets (in bytes)?"
4348                         . ./myread
4349                         lseeksize="$ans"
4350                 fi
4351                 case "$fpostype" in
4352                 *_t) zzz="$fpostype"    ;;
4353                 *)   zzz="fpos_t"       ;;
4354                 esac
4355                 $echo $n "Rechecking the size of $zzz...$c" >&4 
4356                 $cat > try.c <<EOCP
4357 #include <sys/types.h>
4358 #include <stdio.h>
4359 int main() {
4360     printf("%d\n", (int)sizeof($fpostype));
4361     exit(0);
4362 }
4363 EOCP
4364                 set try
4365                 if eval $compile_ok; then
4366                         yyy=`./try`
4367                         dflt="$lseeksize"
4368                         case "$yyy" in
4369                         '')     echo " "
4370                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4371                                 ;;
4372                         *)      fpossize=$yyy
4373                                 echo " $fpossize bytes." >&4
4374                                 ;;
4375                         esac
4376                 else
4377                         dflt="$fpossize"
4378                         echo " "
4379                         echo "(I can't compile the test program.  Guessing...)" >&4
4380                         rp="What is the size of your file positions (in bytes)?"
4381                         . ./myread
4382                         fpossize="$ans"
4383                 fi
4384                 $rm -f try.c try
4385         fi
4386         ;;
4387 esac
4388
4389
4390 case "$usemorebits" in
4391 "$define"|true|[yY]*)
4392         use64bitint="$define"
4393         uselongdouble="$define"
4394         usemorebits="$define"
4395         ;;
4396 *)      usemorebits="$undef"
4397         ;;
4398 esac
4399
4400
4401 case "$uselonglong" in
4402 "$define"|true|[yY]*)
4403         cat <<EOM >&4
4404
4405 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
4406 EOM
4407         use64bitint="$define"
4408         ;;
4409 esac                          
4410 case "$use64bits" in
4411 "$define"|true|[yY]*)
4412         cat <<EOM >&4
4413
4414 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
4415 EOM
4416         use64bitint="$define"
4417         ;;
4418 esac                          
4419 case "$use64bitints" in
4420 "$define"|true|[yY]*)
4421         cat <<EOM >&4
4422
4423 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
4424 EOM
4425         use64bitint="$define"
4426         ;;
4427 esac                          
4428 case "$use64bitsint" in
4429 "$define"|true|[yY]*)
4430         cat <<EOM >&4
4431
4432 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
4433 EOM
4434         use64bitint="$define"
4435         ;;
4436 esac                          
4437 case "$uselonglongs" in
4438 "$define"|true|[yY]*)
4439         cat <<EOM >&4
4440
4441 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
4442 EOM
4443         use64bitint="$define"
4444         ;;
4445 esac                          
4446 case "$use64bitsall" in
4447 "$define"|true|[yY]*)
4448         cat <<EOM >&4
4449
4450 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
4451 EOM
4452         use64bitall="$define"
4453         ;;
4454 esac                          
4455
4456 case "$ccflags" in
4457 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
4458 esac
4459 case "$use64bitall" in
4460 "$define"|true|[yY]*) use64bitint="$define" ;;
4461 esac
4462
4463 case "$longsize" in
4464 8) cat <<EOM
4465
4466 You have natively 64-bit long integers.
4467 EOM
4468    val="$define"
4469    ;;
4470 *) case "$use64bitint" in
4471    "$define"|true|[yY]*) dflt='y';;
4472    *) dflt='n';;
4473    esac
4474    cat <<EOM
4475
4476 Perl can be built to take advantage of 64-bit integer types
4477 on some systems.  To do so, Configure can be run with -Duse64bitint.
4478 Choosing this option will most probably introduce binary incompatibilities.
4479
4480 If this doesn't make any sense to you, just accept the default '$dflt'.
4481 EOM
4482    rp='Try to use 64-bit integers, if available?'
4483    . ./myread
4484    case "$ans" in
4485    [yY]*) val="$define" ;;
4486    *)     val="$undef"  ;;
4487    esac
4488    ;;
4489 esac
4490 set use64bitint
4491 eval $setvar
4492
4493 case "$use64bitall" in
4494 "$define"|true|[yY]*) dflt='y' ;;
4495 *) case "$longsize" in
4496    8) dflt='y' ;;
4497    *) dflt='n' ;;
4498    esac
4499    ;;
4500 esac    
4501 cat <<EOM
4502
4503 You may also choose to try maximal 64-bitness.  It means using as much
4504 64-bitness as possible on the platform.  This in turn means even more
4505 binary incompatibilities.  On the other hand, your platform may not
4506 have any more 64-bitness available than what you already have chosen.
4507
4508 If this doesn't make any sense to you, just accept the default '$dflt'.
4509 EOM
4510 rp='Try to use maximal 64-bit support, if available?'
4511 . ./myread
4512 case "$ans" in
4513 [yY]*) val="$define" ;;
4514 *)     val="$undef"  ;;
4515 esac
4516 set use64bitall
4517 eval $setvar
4518 case "$use64bitall" in
4519 "$define")
4520         case "$use64bitint" in
4521         "$undef")
4522                 cat <<EOM
4523
4524 Since you have chosen a maximally 64-bit build, I'm also turning on
4525 the use of 64-bit integers.
4526 EOM
4527                 use64bitint="$define" ;;
4528         esac
4529         ;;
4530 esac
4531
4532 case "$use64bitint" in
4533 "$define"|true|[yY]*)
4534 : Look for a hint-file generated 'call-back-unit'.  If the
4535 : user has specified that a 64-bit perl is to be built,
4536 : we may need to set or change some other defaults.
4537         if $test -f use64bitint.cbu; then
4538                 echo "Your platform has some specific hints for 64-bit integers, using them..."
4539                 . ./use64bitint.cbu
4540         fi
4541         case "$longsize" in
4542         4) case "$archname64" in
4543            '') archname64=64int ;;
4544            esac
4545            ;;
4546         esac
4547         ;;
4548 esac
4549
4550 case "$use64bitall" in
4551 "$define"|true|[yY]*)
4552 : Look for a hint-file generated 'call-back-unit'.  If the
4553 : user has specified that a maximally 64-bit perl is to be built,
4554 : we may need to set or change some other defaults.
4555         if $test -f use64bitall.cbu; then
4556                 echo "Your platform has some specific hints for 64-bit builds, using them..."
4557                 . ./use64bitall.cbu
4558         fi
4559         case "$longsize" in
4560         4) case "$archname64" in
4561            ''|64int) archname64=64all ;;
4562            esac
4563            ;;
4564         esac
4565         ;;
4566 esac
4567
4568 echo " "
4569 echo "Checking for GNU C Library..." >&4
4570 cat >gnulibc.c <<EOM
4571 #include <stdio.h>
4572 int main()
4573 {
4574 #ifdef __GLIBC__
4575     exit(0);
4576 #else
4577     exit(1);
4578 #endif
4579 }
4580 EOM
4581 set gnulibc
4582 if eval $compile_ok && ./gnulibc; then
4583         val="$define"
4584         echo "You are using the GNU C Library"
4585 else
4586         val="$undef"
4587         echo "You are not using the GNU C Library"
4588 fi
4589 $rm -f gnulibc*
4590 set d_gnulibc
4591 eval $setvar
4592
4593 : see if nm is to be used to determine whether a symbol is defined or not
4594 case "$usenm" in
4595 '')
4596         dflt=''
4597         case "$d_gnulibc" in
4598         "$define")
4599                 echo " "
4600                 echo "nm probably won't work on the GNU C Library." >&4
4601                 dflt=n
4602                 ;;
4603         esac
4604         case "$dflt" in
4605         '') 
4606                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4607                         echo " "
4608                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4609                         echo "'nm' won't be sufficient on this sytem." >&4
4610                         dflt=n
4611                 fi
4612                 ;;
4613         esac
4614         case "$dflt" in
4615         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4616                 if $test $dflt -gt 20; then
4617                         dflt=y
4618                 else
4619                         dflt=n
4620                 fi
4621                 ;;
4622         esac
4623         ;;
4624 *)
4625         case "$usenm" in
4626         true|$define) dflt=y;;
4627         *) dflt=n;;
4628         esac
4629         ;;
4630 esac
4631 $cat <<EOM
4632
4633 I can use $nm to extract the symbols from your C libraries. This
4634 is a time consuming task which may generate huge output on the disk (up
4635 to 3 megabytes) but that should make the symbols extraction faster. The
4636 alternative is to skip the 'nm' extraction part and to compile a small
4637 test program instead to determine whether each symbol is present. If
4638 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4639 this may be the best solution.
4640
4641 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4642
4643 EOM
4644 rp="Shall I use $nm to extract C symbols from the libraries?"
4645 . ./myread
4646 case "$ans" in
4647 [Nn]*) usenm=false;;
4648 *) usenm=true;;
4649 esac
4650
4651 runnm=$usenm
4652 case "$reuseval" in
4653 true) runnm=false;;
4654 esac
4655
4656 : nm options which may be necessary
4657 case "$nm_opt" in
4658 '') if $test -f /mach_boot; then
4659                 nm_opt=''       # Mach
4660         elif $test -d /usr/ccs/lib; then
4661                 nm_opt='-p'     # Solaris (and SunOS?)
4662         elif $test -f /dgux; then
4663                 nm_opt='-p'     # DG-UX
4664         elif $test -f /lib64/rld; then
4665                 nm_opt='-p'     # 64-bit Irix
4666         else
4667                 nm_opt=''
4668         fi;;
4669 esac
4670
4671 : nm options which may be necessary for shared libraries but illegal
4672 : for archive libraries.  Thank you, Linux.
4673 case "$nm_so_opt" in
4674 '')     case "$myuname" in
4675         *linux*)
4676                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4677                         nm_so_opt='--dynamic'
4678                 fi
4679                 ;;
4680         esac
4681         ;;
4682 esac
4683
4684 case "$runnm" in
4685 true)
4686 : get list of predefined functions in a handy place
4687 echo " "
4688 case "$libc" in
4689 '') libc=unknown
4690         case "$libs" in
4691         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4692         esac
4693         ;;
4694 esac
4695 libnames='';
4696 case "$libs" in
4697 '') ;;
4698 *)  for thislib in $libs; do
4699         case "$thislib" in
4700         -lc|-lc_s)
4701                 : Handle C library specially below.
4702                 ;;
4703         -l*)
4704                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4705                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4706                         :
4707                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4708                         :
4709                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4710                         :
4711                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4712                         :
4713                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4714                         :
4715                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4716                         :
4717                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4718                         :
4719                 else
4720                         try=''
4721                 fi
4722                 libnames="$libnames $try"
4723                 ;;
4724         *) libnames="$libnames $thislib" ;;
4725         esac
4726         done
4727         ;;
4728 esac
4729 xxx=normal
4730 case "$libc" in
4731 unknown)
4732         set /lib/libc.$so
4733         for xxx in $libpth; do
4734                 $test -r $1 || set $xxx/libc.$so
4735                 : The messy sed command sorts on library version numbers.
4736                 $test -r $1 || \
4737                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4738                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4739                                 h
4740                                 s/[0-9][0-9]*/0000&/g
4741                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4742                                 G
4743                                 s/\n/ /' | \
4744                          $sort | $sed -e 's/^.* //'`
4745                 eval set \$$#
4746         done
4747         $test -r $1 || set /usr/ccs/lib/libc.$so
4748         $test -r $1 || set /lib/libsys_s$_a
4749         ;;
4750 *)
4751         set blurfl
4752         ;;
4753 esac
4754 if $test -r "$1"; then
4755         echo "Your (shared) C library seems to be in $1."
4756         libc="$1"
4757 elif $test -r /lib/libc && $test -r /lib/clib; then
4758         echo "Your C library seems to be in both /lib/clib and /lib/libc."
4759         xxx=apollo
4760         libc='/lib/clib /lib/libc'
4761         if $test -r /lib/syslib; then
4762                 echo "(Your math library is in /lib/syslib.)"
4763                 libc="$libc /lib/syslib"
4764         fi
4765 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4766         echo "Your C library seems to be in $libc, as you said before."
4767 elif $test -r $incpath/usr/lib/libc$_a; then
4768         libc=$incpath/usr/lib/libc$_a;
4769         echo "Your C library seems to be in $libc.  That's fine."
4770 elif $test -r /lib/libc$_a; then
4771         libc=/lib/libc$_a;
4772         echo "Your C library seems to be in $libc.  You're normal."
4773 else
4774         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
4775                 :
4776         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4777                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4778         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4779                 :
4780         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4781                 :
4782         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4783                 :
4784         else
4785                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4786         fi
4787         if $test -r "$tans"; then
4788                 echo "Your C library seems to be in $tans, of all places."
4789                 libc=$tans
4790         else
4791                 libc='blurfl'
4792         fi
4793 fi
4794 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4795         dflt="$libc"
4796         cat <<EOM
4797
4798 If the guess above is wrong (which it might be if you're using a strange
4799 compiler, or your machine supports multiple models), you can override it here.
4800
4801 EOM
4802 else
4803         dflt=''
4804         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
4805         cat >&4 <<EOM
4806 I can't seem to find your C library.  I've looked in the following places:
4807
4808 EOM
4809         $sed 's/^/      /' libpath
4810         cat <<EOM
4811
4812 None of these seems to contain your C library. I need to get its name...
4813
4814 EOM
4815 fi
4816 fn=f
4817 rp='Where is your C library?'
4818 . ./getfile
4819 libc="$ans"
4820
4821 echo " "
4822 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
4823 set X `cat libnames`
4824 shift
4825 xxx=files
4826 case $# in 1) xxx=file; esac
4827 echo "Extracting names from the following $xxx for later perusal:" >&4
4828 echo " "
4829 $sed 's/^/      /' libnames >&4
4830 echo " "
4831 $echo $n "This may take a while...$c" >&4
4832
4833 for file in $*; do
4834         case $file in
4835         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
4836         *) $nm $nm_opt $file 2>/dev/null;;
4837         esac
4838 done >libc.tmp
4839
4840 $echo $n ".$c"
4841 $grep fprintf libc.tmp > libc.ptf
4842 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
4843 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
4844 xxx='[ADTSIW]'
4845 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
4846         eval $xscan;\
4847         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4848                 eval $xrun
4849 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
4850         eval $xscan;\
4851         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4852                 eval $xrun
4853 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
4854         eval $xscan;\
4855         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4856                 eval $xrun
4857 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
4858         eval $xscan;\
4859         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4860                 eval $xrun
4861 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
4862         eval $xscan;\
4863         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4864                 eval $xrun
4865 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
4866         eval $xscan;\
4867         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4868                 eval $xrun
4869 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
4870                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
4871         eval $xscan;\
4872         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4873                 eval $xrun
4874 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
4875         eval $xscan;\
4876         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4877                 eval $xrun
4878 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
4879         eval $xscan;\
4880         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4881                 eval $xrun
4882 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
4883         eval $xscan;\
4884         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4885                 eval $xrun
4886 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
4887         eval $xscan;\
4888         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4889                 eval $xrun
4890 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\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/.*\.text n\ \ \ \.//p'";\
4895         eval $xscan;\
4896         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4897                 eval $xrun
4898 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
4899         eval $xscan;\
4900         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4901                 eval $xrun
4902 else
4903         $nm -p $* 2>/dev/null >libc.tmp
4904         $grep fprintf libc.tmp > libc.ptf
4905         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
4906                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
4907         then
4908                 nm_opt='-p'
4909                 eval $xrun
4910         else
4911                 echo " "
4912                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
4913                 com=''
4914                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
4915                         for thisname in $libnames $libc; do
4916                                 $ar t $thisname >>libc.tmp
4917                         done
4918                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
4919                         echo "Ok." >&4
4920                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
4921                         # Repeat libc to extract forwarders to DLL entries too
4922                         for thisname in $libnames $libc; do
4923                                 $ar tv $thisname >>libc.tmp
4924                                 # Revision 50 of EMX has bug in $ar.
4925                                 # it will not extract forwarders to DLL entries
4926                                 # Use emximp which will extract exactly them.
4927                                 emximp -o tmp.imp $thisname \
4928                                     2>/dev/null && \
4929                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
4930                                     < tmp.imp >>libc.tmp
4931                                 $rm tmp.imp
4932                         done
4933                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
4934                         echo "Ok." >&4
4935                 else
4936                         echo "$ar didn't seem to work right." >&4
4937                         echo "Maybe this is a Cray...trying bld instead..." >&4
4938                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
4939                         then
4940                                 for thisname in $libnames; do
4941                                         bld t $libnames | \
4942                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
4943                                         $ar t $thisname >>libc.tmp
4944                                 done
4945                                 echo "Ok." >&4
4946                         else
4947                                 echo "That didn't work either.  Giving up." >&4
4948                                 exit 1
4949                         fi
4950                 fi
4951         fi
4952 fi
4953 nm_extract="$com"
4954 if $test -f /lib/syscalls.exp; then
4955         echo " "
4956         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
4957         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
4958 fi
4959 ;;
4960 esac
4961 $rm -f libnames libpath
4962
4963 : is a C symbol defined?
4964 csym='tlook=$1;
4965 case "$3" in
4966 -v) tf=libc.tmp; tc=""; tdc="";;
4967 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
4968 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
4969 esac;
4970 tx=yes;
4971 case "$reuseval-$4" in
4972 true-) ;;
4973 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
4974 esac;
4975 case "$tx" in
4976 yes)
4977         case "$runnm" in
4978         true)
4979                 if $contains $tlook $tf >/dev/null 2>&1;
4980                 then tval=true;
4981                 else tval=false;
4982                 fi;;
4983         *)
4984                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
4985                 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
4986                 then tval=true;
4987                 else tval=false;
4988                 fi;
4989                 $rm -f t t.c;;
4990         esac;;
4991 *)
4992         case "$tval" in
4993         $define) tval=true;;
4994         *) tval=false;;
4995         esac;;
4996 esac;
4997 eval "$2=$tval"'
4998
4999 : define an is-in-libc? function
5000 inlibc='echo " "; td=$define; tu=$undef;
5001 sym=$1; var=$2; eval "was=\$$2";
5002 tx=yes;
5003 case "$reuseval$was" in
5004 true) ;;
5005 true*) tx=no;;
5006 esac;
5007 case "$tx" in
5008 yes)
5009         set $sym tres -f;
5010         eval $csym;
5011         case "$tres" in
5012         true)
5013                 echo "$sym() found." >&4;
5014                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5015         *)
5016                 echo "$sym() NOT found." >&4;
5017                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5018         esac;;
5019 *)
5020         case "$was" in
5021         $define) echo "$sym() found." >&4;;
5022         *) echo "$sym() NOT found." >&4;;
5023         esac;;
5024 esac'
5025
5026 : see if sqrtl exists
5027 set sqrtl d_sqrtl
5028 eval $inlibc
5029
5030 case "$ccflags" in
5031 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
5032 esac
5033
5034 case "$uselongdouble" in
5035 $define|true|[yY]*)     dflt='y';;
5036 *) dflt='n';;
5037 esac
5038 cat <<EOM
5039
5040 Perl can be built to take advantage of long doubles which
5041 (if available) may give more accuracy and range for floating point numbers.
5042
5043 If this doesn't make any sense to you, just accept the default '$dflt'.
5044 EOM
5045 rp='Try to use long doubles if available?'
5046 . ./myread
5047 case "$ans" in
5048 y|Y)    val="$define"   ;;
5049 *)      val="$undef"    ;;
5050 esac
5051 set uselongdouble
5052 eval $setvar
5053
5054 case "$uselongdouble" in
5055 true|[yY]*) uselongdouble="$define" ;;
5056 esac
5057
5058 case "$uselongdouble" in
5059 $define)
5060 : Look for a hint-file generated 'call-back-unit'.  If the
5061 : user has specified that long doubles should be used,
5062 : we may need to set or change some other defaults.
5063         if $test -f uselongdouble.cbu; then
5064                 echo "Your platform has some specific hints for long doubles, using them..."
5065                 . ./uselongdouble.cbu
5066         else
5067                 $cat <<EOM
5068 (Your platform doesn't have any specific hints for long doubles.)
5069 EOM
5070         fi
5071         ;;
5072 esac
5073
5074 case "$uselongdouble:$d_sqrtl" in
5075 $define:$undef)
5076                 $cat <<EOM >&4
5077
5078 *** You requested the use of long doubles but you do not seem to have
5079 *** the mathematic functions for long doubles.  I'm disabling the use
5080 *** of long doubles.
5081
5082 EOM
5083         uselongdouble=$undef
5084         ;;
5085 esac
5086
5087 : check for length of double
5088 echo " "
5089 case "$doublesize" in
5090 '')
5091         echo "Checking to see how big your double precision numbers are..." >&4
5092         $cat >try.c <<'EOCP'
5093 #include <stdio.h>
5094 int main()
5095 {
5096     printf("%d\n", (int)sizeof(double));
5097     exit(0);
5098 }
5099 EOCP
5100         set try
5101         if eval $compile_ok; then
5102                 doublesize=`./try`
5103                 echo "Your double is $doublesize bytes long."
5104         else
5105                 dflt='8'
5106                 echo "(I can't seem to compile the test program.  Guessing...)"
5107                 rp="What is the size of a double precision number (in bytes)?"
5108                 . ./myread
5109                 doublesize="$ans"
5110         fi
5111         ;;
5112 esac
5113 $rm -f try.c try
5114
5115 : check for long doubles
5116 echo " "
5117 echo "Checking to see if you have long double..." >&4
5118 echo 'int main() { long double x = 7.0; }' > try.c
5119 set try
5120 if eval $compile; then
5121         val="$define"
5122         echo "You have long double."
5123 else
5124         val="$undef"
5125         echo "You do not have long double."
5126 fi
5127 $rm try.*
5128 set d_longdbl
5129 eval $setvar
5130
5131 : check for length of long double
5132 case "${d_longdbl}${longdblsize}" in
5133 $define)
5134         echo " "
5135         echo "Checking to see how big your long doubles are..." >&4
5136         $cat >try.c <<'EOCP'
5137 #include <stdio.h>
5138 int main()
5139 {
5140         printf("%d\n", sizeof(long double));
5141 }
5142 EOCP
5143         set try
5144         set try
5145         if eval $compile; then
5146                 longdblsize=`./try$exe_ext`
5147                 echo "Your long doubles are $longdblsize bytes long."
5148         else
5149                 dflt='8'
5150                 echo " "
5151                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
5152                 rp="What is the size of a long double (in bytes)?"
5153                 . ./myread
5154                 longdblsize="$ans"
5155         fi
5156         if $test "X$doublesize" = "X$longdblsize"; then
5157                 echo "(That isn't any different from an ordinary double.)"
5158         fi      
5159         ;;
5160 esac
5161 $rm -f try.* try
5162
5163 : determine the architecture name
5164 echo " "
5165 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
5166         tarch=`arch`"-$osname"
5167 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
5168         if uname -m > tmparch 2>&1 ; then
5169                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
5170                         -e 's/$/'"-$osname/" tmparch`
5171         else
5172                 tarch="$osname"
5173         fi
5174         $rm -f tmparch
5175 else
5176         tarch="$osname"
5177 fi
5178 case "$myarchname" in
5179 ''|"$tarch") ;;
5180 *)
5181         echo "(Your architecture name used to be $myarchname.)"
5182         archname=''
5183         ;;
5184 esac
5185 myarchname="$tarch"
5186 case "$archname" in
5187 '') dflt="$tarch";;
5188 *) dflt="$archname";;
5189 esac
5190 rp='What is your architecture name'
5191 . ./myread
5192 archname="$ans"
5193 case "$usethreads" in
5194 $define)
5195         echo "Threads selected." >&4
5196         case "$archname" in
5197         *-thread*) echo "...and architecture name already has -thread." >&4
5198                 ;;
5199         *)      archname="$archname-thread"
5200                 echo "...setting architecture name to $archname." >&4
5201                 ;;
5202         esac
5203         ;;
5204 esac
5205 case "$usemultiplicity" in
5206 $define)
5207         echo "Multiplicity selected." >&4
5208         case "$archname" in
5209         *-multi*) echo "...and architecture name already has -multi." >&4
5210                 ;;
5211         *)      archname="$archname-multi"
5212                 echo "...setting architecture name to $archname." >&4
5213                 ;;
5214         esac
5215         ;;
5216 esac
5217 case "$use64bitint$use64bitall" in
5218 *"$define"*)
5219         case "$archname64" in
5220         '')
5221                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
5222                 ;;
5223         *)
5224                 case "$use64bitint" in
5225                 "$define") echo "64 bit integers selected." >&4 ;;
5226                 esac
5227                 case "$use64bitall" in
5228                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
5229                 esac
5230                 case "$archname" in
5231                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
5232                         ;;
5233                 *)      archname="$archname-$archname64"
5234                         echo "...setting architecture name to $archname." >&4
5235                         ;;
5236                 esac
5237                 ;;
5238         esac
5239 esac
5240 case "$uselongdouble" in
5241 $define)
5242         echo "Long doubles selected." >&4
5243         case "$longdblsize" in
5244         $doublesize)
5245                 "...but long doubles are equal to doubles, not changing architecture name." >&4
5246                 ;;
5247         *)
5248                 case "$archname" in
5249                 *-ld*) echo "...and architecture name already has -ld." >&4
5250                         ;;
5251                 *)      archname="$archname-ld"
5252                         echo "...setting architecture name to $archname." >&4
5253                         ;;
5254                 esac
5255                 ;;
5256         esac
5257         ;;
5258 esac
5259
5260 : determine root of directory hierarchy where package will be installed.
5261 case "$prefix" in
5262 '')
5263         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
5264         ;;
5265 *)
5266         dflt="$prefix"
5267         ;;
5268 esac
5269 $cat <<EOM
5270
5271 By default, $package will be installed in $dflt/bin, manual pages
5272 under $dflt/man, etc..., i.e. with $dflt as prefix for all
5273 installation directories. Typically this is something like /usr/local.
5274 If you wish to have binaries under /usr/bin but other parts of the
5275 installation under /usr/local, that's ok: you will be prompted
5276 separately for each of the installation directories, the prefix being
5277 only used to set the defaults.
5278
5279 EOM
5280 fn=d~
5281 rp='Installation prefix to use?'
5282 . ./getfile
5283 oldprefix=''
5284 case "$prefix" in
5285 '') ;;
5286 *)
5287         case "$ans" in
5288         "$prefix") ;;
5289         *) oldprefix="$prefix";;
5290         esac
5291         ;;
5292 esac
5293 prefix="$ans"
5294 prefixexp="$ansexp"
5295
5296 : is AFS running?
5297 echo " "
5298 case "$afs" in
5299 $define|true)   afs=true ;;
5300 $undef|false)   afs=false ;;
5301 *)      if test -d /afs; then
5302                 afs=true
5303         else
5304                 afs=false
5305         fi
5306         ;;
5307 esac
5308 if $afs; then
5309         echo "AFS may be running... I'll be extra cautious then..." >&4
5310 else
5311         echo "AFS does not seem to be running..." >&4
5312 fi
5313
5314 : determine installation prefix for where package is to be installed.
5315 if $afs; then 
5316 $cat <<EOM
5317
5318 Since you are running AFS, I need to distinguish the directory in which
5319 files will reside from the directory in which they are installed (and from
5320 which they are presumably copied to the former directory by occult means).
5321
5322 EOM
5323         case "$installprefix" in
5324         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
5325         *) dflt="$installprefix";;
5326         esac
5327 else
5328 $cat <<EOM
5329
5330 In some special cases, particularly when building $package for distribution,
5331 it is convenient to distinguish between the directory in which files should 
5332 be installed from the directory ($prefix) in which they 
5333 will eventually reside.  For most users, these two directories are the same.
5334
5335 EOM
5336         case "$installprefix" in
5337         '') dflt=$prefix ;;
5338         *) dflt=$installprefix;;
5339         esac
5340 fi
5341 fn=d~
5342 rp='What installation prefix should I use for installing files?'
5343 . ./getfile
5344 installprefix="$ans"
5345 installprefixexp="$ansexp"
5346
5347 : set the prefixit variable, to compute a suitable default value
5348 prefixit='case "$3" in
5349 ""|none)
5350         case "$oldprefix" in
5351         "") eval "$1=\"\$$2\"";;
5352         *)
5353                 case "$3" in
5354                 "") eval "$1=";;
5355                 none)
5356                         eval "tp=\"\$$2\"";
5357                         case "$tp" in
5358                         ""|" ") eval "$1=\"\$$2\"";;
5359                         *) eval "$1=";;
5360                         esac;;
5361                 esac;;
5362         esac;;
5363 *)
5364         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
5365         case "$tp" in
5366         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
5367         /*-$oldprefix/*|\~*-$oldprefix/*)
5368                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
5369         *) eval "$1=\"\$$2\"";;
5370         esac;;
5371 esac'
5372
5373
5374 : get the patchlevel
5375 echo " "
5376 echo "Getting the current patchlevel..." >&4
5377 if $test -r $rsrc/patchlevel.h;then
5378         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
5379         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
5380         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
5381         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
5382         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
5383         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
5384 else
5385         revision=0
5386         patchlevel=0
5387         subversion=0
5388         api_revision=0
5389         api_version=0
5390         api_subversion=0
5391 fi
5392 $echo "(You have $package version $patchlevel subversion $subversion.)"
5393 case "$osname" in
5394 dos|vms)
5395         : XXX Should be a Configure test for double-dots in filenames.
5396         version=`echo $revision $patchlevel $subversion | \
5397                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
5398         api_versionstring=`echo $api_revision $api_version $api_subversion | \
5399                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
5400         ;;
5401 *)
5402         version=`echo $revision $patchlevel $subversion | \
5403                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
5404         api_versionstring=`echo $api_revision $api_version $api_subversion | \
5405                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
5406         ;;
5407 esac
5408 : Special case the 5.005_xx maintenance series, which used 5.005
5409 : without any subversion label as a subdirectory in $sitelib
5410 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
5411         api_versionstring='5.005'
5412 fi
5413
5414 : determine installation style
5415 : For now, try to deduce it from prefix unless it is already set.
5416 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
5417 case "$installstyle" in
5418 '')     case "$prefix" in
5419                 *perl*) dflt='lib';;
5420                 *) dflt='lib/perl5' ;;
5421         esac
5422         ;;
5423 *)      dflt="$installstyle" ;;
5424 esac
5425 : Probably not worth prompting for this since we prompt for all
5426 : the directories individually, and the prompt would be too long and
5427 : confusing anyway.
5428 installstyle=$dflt
5429
5430 : determine where private library files go
5431 : Usual default is /usr/local/lib/perl5/$version.
5432 : Also allow things like /opt/perl/lib/$version, since 
5433 : /opt/perl/lib/perl5... would be redundant.
5434 : The default "style" setting is made in installstyle.U
5435 case "$installstyle" in
5436 *lib/perl5*) set dflt privlib lib/$package/$version ;;
5437 *)       set dflt privlib lib/$version ;;
5438 esac
5439 eval $prefixit
5440 $cat <<EOM
5441
5442 There are some auxiliary files for $package that need to be put into a
5443 private library directory that is accessible by everyone.
5444
5445 EOM
5446 fn=d~+
5447 rp='Pathname where the private library files will reside?'
5448 . ./getfile
5449 privlib="$ans"
5450 privlibexp="$ansexp"
5451 : Change installation prefix, if necessary.
5452 if $test X"$prefix" != X"$installprefix"; then
5453         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
5454 else
5455         installprivlib="$privlibexp"
5456 fi
5457
5458 : set the prefixup variable, to restore leading tilda escape
5459 prefixup='case "$prefixexp" in
5460 "$prefix") ;;
5461 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
5462 esac'
5463
5464 : determine where public architecture dependent libraries go
5465 set archlib archlib
5466 eval $prefixit
5467 : privlib default is /usr/local/lib/$package/$version
5468 : archlib default is /usr/local/lib/$package/$version/$archname
5469 : privlib may have an optional trailing /share.
5470 tdflt=`echo $privlib | $sed 's,/share$,,'`
5471 tdflt=$tdflt/$archname
5472 case "$archlib" in
5473 '')     dflt=$tdflt
5474         ;;
5475 *)      dflt="$archlib"
5476     ;;
5477 esac
5478 $cat <<EOM
5479
5480 $spackage contains architecture-dependent library files.  If you are
5481 sharing libraries in a heterogeneous environment, you might store
5482 these files in a separate location.  Otherwise, you can just include
5483 them with the rest of the public library files.
5484
5485 EOM
5486 fn=d+~
5487 rp='Where do you want to put the public architecture-dependent libraries?'
5488 . ./getfile
5489 archlib="$ans"
5490 archlibexp="$ansexp"
5491 if $test X"$archlib" = X"$privlib"; then
5492         d_archlib="$undef"
5493 else
5494         d_archlib="$define"
5495 fi
5496 : Change installation prefix, if necessary.
5497 if $test X"$prefix" != X"$installprefix"; then
5498         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
5499 else
5500         installarchlib="$archlibexp"
5501 fi
5502
5503
5504 : Binary compatibility with 5.005 is not possible for builds
5505 : with advanced features
5506 case "$usethreads$usemultiplicity" in
5507 *define*)
5508         bincompat5005="$undef"
5509         d_bincompat5005="$undef"
5510         ;;
5511 *)      $cat <<EOM
5512
5513 This version of Perl can be compiled for binary compatibility with 5.005.
5514 If you decide to do so, you will be able to continue using most of the
5515 extensions that were compiled for Perl 5.005.
5516
5517 EOM
5518         case "$bincompat5005$d_bincompat5005" in
5519         *"$undef"*) dflt=n ;;
5520         *) dflt=y ;;
5521         esac
5522         rp='Binary compatibility with Perl 5.005?'
5523         . ./myread
5524         case "$ans" in
5525         y*) val="$define" ;;
5526         *)  val="$undef" ;;
5527         esac
5528         set d_bincompat5005
5529         eval $setvar
5530         case "$d_bincompat5005" in
5531         "$define")
5532                 bincompat5005="$define"
5533                 ;;
5534         *)      bincompat5005="$undef"
5535                 d_bincompat5005="$undef"
5536                 ;;
5537         esac
5538         ;;
5539 esac
5540
5541
5542 : see if setuid scripts can be secure
5543 $cat <<EOM
5544
5545 Some kernels have a bug that prevents setuid #! scripts from being
5546 secure.  Some sites have disabled setuid #! scripts because of this.
5547
5548 First let's decide if your kernel supports secure setuid #! scripts.
5549 (If setuid #! scripts would be secure but have been disabled anyway,
5550 don't say that they are secure if asked.)
5551
5552 EOM
5553
5554 val="$undef"
5555 if $test -d /dev/fd; then
5556         echo "#!$ls" >reflect
5557         chmod +x,u+s reflect
5558         ./reflect >flect 2>&1
5559         if $contains "/dev/fd" flect >/dev/null; then
5560                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
5561                 val="$define"
5562         else
5563                 $cat <<EOM
5564 If you are not sure if they are secure, I can check but I'll need a
5565 username and password different from the one you are using right now.
5566 If you don't have such a username or don't want me to test, simply
5567 enter 'none'.
5568
5569 EOM
5570                 rp='Other username to test security of setuid scripts with?'
5571                 dflt='none'
5572                 . ./myread
5573                 case "$ans" in
5574                 n|none)
5575                         case "$d_suidsafe" in
5576                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
5577                                 dflt=n;;
5578                         "$undef")
5579                                 echo "Well, the $hint value is *not* secure." >&4
5580                                 dflt=n;;
5581                         *)      echo "Well, the $hint value *is* secure." >&4
5582                                 dflt=y;;
5583                         esac
5584                         ;;
5585                 *)
5586                         $rm -f reflect flect
5587                         echo "#!$ls" >reflect
5588                         chmod +x,u+s reflect
5589                         echo >flect
5590                         chmod a+w flect
5591                         echo '"su" will (probably) prompt you for '"$ans's password."
5592                         su $ans -c './reflect >flect'
5593                         if $contains "/dev/fd" flect >/dev/null; then
5594                                 echo "Okay, it looks like setuid scripts are secure." >&4
5595                                 dflt=y
5596                         else
5597                                 echo "I don't think setuid scripts are secure." >&4
5598                                 dflt=n
5599                         fi
5600                         ;;
5601                 esac
5602                 rp='Does your kernel have *secure* setuid scripts?'
5603                 . ./myread
5604                 case "$ans" in
5605                 [yY]*)  val="$define";;
5606                 *)      val="$undef";;
5607                 esac
5608         fi
5609 else
5610         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
5611         echo "(That's for file descriptors, not floppy disks.)"
5612         val="$undef"
5613 fi
5614 set d_suidsafe
5615 eval $setvar
5616
5617 $rm -f reflect flect
5618
5619 : now see if they want to do setuid emulation
5620 echo " "
5621 val="$undef"
5622 case "$d_suidsafe" in
5623 "$define")
5624         val="$undef"
5625         echo "No need to emulate SUID scripts since they are secure here." >& 4
5626         ;;
5627 *)
5628         $cat <<EOM
5629 Some systems have disabled setuid scripts, especially systems where
5630 setuid scripts cannot be secure.  On systems where setuid scripts have
5631 been disabled, the setuid/setgid bits on scripts are currently
5632 useless.  It is possible for $package to detect those bits and emulate
5633 setuid/setgid in a secure fashion.  This emulation will only work if
5634 setuid scripts have been disabled in your kernel.
5635
5636 EOM
5637         case "$d_dosuid" in
5638         "$define") dflt=y ;;
5639         *) dflt=n ;;
5640         esac
5641         rp="Do you want to do setuid/setgid emulation?"
5642         . ./myread
5643         case "$ans" in
5644         [yY]*)  val="$define";;
5645         *)      val="$undef";;
5646         esac
5647         ;;
5648 esac
5649 set d_dosuid
5650 eval $setvar
5651
5652 : determine filename position in cpp output
5653 echo " "
5654 echo "Computing filename position in cpp output for #include directives..." >&4
5655 echo '#include <stdio.h>' > foo.c
5656 $cat >fieldn <<EOF
5657 $startsh
5658 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
5659 $grep '^[       ]*#.*stdio\.h' | \
5660 while read cline; do
5661         pos=1
5662         set \$cline
5663         while $test \$# -gt 0; do
5664                 if $test -r \`echo \$1 | $tr -d '"'\`; then
5665                         echo "\$pos"
5666                         exit 0
5667                 fi
5668                 shift
5669                 pos=\`expr \$pos + 1\`
5670         done
5671 done
5672 EOF
5673 chmod +x fieldn
5674 fieldn=`./fieldn`
5675 $rm -f foo.c fieldn
5676 case $fieldn in
5677 '') pos='???';;
5678 1) pos=first;;
5679 2) pos=second;;
5680 3) pos=third;;
5681 *) pos="${fieldn}th";;
5682 esac
5683 echo "Your cpp writes the filename in the $pos field of the line."
5684
5685 : locate header file
5686 $cat >findhdr <<EOF
5687 $startsh
5688 wanted=\$1
5689 name=''
5690 for usrincdir in $usrinc
5691 do
5692         if test -f \$usrincdir/\$wanted; then
5693                 echo "\$usrincdir/\$wanted"
5694                 exit 0
5695         fi
5696 done
5697 awkprg='{ print \$$fieldn }'
5698 echo "#include <\$wanted>" > foo\$\$.c
5699 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
5700 $grep "^[       ]*#.*\$wanted" | \
5701 while read cline; do
5702         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
5703         case "\$name" in
5704         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
5705         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
5706         *) exit 2;;
5707         esac;
5708 done;
5709 #
5710 # status = 0: grep returned 0 lines, case statement not executed
5711 # status = 1: headerfile found
5712 # status = 2: while loop executed, no headerfile found
5713 #
5714 status=\$?
5715 $rm -f foo\$\$.c;
5716 if test \$status -eq 1; then
5717         exit 0;
5718 fi
5719 exit 1
5720 EOF
5721 chmod +x findhdr
5722
5723 : define an alternate in-header-list? function
5724 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
5725 cont=true; xxf="echo \"<\$1> found.\" >&4";
5726 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
5727 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
5728 esac;
5729 case $# in 4) instead=instead;; *) instead="at last";; esac;
5730 while $test "$cont"; do
5731         xxx=`./findhdr $1`
5732         var=$2; eval "was=\$$2";
5733         if $test "$xxx" && $test -r "$xxx";
5734         then eval $xxf;
5735         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5736                 cont="";
5737         else eval $xxnf;
5738         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5739         set $yyy; shift; shift; yyy=$@;
5740         case $# in 0) cont="";;
5741         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5742                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5743         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5744                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5745         esac;
5746 done;
5747 while $test "$yyy";
5748 do set $yyy; var=$2; eval "was=\$$2";
5749         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5750         set $yyy; shift; shift; yyy=$@;
5751 done'
5752
5753 : see if this is a malloc.h system
5754 set malloc.h i_malloc
5755 eval $inhdr
5756
5757 : see if stdlib is available
5758 set stdlib.h i_stdlib
5759 eval $inhdr
5760
5761 : determine which malloc to compile in
5762 echo " "
5763 case "$usemymalloc" in
5764 ''|[yY]*|true|$define)  dflt='y' ;;
5765 *)      dflt='n' ;;
5766 esac
5767 rp="Do you wish to attempt to use the malloc that comes with $package?"
5768 . ./myread
5769 usemymalloc="$ans"
5770 case "$ans" in
5771 y*|true)
5772         usemymalloc='y'
5773         mallocsrc='malloc.c'
5774         mallocobj="malloc$_o"
5775         d_mymalloc="$define"
5776         case "$libs" in
5777         *-lmalloc*)
5778                 : Remove malloc from list of libraries to use
5779                 echo "Removing unneeded -lmalloc from library list" >&4
5780                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
5781                 shift
5782                 libs="$*"
5783                 echo "libs = $libs" >&4
5784                 ;;
5785         esac
5786         ;;
5787 *)
5788         usemymalloc='n'
5789         mallocsrc=''
5790         mallocobj=''
5791         d_mymalloc="$undef"
5792         ;;
5793 esac
5794
5795 : compute the return types of malloc and free
5796 echo " "
5797 $cat >malloc.c <<END
5798 #$i_malloc I_MALLOC
5799 #$i_stdlib I_STDLIB
5800 #include <stdio.h>
5801 #include <sys/types.h>
5802 #ifdef I_MALLOC
5803 #include <malloc.h>
5804 #endif
5805 #ifdef I_STDLIB
5806 #include <stdlib.h>
5807 #endif
5808 #ifdef TRY_MALLOC
5809 void *malloc();
5810 #endif
5811 #ifdef TRY_FREE
5812 void free();
5813 #endif
5814 END
5815 case "$malloctype" in
5816 '')
5817         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
5818                 malloctype='void *'
5819         else
5820                 malloctype='char *'
5821         fi
5822         ;;
5823 esac
5824 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
5825
5826 case "$freetype" in
5827 '')
5828         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
5829                 freetype='void'
5830         else
5831                 freetype='int'
5832         fi
5833         ;;
5834 esac
5835 echo "Your system uses $freetype free(), it would seem." >&4
5836 $rm -f malloc.[co]
5837 $cat <<EOM
5838
5839 After $package is installed, you may wish to install various
5840 add-on modules and utilities.  Typically, these add-ons will
5841 be installed under $prefix with the rest
5842 of this package.  However, you may wish to install such add-ons
5843 elsewhere under a different prefix.
5844
5845 If you do not wish to put everything under a single prefix, that's
5846 ok.  You will be prompted for the individual locations; this siteprefix
5847 is only used to suggest the defaults.
5848
5849 The default should be fine for most people.
5850
5851 EOM
5852 fn=d~+
5853 rp='Installation prefix to use for add-on modules and utilities?'
5854 : XXX Here might be another good place for an installstyle setting.
5855 case "$siteprefix" in
5856 '') dflt=$prefix ;;
5857 *)  dflt=$siteprefix ;;
5858 esac
5859 . ./getfile
5860 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
5861 oldsiteprefix=''
5862 case "$siteprefix" in
5863 '') ;;
5864 *)      case "$ans" in
5865         "$prefix") ;;
5866         *) oldsiteprefix="$prefix";;
5867         esac
5868         ;;
5869 esac
5870 siteprefix="$ans"
5871 siteprefixexp="$ansexp"
5872
5873 : determine where site specific libraries go.
5874 : Usual default is /usr/local/lib/perl5/site_perl/$version
5875 : The default "style" setting is made in installstyle.U
5876 : XXX No longer works with Prefixit stuff.
5877 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5878 case "$sitelib" in
5879 '') case "$installstyle" in
5880         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
5881         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
5882         esac
5883         ;;
5884 *)      dflt="$sitelib"
5885         ;;
5886 esac
5887 $cat <<EOM
5888
5889 The installation process will create a directory for
5890 site-specific extensions and modules.  Most users find it convenient
5891 to place all site-specific files in this directory rather than in the
5892 main distribution directory.
5893
5894 EOM
5895 fn=d~+
5896 rp='Pathname for the site-specific library files?'
5897 . ./getfile
5898 sitelib="$ans"
5899 sitelibexp="$ansexp"
5900 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
5901 : Change installation prefix, if necessary.
5902 if $test X"$prefix" != X"$installprefix"; then
5903         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
5904 else
5905         installsitelib="$sitelibexp"
5906 fi
5907
5908 : determine where site specific architecture-dependent libraries go.
5909 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
5910 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
5911 : sitelib may have an optional trailing /share.
5912 case "$sitearch" in
5913 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
5914         dflt="$dflt/$archname"
5915         ;;
5916 *)      dflt="$sitearch"
5917         ;;
5918 esac
5919 set sitearch sitearch none
5920 eval $prefixit
5921 $cat <<EOM
5922
5923 The installation process will also create a directory for
5924 architecture-dependent site-specific extensions and modules.
5925
5926 EOM
5927 fn=d~+
5928 rp='Pathname for the site-specific architecture-dependent library files?'
5929 . ./getfile
5930 sitearch="$ans"
5931 sitearchexp="$ansexp"
5932 : Change installation prefix, if necessary.
5933 if $test X"$prefix" != X"$installprefix"; then
5934         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
5935 else
5936         installsitearch="$sitearchexp"
5937 fi
5938
5939 $cat <<EOM
5940
5941 The installation process will also create a directory for
5942 vendor-supplied add-ons.  Vendors who supply perl with their system
5943 may find it convenient to place all vendor-supplied files in this
5944 directory rather than in the main distribution directory.  This will
5945 ease upgrades between binary-compatible maintenance versions of perl.
5946
5947 Of course you may also use these directories in whatever way you see
5948 fit.  For example, you might use them to access modules shared over a
5949 company-wide network.
5950
5951 The default answer should be fine for most people.
5952 This causes further questions about vendor add-ons to be skipped
5953 and no vendor-specific directories will be configured for perl.
5954
5955 EOM
5956 rp='Do you want to configure vendor-specific add-on directories?'
5957 case "$usevendorprefix" in
5958 define|true|[yY]*) dflt=y ;;
5959 *)      : User may have set vendorprefix directly on Configure command line.
5960         case "$vendorprefix" in
5961         ''|' ') dflt=n ;;
5962         *)      dflt=y ;;
5963         esac
5964         ;;
5965 esac
5966 . ./myread
5967 case "$ans" in
5968 [yY]*)  fn=d~+
5969         rp='Installation prefix to use for vendor-supplied add-ons?'
5970         case "$vendorprefix" in
5971         '') dflt='' ;;
5972         *)  dflt=$vendorprefix ;;
5973         esac
5974         . ./getfile
5975         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
5976         oldvendorprefix=''
5977         case "$vendorprefix" in
5978         '') ;;
5979         *)      case "$ans" in
5980                 "$prefix") ;;
5981                 *) oldvendorprefix="$prefix";;
5982                 esac
5983                 ;;
5984         esac
5985         usevendorprefix="$define"
5986         vendorprefix="$ans"
5987         vendorprefixexp="$ansexp"
5988         ;;
5989 *)      usevendorprefix="$undef"
5990         vendorprefix=''
5991         vendorprefixexp=''
5992         ;;
5993 esac
5994
5995 case "$vendorprefix" in
5996 '')     d_vendorlib="$undef"
5997         vendorlib=''
5998         vendorlibexp=''
5999         ;;
6000 *)      d_vendorlib="$define"
6001         : determine where vendor-supplied modules go.
6002         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6003         case "$vendorlib" in
6004         '')
6005                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6006                 case "$installstyle" in
6007                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6008                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6009                 esac
6010                 ;;
6011         *)      dflt="$vendorlib"
6012                 ;;
6013         esac
6014         fn=d~+
6015         rp='Pathname for the vendor-supplied library files?'
6016         . ./getfile
6017         vendorlib="$ans"
6018         vendorlibexp="$ansexp"
6019         ;;
6020 esac
6021 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6022 : Change installation prefix, if necessary.
6023 if $test X"$prefix" != X"$installprefix"; then
6024         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6025 else
6026         installvendorlib="$vendorlibexp"
6027 fi
6028
6029 case "$vendorprefix" in
6030 '')     d_vendorarch="$undef"
6031         vendorarch=''
6032         vendorarchexp=''
6033         ;;
6034 *)      d_vendorarch="$define"
6035         : determine where vendor-supplied architecture-dependent libraries go.
6036         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
6037         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6038         : vendorlib may have an optional trailing /share.
6039         case "$vendorarch" in
6040         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
6041                 dflt="$dflt/$archname"
6042                 ;;
6043         *)      dflt="$vendorarch" ;;
6044         esac
6045         fn=d~+
6046         rp='Pathname for vendor-supplied architecture-dependent files?'
6047         . ./getfile
6048         vendorarch="$ans"
6049         vendorarchexp="$ansexp"
6050         ;;
6051 esac
6052 : Change installation prefix, if necessary.
6053 if $test X"$prefix" != X"$installprefix"; then
6054         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6055 else
6056         installvendorarch="$vendorarchexp"
6057 fi
6058
6059 : Final catch-all directories to search
6060 $cat <<EOM
6061
6062 Lastly, you can have perl look in other directories for extensions and
6063 modules in addition to those already specified.
6064 These directories will be searched after 
6065         $sitearch 
6066         $sitelib 
6067 EOM
6068 test X"$vendorlib" != "X" && echo '     ' $vendorlib
6069 test X"$vendorarch" != "X" && echo '    ' $vendorarch
6070 echo ' '
6071 case "$otherlibdirs" in
6072 ''|' ') dflt='none' ;;
6073 *)      dflt="$otherlibdirs" ;;
6074 esac
6075 $cat <<EOM
6076 Enter a colon-separated set of extra paths to include in perl's @INC
6077 search path, or enter 'none' for no extra paths.
6078
6079 EOM
6080
6081 rp='Colon-separated list of additional directories for perl to search?'
6082 . ./myread
6083 case "$ans" in
6084 ' '|''|none)    otherlibdirs=' ' ;;     
6085 *)      otherlibdirs="$ans" ;;
6086 esac
6087 case "$otherlibdirs" in
6088 ' ') val=$undef ;;
6089 *)      val=$define ;;
6090 esac
6091 set d_perl_otherlibdirs
6092 eval $setvar
6093
6094 : Cruising for prototypes
6095 echo " "
6096 echo "Checking out function prototypes..." >&4
6097 $cat >prototype.c <<'EOCP'
6098 int main(int argc, char *argv[]) {
6099         exit(0);}
6100 EOCP
6101 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
6102         echo "Your C compiler appears to support function prototypes."
6103         val="$define"
6104 else
6105         echo "Your C compiler doesn't seem to understand function prototypes."
6106         val="$undef"
6107 fi
6108 set prototype
6109 eval $setvar
6110 $rm -f prototype*
6111
6112 case "$prototype" in
6113 "$define") ;;
6114 *)      ansi2knr='ansi2knr'
6115         echo " "
6116         cat <<EOM >&4
6117
6118 $me:  FATAL ERROR:
6119 This version of $package can only be compiled by a compiler that 
6120 understands function prototypes.  Unfortunately, your C compiler 
6121         $cc $ccflags
6122 doesn't seem to understand them.  Sorry about that.
6123
6124 If GNU cc is available for your system, perhaps you could try that instead.  
6125
6126 Eventually, we hope to support building Perl with pre-ANSI compilers.
6127 If you would like to help in that effort, please contact <perlbug@perl.org>.
6128
6129 Aborting Configure now.
6130 EOM
6131         exit 2
6132         ;;
6133 esac
6134
6135 : determine where public executables go
6136 echo " "
6137 set dflt bin bin
6138 eval $prefixit
6139 fn=d~
6140 rp='Pathname where the public executables will reside?'
6141 . ./getfile
6142 if $test "X$ansexp" != "X$binexp"; then
6143         installbin=''
6144 fi
6145 bin="$ans"
6146 binexp="$ansexp"
6147 : Change installation prefix, if necessary.
6148 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
6149 if $test X"$prefix" != X"$installprefix"; then
6150         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
6151 else
6152         installbin="$binexp"
6153 fi
6154
6155 : Find perl5.005 or later.
6156 echo "Looking for a previously installed perl5.005 or later... "
6157 case "$perl5" in
6158 '')     for tdir in `echo "$binexp:$PATH" | $sed "s/$path_sep/ /g"`; do
6159                 : Check if this perl is recent and can load a simple module
6160                 if $test -x $tdir/perl && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6161                         perl5=$tdir/perl
6162                         break;
6163                 elif $test -x $tdir/perl5 && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6164                         perl5=$tdir/perl
6165                         break;
6166                 fi
6167         done
6168         ;;
6169 *)      perl5="$perl5"
6170         ;;
6171 esac
6172 case "$perl5" in
6173 '')     echo "None found.  That's ok.";;
6174 *)      echo "Using $perl5." ;;
6175 esac
6176
6177 : Determine list of previous versions to include in @INC
6178 $cat > getverlist <<EOPL
6179 #!$perl5 -w
6180 use File::Basename;
6181 \$api_versionstring = "$api_versionstring";
6182 \$version = "$version";
6183 \$stem = "$sitelib_stem";
6184 \$archname = "$archname";
6185 EOPL
6186         $cat >> getverlist <<'EOPL'
6187 # Can't have leading @ because metaconfig interprets it as a command!
6188 ;@inc_version_list=();
6189 # XXX Redo to do opendir/readdir? 
6190 if (-d $stem) {
6191     chdir($stem);
6192     ;@candidates = glob("5.*");
6193 }
6194 else {
6195     ;@candidates = ();
6196 }
6197
6198 # XXX ToDo:  These comparisons must be reworked when two-digit
6199 # subversions come along, so that 5.7.10 compares as greater than
6200 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
6201 # widespread that we can use the built-in version vectors rather
6202 # than reinventing them here.  For 5.6.0, however, we must
6203 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
6204 foreach $d (@candidates) {
6205     if ($d lt $version) {
6206         if ($d ge $api_versionstring) {
6207             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
6208         }
6209         elsif ($d ge "5.005") {
6210             unshift(@inc_version_list, grep { -d } $d);
6211         }
6212     }
6213     else {
6214         # Skip newer version.  I.e. don't look in
6215         # 5.7.0 if we're installing 5.6.1.
6216     }
6217 }
6218
6219 if (@inc_version_list) {
6220     print join(' ', @inc_version_list);
6221 }
6222 else {
6223     # Blank space to preserve value for next Configure run.
6224     print " ";
6225 }
6226 EOPL
6227 chmod +x getverlist
6228 case "$inc_version_list" in
6229 '')     if test -x "$perl5"; then
6230                 dflt=`$perl5 getverlist`
6231         else
6232                 dflt='none'
6233         fi
6234         ;;
6235 $undef) dflt='none' ;;
6236 *)  dflt="$inc_version_list" ;;
6237 esac
6238 case "$dflt" in
6239 ''|' ') dflt=none ;;
6240 esac
6241 case "$dflt" in
6242 5.005) case "$bincompat5005" in
6243        $define|true|[yY]*) ;;
6244        *) dflt=none ;;
6245        esac
6246        ;;
6247 esac
6248 $cat <<'EOM'
6249
6250 In order to ease the process of upgrading, this version of perl 
6251 can be configured to use modules built and installed with earlier 
6252 versions of perl that were installed under $prefix.  Specify here
6253 the list of earlier versions that this version of perl should check.
6254 If Configure detected no earlier versions of perl installed under
6255 $prefix, then the list will be empty.  Answer 'none' to tell perl
6256 to not search earlier versions.
6257
6258 The default should almost always be sensible, so if you're not sure,
6259 just accept the default.
6260 EOM
6261
6262 rp='List of earlier versions to include in @INC?'
6263 . ./myread
6264 case "$ans" in
6265 [Nn]one|''|' ') inc_version_list=' ' ;;
6266 *) inc_version_list="$ans" ;;
6267 esac
6268 case "$inc_version_list" in
6269 ''|' ') 
6270         inc_version_list_init='0';;
6271 *)      inc_version_list_init=`echo $inc_version_list |
6272                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
6273         ;;
6274 esac
6275 $rm -f getverlist
6276
6277 : determine whether to install perl also as /usr/bin/perl
6278
6279 echo " "
6280 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
6281         $cat <<EOM
6282 Many scripts expect perl to be installed as /usr/bin/perl.
6283 I can install the perl you are about to compile also as /usr/bin/perl
6284 (in addition to $installbin/perl).
6285 EOM
6286         case "$installusrbinperl" in
6287         "$undef"|[nN]*) dflt='n';;
6288         *)              dflt='y';;
6289         esac
6290         rp="Do you want to install perl as /usr/bin/perl?"
6291         . ./myread
6292         case "$ans" in
6293         [yY]*)  val="$define";;
6294         *)      val="$undef" ;;
6295         esac
6296 else
6297         val="$undef"
6298 fi
6299 set installusrbinperl
6300 eval $setvar
6301
6302 : see if dld is available
6303 set dld.h i_dld
6304 eval $inhdr
6305
6306 : see if dlopen exists
6307 xxx_runnm="$runnm"
6308 runnm=false
6309 set dlopen d_dlopen
6310 eval $inlibc
6311 runnm="$xxx_runnm"
6312
6313 : determine which dynamic loading, if any, to compile in
6314 echo " "
6315 dldir="ext/DynaLoader"
6316 case "$usedl" in
6317 $define|y|true)
6318         dflt='y'
6319         usedl="$define"
6320         ;;
6321 $undef|n|false)
6322         dflt='n'
6323         usedl="$undef"
6324         ;;
6325 *) 
6326         dflt='n'
6327         case "$d_dlopen" in
6328             $define) dflt='y' ;;
6329         esac
6330         case "$i_dld" in
6331             $define) dflt='y' ;;
6332         esac
6333         : Does a dl_xxx.xs file exist for this operating system
6334         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
6335         ;;
6336 esac
6337 rp="Do you wish to use dynamic loading?"
6338 . ./myread
6339 usedl="$ans"
6340 case "$ans" in
6341 y*) usedl="$define"
6342         case "$dlsrc" in
6343         '')
6344                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
6345                         dflt="$dldir/dl_${osname}.xs"
6346                 elif $test "$d_dlopen" = "$define" ; then
6347                         dflt="$dldir/dl_dlopen.xs"
6348                 elif $test "$i_dld" = "$define" ; then
6349                         dflt="$dldir/dl_dld.xs"
6350                 else
6351                         dflt=''
6352                 fi
6353                 ;;
6354         *)      dflt="$dldir/$dlsrc"
6355                 ;;
6356         esac
6357     echo "The following dynamic loading files are available:"
6358         : Can not go over to $dldir because getfile has path hard-coded in.
6359         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
6360         rp="Source file to use for dynamic loading"
6361         fn="fne"
6362         gfpth="$src"
6363         . ./getfile
6364         usedl="$define"
6365         : emulate basename
6366         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
6367
6368         $cat << EOM
6369
6370 Some systems may require passing special flags to $cc -c to
6371 compile modules that will be used to create a shared library.
6372 To use no flags, say "none".
6373
6374 EOM
6375     case "$cccdlflags" in
6376     '') case "$gccversion" in
6377                 '') case "$osname" in
6378                         hpux)   dflt='+z' ;;
6379                         next)   dflt='none' ;;
6380                         irix*)  dflt='-KPIC' ;;
6381                         svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
6382                         sunos)  dflt='-pic' ;;
6383                         *)      dflt='none' ;;
6384                     esac
6385                         ;;
6386                 *)  case "$osname" in
6387                         svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
6388                         *)      dflt='-fpic' ;;
6389                     esac ;;
6390             esac ;;
6391         ' ') dflt='none' ;;
6392     *)  dflt="$cccdlflags" ;;
6393     esac
6394     rp="Any special flags to pass to $cc -c to compile shared library modules?"
6395     . ./myread
6396     case "$ans" in
6397     none) cccdlflags=' ' ;;
6398     *) cccdlflags="$ans" ;;
6399     esac
6400
6401     cat << EOM
6402
6403 Some systems use ld to create libraries that can be dynamically loaded,
6404 while other systems (such as those using ELF) use $cc.
6405
6406 EOM
6407         case "$ld" in
6408         '')     $cat >try.c <<'EOM'
6409 /* Test for whether ELF binaries are produced */
6410 #include <fcntl.h>
6411 #include <stdlib.h>
6412 int main() {
6413         char b[4];
6414         int i = open("a.out",O_RDONLY);
6415         if(i == -1) 
6416                 exit(1); /* fail */
6417         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
6418                 exit(0); /* succeed (yes, it's ELF) */
6419         else
6420                 exit(1); /* fail */
6421 }
6422 EOM
6423                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
6424                         cat <<EOM
6425 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
6426 EOM
6427                         dflt="$cc"
6428                 else
6429                         echo "I'll use ld to build dynamic libraries."
6430                         dflt='ld'
6431                 fi
6432                 rm -f try.c a.out
6433                 ;;
6434         *)      dflt="$ld"
6435                 ;;
6436         esac
6437
6438     rp="What command should be used to create dynamic libraries?"
6439     . ./myread
6440         ld="$ans"
6441
6442     cat << EOM
6443
6444 Some systems may require passing special flags to $ld to create a
6445 library that can be dynamically loaded.  If your ld flags include
6446 -L/other/path options to locate libraries outside your loader's normal
6447 search path, you may need to specify those -L options here as well.  To
6448 use no flags, say "none".
6449
6450 EOM
6451     case "$lddlflags" in
6452     '') case "$osname" in
6453                         beos) dflt='-nostart' ;;
6454                         hpux) dflt='-b';
6455                               case "$gccversion" in
6456                               '') dflt="$dflt +vnocompatwarnings" ;;
6457                               esac
6458                               ;;        
6459                         linux|irix*)    dflt='-shared' ;;
6460                         next)  dflt='none' ;;
6461                         solaris) dflt='-G' ;;
6462                         sunos) dflt='-assert nodefinitions' ;;
6463                         svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
6464                 *)     dflt='none' ;;
6465                         esac
6466                         ;;
6467     *) dflt="$lddlflags" ;;
6468     esac
6469
6470         : Try to guess additional flags to pick up local libraries.
6471         : Be careful not to append to a plain 'none'
6472         case "$dflt" in
6473         none) dflt='' ;;
6474         esac
6475         for thisflag in $ldflags; do
6476                 case "$thisflag" in
6477                 -L*|-R*)
6478                         case " $dflt " in
6479                         *" $thisflag "*) ;;
6480                         *) dflt="$dflt $thisflag" ;;
6481                         esac
6482                         ;;
6483                 esac
6484         done
6485
6486         case "$dflt" in
6487         ''|' ') dflt='none' ;;
6488         esac
6489
6490     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
6491     . ./myread
6492     case "$ans" in
6493     none) lddlflags=' ' ;;
6494     *) lddlflags="$ans" ;;
6495     esac
6496
6497         cat <<EOM
6498
6499 Some systems may require passing special flags to $cc to indicate that
6500 the resulting executable will use dynamic linking.  To use no flags,
6501 say "none".
6502
6503 EOM
6504     case "$ccdlflags" in
6505     '') case "$osname" in
6506                 hpux)   dflt='-Wl,-E' ;;
6507                 linux)  dflt='-rdynamic' ;;
6508                 next)   dflt='none' ;;
6509                 sunos)  dflt='none' ;;
6510                 *)      dflt='none' ;;
6511             esac ;;
6512     ' ')  dflt='none' ;;
6513     *)  dflt="$ccdlflags" ;;
6514     esac
6515     rp="Any special flags to pass to $cc to use dynamic linking?"
6516     . ./myread
6517     case "$ans" in
6518     none) ccdlflags=' ' ;;
6519     *) ccdlflags="$ans" ;;
6520     esac
6521     ;;
6522 *)  usedl="$undef"
6523         ld='ld'
6524     dlsrc='dl_none.xs'
6525     lddlflags=''
6526     ccdlflags=''
6527     ;;
6528 esac
6529
6530 also=''
6531 case "$usedl" in
6532 $undef)
6533         # No dynamic loading being used, so don't bother even to prompt.
6534         useshrplib='false'
6535         ;;
6536 *)      case "$useshrplib" in
6537         '')     case "$osname" in
6538                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
6539                         dflt=y
6540                         also='Building a shared libperl is required for dynamic loading to work on your system.'
6541                         ;;
6542                 next*)
6543                         case "$osvers" in
6544                         4*)     dflt=y
6545                                 also='Building a shared libperl is needed for MAB support.'
6546                                 ;;
6547                         *)      dflt=n
6548                                 ;;
6549                         esac
6550                         ;;
6551                 *)      dflt=n
6552                         ;;
6553                 esac
6554                 ;;
6555         $define|true|[Yy]*)
6556                 dflt=y
6557                 ;;
6558         *)      dflt=n
6559                 ;;
6560         esac
6561         $cat << EOM
6562
6563 The perl executable is normally obtained by linking perlmain.c with
6564 libperl${_a}, any static extensions (usually just DynaLoader), and
6565 any other libraries needed on this system (such as -lm, etc.).  Since
6566 your system supports dynamic loading, it is probably possible to build
6567 a shared libperl.$so.  If you will have more than one executable linked
6568 to libperl.$so, this will significantly reduce the size of each
6569 executable, but it may have a noticeable affect on performance.  The
6570 default is probably sensible for your system.
6571 $also
6572
6573 EOM
6574         rp="Build a shared libperl.$so (y/n)"
6575         . ./myread
6576         case "$ans" in
6577         true|$define|[Yy]*)
6578                 useshrplib='true'  ;;
6579         *)      useshrplib='false' ;;
6580         esac
6581         ;;
6582 esac
6583
6584 case "$useshrplib" in
6585 true)
6586         case "$libperl" in
6587         '')
6588                 # Figure out a good name for libperl.so.  Since it gets stored in
6589                 # a version-specific architecture-dependent library, the version
6590                 # number isn't really that important, except for making cc/ld happy.
6591                 #
6592                 # A name such as libperl.so.3.1
6593                 majmin="libperl.$so.$patchlevel.$subversion"
6594                 # A name such as libperl.so.301
6595                 majonly=`echo $patchlevel $subversion |
6596                         $awk '{printf "%d%02d", $1, $2}'`
6597                 majonly=libperl.$so.$majonly
6598                 # I'd prefer to keep the os-specific stuff here to a minimum, and
6599                 # rely on figuring it out from the naming of libc.
6600                 case "${osname}${osvers}" in
6601                 next4*)
6602                         dflt=libperl.5.$so
6603                         # XXX How handle the --version stuff for MAB?
6604                         ;;
6605                 linux*)  # ld won't link with a bare -lperl otherwise.
6606                         dflt=libperl.$so
6607                         ;;
6608                 cygwin*) # include version
6609                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
6610                         ;;
6611                 *)      # Try to guess based on whether libc has major.minor.
6612                         case "$libc" in
6613                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
6614                         *libc.$so.[0-9]*) dflt=$majonly ;;
6615                         *)      dflt=libperl.$so ;;
6616                         esac
6617                         ;;
6618                 esac
6619                 ;;
6620         *)      dflt=$libperl
6621                 ;;
6622         esac
6623         cat << EOM
6624
6625 I need to select a good name for the shared libperl.  If your system uses
6626 library names with major and minor numbers, then you might want something
6627 like $majmin.  Alternatively, if your system uses a single version
6628 number for shared libraries, then you might want to use $majonly.
6629 Or, your system might be quite happy with a simple libperl.$so.
6630
6631 Since the shared libperl will get installed into a version-specific
6632 architecture-dependent directory, the version number of the shared perl
6633 library probably isn't important, so the default should be o.k.
6634
6635 EOM
6636         rp='What name do you want to give to the shared libperl?'
6637         . ./myread
6638         libperl=$ans
6639         echo "Ok, I'll use $libperl"
6640         ;;
6641 *)
6642         libperl="libperl${_a}"
6643         ;;
6644 esac
6645
6646 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
6647 case "$shrpdir" in
6648 '') ;;
6649 *)      $cat >&4 <<EOM
6650 WARNING:  Use of the shrpdir variable for the installation location of
6651 the shared $libperl is not supported.  It was never documented and
6652 will not work in this version.  Let me (perlbug@perl.org)
6653 know of any problems this may cause.
6654
6655 EOM
6656         case "$shrpdir" in
6657         "$archlibexp/CORE")
6658                 $cat >&4 <<EOM
6659 But your current setting of $shrpdir is
6660 the default anyway, so it's harmless.
6661 EOM
6662                 ;;
6663         *)
6664                 $cat >&4 <<EOM
6665 Further, your current attempted setting of $shrpdir
6666 conflicts with the value of $archlibexp/CORE
6667 that installperl will use.
6668 EOM
6669                 ;;
6670         esac
6671         ;;
6672 esac
6673
6674 # How will the perl executable find the installed shared $libperl?
6675 # Add $xxx to ccdlflags.
6676 # If we can't figure out a command-line option, use $shrpenv to
6677 # set env LD_RUN_PATH.  The main perl makefile uses this.
6678 shrpdir=$archlibexp/CORE
6679 xxx=''
6680 tmp_shrpenv=''
6681 if "$useshrplib"; then
6682     case "$osname" in 
6683         aix)
6684                 # We'll set it in Makefile.SH...
6685                 ;;
6686         solaris|netbsd)
6687                 xxx="-R $shrpdir"
6688                 ;;
6689         freebsd)
6690                 xxx="-Wl,-R$shrpdir"
6691                 ;;
6692         linux|irix*|dec_osf)
6693                 xxx="-Wl,-rpath,$shrpdir"
6694                 ;;
6695         next)
6696                 # next doesn't like the default...
6697                 ;;
6698         beos)
6699                 # beos doesn't like the default, either.
6700                 ;;
6701         hpux*)
6702                 # hpux doesn't like the default, either.
6703                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
6704                 ;;
6705         *)
6706                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
6707                 ;;
6708         esac
6709         case "$xxx" in
6710         '') ;;
6711         *)      
6712                 # Only add $xxx if it isn't already in ccdlflags.
6713                 case " $ccdlflags " in
6714                 *" $xxx "*)     ;;
6715                 *)      ccdlflags="$ccdlflags $xxx"
6716                         cat <<EOM >&4
6717
6718 Adding $xxx to the flags
6719 passed to $ld so that the perl executable will find the 
6720 installed shared $libperl.
6721
6722 EOM
6723                         ;;
6724                 esac
6725                 ;;
6726         esac
6727 fi
6728 # Fix ccdlflags in AIX for building external extensions.
6729 # (For building Perl itself bare -bE:perl.exp is needed,
6730 #  Makefile.SH takes care of this.)
6731 case "$osname" in
6732 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
6733 esac
6734 # Respect a hint or command-line value.
6735 case "$shrpenv" in
6736 '') shrpenv="$tmp_shrpenv" ;;
6737 esac
6738 case "$ldlibpthname" in
6739 '')     ldlibpthname=LD_LIBRARY_PATH ;;
6740 none)   ldlibpthname='' ;;
6741 esac
6742
6743 : determine where manual pages are on this system
6744 echo " "
6745 case "$sysman" in
6746 '') 
6747         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
6748         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
6749         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
6750         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
6751         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
6752         sysman=`./loc . /usr/man/man1 $syspath`
6753         ;;
6754 esac
6755 if $test -d "$sysman"; then
6756         echo "System manual is in $sysman." >&4
6757 else
6758         echo "Could not find manual pages in source form." >&4
6759 fi
6760
6761 : determine where manual pages go
6762 set man1dir man1dir none
6763 eval $prefixit
6764 $cat <<EOM
6765
6766 $spackage has manual pages available in source form.
6767 EOM
6768 case "$nroff" in
6769 nroff)
6770         echo "However, you don't have nroff, so they're probably useless to you."
6771         case "$man1dir" in
6772         '') man1dir="none";;
6773         esac;;
6774 esac
6775 echo "If you don't want the manual sources installed, answer 'none'."
6776 case "$man1dir" in
6777 ' ') dflt=none
6778         ;;
6779 '')
6780         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
6781         lookpath="$lookpath $prefixexp/man/p_man/man1"
6782         lookpath="$lookpath $prefixexp/man/u_man/man1"
6783         lookpath="$lookpath $prefixexp/man/man.1"
6784         case "$sysman" in
6785         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
6786         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
6787         esac
6788         set dflt
6789         eval $prefixup
6790         ;;
6791 *)  dflt="$man1dir"
6792         ;;
6793 esac
6794 echo " "
6795 fn=dn+~
6796 rp="Where do the main $spackage manual pages (source) go?"
6797 . ./getfile
6798 if $test "X$man1direxp" != "X$ansexp"; then
6799         installman1dir=''
6800 fi
6801 man1dir="$ans"
6802 man1direxp="$ansexp"
6803 case "$man1dir" in
6804 '')     man1dir=' '
6805         installman1dir='';;
6806 esac
6807
6808 : Change installation prefix, if necessary.
6809 if $test X"$prefix" != X"$installprefix"; then
6810         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
6811 else
6812         installman1dir="$man1direxp"
6813 fi
6814
6815 : What suffix to use on installed man pages
6816
6817 case "$man1dir" in
6818 ' ')
6819         man1ext='0'
6820         ;;
6821 *)
6822         rp="What suffix should be used for the main $spackage man pages?"
6823         case "$man1ext" in
6824         '')     case "$man1dir" in
6825                 *1)  dflt=1 ;;
6826                 *1p) dflt=1p ;;
6827                 *1pm) dflt=1pm ;;
6828                 *l) dflt=l;;
6829                 *n) dflt=n;;
6830                 *o) dflt=o;;
6831                 *p) dflt=p;;
6832                 *C) dflt=C;;
6833                 *L) dflt=L;;
6834                 *L1) dflt=L1;;
6835                 *) dflt=1;;
6836                 esac
6837                 ;;
6838         *)      dflt="$man1ext";;
6839         esac
6840         . ./myread
6841         man1ext="$ans"
6842         ;;
6843 esac
6844
6845 : see if we can have long filenames
6846 echo " "
6847 first=123456789abcdef
6848 $rm -f $first
6849 if (echo hi >$first) 2>/dev/null; then
6850         if $test -f 123456789abcde; then
6851                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
6852                 val="$undef"
6853         else
6854                 echo 'You can have filenames longer than 14 characters.'>&4
6855                 val="$define"
6856         fi
6857 else
6858         $cat <<'EOM'
6859 You can't have filenames longer than 14 chars.
6860 You can't even think about them!
6861 EOM
6862         val="$undef"
6863 fi 
6864 set d_flexfnam
6865 eval $setvar
6866 $rm -rf 123456789abcde*
6867
6868 : determine where library module manual pages go
6869 set man3dir man3dir none
6870 eval $prefixit
6871 $cat <<EOM
6872
6873 $spackage has manual pages for many of the library modules.
6874 EOM
6875
6876 case "$nroff" in
6877 nroff)
6878         $cat <<'EOM'
6879 However, you don't have nroff, so they're probably useless to you.
6880 EOM
6881         case "$man3dir" in
6882         '') man3dir="none";;
6883         esac;;
6884 esac
6885
6886 case "$d_flexfnam" in
6887 undef)
6888         $cat <<'EOM'
6889 However, your system can't handle the long file names like File::Basename.3. 
6890 EOM
6891         case "$man3dir" in
6892         '') man3dir="none";;
6893         esac;;
6894 esac
6895
6896 echo "If you don't want the manual sources installed, answer 'none'."
6897 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6898 case "$man3dir" in
6899 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
6900         if $test -d "$privlib/man/man3"; then
6901                 cat <<EOM >&4
6902
6903 WARNING:  Previous versions of perl installed man3 pages into
6904 $privlib/man/man3.  This version will suggest a 
6905 new default of $dflt.  
6906 EOM
6907                 tdflt=$dflt
6908                 dflt='n'
6909                 rp='Do you wish to preserve the old behavior?(y/n)'
6910                 . ./myread
6911                 case "$ans" in
6912                 y*) dflt="$privlib/man/man3" ;;
6913                 *)  dflt=$tdflt ;;
6914                 esac
6915     fi
6916         ;;
6917 *)      dflt="$man3dir" ;;
6918 esac
6919 case "$dflt" in
6920 ' ') dflt=none ;;
6921 esac
6922 echo " "
6923 fn=dn+~
6924 rp="Where do the $package library man pages (source) go?"
6925 . ./getfile
6926 man3dir="$ans"
6927 man3direxp="$ansexp"
6928 case "$man3dir" in
6929 '')     man3dir=' '
6930         installman3dir='';;
6931 esac
6932
6933 : Change installation prefix, if necessary.
6934 if $test X"$prefix" != X"$installprefix"; then
6935         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
6936 else
6937         installman3dir="$man3direxp"
6938 fi
6939
6940 : What suffix to use on installed man pages
6941 case "$man3dir" in
6942 ' ')
6943         man3ext='0'
6944         ;;
6945 *)
6946         rp="What suffix should be used for the $package library man pages?"
6947         case "$man3ext" in
6948         '')     case "$man3dir" in
6949                 *3)  dflt=3 ;;
6950                 *3p) dflt=3p ;;
6951                 *3pm) dflt=3pm ;;
6952                 *l) dflt=l;;
6953                 *n) dflt=n;;
6954                 *o) dflt=o;;
6955                 *p) dflt=p;;
6956                 *C) dflt=C;;
6957                 *L) dflt=L;;
6958                 *L3) dflt=L3;;
6959                 *) dflt=3;;
6960                 esac
6961                 ;;
6962         *)      dflt="$man3ext";;
6963         esac
6964         . ./myread
6965         man3ext="$ans"
6966         ;;
6967 esac
6968
6969 : see if we have to deal with yellow pages, now NIS.
6970 if $test -d /usr/etc/yp || $test -d /etc/yp; then
6971         if $test -f /usr/etc/nibindd; then
6972                 echo " "
6973                 echo "I'm fairly confident you're on a NeXT."
6974                 echo " "
6975                 rp='Do you get the hosts file via NetInfo?'
6976                 dflt=y
6977                 case "$hostcat" in
6978                 nidump*) ;;
6979                 '') ;;
6980                 *) dflt=n;;
6981                 esac
6982                 . ./myread
6983                 case "$ans" in
6984                 y*) hostcat='nidump hosts .';;
6985                 *)      case "$hostcat" in
6986                         nidump*) hostcat='';;
6987                         esac
6988                         ;;
6989                 esac
6990         fi
6991         case "$hostcat" in
6992         nidump*) ;;
6993         *)
6994                 case "$hostcat" in
6995                 *ypcat*) dflt=y;;
6996                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
6997                                 dflt=y
6998                         else
6999                                 dflt=n
7000                         fi;;
7001                 *) dflt=n;;
7002                 esac
7003                 echo " "
7004                 rp='Are you getting the hosts file via yellow pages?'
7005                 . ./myread
7006                 case "$ans" in
7007                 y*) hostcat='ypcat hosts';;
7008                 *) hostcat='cat /etc/hosts';;
7009                 esac
7010                 ;;
7011         esac
7012 fi
7013 case "$hostcat" in
7014 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
7015 esac
7016 case "$groupcat" in
7017 '') test -f /etc/group && groupcat='cat /etc/group';;
7018 esac
7019 case "$passcat" in
7020 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
7021 esac
7022
7023 : now get the host name
7024 echo " "
7025 echo "Figuring out host name..." >&4
7026 case "$myhostname" in
7027 '') cont=true
7028         echo 'Maybe "hostname" will work...'
7029         if tans=`sh -c hostname 2>&1` ; then
7030                 myhostname=$tans
7031                 phostname=hostname
7032                 cont=''
7033         fi
7034         ;;
7035 *) cont='';;
7036 esac
7037 if $test "$cont"; then
7038         if ./xenix; then
7039                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
7040                 if tans=`cat /etc/systemid 2>&1` ; then
7041                         myhostname=$tans
7042                         phostname='cat /etc/systemid'
7043                         echo "Whadyaknow.  Xenix always was a bit strange..."
7044                         cont=''
7045                 fi
7046         elif $test -r /etc/systemid; then
7047                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
7048         fi
7049 fi
7050 if $test "$cont"; then
7051         echo 'No, maybe "uuname -l" will work...'
7052         if tans=`sh -c 'uuname -l' 2>&1` ; then
7053                 myhostname=$tans
7054                 phostname='uuname -l'
7055         else
7056                 echo 'Strange.  Maybe "uname -n" will work...'
7057                 if tans=`sh -c 'uname -n' 2>&1` ; then
7058                         myhostname=$tans
7059                         phostname='uname -n'
7060                 else
7061                         echo 'Oh well, maybe I can mine it out of whoami.h...'
7062                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
7063                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
7064                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
7065                         else
7066                                 case "$myhostname" in
7067                                 '') echo "Does this machine have an identity crisis or something?"
7068                                         phostname='';;
7069                                 *)
7070                                         echo "Well, you said $myhostname before..."
7071                                         phostname='echo $myhostname';;
7072                                 esac
7073                         fi
7074                 fi
7075         fi
7076 fi
7077 : you do not want to know about this
7078 set $myhostname
7079 myhostname=$1
7080
7081 : verify guess
7082 if $test "$myhostname" ; then
7083         dflt=y
7084         rp='Your host name appears to be "'$myhostname'".'" Right?"
7085         . ./myread
7086         case "$ans" in
7087         y*) ;;
7088         *) myhostname='';;
7089         esac
7090 fi
7091
7092 : bad guess or no guess
7093 while $test "X$myhostname" = X ; do
7094         dflt=''
7095         rp="Please type the (one word) name of your host:"
7096         . ./myread
7097         myhostname="$ans"
7098 done
7099
7100 : translate upper to lower if necessary
7101 case "$myhostname" in
7102 *[A-Z]*)
7103         echo "(Normalizing case in your host name)"
7104         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
7105         ;;
7106 esac
7107
7108 case "$myhostname" in
7109 *.*)
7110         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
7111         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
7112         echo "(Trimming domain name from host name--host name is now $myhostname)"
7113         ;;
7114 *) case "$mydomain" in
7115         '')
7116                 {
7117                         test "X$hostcat" = "Xypcat hosts" &&
7118                         ypmatch "$myhostname" hosts 2>/dev/null |\
7119                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
7120                         $test -s hosts
7121                 } || {
7122                         test "X$hostcat" != "X" &&
7123                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
7124                                         /[       ]$myhostname[  . ]/p" > hosts
7125                 }
7126                 tmp_re="[       . ]"
7127                 if $test -f hosts; then
7128                         $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
7129                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
7130                         dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
7131                                 hosts | $sort | $uniq | \
7132                                 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
7133                         case `$echo X$dflt` in
7134                         X*\ *)  echo "(Several hosts in the database matched hostname)"
7135                                 dflt=.
7136                                 ;;
7137                         X.) echo "(You do not have fully-qualified names in the hosts database)"
7138                                 ;;
7139                         esac
7140                 else
7141                         echo "(I cannot locate a hosts database anywhere)"
7142                         dflt=.
7143                 fi
7144                 case "$dflt" in
7145                 .)
7146                         tans=`./loc resolv.conf X /etc /usr/etc`
7147                         if $test -f "$tans"; then
7148                                 echo "(Attempting domain name extraction from $tans)"
7149                                 dflt=.`$sed -n -e 's/   / /g' \
7150                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
7151                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7152                                 case "$dflt" in
7153                                 .) dflt=.`$sed -n -e 's/        / /g' \
7154                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
7155                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7156                                         ;;
7157                                 esac
7158                         fi
7159                         ;;
7160                 esac
7161                 case "$dflt" in
7162                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
7163                         dflt=.`sh -c domainname 2>/dev/null`
7164                         case "$dflt" in
7165                         '') dflt='.';;
7166                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
7167                         esac
7168                         ;;
7169                 esac
7170                 case "$dflt" in
7171                 .) echo "(Lost all hope -- silly guess then)"
7172                         dflt='.uucp'
7173                         ;;
7174                 esac
7175                 $rm -f hosts
7176                 ;;
7177         *) dflt="$mydomain";;
7178         esac;;
7179 esac
7180 echo " "
7181 rp="What is your domain name?"
7182 . ./myread
7183 tans="$ans"
7184 case "$ans" in
7185 '') ;;
7186 .*) ;;
7187 *) tans=".$tans";;
7188 esac
7189 mydomain="$tans"
7190
7191 : translate upper to lower if necessary
7192 case "$mydomain" in
7193 *[A-Z]*)
7194         echo "(Normalizing case in your domain name)"
7195         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
7196         ;;
7197 esac
7198
7199 : a little sanity check here
7200 case "$phostname" in
7201 '') ;;
7202 *)
7203         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
7204         $myhostname$mydomain|$myhostname) ;;
7205         *)
7206                 case "$phostname" in
7207                 sed*)
7208                         echo "(That doesn't agree with your whoami.h file, by the way.)"
7209                         ;;
7210                 *)
7211                         echo "(That doesn't agree with your $phostname command, by the way.)"
7212                         ;;
7213                 esac
7214         ;;
7215         esac
7216         ;;
7217 esac
7218
7219 $cat <<EOM
7220
7221 I need to get your e-mail address in Internet format if possible, i.e.
7222 something like user@host.domain. Please answer accurately since I have
7223 no easy means to double check it. The default value provided below
7224 is most probably close to reality but may not be valid from outside
7225 your organization...
7226
7227 EOM
7228 cont=x
7229 while test "$cont"; do
7230         case "$cf_email" in
7231         '') dflt="$cf_by@$myhostname$mydomain";;
7232         *) dflt="$cf_email";;
7233         esac
7234         rp='What is your e-mail address?'
7235         . ./myread
7236         cf_email="$ans"
7237         case "$cf_email" in
7238         *@*.*) cont='' ;;
7239         *)
7240                 rp='Address does not look like an Internet one.  Use it anyway?'
7241                 case "$fastread" in
7242                 yes) dflt=y ;;
7243                 *) dflt=n ;;
7244                 esac
7245                 . ./myread
7246                 case "$ans" in
7247                 y*) cont='' ;;
7248                 *) echo " " ;;
7249                 esac
7250                 ;;
7251         esac
7252 done
7253
7254 $cat <<EOM
7255
7256 If you or somebody else will be maintaining perl at your site, please
7257 fill in the correct e-mail address here so that they may be contacted
7258 if necessary. Currently, the "perlbug" program included with perl
7259 will send mail to this address in addition to perlbug@perl.org. You may
7260 enter "none" for no administrator.
7261
7262 EOM
7263 case "$perladmin" in
7264 '') dflt="$cf_email";;
7265 *) dflt="$perladmin";;
7266 esac
7267 rp='Perl administrator e-mail address'
7268 . ./myread
7269 perladmin="$ans"
7270
7271 : figure out how to guarantee perl startup
7272 case "$startperl" in
7273 '')
7274         case "$sharpbang" in
7275         *!)
7276                 $cat <<EOH
7277
7278 I can use the #! construct to start perl on your system. This will
7279 make startup of perl scripts faster, but may cause problems if you
7280 want to share those scripts and perl is not in a standard place
7281 ($binexp/perl) on all your platforms. The alternative is to force
7282 a shell by starting the script with a single ':' character.
7283
7284 EOH
7285                 dflt="$binexp/perl"
7286                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
7287                 . ./myread
7288                 case "$ans" in
7289                 none)   startperl=": # use perl";;
7290                 *)      startperl="#!$ans"
7291                         if $test 30 -lt `echo "$ans" | wc -c`; then
7292                                 $cat >&4 <<EOM
7293
7294 WARNING:  Some systems limit the #! command to 32 characters.
7295 If you experience difficulty running Perl scripts with #!, try
7296 installing Perl in a directory with a shorter pathname.
7297
7298 EOM
7299                         fi ;;
7300                 esac
7301                 ;;
7302         *) startperl=": # use perl"
7303                 ;;
7304         esac
7305         ;;
7306 esac
7307 echo "I'll use $startperl to start perl scripts."
7308
7309 : figure best path for perl in scripts
7310 case "$perlpath" in
7311 '')
7312         perlpath="$binexp/perl"
7313         case "$startperl" in
7314         *!*) ;;
7315         *)
7316                 $cat <<EOH
7317
7318 I will use the "eval 'exec'" idiom to start Perl on your system.
7319 I can use the full path of your Perl binary for this purpose, but
7320 doing so may cause problems if you want to share those scripts and
7321 Perl is not always in a standard place ($binexp/perl).
7322
7323 EOH
7324                 dflt="$binexp/perl"
7325                 rp="What path shall I use in \"eval 'exec'\"?"
7326                 . ./myread
7327                 perlpath="$ans"
7328                 ;;
7329         esac
7330         ;;
7331 esac
7332 case "$startperl" in
7333 *!*)    ;;
7334 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
7335 esac
7336
7337 : determine where public executable scripts go
7338 set scriptdir scriptdir
7339 eval $prefixit
7340 case "$scriptdir" in
7341 '')
7342         dflt="$bin"
7343         : guess some guesses
7344         $test -d /usr/share/scripts && dflt=/usr/share/scripts
7345         $test -d /usr/share/bin     && dflt=/usr/share/bin
7346         $test -d /usr/local/script  && dflt=/usr/local/script
7347         $test -d /usr/local/scripts && dflt=/usr/local/scripts
7348         $test -d $prefixexp/script  && dflt=$prefixexp/script
7349         set dflt
7350         eval $prefixup
7351         ;;
7352 *)  dflt="$scriptdir"
7353         ;;
7354 esac
7355 $cat <<EOM
7356  
7357 Some installations have a separate directory just for executable scripts so
7358 that they can mount it across multiple architectures but keep the scripts in
7359 one spot.  You might, for example, have a subdirectory of /usr/share for this.
7360 Or you might just lump your scripts in with all your other executables.
7361  
7362 EOM
7363 fn=d~
7364 rp='Where do you keep publicly executable scripts?'
7365 . ./getfile
7366 if $test "X$ansexp" != "X$scriptdirexp"; then
7367         installscript=''
7368 fi
7369 scriptdir="$ans"
7370 scriptdirexp="$ansexp"
7371 : Change installation prefix, if necessary.
7372 if $test X"$prefix" != X"$installprefix"; then
7373         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
7374 else
7375         installscript="$scriptdirexp"
7376 fi
7377
7378 : determine where add-on public executables go
7379 case "$sitebin" in
7380 '')     dflt=$siteprefix/bin ;;
7381 *)      dflt=$sitebin ;;
7382 esac
7383 fn=d~
7384 rp='Pathname where the add-on public executables should be installed?'
7385 . ./getfile
7386 sitebin="$ans"
7387 sitebinexp="$ansexp"
7388 : Change installation prefix, if necessary.
7389 if $test X"$prefix" != X"$installprefix"; then
7390         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
7391 else
7392         installsitebin="$sitebinexp"
7393 fi
7394
7395 case "$useperlio" in
7396 $define|true|[yY]*)     dflt='y';;
7397 *) dflt='n';;
7398 esac
7399 cat <<EOM
7400
7401 Previous version of $package used the standard IO mechanisms as defined
7402 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
7403 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
7404 the default.  This abstraction layer can use AT&T's sfio (if you already
7405 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
7406 problems with some extension modules.  Using PerlIO with stdio is safe,
7407 but it is slower than plain stdio and therefore is not the default.
7408
7409 If this doesn't make any sense to you, just accept the default '$dflt'.
7410 EOM
7411 rp='Use the experimental PerlIO abstraction layer?'
7412 . ./myread
7413 case "$ans" in
7414 y|Y) 
7415         val="$define"
7416         ;;     
7417 *)      
7418         echo "Ok, doing things the stdio way"
7419         val="$undef"
7420         ;;
7421 esac
7422 set useperlio
7423 eval $setvar 
7424
7425 case "$vendorprefix" in
7426 '')     d_vendorbin="$undef"
7427         vendorbin=''
7428         vendorbinexp=''
7429         ;;
7430 *)      d_vendorbin="$define"
7431         : determine where vendor-supplied executables go.
7432         case "$vendorbin" in
7433         '') dflt=$vendorprefix/bin ;;
7434         *)      dflt="$vendorbin" ;;
7435         esac
7436         fn=d~+
7437         rp='Pathname for the vendor-supplied executables directory?'
7438         . ./getfile
7439         vendorbin="$ans"
7440         vendorbinexp="$ansexp"
7441         ;;
7442 esac
7443 : Change installation prefix, if necessary.
7444 if $test X"$prefix" != X"$installprefix"; then
7445         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
7446 else
7447         installvendorbin="$vendorbinexp"
7448 fi
7449
7450 : determine whether to only install version-specific parts.
7451 echo " "
7452 $cat <<EOM
7453 Do you want to install only the version-specific parts of the perl
7454 distribution?  Usually you do *not* want to do this.
7455 EOM
7456 case "$versiononly" in
7457 "$define"|[Yy]*|true) dflt='y' ;;
7458 *) dflt='n';
7459 esac
7460 rp="Do you want to install only the version-specific parts of perl?"
7461 . ./myread
7462 case "$ans" in
7463 [yY]*)  val="$define";;
7464 *)      val="$undef" ;;
7465 esac
7466 set versiononly
7467 eval $setvar
7468
7469 : see if qgcvt exists
7470 set qgcvt d_qgcvt
7471 eval $inlibc
7472
7473 echo " "
7474
7475 if $test X"$d_longdbl" = X"$define"; then
7476
7477 echo "Checking how to print long doubles..." >&4
7478
7479 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
7480         $cat >try.c <<'EOCP'
7481 #include <sys/types.h>
7482 #include <stdio.h>
7483 int main() {
7484   double d = 123.456;
7485   printf("%.3f\n", d);
7486 }
7487 EOCP
7488         set try
7489         if eval $compile; then
7490                 yyy=`./try$exe_ext`
7491                 case "$yyy" in
7492                 123.456)
7493                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
7494                         sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
7495                         echo "We will use %f."
7496                         ;;
7497                 esac
7498         fi
7499 fi
7500
7501 if $test X"$sPRIfldbl" = X; then
7502         $cat >try.c <<'EOCP'
7503 #include <sys/types.h>
7504 #include <stdio.h>
7505 int main() {
7506   long double d = 123.456;
7507   printf("%.3llf\n", d);
7508 }
7509 EOCP
7510         set try
7511         if eval $compile; then
7512                 yyy=`./try$exe_ext`
7513                 case "$yyy" in
7514                 123.456)
7515                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
7516                         sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
7517                         echo "We will use %llf."
7518                         ;;
7519                 esac
7520         fi
7521 fi
7522
7523 if $test X"$sPRIfldbl" = X; then
7524         $cat >try.c <<'EOCP'
7525 #include <sys/types.h>
7526 #include <stdio.h>
7527 int main() {
7528   long double d = 123.456;
7529   printf("%.3Lf\n", d);
7530 }
7531 EOCP
7532         set try
7533         if eval $compile; then
7534                 yyy=`./try$exe_ext`
7535                 case "$yyy" in
7536                 123.456)
7537                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
7538                         sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
7539                         echo "We will use %Lf."
7540                         ;;
7541                 esac
7542         fi
7543 fi
7544
7545 if $test X"$sPRIfldbl" = X; then
7546         $cat >try.c <<'EOCP'
7547 #include <sys/types.h>
7548 #include <stdio.h>
7549 int main() {
7550   long double d = 123.456;
7551   printf("%.3lf\n", d);
7552 }
7553 EOCP
7554         set try
7555         if eval $compile; then
7556                 yyy=`./try$exe_ext`
7557                 case "$yyy" in
7558                 123.456)
7559                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
7560                         sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
7561                         echo "We will use %lf."
7562                         ;;
7563                 esac
7564         fi
7565 fi
7566
7567 if $test X"$sPRIfldbl" = X; then
7568         echo "Cannot figure out how to print long doubles." >&4
7569 else
7570         sSCNfldbl=$sPRIfldbl    # expect consistency
7571 fi
7572
7573 $rm -f try try.*
7574
7575 fi # d_longdbl
7576
7577 case "$sPRIfldbl" in
7578 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
7579         d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; 
7580         d_SCNfldbl="$undef";
7581         ;;
7582 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
7583         d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; 
7584         d_SCNfldbl="$define";
7585         ;;
7586 esac
7587
7588 : Check how to convert floats to strings.
7589 echo " "
7590 echo "Checking for an efficient way to convert floats to strings."
7591 echo " " > try.c
7592 case "$uselongdouble" in
7593 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
7594 esac
7595 case "$d_longdbl" in
7596 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
7597 esac
7598 case "$d_PRIgldbl" in
7599 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
7600 esac
7601 $cat >>try.c <<EOP
7602 #ifdef TRY_gconvert
7603 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
7604 char *myname = "gconvert";
7605 #endif
7606 #ifdef TRY_gcvt
7607 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
7608 char *myname = "gcvt";
7609 #endif
7610 #ifdef TRY_qgcvt
7611 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
7612 char *myname = "qgcvt";
7613 #define DOUBLETYPE long double
7614 #endif
7615 #ifdef TRY_sprintf
7616 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
7617 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
7618 #else
7619 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
7620 #endif
7621 char *myname = "sprintf";
7622 #endif
7623
7624 #ifndef DOUBLETYPE
7625 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
7626 #define DOUBLETYPE long double
7627 #else
7628 #define DOUBLETYPE double
7629 #endif
7630 #endif
7631
7632 #include <stdio.h>
7633
7634 #define I_STDLIB $i_stdlib
7635 #ifdef I_STDLIB
7636 #include <stdlib.h>
7637 #endif
7638
7639 int
7640 checkit(expect, got)
7641 char *expect;
7642 char *got;
7643 {
7644     if (strcmp(expect, got)) {
7645                 printf("%s oddity:  Expected %s, got %s\n",
7646                         myname, expect, got);
7647                 exit(1);
7648         }
7649 }
7650
7651 int main()
7652
7653         char buf[64]; 
7654         buf[63] = '\0';
7655
7656         /* This must be 1st test on (which?) platform */
7657         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
7658         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
7659         checkit("0.1", buf);
7660
7661         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
7662         checkit("1", buf);
7663
7664         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
7665         checkit("1.1", buf);
7666
7667         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
7668         checkit("1.01", buf);
7669
7670         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
7671         checkit("1.001", buf);
7672
7673         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
7674         checkit("1.0001", buf);
7675
7676         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
7677         checkit("1.00001", buf);
7678
7679         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
7680         checkit("1.000001", buf);
7681
7682         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
7683         checkit("0", buf);
7684
7685         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
7686         checkit("-1", buf);
7687
7688         /* Some Linux gcvt's give 1.e+5 here. */
7689         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
7690         checkit("100000", buf);
7691         
7692         /* Some Linux gcvt's give -1.e+5 here. */
7693         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
7694         checkit("-100000", buf);
7695
7696         Gconvert((DOUBLETYPE)123.456, 8, 0, buf); 
7697         checkit("123.456", buf);
7698
7699         exit(0);
7700 }
7701 EOP
7702 case "$d_Gconvert" in
7703 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
7704 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
7705 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
7706 *) xxx_list='gconvert gcvt sprintf' ;;
7707 esac
7708
7709 case "$d_longdbl$uselongdouble$d_PRIgldbl" in
7710 "$define$define$define")
7711     # for long doubles prefer first qgcvt, then sprintf
7712     xxx_list="`echo $xxx_list|sed s/sprintf//`" 
7713     xxx_list="sprintf $xxx_list"
7714     case "$d_qgcvt" in
7715     "$define") xxx_list="qgcvt $xxx_list" ;;
7716     esac
7717     ;;
7718 esac
7719
7720 for xxx_convert in $xxx_list; do
7721         echo "Trying $xxx_convert..."
7722         $rm -f try try$_o
7723         set try -DTRY_$xxx_convert
7724         if eval $compile; then
7725                 echo "$xxx_convert() found." >&4
7726                 if ./try; then
7727                         echo "I'll use $xxx_convert to convert floats into a string." >&4
7728                         break;
7729                 else
7730                         echo "...But $xxx_convert didn't work as I expected."
7731                 fi
7732         else
7733                 echo "$xxx_convert NOT found." >&4
7734         fi
7735 done
7736         
7737 case "$xxx_convert" in
7738 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
7739 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
7740 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
7741 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
7742    "$define$define$define")
7743       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
7744    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
7745    esac
7746    ;;  
7747 esac
7748
7749 : Initialize h_fcntl
7750 h_fcntl=false
7751
7752 : Initialize h_sysfile
7753 h_sysfile=false
7754
7755 : access call always available on UNIX
7756 set access d_access
7757 eval $inlibc
7758
7759 : locate the flags for 'access()'
7760 case "$d_access" in
7761 "$define")
7762         echo " "
7763         $cat >access.c <<'EOCP'
7764 #include <sys/types.h>
7765 #ifdef I_FCNTL
7766 #include <fcntl.h>
7767 #endif
7768 #ifdef I_SYS_FILE
7769 #include <sys/file.h>
7770 #endif
7771 #ifdef I_UNISTD
7772 #include <unistd.h>
7773 #endif
7774 int main() {
7775         exit(R_OK);
7776 }
7777 EOCP
7778         : check sys/file.h first, no particular reason here
7779         if $test `./findhdr sys/file.h` && \
7780                 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
7781                 h_sysfile=true;
7782                 echo "<sys/file.h> defines the *_OK access constants." >&4
7783         elif $test `./findhdr fcntl.h` && \
7784                 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
7785                 h_fcntl=true;
7786                 echo "<fcntl.h> defines the *_OK access constants." >&4
7787         elif $test `./findhdr unistd.h` && \
7788                 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
7789                 echo "<unistd.h> defines the *_OK access constants." >&4
7790         else
7791                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
7792         fi
7793         ;;
7794 esac
7795 $rm -f access*
7796
7797 : see if accessx exists
7798 set accessx d_accessx
7799 eval $inlibc
7800
7801 : see if alarm exists
7802 set alarm d_alarm
7803 eval $inlibc
7804
7805 : see if atolf exists
7806 set atolf d_atolf
7807 eval $inlibc
7808
7809 : see if atoll exists
7810 set atoll d_atoll
7811 eval $inlibc
7812
7813 : Look for GNU-cc style attribute checking
7814 echo " "
7815 echo "Checking whether your compiler can handle __attribute__ ..." >&4
7816 $cat >attrib.c <<'EOCP'
7817 #include <stdio.h>
7818 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
7819 EOCP
7820 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
7821         if $contains 'warning' attrib.out >/dev/null 2>&1; then
7822                 echo "Your C compiler doesn't fully support __attribute__."
7823                 val="$undef"
7824         else
7825                 echo "Your C compiler supports __attribute__."
7826                 val="$define"
7827         fi
7828 else
7829         echo "Your C compiler doesn't seem to understand __attribute__ at all."
7830         val="$undef"
7831 fi
7832 set d_attribut
7833 eval $setvar
7834 $rm -f attrib*
7835
7836 : see if bcmp exists
7837 set bcmp d_bcmp
7838 eval $inlibc
7839
7840 : see if bcopy exists
7841 set bcopy d_bcopy
7842 eval $inlibc
7843
7844 : see if this is a unistd.h system
7845 set unistd.h i_unistd
7846 eval $inhdr
7847
7848 : see if getpgrp exists
7849 set getpgrp d_getpgrp
7850 eval $inlibc
7851
7852 case "$d_getpgrp" in
7853 "$define")
7854         echo " "
7855         echo "Checking to see which flavor of getpgrp is in use..."
7856         $cat >set.c <<EOP
7857 #$i_unistd I_UNISTD
7858 #include <sys/types.h>
7859 #ifdef I_UNISTD
7860 #  include <unistd.h>
7861 #endif
7862 int main()
7863 {
7864         if (getuid() == 0) {
7865                 printf("(I see you are running Configure as super-user...)\n");
7866                 setuid(1);
7867         }
7868 #ifdef TRY_BSD_PGRP
7869         if (getpgrp(1) == 0)
7870                 exit(0);
7871 #else
7872         if (getpgrp() > 0)
7873                 exit(0);
7874 #endif
7875         exit(1);
7876 }
7877 EOP
7878         if $cc -o set -DTRY_BSD_PGRP $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
7879                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
7880                 val="$define"
7881         elif $cc -o set $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
7882                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
7883                 val="$undef"
7884         else
7885                 echo "I can't seem to compile and run the test program."
7886                 if ./usg; then
7887                         xxx="a USG one, i.e. you use getpgrp()."
7888                 else
7889                         # SVR4 systems can appear rather BSD-ish.
7890                         case "$i_unistd" in
7891                         $undef)
7892                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
7893                                 val="$define"
7894                                 ;;
7895                         $define)
7896                                 xxx="probably a USG one, i.e. you use getpgrp()."
7897                                 val="$undef"
7898                                 ;;
7899                         esac
7900                 fi
7901                 echo "Assuming your getpgrp is $xxx" >&4
7902         fi
7903         ;;
7904 *) val="$undef";;
7905 esac
7906 set d_bsdgetpgrp
7907 eval $setvar
7908 $rm -f set set.c
7909
7910 : see if setpgrp exists
7911 set setpgrp d_setpgrp
7912 eval $inlibc
7913
7914 case "$d_setpgrp" in
7915 "$define")
7916         echo " "
7917         echo "Checking to see which flavor of setpgrp is in use..."
7918         $cat >set.c <<EOP
7919 #$i_unistd I_UNISTD
7920 #include <sys/types.h>
7921 #ifdef I_UNISTD
7922 #  include <unistd.h>
7923 #endif
7924 int main()
7925 {
7926         if (getuid() == 0) {
7927                 printf("(I see you are running Configure as super-user...)\n");
7928                 setuid(1);
7929         }
7930 #ifdef TRY_BSD_PGRP
7931         if (-1 == setpgrp(1, 1))
7932                 exit(0);
7933 #else
7934         if (setpgrp() != -1)
7935                 exit(0);
7936 #endif
7937         exit(1);
7938 }
7939 EOP
7940         if $cc -o set -DTRY_BSD_PGRP $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
7941                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
7942                 val="$define"
7943         elif $cc -o set $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
7944                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
7945                 val="$undef"
7946         else
7947                 echo "(I can't seem to compile and run the test program.)"
7948                 if ./usg; then
7949                         xxx="a USG one, i.e. you use setpgrp()."
7950                 else
7951                         # SVR4 systems can appear rather BSD-ish.
7952                         case "$i_unistd" in
7953                         $undef)
7954                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
7955                                 val="$define"
7956                                 ;;
7957                         $define)
7958                                 xxx="probably a USG one, i.e. you use setpgrp()."
7959                                 val="$undef"
7960                                 ;;
7961                         esac
7962                 fi
7963                 echo "Assuming your setpgrp is $xxx" >&4
7964         fi
7965         ;;
7966 *) val="$undef";;
7967 esac
7968 set d_bsdsetpgrp
7969 eval $setvar
7970 $rm -f set set.c
7971 : see if bzero exists
7972 set bzero d_bzero
7973 eval $inlibc
7974
7975 : see if signal is declared as pointer to function returning int or void
7976 echo " "
7977 xxx=`./findhdr signal.h`
7978 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
7979 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
7980         echo "You have int (*signal())() instead of void." >&4
7981         val="$undef"
7982 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
7983         echo "You have void (*signal())()." >&4
7984         val="$define"
7985 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
7986         echo "You have int (*signal())() instead of void." >&4
7987         val="$undef"
7988 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
7989         echo "You have void (*signal())()." >&4
7990         val="$define"
7991 else
7992         case "$d_voidsig" in
7993         '')
7994         echo "I can't determine whether signal handler returns void or int..." >&4
7995                 dflt=void
7996                 rp="What type does your signal handler return?"
7997                 . ./myread
7998                 case "$ans" in
7999                 v*) val="$define";;
8000                 *) val="$undef";;
8001                 esac;;
8002         "$define")
8003                 echo "As you already told me, signal handler returns void." >&4
8004                 val="$define"
8005                 ;;
8006         *)      echo "As you already told me, signal handler returns int." >&4
8007                 val="$undef"
8008                 ;;
8009         esac
8010 fi
8011 set d_voidsig
8012 eval $setvar
8013 case "$d_voidsig" in
8014 "$define") signal_t="void";;
8015 *) signal_t="int";;
8016 esac
8017 $rm -f $$.tmp
8018
8019 : check for ability to cast large floats to 32-bit ints.
8020 echo " "
8021 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
8022 if $test "$intsize" -ge 4; then
8023         xxx=int
8024 else
8025         xxx=long
8026 fi
8027 $cat >try.c <<EOCP
8028 #include <stdio.h>
8029 #include <sys/types.h>
8030 #include <signal.h>
8031 $signal_t blech(s) int s; { exit(3); }
8032 int main()
8033 {
8034         $xxx i32;
8035         double f, g;
8036         int result = 0;
8037         char str[16];
8038         signal(SIGFPE, blech);
8039
8040         /* Don't let compiler optimize the test away.  Store the number 
8041            in a writable string for gcc to pass to sscanf under HP/UX.
8042         */
8043         sprintf(str, "2147483647");
8044         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
8045         g = 10 * f;
8046         i32  = ($xxx) g;
8047
8048         /* x86 processors will probably give 0x8000 0000, which is a
8049        sign change.  We don't want that.  We want to mimic SPARC
8050            behavior here, which is to preserve the sign and give
8051            back 0x7fff ffff.
8052         */
8053         if (i32 != ($xxx) f)
8054                 result |= 1;
8055         exit(result);
8056 }
8057 EOCP
8058 set try
8059 if eval $compile_ok; then
8060         ./try
8061         yyy=$?
8062 else
8063         echo "(I can't seem to compile the test program--assuming it can't)"
8064         yyy=1
8065 fi
8066 case "$yyy" in
8067 0)      val="$define"
8068         echo "Yup, it can."
8069         ;;
8070 *)      val="$undef"
8071         echo "Nope, it can't."
8072         ;;
8073 esac
8074 set d_casti32
8075 eval $setvar
8076 $rm -f try try.*
8077
8078 : check for ability to cast negative floats to unsigned
8079 echo " "
8080 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
8081 $cat >try.c <<EOCP
8082 #include <stdio.h>
8083 #include <sys/types.h>
8084 #include <signal.h>
8085 $signal_t blech(s) int s; { exit(7); }
8086 $signal_t blech_in_list(s) int s; { exit(4); }
8087 unsigned long dummy_long(p) unsigned long p; { return p; }
8088 unsigned int dummy_int(p) unsigned int p; { return p; }
8089 unsigned short dummy_short(p) unsigned short p; { return p; }
8090 int main()
8091 {
8092         double f;
8093         unsigned long along;
8094         unsigned int aint;
8095         unsigned short ashort;
8096         int result = 0;
8097         char str[16];
8098         
8099         /* Frustrate gcc-2.7.2's optimizer which failed this test with
8100            a direct f = -123. assignment.  gcc-2.8.0 reportedly
8101            optimized the whole file away
8102         */
8103         /* Store the number in a writable string for gcc to pass to 
8104            sscanf under HP/UX.
8105         */
8106         sprintf(str, "-123");
8107         sscanf(str, "%lf", &f);  /* f = -123.; */
8108
8109         signal(SIGFPE, blech);
8110         along = (unsigned long)f;
8111         aint = (unsigned int)f;
8112         ashort = (unsigned short)f;
8113         if (along != (unsigned long)-123)
8114                 result |= 1;
8115         if (aint != (unsigned int)-123)
8116                 result |= 1;
8117         if (ashort != (unsigned short)-123)
8118                 result |= 1;
8119         sprintf(str, "1073741824.");
8120         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
8121         f = f + f;
8122         along = 0;
8123         along = (unsigned long)f;
8124         if (along != 0x80000000)
8125                 result |= 2;
8126         f -= 1.;
8127         along = 0;
8128         along = (unsigned long)f;
8129         if (along != 0x7fffffff)
8130                 result |= 1;
8131         f += 2.;
8132         along = 0;
8133         along = (unsigned long)f;
8134         if (along != 0x80000001)
8135                 result |= 2;
8136         if (result)
8137                 exit(result);
8138         signal(SIGFPE, blech_in_list);
8139         sprintf(str, "123.");
8140         sscanf(str, "%lf", &f);  /* f = 123.; */
8141         along = dummy_long((unsigned long)f);
8142         aint = dummy_int((unsigned int)f);
8143         ashort = dummy_short((unsigned short)f);
8144         if (along != (unsigned long)123)
8145                 result |= 4;
8146         if (aint != (unsigned int)123)
8147                 result |= 4;
8148         if (ashort != (unsigned short)123)
8149                 result |= 4;
8150         exit(result);
8151
8152 }
8153 EOCP
8154 set try
8155 if eval $compile_ok; then
8156         ./try
8157         castflags=$?
8158 else
8159         echo "(I can't seem to compile the test program--assuming it can't)"
8160         castflags=7
8161 fi
8162 case "$castflags" in
8163 0)      val="$define"
8164         echo "Yup, it can."
8165         ;;
8166 *)      val="$undef"
8167         echo "Nope, it can't."
8168         ;;
8169 esac
8170 set d_castneg
8171 eval $setvar
8172 $rm -f try.*
8173
8174 : see if vprintf exists
8175 echo " "
8176 if set vprintf val -f d_vprintf; eval $csym; $val; then
8177         echo 'vprintf() found.' >&4
8178         val="$define"
8179         $cat >vprintf.c <<'EOF'
8180 #include <varargs.h>
8181
8182 int main() { xxx("foo"); }
8183
8184 xxx(va_alist)
8185 va_dcl
8186 {
8187         va_list args;
8188         char buf[10];
8189
8190         va_start(args);
8191         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
8192 }
8193 EOF
8194         set vprintf
8195         if eval $compile && ./vprintf; then
8196                 echo "Your vsprintf() returns (int)." >&4
8197                 val2="$undef"
8198         else
8199                 echo "Your vsprintf() returns (char*)." >&4
8200                 val2="$define"
8201         fi
8202 else
8203         echo 'vprintf() NOT found.' >&4
8204                 val="$undef"
8205                 val2="$undef"
8206 fi
8207 set d_vprintf
8208 eval $setvar
8209 val=$val2
8210 set d_charvspr
8211 eval $setvar
8212
8213 : see if chown exists
8214 set chown d_chown
8215 eval $inlibc
8216
8217 : see if chroot exists
8218 set chroot d_chroot
8219 eval $inlibc
8220
8221 : see if chsize exists
8222 set chsize d_chsize
8223 eval $inlibc
8224
8225 : check for const keyword
8226 echo " "
8227 echo 'Checking to see if your C compiler knows about "const"...' >&4
8228 $cat >const.c <<'EOCP'
8229 typedef struct spug { int drokk; } spug;
8230 int main()
8231 {
8232         const char *foo;
8233         const spug y;
8234 }
8235 EOCP
8236 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
8237         val="$define"
8238         echo "Yup, it does."
8239 else
8240         val="$undef"
8241         echo "Nope, it doesn't."
8242 fi
8243 set d_const
8244 eval $setvar
8245
8246 : see if crypt exists
8247 echo " "
8248 if set crypt val -f d_crypt; eval $csym; $val; then
8249         echo 'crypt() found.' >&4
8250         val="$define"
8251         cryptlib=''
8252 else
8253         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
8254         if $test -z "$cryptlib"; then
8255                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
8256         else
8257                 cryptlib=-lcrypt
8258         fi
8259         if $test -z "$cryptlib"; then
8260                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
8261         else
8262                 cryptlib=-lcrypt
8263         fi
8264         if $test -z "$cryptlib"; then
8265                 cryptlib=`./loc libcrypt$_a "" $libpth`
8266         else
8267                 cryptlib=-lcrypt
8268         fi
8269         if $test -z "$cryptlib"; then
8270                 echo 'crypt() NOT found.' >&4
8271                 val="$undef"
8272         else
8273                 val="$define"
8274         fi
8275 fi
8276 set d_crypt
8277 eval $setvar
8278
8279 : get csh whereabouts
8280 case "$csh" in
8281 'csh') val="$undef" ;;
8282 *) val="$define" ;;
8283 esac
8284 set d_csh
8285 eval $setvar
8286 : Respect a hint or command line value for full_csh.
8287 case "$full_csh" in
8288 '') full_csh=$csh ;;
8289 esac
8290
8291 : see if cuserid exists
8292 set cuserid d_cuserid
8293 eval $inlibc
8294
8295 : see if this is a limits.h system
8296 set limits.h i_limits
8297 eval $inhdr
8298
8299 : see if this is a float.h system
8300 set float.h i_float
8301 eval $inhdr
8302
8303 : See if number of significant digits in a double precision number is known
8304 echo " "
8305 $cat >dbl_dig.c <<EOM
8306 #$i_limits I_LIMITS
8307 #$i_float I_FLOAT
8308 #ifdef I_LIMITS
8309 #include <limits.h>
8310 #endif
8311 #ifdef I_FLOAT
8312 #include <float.h>
8313 #endif
8314 #ifdef DBL_DIG
8315 printf("Contains DBL_DIG");
8316 #endif
8317 EOM
8318 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
8319 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
8320         echo "DBL_DIG found." >&4
8321         val="$define"
8322 else
8323         echo "DBL_DIG NOT found." >&4
8324         val="$undef"
8325 fi
8326 $rm -f dbl_dig.?
8327 set d_dbl_dig
8328 eval $setvar
8329
8330 : see if difftime exists
8331 set difftime d_difftime
8332 eval $inlibc
8333
8334 : see if this is a dirent system
8335 echo " "
8336 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
8337         val="$define"
8338         echo "<dirent.h> found." >&4
8339 else
8340         val="$undef"
8341         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
8342                 echo "<sys/dir.h> found." >&4
8343                 echo " "
8344         else
8345                 xinc=`./findhdr sys/ndir.h`
8346         fi
8347         echo "<dirent.h> NOT found." >&4
8348 fi
8349 set i_dirent
8350 eval $setvar
8351
8352 : Look for type of directory structure.
8353 echo " "
8354 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8355
8356 case "$direntrytype" in
8357 ''|' ')
8358         case "$i_dirent" in
8359         $define) guess1='struct dirent' ;;
8360         *) guess1='struct direct'  ;;
8361         esac
8362         ;;
8363 *)      guess1="$direntrytype"
8364         ;;
8365 esac
8366
8367 case "$guess1" in
8368 'struct dirent') guess2='struct direct' ;;
8369 *) guess2='struct dirent' ;;
8370 esac
8371                 
8372 if $contains "$guess1" try.c >/dev/null 2>&1; then
8373         direntrytype="$guess1"
8374         echo "Your directory entries are $direntrytype." >&4
8375 elif $contains "$guess2" try.c >/dev/null 2>&1; then
8376         direntrytype="$guess2"
8377         echo "Your directory entries seem to be $direntrytype." >&4
8378 else
8379         echo "I don't recognize your system's directory entries." >&4
8380         rp="What type is used for directory entries on this system?"
8381         dflt="$guess1"
8382         . ./myread
8383         direntrytype="$ans"
8384 fi
8385 $rm -f try.c
8386
8387
8388 : see if the directory entry stores field length
8389 echo " "
8390 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8391 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
8392         echo "Good, your directory entry keeps length information in d_namlen." >&4
8393         val="$define"
8394 else
8395         echo "Your directory entry does not know about the d_namlen field." >&4
8396         val="$undef"
8397 fi
8398 set d_dirnamlen
8399 eval $setvar
8400 $rm -f try.c
8401
8402 : see if dlerror exists
8403 xxx_runnm="$runnm"
8404 runnm=false
8405 set dlerror d_dlerror
8406 eval $inlibc
8407 runnm="$xxx_runnm"
8408
8409 : see if dlfcn is available
8410 set dlfcn.h i_dlfcn
8411 eval $inhdr
8412
8413 case "$usedl" in
8414 $define|y|true)
8415         $cat << EOM
8416
8417 On a few systems, the dynamically loaded modules that perl generates and uses
8418 will need a different extension than shared libs. The default will probably
8419 be appropriate.
8420
8421 EOM
8422         case "$dlext" in
8423         '')     dflt="$so" ;;
8424         *)      dflt="$dlext" ;;
8425         esac
8426         rp='What is the extension of dynamically loaded modules'
8427         . ./myread
8428         dlext="$ans"
8429         ;;
8430 *)
8431         dlext="none"
8432         ;;
8433 esac
8434
8435 : Check if dlsym need a leading underscore
8436 echo " "
8437 val="$undef"
8438
8439 case "$dlsrc" in
8440 dl_dlopen.xs)
8441         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
8442         $cat >dyna.c <<'EOM'
8443 fred () { }
8444 EOM
8445
8446 $cat >fred.c<<EOM
8447
8448 #include <stdio.h>
8449 #$i_dlfcn I_DLFCN
8450 #ifdef I_DLFCN
8451 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
8452 #else
8453 #include <sys/types.h>
8454 #include <nlist.h>
8455 #include <link.h>
8456 #endif
8457
8458 extern int fred() ;
8459
8460 int main()
8461 {
8462     void * handle ;
8463     void * symbol ;
8464 #ifndef RTLD_LAZY
8465     int mode = 1 ;
8466 #else
8467     int mode = RTLD_LAZY ;
8468 #endif
8469     handle = dlopen("./dyna.$dlext", mode) ;
8470     if (handle == NULL) {
8471         printf ("1\n") ;
8472         fflush (stdout) ;
8473         exit(0);
8474     }
8475     symbol = dlsym(handle, "fred") ;
8476     if (symbol == NULL) {
8477         /* try putting a leading underscore */
8478         symbol = dlsym(handle, "_fred") ;
8479         if (symbol == NULL) {
8480             printf ("2\n") ;
8481             fflush (stdout) ;
8482             exit(0);
8483         }
8484         printf ("3\n") ;
8485     }
8486     else
8487         printf ("4\n") ;
8488     fflush (stdout) ;
8489     exit(0);
8490 }
8491 EOM
8492         : Call the object file tmp-dyna.o in case dlext=o.
8493         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
8494                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
8495                 $ld -o dyna.$dlext $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && 
8496                 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
8497                 xxx=`./fred`
8498                 case $xxx in
8499                 1)      echo "Test program failed using dlopen." >&4
8500                         echo "Perhaps you should not use dynamic loading." >&4;;
8501                 2)      echo "Test program failed using dlsym." >&4
8502                         echo "Perhaps you should not use dynamic loading." >&4;;
8503                 3)      echo "dlsym needs a leading underscore" >&4
8504                         val="$define" ;;
8505                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
8506                 esac
8507         else
8508                 echo "I can't compile and run the test program." >&4
8509                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
8510         fi
8511         ;;
8512 esac
8513                 
8514 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
8515
8516 set d_dlsymun
8517 eval $setvar
8518
8519 hasproto='varname=$1; func=$2; shift; shift;
8520 while $test $# -ge 2; do
8521         case "$1" in
8522         $define) echo "#include <$2>";;
8523         esac ;
8524     shift 2;
8525 done > try.c;
8526 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
8527 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
8528         echo "$func() prototype found.";
8529         val="$define";
8530 else
8531         echo "$func() prototype NOT found.";
8532         val="$undef";
8533 fi;
8534 set $varname;
8535 eval $setvar;
8536 $rm -f try.c tryout.c'
8537
8538 : see if prototype for drand48 is available
8539 echo " "
8540 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
8541 eval $hasproto
8542
8543 : see if dup2 exists
8544 set dup2 d_dup2
8545 eval $inlibc
8546
8547 : see if eaccess exists
8548 set eaccess d_eaccess
8549 eval $inlibc
8550
8551 : see if endgrent exists
8552 set endgrent d_endgrent
8553 eval $inlibc
8554
8555 : see if endhostent exists
8556 set endhostent d_endhent
8557 eval $inlibc
8558
8559 : see if endnetent exists
8560 set endnetent d_endnent
8561 eval $inlibc
8562
8563 : see if endprotoent exists
8564 set endprotoent d_endpent
8565 eval $inlibc
8566
8567 : see if endpwent exists
8568 set endpwent d_endpwent
8569 eval $inlibc
8570
8571 : see if endservent exists
8572 set endservent d_endsent
8573 eval $inlibc
8574
8575 : Locate the flags for 'open()'
8576 echo " "
8577 $cat >open3.c <<'EOCP'
8578 #include <sys/types.h>
8579 #ifdef I_FCNTL
8580 #include <fcntl.h>
8581 #endif
8582 #ifdef I_SYS_FILE
8583 #include <sys/file.h>
8584 #endif
8585 int main() {
8586         if(O_RDONLY);
8587 #ifdef O_TRUNC
8588         exit(0);
8589 #else
8590         exit(1);
8591 #endif
8592 }
8593 EOCP
8594 : check sys/file.h first to get FREAD on Sun
8595 if $test `./findhdr sys/file.h` && \
8596                 set open3 -DI_SYS_FILE && eval $compile; then
8597         h_sysfile=true;
8598         echo "<sys/file.h> defines the O_* constants..." >&4
8599         if ./open3; then
8600                 echo "and you have the 3 argument form of open()." >&4
8601                 val="$define"
8602         else
8603                 echo "but not the 3 argument form of open().  Oh, well." >&4
8604                 val="$undef"
8605         fi
8606 elif $test `./findhdr fcntl.h` && \
8607                 set open3 -DI_FCNTL && eval $compile; then
8608         h_fcntl=true;
8609         echo "<fcntl.h> defines the O_* constants..." >&4
8610         if ./open3; then
8611                 echo "and you have the 3 argument form of open()." >&4
8612                 val="$define"
8613         else
8614                 echo "but not the 3 argument form of open().  Oh, well." >&4
8615                 val="$undef"
8616         fi
8617 else
8618         val="$undef"
8619         echo "I can't find the O_* constant definitions!  You got problems." >&4
8620 fi
8621 set d_open3
8622 eval $setvar
8623 $rm -f open3*
8624
8625 : see which of string.h or strings.h is needed
8626 echo " "
8627 strings=`./findhdr string.h`
8628 if $test "$strings" && $test -r "$strings"; then
8629         echo "Using <string.h> instead of <strings.h>." >&4
8630         val="$define"
8631 else
8632         val="$undef"
8633         strings=`./findhdr strings.h`
8634         if $test "$strings" && $test -r "$strings"; then
8635                 echo "Using <strings.h> instead of <string.h>." >&4
8636         else
8637                 echo "No string header found -- You'll surely have problems." >&4
8638         fi
8639 fi
8640 set i_string
8641 eval $setvar
8642 case "$i_string" in
8643 "$undef") strings=`./findhdr strings.h`;;
8644 *)        strings=`./findhdr string.h`;;
8645 esac
8646
8647 : check for non-blocking I/O stuff
8648 case "$h_sysfile" in
8649 true) echo "#include <sys/file.h>" > head.c;;
8650 *)
8651         case "$h_fcntl" in
8652         true) echo "#include <fcntl.h>" > head.c;;
8653         *) echo "#include <sys/fcntl.h>" > head.c;;
8654         esac
8655         ;;
8656 esac
8657 echo " "
8658 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
8659 case "$o_nonblock" in
8660 '')
8661         $cat head.c > try.c
8662         $cat >>try.c <<'EOCP'
8663 #include <stdio.h>
8664 int main() {
8665 #ifdef O_NONBLOCK
8666         printf("O_NONBLOCK\n");
8667         exit(0);
8668 #endif
8669 #ifdef O_NDELAY
8670         printf("O_NDELAY\n");
8671         exit(0);
8672 #endif
8673 #ifdef FNDELAY
8674         printf("FNDELAY\n");
8675         exit(0);
8676 #endif
8677         exit(0);
8678 }
8679 EOCP
8680         set try
8681         if eval $compile_ok; then
8682                 o_nonblock=`./try`
8683                 case "$o_nonblock" in
8684                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
8685                 *) echo "Seems like we can use $o_nonblock.";;
8686                 esac
8687         else
8688                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
8689         fi
8690         ;;
8691 *) echo "Using $hint value $o_nonblock.";;
8692 esac
8693 $rm -f try try.* .out core
8694
8695 echo " "
8696 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
8697 case "$eagain" in
8698 '')
8699         $cat head.c > try.c
8700         $cat >>try.c <<EOCP
8701 #include <errno.h>
8702 #include <sys/types.h>
8703 #include <signal.h>
8704 #include <stdio.h> 
8705 #define MY_O_NONBLOCK $o_nonblock
8706 #ifndef errno  /* XXX need better Configure test */
8707 extern int errno;
8708 #endif
8709 #$i_unistd I_UNISTD
8710 #ifdef I_UNISTD
8711 #include <unistd.h>
8712 #endif
8713 #$i_string I_STRING
8714 #ifdef I_STRING
8715 #include <string.h>
8716 #else
8717 #include <strings.h>
8718 #endif
8719 $signal_t blech(x) int x; { exit(3); }
8720 EOCP
8721         $cat >> try.c <<'EOCP'
8722 int main()
8723 {
8724         int pd[2];
8725         int pu[2];
8726         char buf[1];
8727         char string[100];
8728
8729         pipe(pd);       /* Down: child -> parent */
8730         pipe(pu);       /* Up: parent -> child */
8731         if (0 != fork()) {
8732                 int ret;
8733                 close(pd[1]);   /* Parent reads from pd[0] */
8734                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
8735                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
8736                         exit(1);
8737                 signal(SIGALRM, blech);
8738                 alarm(5);
8739                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
8740                         exit(2);
8741                 sprintf(string, "%d\n", ret);
8742                 write(2, string, strlen(string));
8743                 alarm(0);
8744 #ifdef EAGAIN
8745                 if (errno == EAGAIN) {
8746                         printf("EAGAIN\n");
8747                         goto ok;
8748                 }
8749 #endif
8750 #ifdef EWOULDBLOCK
8751                 if (errno == EWOULDBLOCK)
8752                         printf("EWOULDBLOCK\n");
8753 #endif
8754         ok:
8755                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
8756                 sleep(2);                               /* Give it time to close our pipe */
8757                 alarm(5);
8758                 ret = read(pd[0], buf, 1);      /* Should read EOF */
8759                 alarm(0);
8760                 sprintf(string, "%d\n", ret);
8761                 write(3, string, strlen(string));
8762                 exit(0);
8763         }
8764
8765         close(pd[0]);                   /* We write to pd[1] */
8766         close(pu[1]);                   /* We read from pu[0] */
8767         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
8768         close(pd[1]);                   /* Pipe pd is now fully closed! */
8769         exit(0);                                /* Bye bye, thank you for playing! */
8770 }
8771 EOCP
8772         set try
8773         if eval $compile_ok; then
8774                 echo "$startsh" >mtry
8775                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
8776                 chmod +x mtry
8777                 ./mtry >/dev/null 2>&1
8778                 case $? in
8779                 0) eagain=`$cat try.out`;;
8780                 1) echo "Could not perform non-blocking setting!";;
8781                 2) echo "I did a successful read() for something that was not there!";;
8782                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
8783                 *) echo "Something terribly wrong happened during testing.";;
8784                 esac
8785                 rd_nodata=`$cat try.ret`
8786                 echo "A read() system call with no data present returns $rd_nodata."
8787                 case "$rd_nodata" in
8788                 0|-1) ;;
8789                 *)
8790                         echo "(That's peculiar, fixing that to be -1.)"
8791                         rd_nodata=-1
8792                         ;;
8793                 esac
8794                 case "$eagain" in
8795                 '')
8796                         echo "Forcing errno EAGAIN on read() with no data available."
8797                         eagain=EAGAIN
8798                         ;;
8799                 *)
8800                         echo "Your read() sets errno to $eagain when no data is available."
8801                         ;;
8802                 esac
8803                 status=`$cat try.err`
8804                 case "$status" in
8805                 0) echo "And it correctly returns 0 to signal EOF.";;
8806                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
8807                 *) echo "However, your read() returns '$status' on EOF??";;
8808                 esac
8809                 val="$define"
8810                 if test "$status" = "$rd_nodata"; then
8811                         echo "WARNING: you can't distinguish between EOF and no data!"
8812                         val="$undef"
8813                 fi
8814         else
8815                 echo "I can't compile the test program--assuming errno EAGAIN will do."
8816                 eagain=EAGAIN
8817         fi
8818         set d_eofnblk
8819         eval $setvar
8820         ;;
8821 *)
8822         echo "Using $hint value $eagain."
8823         echo "Your read() returns $rd_nodata when no data is present."
8824         case "$d_eofnblk" in
8825         "$define") echo "And you can see EOF because read() returns 0.";;
8826         "$undef") echo "But you can't see EOF status from read() returned value.";;
8827         *)
8828                 echo "(Assuming you can't see EOF status from read anyway.)"
8829                 d_eofnblk=$undef
8830                 ;;
8831         esac
8832         ;;
8833 esac
8834 $rm -f try try.* .out core head.c mtry
8835
8836 : see if fchmod exists
8837 set fchmod d_fchmod
8838 eval $inlibc
8839
8840 : see if fchown exists
8841 set fchown d_fchown
8842 eval $inlibc
8843
8844 : see if this is an fcntl system
8845 set fcntl d_fcntl
8846 eval $inlibc
8847
8848 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
8849 while $test $# -ge 2; do
8850         case "$1" in
8851         $define) echo "#include <$2>";;
8852         esac ;
8853     shift 2;
8854 done > try.c;
8855 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
8856 set try;
8857 if eval $compile; then
8858         val="$define";
8859 else
8860         val="$undef";
8861 fi;
8862 set $varname;
8863 eval $setvar;
8864 $rm -f try.c try.o'
8865
8866 socketlib=''
8867 sockethdr=''
8868 : see whether socket exists
8869 echo " "
8870 $echo $n "Hmm... $c" >&4
8871 if set socket val -f d_socket; eval $csym; $val; then
8872         echo "Looks like you have Berkeley networking support." >&4
8873         d_socket="$define"
8874         if set setsockopt val -f; eval $csym; $val; then
8875                 d_oldsock="$undef"
8876         else
8877                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
8878                 d_oldsock="$define"
8879         fi
8880 else
8881         if $contains socklib libc.list >/dev/null 2>&1; then
8882                 echo "Looks like you have Berkeley networking support." >&4
8883                 d_socket="$define"
8884                 : we will have to assume that it supports the 4.2 BSD interface
8885                 d_oldsock="$undef"
8886         else
8887                 echo "You don't have Berkeley networking in libc$_a..." >&4
8888                 if test "X$d_socket" = "X$define"; then
8889                    echo "...but you seem to believe that you have sockets." >&4
8890                 else
8891                         for net in net socket
8892                         do
8893                                 if test -f /usr/lib/lib$net$_a; then
8894                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
8895                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
8896                                         if $contains socket libc.list >/dev/null 2>&1; then
8897                                                 d_socket="$define"
8898                                                 socketlib="-l$net"
8899                                                 case "$net" in
8900                                                 net)
8901                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
8902                                                         sockethdr="-I/usr/netinclude"
8903                                                         ;;
8904                                                 esac
8905                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
8906                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
8907                                                         d_oldsock="$undef"
8908                                                 else
8909                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
8910                                                         d_oldsock="$define"
8911                                                 fi
8912                                                 break
8913                                         fi
8914                                 fi
8915                         done
8916                         if test "X$d_socket" != "X$define"; then
8917                            echo "or anywhere else I see." >&4
8918                            d_socket="$undef"
8919                            d_oldsock="$undef"
8920                         fi
8921                 fi
8922         fi
8923 fi
8924
8925 : see if socketpair exists
8926 set socketpair d_sockpair
8927 eval $inlibc
8928
8929
8930 echo " "
8931 echo "Checking the availability of certain socket constants..." >& 4
8932 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
8933         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
8934         $cat >try.c <<EOF
8935 #include <sys/types.h>
8936 #include <sys/socket.h>
8937 int main() {
8938     int i = $ENUM;
8939 }
8940 EOF
8941         val="$undef"
8942         set try; if eval $compile; then
8943                 val="$define"
8944         fi
8945         set d_${enum}; eval $setvar
8946         $rm -f try.c try
8947 done
8948
8949 : see if sys/select.h has to be included
8950 set sys/select.h i_sysselct
8951 eval $inhdr
8952
8953 : see if we should include time.h, sys/time.h, or both
8954 echo " "
8955 if test "X$timeincl" = X; then
8956         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
8957         $echo $n "I'm now running the test program...$c"
8958         $cat >try.c <<'EOCP'
8959 #include <sys/types.h>
8960 #ifdef I_TIME
8961 #include <time.h>
8962 #endif
8963 #ifdef I_SYSTIME
8964 #ifdef SYSTIMEKERNEL
8965 #define KERNEL
8966 #endif
8967 #include <sys/time.h>
8968 #endif
8969 #ifdef I_SYSSELECT
8970 #include <sys/select.h>
8971 #endif
8972 int main()
8973 {
8974         struct tm foo;
8975 #ifdef S_TIMEVAL
8976         struct timeval bar;
8977 #endif
8978 #ifdef S_TIMEZONE
8979         struct timezone tzp;
8980 #endif
8981         if (foo.tm_sec == foo.tm_sec)
8982                 exit(0);
8983 #ifdef S_TIMEVAL
8984         if (bar.tv_sec == bar.tv_sec)
8985                 exit(0);
8986 #endif
8987         exit(1);
8988 }
8989 EOCP
8990         flags=''
8991         for s_timezone in '-DS_TIMEZONE' ''; do
8992         sysselect=''
8993         for s_timeval in '-DS_TIMEVAL' ''; do
8994         for i_systimek in '' '-DSYSTIMEKERNEL'; do
8995         for i_time in '' '-DI_TIME'; do
8996         for i_systime in '-DI_SYSTIME' ''; do
8997                 case "$flags" in
8998                 '') $echo $n ".$c"
8999                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
9000                         if eval $compile; then
9001                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
9002                                 shift
9003                                 flags="$*"
9004                                 echo " "
9005                                 $echo $n "Succeeded with $flags$c"
9006                         fi
9007                         ;;
9008                 esac
9009         done
9010         done
9011         done
9012         done
9013         done
9014         timeincl=''
9015         echo " "
9016         case "$flags" in
9017         *SYSTIMEKERNEL*) i_systimek="$define"
9018                 timeincl=`./findhdr sys/time.h`
9019                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
9020         *) i_systimek="$undef";;
9021         esac
9022         case "$flags" in
9023         *I_TIME*) i_time="$define"
9024                 timeincl=`./findhdr time.h`" $timeincl"
9025                 echo "We'll include <time.h>." >&4;;
9026         *) i_time="$undef";;
9027         esac
9028         case "$flags" in
9029         *I_SYSTIME*) i_systime="$define"
9030                 timeincl=`./findhdr sys/time.h`" $timeincl"
9031                 echo "We'll include <sys/time.h>." >&4;;
9032         *) i_systime="$undef";;
9033         esac
9034         $rm -f try.c try
9035 fi
9036
9037 : check for fd_set items
9038 $cat <<EOM
9039
9040 Checking to see how well your C compiler handles fd_set and friends ...
9041 EOM
9042 $cat >fd_set.c <<EOCP
9043 #$i_systime I_SYS_TIME
9044 #$i_sysselct I_SYS_SELECT
9045 #$d_socket HAS_SOCKET
9046 #include <sys/types.h>
9047 #ifdef HAS_SOCKET
9048 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
9049 #endif
9050 #ifdef I_SYS_TIME
9051 #include <sys/time.h>
9052 #endif
9053 #ifdef I_SYS_SELECT
9054 #include <sys/select.h>
9055 #endif
9056 int main() {
9057         fd_set fds;
9058
9059 #ifdef TRYBITS
9060         if(fds.fds_bits);
9061 #endif
9062
9063 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
9064         exit(0);
9065 #else
9066         exit(1);
9067 #endif
9068 }
9069 EOCP
9070 set fd_set -DTRYBITS
9071 if eval $compile; then
9072         d_fds_bits="$define"
9073         d_fd_set="$define"
9074         echo "Well, your system knows about the normal fd_set typedef..." >&4
9075         if ./fd_set; then
9076                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
9077                 d_fd_macros="$define"
9078         else
9079                 $cat >&4 <<'EOM'
9080 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
9081 EOM
9082                 d_fd_macros="$undef"
9083         fi
9084 else
9085         $cat <<'EOM'
9086 Hmm, your compiler has some difficulty with fd_set.  Checking further...
9087 EOM
9088         set fd_set
9089         if eval $compile; then
9090                 d_fds_bits="$undef"
9091                 d_fd_set="$define"
9092                 echo "Well, your system has some sort of fd_set available..." >&4
9093                 if ./fd_set; then
9094                         echo "and you have the normal fd_set macros." >&4
9095                         d_fd_macros="$define"
9096                 else
9097                         $cat <<'EOM'
9098 but not the normal fd_set macros!  Gross!  More work for me...
9099 EOM
9100                         d_fd_macros="$undef"
9101                 fi
9102         else
9103         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
9104                 d_fd_set="$undef"
9105                 d_fds_bits="$undef"
9106                 d_fd_macros="$undef"
9107         fi
9108 fi
9109 $rm -f fd_set*
9110
9111 : see if fgetpos exists
9112 set fgetpos d_fgetpos
9113 eval $inlibc
9114
9115 : see if flock exists
9116 set flock d_flock
9117 eval $inlibc
9118
9119 : see if fork exists
9120 set fork d_fork
9121 eval $inlibc
9122
9123 : see if pathconf exists
9124 set pathconf d_pathconf
9125 eval $inlibc
9126
9127 : see if fpathconf exists
9128 set fpathconf d_fpathconf
9129 eval $inlibc
9130
9131
9132 : check for fpos64_t
9133 echo " "
9134 echo "Checking to see if you have fpos64_t..." >&4
9135 $cat >try.c <<EOCP
9136 #include <stdio.h>
9137 int main() { fpos64_t x = 7; }
9138 EOCP
9139 set try
9140 if eval $compile; then
9141         val="$define"
9142         echo "You have fpos64_t."
9143 else
9144         val="$undef"
9145         echo "You do not have fpos64_t."
9146         case "$fpossize" in
9147         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
9148         esac
9149 fi
9150 $rm -f try.* try
9151 set d_fpos64_t
9152 eval $setvar
9153
9154 : see if frexpl exists
9155 set frexpl d_frexpl
9156 eval $inlibc
9157
9158 hasstruct='varname=$1; struct=$2; shift; shift;
9159 while $test $# -ge 2; do
9160         case "$1" in
9161         $define) echo "#include <$2>";;
9162         esac ;
9163     shift 2;
9164 done > try.c;
9165 echo "int main () { struct $struct foo; }" >> try.c;
9166 set try;
9167 if eval $compile; then
9168         val="$define";
9169 else
9170         val="$undef";
9171 fi;
9172 set $varname;
9173 eval $setvar;
9174 $rm -f try.c try.o'
9175
9176 : see if this is a sys/param system
9177 set sys/param.h i_sysparam
9178 eval $inhdr
9179
9180 : see if this is a sys/mount.h system
9181 set sys/mount.h i_sysmount
9182 eval $inhdr
9183
9184 : see if sys/types.h has to be included
9185 set sys/types.h i_systypes
9186 eval $inhdr
9187
9188
9189 echo " "
9190 echo "Checking to see if your system supports struct fs_data..." >&4
9191 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
9192 eval $hasstruct
9193 case "$d_fs_data_s" in
9194 "$define")      echo "Yes, it does."   ;;
9195 *)              echo "No, it doesn't." ;;
9196 esac
9197
9198 : see if fseeko exists
9199 set fseeko d_fseeko
9200 eval $inlibc
9201 case "$longsize" in
9202 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
9203 esac
9204
9205 : see if fsetpos exists
9206 set fsetpos d_fsetpos
9207 eval $inlibc
9208
9209
9210 : see if fstatfs exists
9211 set fstatfs d_fstatfs
9212 eval $inlibc
9213
9214
9215 : see if statvfs exists
9216 set statvfs d_statvfs
9217 eval $inlibc
9218
9219 : see if fstatvfs exists
9220 set fstatvfs d_fstatvfs
9221 eval $inlibc
9222
9223
9224 : see if ftello exists
9225 set ftello d_ftello
9226 eval $inlibc
9227 case "$longsize" in
9228 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
9229 esac
9230
9231 : see if getcwd exists
9232 set getcwd d_getcwd
9233 eval $inlibc
9234
9235 : see if getespwnam exists
9236 set getespwnam d_getespwnam
9237 eval $inlibc
9238
9239
9240 : see if getfsstat exists
9241 set getfsstat d_getfsstat
9242 eval $inlibc
9243
9244 : see if getgrent exists
9245 set getgrent d_getgrent
9246 eval $inlibc
9247
9248 : see if gethostbyaddr exists
9249 set gethostbyaddr d_gethbyaddr
9250 eval $inlibc
9251
9252 : see if gethostbyname exists
9253 set gethostbyname d_gethbyname
9254 eval $inlibc
9255
9256 : see if gethostent exists
9257 set gethostent d_gethent
9258 eval $inlibc
9259
9260 : see how we will look up host name
9261 echo " "
9262 call=''
9263 if set gethostname val -f d_gethname; eval $csym; $val; then
9264         echo 'gethostname() found.' >&4
9265         d_gethname="$define"
9266         call=gethostname
9267 fi
9268 if set uname val -f d_uname; eval $csym; $val; then
9269         if ./xenix; then
9270                 $cat <<'EOM'
9271 uname() was found, but you're running xenix, and older versions of xenix
9272 have a broken uname(). If you don't really know whether your xenix is old
9273 enough to have a broken system call, use the default answer.
9274
9275 EOM
9276                 dflt=y
9277                 case "$d_uname" in
9278                 "$define") dflt=n;;
9279                 esac
9280                 rp='Is your uname() broken?'
9281                 . ./myread
9282                 case "$ans" in
9283                 n*) d_uname="$define"; call=uname;;
9284                 esac
9285         else
9286                 echo 'uname() found.' >&4
9287                 d_uname="$define"
9288                 case "$call" in
9289                 '') call=uname ;;
9290                 esac
9291         fi
9292 fi
9293 case "$d_gethname" in
9294 '') d_gethname="$undef";;
9295 esac
9296 case "$d_uname" in
9297 '') d_uname="$undef";;
9298 esac
9299 case "$d_uname$d_gethname" in
9300 *define*)
9301         dflt=n
9302         cat <<EOM
9303  
9304 Every now and then someone has a $call() that lies about the hostname
9305 but can't be fixed for political or economic reasons.  If you wish, I can
9306 pretend $call() isn't there and maybe compute hostname at run-time
9307 thanks to the '$phostname' command.
9308
9309 EOM
9310         rp="Shall I ignore $call() from now on?"
9311         . ./myread
9312         case "$ans" in
9313         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
9314         esac;;
9315 esac
9316 case "$phostname" in
9317 '') aphostname='';;
9318 *) case "$aphostname" in
9319         /*) ;;
9320         *) set X $phostname
9321                 shift
9322                 file=$1
9323                 shift
9324                 file=`./loc $file $file $pth`
9325                 aphostname=`echo $file $*`
9326                 ;;
9327         esac
9328         ;;
9329 esac
9330 case "$d_uname$d_gethname" in
9331 *define*) ;;
9332 *)
9333         case "$phostname" in
9334         '')
9335                 echo "There will be no way for $package to get your hostname." >&4;;
9336         *)
9337         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
9338                 ;;
9339         esac;;
9340 esac
9341 case "$d_phostname" in
9342 '') d_phostname="$undef";;
9343 esac
9344
9345 : see if this is a netdb.h system
9346 set netdb.h i_netdb
9347 eval $inhdr
9348
9349 : see if prototypes for various gethostxxx netdb.h functions are available
9350 echo " "
9351 set d_gethostprotos gethostent $i_netdb netdb.h
9352 eval $hasproto
9353
9354 : see if getlogin exists
9355 set getlogin d_getlogin
9356 eval $inlibc
9357
9358 : see if getmnt exists
9359 set getmnt d_getmnt
9360 eval $inlibc
9361
9362 : see if getmntent exists
9363 set getmntent d_getmntent
9364 eval $inlibc
9365
9366 : see if getnetbyaddr exists
9367 set getnetbyaddr d_getnbyaddr
9368 eval $inlibc
9369
9370 : see if getnetbyname exists
9371 set getnetbyname d_getnbyname
9372 eval $inlibc
9373
9374 : see if getnetent exists
9375 set getnetent d_getnent
9376 eval $inlibc
9377
9378 : see if prototypes for various getnetxxx netdb.h functions are available
9379 echo " "
9380 set d_getnetprotos getnetent $i_netdb netdb.h
9381 eval $hasproto
9382
9383
9384 : see if getprotobyname exists
9385 set getprotobyname d_getpbyname
9386 eval $inlibc
9387
9388 : see if getprotobynumber exists
9389 set getprotobynumber d_getpbynumber
9390 eval $inlibc
9391
9392 : see if getprotoent exists
9393 set getprotoent d_getpent
9394 eval $inlibc
9395
9396 : see if getpgid exists
9397 set getpgid d_getpgid
9398 eval $inlibc
9399
9400 : see if getpgrp2 exists
9401 set getpgrp2 d_getpgrp2
9402 eval $inlibc
9403
9404 : see if getppid exists
9405 set getppid d_getppid
9406 eval $inlibc
9407
9408 : see if getpriority exists
9409 set getpriority d_getprior
9410 eval $inlibc
9411
9412 : see if prototypes for various getprotoxxx netdb.h functions are available
9413 echo " "
9414 set d_getprotoprotos getprotoent $i_netdb netdb.h
9415 eval $hasproto
9416
9417 : see if getprpwnam exists
9418 set getprpwnam d_getprpwnam
9419 eval $inlibc
9420
9421 : see if getpwent exists
9422 set getpwent d_getpwent
9423 eval $inlibc
9424
9425
9426 : see if getservbyname exists
9427 set getservbyname d_getsbyname
9428 eval $inlibc
9429
9430 : see if getservbyport exists
9431 set getservbyport d_getsbyport
9432 eval $inlibc
9433
9434 : see if getservent exists
9435 set getservent d_getsent
9436 eval $inlibc
9437
9438 : see if prototypes for various getservxxx netdb.h functions are available
9439 echo " "
9440 set d_getservprotos getservent $i_netdb netdb.h
9441 eval $hasproto
9442
9443 : see if getspnam exists
9444 set getspnam d_getspnam
9445 eval $inlibc
9446
9447 : see if gettimeofday or ftime exists
9448 set gettimeofday d_gettimeod
9449 eval $inlibc
9450 case "$d_gettimeod" in
9451 "$undef")
9452         set ftime d_ftime 
9453         eval $inlibc
9454         ;;
9455 *)
9456         val="$undef"; set d_ftime; eval $setvar
9457         ;;
9458 esac
9459 case "$d_gettimeod$d_ftime" in
9460 "$undef$undef")
9461         echo " "
9462         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
9463         ;;
9464 esac
9465
9466 : see if this is an grp system
9467 set grp.h i_grp
9468 eval $inhdr
9469
9470 case "$i_grp" in
9471 $define)
9472         xxx=`./findhdr grp.h`
9473         $cppstdin $cppflags $cppminus < $xxx >$$.h
9474
9475         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
9476                 val="$define"
9477         else
9478                 val="$undef"
9479         fi
9480         set d_grpasswd
9481         eval $setvar
9482
9483         $rm -f $$.h
9484         ;;
9485 *)
9486         val="$undef";
9487         set d_grpasswd; eval $setvar
9488         ;;
9489 esac
9490
9491 : see if hasmntopt exists
9492 set hasmntopt d_hasmntopt
9493 eval $inlibc
9494
9495 : see if this is a netinet/in.h or sys/in.h system
9496 set netinet/in.h i_niin sys/in.h i_sysin
9497 eval $inhdr
9498
9499 : see if arpa/inet.h has to be included
9500 set arpa/inet.h i_arpainet
9501 eval $inhdr
9502
9503 : see if htonl --and friends-- exists
9504 val=''
9505 set htonl val
9506 eval $inlibc
9507
9508 : Maybe they are macros.
9509 case "$val" in
9510 $undef)
9511         $cat >htonl.c <<EOM
9512 #include <stdio.h>
9513 #include <sys/types.h>
9514 #$i_niin I_NETINET_IN
9515 #$i_sysin I_SYS_IN
9516 #$i_arpainet I_ARPA_INET
9517 #ifdef I_NETINET_IN
9518 #include <netinet/in.h>
9519 #endif
9520 #ifdef I_SYS_IN
9521 #include <sys/in.h>
9522 #endif
9523 #ifdef I_ARPA_INET
9524 #include <arpa/inet.h>
9525 #endif
9526 #ifdef htonl
9527 printf("Defined as a macro.");
9528 #endif
9529 EOM
9530         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
9531         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
9532                 val="$define"
9533                 echo "But it seems to be defined as a macro." >&4
9534         fi
9535         $rm -f htonl.?
9536         ;;
9537 esac
9538 set d_htonl
9539 eval $setvar
9540
9541 : see if iconv exists
9542 set iconv d_iconv
9543 eval $inlibc
9544
9545 : index or strchr
9546 echo " "
9547 if set index val -f; eval $csym; $val; then
9548         if set strchr val -f d_strchr; eval $csym; $val; then
9549                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
9550                         val="$define"
9551                         vali="$undef"
9552                         echo "strchr() found." >&4
9553                 else
9554                         val="$undef"
9555                         vali="$define"
9556                         echo "index() found." >&4
9557                 fi
9558         else
9559                 val="$undef"
9560                 vali="$define"
9561                 echo "index() found." >&4
9562         fi
9563 else
9564         if set strchr val -f d_strchr; eval $csym; $val; then
9565                 val="$define"
9566                 vali="$undef"
9567                 echo "strchr() found." >&4
9568         else
9569                 echo "No index() or strchr() found!" >&4
9570                 val="$undef"
9571                 vali="$undef"
9572         fi
9573 fi
9574 set d_strchr; eval $setvar
9575 val="$vali"
9576 set d_index; eval $setvar
9577
9578 : check whether inet_aton exists
9579 set inet_aton d_inetaton
9580 eval $inlibc
9581
9582 : see if inttypes.h is available
9583 : we want a real compile instead of Inhdr because some systems
9584 : have an inttypes.h which includes non-existent headers
9585 echo " "
9586 $cat >try.c <<EOCP
9587 #include <inttypes.h>
9588 int main() {
9589         static int32_t foo32 = 0x12345678;
9590 }
9591 EOCP
9592 set try
9593 if eval $compile; then
9594         echo "<inttypes.h> found." >&4
9595         val="$define"
9596 else
9597         echo "<inttypes.h> NOT found." >&4
9598         val="$undef"
9599 fi
9600 $rm -f try.c try
9601 set i_inttypes
9602 eval $setvar
9603
9604 : check for int64_t
9605 echo " "
9606 echo "Checking to see if you have int64_t..." >&4
9607 $cat >try.c <<EOCP
9608 #include <sys/types.h>
9609 #$i_inttypes I_INTTYPES
9610 #ifdef I_INTTYPES
9611 #include <inttypes.h>
9612 #endif
9613 int main() { int64_t x = 7; }
9614 EOCP
9615 set try
9616 if eval $compile; then
9617         val="$define"
9618         echo "You have int64_t."
9619 else
9620         val="$undef"
9621         echo "You do not have int64_t."
9622 fi
9623 $rm -f try try.*
9624 set d_int64_t
9625 eval $setvar
9626
9627 : Look for isascii
9628 echo " "
9629 $cat >isascii.c <<'EOCP'
9630 #include <stdio.h>
9631 #include <ctype.h>
9632 int main() {
9633         int c = 'A';
9634         if (isascii(c))
9635                 exit(0);
9636         else
9637                 exit(1);
9638 }
9639 EOCP
9640 set isascii
9641 if eval $compile; then
9642         echo "isascii() found." >&4
9643         val="$define"
9644 else
9645         echo "isascii() NOT found." >&4
9646         val="$undef"
9647 fi
9648 set d_isascii
9649 eval $setvar
9650 $rm -f isascii*
9651
9652 : see if isnan exists
9653 set isnan d_isnan
9654 eval $inlibc
9655
9656 : see if isnanl exists
9657 set isnanl d_isnanl
9658 eval $inlibc
9659
9660 : see if killpg exists
9661 set killpg d_killpg
9662 eval $inlibc
9663
9664 : see if lchown exists
9665 echo " "
9666 $cat > try.c <<'EOCP'
9667 /* System header to define __stub macros and hopefully few prototypes,
9668     which can conflict with char lchown(); below.  */
9669 #include <assert.h>
9670 /* Override any gcc2 internal prototype to avoid an error.  */
9671 /* We use char because int might match the return type of a gcc2
9672    builtin and then its argument prototype would still apply.  */
9673 char lchown();
9674 int main() {
9675     /*  The GNU C library defines this for functions which it implements
9676         to always fail with ENOSYS.  Some functions are actually named
9677         something starting with __ and the normal name is an alias.  */
9678 #if defined (__stub_lchown) || defined (__stub___lchown)
9679 choke me
9680 #else
9681 lchown();
9682 #endif
9683 ; return 0; }
9684 EOCP
9685 set try
9686 if eval $compile; then
9687     $echo "lchown() found." >&4
9688     val="$define"
9689 else
9690     $echo "lchown() NOT found." >&4
9691     val="$undef"
9692 fi
9693 set d_lchown
9694 eval $setvar
9695
9696 : See if number of significant digits in a double precision number is known
9697 echo " "
9698 $cat >ldbl_dig.c <<EOM
9699 #$i_limits I_LIMITS
9700 #$i_float I_FLOAT
9701 #ifdef I_LIMITS
9702 #include <limits.h>
9703 #endif
9704 #ifdef I_FLOAT
9705 #include <float.h>
9706 #endif
9707 #ifdef LDBL_DIG
9708 printf("Contains LDBL_DIG");
9709 #endif
9710 EOM
9711 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
9712 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
9713         echo "LDBL_DIG found." >&4
9714         val="$define"
9715 else
9716         echo "LDBL_DIG NOT found." >&4
9717         val="$undef"
9718 fi
9719 $rm -f ldbl_dig.?
9720 set d_ldbl_dig
9721 eval $setvar
9722
9723 : see if link exists
9724 set link d_link
9725 eval $inlibc
9726
9727 : see if localeconv exists
9728 set localeconv d_locconv
9729 eval $inlibc
9730
9731 : see if lockf exists
9732 set lockf d_lockf
9733 eval $inlibc
9734
9735 : check for long long
9736 echo " "
9737 echo "Checking to see if you have long long..." >&4
9738 echo 'int main() { long long x = 7; return 0; }' > try.c
9739 set try
9740 if eval $compile; then
9741         val="$define"
9742         echo "You have long long."
9743 else
9744         val="$undef"
9745         echo "You do not have long long."
9746 fi
9747 $rm try.*
9748 set d_longlong
9749 eval $setvar
9750
9751 : check for length of long long
9752 case "${d_longlong}${longlongsize}" in
9753 $define)
9754         echo " "
9755         echo "Checking to see how big your long longs are..." >&4
9756         $cat >try.c <<'EOCP'
9757 #include <stdio.h>
9758 int main()
9759 {
9760     printf("%d\n", (int)sizeof(long long));
9761     return(0);
9762 }
9763 EOCP
9764         set try
9765         if eval $compile_ok; then
9766                 longlongsize=`./try$exe_ext`
9767                 echo "Your long longs are $longlongsize bytes long."
9768         else
9769                 dflt='8'
9770                 echo " "
9771                 echo "(I can't seem to compile the test program.  Guessing...)"
9772                 rp="What is the size of a long long (in bytes)?"
9773                 . ./myread
9774                 longlongsize="$ans"
9775         fi
9776         if $test "X$longsize" = "X$longlongsize"; then
9777                 echo "(That isn't any different from an ordinary long.)"
9778         fi      
9779         ;;
9780 esac
9781 $rm -f try.* try
9782
9783 : see if prototype for lseek is available
9784 echo " "
9785 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
9786 eval $hasproto
9787
9788 : see if lstat exists
9789 set lstat d_lstat
9790 eval $inlibc
9791
9792 : see if madvise exists
9793 set madvise d_madvise
9794 eval $inlibc
9795
9796 : see if mblen exists
9797 set mblen d_mblen
9798 eval $inlibc
9799
9800 : see if mbstowcs exists
9801 set mbstowcs d_mbstowcs
9802 eval $inlibc
9803
9804 : see if mbtowc exists
9805 set mbtowc d_mbtowc
9806 eval $inlibc
9807
9808 : see if memchr exists
9809 set memchr d_memchr
9810 eval $inlibc
9811
9812 : see if memcmp exists
9813 set memcmp d_memcmp
9814 eval $inlibc
9815
9816 : see if memcpy exists
9817 set memcpy d_memcpy
9818 eval $inlibc
9819
9820 : see if memmove exists
9821 set memmove d_memmove
9822 eval $inlibc
9823
9824 : see if memset exists
9825 set memset d_memset
9826 eval $inlibc
9827
9828 : see if mkdir exists
9829 set mkdir d_mkdir
9830 eval $inlibc
9831
9832 : see if mkdtemp exists
9833 set mkdtemp d_mkdtemp
9834 eval $inlibc
9835
9836 : see if mkfifo exists
9837 set mkfifo d_mkfifo
9838 eval $inlibc
9839
9840 : see if mkstemp exists
9841 set mkstemp d_mkstemp
9842 eval $inlibc
9843
9844 : see if mkstemps exists
9845 set mkstemps d_mkstemps
9846 eval $inlibc
9847
9848 : see if mktime exists
9849 set mktime d_mktime
9850 eval $inlibc
9851
9852 : see if this is a sys/mman.h system
9853 set sys/mman.h i_sysmman
9854 eval $inhdr
9855
9856 : see if mmap exists
9857 set mmap d_mmap
9858 eval $inlibc
9859 : see what shmat returns
9860 : default to something harmless
9861 mmaptype='void *'
9862 case "$i_sysmman$d_mmap" in
9863 "$define$define")
9864         $cat >mmap.c <<'END'
9865 #include <sys/mman.h>
9866 void *mmap();
9867 END
9868         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
9869                 mmaptype='void *'
9870         else
9871                 mmaptype='caddr_t'
9872         fi
9873         echo "and it returns ($mmaptype)." >&4
9874         ;;
9875 esac
9876
9877
9878
9879 : see if modfl exists
9880 set modfl d_modfl
9881 eval $inlibc
9882
9883 : see if mprotect exists
9884 set mprotect d_mprotect
9885 eval $inlibc
9886
9887 : see if msgctl exists
9888 set msgctl d_msgctl
9889 eval $inlibc
9890
9891 : see if msgget exists
9892 set msgget d_msgget
9893 eval $inlibc
9894
9895 : see if msgsnd exists
9896 set msgsnd d_msgsnd
9897 eval $inlibc
9898
9899 : see if msgrcv exists
9900 set msgrcv d_msgrcv
9901 eval $inlibc
9902
9903 : see how much of the 'msg*(2)' library is present.
9904 h_msg=true
9905 echo " "
9906 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
9907 *"$undef"*) h_msg=false;;
9908 esac
9909 case "$osname" in
9910 freebsd)
9911     case "`ipcs 2>&1`" in
9912     "SVID messages"*"not configured"*)
9913         echo "Your $osname does not have the msg*(2) configured." >&4
9914         h_msg=false
9915         val="$undef"
9916         set msgctl d_msgctl
9917         eval $setvar
9918         set msgget d_msgget
9919         eval $setvar
9920         set msgsnd d_msgsnd
9921         eval $setvar
9922         set msgrcv d_msgrcv
9923         eval $setvar
9924         ;;
9925     esac
9926     ;;
9927 esac
9928 : we could also check for sys/ipc.h ...
9929 if $h_msg && $test `./findhdr sys/msg.h`; then
9930         echo "You have the full msg*(2) library." >&4
9931         val="$define"
9932 else
9933         echo "You don't have the full msg*(2) library." >&4
9934         val="$undef"
9935 fi
9936 set d_msg
9937 eval $setvar
9938
9939 : see if msync exists
9940 set msync d_msync
9941 eval $inlibc
9942
9943 : see if munmap exists
9944 set munmap d_munmap
9945 eval $inlibc
9946
9947 : see if nice exists
9948 set nice d_nice
9949 eval $inlibc
9950
9951
9952 echo " "
9953 echo "Checking which 64-bit integer type we could use..." >&4
9954
9955 case "$intsize" in
9956 8) val=int
9957    set quadtype
9958    eval $setvar
9959    val='"unsigned int"'
9960    set uquadtype
9961    eval $setvar
9962    quadkind=1
9963    ;;
9964 *) case "$longsize" in
9965    8) val=long
9966       set quadtype
9967       eval $setvar
9968       val='"unsigned long"'
9969       set uquadtype
9970       eval $setvar
9971       quadkind=2
9972       ;;
9973    *) case "$d_longlong:$longlongsize" in
9974       define:8)
9975         val='"long long"'
9976         set quadtype
9977         eval $setvar
9978         val='"unsigned long long"'
9979         set uquadtype
9980         eval $setvar
9981         quadkind=3
9982         ;;
9983       *) case "$d_int64_t" in
9984          define)
9985            val=int64_t
9986            set quadtype
9987            eval $setvar
9988            val=uint64_t
9989            set uquadtype
9990            eval $setvar
9991            quadkind=4
9992            ;;
9993          esac
9994          ;;
9995       esac
9996       ;;
9997    esac
9998    ;;
9999 esac
10000
10001 case "$quadtype" in
10002 '')     echo "Alas, no 64-bit integer types in sight." >&4
10003         d_quad="$undef"
10004         ;;
10005 *)      if test X"$use64bitint" = Xdefine -o X"$longsize" = X8; then
10006             verb="will"
10007         else
10008             verb="could"
10009         fi
10010         echo "We $verb use '$quadtype' for 64-bit integers." >&4
10011         d_quad="$define"
10012         ;;
10013 esac
10014
10015 : check for length of character
10016 echo " "
10017 case "$charsize" in
10018 '')
10019         echo "Checking to see how big your characters are (hey, you never know)..." >&4
10020         $cat >try.c <<'EOCP'
10021 #include <stdio.h>
10022 int main()
10023 {
10024     printf("%d\n", (int)sizeof(char));
10025     exit(0);
10026 }
10027 EOCP
10028         set try
10029         if eval $compile_ok; then
10030                 dflt=`./try`
10031         else
10032                 dflt='1'
10033                 echo "(I can't seem to compile the test program.  Guessing...)"
10034         fi
10035         ;;
10036 *)
10037         dflt="$charsize"
10038         ;;
10039 esac
10040 rp="What is the size of a character (in bytes)?"
10041 . ./myread
10042 charsize="$ans"
10043 $rm -f try.c try
10044
10045
10046 echo " "
10047 $echo "Choosing the C types to be used for Perl's internal types..." >&4
10048
10049 case "$use64bitint:$d_quad:$quadtype" in
10050 define:define:?*)
10051         ivtype="$quadtype"
10052         uvtype="$uquadtype"
10053         ivsize=8
10054         uvsize=8
10055         ;;
10056 *)      ivtype="long"
10057         uvtype="unsigned long"
10058         ivsize=$longsize
10059         uvsize=$longsize
10060         ;;
10061 esac
10062
10063 case "$uselongdouble:$d_longdbl" in
10064 define:define)
10065         nvtype="long double"
10066         nvsize=$longdblsize
10067         ;;
10068 *)      nvtype=double
10069         nvsize=$doublesize
10070         ;;
10071 esac
10072
10073 $echo "(IV will be "$ivtype", $ivsize bytes)"
10074 $echo "(UV will be "$uvtype", $uvsize bytes)"
10075 $echo "(NV will be "$nvtype", $nvsize bytes)"
10076
10077 $cat >try.c <<EOCP
10078 #$i_inttypes I_INTTYPES
10079 #ifdef I_INTTYPES
10080 #include <inttypes.h>
10081 #endif
10082 #include <stdio.h>
10083 int main() {
10084 #ifdef INT8
10085    int8_t i =  INT8_MAX;
10086   uint8_t u = UINT8_MAX;
10087   printf("int8_t\n");
10088 #endif
10089 #ifdef INT16
10090    int16_t i =  INT16_MAX;
10091   uint16_t i = UINT16_MAX;
10092   printf("int16_t\n");
10093 #endif
10094 #ifdef INT32
10095    int32_t i =  INT32_MAX;
10096   uint32_t u = UINT32_MAX;
10097   printf("int32_t\n");
10098 #endif
10099 }
10100 EOCP
10101
10102 case "$i8type" in
10103 '')     case "$charsize" in
10104         1)      i8type=char
10105                 u8type="unsigned char"
10106                 i8size=$charsize
10107                 u8size=$charsize
10108                 ;;
10109         esac
10110         ;;
10111 esac
10112 case "$i8type" in
10113 '')     set try -DINT8
10114         if eval $compile; then
10115                 case "`./try$exe_ext`" in
10116                 int8_t) i8type=int8_t
10117                         u8type=uint8_t
10118                         i8size=1
10119                         u8size=1
10120                         ;;
10121                 esac
10122         fi
10123         ;;
10124 esac
10125 case "$i8type" in
10126 '')     if $test $charsize -ge 1; then
10127                 i8type=char
10128                 u8type="unsigned char"
10129                 i8size=$charsize
10130                 u8size=$charsize
10131         fi
10132         ;;
10133 esac
10134
10135 case "$i16type" in
10136 '')     case "$shortsize" in
10137         2)      i16type=short
10138                 u16type="unsigned short"
10139                 i16size=$shortsize
10140                 u16size=$shortsize
10141                 ;;
10142         esac
10143         ;;
10144 esac
10145 case "$i16type" in
10146 '')     set try -DINT16
10147         if eval $compile; then
10148                 case "`./try$exe_ext`" in
10149                 int16_t)
10150                         i16type=int16_t
10151                         u16type=uint16_t
10152                         i16size=2
10153                         u16size=2
10154                         ;;
10155                 esac
10156         fi
10157         ;;
10158 esac
10159 case "$i16type" in
10160 '')     if $test $shortsize -ge 2; then
10161                 i16type=short
10162                 u16type="unsigned short"
10163                 i16size=$shortsize
10164                 u16size=$shortsize
10165         fi
10166         ;;
10167 esac
10168
10169 case "$i32type" in
10170 '')     case "$longsize" in
10171         4)      i32type=long
10172                 u32type="unsigned long"
10173                 i32size=$longsize
10174                 u32size=$longsize
10175                 ;;
10176         *)      case "$intsize" in
10177                 4)      i32type=int
10178                         u32type="unsigned int"
10179                         i32size=$intsize
10180                         u32size=$intsize
10181                         ;;
10182                 esac
10183                 ;;
10184         esac
10185         ;;
10186 esac
10187 case "$i32type" in
10188 '')     set try -DINT32
10189         if eval $compile; then
10190                 case "`./try$exe_ext`" in
10191                 int32_t)
10192                         i32type=int32_t
10193                         u32type=uint32_t
10194                         i32size=4
10195                         u32size=4
10196                         ;;
10197                 esac
10198         fi
10199         ;;
10200 esac
10201 case "$i32type" in
10202 '')     if $test $intsize -ge 4; then
10203                 i32type=int
10204                 u32type="unsigned int"
10205                 i32size=$intsize
10206                 u32size=$intsize
10207         fi
10208         ;;
10209 esac
10210
10211 case "$i64type" in
10212 '')     case "$d_quad:$quadtype" in
10213         define:?*)
10214                 i64type="$quadtype"
10215                 u64type="$uquadtype"
10216                 i64size=8
10217                 u64size=8
10218                 ;;
10219         esac
10220         ;;
10221 esac
10222
10223 $echo "Checking whether your NVs can preserve your UVs..." >&4
10224 $cat <<EOP >try.c
10225 #include <stdio.h>
10226 int main() {
10227     $uvtype k = ($uvtype)~0, l;
10228     $nvtype d;
10229     l = k;
10230     d = ($nvtype)l;
10231     l = ($uvtype)d;
10232     if (l == k)
10233        printf("preserve\n");
10234     exit(0);
10235 }
10236 EOP
10237 set try
10238 if eval $compile; then
10239         case "`./try$exe_ext`" in
10240         preserve) d_nv_preserves_uv="$define" ;;
10241         esac
10242 fi      
10243 case "$d_nv_preserves_uv" in
10244 $define) $echo "Yes, they can."  2>&1 ;;
10245 *)       $echo "No, they can't." 2>&1
10246          d_nv_preserves_uv="$undef"
10247          ;;
10248 esac
10249
10250 $rm -f try.* try
10251
10252 case "$d_nv_preserves_uv" in
10253 "$define") d_nv_preserves_uv_bits=`expr $uvsize \* 8` ;;
10254 *)      $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
10255         $cat <<EOP >try.c
10256 #include <stdio.h>
10257 int main() {
10258     $uvtype u = 0;
10259     int     n = 8 * $uvsize;
10260     int     i;
10261     for (i = 0; i < n; i++) {
10262       u = u << 1 | ($uvtype)1;
10263       if (($uvtype)($nvtype)u != u)
10264         break;
10265     }
10266     printf("%d\n", i);
10267     exit(0);
10268 }
10269 EOP
10270         set try
10271         if eval $compile; then
10272                 d_nv_preserves_uv_bits="`./try$exe_ext`"
10273         fi
10274         case "$d_nv_preserves_uv_bits" in
10275         [1-9]*) $echo "Your NVs can preserve $d_nv_preserves_uv_bits bits of your UVs."  2>&1 ;;
10276         *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
10277                 d_nv_preserves_uv_bits="$undef"
10278                 ;;
10279         esac
10280         $rm -f try.* try
10281         ;;
10282 esac
10283
10284
10285 : check for off64_t
10286 echo " "
10287 echo "Checking to see if you have off64_t..." >&4
10288 $cat >try.c <<EOCP
10289 #include <sys/types.h>
10290 #include <unistd.h>
10291 int main() { off64_t x = 7; }
10292 EOCP
10293 set try
10294 if eval $compile; then
10295         val="$define"
10296         echo "You have off64_t."
10297 else
10298         val="$undef"
10299         echo "You do not have off64_t."
10300         case "$lseeksize" in
10301         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
10302         esac
10303 fi
10304 $rm -f try.* try
10305 set d_off64_t
10306 eval $setvar
10307
10308 : see if POSIX threads are available
10309 set pthread.h i_pthread
10310 eval $inhdr
10311
10312
10313
10314
10315 : how to create joinable pthreads
10316 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
10317         echo " "
10318         echo "Checking what constant to use for creating joinable pthreads..." >&4 
10319         $cat >try.c <<'EOCP'
10320 #include <pthread.h>
10321 int main() {
10322     int detachstate = JOINABLE;
10323 }
10324 EOCP
10325         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
10326         if eval $compile; then
10327                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
10328                 val="$undef" # Yes, undef.
10329                 set d_old_pthread_create_joinable
10330                 eval $setvar
10331                 val=""
10332                 set old_pthread_create_joinable
10333                 eval $setvar
10334         else
10335                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
10336                 if eval $compile; then
10337                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
10338                         val="$define"
10339                         set d_old_pthread_create_joinable
10340                         eval $setvar
10341                         val=PTHREAD_CREATE_UNDETACHED
10342                         set old_pthread_create_joinable
10343                         eval $setvar
10344                 else            
10345                         set try -DJOINABLE=__UNDETACHED
10346                         if eval $compile; then
10347                                 echo "You seem to use __UNDETACHED." >&4
10348                                 val="$define"
10349                                 set d_old_pthread_create_joinable
10350                                 eval $setvar
10351                                 val=__UNDETACHED
10352                                 set old_pthread_create_joinable
10353                                 eval $setvar
10354                         else
10355                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
10356                                 val="$define"
10357                                 set d_old_pthread_create_joinable
10358                                 eval $setvar
10359                                 val=0
10360                                 set old_pthread_create_joinable
10361                                 eval $setvar
10362                         fi
10363                 fi
10364         fi
10365         $rm -f try try.*
10366 else
10367     d_old_pthread_create_joinable="$undef"
10368     old_pthread_create_joinable=""
10369 fi
10370
10371 : see if pause exists
10372 set pause d_pause
10373 eval $inlibc
10374
10375 : see if pipe exists
10376 set pipe d_pipe
10377 eval $inlibc
10378
10379 : see if poll exists
10380 set poll d_poll
10381 eval $inlibc
10382
10383
10384 : see whether the various POSIXish _yields exist
10385 $cat >try.c <<EOP
10386 #include <pthread.h>
10387 #include <stdio.h>
10388 int main() {
10389 #ifdef SCHED_YIELD
10390         sched_yield();
10391 #else
10392 #ifdef PTHREAD_YIELD
10393         pthread_yield();
10394 #else
10395 #ifdef PTHREAD_YIELD_NULL
10396         pthread_yield(NULL);
10397 #endif
10398 #endif
10399 #endif
10400 }
10401 EOP
10402 : see if sched_yield exists
10403 set try -DSCHED_YIELD
10404 if eval $compile; then
10405     val="$define"
10406     sched_yield='sched_yield()'
10407 else
10408     val="$undef"
10409 fi
10410 case "$usethreads" in
10411 $define)
10412         case "$val" in
10413         $define) echo 'sched_yield() found.' >&4        ;;
10414         *)       echo 'sched_yield() NOT found.' >&4    ;;
10415         esac
10416 esac
10417 set d_sched_yield
10418 eval $setvar
10419
10420 : see if pthread_yield exists
10421 set try -DPTHREAD_YIELD
10422 if eval $compile; then
10423     val="$define"
10424     case "$sched_yield" in
10425     '') sched_yield='pthread_yield()' ;;
10426     esac
10427 else
10428     set try -DPTHREAD_YIELD_NULL
10429     if eval $compile; then
10430         val="$define"
10431         case "$sched_yield" in
10432         '') sched_yield='pthread_yield(NULL)' ;;
10433         esac
10434     else
10435         val="$undef"
10436     fi
10437 fi
10438 case "$usethreads" in
10439 $define)
10440         case "$val" in
10441         $define) echo 'pthread_yield() found.' >&4      ;;
10442         *)       echo 'pthread_yield() NOT found.' >&4  ;;
10443         esac
10444         ;;
10445 esac
10446 set d_pthread_yield
10447 eval $setvar
10448
10449 case "$sched_yield" in
10450 '') sched_yield=undef ;;
10451 esac
10452
10453 $rm -f try try.*
10454
10455 : see if this is a pwd.h system
10456 set pwd.h i_pwd
10457 eval $inhdr
10458
10459 case "$i_pwd" in
10460 $define)
10461         xxx=`./findhdr pwd.h`
10462         $cppstdin $cppflags $cppminus < $xxx >$$.h
10463
10464         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
10465                 val="$define"
10466         else
10467                 val="$undef"
10468         fi
10469         set d_pwquota
10470         eval $setvar
10471
10472         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
10473                 val="$define"
10474         else
10475                 val="$undef"
10476         fi
10477         set d_pwage
10478         eval $setvar
10479
10480         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
10481                 val="$define"
10482         else
10483                 val="$undef"
10484         fi
10485         set d_pwchange
10486         eval $setvar
10487
10488         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
10489                 val="$define"
10490         else
10491                 val="$undef"
10492         fi
10493         set d_pwclass
10494         eval $setvar
10495
10496         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
10497                 val="$define"
10498         else
10499                 val="$undef"
10500         fi
10501         set d_pwexpire
10502         eval $setvar
10503
10504         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
10505                 val="$define"
10506         else
10507                 val="$undef"
10508         fi
10509         set d_pwcomment
10510         eval $setvar
10511
10512         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
10513                 val="$define"
10514         else
10515                 val="$undef"
10516         fi
10517         set d_pwgecos
10518         eval $setvar
10519
10520         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
10521                 val="$define"
10522         else
10523                 val="$undef"
10524         fi
10525         set d_pwpasswd
10526         eval $setvar
10527
10528         $rm -f $$.h
10529         ;;
10530 *)
10531         val="$undef"; 
10532         set d_pwquota; eval $setvar
10533         set d_pwage; eval $setvar
10534         set d_pwchange; eval $setvar
10535         set d_pwclass; eval $setvar
10536         set d_pwexpire; eval $setvar
10537         set d_pwcomment; eval $setvar
10538         set d_pwgecos; eval $setvar
10539         set d_pwpasswd; eval $setvar
10540         ;;
10541 esac
10542
10543 : see if readdir and friends exist
10544 set readdir d_readdir
10545 eval $inlibc
10546 set seekdir d_seekdir
10547 eval $inlibc
10548 set telldir d_telldir
10549 eval $inlibc
10550 set rewinddir d_rewinddir
10551 eval $inlibc
10552
10553 : see if readlink exists
10554 set readlink d_readlink
10555 eval $inlibc
10556
10557 : see if rename exists
10558 set rename d_rename
10559 eval $inlibc
10560
10561 : see if rmdir exists
10562 set rmdir d_rmdir
10563 eval $inlibc
10564
10565 : see if memory.h is available.
10566 val=''
10567 set memory.h val
10568 eval $inhdr
10569
10570 : See if it conflicts with string.h
10571 case "$val" in
10572 $define)
10573         case "$strings" in
10574         '') ;;
10575         *)
10576                 $cppstdin $cppflags $cppminus < $strings > mem.h
10577                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
10578                         echo " "
10579                         echo "We won't be including <memory.h>."
10580                         val="$undef"
10581                 fi
10582                 $rm -f mem.h
10583                 ;;
10584         esac
10585 esac
10586 set i_memory
10587 eval $setvar
10588
10589 : can bcopy handle overlapping blocks?
10590 val="$undef"
10591 case "$d_bcopy" in
10592 "$define")
10593         echo " "
10594         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
10595         $cat >try.c <<EOCP
10596 #$i_memory I_MEMORY
10597 #$i_stdlib I_STDLIB
10598 #$i_string I_STRING
10599 #$i_unistd I_UNISTD
10600 EOCP
10601         $cat >>try.c <<'EOCP'
10602 #include <stdio.h>
10603 #ifdef I_MEMORY
10604 #  include <memory.h>
10605 #endif
10606 #ifdef I_STDLIB
10607 #  include <stdlib.h>
10608 #endif
10609 #ifdef I_STRING
10610 #  include <string.h>
10611 #else
10612 #  include <strings.h>
10613 #endif
10614 #ifdef I_UNISTD
10615 #  include <unistd.h>  /* Needed for NetBSD */
10616 #endif
10617 int main()
10618 {
10619 char buf[128], abc[128];
10620 char *b;
10621 int len;
10622 int off;
10623 int align;
10624
10625 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
10626
10627 for (align = 7; align >= 0; align--) {
10628         for (len = 36; len; len--) {
10629                 b = buf+align;
10630                 bcopy(abc, b, len);
10631                 for (off = 1; off <= len; off++) {
10632                         bcopy(b, b+off, len);
10633                         bcopy(b+off, b, len);
10634                         if (bcmp(b, abc, len))
10635                                 exit(1);
10636                 }
10637         }
10638 }
10639 exit(0);
10640 }
10641 EOCP
10642         set try
10643         if eval $compile_ok; then
10644                 if ./try 2>/dev/null; then
10645                         echo "Yes, it can."
10646                         val="$define"
10647                 else
10648                         echo "It can't, sorry."
10649                         case "$d_memmove" in
10650                         "$define") echo "But that's Ok since you have memmove()." ;;
10651                         esac
10652                 fi
10653         else
10654                 echo "(I can't compile the test program, so we'll assume not...)"
10655                 case "$d_memmove" in
10656                 "$define") echo "But that's Ok since you have memmove()." ;;
10657                 esac
10658         fi
10659         ;;
10660 esac
10661 $rm -f try.* try core
10662 set d_safebcpy
10663 eval $setvar
10664
10665 : can memcpy handle overlapping blocks?
10666 val="$undef"
10667 case "$d_memcpy" in
10668 "$define")
10669         echo " "
10670         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
10671         $cat >try.c <<EOCP
10672 #$i_memory I_MEMORY
10673 #$i_stdlib I_STDLIB
10674 #$i_string I_STRING
10675 #$i_unistd I_UNISTD
10676 EOCP
10677         $cat >>try.c <<'EOCP'
10678 #include <stdio.h>
10679 #ifdef I_MEMORY
10680 #  include <memory.h>
10681 #endif
10682 #ifdef I_STDLIB
10683 #  include <stdlib.h>
10684 #endif
10685 #ifdef I_STRING
10686 #  include <string.h>
10687 #else
10688 #  include <strings.h>
10689 #endif
10690 #ifdef I_UNISTD
10691 #  include <unistd.h>  /* Needed for NetBSD */
10692 #endif
10693 int main()
10694 {
10695 char buf[128], abc[128];
10696 char *b;
10697 int len;
10698 int off;
10699 int align;
10700
10701 /* Copy "abcde..." string to char abc[] so that gcc doesn't
10702    try to store the string in read-only memory. */
10703 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
10704
10705 for (align = 7; align >= 0; align--) {
10706         for (len = 36; len; len--) {
10707                 b = buf+align;
10708                 memcpy(b, abc, len);
10709                 for (off = 1; off <= len; off++) {
10710                         memcpy(b+off, b, len);
10711                         memcpy(b, b+off, len);
10712                         if (memcmp(b, abc, len))
10713                                 exit(1);
10714                 }
10715         }
10716 }
10717 exit(0);
10718 }
10719 EOCP
10720         set try
10721         if eval $compile_ok; then
10722                 if ./try 2>/dev/null; then
10723                         echo "Yes, it can."
10724                         val="$define"
10725                 else
10726                         echo "It can't, sorry."
10727                         case "$d_memmove" in
10728                         "$define") echo "But that's Ok since you have memmove()." ;;
10729                         esac
10730                 fi
10731         else
10732                 echo "(I can't compile the test program, so we'll assume not...)"
10733                 case "$d_memmove" in
10734                 "$define") echo "But that's Ok since you have memmove()." ;;
10735                 esac
10736         fi
10737         ;;
10738 esac
10739 $rm -f try.* try core
10740 set d_safemcpy
10741 eval $setvar
10742
10743 : can memcmp be trusted to compare relative magnitude?
10744 val="$undef"
10745 case "$d_memcmp" in
10746 "$define")
10747         echo " "
10748         echo "Checking if your memcmp() can compare relative magnitude..." >&4
10749         $cat >try.c <<EOCP
10750 #$i_memory I_MEMORY
10751 #$i_stdlib I_STDLIB
10752 #$i_string I_STRING
10753 #$i_unistd I_UNISTD
10754 EOCP
10755         $cat >>try.c <<'EOCP'
10756 #include <stdio.h>
10757 #ifdef I_MEMORY
10758 #  include <memory.h>
10759 #endif
10760 #ifdef I_STDLIB
10761 #  include <stdlib.h>
10762 #endif
10763 #ifdef I_STRING
10764 #  include <string.h>
10765 #else
10766 #  include <strings.h>
10767 #endif
10768 #ifdef I_UNISTD
10769 #  include <unistd.h>  /* Needed for NetBSD */
10770 #endif
10771 int main()
10772 {
10773 char a = -1;
10774 char b = 0;
10775 if ((a < b) && memcmp(&a, &b, 1) < 0)
10776         exit(1);
10777 exit(0);
10778 }
10779 EOCP
10780         set try
10781         if eval $compile_ok; then
10782                 if ./try 2>/dev/null; then
10783                         echo "Yes, it can."
10784                         val="$define"
10785                 else
10786                         echo "No, it can't (it uses signed chars)."
10787                 fi
10788         else
10789                 echo "(I can't compile the test program, so we'll assume not...)"
10790         fi
10791         ;;
10792 esac
10793 $rm -f try.* try core
10794 set d_sanemcmp
10795 eval $setvar
10796
10797 : see if select exists
10798 set select d_select
10799 eval $inlibc
10800
10801 : see if semctl exists
10802 set semctl d_semctl
10803 eval $inlibc
10804
10805 : see if semget exists
10806 set semget d_semget
10807 eval $inlibc
10808
10809 : see if semop exists
10810 set semop d_semop
10811 eval $inlibc
10812
10813 : see how much of the 'sem*(2)' library is present.
10814 h_sem=true
10815 echo " "
10816 case "$d_semctl$d_semget$d_semop" in
10817 *"$undef"*) h_sem=false;;
10818 esac
10819 case "$osname" in
10820 freebsd)
10821     case "`ipcs 2>&1`" in
10822     "SVID messages"*"not configured"*)
10823         echo "Your $osname does not have the sem*(2) configured." >&4
10824         h_sem=false
10825         val="$undef"
10826         set semctl d_semctl
10827         eval $setvar
10828         set semget d_semget
10829         eval $setvar
10830         set semop d_semop
10831         eval $setvar
10832         ;;
10833     esac
10834     ;;
10835 esac
10836 : we could also check for sys/ipc.h ...
10837 if $h_sem && $test `./findhdr sys/sem.h`; then
10838         echo "You have the full sem*(2) library." >&4
10839         val="$define"
10840 else
10841         echo "You don't have the full sem*(2) library." >&4
10842         val="$undef"
10843 fi
10844 set d_sem
10845 eval $setvar
10846
10847 : see whether sys/sem.h defines union semun
10848 echo " "
10849 $cat > try.c <<'END'
10850 #include <sys/types.h>
10851 #include <sys/ipc.h>
10852 #include <sys/sem.h>
10853 int main () { union semun semun; semun.buf = 0; }
10854 END
10855 set try
10856 if eval $compile; then
10857     echo "You have union semun in <sys/sem.h>." >&4
10858     val="$define"
10859 else
10860     echo "You do not have union semun in <sys/sem.h>." >&4
10861     val="$undef"
10862 fi
10863 $rm -f try try.c try.h
10864 set d_union_semun
10865 eval $setvar
10866
10867 : see how to do semctl IPC_STAT
10868 case "$d_sem" in
10869 $define)
10870     : see whether semctl IPC_STAT can use union semun
10871     echo " "
10872     $cat > try.h <<END
10873 #ifndef S_IRUSR
10874 #   ifdef S_IREAD
10875 #       define S_IRUSR S_IREAD
10876 #       define S_IWUSR S_IWRITE
10877 #       define S_IXUSR S_IEXEC
10878 #   else
10879 #       define S_IRUSR 0400
10880 #       define S_IWUSR 0200
10881 #       define S_IXUSR 0100
10882 #   endif
10883 #   define S_IRGRP (S_IRUSR>>3)
10884 #   define S_IWGRP (S_IWUSR>>3)
10885 #   define S_IXGRP (S_IXUSR>>3)
10886 #   define S_IROTH (S_IRUSR>>6)
10887 #   define S_IWOTH (S_IWUSR>>6)
10888 #   define S_IXOTH (S_IXUSR>>6)
10889 #endif
10890 #ifndef S_IRWXU
10891 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
10892 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
10893 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
10894 #endif
10895 END
10896
10897     $cat > try.c <<END
10898 #include <sys/types.h>
10899 #include <sys/ipc.h>
10900 #include <sys/sem.h>
10901 #include <sys/stat.h>
10902 #include <stdio.h>
10903 #include <errno.h>
10904 #include "try.h"
10905 #ifndef errno
10906 extern int errno;
10907 #endif
10908 #$d_union_semun HAS_UNION_SEMUN
10909 int main() {
10910     union semun
10911 #ifndef HAS_UNION_SEMUN
10912     {
10913         int val;
10914         struct semid_ds *buf;
10915         unsigned short *array;
10916     }
10917 #endif
10918     arg;
10919     int sem, st;
10920
10921 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
10922     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
10923     if (sem > -1) {
10924         struct semid_ds argbuf;
10925         arg.buf = &argbuf;
10926 #       ifdef IPC_STAT
10927         st = semctl(sem, 0, IPC_STAT, arg);
10928         if (st == 0)
10929             printf("semun\n");
10930         else
10931 #       endif /* IPC_STAT */
10932             printf("semctl IPC_STAT failed: errno = %d\n", errno);
10933 #       ifdef IPC_RMID
10934         if (semctl(sem, 0, IPC_RMID, arg) != 0)
10935 #       endif /* IPC_RMID */
10936             printf("semctl IPC_RMID failed: errno = %d\n", errno);
10937     } else
10938 #endif /* IPC_PRIVATE && ... */
10939         printf("semget failed: errno = %d\n", errno);
10940   return 0;
10941 }
10942 END
10943     val="$undef"
10944     set try
10945     if eval $compile; then
10946         xxx=`./try`
10947         case "$xxx" in
10948         semun) val="$define" ;;
10949         esac
10950     fi
10951     $rm -f try try.c
10952     set d_semctl_semun
10953     eval $setvar
10954     case "$d_semctl_semun" in
10955     $define)
10956         echo "You can use union semun for semctl IPC_STAT." >&4
10957         also='also'
10958         ;;
10959     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
10960         also=''
10961         ;;
10962     esac
10963
10964     : see whether semctl IPC_STAT can use struct semid_ds pointer
10965     $cat > try.c <<'END'
10966 #include <sys/types.h>
10967 #include <sys/ipc.h>
10968 #include <sys/sem.h>
10969 #include <sys/stat.h>
10970 #include "try.h"
10971 #include <stdio.h>
10972 #include <errno.h>
10973 #ifndef errno
10974 extern int errno;
10975 #endif
10976 int main() {
10977     struct semid_ds arg;
10978     int sem, st;
10979
10980 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
10981     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
10982     if (sem > -1) {
10983 #       ifdef IPC_STAT
10984         st = semctl(sem, 0, IPC_STAT, &arg);
10985         if (st == 0)
10986             printf("semid_ds\n");
10987         else
10988 #       endif /* IPC_STAT */
10989             printf("semctl IPC_STAT failed: errno = %d\n", errno);
10990 #       ifdef IPC_RMID
10991         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
10992 #       endif /* IPC_RMID */
10993             printf("semctl IPC_RMID failed: errno = %d\n", errno);
10994     } else
10995 #endif /* IPC_PRIVATE && ... */
10996         printf("semget failed: errno = %d\n", errno);
10997
10998     return 0;
10999 }
11000 END
11001     val="$undef"
11002     set try
11003     if eval $compile; then
11004         xxx=`./try`
11005         case "$xxx" in
11006         semid_ds) val="$define" ;;
11007         esac
11008     fi
11009     $rm -f try try.c
11010     set d_semctl_semid_ds
11011     eval $setvar
11012     case "$d_semctl_semid_ds" in
11013     $define)
11014         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
11015         ;;
11016     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
11017         ;;
11018     esac
11019     $rm -f try.h
11020     ;;
11021 *)  val="$undef"
11022
11023     # We do not have the full sem*(2) library, so assume we can not
11024     # use either.
11025
11026     set d_semctl_semun
11027     eval $setvar
11028
11029     set d_semctl_semid_ds
11030     eval $setvar
11031     ;;
11032 esac
11033
11034 : see if setegid exists
11035 set setegid d_setegid
11036 eval $inlibc
11037
11038 : see if seteuid exists
11039 set seteuid d_seteuid
11040 eval $inlibc
11041
11042 : see if setgrent exists
11043 set setgrent d_setgrent
11044 eval $inlibc
11045
11046 : see if sethostent exists
11047 set sethostent d_sethent
11048 eval $inlibc
11049
11050 : see if setlinebuf exists
11051 set setlinebuf d_setlinebuf
11052 eval $inlibc
11053
11054 : see if setlocale exists
11055 set setlocale d_setlocale
11056 eval $inlibc
11057
11058 : see if setnetent exists
11059 set setnetent d_setnent
11060 eval $inlibc
11061
11062 : see if setprotoent exists
11063 set setprotoent d_setpent
11064 eval $inlibc
11065
11066 : see if setpgid exists
11067 set setpgid d_setpgid
11068 eval $inlibc
11069
11070 : see if setpgrp2 exists
11071 set setpgrp2 d_setpgrp2
11072 eval $inlibc
11073
11074 : see if setpriority exists
11075 set setpriority d_setprior
11076 eval $inlibc
11077
11078 : see if setproctitle exists
11079 set setproctitle d_setproctitle
11080 eval $inlibc
11081
11082 : see if setpwent exists
11083 set setpwent d_setpwent
11084 eval $inlibc
11085
11086 : see if setregid exists
11087 set setregid d_setregid
11088 eval $inlibc
11089 set setresgid d_setresgid
11090 eval $inlibc
11091
11092 : see if setreuid exists
11093 set setreuid d_setreuid
11094 eval $inlibc
11095 set setresuid d_setresuid
11096 eval $inlibc
11097
11098 : see if setrgid exists
11099 set setrgid d_setrgid
11100 eval $inlibc
11101
11102 : see if setruid exists
11103 set setruid d_setruid
11104 eval $inlibc
11105
11106 : see if setservent exists
11107 set setservent d_setsent
11108 eval $inlibc
11109
11110 : see if setsid exists
11111 set setsid d_setsid
11112 eval $inlibc
11113
11114 : see if setvbuf exists
11115 set setvbuf d_setvbuf
11116 eval $inlibc
11117
11118 : see if sfio.h is available
11119 set sfio.h i_sfio
11120 eval $inhdr
11121
11122
11123 : see if sfio library is available
11124 case "$i_sfio" in
11125 $define)
11126         val=''
11127         set sfreserve val
11128         eval $inlibc
11129         ;;
11130 *)
11131         val="$undef"
11132         ;;
11133 esac
11134 : Ok, but do we want to use it.
11135 case "$val" in
11136 $define)
11137         case "$usesfio" in
11138         true|$define|[yY]*) dflt='y';;
11139         *) dflt='n';;
11140         esac
11141         echo "$package can use the sfio library, but it is experimental."
11142         case "$useperlio" in
11143         "$undef")
11144             echo "For sfio also the PerlIO abstraction layer is needed."
11145             echo "Earlier you said you wouldn't want that."
11146             ;;
11147         esac
11148         rp="You seem to have sfio available, do you want to try using it?"
11149         . ./myread
11150         case "$ans" in
11151         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
11152                 useperlio="$define"
11153                 val="$define"
11154                 ;;
11155         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
11156                 val="$undef"
11157                 : Remove sfio from list of libraries to use
11158                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
11159                 shift
11160                 libs="$*"
11161                 echo "libs = $libs" >&4
11162                 ;;
11163         esac
11164         ;;
11165 *)      case "$usesfio" in
11166         true|$define|[yY]*)
11167                 echo "Sorry, cannot find sfio on this machine." >&4
11168                 echo "Ignoring your setting of usesfio=$usesfio." >&4
11169                 val="$undef"
11170                 ;;
11171         esac
11172         ;;
11173 esac
11174 set d_sfio
11175 eval $setvar
11176 case "$d_sfio" in
11177 $define) usesfio='true';;
11178 *) usesfio='false';;
11179 esac
11180
11181 : see if shmctl exists
11182 set shmctl d_shmctl
11183 eval $inlibc
11184
11185 : see if shmget exists
11186 set shmget d_shmget
11187 eval $inlibc
11188
11189 : see if shmat exists
11190 set shmat d_shmat
11191 eval $inlibc
11192 : see what shmat returns
11193 case "$d_shmat" in
11194 "$define")
11195         $cat >shmat.c <<'END'
11196 #include <sys/shm.h>
11197 void *shmat();
11198 END
11199         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
11200                 shmattype='void *'
11201         else
11202                 shmattype='char *'
11203         fi
11204         echo "and it returns ($shmattype)." >&4
11205         : see if a prototype for shmat is available
11206         xxx=`./findhdr sys/shm.h`
11207         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
11208         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
11209                 val="$define"
11210         else
11211                 val="$undef"
11212         fi
11213         $rm -f shmat.[co]
11214         ;;
11215 *)
11216         val="$undef"
11217         ;;
11218 esac
11219 set d_shmatprototype
11220 eval $setvar
11221
11222 : see if shmdt exists
11223 set shmdt d_shmdt
11224 eval $inlibc
11225
11226 : see how much of the 'shm*(2)' library is present.
11227 h_shm=true
11228 echo " "
11229 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
11230 *"$undef"*) h_shm=false;;
11231 esac
11232 case "$osname" in
11233 freebsd)
11234     case "`ipcs 2>&1`" in
11235     "SVID shared memory"*"not configured"*)
11236         echo "Your $osname does not have the shm*(2) configured." >&4
11237         h_shm=false
11238         val="$undef"
11239         set shmctl d_shmctl
11240         evat $setvar
11241         set shmget d_shmget
11242         evat $setvar
11243         set shmat d_shmat
11244         evat $setvar
11245         set shmdt d_shmdt
11246         evat $setvar
11247         ;;
11248     esac
11249     ;;
11250 esac
11251 : we could also check for sys/ipc.h ...
11252 if $h_shm && $test `./findhdr sys/shm.h`; then
11253         echo "You have the full shm*(2) library." >&4
11254         val="$define"
11255 else
11256         echo "You don't have the full shm*(2) library." >&4
11257         val="$undef"
11258 fi
11259 set d_shm
11260 eval $setvar
11261
11262 echo " "
11263 : see if we have sigaction
11264 if set sigaction val -f d_sigaction; eval $csym; $val; then
11265         echo 'sigaction() found.' >&4
11266         $cat > try.c <<'EOP'
11267 #include <stdio.h>
11268 #include <sys/types.h>
11269 #include <signal.h>
11270 int main()
11271 {
11272     struct sigaction act, oact;
11273     act.sa_flags = 0;
11274     oact.sa_handler = 0;
11275     /* so that act and oact are used */
11276     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
11277 }
11278 EOP
11279         set try
11280         if eval $compile_ok; then
11281                 val="$define"
11282         else
11283                 echo "But you don't seem to have a useable struct sigaction." >&4
11284                 val="$undef"
11285         fi
11286 else
11287         echo 'sigaction NOT found.' >&4
11288         val="$undef"
11289 fi
11290 set d_sigaction; eval $setvar
11291 $rm -f try try$_o try.c
11292
11293 : see if sigsetjmp exists
11294 echo " "
11295 case "$d_sigsetjmp" in
11296 '')
11297         $cat >try.c <<'EOP'
11298 #include <setjmp.h>
11299 sigjmp_buf env;
11300 int set = 1;
11301 int main()
11302 {
11303         if (sigsetjmp(env,1))
11304                 exit(set);
11305         set = 0;
11306         siglongjmp(env, 1);
11307         exit(1);
11308 }
11309 EOP
11310         set try
11311         if eval $compile; then
11312                 if ./try >/dev/null 2>&1; then
11313                         echo "POSIX sigsetjmp found." >&4
11314                         val="$define"
11315                 else
11316                         $cat >&4 <<EOM
11317 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
11318 I'll ignore them.
11319 EOM
11320                         val="$undef"
11321                 fi
11322         else
11323                 echo "sigsetjmp not found." >&4
11324                 val="$undef"
11325         fi
11326         ;;
11327 *) val="$d_sigsetjmp"
11328         case "$d_sigsetjmp" in
11329         $define) echo "POSIX sigsetjmp found." >&4;;
11330         $undef) echo "sigsetjmp not found." >&4;;
11331         esac
11332         ;;
11333 esac
11334 set d_sigsetjmp
11335 eval $setvar
11336 $rm -f try.c try
11337
11338 : see if socks5_init exists
11339 set socks5_init d_socks5_init
11340 eval $inlibc
11341
11342 : see if sys/stat.h is available
11343 set sys/stat.h i_sysstat
11344 eval $inhdr
11345
11346
11347 : see if stat knows about block sizes
11348 echo " "
11349 echo "Checking to see if your struct stat has st_blocks field..." >&4
11350 set d_statblks stat st_blocks $i_sysstat sys/stat.h
11351 eval $hasfield
11352
11353
11354 : see if this is a sys/vfs.h system
11355 set sys/vfs.h i_sysvfs
11356 eval $inhdr
11357
11358
11359 : see if this is a sys/statfs.h system
11360 set sys/statfs.h i_sysstatfs
11361 eval $inhdr
11362
11363
11364 echo " "
11365 echo "Checking to see if your system supports struct statfs..." >&4
11366 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
11367 eval $hasstruct
11368 case "$d_statfs_s" in
11369 "$define")      echo "Yes, it does."   ;;
11370 *)              echo "No, it doesn't." ;;
11371 esac
11372
11373
11374
11375 : see if struct statfs knows about f_flags
11376 case "$d_statfs_s" in
11377 define) 
11378         echo " "
11379         echo "Checking to see if your struct statfs has f_flags field..." >&4
11380         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
11381         eval $hasfield
11382         ;;
11383 *)      val="$undef"
11384         set d_statfs_f_flags
11385         eval $setvar
11386         ;;
11387 esac
11388 case "$d_statfs_f_flags" in
11389 "$define")      echo "Yes, it does."   ;;
11390 *)              echo "No, it doesn't." ;;
11391 esac
11392
11393 : see if _ptr and _cnt from stdio act std
11394 echo " "
11395 if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
11396         echo "(Looks like you have stdio.h from Linux.)"
11397         case "$stdio_ptr" in
11398         '') stdio_ptr='((fp)->_IO_read_ptr)'
11399                 ptr_lval=$define
11400                 ;;
11401         *)      ptr_lval=$d_stdio_ptr_lval;;
11402         esac
11403         case "$stdio_cnt" in
11404         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
11405                 cnt_lval=$undef
11406                 ;;
11407         *)      cnt_lval=$d_stdio_cnt_lval;;
11408         esac
11409         case "$stdio_base" in
11410         '') stdio_base='((fp)->_IO_read_base)';;
11411         esac
11412         case "$stdio_bufsiz" in
11413         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
11414         esac
11415 else
11416         case "$stdio_ptr" in
11417         '') stdio_ptr='((fp)->_ptr)'
11418                 ptr_lval=$define
11419                 ;;
11420         *)      ptr_lval=$d_stdio_ptr_lval;;
11421         esac
11422         case "$stdio_cnt" in
11423         '') stdio_cnt='((fp)->_cnt)'
11424                 cnt_lval=$define
11425                 ;;
11426         *)      cnt_lval=$d_stdio_cnt_lval;;
11427         esac
11428         case "$stdio_base" in
11429         '') stdio_base='((fp)->_base)';;
11430         esac
11431         case "$stdio_bufsiz" in
11432         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
11433         esac
11434 fi
11435 : test whether _ptr and _cnt really work
11436 echo "Checking how std your stdio is..." >&4
11437 $cat >try.c <<EOP
11438 #include <stdio.h>
11439 #define FILE_ptr(fp)    $stdio_ptr
11440 #define FILE_cnt(fp)    $stdio_cnt
11441 int main() {
11442         FILE *fp = fopen("try.c", "r");
11443         char c = getc(fp);
11444         if (
11445                 18 <= FILE_cnt(fp) &&
11446                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
11447         )
11448                 exit(0);
11449         exit(1);
11450 }
11451 EOP
11452 val="$undef"
11453 set try
11454 if eval $compile; then
11455         if ./try; then
11456                 echo "Your stdio acts pretty std."
11457                 val="$define"
11458         else
11459                 echo "Your stdio isn't very std."
11460         fi
11461 else
11462         echo "Your stdio doesn't appear very std."
11463 fi
11464 $rm -f try.c try
11465 set d_stdstdio
11466 eval $setvar
11467
11468 : Can _ptr be used as an lvalue?
11469 case "$d_stdstdio$ptr_lval" in
11470 $define$define) val=$define ;;
11471 *) val=$undef ;;
11472 esac
11473 set d_stdio_ptr_lval
11474 eval $setvar
11475
11476 : Can _cnt be used as an lvalue?
11477 case "$d_stdstdio$cnt_lval" in
11478 $define$define) val=$define ;;
11479 *) val=$undef ;;
11480 esac
11481 set d_stdio_cnt_lval
11482 eval $setvar
11483
11484
11485 : test whether setting _ptr sets _cnt as a side effect
11486 d_stdio_ptr_lval_sets_cnt="$undef"
11487 d_stdio_ptr_lval_nochange_cnt="$undef"
11488 case "$d_stdio_ptr_lval$d_stdstdio" in
11489 $define$define)
11490         echo "Checking to see what happens if we set the stdio ptr..." >&4
11491 $cat >try.c <<EOP
11492 #include <stdio.h>
11493 /* Can we scream? */
11494 /* Eat dust sed :-) */
11495 #define FILE_ptr(fp)    $stdio_ptr
11496 #define FILE_cnt(fp)    $stdio_cnt
11497 int main() {
11498         FILE *fp = fopen("try.c", "r");
11499         char c = getc(fp);
11500         char *ptr;
11501         size_t cnt;
11502         if (!(
11503                 18 <= FILE_cnt(fp) &&
11504                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
11505         )) {
11506                 puts("Fail even to read");
11507                 exit (1);
11508         }
11509         ptr = FILE_ptr(fp);
11510         cnt = FILE_cnt(fp);
11511
11512         FILE_ptr(fp)+= 42;
11513
11514         if (FILE_ptr(fp) != (ptr + 42)) {
11515                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
11516                 exit (1);
11517         }
11518         if (FILE_cnt(fp) <= 20) {
11519                 printf ("Fail (<20 chars to test)");
11520                 exit (1);
11521         }
11522         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
11523                 puts("Fail compare");
11524                 exit (1);
11525         }
11526         if (cnt == FILE_cnt(fp)) {
11527                 puts("Pass_unchanged");
11528                 exit (0);
11529         }       
11530         if (FILE_cnt(fp) == (cnt - 42)) {
11531                 puts("Pass_changed");
11532                 exit (0);
11533         }
11534         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
11535         return 1;
11536
11537 }
11538 EOP
11539         set try
11540         if eval $compile; then
11541                 case `./try$exe_ext` in
11542                 Pass_changed)
11543                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
11544                         d_stdio_ptr_lval_sets_cnt="$define" ;;
11545                 Pass_unchanged)
11546                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
11547                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
11548                 Fail*)
11549                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
11550                 *)
11551                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
11552         esac
11553         else
11554                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
11555         fi
11556         $rm -f try.c try
11557         ;;
11558 esac
11559
11560 : see if _base is also standard
11561 val="$undef"
11562 case "$d_stdstdio" in
11563 $define)
11564         $cat >try.c <<EOP
11565 #include <stdio.h>
11566 #define FILE_base(fp)   $stdio_base
11567 #define FILE_bufsiz(fp) $stdio_bufsiz
11568 int main() {
11569         FILE *fp = fopen("try.c", "r");
11570         char c = getc(fp);
11571         if (
11572                 19 <= FILE_bufsiz(fp) &&
11573                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
11574         )
11575                 exit(0);
11576         exit(1);
11577 }
11578 EOP
11579         set try
11580         if eval $compile; then
11581                 if ./try; then
11582                         echo "And its _base field acts std."
11583                         val="$define"
11584                 else
11585                         echo "But its _base field isn't std."
11586                 fi
11587         else
11588                 echo "However, it seems to be lacking the _base field."
11589         fi
11590         $rm -f try.c try
11591         ;;
11592 esac
11593 set d_stdiobase
11594 eval $setvar
11595
11596 $cat >&4 <<EOM
11597 Checking how to access stdio streams by file descriptor number...
11598 EOM
11599 case "$stdio_stream_array" in
11600 '')     $cat >try.c <<EOCP
11601 #include <stdio.h>
11602 int main() {
11603   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
11604     printf("yes\n");
11605 }
11606 EOCP
11607         for s in _iob __iob __sF
11608         do
11609                 set try -DSTDIO_STREAM_ARRAY=$s
11610                 if eval $compile; then
11611                         case "`./try$exe_ext`" in
11612                         yes)    stdio_stream_array=$s; break ;;
11613                         esac
11614                 fi
11615         done
11616         $rm -f try.* try$exe_ext
11617 esac
11618 case "$stdio_stream_array" in
11619 '')     $cat >&4 <<EOM
11620 I can't figure out how to access stdio streams by file descriptor number.
11621 EOM
11622         d_stdio_stream_array="$undef"
11623         ;;
11624 *)      $cat >&4 <<EOM
11625 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
11626 EOM
11627         d_stdio_stream_array="$define"
11628         ;;
11629 esac
11630
11631 : see if strcoll exists
11632 set strcoll d_strcoll
11633 eval $inlibc
11634
11635 : check for structure copying
11636 echo " "
11637 echo "Checking to see if your C compiler can copy structs..." >&4
11638 $cat >try.c <<'EOCP'
11639 int main()
11640 {
11641         struct blurfl {
11642                 int dyick;
11643         } foo, bar;
11644
11645         foo = bar;
11646 }
11647 EOCP
11648 if $cc -c try.c >/dev/null 2>&1 ; then
11649         val="$define"
11650         echo "Yup, it can."
11651 else
11652         val="$undef"
11653         echo "Nope, it can't."
11654 fi
11655 set d_strctcpy
11656 eval $setvar
11657 $rm -f try.*
11658
11659 : see if strerror and/or sys_errlist[] exist
11660 echo " "
11661 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
11662     if set strerror val -f d_strerror; eval $csym; $val; then
11663                 echo 'strerror() found.' >&4
11664                 d_strerror="$define"
11665                 d_strerrm='strerror(e)'
11666                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11667                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
11668                         d_syserrlst="$define"
11669                 else
11670                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
11671                         d_syserrlst="$undef"
11672                 fi
11673     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
11674                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
11675                 echo 'strerror() found in string header.' >&4
11676                 d_strerror="$define"
11677                 d_strerrm='strerror(e)'
11678                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11679                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
11680                                 d_syserrlst="$define"
11681                 else
11682                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
11683                         d_syserrlst="$undef"
11684                 fi
11685     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
11686                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
11687                 d_strerror="$undef"
11688                 d_syserrlst="$define"
11689                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
11690     else
11691                 echo 'strerror() and sys_errlist[] NOT found.' >&4
11692                 d_strerror="$undef"
11693                 d_syserrlst="$undef"
11694                 d_strerrm='"unknown"'
11695     fi
11696 fi
11697
11698 : see if strtod exists
11699 set strtod d_strtod
11700 eval $inlibc
11701
11702 : see if strtol exists
11703 set strtol d_strtol
11704 eval $inlibc
11705
11706 : see if strtold exists
11707 set strtold d_strtold
11708 eval $inlibc
11709
11710 : see if strtoll exists
11711 set strtoll d_strtoll
11712 eval $inlibc
11713
11714 case "$d_longlong-$d_strtoll" in
11715 "$define-$define")
11716         $cat <<EOM
11717 Checking whether your strtoll() works okay...
11718 EOM
11719         $cat >try.c <<'EOCP'
11720 #include <errno.h>
11721 #ifdef __hpux
11722 #define strtoll __strtoll
11723 #endif
11724 #ifdef __EMX__
11725 #define strtoll _strtoll
11726 #endif
11727 #include <stdio.h>
11728 extern long long int strtoll(char *s, char **, int); 
11729 static int bad = 0;
11730 int check(char *s, long long ell, int een) {
11731         long long gll;
11732         errno = 0;
11733         gll = strtoll(s, 0, 10);
11734         if (!((gll == ell) && (errno == een)))
11735                 bad++;
11736 }
11737 int main() {
11738         check(" 1",                                      1LL, 0);
11739         check(" 0",                                      0LL, 0);
11740         check("-1",                                     -1LL, 0);
11741         check("-9223372036854775808", -9223372036854775808LL, 0);
11742         check("-9223372036854775808", -9223372036854775808LL, 0);
11743         check(" 9223372036854775807",  9223372036854775807LL, 0);
11744         check("-9223372036854775808", -9223372036854775808LL, 0);
11745         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
11746         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
11747         if (!bad)
11748                 printf("ok\n");
11749 }
11750 EOCP
11751         set try
11752         if eval $compile; then
11753                 yyy=`./try`
11754                 case "$yyy" in
11755                 ok) echo "Your strtoll() seems to be working okay." ;;
11756                 *) cat <<EOM >&4
11757 Your strtoll() doesn't seem to be working okay.
11758 EOM
11759                    d_strtoll="$undef"
11760                    ;;
11761                 esac
11762         else
11763                 echo "(I can't seem to compile the test program--assuming it doesn't)"
11764                 d_strtoll="$undef"
11765         fi
11766         ;;
11767 esac
11768
11769 : see if strtoul exists
11770 set strtoul d_strtoul
11771 eval $inlibc
11772
11773 : see if strtoull exists
11774 set strtoull d_strtoull
11775 eval $inlibc
11776
11777 case "$d_longlong-$d_strtoull" in
11778 "$define-$define")
11779         $cat <<EOM
11780 Checking whether your strtoull() works okay...
11781 EOM
11782         $cat >try.c <<'EOCP'
11783 #include <errno.h>
11784 #ifdef __hpux
11785 #define strtoull __strtoull
11786 #endif
11787 #include <stdio.h>
11788 extern unsigned long long int strtoull(char *s, char **, int); 
11789 static int bad = 0;
11790 int check(char *s, long long eull, int een) {
11791         long long gull;
11792         errno = 0;
11793         gull = strtoull(s, 0, 10);
11794         if (!((gull == eull) && (errno == een)))
11795                 bad++;
11796 }
11797 int main() {
11798         check(" 1",                                       1LL, 0);
11799         check(" 0",                                       0LL, 0);
11800         check("18446744073709551615", 18446744073709551615ULL, 0);
11801         check("18446744073709551616", 18446744073709551615ULL, ERANGE);
11802         if (!bad)
11803                 printf("ok\n");
11804 }
11805 EOCP
11806         set try
11807         if eval $compile; then
11808                 case "`./try`" in
11809                 ok) echo "Your strtoull() seems to be working okay." ;;
11810                 *) cat <<EOM >&4
11811 Your strtoull() doesn't seem to be working okay.
11812 EOM
11813                    d_strtoull="$undef"
11814                    ;;
11815                 esac
11816         fi
11817         ;;
11818 esac
11819
11820 : see if strtouq exists
11821 set strtouq d_strtouq
11822 eval $inlibc
11823
11824 : see if strxfrm exists
11825 set strxfrm d_strxfrm
11826 eval $inlibc
11827
11828 : see if symlink exists
11829 set symlink d_symlink
11830 eval $inlibc
11831
11832 : see if syscall exists
11833 set syscall d_syscall
11834 eval $inlibc
11835
11836 : see if sysconf exists
11837 set sysconf d_sysconf
11838 eval $inlibc
11839
11840 : see if system exists
11841 set system d_system
11842 eval $inlibc
11843
11844 : see if tcgetpgrp exists
11845 set tcgetpgrp d_tcgetpgrp
11846 eval $inlibc
11847
11848 : see if tcsetpgrp exists
11849 set tcsetpgrp d_tcsetpgrp
11850 eval $inlibc
11851
11852 : see if prototype for telldir is available
11853 echo " "
11854 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
11855 eval $hasproto
11856
11857 : see if this is a sys/times.h system
11858 set sys/times.h i_systimes
11859 eval $inhdr
11860
11861 : see if times exists
11862 echo " "
11863 if set times val -f d_times; eval $csym; $val; then
11864         echo 'times() found.' >&4
11865         d_times="$define"
11866         inc=''
11867         case "$i_systimes" in
11868         "$define") inc='sys/times.h';;
11869         esac
11870         rp="What is the type returned by times() on this system?"
11871         set clock_t clocktype long stdio.h sys/types.h $inc
11872         eval $typedef_ask
11873 else
11874         echo 'times() NOT found, hope that will do.' >&4
11875         d_times="$undef"
11876         clocktype='int'
11877 fi
11878
11879 : see if truncate exists
11880 set truncate d_truncate
11881 eval $inlibc
11882
11883 : see if tzname[] exists
11884 echo " "
11885 if set tzname val -a d_tzname; eval $csym; $val; then
11886         val="$define"
11887         echo 'tzname[] found.' >&4
11888 else
11889         val="$undef"
11890         echo 'tzname[] NOT found.' >&4
11891 fi
11892 set d_tzname
11893 eval $setvar
11894
11895 : see if umask exists
11896 set umask d_umask
11897 eval $inlibc
11898
11899 : see if ustat exists
11900 set ustat d_ustat
11901 eval $inlibc
11902
11903 : backward compatibility for d_hvfork
11904 if test X$d_hvfork != X; then
11905         d_vfork="$d_hvfork"
11906         d_hvfork=''
11907 fi
11908 : see if there is a vfork
11909 val=''
11910 set vfork val
11911 eval $inlibc
11912
11913 : Ok, but do we want to use it. vfork is reportedly unreliable in 
11914 : perl on Solaris 2.x, and probably elsewhere.
11915 case "$val" in
11916 $define)
11917         echo " "
11918         case "$usevfork" in
11919         false) dflt='n';;
11920         *) dflt='y';;
11921         esac
11922         cat <<'EOM'
11923  
11924 Perl can only use a vfork() that doesn't suffer from strict
11925 restrictions on calling functions or modifying global data in
11926 the child.  For example, glibc-2.1 contains such a vfork()
11927 that is unsuitable.  If your system provides a proper fork()
11928 call, chances are that you do NOT want perl to use vfork().
11929
11930 EOM
11931         rp="Do you still want to use vfork()?"
11932         . ./myread
11933         case "$ans" in
11934         y|Y) ;;
11935         *)
11936                 echo "Ok, we won't use vfork()."
11937                 val="$undef"
11938                 ;;
11939         esac
11940         ;;
11941 esac
11942 set d_vfork
11943 eval $setvar
11944 case "$d_vfork" in
11945 $define) usevfork='true';;
11946 *) usevfork='false';;
11947 esac
11948
11949 : see if this is an sysdir system
11950 set sys/dir.h i_sysdir
11951 eval $inhdr
11952
11953 : see if this is an sysndir system
11954 set sys/ndir.h i_sysndir
11955 eval $inhdr
11956
11957 : see if closedir exists
11958 set closedir d_closedir
11959 eval $inlibc
11960
11961 case "$d_closedir" in
11962 "$define")
11963         echo " "
11964         echo "Checking whether closedir() returns a status..." >&4
11965         cat > closedir.c <<EOM
11966 #$i_dirent I_DIRENT             /**/
11967 #$i_sysdir I_SYS_DIR            /**/
11968 #$i_sysndir I_SYS_NDIR          /**/
11969 #$i_systypes I_SYS_TYPES        /**/
11970
11971 #if defined(I_SYS_TYPES)
11972 #include <sys/types.h>
11973 #endif
11974 #if defined(I_DIRENT)
11975 #include <dirent.h>
11976 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
11977 #include <sys/dir.h>
11978 #endif
11979 #else
11980 #ifdef I_SYS_NDIR
11981 #include <sys/ndir.h>
11982 #else
11983 #ifdef I_SYS_DIR
11984 #ifdef hp9000s500
11985 #include <ndir.h>       /* may be wrong in the future */
11986 #else
11987 #include <sys/dir.h>
11988 #endif
11989 #endif
11990 #endif
11991 #endif 
11992 int main() { return closedir(opendir(".")); }
11993 EOM
11994         set closedir
11995         if eval $compile_ok; then
11996                 if ./closedir > /dev/null 2>&1 ; then
11997                         echo "Yes, it does."
11998                         val="$undef"
11999                 else
12000                         echo "No, it doesn't."
12001                         val="$define"
12002                 fi
12003         else
12004                 echo "(I can't seem to compile the test program--assuming it doesn't)"
12005                 val="$define"
12006         fi
12007         ;;
12008 *)
12009         val="$undef";
12010         ;;
12011 esac
12012 set d_void_closedir
12013 eval $setvar
12014 $rm -f closedir*
12015 : check for volatile keyword
12016 echo " "
12017 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
12018 $cat >try.c <<'EOCP'
12019 int main()
12020 {
12021         typedef struct _goo_struct goo_struct;
12022         goo_struct * volatile goo = ((goo_struct *)0);
12023         struct _goo_struct {
12024                 long long_int;
12025                 int reg_int;
12026                 char char_var;
12027         };
12028         typedef unsigned short foo_t;
12029         char *volatile foo;
12030         volatile int bar;
12031         volatile foo_t blech;
12032         foo = foo;
12033 }
12034 EOCP
12035 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
12036         val="$define"
12037         echo "Yup, it does."
12038 else
12039         val="$undef"
12040         echo "Nope, it doesn't."
12041 fi
12042 set d_volatile
12043 eval $setvar
12044 $rm -f try.*
12045
12046 : see if there is a wait4
12047 set wait4 d_wait4
12048 eval $inlibc
12049
12050 : see if waitpid exists
12051 set waitpid d_waitpid
12052 eval $inlibc
12053
12054 : see if wcstombs exists
12055 set wcstombs d_wcstombs
12056 eval $inlibc
12057
12058 : see if wctomb exists
12059 set wctomb d_wctomb
12060 eval $inlibc
12061
12062 : preserve RCS keywords in files with variable substitution, grrr
12063 Date='$Date'
12064 Id='$Id'
12065 Log='$Log'
12066 RCSfile='$RCSfile'
12067 Revision='$Revision'
12068
12069 case "$crosscompile" in
12070 ''|[nN]*) crosscompile="$undef" ;;
12071 esac
12072
12073 case "$osname" in
12074 next|rhapsody|darwin) multiarch="$define" ;;
12075 esac
12076 case "$multiarch" in
12077 ''|[nN]*) multiarch="$undef" ;;
12078 esac
12079
12080 : check for alignment requirements
12081 echo " "
12082 case "$crosscompile$multiarch" in
12083 *$define*)
12084         $cat <<EOM
12085 You seem to be either cross-compiling or doing a multiarchitecture build,
12086 skipping the memory alignment check.
12087
12088 EOM
12089         case "$alignbytes" in
12090         '') alignbytes=8 ;;
12091         esac
12092         ;;
12093 *)
12094         case "$alignbytes" in
12095         '') echo "Checking alignment constraints..." >&4
12096                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
12097                         $cat >try.c <<'EOCP'
12098 typedef long double NV;
12099 EOCP
12100                 else
12101                         $cat >try.c <<'EOCP'
12102 typedef double NV;
12103 EOCP
12104                 fi
12105                 $cat >>try.c <<'EOCP'
12106 #include <stdio.h>
12107 struct foobar {
12108         char foo;
12109         NV bar;
12110 } try_algn;
12111 int main()
12112 {
12113     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
12114     return(0);
12115 }
12116 EOCP
12117                 set try
12118                 if eval $compile_ok; then
12119                         dflt=`./try`
12120                 else
12121                         dflt='8'
12122                         echo "(I can't seem to compile the test program...)"
12123                 fi
12124                 ;;
12125         *) dflt="$alignbytes"
12126                 ;;
12127         esac
12128         rp="Doubles must be aligned on a how-many-byte boundary?"
12129         . ./myread
12130         alignbytes="$ans"
12131         $rm -f try.c try
12132         ;;
12133 esac
12134
12135
12136 : set the base revision
12137 baserev=5.0
12138
12139 : check for ordering of bytes in a long
12140 echo " "
12141 case "$crosscompile$multiarch" in
12142 *$define*)
12143         $cat <<EOM
12144 You seem to be either cross-compiling or doing a multiarchitecture build,
12145 skipping the byteorder check.
12146
12147 EOM
12148         byteorder='0xffff'
12149         ;;
12150 *)
12151         case "$byteorder" in
12152         '')
12153                 $cat <<'EOM'
12154 In the following, larger digits indicate more significance.  A big-endian
12155 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
12156 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
12157 machines may have weird orders like 3412.  A Cray will report 87654321,
12158 an Alpha will report 12345678. If the test program works the default is
12159 probably right.
12160 I'm now running the test program...
12161 EOM
12162                 $cat >try.c <<'EOCP'
12163 #include <stdio.h>
12164 int main()
12165 {
12166         int i;
12167         union {
12168                 unsigned long l;
12169                 char c[sizeof(long)];
12170         } u;
12171
12172         if (sizeof(long) > 4)
12173                 u.l = (0x08070605L << 32) | 0x04030201L;
12174         else
12175                 u.l = 0x04030201L;
12176         for (i = 0; i < sizeof(long); i++)
12177                 printf("%c", u.c[i]+'0');
12178         printf("\n");
12179         exit(0);
12180 }
12181 EOCP
12182                 xxx_prompt=y
12183                 set try
12184                 if eval $compile && ./try > /dev/null; then
12185                         dflt=`./try`
12186                         case "$dflt" in
12187                         [1-4][1-4][1-4][1-4]|12345678|87654321)
12188                                 echo "(The test program ran ok.)"
12189                                 echo "byteorder=$dflt"
12190                                 xxx_prompt=n
12191                         ;;
12192                         ????|????????) echo "(The test program ran ok.)" ;;
12193                         *) echo "(The test program didn't run right for some reason.)" ;;
12194                         esac
12195                 else
12196                         dflt='4321'
12197                         cat <<'EOM'
12198 (I can't seem to compile the test program.  Guessing big-endian...)
12199 EOM
12200                 fi
12201                 case "$xxx_prompt" in
12202                 y)
12203                         rp="What is the order of bytes in a long?"
12204                         . ./myread
12205                         byteorder="$ans"
12206                         ;;
12207                 *)      byteorder=$dflt
12208                         ;;
12209                 esac
12210                 ;;
12211         esac
12212         $rm -f try.c try
12213         ;;
12214 esac
12215
12216
12217 : how do we catenate cpp tokens here?
12218 echo " "
12219 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
12220 $cat >cpp_stuff.c <<'EOCP'
12221 #define RCAT(a,b)a/**/b
12222 #define ACAT(a,b)a ## b
12223 RCAT(Rei,ser)
12224 ACAT(Cir,cus)
12225 EOCP
12226 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
12227 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
12228         echo "Oh!  Smells like ANSI's been here." >&4
12229         echo "We can catify or stringify, separately or together!"
12230         cpp_stuff=42
12231 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
12232         echo "Ah, yes!  The good old days!" >&4
12233         echo "However, in the good old days we don't know how to stringify and"
12234         echo "catify at the same time."
12235         cpp_stuff=1
12236 else
12237         $cat >&4 <<EOM
12238 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
12239 to have to edit the values of CAT[2-5] in config.h...
12240 EOM
12241         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
12242 fi
12243 $rm -f cpp_stuff.*
12244
12245 : see if this is a db.h system
12246 set db.h i_db
12247 eval $inhdr
12248
12249 case "$i_db" in
12250 $define)
12251         : Check db version.
12252         echo " "
12253         echo "Checking Berkeley DB version ..." >&4
12254         $cat >try.c <<EOCP
12255 #$d_const HASCONST
12256 #ifndef HASCONST
12257 #define const
12258 #endif
12259 #include <sys/types.h>
12260 #include <stdio.h>
12261 #include <db.h>
12262 int main()
12263 {
12264 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
12265     int Major, Minor, Patch ;
12266     unsigned long Version ;
12267     (void)db_version(&Major, &Minor, &Patch) ;
12268     printf("You have Berkeley DB Version 2 or greater\n");
12269
12270     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
12271                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
12272     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
12273                 Major, Minor, Patch) ;
12274
12275     /* check that db.h & libdb are compatible */
12276     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
12277         printf("db.h and libdb are incompatible\n") ;
12278         exit(3);        
12279     }
12280
12281     printf("db.h and libdb are compatible\n") ;
12282
12283     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
12284                 + DB_VERSION_PATCH ;
12285
12286     /* needs to be >= 2.3.4 */
12287     if (Version < 2003004) {
12288     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
12289         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
12290         exit(2);        
12291     }
12292
12293     exit(0);
12294 #else
12295 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
12296     printf("You have Berkeley DB Version 1\n");
12297     exit(0);    /* DB version < 2: the coast is clear. */
12298 #else
12299     exit(1);    /* <db.h> not Berkeley DB? */
12300 #endif
12301 #endif
12302 }
12303 EOCP
12304         set try
12305         if eval $compile_ok && ./try; then
12306                 echo 'Looks OK.' >&4
12307         else
12308                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
12309                 i_db=$undef
12310                 case " $libs " in
12311                 *"-ldb "*)
12312                         : Remove db from list of libraries to use
12313                         echo "Removing unusable -ldb from library list" >&4
12314                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
12315                         shift
12316                         libs="$*"
12317                         echo "libs = $libs" >&4
12318                         ;;
12319                 esac
12320         fi
12321         $rm -f try.*
12322         ;;
12323 esac
12324
12325 case "$i_db" in
12326 define)
12327         : Check the return type needed for hash 
12328         echo " "
12329         echo "Checking return type needed for hash for Berkeley DB ..." >&4
12330         $cat >try.c <<EOCP
12331 #$d_const HASCONST
12332 #ifndef HASCONST
12333 #define const
12334 #endif
12335 #include <sys/types.h>
12336 #include <db.h>
12337
12338 #ifndef DB_VERSION_MAJOR
12339 u_int32_t hash_cb (ptr, size)
12340 const void *ptr;
12341 size_t size;
12342 {
12343 }
12344 HASHINFO info;
12345 int main()
12346 {
12347         info.hash = hash_cb;
12348 }
12349 #endif
12350 EOCP
12351         if $cc $ccflags -c try.c >try.out 2>&1 ; then
12352                 if $contains warning try.out >>/dev/null 2>&1 ; then
12353                         db_hashtype='int'
12354                 else
12355                         db_hashtype='u_int32_t'
12356                 fi
12357         else
12358                 : XXX Maybe we should just give up here.
12359                 db_hashtype=u_int32_t
12360                 $cat try.out >&4
12361                 echo "Help:  I can't seem to compile the db test program." >&4
12362                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
12363         fi
12364         $rm -f try.*
12365         echo "Your version of Berkeley DB uses $db_hashtype for hash."
12366         ;;
12367 *)      db_hashtype=u_int32_t
12368         ;;
12369 esac
12370 case "$i_db" in
12371 define)
12372         : Check the return type needed for prefix 
12373         echo " "
12374         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
12375         cat >try.c <<EOCP
12376 #$d_const HASCONST
12377 #ifndef HASCONST
12378 #define const
12379 #endif
12380 #include <sys/types.h>
12381 #include <db.h>
12382
12383 #ifndef DB_VERSION_MAJOR
12384 size_t prefix_cb (key1, key2)
12385 const DBT *key1;
12386 const DBT *key2;
12387 {
12388 }
12389 BTREEINFO info;
12390 int main()
12391 {
12392         info.prefix = prefix_cb;
12393 }
12394 #endif
12395 EOCP
12396         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
12397                 if $contains warning try.out >>/dev/null 2>&1 ; then
12398                         db_prefixtype='int'
12399                 else
12400                         db_prefixtype='size_t'
12401                 fi
12402         else
12403                 db_prefixtype='size_t'
12404                 : XXX Maybe we should just give up here.
12405                 $cat try.out >&4
12406                 echo "Help:  I can't seem to compile the db test program." >&4
12407                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
12408         fi
12409         $rm -f try.*
12410         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
12411         ;;
12412 *)      db_prefixtype='size_t'
12413         ;;
12414 esac
12415
12416 : check for void type
12417 echo " "
12418 echo "Checking to see how well your C compiler groks the void type..." >&4
12419 case "$voidflags" in
12420 '')
12421         $cat >try.c <<'EOCP'
12422 #if TRY & 1
12423 void sub() {
12424 #else
12425 sub() {
12426 #endif
12427         extern void moo();      /* function returning void */
12428         void (*goo)();          /* ptr to func returning void */
12429 #if TRY & 8
12430         void *hue;              /* generic ptr */
12431 #endif
12432 #if TRY & 2
12433         void (*foo[10])();
12434 #endif
12435
12436 #if TRY & 4
12437         if(goo == moo) {
12438                 exit(0);
12439         }
12440 #endif
12441         exit(0);
12442 }
12443 int main() { sub(); }
12444 EOCP
12445         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
12446                 voidflags=$defvoidused
12447         echo "Good.  It appears to support void to the level $package wants.">&4
12448                 if $contains warning .out >/dev/null 2>&1; then
12449                         echo "However, you might get some warnings that look like this:"
12450                         $cat .out
12451                 fi
12452         else
12453 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
12454                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
12455                         echo "It supports 1..."
12456                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
12457                                 echo "It also supports 2..."
12458                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
12459                                         voidflags=7
12460                                         echo "And it supports 4 but not 8 definitely."
12461                                 else
12462                                         echo "It doesn't support 4..."
12463                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
12464                                                 voidflags=11
12465                                                 echo "But it supports 8."
12466                                         else
12467                                                 voidflags=3
12468                                                 echo "Neither does it support 8."
12469                                         fi
12470                                 fi
12471                         else
12472                                 echo "It does not support 2..."
12473                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
12474                                         voidflags=13
12475                                         echo "But it supports 4 and 8."
12476                                 else
12477                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
12478                                                 voidflags=5
12479                                                 echo "And it supports 4 but has not heard about 8."
12480                                         else
12481                                                 echo "However it supports 8 but not 4."
12482                                         fi
12483                                 fi
12484                         fi
12485                 else
12486                         echo "There is no support at all for void."
12487                         voidflags=0
12488                 fi
12489         fi
12490 esac
12491 case "$voidflags" in
12492 "$defvoidused") ;;
12493 *)      $cat >&4 <<'EOM'
12494   Support flag bits are:
12495     1: basic void declarations.
12496     2: arrays of pointers to functions returning void.
12497     4: operations between pointers to and addresses of void functions.
12498     8: generic void pointers.
12499 EOM
12500         dflt="$voidflags";
12501         rp="Your void support flags add up to what?"
12502         . ./myread
12503         voidflags="$ans"
12504         ;;
12505 esac
12506 $rm -f try.* .out
12507
12508
12509 : How can we generate normalized random numbers ?
12510 echo " "
12511 echo "Looking for a random number function..." >&4
12512 case "$randfunc" in
12513 '')
12514         if set drand48 val -f; eval $csym; $val; then
12515                 dflt="drand48"
12516                 echo "Good, found drand48()." >&4
12517         elif set random val -f; eval $csym; $val; then
12518                 dflt="random"
12519                 echo "OK, found random()." >&4
12520         else
12521                 dflt="rand"
12522                 echo "Yick, looks like I have to use rand()." >&4
12523         fi
12524         echo " "
12525         ;;
12526 *)
12527         dflt="$randfunc"
12528         ;;
12529 esac
12530 cont=true
12531
12532 case "$ccflags" in
12533 *-Dmy_rand=*|*-Dmy_srand=*)
12534         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
12535         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
12536         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
12537         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
12538         ;;
12539 esac
12540
12541 while $test "$cont"; do
12542         rp="Use which function to generate random numbers?"
12543         . ./myread
12544         if $test "$ans" = "$dflt"; then
12545                 : null
12546         else
12547                 randbits=''
12548         fi
12549         randfunc="$ans"
12550         if set $ans val -f; eval $csym; $val; then
12551                 cont=''
12552         else
12553                 dflt=y
12554                 rp="I cannot find function $ans. Use that name anyway?"
12555                 . ./myread
12556                 dflt=rand
12557                 case "$ans" in
12558                         [yY]*) cont='';;
12559                 esac
12560         fi
12561         case "$cont" in
12562         '')
12563                 case "$randfunc" in
12564                 drand48)
12565                         drand01="drand48()"
12566                         seedfunc="srand48"
12567                         randbits=48
12568                         randseedtype=long
12569                         ;;
12570                 rand|random)
12571                         case "$randbits" in
12572                         '')
12573 echo "Checking to see how many bits your $randfunc() function produces..." >&4
12574                                 $cat >try.c <<EOCP
12575 #$i_unistd I_UNISTD
12576 #$i_stdlib I_STDLIB
12577 #include <stdio.h>
12578 #ifdef I_UNISTD
12579 #  include <unistd.h>
12580 #endif
12581 #ifdef I_STDLIB
12582 #  include <stdlib.h>
12583 #endif
12584 int main()
12585 {
12586         register int i;
12587         register unsigned long tmp;
12588         register unsigned long max = 0L;
12589
12590         for (i = 1000; i; i--) {
12591                 tmp = (unsigned long) $randfunc();
12592                 if (tmp > max) max = tmp;
12593         }
12594         for (i = 0; max; i++)
12595                 max /= 2;
12596         printf("%d\n",i);
12597 }
12598 EOCP
12599                                 set try
12600                                 if eval $compile_ok; then
12601                                         dflt=`try`
12602                                 else
12603                                         dflt='?'
12604                                         echo "(I can't seem to compile the test program...)"
12605                                 fi
12606                                 ;;
12607                         *)
12608                                 dflt="$randbits"
12609                                 ;;
12610                         esac
12611                         rp="How many bits does your $randfunc() function produce?"
12612                         . ./myread
12613                         randbits="$ans"
12614                         $rm -f try.c try
12615                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12616                         seedfunc="s$randfunc"
12617                         randseedtype=unsigned
12618                         ;;
12619                 *)
12620                         dflt="31"
12621                         rp="How many bits does your $randfunc() function produce?"
12622                         . ./myread
12623                         randbits="$ans"
12624                         seedfunc="s$randfunc"
12625                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12626                         if set $seedfunc val -f; eval $csym; $val; then
12627                                 echo "(Using $seedfunc() to seed random generator)"
12628                         else
12629                                 echo "(Warning: no $seedfunc() to seed random generator)"
12630                                 seedfunc=rand
12631                         fi
12632                         randseedtype=unsigned
12633                         ;;
12634                 esac
12635                 ;;
12636         esac
12637 done
12638
12639 echo " "
12640 echo "Determining whether or not we are on an EBCDIC system..." >&4
12641 $cat >tebcdic.c <<'EOM'
12642 int main()
12643 {
12644   if ('M'==0xd4) return 0;
12645   return 1;
12646 }
12647 EOM
12648
12649 val=$undef
12650 set tebcdic
12651 if eval $compile_ok; then
12652         if ./tebcdic; then
12653                 echo "You seem to speak EBCDIC." >&4
12654                 val="$define"
12655         else
12656                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF8." >&4
12657         fi
12658 else
12659         echo "I'm unable to compile the test program." >&4
12660         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
12661 fi
12662 $rm -f tebcdic.c tebcdic
12663 set ebcdic
12664 eval $setvar
12665
12666 echo " "
12667 $cat >&4 <<EOM
12668 Checking how to flush all pending stdio output...
12669 EOM
12670 # I only know how to find the first 32 possibly open files on SunOS.
12671 # See also hints/sunos_4_1.sh and util.c  --AD
12672 case "$osname" in
12673 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
12674 esac
12675 $cat >>try.c <<EOCP
12676 #include <stdio.h>
12677 #$i_unistd I_UNISTD
12678 #ifdef I_UNISTD
12679 # include <unistd.h>
12680 #endif
12681 #$d_sysconf HAS_SYSCONF
12682 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
12683 #ifdef HAS_STDIO_STREAM_ARRAY
12684 # define STDIO_STREAM_ARRAY $stdio_stream_array
12685 #endif
12686 int main() {
12687   FILE* p = fopen("try.out", "w");
12688 #ifdef TRY_FPUTC
12689   fputc('x', p);
12690 #else
12691 # ifdef TRY_FPRINTF
12692   fprintf(p, "x");
12693 # endif
12694 #endif
12695 #ifdef TRY_FFLUSH_NULL
12696   fflush(NULL);
12697 #endif
12698 #ifdef TRY_FFLUSH_ALL
12699   {
12700     long open_max = -1;
12701 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
12702     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
12703 # else
12704 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
12705     open_max = sysconf(_SC_OPEN_MAX);
12706 #  else
12707 #   ifdef FOPEN_MAX
12708     open_max = FOPEN_MAX;
12709 #   else
12710 #    ifdef OPEN_MAX
12711     open_max = OPEN_MAX;
12712 #    else
12713 #     ifdef _NFILE
12714     open_max = _NFILE;
12715 #     endif
12716 #    endif
12717 #   endif
12718 #  endif
12719 # endif 
12720 # ifdef HAS_STDIO_STREAM_ARRAY
12721     if (open_max > 0) {
12722       long i;
12723       for (i = 0; i < open_max; i++)
12724             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
12725                 STDIO_STREAM_ARRAY[i]._file < open_max &&
12726                 STDIO_STREAM_ARRAY[i]._flag)
12727                 fflush(&STDIO_STREAM_ARRAY[i]);
12728     }   
12729   }
12730 # endif
12731 #endif
12732   _exit(42);
12733 }
12734 EOCP
12735 : first we have to find out how _not_ to flush
12736 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
12737     output=''
12738     set try -DTRY_FPUTC
12739     if eval $compile; then
12740             $rm -f try.out
12741             ./try$exe_ext 2>/dev/null
12742             if $test ! -s try.out -a "X$?" = X42; then
12743                 output=-DTRY_FPUTC
12744             fi
12745     fi
12746     case "$output" in
12747     '')
12748             set try -DTRY_FPRINTF
12749             $rm -f try.out
12750             if eval $compile; then
12751                     $rm -f try.out
12752                     ./try$exe_ext 2>/dev/null
12753                     if $test ! -s try.out -a "X$?" = X42; then
12754                         output=-DTRY_FPRINTF
12755                     fi
12756             fi
12757         ;;
12758     esac
12759 fi
12760 : check for fflush NULL behaviour
12761 case "$fflushNULL" in
12762 '')     set try -DTRY_FFLUSH_NULL $output
12763         if eval $compile; then
12764                 $rm -f try.out
12765                 ./try$exe_ext 2>/dev/null
12766                 code="$?"
12767                 if $test -s try.out -a "X$code" = X42; then
12768                         fflushNULL="`$cat try.out`"
12769                 else
12770                         if $test "X$code" != X42; then
12771                                 $cat >&4 <<EOM
12772 (If this test failed, don't worry, we'll try another method shortly.)
12773 EOM
12774                         fi
12775                 fi
12776         fi
12777         $rm -f core try.core core.try.*
12778         case "$fflushNULL" in
12779         x)      $cat >&4 <<EOM
12780 Your fflush(NULL) works okay for output streams.
12781 Let's see if it clobbers input pipes...
12782 EOM
12783 # As of mid-March 2000 all versions of Solaris appear to have a stdio
12784 # bug that improperly flushes the input end of pipes.  So we avoid the
12785 # autoflush on fork/system/exec support for now. :-(
12786 $cat >tryp.c <<EOCP
12787 #include <stdio.h>
12788 int
12789 main(int argc, char **argv)
12790 {
12791     char buf[1024];
12792     int i;
12793     char *bp = buf;
12794     while (1) {
12795         while ((i = getc(stdin)) != -1
12796                && (*bp++ = i) != '\n'
12797                && bp < &buf[1024])
12798         /* DO NOTHING */ ;
12799         *bp = '\0';
12800         fprintf(stdout, "%s", buf);
12801         fflush(NULL);
12802         if (i == -1)
12803             return 0;
12804         bp = buf;
12805     }
12806 }
12807 EOCP
12808                 fflushNULL="$define"
12809                 set tryp
12810                 if eval $compile; then
12811                     $rm -f tryp.out
12812                     $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
12813                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
12814                        $cat >&4 <<EOM
12815 fflush(NULL) seems to behave okay with input streams.
12816 EOM
12817                         fflushNULL="$define"
12818                     else
12819                         $cat >&4 <<EOM
12820 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
12821 EOM
12822                         fflushNULL="$undef"
12823                     fi
12824                 fi
12825                 $rm -f core tryp.c tryp.core core.tryp.*
12826                 ;;
12827         '')     $cat >&4 <<EOM
12828 Your fflush(NULL) isn't working (contrary to ANSI C).
12829 EOM
12830                 fflushNULL="$undef"
12831                 ;;
12832         *)      $cat >&4 <<EOM
12833 Cannot figure out whether your fflush(NULL) works or not.
12834 I'm assuming it doesn't (contrary to ANSI C).
12835 EOM
12836                 fflushNULL="$undef"
12837                 ;;
12838         esac
12839         ;;
12840 $define|true|[yY]*)
12841         fflushNULL="$define"
12842         ;;
12843 *)
12844         fflushNULL="$undef"
12845         ;;
12846 esac
12847 : check explicit looping only if NULL did not work, and if the pipe
12848 : bug does not show up on an explicit flush too
12849 case "$fflushNULL" in
12850 "$undef")
12851         $cat >tryp.c <<EOCP
12852 #include <stdio.h>
12853 int
12854 main(int argc, char **argv)
12855 {
12856     char buf[1024];
12857     int i;
12858     char *bp = buf;
12859     while (1) {
12860         while ((i = getc(stdin)) != -1
12861                && (*bp++ = i) != '\n'
12862                && bp < &buf[1024])
12863         /* DO NOTHING */ ;
12864         *bp = '\0';
12865         fprintf(stdout, "%s", buf);
12866         fflush(stdin);
12867         if (i == -1)
12868             return 0;
12869         bp = buf;
12870     }
12871 }
12872 EOCP
12873         set tryp
12874         if eval $compile; then
12875             $rm -f tryp.out
12876             $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
12877             if cmp tryp.c tryp.out >/dev/null 2>&1; then
12878                $cat >&4 <<EOM
12879 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
12880 EOM
12881                 : now check for fflushall behaviour
12882                 case "$fflushall" in
12883                 '')     set try -DTRY_FFLUSH_ALL $output
12884                         if eval $compile; then
12885                                 $cat >&4 <<EOM
12886 (Now testing the other method--but note that this also may fail.)
12887 EOM
12888                                 $rm -f try.out
12889                                 ./try$exe_ext 2>/dev/null
12890                                 if $test -s try.out -a "X$?" = X42; then
12891                                         fflushall="`$cat try.out`"
12892                                 fi
12893                         fi
12894                         $rm -f core try.core core.try.*
12895                         case "$fflushall" in
12896                         x)      $cat >&4 <<EOM
12897 Whew. Flushing explicitly all the stdio streams works.
12898 EOM
12899                                 fflushall="$define"
12900                                 ;;
12901                         '')     $cat >&4 <<EOM
12902 Sigh. Flushing explicitly all the stdio streams doesn't work.
12903 EOM
12904                                 fflushall="$undef"
12905                                 ;;
12906                         *)      $cat >&4 <<EOM
12907 Cannot figure out whether flushing stdio streams explicitly works or not.
12908 I'm assuming it doesn't.
12909 EOM
12910                                 fflushall="$undef"
12911                                 ;;
12912                         esac
12913                         ;;
12914                 "$define"|true|[yY]*)
12915                         fflushall="$define"
12916                         ;;
12917                 *)
12918                         fflushall="$undef"
12919                         ;;
12920                 esac
12921             else
12922                 $cat >&4 <<EOM
12923 All is futile.  Even fflush(stdin) clobbers input pipes!
12924 EOM
12925                 fflushall="$undef"
12926             fi
12927         else
12928             fflushall="$undef"
12929         fi
12930         $rm -f core tryp.c tryp.core core.tryp.*
12931         ;;
12932 *)      fflushall="$undef"
12933         ;;
12934 esac
12935
12936 case "$fflushNULL$fflushall" in
12937 undefundef)
12938         $cat <<EOM
12939 OK, I give up.  I cannot figure out how to flush pending stdio output.
12940 We won't be flushing handles at all before fork/exec/popen.
12941 EOM
12942         ;;
12943 esac
12944 $rm -f try.* try$exe_ext
12945
12946 : Store the full pathname to the ar program for use in the C program
12947 : Respect a hint or command line value for full_ar.
12948 case "$full_ar" in
12949 '') full_ar=$ar ;;
12950 esac
12951
12952 : Store the full pathname to the sed program for use in the C program
12953 full_sed=$sed
12954
12955 : see what type gids are declared as in the kernel
12956 echo " "
12957 echo "Looking for the type for group ids returned by getgid()."
12958 set gid_t gidtype xxx stdio.h sys/types.h
12959 eval $typedef
12960 case "$gidtype" in
12961 xxx)
12962         xxx=`./findhdr sys/user.h`
12963         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
12964         case $1 in
12965         unsigned) dflt="$1 $2" ;;
12966         *) dflt="$1" ;;
12967         esac
12968         ;;
12969 *) dflt="$gidtype";;
12970 esac
12971 case "$gidtype" in
12972 gid_t) echo "gid_t found." ;;
12973 *)      rp="What is the type for group ids returned by getgid()?"
12974         . ./myread
12975         gidtype="$ans"
12976         ;;
12977 esac
12978
12979 echo " "
12980 case "$gidtype" in
12981 *_t) zzz="$gidtype"     ;;
12982 *)   zzz="gid"          ;;
12983 esac
12984 echo "Checking the size of $zzz..." >&4 
12985 cat > try.c <<EOCP
12986 #include <sys/types.h>
12987 #include <stdio.h>
12988 int main() {
12989     printf("%d\n", (int)sizeof($gidtype));
12990     exit(0);
12991 }
12992 EOCP
12993 set try
12994 if eval $compile_ok; then
12995         yyy=`./try`
12996         case "$yyy" in
12997         '')     gidsize=4
12998                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
12999                 ;;
13000         *)      gidsize=$yyy
13001                 echo "Your $zzz is $gidsize bytes long."
13002                 ;;
13003         esac
13004 else
13005         gidsize=4
13006         echo "(I can't compile the test program--guessing $gidsize.)" >&4
13007 fi
13008
13009
13010 echo " "
13011 case "$gidtype" in
13012 *_t) zzz="$gidtype"     ;;
13013 *)   zzz="gid"          ;;
13014 esac
13015 echo "Checking the sign of $zzz..." >&4 
13016 cat > try.c <<EOCP
13017 #include <sys/types.h>
13018 #include <stdio.h>
13019 int main() {
13020         $gidtype foo = -1;
13021         if (foo < 0)
13022                 printf("-1\n");
13023         else
13024                 printf("1\n");
13025 }
13026 EOCP
13027 set try
13028 if eval $compile; then
13029         yyy=`./try`
13030         case "$yyy" in
13031         '')     gidsign=1
13032                 echo "(I can't execute the test program--guessing unsigned.)" >&4
13033                 ;;
13034         *)      gidsign=$yyy
13035                 case "$gidsign" in
13036                  1) echo "Your $zzz is unsigned." ;;
13037                 -1) echo "Your $zzz is signed."   ;;
13038                 esac
13039                 ;;
13040         esac
13041 else
13042         gidsign=1
13043         echo "(I can't compile the test program--guessing unsigned.)" >&4
13044 fi
13045
13046
13047 echo " "
13048
13049 if $test X"$quadtype" != X; then
13050
13051 echo "Checking how to print 64-bit integers..." >&4
13052
13053 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
13054         $cat >try.c <<'EOCP'
13055 #include <sys/types.h>
13056 #include <stdio.h>
13057 int main() {
13058   int q = 12345678901;
13059   printf("%ld\n", q);
13060 }
13061 EOCP
13062         set try
13063         if eval $compile; then
13064                 yyy=`./try$exe_ext`
13065                 case "$yyy" in
13066                 12345678901)
13067                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
13068                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
13069                         echo "We will use %d."
13070                         ;;
13071                 esac
13072         fi
13073 fi
13074
13075 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
13076         $cat >try.c <<'EOCP'
13077 #include <sys/types.h>
13078 #include <stdio.h>
13079 int main() {
13080   long q = 12345678901;
13081   printf("%ld\n", q);
13082 }
13083 EOCP
13084         set try
13085         if eval $compile; then
13086                 yyy=`./try$exe_ext`
13087                 case "$yyy" in
13088                 12345678901)
13089                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
13090                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
13091                         echo "We will use %ld."
13092                         ;;
13093                 esac
13094         fi
13095 fi
13096
13097 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
13098         $cat >try.c <<'EOCP'
13099 #include <sys/types.h>
13100 #include <inttypes.h>
13101 #include <stdio.h>
13102 int main() {
13103   int64_t q = 12345678901;
13104   printf("%" PRId64 "\n", q);
13105 }
13106 EOCP
13107         set try
13108         if eval $compile; then
13109                 yyy=`./try$exe_ext`
13110                 case "$yyy" in
13111                 12345678901)
13112                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
13113                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
13114                         echo "We will use the C9X style."
13115                         ;;
13116                 esac
13117         fi
13118 fi
13119
13120 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
13121         $cat >try.c <<'EOCP'
13122 #include <sys/types.h>
13123 #include <stdio.h>
13124 int main() {
13125   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
13126   printf("%lld\n", q);
13127 }
13128 EOCP
13129         set try
13130         if eval $compile; then
13131                 yyy=`./try$exe_ext`
13132                 case "$yyy" in
13133                 12345678901)
13134                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
13135                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
13136                         echo "We will use the %lld style."
13137                         ;;
13138                 esac
13139         fi
13140 fi
13141
13142 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
13143         $cat >try.c <<EOCP
13144 #include <sys/types.h>
13145 #include <stdio.h>
13146 int main() {
13147   $quadtype q = 12345678901;
13148   printf("%Ld\n", q);
13149 }
13150 EOCP
13151         set try
13152         if eval $compile; then
13153                 yyy=`./try$exe_ext`
13154                 case "$yyy" in
13155                 12345678901)
13156                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
13157                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
13158                         echo "We will use %Ld."
13159                         ;;
13160                 esac
13161         fi
13162 fi
13163
13164 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
13165         $cat >try.c <<EOCP
13166 #include <sys/types.h>
13167 #include <stdio.h>
13168 int main() {
13169   $quadtype q = 12345678901;
13170   printf("%qd\n", q);
13171 }
13172 EOCP
13173         set try
13174         if eval $compile; then
13175                 yyy=`./try$exe_ext`
13176                 case "$yyy" in
13177                 12345678901)
13178                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
13179                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
13180                         echo "We will use %qd."
13181                         ;;
13182                 esac
13183         fi
13184 fi
13185
13186 if $test X"$sPRId64" = X; then
13187         echo "Cannot figure out how to print 64-bit integers." >&4
13188 fi
13189
13190 $rm -f try try.*
13191
13192 fi
13193
13194 case "$sPRId64" in
13195 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
13196         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; 
13197         ;;
13198 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
13199         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; 
13200         ;;
13201 esac
13202
13203
13204 echo " "
13205 $echo "Checking the format strings to be used for Perl's internal types..." >&4
13206
13207 if $test X"$ivsize" = X8; then
13208         ivdformat="$sPRId64"
13209         uvuformat="$sPRIu64"
13210         uvoformat="$sPRIo64"
13211         uvxformat="$sPRIx64"
13212         uvXUformat="$sPRIXU64"
13213 else
13214         if $test X"$ivsize" = X"$longsize"; then
13215                 ivdformat='"ld"'
13216                 uvuformat='"lu"'
13217                 uvoformat='"lo"'
13218                 uvxformat='"lx"'
13219                 uvXUformat='"lX"'
13220         else
13221                 if $test X"$ivsize" = X"$intsize"; then
13222                         ivdformat='"d"'
13223                         uvuformat='"u"'
13224                         uvoformat='"o"'
13225                         uvxformat='"x"'
13226                         uvXUformat='"X"'
13227                 else
13228                         : far out
13229                         if $test X"$ivsize" = X"$shortsize"; then
13230                                 ivdformat='"hd"'
13231                                 uvuformat='"hu"'
13232                                 uvoformat='"ho"'
13233                                 uvxformat='"hx"'
13234                                 uvXUformat='"hX"'
13235                         fi
13236                 fi
13237         fi
13238 fi
13239
13240 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
13241         nveformat="$sPRIeldbl"
13242         nvfformat="$sPRIfldbl"
13243         nvgformat="$sPRIgldbl"
13244         nvEUformat="$sPRIEUldbl"
13245         nvFUformat="$sPRIFUldbl"
13246         nvGUformat="$sPRIGUldbl"
13247 else
13248         nveformat='"e"'
13249         nvfformat='"f"'
13250         nvgformat='"g"'
13251         nvEUformat='"E"'
13252         nvFUformat='"F"'
13253         nvGUformat='"G"'
13254 fi
13255
13256 case "$ivdformat" in
13257 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
13258     exit 1
13259     ;;
13260 esac
13261
13262
13263 echo " "
13264 $echo "Checking the format string to be used for gids..." >&4
13265
13266 case "$gidsign" in
13267 -1)     if $test X"$gidsize" = X"$ivsize"; then
13268                 gidformat="$ivdformat"
13269         else
13270                 if $test X"$gidsize" = X"$longsize"; then
13271                         gidformat='"ld"'
13272                 else
13273                         if $test X"$gidsize" = X"$intsize"; then
13274                                 gidformat='"d"'
13275                         else
13276                                 if $test X"$gidsize" = X"$shortsize"; then
13277                                         gidformat='"hd"'
13278                                 fi
13279                         fi
13280                 fi
13281         fi
13282         ;;
13283 *)      if $test X"$gidsize" = X"$uvsize"; then
13284                 gidformat="$uvuformat"
13285         else
13286                 if $test X"$gidsize" = X"$longsize"; then
13287                         gidformat='"lu"'
13288                 else
13289                         if $test X"$gidsize" = X"$intsize"; then
13290                                 gidformat='"u"'
13291                         else
13292                                 if $test X"$gidsize" = X"$shortsize"; then
13293                                         gidformat='"hu"'
13294                                 fi
13295                         fi
13296                 fi
13297         fi
13298         ;;
13299 esac
13300
13301 : see if getgroups exists
13302 set getgroups d_getgrps
13303 eval $inlibc
13304
13305 : see if setgroups exists
13306 set setgroups d_setgrps
13307 eval $inlibc
13308
13309
13310 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
13311 echo " "
13312 case "$d_getgrps$d_setgrps" in
13313 *define*)
13314         case "$groupstype" in
13315         '') dflt="$gidtype" ;;
13316         *)  dflt="$groupstype" ;;
13317         esac
13318         $cat <<EOM
13319 What type of pointer is the second argument to getgroups() and setgroups()?
13320 Usually this is the same as group ids, $gidtype, but not always.
13321
13322 EOM
13323         rp='What type pointer is the second argument to getgroups() and setgroups()?'
13324         . ./myread
13325         groupstype="$ans"
13326         ;;
13327 *)  groupstype="$gidtype";;
13328 esac
13329
13330 echo " "
13331 echo "Checking if your $make program sets \$(MAKE)..." >&4
13332 case "$make_set_make" in
13333 '')
13334         $sed 's/^X //' > testmake.mak << 'EOF'
13335 Xall:
13336 X       @echo 'maketemp="$(MAKE)"'
13337 EOF
13338         case "`$make -f testmake.mak 2>/dev/null`" in
13339         *maketemp=*) make_set_make='#' ;;
13340         *)      make_set_make="MAKE=$make" ;;
13341         esac
13342         $rm -f testmake.mak
13343         ;;
13344 esac
13345 case "$make_set_make" in
13346 '#') echo "Yup, it does.";;
13347 *) echo "Nope, it doesn't.";;
13348 esac
13349
13350 : see what type is used for mode_t
13351 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
13352 set mode_t modetype int stdio.h sys/types.h
13353 eval $typedef_ask
13354
13355 : define a fucntion to check prototypes
13356 $cat > protochk <<EOSH
13357 $startsh
13358 cc="$cc"
13359 optimize="$optimize"
13360 ccflags="$ccflags"
13361 prototype="$prototype"
13362 define="$define"
13363 rm=$rm
13364 EOSH
13365
13366 $cat >> protochk <<'EOSH'
13367
13368 $rm -f try.c
13369 foo="$1"
13370 shift
13371 while test $# -ge 2; do
13372         case "$1" in
13373                 $define) echo "#include <$2>" >> try.c ;;
13374                 literal) echo "$2" >> try.c ;;
13375         esac
13376     shift 2
13377 done
13378 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
13379 cat >> try.c <<'EOCP'
13380 #ifdef CAN_PROTOTYPE
13381 #define _(args) args
13382 #else
13383 #define _(args) ()
13384 #endif
13385 EOCP
13386 echo "$foo" >> try.c
13387 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
13388 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
13389 status=$?
13390 $rm -f try.[co]
13391 exit $status
13392 EOSH
13393 chmod +x protochk
13394 $eunicefix protochk
13395
13396 : see what type is used for size_t
13397 rp="What is the type used for the length parameter for string functions?"
13398 set size_t sizetype 'unsigned int' stdio.h sys/types.h
13399 eval $typedef_ask
13400
13401 : check for type of arguments to gethostbyaddr. 
13402 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
13403         case "$d_gethbyaddr" in
13404         $define)
13405                 $cat <<EOM
13406
13407 Checking to see what type of arguments are accepted by gethostbyaddr().
13408 EOM
13409                 hdrs="$define sys/types.h
13410                         $d_socket sys/socket.h 
13411                         $i_niin netinet/in.h 
13412                         $i_netdb netdb.h
13413                         $i_unistd unistd.h"
13414                 : The first arg can 'char *' or 'void *'
13415                 : The second arg is some of integral type
13416                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
13417                         for yyy in size_t long int; do
13418                                 case "$netdb_host_type" in
13419                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
13420                                         if ./protochk "$try" $hdrs; then
13421                                                 echo "Your system accepts $xxx for the first arg."
13422                                                 echo "...and $yyy for the second arg."
13423                                                 netdb_host_type="$xxx"
13424                                                 netdb_hlen_type="$yyy"
13425                                         fi
13426                                         ;;
13427                                 esac
13428                         done
13429                 done
13430                 : In case none of those worked, prompt the user.
13431                 case "$netdb_host_type" in
13432                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
13433                         dflt='char *'
13434                         . ./myread
13435                         netdb_host_type=$ans
13436                         rp='What is the type for the 2nd argument to gethostbyaddr?'
13437                         dflt="$sizetype"
13438                         . ./myread
13439                         netdb_hlen_type=$ans
13440                         ;;
13441                 esac
13442                 ;;
13443         *)      : no gethostbyaddr, so pick harmless defaults
13444                 netdb_host_type='char *'
13445                 netdb_hlen_type="$sizetype"
13446                 ;;
13447         esac
13448         # Remove the "const" if needed. -- but then we'll have a 
13449         # prototype clash!
13450         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
13451 fi
13452
13453 : check for type of argument to gethostbyname. 
13454 if test "X$netdb_name_type" = X ; then
13455         case "$d_gethbyname" in
13456         $define)
13457                 $cat <<EOM
13458
13459 Checking to see what type of argument is accepted by gethostbyname().
13460 EOM
13461                 hdrs="$define sys/types.h
13462                         $d_socket sys/socket.h 
13463                         $i_niin netinet/in.h 
13464                         $i_netdb netdb.h
13465                         $i_unistd unistd.h"
13466                 for xxx in "const char *" "char *"; do
13467                         case "$netdb_name_type" in
13468                         '')     try="extern struct hostent *gethostbyname($xxx);"
13469                                 if ./protochk "$try" $hdrs; then
13470                                         echo "Your system accepts $xxx."
13471                                         netdb_name_type="$xxx"
13472                                 fi
13473                                 ;;
13474                         esac
13475                 done
13476                 : In case none of those worked, prompt the user.
13477                 case "$netdb_name_type" in
13478                 '')     rp='What is the type for the 1st argument to gethostbyname?'
13479                         dflt='char *'
13480                         . ./myread
13481                         netdb_name_type=$ans
13482                         ;;
13483                 esac
13484                 ;;
13485         *)      : no gethostbyname, so pick harmless default
13486                 netdb_name_type='char *'
13487                 ;;
13488         esac
13489 fi
13490
13491 : check for type of 1st argument to getnetbyaddr. 
13492 if test "X$netdb_net_type" = X ; then
13493         case "$d_getnbyaddr" in
13494         $define)
13495                 $cat <<EOM
13496
13497 Checking to see what type of 1st argument is accepted by getnetbyaddr().
13498 EOM
13499                 hdrs="$define sys/types.h
13500                         $d_socket sys/socket.h 
13501                         $i_niin netinet/in.h 
13502                         $i_netdb netdb.h
13503                         $i_unistd unistd.h"
13504                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
13505                         case "$netdb_net_type" in
13506                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
13507                                 if ./protochk "$try" $hdrs; then
13508                                         echo "Your system accepts $xxx."
13509                                         netdb_net_type="$xxx"
13510                                 fi
13511                                 ;;
13512                         esac
13513                 done
13514                 : In case none of those worked, prompt the user.
13515                 case "$netdb_net_type" in
13516                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
13517                         dflt='long'
13518                         . ./myread
13519                         netdb_net_type=$ans
13520                         ;;
13521                 esac
13522                 ;;
13523         *)      : no getnetbyaddr, so pick harmless default
13524                 netdb_net_type='long'
13525                 ;;
13526         esac
13527 fi
13528 : locate the preferred pager for this system
13529 case "$pager" in
13530 '')
13531         dflt=''
13532         case "$pg" in
13533         /*) dflt=$pg;;
13534         [a-zA-Z]:/*) dflt=$pg;;
13535         esac
13536         case "$more" in
13537         /*) dflt=$more;;
13538         [a-zA-Z]:/*) dflt=$more;;
13539         esac
13540         case "$less" in
13541         /*) dflt=$less;;
13542         [a-zA-Z]:/*) dflt=$less;;
13543         esac
13544         case "$dflt" in
13545         '') dflt=/usr/ucb/more;;
13546         esac
13547         ;;
13548 *) dflt="$pager";;
13549 esac
13550 echo " "
13551 fn=f/
13552 rp='What pager is used on your system?'
13553 . ./getfile
13554 pager="$ans"
13555
13556 : see what type pids are declared as in the kernel
13557 rp="What is the type of process ids on this system?"
13558 set pid_t pidtype int stdio.h sys/types.h
13559 eval $typedef_ask
13560
13561 : Find earliest binary compatible site_perl subdirectory perl can use.
13562 case "$bincompat5005" in
13563 "$define") xs_apiversion='5.005' ;;
13564 *) xs_apiversion=$version ;;   # The current site_perl version.
13565 esac
13566 : Find earliest pure perl site_perl subdirectory perl can use.
13567 : The versioned directories started at 5.005.
13568 pm_apiversion='5.005'
13569
13570 : check for length of pointer
13571 echo " "
13572 case "$ptrsize" in
13573 '')
13574         echo "Checking to see how big your pointers are..." >&4
13575         if test "$voidflags" -gt 7; then
13576                 echo '#define VOID_PTR char *' > try.c
13577         else
13578                 echo '#define VOID_PTR void *' > try.c
13579         fi
13580         $cat >>try.c <<'EOCP'
13581 #include <stdio.h>
13582 int main()
13583 {
13584     printf("%d\n", (int)sizeof(VOID_PTR));
13585     exit(0);
13586 }
13587 EOCP
13588         set try
13589         if eval $compile_ok; then
13590                 ptrsize=`./try`
13591                 echo "Your pointers are $ptrsize bytes long."
13592         else
13593                 dflt='4'
13594                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
13595                 rp="What is the size of a pointer (in bytes)?"
13596                 . ./myread
13597                 ptrsize="$ans"
13598         fi
13599         ;;
13600 esac
13601 $rm -f try.c try
13602
13603 : see if ar generates random libraries by itself
13604 echo " "
13605 echo "Checking how to generate random libraries on your machine..." >&4
13606 echo 'int bar1() { return bar2(); }' > bar1.c
13607 echo 'int bar2() { return 2; }' > bar2.c
13608 $cat > foo.c <<'EOP'
13609 int main() { printf("%d\n", bar1()); exit(0); }
13610 EOP
13611 $cc $ccflags -c bar1.c >/dev/null 2>&1
13612 $cc $ccflags -c bar2.c >/dev/null 2>&1
13613 $cc $ccflags -c foo.c >/dev/null 2>&1
13614 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
13615 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
13616         ./foobar >/dev/null 2>&1; then
13617         echo "$ar appears to generate random libraries itself."
13618         orderlib=false
13619         ranlib=":"
13620 elif $ar ts bar$_a >/dev/null 2>&1 &&
13621         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
13622         ./foobar >/dev/null 2>&1; then
13623                 echo "a table of contents needs to be added with '$ar ts'."
13624                 orderlib=false
13625                 ranlib="$ar ts"
13626 else
13627         case "$ranlib" in
13628         :) ranlib='';;
13629         '')
13630                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
13631                 $test -f $ranlib || ranlib=''
13632                 ;;
13633         esac
13634         if $test -n "$ranlib"; then
13635                 echo "your system has '$ranlib'; we'll use that."
13636                 orderlib=false
13637         else
13638                 echo "your system doesn't seem to support random libraries"
13639                 echo "so we'll use lorder and tsort to order the libraries."
13640                 orderlib=true
13641                 ranlib=":"
13642         fi
13643 fi
13644 $rm -f foo* bar* 
13645
13646 : check for type of arguments to select. 
13647 case "$selecttype" in
13648 '') case "$d_select" in
13649         $define)
13650                 echo " "
13651                 $cat <<EOM
13652 Checking to see what type of arguments are accepted by select().
13653 EOM
13654                 hdrs="$define sys/types.h
13655                         $i_systime sys/time.h 
13656                         $i_sysselct sys/select.h
13657                         $d_socket sys/socket.h"
13658                 : The first arg can be int, unsigned, or size_t
13659                 : The last arg may or may not be 'const'
13660                 val=''
13661                 : void pointer has been seen but using that
13662                 : breaks the selectminbits test
13663                 for xxx in 'fd_set *' 'int *'; do
13664                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
13665                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
13666                                         case "$val" in
13667                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
13668                                                 if ./protochk "$try" $hdrs; then
13669                                                         echo "Your system accepts $xxx."
13670                                                         val="$xxx"
13671                                                 fi
13672                                                 ;;
13673                                         esac
13674                                 done
13675                         done
13676                 done
13677                 case "$val" in
13678                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
13679                         case "$d_fd_set" in
13680                                 $define) dflt="fd_set *" ;;
13681                                 *)              dflt="int *" ;;
13682                         esac
13683                         . ./myread
13684                         val=$ans
13685                         ;;
13686                 esac
13687                 selecttype="$val"
13688                 ;;
13689         *)      : no select, so pick a harmless default
13690                 selecttype='int *'
13691                 ;;
13692         esac
13693         ;;
13694 esac
13695
13696 : check for the select 'width'
13697 case "$selectminbits" in
13698 '') case "$d_select" in
13699         $define)
13700                 $cat <<EOM
13701
13702 Checking to see on how many bits at a time your select() operates...
13703 EOM
13704                 $cat >try.c <<EOCP
13705 #include <sys/types.h>
13706 #$i_time I_TIME
13707 #$i_systime I_SYS_TIME
13708 #$i_systimek I_SYS_TIME_KERNEL
13709 #ifdef I_TIME
13710 #   include <time.h>
13711 #endif
13712 #ifdef I_SYS_TIME
13713 #   ifdef I_SYS_TIME_KERNEL
13714 #       define KERNEL
13715 #   endif
13716 #   include <sys/time.h>
13717 #   ifdef I_SYS_TIME_KERNEL
13718 #       undef KERNEL
13719 #   endif
13720 #endif
13721 #$i_sysselct I_SYS_SELECT
13722 #ifdef I_SYS_SELECT
13723 #include <sys/select.h>
13724 #endif
13725 #$d_socket HAS_SOCKET
13726 #ifdef HAS_SOCKET
13727 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
13728 #endif
13729 #include <stdio.h>
13730 $selecttype b;
13731 #define S sizeof(*(b))
13732 #define MINBITS 64
13733 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
13734 #define NBITS  (NBYTES * 8)
13735 int main() {
13736     char s[NBYTES];
13737     struct timeval t;
13738     int i;
13739     FILE* fp;
13740     int fd;
13741
13742     fclose(stdin);
13743     fp = fopen("try.c", "r");
13744     if (fp == 0)
13745       exit(1);
13746     fd = fileno(fp);
13747     if (fd < 0)
13748       exit(2);
13749     b = ($selecttype)s;
13750     for (i = 0; i < NBITS; i++)
13751         FD_SET(i, b);
13752     t.tv_sec  = 0;
13753     t.tv_usec = 0;
13754     select(fd + 1, b, 0, 0, &t);
13755     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
13756     printf("%d\n", i + 1);
13757     return 0;
13758 }
13759 EOCP
13760                 set try
13761                 if eval $compile_ok; then
13762                         selectminbits=`./try`
13763                         case "$selectminbits" in
13764                         '')     cat >&4 <<EOM
13765 Cannot figure out on how many bits at a time your select() operates.
13766 I'll play safe and guess it is 32 bits.
13767 EOM
13768                                 selectminbits=32
13769                                 bits="32 bits"
13770                                 ;;
13771                         1)      bits="1 bit" ;;
13772                         *)      bits="$selectminbits bits" ;;
13773                         esac
13774                         echo "Your select() operates on $bits at a time." >&4
13775                 else
13776                         rp='What is the minimum number of bits your select() operates on?'
13777                         case "$byteorder" in
13778                         1234|12345678)  dflt=32 ;;
13779                         *)              dflt=1  ;;
13780                         esac
13781                         . ./myread
13782                         val=$ans
13783                         selectminbits="$val"
13784                 fi
13785                 $rm -f try.* try
13786                 ;;
13787         *)      : no select, so pick a harmless default
13788                 selectminbits='32'
13789                 ;;
13790         esac
13791         ;;
13792 esac
13793
13794 : Trace out the files included by signal.h, then look for SIGxxx names.
13795 : Remove SIGARRAYSIZE used by HPUX.
13796 : Remove SIGSTKSIZE used by Linux.
13797 : Remove SIGSTKSZ used by Posix.
13798 : Remove SIGTYP void lines used by OS2.
13799 : Some cpps, like os390, dont give the file name anywhere
13800 if [ "X$fieldn" = X ]; then
13801         : Just make some guesses.  We check them later.
13802         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
13803 else
13804         xxx=`echo '#include <signal.h>' |
13805         $cppstdin $cppminus $cppflags 2>/dev/null |
13806         $grep '^[       ]*#.*include' | 
13807         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
13808 fi
13809 : Check this list of files to be sure we have parsed the cpp output ok.
13810 : This will also avoid potentially non-existent files, such 
13811 : as ../foo/bar.h
13812 xxxfiles=''
13813 for xx in $xxx /dev/null ; do
13814         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
13815 done
13816 : If we have found no files, at least try signal.h
13817 case "$xxxfiles" in
13818 '')     xxxfiles=`./findhdr signal.h` ;;
13819 esac
13820 xxx=`awk '
13821 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
13822         print substr($2, 4, 20)
13823 }
13824 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
13825         print substr($3, 4, 20)
13826 }' $xxxfiles`
13827 : Append some common names just in case the awk scan failed.
13828 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
13829 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
13830 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
13831 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
13832 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
13833
13834 : generate a few handy files for later
13835 $cat > signal.c <<'EOCP'
13836 #include <sys/types.h>
13837 #include <signal.h>
13838 #include <stdio.h>
13839 int main() {
13840
13841 /* Strange style to avoid deeply-nested #if/#else/#endif */
13842 #ifndef NSIG
13843 #  ifdef _NSIG
13844 #    define NSIG (_NSIG)
13845 #  endif
13846 #endif
13847
13848 #ifndef NSIG
13849 #  ifdef SIGMAX
13850 #    define NSIG (SIGMAX+1)
13851 #  endif
13852 #endif
13853
13854 #ifndef NSIG
13855 #  ifdef SIG_MAX
13856 #    define NSIG (SIG_MAX+1)
13857 #  endif
13858 #endif
13859
13860 #ifndef NSIG
13861 #  ifdef MAXSIG
13862 #    define NSIG (MAXSIG+1)
13863 #  endif
13864 #endif
13865
13866 #ifndef NSIG
13867 #  ifdef MAX_SIG
13868 #    define NSIG (MAX_SIG+1)
13869 #  endif
13870 #endif
13871
13872 #ifndef NSIG
13873 #  ifdef SIGARRAYSIZE
13874 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
13875 #  endif
13876 #endif
13877
13878 #ifndef NSIG
13879 #  ifdef _sys_nsig
13880 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
13881 #  endif
13882 #endif
13883
13884 /* Default to some arbitrary number that's big enough to get most
13885    of the common signals.
13886 */
13887 #ifndef NSIG
13888 #    define NSIG 50
13889 #endif
13890
13891 printf("NSIG %d\n", NSIG);
13892
13893 #ifndef JUST_NSIG
13894
13895 EOCP
13896
13897 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
13898 {
13899         printf "#ifdef SIG"; printf $1; printf "\n"
13900         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
13901         printf $1; printf ");\n"
13902         printf "#endif\n"
13903 }
13904 END {
13905         printf "#endif /* JUST_NSIG */\n";
13906         printf "exit(0);\n}\n";
13907 }
13908 ' >>signal.c
13909 $cat >signal.awk <<'EOP'
13910 BEGIN { ndups = 0 }
13911 $1 ~ /^NSIG$/ { nsig = $2 }
13912 ($1 !~ /^NSIG$/) && (NF == 2) {
13913     if ($2 > maxsig) { maxsig = $2 }
13914     if (sig_name[$2]) {
13915         dup_name[ndups] = $1
13916         dup_num[ndups] = $2
13917         ndups++ 
13918     }
13919     else {
13920         sig_name[$2] = $1
13921         sig_num[$2] = $2
13922     }
13923 }
13924 END { 
13925     if (nsig == 0) {
13926         nsig = maxsig + 1
13927     }
13928     printf("NSIG %d\n", nsig);
13929     for (n = 1; n < nsig; n++) {
13930         if (sig_name[n]) {
13931             printf("%s %d\n", sig_name[n], sig_num[n])
13932         }
13933         else {
13934             printf("NUM%d %d\n", n, n) 
13935         }
13936     }
13937     for (n = 0; n < ndups; n++) {
13938         printf("%s %d\n", dup_name[n], dup_num[n])
13939     }
13940 }
13941 EOP
13942 $cat >signal_cmd <<EOS
13943 $startsh
13944 if $test -s signal.lst; then
13945     echo "Using your existing signal.lst file"
13946         exit 0
13947 fi
13948 xxx="$xxx"
13949 EOS
13950 $cat >>signal_cmd <<'EOS'
13951
13952 set signal
13953 if eval $compile_ok; then
13954         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
13955 else
13956         echo "(I can't seem be able to compile the whole test program)" >&4
13957         echo "(I'll try it in little pieces.)" >&4
13958         set signal -DJUST_NSIG
13959         if eval $compile_ok; then
13960                 ./signal$_exe > signal.nsg
13961                 $cat signal.nsg
13962         else
13963                 echo "I can't seem to figure out how many signals you have." >&4
13964                 echo "Guessing 50." >&4
13965                 echo 'NSIG 50' > signal.nsg
13966         fi
13967         : Now look at all the signal names, one at a time.
13968         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
13969                 $cat > signal.c <<EOCP
13970 #include <sys/types.h>
13971 #include <signal.h>
13972 #include <stdio.h>
13973 int main() {
13974 printf("$xx %d\n", SIG${xx});
13975 return 0;
13976 }
13977 EOCP
13978                 set signal
13979                 if eval $compile; then
13980                         echo "SIG${xx} found."
13981                         ./signal$_exe  >> signal.ls1
13982                 else
13983                         echo "SIG${xx} NOT found."
13984                 fi
13985         done
13986         if $test -s signal.ls1; then
13987                 $cat signal.nsg signal.ls1 |
13988                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
13989         fi
13990
13991 fi
13992 if $test -s signal.lst; then
13993         :
13994 else
13995         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
13996         echo 'kill -l' >signal
13997         set X `csh -f <signal`
13998         $rm -f signal
13999         shift
14000         case $# in
14001         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
14002         esac
14003         echo $@ | $tr ' ' $trnl | \
14004             $awk '{ printf "%s %d\n", $1, ++s; }
14005                   END { printf "NSIG %d\n", ++s }' >signal.lst
14006 fi
14007 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
14008 EOS
14009 chmod a+x signal_cmd
14010 $eunicefix signal_cmd
14011
14012 : generate list of signal names
14013 echo " "
14014 case "$sig_name_init" in
14015 '') doinit=yes ;;
14016 *)  case "$sig_num_init" in
14017     ''|*,*) doinit=yes ;;
14018     esac ;;
14019 esac
14020 case "$doinit" in
14021 yes)
14022         echo "Generating a list of signal names and numbers..." >&4
14023         . ./signal_cmd
14024         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
14025         sig_name=`$awk 'BEGIN { printf "ZERO " }
14026                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
14027         sig_num=`$awk  'BEGIN { printf "0 " }
14028                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
14029         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
14030                              !/^NSIG/   { printf "\"%s\", ", $1 }
14031                              END        { printf "0\n" }' signal.lst`
14032         sig_num_init=`$awk  'BEGIN      { printf "0, " }
14033                              !/^NSIG/   { printf "%d, ", $2}
14034                              END        { printf "0\n"}' signal.lst`
14035         ;;
14036 esac
14037 echo "The following $sig_count signals are available:"
14038 echo " "
14039 echo $sig_name | $awk \
14040 'BEGIN { linelen = 0 }
14041 {
14042         for (i = 1; i <= NF; i++) {
14043                 name = "SIG" $i " "
14044                 linelen = linelen + length(name)
14045                 if (linelen > 70) {
14046                         printf "\n"
14047                         linelen = length(name)
14048                 }
14049                 printf "%s", name
14050         }
14051         printf "\n"
14052 }'
14053 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
14054
14055 echo " "
14056 case "$sizetype" in
14057 *_t) zzz="$sizetype"    ;;
14058 *)   zzz="filesize"     ;;
14059 esac
14060 echo "Checking the size of $zzz..." >&4 
14061 cat > try.c <<EOCP
14062 #include <sys/types.h>
14063 #include <stdio.h>
14064 int main() {
14065     printf("%d\n", (int)sizeof($sizetype));
14066     exit(0);
14067 }
14068 EOCP
14069 set try
14070 if eval $compile_ok; then
14071         yyy=`./try`
14072         case "$yyy" in
14073         '')     sizesize=4
14074                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
14075                 ;;
14076         *)      sizesize=$yyy
14077                 echo "Your $zzz size is $sizesize bytes."
14078                 ;;
14079         esac
14080 else
14081         sizesize=4
14082         echo "(I can't compile the test program--guessing $sizesize.)" >&4
14083 fi
14084
14085
14086 : check for socklen_t
14087 echo " "
14088 echo "Checking to see if you have socklen_t..." >&4
14089 $cat >try.c <<EOCP
14090 #include <sys/types.h>
14091 #$d_socket HAS_SOCKET
14092 #ifdef HAS_SOCKET
14093 #include <sys/socket.h>
14094 #endif
14095 int main() { socklen_t x = 16; }
14096 EOCP
14097 set try
14098 if eval $compile; then
14099         val="$define"
14100         echo "You have socklen_t."
14101 else
14102         val="$undef"
14103         echo "You do not have socklen_t."
14104         case "$sizetype" in
14105         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
14106         esac
14107 fi
14108 $rm -f try try.*
14109 set d_socklen_t
14110 eval $setvar
14111
14112 : check for type of the size argument to socket calls
14113 case "$d_socket" in
14114 "$define")
14115         $cat <<EOM
14116
14117 Checking to see what type is the last argument of accept().
14118 EOM
14119         hdrs="$define sys/types.h $d_socket sys/socket.h" 
14120         yyy=''
14121         case "$d_socklen_t" in
14122         "$define") yyy="$yyy socklen_t"
14123         esac
14124         yyy="$yyy $sizetype int long unsigned"
14125         for xxx in $yyy; do
14126                 case "$socksizetype" in
14127                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
14128                         if ./protochk "$try" $hdrs; then
14129                                 echo "Your system accepts '$xxx *' for the last argument of accept()."
14130                                 socksizetype="$xxx"
14131                         fi
14132                         ;;
14133                 esac
14134         done
14135 : In case none of those worked, prompt the user.
14136         case "$socksizetype" in
14137         '')     rp='What is the type for socket address structure sizes?'
14138                 dflt='int'
14139                 . ./myread
14140                 socksizetype=$ans
14141                 ;;
14142         esac
14143         ;;
14144 *)      : no sockets, so pick relatively harmless default
14145         socksizetype='int'
14146         ;;
14147 esac
14148
14149 : see what type is used for signed size_t
14150 set ssize_t ssizetype int stdio.h sys/types.h
14151 eval $typedef
14152 dflt="$ssizetype"
14153 $cat > ssize.c <<EOM
14154 #include <stdio.h>
14155 #include <sys/types.h>
14156 #define Size_t $sizetype
14157 #define SSize_t $dflt
14158 int main()
14159 {
14160         if (sizeof(Size_t) == sizeof(SSize_t))
14161                 printf("$dflt\n");
14162         else if (sizeof(Size_t) == sizeof(int))
14163                 printf("int\n");
14164         else 
14165                 printf("long\n");
14166         exit(0);
14167 }
14168 EOM
14169 echo " "
14170 set ssize
14171 if eval $compile_ok && ./ssize > /dev/null; then
14172         ssizetype=`./ssize`
14173         echo "I'll be using $ssizetype for functions returning a byte count." >&4
14174 else
14175         $cat >&4 <<EOM
14176 Help! I can't compile and run the ssize_t test program: please enlighten me!
14177 (This is probably a misconfiguration in your system or libraries, and
14178 you really ought to fix it.  Still, I'll try anyway.)
14179
14180 I need a type that is the same size as $sizetype, but is guaranteed to
14181 be signed.  Common values are ssize_t, int and long.
14182
14183 EOM
14184         rp="What signed type is the same size as $sizetype?"
14185         . ./myread
14186         ssizetype="$ans"
14187 fi
14188 $rm -f ssize ssize.*
14189
14190 : see what type of char stdio uses.
14191 echo " "
14192 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
14193         echo "Your stdio uses unsigned chars." >&4
14194         stdchar="unsigned char"
14195 else
14196         echo "Your stdio uses signed chars." >&4
14197         stdchar="char"
14198 fi
14199
14200 : see if time exists
14201 echo " "
14202 if test "X$d_time" = X -o X"$timetype" = X; then
14203     if set time val -f d_time; eval $csym; $val; then
14204                 echo 'time() found.' >&4
14205                 val="$define"
14206                 rp="What is the type returned by time() on this system?"
14207                 set time_t timetype long stdio.h sys/types.h
14208                 eval $typedef_ask
14209     else
14210                 echo 'time() not found, hope that will do.' >&4
14211                 val="$undef"
14212                 timetype='int';
14213     fi
14214     set d_time
14215     eval $setvar
14216 fi
14217
14218 : see what type uids are declared as in the kernel
14219 echo " "
14220 echo "Looking for the type for user ids returned by getuid()."
14221 set uid_t uidtype xxx stdio.h sys/types.h
14222 eval $typedef
14223 case "$uidtype" in
14224 xxx)
14225         xxx=`./findhdr sys/user.h`
14226         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
14227         case $1 in
14228         unsigned) dflt="$1 $2" ;;
14229         *) dflt="$1" ;;
14230         esac
14231         ;;
14232 *) dflt="$uidtype";;
14233 esac
14234 case "$uidtype" in
14235 uid_t)  echo "uid_t found." ;;
14236 *)      rp="What is the type for user ids returned by getuid()?"
14237         . ./myread
14238         uidtype="$ans"
14239         ;;
14240 esac
14241
14242 echo " "
14243 case "$uidtype" in
14244 *_t) zzz="$uidtype"     ;;
14245 *)   zzz="uid"          ;;
14246 esac
14247 echo "Checking the size of $zzz..." >&4 
14248 cat > try.c <<EOCP
14249 #include <sys/types.h>
14250 #include <stdio.h>
14251 int main() {
14252     printf("%d\n", (int)sizeof($uidtype));
14253     exit(0);
14254 }
14255 EOCP
14256 set try
14257 if eval $compile_ok; then
14258         yyy=`./try`
14259         case "$yyy" in
14260         '')     uidsize=4
14261                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
14262                 ;;
14263         *)      uidsize=$yyy
14264                 echo "Your $zzz is $uidsize bytes long."
14265                 ;;
14266         esac
14267 else
14268         uidsize=4
14269         echo "(I can't compile the test program--guessing $uidsize.)" >&4
14270 fi
14271
14272 echo " "
14273 case "$uidtype" in
14274 *_t) zzz="$uidtype"     ;;
14275 *)   zzz="uid"          ;;
14276 esac
14277 echo "Checking the sign of $zzz..." >&4
14278 cat > try.c <<EOCP
14279 #include <sys/types.h>
14280 #include <stdio.h>
14281 int main() {
14282         $uidtype foo = -1;
14283         if (foo < 0)
14284                 printf("-1\n");
14285         else
14286                 printf("1\n");
14287 }
14288 EOCP
14289 set try
14290 if eval $compile; then
14291         yyy=`./try`
14292         case "$yyy" in
14293         '')     uidsign=1
14294                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14295                 ;;
14296         *)      uidsign=$yyy
14297                 case "$uidsign" in
14298                  1) echo "Your $zzz is unsigned." ;;
14299                 -1) echo "Your $zzz is signed."   ;;
14300                 esac
14301                 ;;
14302         esac
14303 else
14304         uidsign=1
14305         echo "(I can't compile the test program--guessing unsigned.)" >&4
14306 fi
14307
14308
14309
14310 echo " "
14311 $echo "Checking the format string to be used for uids..." >&4
14312
14313 case "$uidsign" in
14314 -1)     if $test X"$uidsize" = X"$ivsize"; then
14315                 uidformat="$ivdformat"
14316         else
14317                 if $test X"$uidsize" = X"$longsize"; then
14318                         uidformat='"ld"'
14319                 else
14320                         if $test X"$uidsize" = X"$intsize"; then
14321                                 uidformat='"d"'
14322                         else
14323                                 if $test X"$uidsize" = X"$shortsize"; then
14324                                         uidformat='"hd"'
14325                                 fi
14326                         fi
14327                 fi
14328         fi
14329         ;;
14330 *)      if $test X"$uidsize" = X"$uvsize"; then
14331                 uidformat="$uvuformat"
14332         else
14333                 if $test X"$uidsize" = X"$longsize"; then
14334                         uidformat='"lu"'
14335                 else
14336                         if $test X"$uidsize" = X"$intsize"; then
14337                                 uidformat='"u"'
14338                         else
14339                                 if $test X"$uidsize" = X"$shortsize"; then
14340                                         uidformat='"hu"'
14341                                 fi
14342                         fi
14343                 fi
14344         fi
14345         ;;
14346 esac
14347
14348 : see if dbm.h is available
14349 : see if dbmclose exists
14350 set dbmclose d_dbmclose
14351 eval $inlibc
14352
14353 case "$d_dbmclose" in
14354 $define)
14355         set dbm.h i_dbm
14356         eval $inhdr
14357         case "$i_dbm" in
14358         $define)
14359                 val="$undef"
14360                 set i_rpcsvcdbm
14361                 eval $setvar
14362                 ;;
14363         *)      set rpcsvc/dbm.h i_rpcsvcdbm
14364                 eval $inhdr
14365                 ;;
14366         esac
14367         ;;
14368 *)      echo "We won't be including <dbm.h>"
14369         val="$undef"
14370         set i_dbm
14371         eval $setvar
14372         val="$undef"
14373         set i_rpcsvcdbm
14374         eval $setvar
14375         ;;
14376 esac
14377
14378 : see if this is a sys/file.h system
14379 val=''
14380 set sys/file.h val
14381 eval $inhdr
14382
14383 : do we need to include sys/file.h ?
14384 case "$val" in
14385 "$define")
14386         echo " "
14387         if $h_sysfile; then
14388                 val="$define"
14389                 echo "We'll be including <sys/file.h>." >&4
14390         else
14391                 val="$undef"
14392                 echo "We won't be including <sys/file.h>." >&4
14393         fi
14394         ;;
14395 *)
14396         h_sysfile=false
14397         ;;
14398 esac
14399 set i_sysfile
14400 eval $setvar
14401
14402 : see if fcntl.h is there
14403 val=''
14404 set fcntl.h val
14405 eval $inhdr
14406
14407 : see if we can include fcntl.h
14408 case "$val" in
14409 "$define")
14410         echo " "
14411         if $h_fcntl; then
14412                 val="$define"
14413                 echo "We'll be including <fcntl.h>." >&4
14414         else
14415                 val="$undef"
14416                 if $h_sysfile; then
14417         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
14418                 else
14419                         echo "We won't be including <fcntl.h>." >&4
14420                 fi
14421         fi
14422         ;;
14423 *)
14424         h_fcntl=false
14425         val="$undef"
14426         ;;
14427 esac
14428 set i_fcntl
14429 eval $setvar
14430
14431 : see if this is a iconv.h system
14432 set iconv.h i_iconv
14433 eval $inhdr
14434
14435 : see if this is a ieeefp.h system
14436 set ieeefp.h i_ieeefp
14437 eval $inhdr
14438
14439 : see if this is a libutil.h system
14440 set libutil.h i_libutil
14441 eval $inhdr
14442
14443 : see if locale.h is available
14444 set locale.h i_locale
14445 eval $inhdr
14446
14447 : see if mach cthreads are available
14448 if test "X$usethreads" = "X$define"; then
14449         set mach/cthreads.h i_machcthr
14450         eval $inhdr
14451 else
14452         i_machcthr="$undef"
14453 fi
14454
14455
14456
14457 : see if this is a math.h system
14458 set math.h i_math
14459 eval $inhdr
14460
14461 : see if this is a mntent.h system
14462 set mntent.h i_mntent
14463 eval $inhdr
14464
14465 : see if ndbm.h is available
14466 set ndbm.h t_ndbm
14467 eval $inhdr
14468 case "$t_ndbm" in
14469 $define)
14470         : see if dbm_open exists
14471         set dbm_open d_dbm_open
14472         eval $inlibc
14473         case "$d_dbm_open" in
14474         $undef)
14475                 t_ndbm="$undef"
14476                 echo "We won't be including <ndbm.h>"
14477                 ;;
14478         esac
14479         ;;
14480 esac
14481 val="$t_ndbm"
14482 set i_ndbm
14483 eval $setvar
14484
14485 : see if net/errno.h is available
14486 val=''
14487 set net/errno.h val
14488 eval $inhdr
14489
14490 : Unfortunately, it causes problems on some systems.  Arrgh.
14491 case "$val" in
14492 $define)
14493         cat > try.c <<'EOM'
14494 #include <stdio.h>
14495 #include <errno.h>
14496 #include <net/errno.h>
14497 int func()
14498 {
14499         return ENOTSOCK;
14500 }
14501 EOM
14502         if $cc $ccflags -c try.c >/dev/null 2>&1; then
14503                 echo "We'll be including <net/errno.h>." >&4
14504         else
14505                 echo "We won't be including <net/errno.h>." >&4
14506                 val="$undef"
14507         fi
14508         $rm -f try.* try
14509         ;;
14510 esac
14511 set i_neterrno
14512 eval $setvar
14513
14514 : see if netinet/tcp.h is available
14515 set netinet/tcp.h i_netinettcp
14516 eval $inhdr
14517
14518 : see if this is a poll.h system
14519 set poll.h i_poll
14520 eval $inhdr
14521
14522 : see if this is a prot.h system
14523 set prot.h i_prot
14524 eval $inhdr
14525
14526 echo " "
14527 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
14528 $cat <<'EOSH' > Cppsym.know
14529 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
14530 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
14531 alliant alpha am29000 AM29000 amiga AMIGAOS AMIX
14532 ansi ANSI_C_SOURCE apollo ardent atarist att386 att3b BeOS
14533 BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
14534 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
14535 bull c cadmus clipper CMU COFF COMPILER_VERSION
14536 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
14537 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
14538 Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
14539 FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
14540 GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
14541 H3050R H3050RX hbullx20 hcx host_mips
14542 hp200 hp300 hp700 HP700 hp800 hp9000
14543 hp9000s200 hp9000s300 hp9000s400 hp9000s500
14544 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
14545 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
14546 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
14547 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
14548 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
14549 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
14550 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
14551 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
14552 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
14553 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
14554 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
14555 MATH_HAS_NO_SIDE_EFFECTS
14556 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
14557 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
14558 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
14559 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
14560 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
14561 NetBSD news1500 news1700 news1800 news1900 news3700
14562 news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
14563 ns32016 ns32332 ns32k nsc32000
14564 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
14565 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
14566 pc532 pdp11 PGC PIC plexus PORTAR posix
14567 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
14568 POSIX_C_SOURCE POSIX_SOURCE POWER
14569 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
14570 riscix riscos RT scs SCO sequent sgi SGI_SOURCE sinix
14571 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
14572 sony sony_news sonyrisc sparc sparclite spectrum
14573 stardent stdc STDC_EXT stratos sun sun3 sun386
14574 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
14575 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
14576 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
14577 sysV68 sysV88 Tek4132 Tek4300 titan
14578 tower tower32 tower32_200 tower32_600 tower32_700
14579 tower32_800 tower32_850 tss
14580 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
14581 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
14582 unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
14583 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
14584 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
14585 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
14586 z8000
14587 EOSH
14588 # Maybe put other stuff here too.
14589 cat <<EOSH >>Cppsym.know
14590 $osname
14591 EOSH
14592 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
14593 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
14594 $cat Cppsym.know > Cppsym.c
14595 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
14596 $rm -f Cppsym.a Cppsym.b Cppsym.c
14597 cat <<EOSH > Cppsym
14598 $startsh
14599 if $test \$# -gt 0; then
14600     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
14601     if $test -s Cppsym.got; then
14602         $rm -f Cppsym.got
14603         exit 0
14604     fi
14605     $rm -f Cppsym.got
14606     exit 1
14607 else
14608     $tr " " "$trnl" | ./Cppsym.try
14609     exit 0
14610 fi
14611 EOSH
14612 chmod +x Cppsym
14613 $eunicefix Cppsym
14614 cat <<EOSH > Cppsym.try
14615 $startsh
14616 cat <<'EOCP' > try.c
14617 #include <stdio.h>
14618 int main() {
14619 EOCP
14620 $awk \\
14621 EOSH
14622 cat <<'EOSH' >> Cppsym.try
14623 'length($1) > 0 {
14624     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
14625     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
14626     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
14627     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
14628 }'       >> try.c
14629 echo '}' >> try.c
14630 EOSH
14631 cat <<EOSH >> Cppsym.try
14632 ccflags="$ccflags"
14633 case "$osname-$gccversion" in
14634 irix-) ccflags="\$ccflags -woff 1178" ;;
14635 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
14636 esac
14637 $cc -o try $optimize \$ccflags $ldflags try.c $libs && ./try$exe_ext
14638 EOSH
14639 chmod +x Cppsym.try
14640 $eunicefix Cppsym.try
14641 ./Cppsym < Cppsym.know > Cppsym.true
14642 : now check the C compiler for additional symbols
14643 postprocess_cc_v=''
14644 case "$osname" in
14645 aix) postprocess_cc_v="|$tr , ' '" ;;
14646 esac
14647 $cat >ccsym <<EOS
14648 $startsh
14649 $cat >tmp.c <<EOF
14650 extern int foo;
14651 EOF
14652 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
14653 do
14654         case "\$i" in
14655         -D*) echo "\$i" | $sed 's/^-D//';;
14656         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
14657         esac
14658 done
14659 $rm -f try.c
14660 EOS
14661 postprocess_cc_v=''
14662 chmod +x ccsym
14663 $eunicefix ccsym
14664 ./ccsym > ccsym1.raw
14665 if $test -s ccsym1.raw; then
14666        $sort ccsym1.raw | $uniq >ccsym.raw
14667 else
14668        mv ccsym1.raw ccsym.raw
14669 fi
14670
14671 $awk '/\=/ { print $0; next }
14672         { print $0"=1" }' ccsym.raw >ccsym.list
14673 $awk '/\=/ { print $0; next }
14674         { print $0"=1" }' Cppsym.true >ccsym.true
14675 $comm -13 ccsym.true ccsym.list >ccsym.own
14676 $comm -12 ccsym.true ccsym.list >ccsym.com
14677 $comm -23 ccsym.true ccsym.list >ccsym.cpp
14678 also=''
14679 if $test -z ccsym.raw; then
14680         echo "Your C compiler doesn't seem to define any symbols!" >&4
14681         echo " "
14682         echo "However, your C preprocessor defines the following symbols:"
14683         $cat Cppsym.true
14684         ccsymbols=''
14685         cppsymbols=`$cat Cppsym.true`
14686         cppsymbols=`echo $cppsymbols`
14687         cppccsymbols="$cppsymbols"
14688 else
14689         if $test -s ccsym.com; then
14690                 echo "Your C compiler and pre-processor define these symbols:"
14691                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
14692                 also='also '
14693                 symbols='ones'
14694                 cppccsymbols=`$cat ccsym.com`
14695                 cppccsymbols=`echo $cppccsymbols`
14696                 $test "$silent" || sleep 1
14697         fi
14698         if $test -s ccsym.cpp; then
14699                 $test "$also" && echo " "
14700                 echo "Your C pre-processor ${also}defines the following symbols:"
14701                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
14702                 also='further '
14703                 cppsymbols=`$cat ccsym.cpp`
14704                 cppsymbols=`echo $cppsymbols`
14705                 $test "$silent" || sleep 1
14706         fi
14707         if $test -s ccsym.own; then
14708                 $test "$also" && echo " "
14709                 echo "Your C compiler ${also}defines the following cpp symbols:"
14710                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
14711                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
14712                 ccsymbols=`$cat ccsym.own`
14713                 ccsymbols=`echo $ccsymbols`
14714                 $test "$silent" || sleep 1
14715         fi
14716 fi
14717 $rm -f ccsym* Cppsym.*
14718
14719 : see if this is a termio system
14720 val="$undef"
14721 val2="$undef"
14722 val3="$undef"
14723 if $test `./findhdr termios.h`; then
14724         set tcsetattr i_termios
14725         eval $inlibc
14726         val3="$i_termios"
14727 fi
14728 echo " "
14729 case "$val3" in
14730 "$define") echo "You have POSIX termios.h... good!" >&4;;
14731 *) if ./Cppsym pyr; then
14732                 case "`/bin/universe`" in
14733                 ucb) if $test `./findhdr sgtty.h`; then
14734                                 val2="$define"
14735                                 echo "<sgtty.h> found." >&4
14736                         else
14737                                 echo "System is pyramid with BSD universe."
14738                                 echo "<sgtty.h> not found--you could have problems." >&4
14739                         fi;;
14740                 *) if $test `./findhdr termio.h`; then
14741                                 val="$define"
14742                                 echo "<termio.h> found." >&4
14743                         else
14744                                 echo "System is pyramid with USG universe."
14745                                 echo "<termio.h> not found--you could have problems." >&4
14746                         fi;;
14747                 esac
14748         elif ./usg; then
14749                 if $test `./findhdr termio.h`; then
14750                         echo "<termio.h> found." >&4
14751                         val="$define"
14752                 elif $test `./findhdr sgtty.h`; then
14753                         echo "<sgtty.h> found." >&4
14754                         val2="$define"
14755                 else
14756 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
14757                 fi
14758         else
14759                 if $test `./findhdr sgtty.h`; then
14760                         echo "<sgtty.h> found." >&4
14761                         val2="$define"
14762                 elif $test `./findhdr termio.h`; then
14763                         echo "<termio.h> found." >&4
14764                         val="$define"
14765                 else
14766 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
14767                 fi
14768         fi;;
14769 esac
14770 set i_termio; eval $setvar
14771 val=$val2; set i_sgtty; eval $setvar
14772 val=$val3; set i_termios; eval $setvar
14773
14774 : see if this is a shadow.h system
14775 set shadow.h i_shadow
14776 eval $inhdr
14777
14778 : see if this is a socks.h system
14779 set socks.h i_socks
14780 eval $inhdr
14781
14782 : see if stdarg is available
14783 echo " "
14784 if $test `./findhdr stdarg.h`; then
14785         echo "<stdarg.h> found." >&4
14786         valstd="$define"
14787 else
14788         echo "<stdarg.h> NOT found." >&4
14789         valstd="$undef"
14790 fi
14791
14792 : see if varags is available
14793 echo " "
14794 if $test `./findhdr varargs.h`; then
14795         echo "<varargs.h> found." >&4
14796 else
14797         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14798 fi
14799
14800 : set up the varargs testing programs
14801 $cat > varargs.c <<EOP
14802 #ifdef I_STDARG
14803 #include <stdarg.h>
14804 #endif
14805 #ifdef I_VARARGS
14806 #include <varargs.h>
14807 #endif
14808
14809 #ifdef I_STDARG
14810 int f(char *p, ...)
14811 #else
14812 int f(va_alist)
14813 va_dcl
14814 #endif
14815 {
14816         va_list ap;
14817 #ifndef I_STDARG
14818         char *p;
14819 #endif
14820 #ifdef I_STDARG
14821         va_start(ap,p);
14822 #else
14823         va_start(ap);
14824         p = va_arg(ap, char *);
14825 #endif
14826         va_end(ap);
14827 }
14828 EOP
14829 $cat > varargs <<EOP
14830 $startsh
14831 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14832         echo "true"
14833 else
14834         echo "false"
14835 fi
14836 $rm -f varargs$_o
14837 EOP
14838 chmod +x varargs
14839
14840 : now check which varargs header should be included
14841 echo " "
14842 i_varhdr=''
14843 case "$valstd" in
14844 "$define")
14845         if `./varargs I_STDARG`; then
14846                 val='stdarg.h'
14847         elif `./varargs I_VARARGS`; then
14848                 val='varargs.h'
14849         fi
14850         ;;
14851 *)
14852         if `./varargs I_VARARGS`; then
14853                 val='varargs.h'
14854         fi
14855         ;;
14856 esac
14857 case "$val" in
14858 '')
14859 echo "I could not find the definition for va_dcl... You have problems..." >&4
14860         val="$undef"; set i_stdarg; eval $setvar
14861         val="$undef"; set i_varargs; eval $setvar
14862         ;;
14863 *) 
14864         set i_varhdr
14865         eval $setvar
14866         case "$i_varhdr" in
14867         stdarg.h)
14868                 val="$define"; set i_stdarg; eval $setvar
14869                 val="$undef"; set i_varargs; eval $setvar
14870                 ;;
14871         varargs.h)
14872                 val="$undef"; set i_stdarg; eval $setvar
14873                 val="$define"; set i_varargs; eval $setvar
14874                 ;;
14875         esac
14876         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14877 esac
14878 $rm -f varargs*
14879
14880 : see if stddef is available
14881 set stddef.h i_stddef
14882 eval $inhdr
14883
14884 : see if this is a sunmath.h system
14885 set sunmath.h i_sunmath
14886 eval $inhdr
14887
14888 : see if sys/access.h is available
14889 set sys/access.h i_sysaccess
14890 eval $inhdr
14891
14892 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
14893 set sys/filio.h i_sysfilio
14894 eval $inhdr
14895 echo " "
14896 if $test `./findhdr sys/ioctl.h`; then
14897         val="$define"
14898         echo '<sys/ioctl.h> found.' >&4
14899 else
14900         val="$undef"
14901         if $test $i_sysfilio = "$define"; then
14902             echo '<sys/ioctl.h> NOT found.' >&4
14903         else
14904                 $test $i_sgtty = "$define" && xxx="sgtty.h"
14905                 $test $i_termio = "$define" && xxx="termio.h"
14906                 $test $i_termios = "$define" && xxx="termios.h"
14907 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
14908         fi
14909 fi
14910 set i_sysioctl
14911 eval $setvar
14912
14913
14914 : see if this is a syslog.h system
14915 set syslog.h i_syslog
14916 eval $inhdr
14917
14918
14919 : see if this is a sys/mode.h system
14920 set sys/mode.h i_sysmode
14921 eval $inhdr
14922
14923 : see if sys/resource.h has to be included
14924 set sys/resource.h i_sysresrc
14925 eval $inhdr
14926
14927 : see if sys/security.h is available
14928 set sys/security.h i_syssecrt
14929 eval $inhdr
14930
14931 : see if this is a sys/statvfs.h system
14932 set sys/statvfs.h i_sysstatvfs
14933 eval $inhdr
14934
14935 : see if this is a sys/uio.h system
14936 set sys/uio.h i_sysuio
14937 eval $inhdr
14938
14939 : see if this is a sys/un.h system
14940 set sys/un.h i_sysun
14941 eval $inhdr
14942
14943
14944 : see if this is a sys/utsname.h system
14945 set sys/utsname.h i_sysutsname
14946 eval $inhdr
14947
14948 : see if this is a syswait system
14949 set sys/wait.h i_syswait
14950 eval $inhdr
14951
14952 : see if this is a ustat.h system
14953 set ustat.h i_ustat
14954 eval $inhdr
14955
14956 : see if this is an utime system
14957 set utime.h i_utime
14958 eval $inhdr
14959
14960 : see if this is a values.h system
14961 set values.h i_values
14962 eval $inhdr
14963
14964 : see if this is a vfork system
14965 case "$d_vfork" in
14966 "$define")
14967         set vfork.h i_vfork
14968         eval $inhdr
14969         ;;
14970 *)
14971         i_vfork="$undef"
14972         ;;
14973 esac
14974
14975 : see if gdbm.h is available
14976 set gdbm.h t_gdbm
14977 eval $inhdr
14978 case "$t_gdbm" in
14979 $define)
14980         : see if gdbm_open exists
14981         set gdbm_open d_gdbm_open
14982         eval $inlibc
14983         case "$d_gdbm_open" in
14984         $undef)
14985                 t_gdbm="$undef"
14986                 echo "We won't be including <gdbm.h>"
14987                 ;;
14988         esac
14989         ;;
14990 esac
14991 val="$t_gdbm"
14992 set i_gdbm
14993 eval $setvar
14994
14995 echo " "
14996 echo "Looking for extensions..." >&4
14997 : If we are using the old config.sh, known_extensions may contain
14998 : old or inaccurate or duplicate values.
14999 known_extensions=''
15000 nonxs_extensions=''
15001 : We do not use find because it might not be available.
15002 : We do not just use MANIFEST because the user may have dropped
15003 : some additional extensions into the source tree and expect them
15004 : to be built.
15005
15006 : Function to recursively find available extensions, ignoring DynaLoader
15007 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
15008 find_extensions='
15009     for xxx in *; do
15010        case "$xxx" in
15011            DynaLoader|dynaload) ;;
15012            *)
15013            if $test -f $xxx/$xxx.xs; then
15014                known_extensions="$known_extensions $1$xxx";
15015            elif $test -f $xxx/Makefile.PL; then
15016                nonxs_extensions="$nonxs_extensions $1$xxx";
15017            else
15018                if $test -d $xxx -a $# -lt 10; then
15019                    set $1$xxx/ $*;
15020                    cd $xxx;
15021                    eval $find_extensions;
15022                    cd ..;
15023                    shift;
15024                fi;
15025            fi
15026            ;;
15027        esac;
15028     done'
15029 tdir=`pwd`
15030 cd $rsrc/ext
15031 set X
15032 shift
15033 eval $find_extensions
15034 set X $nonxs_extensions
15035 shift
15036 nonxs_extensions="$*"
15037 set X $known_extensions
15038 shift
15039 known_extensions="$*"
15040 cd $tdir
15041
15042 : Now see which are supported on this system.
15043 avail_ext=''
15044 for xxx in $known_extensions ; do
15045         case "$xxx" in
15046         DB_File|db_file)
15047                 case "$i_db" in
15048                 $define) avail_ext="$avail_ext $xxx" ;;
15049                 esac
15050                 ;;
15051         GDBM_File|gdbm_fil)
15052                 case "$i_gdbm" in 
15053                 $define) avail_ext="$avail_ext $xxx" ;;
15054                 esac
15055                 ;;
15056         NDBM_File|ndbm_fil)
15057                 case "$i_ndbm" in
15058                 $define)
15059                     case "$osname-$use64bitint" in
15060                     hpux-define)
15061                         case "$libs" in
15062                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
15063                         esac
15064                         ;;
15065                     *) avail_ext="$avail_ext $xxx" ;;
15066                     esac
15067                     ;;
15068                 esac
15069                 ;;
15070         ODBM_File|odbm_fil) 
15071                 case "${i_dbm}${i_rpcsvcdbm}" in
15072                 *"${define}"*)
15073                     case "$osname-$use64bitint" in
15074                     hpux-define)
15075                         case "$libs" in
15076                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
15077                         esac
15078                         ;;
15079                     *) avail_ext="$avail_ext $xxx" ;;
15080                     esac
15081                     ;;
15082                 esac
15083                 ;;
15084         POSIX|posix)
15085                 case "$useposix" in
15086                 true|define|y) avail_ext="$avail_ext $xxx" ;;
15087                 esac
15088                 ;;
15089         Opcode|opcode)
15090                 case "$useopcode" in
15091                 true|define|y) avail_ext="$avail_ext $xxx" ;;
15092                 esac
15093                 ;;
15094         Socket|socket)
15095                 case "$d_socket" in 
15096                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15097                 esac
15098                 ;;
15099         Sys/Syslog|sys/syslog)
15100                 : XXX syslog requires socket
15101                 case "$d_socket" in 
15102                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15103                 esac
15104                 ;;
15105         Thread|thread)
15106                 case "$usethreads" in 
15107                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15108                 esac
15109                 ;;
15110         IPC/SysV|ipc/sysv)
15111                 : XXX Do we need a useipcsysv variable here
15112                 case "${d_msg}${d_sem}${d_shm}" in 
15113                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
15114                 esac
15115                 ;;
15116         *)      avail_ext="$avail_ext $xxx"
15117                 ;;
15118         esac
15119 done
15120
15121 set X $avail_ext
15122 shift
15123 avail_ext="$*"
15124
15125 : Now see which nonxs extensions are supported on this system.
15126 : For now assume all are.
15127 nonxs_ext=''
15128 for xxx in $nonxs_extensions ; do
15129         case "$xxx" in
15130         *)      nonxs_ext="$nonxs_ext $xxx"
15131                 ;;
15132         esac
15133 done
15134
15135 set X $nonxs_ext
15136 shift
15137 nonxs_ext="$*"
15138
15139 case $usedl in
15140 $define)
15141         $cat <<EOM
15142 A number of extensions are supplied with $package.  You may choose to
15143 compile these extensions for dynamic loading (the default), compile
15144 them into the $package executable (static loading), or not include
15145 them at all.  Answer "none" to include no extensions.
15146 Note that DynaLoader is always built and need not be mentioned here.
15147
15148 EOM
15149         case "$dynamic_ext" in
15150         '') dflt="$avail_ext" ;;
15151         *)      dflt="$dynamic_ext"
15152                 # Perhaps we are reusing an old out-of-date config.sh.
15153                 case "$hint" in
15154                 previous)
15155                         if test X"$dynamic_ext" != X"$avail_ext"; then
15156                                 $cat <<EOM
15157 NOTICE:  Your previous config.sh list may be incorrect. 
15158 The extensions now available to you are 
15159         ${avail_ext}
15160 but the default list from your previous config.sh is
15161         ${dynamic_ext} 
15162
15163 EOM
15164                         fi
15165                         ;;
15166                 esac
15167                 ;;
15168         esac
15169         case "$dflt" in
15170         '')     dflt=none;;
15171         esac
15172         rp="What extensions do you wish to load dynamically?"
15173         . ./myread
15174         case "$ans" in
15175         none) dynamic_ext=' ' ;;
15176         *) dynamic_ext="$ans" ;;
15177         esac
15178
15179         case "$static_ext" in
15180         '')
15181                 : Exclude those already listed in dynamic linking
15182                 dflt=''
15183                 for xxx in $avail_ext; do
15184                         case " $dynamic_ext " in
15185                         *" $xxx "*) ;;
15186                         *) dflt="$dflt $xxx" ;;
15187                         esac
15188                 done
15189                 set X $dflt
15190                 shift
15191                 dflt="$*"
15192                 ;;
15193         *)  dflt="$static_ext" 
15194                 ;;
15195         esac
15196
15197         case "$dflt" in
15198         '')     dflt=none;;
15199         esac
15200         rp="What extensions do you wish to load statically?"
15201         . ./myread
15202         case "$ans" in
15203         none) static_ext=' ' ;;
15204         *) static_ext="$ans" ;;
15205         esac
15206         ;;
15207 *)
15208         $cat <<EOM
15209 A number of extensions are supplied with $package.  Answer "none" 
15210 to include no extensions. 
15211 Note that DynaLoader is always built and need not be mentioned here.
15212
15213 EOM
15214         case "$static_ext" in
15215         '') dflt="$avail_ext" ;;
15216         *)      dflt="$static_ext"
15217                 # Perhaps we are reusing an old out-of-date config.sh.
15218                 case "$hint" in
15219                 previous)
15220                         if test X"$static_ext" != X"$avail_ext"; then
15221                                 $cat <<EOM
15222 NOTICE:  Your previous config.sh list may be incorrect. 
15223 The extensions now available to you are 
15224         ${avail_ext}
15225 but the default list from your previous config.sh is
15226         ${static_ext} 
15227
15228 EOM
15229                         fi
15230                         ;;
15231                 esac
15232                 ;;
15233         esac
15234         : Exclude those that are not xs extensions
15235         case "$dflt" in
15236         '')     dflt=none;;
15237         esac
15238         rp="What extensions do you wish to include?"
15239         . ./myread
15240         case "$ans" in
15241         none) static_ext=' ' ;;
15242         *) static_ext="$ans" ;;
15243         esac
15244         ;;
15245 esac
15246
15247 set X $dynamic_ext $static_ext $nonxs_ext
15248 shift
15249 extensions="$*"
15250
15251 : Remove libraries needed only for extensions
15252 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
15253 : The exception is SunOS 4.x, which needs them.
15254 case "${osname}X${osvers}" in
15255 sunos*X4*)
15256     perllibs="$libs"
15257     ;;
15258 *) case "$usedl" in
15259     $define|true|[yY]*)
15260             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'` 
15261             shift
15262             perllibs="$*"
15263             ;;
15264     *)  perllibs="$libs"
15265             ;;
15266     esac
15267     ;;
15268 esac
15269
15270 : Remove build directory name from cppstdin so it can be used from
15271 : either the present location or the final installed location.
15272 echo " "
15273 : Get out of the UU directory to get correct path name.
15274 cd ..
15275 case "$cppstdin" in
15276 `pwd`/cppstdin)
15277         echo "Stripping down cppstdin path name"
15278         cppstdin=cppstdin
15279         ;;
15280 esac
15281 cd UU
15282
15283 : end of configuration questions
15284 echo " "
15285 echo "End of configuration questions."
15286 echo " "
15287
15288 : back to where it started
15289 if test -d ../UU; then
15290         cd ..
15291 fi
15292
15293 : configuration may be patched via a 'config.over' file
15294 if $test -f config.over; then
15295         echo " "
15296         dflt=y
15297         rp='I see a config.over file.  Do you wish to load it?'
15298         . UU/myread
15299         case "$ans" in
15300         n*) echo "OK, I'll ignore it.";;
15301         *)      . ./config.over
15302                 echo "Configuration override changes have been loaded."
15303                 ;;
15304         esac
15305 fi
15306
15307 : in case they want portability, strip down executable paths
15308 case "$d_portable" in
15309 "$define")
15310         echo " "
15311         echo "Stripping down executable paths..." >&4
15312         for file in $loclist $trylist; do
15313                 eval temp=\$$file
15314                 eval $file=`basename $temp`
15315         done
15316         ;;
15317 esac
15318
15319 : create config.sh file
15320 echo " "
15321 echo "Creating config.sh..." >&4
15322 $spitshell <<EOT >config.sh
15323 $startsh
15324 #
15325 # This file was produced by running the Configure script. It holds all the
15326 # definitions figured out by Configure. Should you modify one of these values,
15327 # do not forget to propagate your changes by running "Configure -der". You may
15328 # instead choose to run each of the .SH files by yourself, or "Configure -S".
15329 #
15330
15331 # Package name      : $package
15332 # Source directory  : $src
15333 # Configuration time: $cf_time
15334 # Configured by     : $cf_by
15335 # Target system     : $myuname
15336
15337 Author='$Author'
15338 Date='$Date'
15339 Header='$Header'
15340 Id='$Id'
15341 Locker='$Locker'
15342 Log='$Log'
15343 Mcc='$Mcc'
15344 RCSfile='$RCSfile'
15345 Revision='$Revision'
15346 Source='$Source'
15347 State='$State'
15348 _a='$_a'
15349 _exe='$_exe'
15350 _o='$_o'
15351 afs='$afs'
15352 alignbytes='$alignbytes'
15353 ansi2knr='$ansi2knr'
15354 aphostname='$aphostname'
15355 api_revision='$api_revision'
15356 api_subversion='$api_subversion'
15357 api_version='$api_version'
15358 api_versionstring='$api_versionstring'
15359 ar='$ar'
15360 archlib='$archlib'
15361 archlibexp='$archlibexp'
15362 archname64='$archname64'
15363 archname='$archname'
15364 archobjs='$archobjs'
15365 awk='$awk'
15366 baserev='$baserev'
15367 bash='$bash'
15368 bin='$bin'
15369 bincompat5005='$bincompat5005'
15370 binexp='$binexp'
15371 bison='$bison'
15372 byacc='$byacc'
15373 byteorder='$byteorder'
15374 c='$c'
15375 castflags='$castflags'
15376 cat='$cat'
15377 cc='$cc'
15378 cccdlflags='$cccdlflags'
15379 ccdlflags='$ccdlflags'
15380 ccflags='$ccflags'
15381 ccflags_uselargefiles='$ccflags_uselargefiles'
15382 ccname='$ccname'
15383 ccsymbols='$ccsymbols'
15384 ccversion='$ccversion'
15385 cf_by='$cf_by'
15386 cf_email='$cf_email'
15387 cf_time='$cf_time'
15388 charsize='$charsize'
15389 chgrp='$chgrp'
15390 chmod='$chmod'
15391 chown='$chown'
15392 clocktype='$clocktype'
15393 comm='$comm'
15394 compress='$compress'
15395 contains='$contains'
15396 cp='$cp'
15397 cpio='$cpio'
15398 cpp='$cpp'
15399 cpp_stuff='$cpp_stuff'
15400 cppccsymbols='$cppccsymbols'
15401 cppflags='$cppflags'
15402 cpplast='$cpplast'
15403 cppminus='$cppminus'
15404 cpprun='$cpprun'
15405 cppstdin='$cppstdin'
15406 cppsymbols='$cppsymbols'
15407 crosscompile='$crosscompile'
15408 cryptlib='$cryptlib'
15409 csh='$csh'
15410 d_Gconvert='$d_Gconvert'
15411 d_PRIEUldbl='$d_PRIEUldbl'
15412 d_PRIFUldbl='$d_PRIFUldbl'
15413 d_PRIGUldbl='$d_PRIGUldbl'
15414 d_PRIXU64='$d_PRIXU64'
15415 d_PRId64='$d_PRId64'
15416 d_PRIeldbl='$d_PRIeldbl'
15417 d_PRIfldbl='$d_PRIfldbl'
15418 d_PRIgldbl='$d_PRIgldbl'
15419 d_PRIi64='$d_PRIi64'
15420 d_PRIo64='$d_PRIo64'
15421 d_PRIu64='$d_PRIu64'
15422 d_PRIx64='$d_PRIx64'
15423 d_SCNfldbl='$d_SCNfldbl'
15424 d_access='$d_access'
15425 d_accessx='$d_accessx'
15426 d_alarm='$d_alarm'
15427 d_archlib='$d_archlib'
15428 d_atolf='$d_atolf'
15429 d_atoll='$d_atoll'
15430 d_attribut='$d_attribut'
15431 d_bcmp='$d_bcmp'
15432 d_bcopy='$d_bcopy'
15433 d_bincompat5005='$d_bincompat5005'
15434 d_bsd='$d_bsd'
15435 d_bsdgetpgrp='$d_bsdgetpgrp'
15436 d_bsdsetpgrp='$d_bsdsetpgrp'
15437 d_bzero='$d_bzero'
15438 d_casti32='$d_casti32'
15439 d_castneg='$d_castneg'
15440 d_charvspr='$d_charvspr'
15441 d_chown='$d_chown'
15442 d_chroot='$d_chroot'
15443 d_chsize='$d_chsize'
15444 d_closedir='$d_closedir'
15445 d_const='$d_const'
15446 d_crypt='$d_crypt'
15447 d_csh='$d_csh'
15448 d_cuserid='$d_cuserid'
15449 d_dbl_dig='$d_dbl_dig'
15450 d_difftime='$d_difftime'
15451 d_dirnamlen='$d_dirnamlen'
15452 d_dlerror='$d_dlerror'
15453 d_dlopen='$d_dlopen'
15454 d_dlsymun='$d_dlsymun'
15455 d_dosuid='$d_dosuid'
15456 d_drand48proto='$d_drand48proto'
15457 d_dup2='$d_dup2'
15458 d_eaccess='$d_eaccess'
15459 d_endgrent='$d_endgrent'
15460 d_endhent='$d_endhent'
15461 d_endnent='$d_endnent'
15462 d_endpent='$d_endpent'
15463 d_endpwent='$d_endpwent'
15464 d_endsent='$d_endsent'
15465 d_eofnblk='$d_eofnblk'
15466 d_eunice='$d_eunice'
15467 d_fchmod='$d_fchmod'
15468 d_fchown='$d_fchown'
15469 d_fcntl='$d_fcntl'
15470 d_fd_macros='$d_fd_macros'
15471 d_fd_set='$d_fd_set'
15472 d_fds_bits='$d_fds_bits'
15473 d_fgetpos='$d_fgetpos'
15474 d_flexfnam='$d_flexfnam'
15475 d_flock='$d_flock'
15476 d_fork='$d_fork'
15477 d_fpathconf='$d_fpathconf'
15478 d_fpos64_t='$d_fpos64_t'
15479 d_frexpl='$d_frexpl'
15480 d_fs_data_s='$d_fs_data_s'
15481 d_fseeko='$d_fseeko'
15482 d_fsetpos='$d_fsetpos'
15483 d_fstatfs='$d_fstatfs'
15484 d_fstatvfs='$d_fstatvfs'
15485 d_ftello='$d_ftello'
15486 d_ftime='$d_ftime'
15487 d_getcwd='$d_getcwd'
15488 d_getespwnam='$d_getespwnam'
15489 d_getfsstat='$d_getfsstat'
15490 d_getgrent='$d_getgrent'
15491 d_getgrps='$d_getgrps'
15492 d_gethbyaddr='$d_gethbyaddr'
15493 d_gethbyname='$d_gethbyname'
15494 d_gethent='$d_gethent'
15495 d_gethname='$d_gethname'
15496 d_gethostprotos='$d_gethostprotos'
15497 d_getlogin='$d_getlogin'
15498 d_getmnt='$d_getmnt'
15499 d_getmntent='$d_getmntent'
15500 d_getnbyaddr='$d_getnbyaddr'
15501 d_getnbyname='$d_getnbyname'
15502 d_getnent='$d_getnent'
15503 d_getnetprotos='$d_getnetprotos'
15504 d_getpbyname='$d_getpbyname'
15505 d_getpbynumber='$d_getpbynumber'
15506 d_getpent='$d_getpent'
15507 d_getpgid='$d_getpgid'
15508 d_getpgrp2='$d_getpgrp2'
15509 d_getpgrp='$d_getpgrp'
15510 d_getppid='$d_getppid'
15511 d_getprior='$d_getprior'
15512 d_getprotoprotos='$d_getprotoprotos'
15513 d_getprpwnam='$d_getprpwnam'
15514 d_getpwent='$d_getpwent'
15515 d_getsbyname='$d_getsbyname'
15516 d_getsbyport='$d_getsbyport'
15517 d_getsent='$d_getsent'
15518 d_getservprotos='$d_getservprotos'
15519 d_getspnam='$d_getspnam'
15520 d_gettimeod='$d_gettimeod'
15521 d_gnulibc='$d_gnulibc'
15522 d_grpasswd='$d_grpasswd'
15523 d_hasmntopt='$d_hasmntopt'
15524 d_htonl='$d_htonl'
15525 d_iconv='$d_iconv'
15526 d_index='$d_index'
15527 d_inetaton='$d_inetaton'
15528 d_int64_t='$d_int64_t'
15529 d_isascii='$d_isascii'
15530 d_isnan='$d_isnan'
15531 d_isnanl='$d_isnanl'
15532 d_killpg='$d_killpg'
15533 d_lchown='$d_lchown'
15534 d_ldbl_dig='$d_ldbl_dig'
15535 d_link='$d_link'
15536 d_locconv='$d_locconv'
15537 d_lockf='$d_lockf'
15538 d_longdbl='$d_longdbl'
15539 d_longlong='$d_longlong'
15540 d_lseekproto='$d_lseekproto'
15541 d_lstat='$d_lstat'
15542 d_madvise='$d_madvise'
15543 d_mblen='$d_mblen'
15544 d_mbstowcs='$d_mbstowcs'
15545 d_mbtowc='$d_mbtowc'
15546 d_memchr='$d_memchr'
15547 d_memcmp='$d_memcmp'
15548 d_memcpy='$d_memcpy'
15549 d_memmove='$d_memmove'
15550 d_memset='$d_memset'
15551 d_mkdir='$d_mkdir'
15552 d_mkdtemp='$d_mkdtemp'
15553 d_mkfifo='$d_mkfifo'
15554 d_mkstemp='$d_mkstemp'
15555 d_mkstemps='$d_mkstemps'
15556 d_mktime='$d_mktime'
15557 d_mmap='$d_mmap'
15558 d_modfl='$d_modfl'
15559 d_mprotect='$d_mprotect'
15560 d_msg='$d_msg'
15561 d_msg_ctrunc='$d_msg_ctrunc'
15562 d_msg_dontroute='$d_msg_dontroute'
15563 d_msg_oob='$d_msg_oob'
15564 d_msg_peek='$d_msg_peek'
15565 d_msg_proxy='$d_msg_proxy'
15566 d_msgctl='$d_msgctl'
15567 d_msgget='$d_msgget'
15568 d_msgrcv='$d_msgrcv'
15569 d_msgsnd='$d_msgsnd'
15570 d_msync='$d_msync'
15571 d_munmap='$d_munmap'
15572 d_mymalloc='$d_mymalloc'
15573 d_nice='$d_nice'
15574 d_nv_preserves_uv='$d_nv_preserves_uv'
15575 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
15576 d_off64_t='$d_off64_t'
15577 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
15578 d_oldpthreads='$d_oldpthreads'
15579 d_oldsock='$d_oldsock'
15580 d_open3='$d_open3'
15581 d_pathconf='$d_pathconf'
15582 d_pause='$d_pause'
15583 d_perl_otherlibdirs='$d_perl_otherlibdirs'
15584 d_phostname='$d_phostname'
15585 d_pipe='$d_pipe'
15586 d_poll='$d_poll'
15587 d_portable='$d_portable'
15588 d_pthread_yield='$d_pthread_yield'
15589 d_pwage='$d_pwage'
15590 d_pwchange='$d_pwchange'
15591 d_pwclass='$d_pwclass'
15592 d_pwcomment='$d_pwcomment'
15593 d_pwexpire='$d_pwexpire'
15594 d_pwgecos='$d_pwgecos'
15595 d_pwpasswd='$d_pwpasswd'
15596 d_pwquota='$d_pwquota'
15597 d_qgcvt='$d_qgcvt'
15598 d_quad='$d_quad'
15599 d_readdir='$d_readdir'
15600 d_readlink='$d_readlink'
15601 d_rename='$d_rename'
15602 d_rewinddir='$d_rewinddir'
15603 d_rmdir='$d_rmdir'
15604 d_safebcpy='$d_safebcpy'
15605 d_safemcpy='$d_safemcpy'
15606 d_sanemcmp='$d_sanemcmp'
15607 d_sched_yield='$d_sched_yield'
15608 d_scm_rights='$d_scm_rights'
15609 d_seekdir='$d_seekdir'
15610 d_select='$d_select'
15611 d_sem='$d_sem'
15612 d_semctl='$d_semctl'
15613 d_semctl_semid_ds='$d_semctl_semid_ds'
15614 d_semctl_semun='$d_semctl_semun'
15615 d_semget='$d_semget'
15616 d_semop='$d_semop'
15617 d_setegid='$d_setegid'
15618 d_seteuid='$d_seteuid'
15619 d_setgrent='$d_setgrent'
15620 d_setgrps='$d_setgrps'
15621 d_sethent='$d_sethent'
15622 d_setlinebuf='$d_setlinebuf'
15623 d_setlocale='$d_setlocale'
15624 d_setnent='$d_setnent'
15625 d_setpent='$d_setpent'
15626 d_setpgid='$d_setpgid'
15627 d_setpgrp2='$d_setpgrp2'
15628 d_setpgrp='$d_setpgrp'
15629 d_setprior='$d_setprior'
15630 d_setproctitle='$d_setproctitle'
15631 d_setpwent='$d_setpwent'
15632 d_setregid='$d_setregid'
15633 d_setresgid='$d_setresgid'
15634 d_setresuid='$d_setresuid'
15635 d_setreuid='$d_setreuid'
15636 d_setrgid='$d_setrgid'
15637 d_setruid='$d_setruid'
15638 d_setsent='$d_setsent'
15639 d_setsid='$d_setsid'
15640 d_setvbuf='$d_setvbuf'
15641 d_sfio='$d_sfio'
15642 d_shm='$d_shm'
15643 d_shmat='$d_shmat'
15644 d_shmatprototype='$d_shmatprototype'
15645 d_shmctl='$d_shmctl'
15646 d_shmdt='$d_shmdt'
15647 d_shmget='$d_shmget'
15648 d_sigaction='$d_sigaction'
15649 d_sigsetjmp='$d_sigsetjmp'
15650 d_socket='$d_socket'
15651 d_socklen_t='$d_socklen_t'
15652 d_sockpair='$d_sockpair'
15653 d_socks5_init='$d_socks5_init'
15654 d_sqrtl='$d_sqrtl'
15655 d_statblks='$d_statblks'
15656 d_statfs_f_flags='$d_statfs_f_flags'
15657 d_statfs_s='$d_statfs_s'
15658 d_statvfs='$d_statvfs'
15659 d_stdio_cnt_lval='$d_stdio_cnt_lval'
15660 d_stdio_ptr_lval='$d_stdio_ptr_lval'
15661 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
15662 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
15663 d_stdio_stream_array='$d_stdio_stream_array'
15664 d_stdiobase='$d_stdiobase'
15665 d_stdstdio='$d_stdstdio'
15666 d_strchr='$d_strchr'
15667 d_strcoll='$d_strcoll'
15668 d_strctcpy='$d_strctcpy'
15669 d_strerrm='$d_strerrm'
15670 d_strerror='$d_strerror'
15671 d_strtod='$d_strtod'
15672 d_strtol='$d_strtol'
15673 d_strtold='$d_strtold'
15674 d_strtoll='$d_strtoll'
15675 d_strtoul='$d_strtoul'
15676 d_strtoull='$d_strtoull'
15677 d_strtouq='$d_strtouq'
15678 d_strxfrm='$d_strxfrm'
15679 d_suidsafe='$d_suidsafe'
15680 d_symlink='$d_symlink'
15681 d_syscall='$d_syscall'
15682 d_sysconf='$d_sysconf'
15683 d_sysernlst='$d_sysernlst'
15684 d_syserrlst='$d_syserrlst'
15685 d_system='$d_system'
15686 d_tcgetpgrp='$d_tcgetpgrp'
15687 d_tcsetpgrp='$d_tcsetpgrp'
15688 d_telldir='$d_telldir'
15689 d_telldirproto='$d_telldirproto'
15690 d_time='$d_time'
15691 d_times='$d_times'
15692 d_truncate='$d_truncate'
15693 d_tzname='$d_tzname'
15694 d_umask='$d_umask'
15695 d_uname='$d_uname'
15696 d_union_semun='$d_union_semun'
15697 d_ustat='$d_ustat'
15698 d_vendorarch='$d_vendorarch'
15699 d_vendorbin='$d_vendorbin'
15700 d_vendorlib='$d_vendorlib'
15701 d_vfork='$d_vfork'
15702 d_void_closedir='$d_void_closedir'
15703 d_voidsig='$d_voidsig'
15704 d_voidtty='$d_voidtty'
15705 d_volatile='$d_volatile'
15706 d_vprintf='$d_vprintf'
15707 d_wait4='$d_wait4'
15708 d_waitpid='$d_waitpid'
15709 d_wcstombs='$d_wcstombs'
15710 d_wctomb='$d_wctomb'
15711 d_xenix='$d_xenix'
15712 date='$date'
15713 db_hashtype='$db_hashtype'
15714 db_prefixtype='$db_prefixtype'
15715 defvoidused='$defvoidused'
15716 direntrytype='$direntrytype'
15717 dlext='$dlext'
15718 dlsrc='$dlsrc'
15719 doublesize='$doublesize'
15720 drand01='$drand01'
15721 dynamic_ext='$dynamic_ext'
15722 eagain='$eagain'
15723 ebcdic='$ebcdic'
15724 echo='$echo'
15725 egrep='$egrep'
15726 emacs='$emacs'
15727 eunicefix='$eunicefix'
15728 exe_ext='$exe_ext'
15729 expr='$expr'
15730 extensions='$extensions'
15731 fflushNULL='$fflushNULL'
15732 fflushall='$fflushall'
15733 find='$find'
15734 firstmakefile='$firstmakefile'
15735 flex='$flex'
15736 fpossize='$fpossize'
15737 fpostype='$fpostype'
15738 freetype='$freetype'
15739 full_ar='$full_ar'
15740 full_csh='$full_csh'
15741 full_sed='$full_sed'
15742 gccosandvers='$gccosandvers'
15743 gccversion='$gccversion'
15744 gidformat='$gidformat'
15745 gidsign='$gidsign'
15746 gidsize='$gidsize'
15747 gidtype='$gidtype'
15748 glibpth='$glibpth'
15749 grep='$grep'
15750 groupcat='$groupcat'
15751 groupstype='$groupstype'
15752 gzip='$gzip'
15753 h_fcntl='$h_fcntl'
15754 h_sysfile='$h_sysfile'
15755 hint='$hint'
15756 hostcat='$hostcat'
15757 i16size='$i16size'
15758 i16type='$i16type'
15759 i32size='$i32size'
15760 i32type='$i32type'
15761 i64size='$i64size'
15762 i64type='$i64type'
15763 i8size='$i8size'
15764 i8type='$i8type'
15765 i_arpainet='$i_arpainet'
15766 i_bsdioctl='$i_bsdioctl'
15767 i_db='$i_db'
15768 i_dbm='$i_dbm'
15769 i_dirent='$i_dirent'
15770 i_dld='$i_dld'
15771 i_dlfcn='$i_dlfcn'
15772 i_fcntl='$i_fcntl'
15773 i_float='$i_float'
15774 i_gdbm='$i_gdbm'
15775 i_grp='$i_grp'
15776 i_iconv='$i_iconv'
15777 i_ieeefp='$i_ieeefp'
15778 i_inttypes='$i_inttypes'
15779 i_libutil='$i_libutil'
15780 i_limits='$i_limits'
15781 i_locale='$i_locale'
15782 i_machcthr='$i_machcthr'
15783 i_malloc='$i_malloc'
15784 i_math='$i_math'
15785 i_memory='$i_memory'
15786 i_mntent='$i_mntent'
15787 i_ndbm='$i_ndbm'
15788 i_netdb='$i_netdb'
15789 i_neterrno='$i_neterrno'
15790 i_netinettcp='$i_netinettcp'
15791 i_niin='$i_niin'
15792 i_poll='$i_poll'
15793 i_prot='$i_prot'
15794 i_pthread='$i_pthread'
15795 i_pwd='$i_pwd'
15796 i_rpcsvcdbm='$i_rpcsvcdbm'
15797 i_sfio='$i_sfio'
15798 i_sgtty='$i_sgtty'
15799 i_shadow='$i_shadow'
15800 i_socks='$i_socks'
15801 i_stdarg='$i_stdarg'
15802 i_stddef='$i_stddef'
15803 i_stdlib='$i_stdlib'
15804 i_string='$i_string'
15805 i_sunmath='$i_sunmath'
15806 i_sysaccess='$i_sysaccess'
15807 i_sysdir='$i_sysdir'
15808 i_sysfile='$i_sysfile'
15809 i_sysfilio='$i_sysfilio'
15810 i_sysin='$i_sysin'
15811 i_sysioctl='$i_sysioctl'
15812 i_syslog='$i_syslog'
15813 i_sysmman='$i_sysmman'
15814 i_sysmode='$i_sysmode'
15815 i_sysmount='$i_sysmount'
15816 i_sysndir='$i_sysndir'
15817 i_sysparam='$i_sysparam'
15818 i_sysresrc='$i_sysresrc'
15819 i_syssecrt='$i_syssecrt'
15820 i_sysselct='$i_sysselct'
15821 i_syssockio='$i_syssockio'
15822 i_sysstat='$i_sysstat'
15823 i_sysstatfs='$i_sysstatfs'
15824 i_sysstatvfs='$i_sysstatvfs'
15825 i_systime='$i_systime'
15826 i_systimek='$i_systimek'
15827 i_systimes='$i_systimes'
15828 i_systypes='$i_systypes'
15829 i_sysuio='$i_sysuio'
15830 i_sysun='$i_sysun'
15831 i_sysutsname='$i_sysutsname'
15832 i_sysvfs='$i_sysvfs'
15833 i_syswait='$i_syswait'
15834 i_termio='$i_termio'
15835 i_termios='$i_termios'
15836 i_time='$i_time'
15837 i_unistd='$i_unistd'
15838 i_ustat='$i_ustat'
15839 i_utime='$i_utime'
15840 i_values='$i_values'
15841 i_varargs='$i_varargs'
15842 i_varhdr='$i_varhdr'
15843 i_vfork='$i_vfork'
15844 ignore_versioned_solibs='$ignore_versioned_solibs'
15845 inc_version_list='$inc_version_list'
15846 inc_version_list_init='$inc_version_list_init'
15847 incpath='$incpath'
15848 inews='$inews'
15849 installarchlib='$installarchlib'
15850 installbin='$installbin'
15851 installman1dir='$installman1dir'
15852 installman3dir='$installman3dir'
15853 installprefix='$installprefix'
15854 installprefixexp='$installprefixexp'
15855 installprivlib='$installprivlib'
15856 installscript='$installscript'
15857 installsitearch='$installsitearch'
15858 installsitebin='$installsitebin'
15859 installsitelib='$installsitelib'
15860 installstyle='$installstyle'
15861 installusrbinperl='$installusrbinperl'
15862 installvendorarch='$installvendorarch'
15863 installvendorbin='$installvendorbin'
15864 installvendorlib='$installvendorlib'
15865 intsize='$intsize'
15866 ivdformat='$ivdformat'
15867 ivsize='$ivsize'
15868 ivtype='$ivtype'
15869 known_extensions='$known_extensions'
15870 ksh='$ksh'
15871 ld='$ld'
15872 lddlflags='$lddlflags'
15873 ldflags='$ldflags'
15874 ldflags_uselargefiles='$ldflags_uselargefiles'
15875 ldlibpthname='$ldlibpthname'
15876 less='$less'
15877 lib_ext='$lib_ext'
15878 libc='$libc'
15879 libperl='$libperl'
15880 libpth='$libpth'
15881 libs='$libs'
15882 libsdirs='$libsdirs'
15883 libsfiles='$libsfiles'
15884 libsfound='$libsfound'
15885 libspath='$libspath'
15886 libswanted='$libswanted'
15887 libswanted_uselargefiles='$libswanted_uselargefiles'
15888 line='$line'
15889 lint='$lint'
15890 lkflags='$lkflags'
15891 ln='$ln'
15892 lns='$lns'
15893 locincpth='$locincpth'
15894 loclibpth='$loclibpth'
15895 longdblsize='$longdblsize'
15896 longlongsize='$longlongsize'
15897 longsize='$longsize'
15898 lp='$lp'
15899 lpr='$lpr'
15900 ls='$ls'
15901 lseeksize='$lseeksize'
15902 lseektype='$lseektype'
15903 mail='$mail'
15904 mailx='$mailx'
15905 make='$make'
15906 make_set_make='$make_set_make'
15907 mallocobj='$mallocobj'
15908 mallocsrc='$mallocsrc'
15909 malloctype='$malloctype'
15910 man1dir='$man1dir'
15911 man1direxp='$man1direxp'
15912 man1ext='$man1ext'
15913 man3dir='$man3dir'
15914 man3direxp='$man3direxp'
15915 man3ext='$man3ext'
15916 mips_type='$mips_type'
15917 mkdir='$mkdir'
15918 mmaptype='$mmaptype'
15919 modetype='$modetype'
15920 more='$more'
15921 multiarch='$multiarch'
15922 mv='$mv'
15923 myarchname='$myarchname'
15924 mydomain='$mydomain'
15925 myhostname='$myhostname'
15926 myuname='$myuname'
15927 n='$n'
15928 netdb_hlen_type='$netdb_hlen_type'
15929 netdb_host_type='$netdb_host_type'
15930 netdb_name_type='$netdb_name_type'
15931 netdb_net_type='$netdb_net_type'
15932 nm='$nm'
15933 nm_opt='$nm_opt'
15934 nm_so_opt='$nm_so_opt'
15935 nonxs_ext='$nonxs_ext'
15936 nroff='$nroff'
15937 nvEUformat='$nvEUformat'
15938 nvFUformat='$nvFUformat'
15939 nvGUformat='$nvGUformat'
15940 nveformat='$nveformat'
15941 nvfformat='$nvfformat'
15942 nvgformat='$nvgformat'
15943 nvsize='$nvsize'
15944 nvtype='$nvtype'
15945 o_nonblock='$o_nonblock'
15946 obj_ext='$obj_ext'
15947 old_pthread_create_joinable='$old_pthread_create_joinable'
15948 optimize='$optimize'
15949 orderlib='$orderlib'
15950 osname='$osname'
15951 osvers='$osvers'
15952 otherlibdirs='$otherlibdirs'
15953 package='$package'
15954 pager='$pager'
15955 passcat='$passcat'
15956 patchlevel='$patchlevel'
15957 path_sep='$path_sep'
15958 perl5='$perl5'
15959 perl='$perl'
15960 perladmin='$perladmin'
15961 perllibs='$perllibs'
15962 perlpath='$perlpath'
15963 pg='$pg'
15964 phostname='$phostname'
15965 pidtype='$pidtype'
15966 plibpth='$plibpth'
15967 pm_apiversion='$pm_apiversion'
15968 pmake='$pmake'
15969 pr='$pr'
15970 prefix='$prefix'
15971 prefixexp='$prefixexp'
15972 privlib='$privlib'
15973 privlibexp='$privlibexp'
15974 prototype='$prototype'
15975 ptrsize='$ptrsize'
15976 quadkind='$quadkind'
15977 quadtype='$quadtype'
15978 randbits='$randbits'
15979 randfunc='$randfunc'
15980 randseedtype='$randseedtype'
15981 ranlib='$ranlib'
15982 rd_nodata='$rd_nodata'
15983 revision='$revision'
15984 rm='$rm'
15985 rmail='$rmail'
15986 runnm='$runnm'
15987 sPRIEUldbl='$sPRIEUldbl'
15988 sPRIFUldbl='$sPRIFUldbl'
15989 sPRIGUldbl='$sPRIGUldbl'
15990 sPRIXU64='$sPRIXU64'
15991 sPRId64='$sPRId64'
15992 sPRIeldbl='$sPRIeldbl'
15993 sPRIfldbl='$sPRIfldbl'
15994 sPRIgldbl='$sPRIgldbl'
15995 sPRIi64='$sPRIi64'
15996 sPRIo64='$sPRIo64'
15997 sPRIu64='$sPRIu64'
15998 sPRIx64='$sPRIx64'
15999 sSCNfldbl='$sSCNfldbl'
16000 sched_yield='$sched_yield'
16001 scriptdir='$scriptdir'
16002 scriptdirexp='$scriptdirexp'
16003 sed='$sed'
16004 seedfunc='$seedfunc'
16005 selectminbits='$selectminbits'
16006 selecttype='$selecttype'
16007 sendmail='$sendmail'
16008 sh='$sh'
16009 shar='$shar'
16010 sharpbang='$sharpbang'
16011 shmattype='$shmattype'
16012 shortsize='$shortsize'
16013 shrpenv='$shrpenv'
16014 shsharp='$shsharp'
16015 sig_count='$sig_count'
16016 sig_name='$sig_name'
16017 sig_name_init='$sig_name_init'
16018 sig_num='$sig_num'
16019 sig_num_init='$sig_num_init'
16020 signal_t='$signal_t'
16021 sitearch='$sitearch'
16022 sitearchexp='$sitearchexp'
16023 sitebin='$sitebin'
16024 sitebinexp='$sitebinexp'
16025 sitelib='$sitelib'
16026 sitelib_stem='$sitelib_stem'
16027 sitelibexp='$sitelibexp'
16028 siteprefix='$siteprefix'
16029 siteprefixexp='$siteprefixexp'
16030 sizesize='$sizesize'
16031 sizetype='$sizetype'
16032 sleep='$sleep'
16033 smail='$smail'
16034 so='$so'
16035 sockethdr='$sockethdr'
16036 socketlib='$socketlib'
16037 socksizetype='$socksizetype'
16038 sort='$sort'
16039 spackage='$spackage'
16040 spitshell='$spitshell'
16041 src='$src'
16042 ssizetype='$ssizetype'
16043 startperl='$startperl'
16044 startsh='$startsh'
16045 static_ext='$static_ext'
16046 stdchar='$stdchar'
16047 stdio_base='$stdio_base'
16048 stdio_bufsiz='$stdio_bufsiz'
16049 stdio_cnt='$stdio_cnt'
16050 stdio_filbuf='$stdio_filbuf'
16051 stdio_ptr='$stdio_ptr'
16052 stdio_stream_array='$stdio_stream_array'
16053 strings='$strings'
16054 submit='$submit'
16055 subversion='$subversion'
16056 sysman='$sysman'
16057 tail='$tail'
16058 tar='$tar'
16059 tbl='$tbl'
16060 tee='$tee'
16061 test='$test'
16062 timeincl='$timeincl'
16063 timetype='$timetype'
16064 touch='$touch'
16065 tr='$tr'
16066 trnl='$trnl'
16067 troff='$troff'
16068 u16size='$u16size'
16069 u16type='$u16type'
16070 u32size='$u32size'
16071 u32type='$u32type'
16072 u64size='$u64size'
16073 u64type='$u64type'
16074 u8size='$u8size'
16075 u8type='$u8type'
16076 uidformat='$uidformat'
16077 uidsign='$uidsign'
16078 uidsize='$uidsize'
16079 uidtype='$uidtype'
16080 uname='$uname'
16081 uniq='$uniq'
16082 uquadtype='$uquadtype'
16083 use5005threads='$use5005threads'
16084 use64bitall='$use64bitall'
16085 use64bitint='$use64bitint'
16086 usedl='$usedl'
16087 useithreads='$useithreads'
16088 uselargefiles='$uselargefiles'
16089 uselongdouble='$uselongdouble'
16090 usemorebits='$usemorebits'
16091 usemultiplicity='$usemultiplicity'
16092 usemymalloc='$usemymalloc'
16093 usenm='$usenm'
16094 useopcode='$useopcode'
16095 useperlio='$useperlio'
16096 useposix='$useposix'
16097 usesfio='$usesfio'
16098 useshrplib='$useshrplib'
16099 usesocks='$usesocks'
16100 usethreads='$usethreads'
16101 usevendorprefix='$usevendorprefix'
16102 usevfork='$usevfork'
16103 usrinc='$usrinc'
16104 uuname='$uuname'
16105 uvXUformat='$uvXUformat'
16106 uvoformat='$uvoformat'
16107 uvsize='$uvsize'
16108 uvtype='$uvtype'
16109 uvuformat='$uvuformat'
16110 uvxformat='$uvxformat'
16111 vendorarch='$vendorarch'
16112 vendorarchexp='$vendorarchexp'
16113 vendorbin='$vendorbin'
16114 vendorbinexp='$vendorbinexp'
16115 vendorlib='$vendorlib'
16116 vendorlib_stem='$vendorlib_stem'
16117 vendorlibexp='$vendorlibexp'
16118 vendorprefix='$vendorprefix'
16119 vendorprefixexp='$vendorprefixexp'
16120 version='$version'
16121 versiononly='$versiononly'
16122 vi='$vi'
16123 voidflags='$voidflags'
16124 xlibpth='$xlibpth'
16125 xs_apiversion='$xs_apiversion'
16126 zcat='$zcat'
16127 zip='$zip'
16128 EOT
16129
16130 : Add in command line options if available
16131 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
16132
16133 : add special variables
16134 $test -f $src/patchlevel.h && \
16135 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
16136 echo "CONFIGDOTSH=true" >>config.sh
16137
16138 : propagate old symbols
16139 if $test -f UU/config.sh; then
16140         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
16141         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
16142         $sort | $uniq -u >UU/oldsyms
16143         set X `cat UU/oldsyms`
16144         shift
16145         case $# in
16146         0) ;;
16147         *)
16148                 cat <<EOM
16149 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
16150 EOM
16151                 echo "# Variables propagated from previous config.sh file." >>config.sh
16152                 for sym in `cat UU/oldsyms`; do
16153                         echo "    Propagating $hint variable "'$'"$sym..."
16154                         eval 'tmp="$'"${sym}"'"'
16155                         echo "$tmp" | \
16156                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
16157                 done
16158                 ;;
16159         esac
16160 fi
16161
16162 : Finish up by extracting the .SH files
16163 case "$alldone" in
16164 exit)
16165         $rm -rf UU
16166         echo "Done."
16167         exit 0
16168         ;;
16169 cont)
16170         ;;
16171 '')
16172         dflt=''
16173         nostick=true
16174         $cat <<EOM
16175
16176 If you'd like to make any changes to the config.sh file before I begin
16177 to configure things, do it as a shell escape now (e.g. !vi config.sh).
16178
16179 EOM
16180         rp="Press return or use a shell escape to edit config.sh:"
16181         . UU/myread
16182         nostick=''
16183         case "$ans" in
16184         '') ;;
16185         *) : in case they cannot read
16186                 sh 1>&4 -c "$ans";;
16187         esac
16188         ;;
16189 esac
16190
16191 : if this fails, just run all the .SH files by hand
16192 . ./config.sh
16193
16194 echo " "
16195 exec 1>&4
16196 . ./UU/extract
16197
16198 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
16199         dflt=y
16200         case "$silent" in
16201         true) ;;
16202         *)
16203                 $cat <<EOM
16204
16205 Now you need to generate make dependencies by running "$make depend".
16206 You might prefer to run it in background: "$make depend > makedepend.out &"
16207 It can take a while, so you might not want to run it right now.
16208
16209 EOM
16210                 ;;
16211         esac
16212         rp="Run $make depend now?"
16213         . UU/myread
16214         case "$ans" in
16215         y*)
16216                 $make depend && echo "Now you must run '$make'."
16217                 ;;
16218         *)
16219                 echo "You must run '$make depend' then '$make'."
16220                 ;;
16221         esac
16222 elif test -f [Mm]akefile; then
16223         echo " "
16224         echo "Now you must run a $make."
16225 else
16226         echo "Done."
16227 fi
16228
16229 if $test -f Policy.sh; then
16230     $cat <<EOM
16231
16232 If you compile $package on a different machine or from a different object
16233 directory, copy the Policy.sh file from this object directory to the
16234 new one before you run Configure -- this will help you with most of
16235 the policy defaults.
16236
16237 EOM
16238 fi
16239 if $test -f config.msg; then
16240     echo "Hmm.  I also noted the following information while running:"
16241     echo " "
16242     $cat config.msg >&4
16243     $rm -f config.msg
16244 fi
16245 $rm -f kit*isdone ark*isdone
16246 $rm -rf UU
16247
16248 : End of Configure
16249