better {local,gm}time documentation (from Mark-Jason Dominus)
[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 Fri Mar 10 03:07:09 EET 2000 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.com)
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 ccsymbols=''
164 cppccsymbols=''
165 cppsymbols=''
166 dynamic_ext=''
167 extensions=''
168 known_extensions=''
169 nonxs_ext=''
170 static_ext=''
171 useopcode=''
172 useposix=''
173 d_bsd=''
174 d_eunice=''
175 d_xenix=''
176 eunicefix=''
177 Mcc=''
178 ar=''
179 awk=''
180 bash=''
181 bison=''
182 byacc=''
183 cat=''
184 chgrp=''
185 chmod=''
186 chown=''
187 comm=''
188 compress=''
189 cp=''
190 cpio=''
191 cpp=''
192 csh=''
193 date=''
194 echo=''
195 egrep=''
196 emacs=''
197 expr=''
198 find=''
199 flex=''
200 grep=''
201 gzip=''
202 inews=''
203 ksh=''
204 less=''
205 line=''
206 lint=''
207 ln=''
208 lp=''
209 lpr=''
210 ls=''
211 mail=''
212 mailx=''
213 make=''
214 mkdir=''
215 more=''
216 mv=''
217 nm=''
218 nroff=''
219 perl=''
220 pg=''
221 pmake=''
222 pr=''
223 rm=''
224 rmail=''
225 sed=''
226 sendmail=''
227 shar=''
228 sleep=''
229 smail=''
230 sort=''
231 submit=''
232 tail=''
233 tar=''
234 tbl=''
235 tee=''
236 test=''
237 touch=''
238 tr=''
239 troff=''
240 uname=''
241 uniq=''
242 uuname=''
243 vi=''
244 zcat=''
245 zip=''
246 full_ar=''
247 full_sed=''
248 libswanted=''
249 hint=''
250 myuname=''
251 osname=''
252 osvers=''
253 Author=''
254 Date=''
255 Header=''
256 Id=''
257 Locker=''
258 Log=''
259 RCSfile=''
260 Revision=''
261 Source=''
262 State=''
263 _a=''
264 _exe=''
265 _o=''
266 archobjs=''
267 exe_ext=''
268 firstmakefile=''
269 lib_ext=''
270 obj_ext=''
271 path_sep=''
272 afs=''
273 alignbytes=''
274 ansi2knr=''
275 archlib=''
276 archlibexp=''
277 d_archlib=''
278 installarchlib=''
279 archname=''
280 myarchname=''
281 d_atolf=''
282 d_atoll=''
283 baserev=''
284 bin=''
285 binexp=''
286 installbin=''
287 bincompat5005=''
288 d_bincompat5005=''
289 byteorder=''
290 cc=''
291 gccversion=''
292 ccflags=''
293 cppflags=''
294 ldflags=''
295 lkflags=''
296 locincpth=''
297 optimize=''
298 cf_email=''
299 cf_by=''
300 cf_time=''
301 charsize=''
302 contains=''
303 cpp_stuff=''
304 cpplast=''
305 cppminus=''
306 cpprun=''
307 cppstdin=''
308 crosscompile=''
309 d_access=''
310 d_accessx=''
311 d_alarm=''
312 d_attribut=''
313 d_bcmp=''
314 d_bcopy=''
315 d_bzero=''
316 d_casti32=''
317 castflags=''
318 d_castneg=''
319 d_chown=''
320 d_chroot=''
321 d_chsize=''
322 d_closedir=''
323 d_void_closedir=''
324 d_const=''
325 cryptlib=''
326 d_crypt=''
327 d_csh=''
328 full_csh=''
329 d_cuserid=''
330 d_dbl_dig=''
331 d_difftime=''
332 d_dlerror=''
333 d_dlopen=''
334 d_dlsymun=''
335 d_dosuid=''
336 d_suidsafe=''
337 d_drand48proto=''
338 d_dup2=''
339 d_eaccess=''
340 d_endgrent=''
341 d_endhent=''
342 d_endnent=''
343 d_endpent=''
344 d_endpwent=''
345 d_endsent=''
346 d_endspent=''
347 d_fchmod=''
348 d_fchown=''
349 d_fcntl=''
350 d_fd_macros=''
351 d_fd_set=''
352 d_fds_bits=''
353 d_fgetpos=''
354 d_flexfnam=''
355 d_flock=''
356 d_fork=''
357 d_fpos64_t=''
358 d_fs_data_s=''
359 d_fseeko=''
360 d_fsetpos=''
361 d_fstatfs=''
362 d_ftello=''
363 d_ftime=''
364 d_gettimeod=''
365 d_Gconvert=''
366 d_getcwd=''
367 d_getfsstat=''
368 d_getgrent=''
369 d_getgrps=''
370 d_gethbyaddr=''
371 d_gethbyname=''
372 d_gethent=''
373 aphostname=''
374 d_gethname=''
375 d_phostname=''
376 d_uname=''
377 d_gethostprotos=''
378 d_getlogin=''
379 d_getmnt=''
380 d_getmntent=''
381 d_getnbyaddr=''
382 d_getnbyname=''
383 d_getnent=''
384 d_getnetprotos=''
385 d_getpent=''
386 d_getpgid=''
387 d_getpgrp2=''
388 d_bsdgetpgrp=''
389 d_getpgrp=''
390 d_getppid=''
391 d_getprior=''
392 d_getpbyname=''
393 d_getpbynumber=''
394 d_getprotoprotos=''
395 d_getpwent=''
396 d_getsent=''
397 d_getservprotos=''
398 d_getspent=''
399 d_getspnam=''
400 d_getsbyname=''
401 d_getsbyport=''
402 d_gnulibc=''
403 d_hasmntopt=''
404 d_htonl=''
405 d_iconv=''
406 d_inetaton=''
407 d_int64_t=''
408 d_isascii=''
409 d_killpg=''
410 d_lchown=''
411 d_ldbl_dig=''
412 d_link=''
413 d_locconv=''
414 d_lockf=''
415 d_longdbl=''
416 longdblsize=''
417 d_longlong=''
418 longlongsize=''
419 d_lseekproto=''
420 d_lstat=''
421 d_madvise=''
422 d_mblen=''
423 d_mbstowcs=''
424 d_mbtowc=''
425 d_memchr=''
426 d_memcmp=''
427 d_memcpy=''
428 d_memmove=''
429 d_memset=''
430 d_mkdir=''
431 d_mkdtemp=''
432 d_mkfifo=''
433 d_mkstemp=''
434 d_mkstemps=''
435 d_mktime=''
436 d_mmap=''
437 mmaptype=''
438 d_mprotect=''
439 d_msg=''
440 d_msgctl=''
441 d_msgget=''
442 d_msgrcv=''
443 d_msgsnd=''
444 d_msync=''
445 d_munmap=''
446 d_nice=''
447 d_off64_t=''
448 d_open3=''
449 d_fpathconf=''
450 d_pathconf=''
451 d_pause=''
452 d_pipe=''
453 d_poll=''
454 d_portable=''
455 d_old_pthread_create_joinable=''
456 old_pthread_create_joinable=''
457 d_pthread_yield=''
458 d_sched_yield=''
459 sched_yield=''
460 d_qgcvt=''
461 d_readdir=''
462 d_rewinddir=''
463 d_seekdir=''
464 d_telldir=''
465 d_readlink=''
466 d_rename=''
467 d_rmdir=''
468 d_safebcpy=''
469 d_safemcpy=''
470 d_sanemcmp=''
471 d_select=''
472 d_sem=''
473 d_semctl=''
474 d_semget=''
475 d_semop=''
476 d_setegid=''
477 d_seteuid=''
478 d_setgrent=''
479 d_setgrps=''
480 d_sethent=''
481 d_setlinebuf=''
482 d_setlocale=''
483 d_setnent=''
484 d_setpent=''
485 d_setpgid=''
486 d_setpgrp2=''
487 d_bsdsetpgrp=''
488 d_setpgrp=''
489 d_setprior=''
490 d_setpwent=''
491 d_setregid=''
492 d_setresgid=''
493 d_setresuid=''
494 d_setreuid=''
495 d_setrgid=''
496 d_setruid=''
497 d_setsent=''
498 d_setsid=''
499 d_setspent=''
500 d_setvbuf=''
501 d_sfio=''
502 usesfio=''
503 d_shm=''
504 d_shmat=''
505 d_shmatprototype=''
506 shmattype=''
507 d_shmctl=''
508 d_shmdt=''
509 d_shmget=''
510 d_sigaction=''
511 d_sigsetjmp=''
512 d_msg_ctrunc=''
513 d_msg_dontroute=''
514 d_msg_oob=''
515 d_msg_peek=''
516 d_msg_proxy=''
517 d_oldsock=''
518 d_scm_rights=''
519 d_socket=''
520 d_sockpair=''
521 sockethdr=''
522 socketlib=''
523 d_socklen_t=''
524 d_sqrtl=''
525 d_statblks=''
526 d_statfs_f_flags=''
527 d_statfs_s=''
528 d_fstatvfs=''
529 d_statvfs=''
530 d_stdio_cnt_lval=''
531 d_stdio_ptr_lval=''
532 d_stdiobase=''
533 d_stdstdio=''
534 stdio_base=''
535 stdio_bufsiz=''
536 stdio_cnt=''
537 stdio_filbuf=''
538 stdio_ptr=''
539 d_index=''
540 d_strchr=''
541 d_strcoll=''
542 d_strctcpy=''
543 d_strerrm=''
544 d_strerror=''
545 d_sysernlst=''
546 d_syserrlst=''
547 d_strtod=''
548 d_strtol=''
549 d_strtold=''
550 d_strtoll=''
551 d_strtoul=''
552 d_strtoull=''
553 d_strtouq=''
554 d_strxfrm=''
555 d_symlink=''
556 d_syscall=''
557 d_sysconf=''
558 d_system=''
559 d_tcgetpgrp=''
560 d_tcsetpgrp=''
561 d_telldirproto=''
562 d_time=''
563 timetype=''
564 clocktype=''
565 d_times=''
566 d_truncate=''
567 d_tzname=''
568 d_umask=''
569 d_semctl_semid_ds=''
570 d_semctl_semun=''
571 d_union_semun=''
572 d_ustat=''
573 d_vfork=''
574 usevfork=''
575 d_voidsig=''
576 signal_t=''
577 d_volatile=''
578 d_charvspr=''
579 d_vprintf=''
580 d_wait4=''
581 d_waitpid=''
582 d_wcstombs=''
583 d_wctomb=''
584 dlext=''
585 cccdlflags=''
586 ccdlflags=''
587 dlsrc=''
588 ld=''
589 lddlflags=''
590 usedl=''
591 doublesize=''
592 ebcdic=''
593 fflushNULL=''
594 fflushall=''
595 fpossize=''
596 fpostype=''
597 gidformat=''
598 gidsign=''
599 gidsize=''
600 gidtype=''
601 groupstype=''
602 h_fcntl=''
603 h_sysfile=''
604 i_arpainet=''
605 db_hashtype=''
606 db_prefixtype=''
607 i_db=''
608 i_dbm=''
609 i_rpcsvcdbm=''
610 d_dirnamlen=''
611 direntrytype=''
612 i_dirent=''
613 i_dld=''
614 i_dlfcn=''
615 i_fcntl=''
616 i_float=''
617 i_gdbm=''
618 d_grpasswd=''
619 i_grp=''
620 i_iconv=''
621 i_ieeefp=''
622 i_inttypes=''
623 i_limits=''
624 i_locale=''
625 i_machcthr=''
626 i_malloc=''
627 i_math=''
628 i_memory=''
629 i_mntent=''
630 i_ndbm=''
631 i_netdb=''
632 i_neterrno=''
633 i_netinettcp=''
634 i_niin=''
635 i_sysin=''
636 i_poll=''
637 i_pthread=''
638 d_pwage=''
639 d_pwchange=''
640 d_pwclass=''
641 d_pwcomment=''
642 d_pwexpire=''
643 d_pwgecos=''
644 d_pwpasswd=''
645 d_pwquota=''
646 i_pwd=''
647 i_sfio=''
648 i_shadow=''
649 i_socks=''
650 i_stddef=''
651 i_stdlib=''
652 i_string=''
653 strings=''
654 i_sunmath=''
655 i_sysaccess=''
656 i_sysdir=''
657 i_sysfile=''
658 d_voidtty=''
659 i_bsdioctl=''
660 i_sysfilio=''
661 i_sysioctl=''
662 i_syssockio=''
663 i_syslog=''
664 i_sysmman=''
665 i_sysmode=''
666 i_sysmount=''
667 i_sysndir=''
668 i_sysparam=''
669 i_sysresrc=''
670 i_syssecrt=''
671 i_sysselct=''
672 i_sysstat=''
673 i_sysstatfs=''
674 i_sysstatvfs=''
675 i_systimes=''
676 i_systypes=''
677 i_sysuio=''
678 i_sysun=''
679 i_sysutsname=''
680 i_sysvfs=''
681 i_syswait=''
682 i_sgtty=''
683 i_termio=''
684 i_termios=''
685 i_systime=''
686 i_systimek=''
687 i_time=''
688 timeincl=''
689 i_unistd=''
690 i_ustat=''
691 i_utime=''
692 i_values=''
693 i_stdarg=''
694 i_varargs=''
695 i_varhdr=''
696 i_vfork=''
697 inc_version_list=''
698 inc_version_list_init=''
699 installprefix=''
700 installprefixexp=''
701 installstyle=''
702 installusrbinperl=''
703 intsize=''
704 longsize=''
705 shortsize=''
706 libc=''
707 ldlibpthname=''
708 libperl=''
709 shrpenv=''
710 useshrplib=''
711 glibpth=''
712 libpth=''
713 loclibpth=''
714 plibpth=''
715 xlibpth=''
716 ignore_versioned_solibs=''
717 libs=''
718 libsdirs=''
719 libsfiles=''
720 libsfound=''
721 libspath=''
722 lns=''
723 d_PRIEldbl=''
724 d_PRIFldbl=''
725 d_PRIGldbl=''
726 d_PRIeldbl=''
727 d_PRIfldbl=''
728 d_PRIgldbl=''
729 sPRIEldbl=''
730 sPRIFldbl=''
731 sPRIGldbl=''
732 sPRIeldbl=''
733 sPRIfldbl=''
734 sPRIgldbl=''
735 lseeksize=''
736 lseektype=''
737 make_set_make=''
738 d_mymalloc=''
739 freetype=''
740 mallocobj=''
741 mallocsrc=''
742 malloctype=''
743 usemymalloc=''
744 installman1dir=''
745 man1dir=''
746 man1direxp=''
747 man1ext=''
748 installman3dir=''
749 man3dir=''
750 man3direxp=''
751 man3ext=''
752 huge=''
753 large=''
754 medium=''
755 models=''
756 small=''
757 split=''
758 modetype=''
759 multiarch=''
760 mydomain=''
761 myhostname=''
762 phostname=''
763 c=''
764 n=''
765 d_eofnblk=''
766 eagain=''
767 o_nonblock=''
768 rd_nodata=''
769 netdb_hlen_type=''
770 netdb_host_type=''
771 netdb_name_type=''
772 netdb_net_type=''
773 groupcat=''
774 hostcat=''
775 passcat=''
776 orderlib=''
777 ranlib=''
778 package=''
779 spackage=''
780 pager=''
781 api_revision=''
782 api_subversion=''
783 api_version=''
784 api_versionstring=''
785 patchlevel=''
786 revision=''
787 subversion=''
788 version=''
789 perl5=''
790 perladmin=''
791 perlpath=''
792 d_nv_preserves_uv=''
793 i16size=''
794 i16type=''
795 i32size=''
796 i32type=''
797 i64size=''
798 i64type=''
799 i8size=''
800 i8type=''
801 ivsize=''
802 ivtype=''
803 nvsize=''
804 nvtype=''
805 u16size=''
806 u16type=''
807 u32size=''
808 u32type=''
809 u64size=''
810 u64type=''
811 u8size=''
812 u8type=''
813 uvsize=''
814 uvtype=''
815 ivdformat=''
816 uvoformat=''
817 uvuformat=''
818 uvxformat=''
819 pidtype=''
820 prefix=''
821 prefixexp=''
822 installprivlib=''
823 privlib=''
824 privlibexp=''
825 prototype=''
826 ptrsize=''
827 d_PRIX64=''
828 d_PRId64=''
829 d_PRIi64=''
830 d_PRIo64=''
831 d_PRIu64=''
832 d_PRIx64=''
833 sPRIX64=''
834 sPRId64=''
835 sPRIi64=''
836 sPRIo64=''
837 sPRIu64=''
838 sPRIx64=''
839 d_quad=''
840 quadkind=''
841 quadtype=''
842 uquadtype=''
843 drand01=''
844 randbits=''
845 randfunc=''
846 randseedtype=''
847 seedfunc=''
848 installscript=''
849 scriptdir=''
850 scriptdirexp=''
851 selectminbits=''
852 selecttype=''
853 sh=''
854 sig_count=''
855 sig_name=''
856 sig_name_init=''
857 sig_num=''
858 sig_num_init=''
859 installsitearch=''
860 sitearch=''
861 sitearchexp=''
862 installsitebin=''
863 sitebin=''
864 sitebinexp=''
865 installsitelib=''
866 sitelib=''
867 sitelib_stem=''
868 sitelibexp=''
869 siteprefix=''
870 siteprefixexp=''
871 sizetype=''
872 so=''
873 socksizetype=''
874 sharpbang=''
875 shsharp=''
876 spitshell=''
877 src=''
878 ssizetype=''
879 startperl=''
880 startsh=''
881 stdchar=''
882 d_stdio_stream_array=''
883 stdio_stream_array=''
884 sysman=''
885 trnl=''
886 uidformat=''
887 uidsign=''
888 uidsize=''
889 uidtype=''
890 archname64=''
891 use64bitall=''
892 use64bitint=''
893 uselargefiles=''
894 uselongdouble=''
895 usemorebits=''
896 usemultiplicity=''
897 nm_opt=''
898 nm_so_opt=''
899 runnm=''
900 usenm=''
901 useperlio=''
902 usesocks=''
903 d_oldpthreads=''
904 use5005threads=''
905 useithreads=''
906 usethreads=''
907 incpath=''
908 mips_type=''
909 usrinc=''
910 d_vendorarch=''
911 installvendorarch=''
912 vendorarch=''
913 vendorarchexp=''
914 d_vendorbin=''
915 installvendorbin=''
916 vendorbin=''
917 vendorbinexp=''
918 d_vendorlib=''
919 installvendorlib=''
920 vendorlib=''
921 vendorlib_stem=''
922 vendorlibexp=''
923 usevendorprefix=''
924 vendorprefix=''
925 vendorprefixexp=''
926 defvoidused=''
927 voidflags=''
928 pm_apiversion=''
929 xs_apiversion=''
930 CONFIG=''
931
932 define='define'
933 undef='undef'
934 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
935 rmlist=''
936
937 : We must find out about Eunice early
938 eunicefix=':'
939 if test -f /etc/unixtovms; then
940         eunicefix=/etc/unixtovms
941 fi
942 if test -f /etc/unixtovms.exe; then
943         eunicefix=/etc/unixtovms.exe
944 fi
945
946 i_whoami=''
947 : set useposix=false in your hint file to disable the POSIX extension.
948 useposix=true
949 : set useopcode=false in your hint file to disable the Opcode extension.
950 useopcode=true
951 : Trailing extension.  Override this in a hint file, if needed.
952 _exe=''
953 : Extra object files, if any, needed on this platform.
954 archobjs=''
955 : Possible local include directories to search.
956 : Set locincpth to "" in a hint file to defeat local include searches.
957 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
958 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
959 :
960 : no include file wanted by default
961 inclwanted=''
962
963 groupstype=''
964 : change the next line if compiling for Xenix/286 on Xenix/386
965 xlibpth='/usr/lib/386 /lib/386'
966 : Possible local library directories to search.
967 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
968 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
969
970 : general looking path for locating libraries
971 glibpth="/usr/lib/large /lib /usr/lib $xlibpth"
972 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
973 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
974 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
975 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
976
977 : Private path used by Configure to find libraries.  Its value
978 : is prepended to libpth. This variable takes care of special
979 : machines, like the mips.  Usually, it should be empty.
980 plibpth=''
981
982 : default library list
983 libswanted=''
984 : some systems want to use only the non-versioned libso:s
985 ignore_versioned_solibs=''
986 : set usemultiplicity on the Configure command line to enable multiplicity.
987 : set usesocks on the Configure command line to enable socks.
988 : set usethreads on the Configure command line to enable threads.
989 : full support for void wanted by default
990 defvoidused=15
991
992 : List of libraries we want.
993 : If anyone needs -lnet, put it in a hint file.
994 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
995 libswanted="$libswanted dld ld sun m c cposix posix"
996 libswanted="$libswanted ndir dir crypt sec"
997 libswanted="$libswanted ucb bsd BSD PW x iconv"
998 : We probably want to search /usr/shlib before most other libraries.
999 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1000 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1001 glibpth="/usr/shlib $glibpth"
1002 : Do not use vfork unless overridden by a hint file.
1003 usevfork=false
1004
1005 : Find the basic shell for Bourne shell scripts
1006 case "$sh" in
1007 '')
1008         case "$SYSTYPE" in
1009         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1010         *) xxx='/bin/sh';;
1011         esac
1012         if test -f "$xxx"; then
1013                 sh="$xxx"
1014         else
1015                 : Build up a list and do a single loop so we can 'break' out.
1016                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1017                 for xxx in sh bash ksh pdksh ash; do
1018                         for p in $pth; do
1019                                 try="$try ${p}/${xxx}"
1020                         done
1021                 done
1022                 for xxx in $try; do
1023                         if test -f "$xxx"; then
1024                                 sh="$xxx";
1025                                 break
1026                         elif test -f "$xxx.exe"; then
1027                                 sh="$xxx";
1028                                 break
1029                         fi
1030                 done
1031         fi
1032         ;;
1033 esac
1034
1035 case "$sh" in
1036 '')     cat <<EOM >&2
1037 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1038
1039 Usually it's in /bin/sh.  How did you even get this far?
1040 Please contact me (Perl Maintainers) at perlbug@perl.com and 
1041 we'll try to straighten this all out.
1042 EOM
1043         exit 1
1044         ;;
1045 esac
1046
1047 : see if sh knows # comments
1048 if `$sh -c '#' >/dev/null 2>&1`; then
1049         shsharp=true
1050         spitshell=cat
1051         xcat=/bin/cat
1052         test -f $xcat || xcat=/usr/bin/cat
1053         echo "#!$xcat" >try
1054         $eunicefix try
1055         chmod +x try
1056         ./try > today
1057         if test -s today; then
1058                 sharpbang='#!'
1059         else
1060                 echo "#! $xcat" > try
1061                 $eunicefix try
1062                 chmod +x try
1063                 ./try > today
1064                 if test -s today; then
1065                         sharpbang='#! '
1066                 else
1067                         sharpbang=': use '
1068                 fi
1069         fi
1070 else
1071         echo " "
1072         echo "Your $sh doesn't grok # comments--I will strip them later on."
1073         shsharp=false
1074         cd ..
1075         echo "exec grep -v '^[  ]*#'" >spitshell
1076         chmod +x spitshell
1077         $eunicefix spitshell
1078         spitshell=`pwd`/spitshell
1079         cd UU
1080         echo "I presume that if # doesn't work, #! won't work either!"
1081         sharpbang=': use '
1082 fi
1083 rm -f try today
1084
1085 : figure out how to guarantee sh startup
1086 case "$startsh" in
1087 '') startsh=${sharpbang}${sh} ;;
1088 *)
1089 esac
1090 cat >try <<EOSS
1091 $startsh
1092 set abc
1093 test "$?abc" != 1
1094 EOSS
1095
1096 chmod +x try
1097 $eunicefix try
1098 if ./try; then
1099         : echo "Yup, it does."
1100 else
1101         echo "Hmm... '$startsh' does not guarantee sh startup..."
1102         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1103 fi
1104 rm -f try
1105
1106
1107 : Save command line options in file UU/cmdline.opt for later use in
1108 : generating config.sh.
1109 cat > cmdline.opt <<EOSH
1110 # Configure command line arguments.
1111 config_arg0='$0'
1112 config_args='$*'
1113 config_argc=$#
1114 EOSH
1115 argn=1
1116 for arg in "$@"; do
1117         cat >>cmdline.opt <<EOSH
1118 config_arg$argn='$arg'
1119 EOSH
1120         argn=`expr $argn + 1`
1121 done
1122
1123 : produce awk script to parse command line options
1124 cat >options.awk <<'EOF'
1125 BEGIN {
1126         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1127
1128         len = length(optstr);
1129         for (i = 1; i <= len; i++) {
1130                 c = substr(optstr, i, 1);
1131                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1132                 if (a == ":") {
1133                         arg[c] = 1;
1134                         i++;
1135                 }
1136                 opt[c] = 1;
1137         }
1138 }
1139 {
1140         expect = 0;
1141         str = $0;
1142         if (substr(str, 1, 1) != "-") {
1143                 printf("'%s'\n", str);
1144                 next;
1145         }
1146         len = length($0);
1147         for (i = 2; i <= len; i++) {
1148                 c = substr(str, i, 1);
1149                 if (!opt[c]) {
1150                         printf("-%s\n", substr(str, i));
1151                         next;
1152                 }
1153                 printf("-%s\n", c);
1154                 if (arg[c]) {
1155                         if (i < len)
1156                                 printf("'%s'\n", substr(str, i + 1));
1157                         else
1158                                 expect = 1;
1159                         next;
1160                 }
1161         }
1162 }
1163 END {
1164         if (expect)
1165                 print "?";
1166 }
1167 EOF
1168
1169 : process the command line options
1170 set X `for arg in "$@"; do echo "X$arg"; done |
1171         sed -e s/X// | awk -f options.awk`
1172 eval "set $*"
1173 shift
1174 rm -f options.awk
1175
1176 : set up default values
1177 fastread=''
1178 reuseval=false
1179 config_sh=''
1180 alldone=''
1181 error=''
1182 silent=''
1183 extractsh=''
1184 override=''
1185 knowitall=''
1186 rm -f optdef.sh posthint.sh
1187 cat >optdef.sh <<EOS
1188 $startsh
1189 EOS
1190
1191
1192 : option parsing
1193 while test $# -gt 0; do
1194         case "$1" in
1195         -d) shift; fastread=yes;;
1196         -e) shift; alldone=cont;;
1197         -f)
1198                 shift
1199                 cd ..
1200                 if test -r "$1"; then
1201                         config_sh="$1"
1202                 else
1203                         echo "$me: cannot read config file $1." >&2
1204                         error=true
1205                 fi
1206                 cd UU
1207                 shift;;
1208         -h) shift; error=true;;
1209         -r) shift; reuseval=true;;
1210         -s) shift; silent=true; realsilent=true;;
1211         -E) shift; alldone=exit;;
1212         -K) shift; knowitall=true;;
1213         -O) shift; override=true;;
1214         -S) shift; silent=true; extractsh=true;;
1215         -D)
1216                 shift
1217                 case "$1" in
1218                 *=)
1219                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1220                         echo "$me: ignoring -D $1" >&2
1221                         ;;
1222                 *=*) echo "$1" | \
1223                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1224                 *) echo "$1='define'" >> optdef.sh;;
1225                 esac
1226                 shift
1227                 ;;
1228         -U)
1229                 shift
1230                 case "$1" in
1231                 *=) echo "$1" >> optdef.sh;;
1232                 *=*)
1233                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1234                         echo "$me: ignoring -U $1" >&2
1235                         ;;
1236                 *) echo "$1='undef'" >> optdef.sh;;
1237                 esac
1238                 shift
1239                 ;;
1240         -A)
1241             shift
1242             xxx=''
1243             yyy="$1"
1244             zzz=''
1245             uuu=undef
1246             case "$yyy" in
1247             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1248                  case "$zzz" in
1249                  *:*) zzz='' ;;
1250                  *)   xxx=append
1251                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1252                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1253                  esac
1254                  ;;
1255             esac
1256             case "$xxx" in
1257             '')  case "$yyy" in
1258                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1259                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1260                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1261                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1262                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1263                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1264                  esac
1265                  ;;       
1266             esac
1267             case "$xxx" in
1268             append)
1269                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1270             clear)
1271                 echo "$yyy=''"                  >> posthint.sh ;;
1272             define)
1273                 case "$zzz" in
1274                 '') zzz=define ;;
1275                 esac
1276                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1277             eval)
1278                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1279             prepend)
1280                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1281             undef)
1282                 case "$zzz" in
1283                 '') zzz="$uuu" ;;
1284                 esac
1285                 echo "$yyy=$zzz"                >> posthint.sh ;;
1286             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1287             esac
1288             shift
1289             ;;
1290         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1291             exit 0;;
1292         --) break;;
1293         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1294         *) break;;
1295         esac
1296 done
1297
1298 case "$error" in
1299 true)
1300         cat >&2 <<EOM
1301 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1302                  [-U symbol] [-U symbol=] [-A command:symbol...]
1303   -d : use defaults for all answers.
1304   -e : go on without questioning past the production of config.sh.
1305   -f : specify an alternate default configuration file.
1306   -h : print this help message and exit (with an error status).
1307   -r : reuse C symbols value if possible (skips costly nm extraction).
1308   -s : silent mode, only echoes questions and essential information.
1309   -D : define symbol to have some value:
1310          -D symbol         symbol gets the value 'define'
1311          -D symbol=value   symbol gets the value 'value'
1312   -E : stop at the end of questions, after having produced config.sh.
1313   -K : do not use unless you know what you are doing.
1314   -O : let -D and -U override definitions from loaded configuration file.
1315   -S : perform variable substitutions on all .SH files (can mix with -f)
1316   -U : undefine symbol:
1317          -U symbol    symbol gets the value 'undef'
1318          -U symbol=   symbol gets completely empty
1319   -A : manipulate symbol after the platform specific hints have been applied:
1320          -A symbol=value                append " "value to symbol
1321          -A append:symbol=value         append value to symbol
1322          -A define:symbol=value         define symbol to have value
1323          -A clear:symbol                define symbol to be ''
1324          -A define:symbol               define symbol to be 'define'
1325          -A eval:symbol=value           define symbol to be eval of value
1326          -A prepend:symbol=value        prepend value to symbol
1327          -A undef:symbol                define symbol to be 'undef'
1328          -A undef:symbol=               define symbol to be ''
1329   -V : print version number and exit (with a zero status).
1330 EOM
1331         exit 1
1332         ;;
1333 esac
1334
1335 : Sanity checks
1336 case "$fastread$alldone" in
1337 yescont|yesexit) ;;
1338 *)
1339         if test ! -t 0; then
1340                 echo "Say 'sh Configure', not 'sh <Configure'"
1341                 exit 1
1342         fi
1343         ;;
1344 esac
1345
1346 exec 4>&1
1347 case "$silent" in
1348 true) exec 1>/dev/null;;
1349 esac
1350
1351 : run the defines and the undefines, if any, but leave the file out there...
1352 touch optdef.sh
1353 . ./optdef.sh
1354 : create the posthint manipulation script and leave the file out there...
1355 touch posthint.sh
1356
1357 : set package name
1358 package=perl5
1359 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1360 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1361 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1362 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1363 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1364 esac
1365
1366 : Some greps do not return status, grrr.
1367 echo "grimblepritz" >grimble
1368 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1369         contains=contains
1370 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1371         contains=grep
1372 else
1373         contains=contains
1374 fi
1375 rm -f grimble
1376 : the following should work in any shell
1377 case "$contains" in
1378 contains*)
1379         echo " "
1380         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1381         cat >contains <<'EOSS'
1382 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1383 EOSS
1384 chmod +x contains
1385 esac
1386
1387 : Find the path to the source tree
1388 case "$src" in
1389 '') case "$0" in
1390     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1391          case "$src" in
1392          /*)    ;;
1393          *)     src=`cd ../$src && pwd` ;;
1394          esac
1395          ;;
1396     *)   src='.';;
1397     esac;;
1398 esac
1399 case "$src" in
1400 '')     src=/
1401         rsrc=/
1402         ;;
1403 /*) rsrc="$src";;
1404 *) rsrc="../$src";;
1405 esac
1406 if test -f $rsrc/Configure && \
1407         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1408 then
1409    : found it, so we are ok.
1410 else
1411         rsrc=''
1412         for src in . .. ../.. ../../.. ../../../..; do
1413                 if test -f ../$src/Configure && \
1414                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1415                 then
1416                         rsrc=../$src
1417                         break
1418                 fi
1419         done
1420 fi
1421 case "$rsrc" in
1422 '')
1423         cat <<EOM >&4
1424
1425 Sorry, I can't seem to locate the source dir for $package.  Please start
1426 Configure with an explicit path -- i.e. /some/path/Configure.
1427
1428 EOM
1429         exit 1
1430         ;;
1431 ../.)   rsrc='..';;
1432 *)
1433         echo " "
1434         echo "Sources for $package found in \"$src\"." >&4
1435         ;;
1436 esac
1437
1438 : script used to extract .SH files with variable substitutions
1439 cat >extract <<'EOS'
1440 CONFIGDOTSH=true
1441 echo "Doing variable substitutions on .SH files..."
1442 if test -f $src/MANIFEST; then
1443         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1444 else
1445         echo "(Looking for .SH files under the source directory.)"
1446         set x `(cd $src; find . -name "*.SH" -print)`
1447 fi
1448 shift
1449 case $# in
1450 0) set x `(cd $src; echo *.SH)`; shift;;
1451 esac
1452 if test ! -f $src/$1; then
1453         shift
1454 fi
1455 mkdir_p='
1456 name=$1;
1457 create="";
1458 while test $name; do
1459         if test ! -d "$name"; then
1460                 create="$name $create";
1461                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1462                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1463         else
1464                 name="";
1465         fi;
1466 done;
1467 for file in $create; do
1468         mkdir $file;
1469 done
1470 '
1471 for file in $*; do
1472         case "$src" in
1473         ".")
1474                 case "$file" in
1475                 */*)
1476                         dir=`expr X$file : 'X\(.*\)/'`
1477                         file=`expr X$file : 'X.*/\(.*\)'`
1478                         (cd $dir && . ./$file)
1479                         ;;
1480                 *)
1481                         . ./$file
1482                         ;;
1483                 esac
1484                 ;;
1485         *)
1486                 case "$file" in
1487                 */*)
1488                         dir=`expr X$file : 'X\(.*\)/'`
1489                         file=`expr X$file : 'X.*/\(.*\)'`
1490                         (set x $dir; shift; eval $mkdir_p)
1491                         sh <$src/$dir/$file
1492                         ;;
1493                 *)
1494                         sh <$src/$file
1495                         ;;
1496                 esac
1497                 ;;
1498         esac
1499 done
1500 if test -f $src/config_h.SH; then
1501         if test ! -f config.h; then
1502         : oops, they left it out of MANIFEST, probably, so do it anyway.
1503         . $src/config_h.SH
1504         fi
1505 fi
1506 EOS
1507
1508 : extract files and exit if asked to do so
1509 case "$extractsh" in
1510 true)
1511         case "$realsilent" in
1512         true) ;;
1513         *) exec 1>&4;;
1514         esac
1515         case "$config_sh" in
1516         '') config_sh='config.sh';;
1517         esac
1518         echo " "
1519         echo "Fetching answers from $config_sh..."
1520         cd ..
1521         . $config_sh
1522         test "$override" && . ./optdef.sh
1523         echo " "
1524         . UU/extract
1525         rm -rf UU
1526         echo "Done."
1527         exit 0
1528         ;;
1529 esac
1530
1531 : Eunice requires " " instead of "", can you believe it
1532 echo " "
1533 : Here we go...
1534 echo "Beginning of configuration questions for $package."
1535
1536 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1537
1538 : first determine how to suppress newline on echo command
1539 echo " "
1540 echo "Checking echo to see how to suppress newlines..."
1541 (echo "hi there\c" ; echo " ") >.echotmp
1542 if $contains c .echotmp >/dev/null 2>&1 ; then
1543         echo "...using -n."
1544         n='-n'
1545         c=''
1546 else
1547         cat <<'EOM'
1548 ...using \c
1549 EOM
1550         n=''
1551         c='\c'
1552 fi
1553 echo $n "The star should be here-->$c"
1554 echo '*'
1555 rm -f .echotmp
1556
1557 : Now test for existence of everything in MANIFEST
1558 echo " "
1559 if test -f $rsrc/MANIFEST; then
1560         echo "First let's make sure your kit is complete.  Checking..." >&4
1561         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1562         rm -f missing
1563         tmppwd=`pwd`
1564         for filelist in x??; do
1565                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1566         done
1567         if test -s missing; then
1568                 cat missing >&4
1569                 cat >&4 <<'EOM'
1570
1571 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1572
1573 You have the option of continuing the configuration process, despite the
1574 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1575 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1576 and contact the author (perlbug@perl.com).
1577
1578 EOM
1579                 echo $n "Continue? [n] $c" >&4
1580                 read ans
1581                 case "$ans" in
1582                 y*)
1583                         echo "Continuing..." >&4
1584                         rm -f missing
1585                         ;;
1586                 *)
1587                         echo "ABORTING..." >&4
1588                         kill $$
1589                         ;;
1590                 esac
1591         else
1592                 echo "Looks good..."
1593         fi
1594 else
1595         echo "There is no MANIFEST file.  I hope your kit is complete !"
1596 fi
1597 rm -f missing x??
1598
1599 echo " "
1600 : Find the appropriate value for a newline for tr
1601 if test -n "$DJGPP"; then
1602        trnl='\012'
1603 fi
1604 if test X"$trnl" = X; then
1605         case "`echo foo|tr '\n' x 2>/dev/null`" in
1606         foox) trnl='\n' ;;
1607         esac
1608 fi
1609 if test X"$trnl" = X; then
1610         case "`echo foo|tr '\012' x 2>/dev/null`" in
1611         foox) trnl='\012' ;;
1612         esac
1613 fi
1614 if test X"$trnl" = X; then
1615         cat <<EOM >&2
1616
1617 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1618
1619 EOM
1620         exit 1
1621 fi
1622
1623 : compute the number of columns on the terminal for proper question formatting
1624 case "$COLUMNS" in
1625 '') COLUMNS='80';;
1626 esac
1627
1628 : set up the echo used in my read
1629 myecho="case \"\$xxxm\" in
1630 '') echo $n \"\$rp $c\" >&4;;
1631 *) case \"\$rp\" in
1632         '') echo $n \"[\$xxxm] $c\";;
1633         *)
1634                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1635                         echo \"\$rp\" >&4
1636                         echo $n \"[\$xxxm] $c\" >&4
1637                 else
1638                         echo $n \"\$rp [\$xxxm] $c\" >&4
1639                 fi
1640                 ;;
1641         esac;;
1642 esac"
1643
1644 : now set up to do reads with possible shell escape and default assignment
1645 cat <<EOSC >myread
1646 $startsh
1647 xxxm=\$dflt
1648 $myecho
1649 ans='!'
1650 case "\$fastread" in
1651 yes) case "\$dflt" in
1652         '') ;;
1653         *) ans='';
1654                 case "\$silent-\$rp" in
1655                 true-) ;;
1656                 *) echo " " >&4;;
1657                 esac;;
1658         esac;;
1659 *) case "\$silent" in
1660         true) case "\$rp" in
1661                 '') ans='';;
1662                 esac;;
1663         esac;;
1664 esac
1665 while expr "X\$ans" : "X!" >/dev/null; do
1666         read answ
1667         set x \$xxxm
1668         shift
1669         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1670         case  "\$answ" in
1671         "!")
1672                 sh 1>&4
1673                 echo " "
1674                 $myecho
1675                 ;;
1676         !*)
1677                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1678                 shift
1679                 sh 1>&4 -c "\$*"
1680                 echo " "
1681                 $myecho
1682                 ;;
1683         "\$ans")
1684                 case "\$ans" in
1685                 \\&*)
1686                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1687                         shift
1688                         case "\$1" in
1689                         -d)
1690                                 fastread=yes
1691                                 echo "(OK, I'll run with -d after this question.)" >&4
1692                                 ;;
1693                         -*)
1694                                 echo "*** Sorry, \$1 not supported yet." >&4
1695                                 ;;
1696                         esac
1697                         $myecho
1698                         ans=!
1699                         ;;
1700                 esac;;
1701         *)
1702                 case "\$aok" in
1703                 y)
1704                         echo "*** Substitution done -- please confirm."
1705                         xxxm="\$ans"
1706                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1707                         xxxm="\$ans"
1708                         ans=!
1709                         ;;
1710                 *)
1711                         echo "*** Error -- try again."
1712                         ans=!
1713                         ;;
1714                 esac
1715                 $myecho
1716                 ;;
1717         esac
1718         case "\$ans\$xxxm\$nostick" in
1719         '')
1720                 ans=!
1721                 $myecho
1722                 ;;
1723         esac
1724 done
1725 case "\$ans" in
1726 '') ans="\$xxxm";;
1727 esac
1728 EOSC
1729
1730 : create .config dir to save info across Configure sessions
1731 test -d ../.config || mkdir ../.config
1732 cat >../.config/README <<EOF
1733 This directory created by Configure to save information that should
1734 persist across sessions for $package.
1735
1736 You may safely delete it if you wish.
1737 EOF
1738
1739 : general instructions
1740 needman=true
1741 firsttime=true
1742 user=`(logname) 2>/dev/null`
1743 case "$user" in
1744 '') user=`whoami 2>&1`;;
1745 esac
1746 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1747         firsttime=false
1748         echo " "
1749         rp='Would you like to see the instructions?'
1750         dflt=n
1751         . ./myread
1752         case "$ans" in
1753         [yY]*) ;;
1754         *) needman=false;;
1755         esac
1756 fi
1757 if $needman; then
1758         cat <<EOH
1759
1760 This installation shell script will examine your system and ask you questions
1761 to determine how the perl5 package should be installed. If you get
1762 stuck on a question, you may use a ! shell escape to start a subshell or
1763 execute a command.  Many of the questions will have default answers in square
1764 brackets; typing carriage return will give you the default.
1765
1766 On some of the questions which ask for file or directory names you are allowed
1767 to use the ~name construct to specify the login directory belonging to "name",
1768 even if you don't have a shell which knows about that.  Questions where this is
1769 allowed will be marked "(~name ok)".
1770
1771 EOH
1772         rp=''
1773         dflt='Type carriage return to continue'
1774         . ./myread
1775         cat <<'EOH'
1776
1777 The prompter used in this script allows you to use shell variables and
1778 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1779 in the default answer, as if the default line was a set of arguments given to a
1780 script shell.  This means you may also use $* to repeat the whole default line,
1781 so you do not have to re-type everything to add something to the default.
1782
1783 Everytime there is a substitution, you will have to confirm.  If there is an
1784 error (e.g. an unmatched backtick), the default answer will remain unchanged
1785 and you will be prompted again.
1786
1787 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1788 the questions and use the computed defaults (or the previous answers if there
1789 was already a config.sh file). Type 'Configure -h' for a list of options.
1790 You may also start interactively and then answer '& -d' at any prompt to turn
1791 on the non-interactive behaviour for the remainder of the execution.
1792
1793 EOH
1794         . ./myread
1795         cat <<EOH
1796
1797 Much effort has been expended to ensure that this shell script will run on any
1798 Unix system.  If despite that it blows up on yours, your best bet is to edit
1799 Configure and run it again.  If you can't run Configure for some reason,
1800 you'll have to generate a config.sh file by hand.  Whatever problems you
1801 have, let me (perlbug@perl.com) know how I blew it.
1802
1803 This installation script affects things in two ways:
1804
1805 1) it may do direct variable substitutions on some of the files included
1806    in this kit.
1807 2) it builds a config.h file for inclusion in C programs.  You may edit
1808    any of these files as the need arises after running this script.
1809
1810 If you make a mistake on a question, there is no easy way to back up to it
1811 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1812 files.  Configure will offer to let you do this before it runs the SH files.
1813
1814 EOH
1815         dflt='Type carriage return to continue'
1816         . ./myread
1817         case "$firsttime" in
1818         true) echo $user >>../.config/instruct;;
1819         esac
1820 fi
1821
1822 : find out where common programs are
1823 echo " "
1824 echo "Locating common programs..." >&4
1825 cat <<EOSC >loc
1826 $startsh
1827 case \$# in
1828 0) exit 1;;
1829 esac
1830 thing=\$1
1831 shift
1832 dflt=\$1
1833 shift
1834 for dir in \$*; do
1835         case "\$thing" in
1836         .)
1837         if test -d \$dir/\$thing; then
1838                 echo \$dir
1839                 exit 0
1840         fi
1841         ;;
1842         *)
1843         for thisthing in \$dir/\$thing; do
1844                 : just loop through to pick last item
1845         done
1846         if test -f \$thisthing; then
1847                 echo \$thisthing
1848                 exit 0
1849         elif test -f \$dir/\$thing.exe; then
1850                 if test -n "$DJGPP"; then
1851                         echo \$dir/\$thing.exe
1852                 else
1853                         : on Eunice apparently
1854                         echo \$dir/\$thing
1855                 fi
1856                 exit 0
1857         fi
1858         ;;
1859         esac
1860 done
1861 echo \$dflt
1862 exit 1
1863 EOSC
1864 chmod +x loc
1865 $eunicefix loc
1866 loclist="
1867 awk
1868 cat
1869 comm
1870 cp
1871 echo
1872 expr
1873 grep
1874 ls
1875 make
1876 mkdir
1877 rm
1878 sed
1879 sort
1880 touch
1881 tr
1882 uniq
1883 "
1884 trylist="
1885 Mcc
1886 ar
1887 byacc
1888 cpp
1889 csh
1890 date
1891 egrep
1892 gzip
1893 less
1894 ln
1895 more
1896 nm
1897 nroff
1898 pg
1899 test
1900 uname
1901 zip
1902 "
1903 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1904 pth="$pth /lib /usr/lib"
1905 for file in $loclist; do
1906         eval xxx=\$$file
1907         case "$xxx" in
1908         /*|?:[\\/]*)
1909                 if test -f "$xxx"; then
1910                         : ok
1911                 else
1912                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1913                         xxx=`./loc $file $file $pth`
1914                 fi
1915                 ;;
1916         '') xxx=`./loc $file $file $pth`;;
1917         *) xxx=`./loc $xxx $xxx $pth`;;
1918         esac
1919         eval $file=$xxx
1920         eval _$file=$xxx
1921         case "$xxx" in
1922         /*)
1923                 echo $file is in $xxx.
1924                 ;;
1925         ?:[\\/]*)
1926                 echo $file is in $xxx.
1927                 ;;
1928         *)
1929                 echo "I don't know where '$file' is, and my life depends on it." >&4
1930                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1931                 exit 1
1932                 ;;
1933         esac
1934 done
1935 echo " "
1936 echo "Don't worry if any of the following aren't found..."
1937 say=offhand
1938 for file in $trylist; do
1939         eval xxx=\$$file
1940         case "$xxx" in
1941         /*|?:[\\/]*)
1942                 if test -f "$xxx"; then
1943                         : ok
1944                 else
1945                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1946                         xxx=`./loc $file $file $pth`
1947                 fi
1948                 ;;
1949         '') xxx=`./loc $file $file $pth`;;
1950         *) xxx=`./loc $xxx $xxx $pth`;;
1951         esac
1952         eval $file=$xxx
1953         eval _$file=$xxx
1954         case "$xxx" in
1955         /*)
1956                 echo $file is in $xxx.
1957                 ;;
1958         ?:[\\/]*)
1959                 echo $file is in $xxx.
1960                 ;;
1961         *)
1962                 echo "I don't see $file out there, $say."
1963                 say=either
1964                 ;;
1965         esac
1966 done
1967 case "$egrep" in
1968 egrep)
1969         echo "Substituting grep for egrep."
1970         egrep=$grep
1971         ;;
1972 esac
1973 case "$ln" in
1974 ln)
1975         echo "Substituting cp for ln."
1976         ln=$cp
1977         ;;
1978 esac
1979 case "$test" in
1980 test)
1981         echo "Hopefully test is built into your sh."
1982         ;;
1983 *)
1984         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1985                 echo "Using the test built into your sh."
1986                 test=test
1987                 _test=test
1988         fi
1989         ;;
1990 esac
1991 case "$echo" in
1992 echo)
1993         echo "Hopefully echo is built into your sh."
1994         ;;
1995 '') ;;
1996 *)
1997         echo " "
1998 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1999         $echo $n "hi there$c" >foo1
2000         echo $n "hi there$c" >foo2
2001         if cmp foo1 foo2 >/dev/null 2>&1; then
2002                 echo "They are compatible.  In fact, they may be identical."
2003         else
2004                 case "$n" in
2005                 '-n') n='' c='\c';;
2006                 *) n='-n' c='';;
2007                 esac
2008                 cat <<FOO
2009 They are not compatible!  You are probably running ksh on a non-USG system.
2010 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2011 have echo built in and we may have to run some Bourne shell scripts.  That
2012 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2013
2014 FOO
2015                 $echo $n "The star should be here-->$c"
2016                 $echo "*"
2017         fi
2018         $rm -f foo1 foo2
2019         ;;
2020 esac
2021
2022 : determine whether symbolic links are supported
2023 echo " "
2024 $touch blurfl
2025 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2026         echo "Symbolic links are supported." >&4
2027         lns="$ln -s"
2028 else
2029         echo "Symbolic links are NOT supported." >&4
2030         lns="$ln"
2031 fi
2032 $rm -f blurfl sym
2033
2034 : see whether [:lower:] and [:upper:] are supported character classes
2035 echo " "
2036 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2037 ABYZ)
2038         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2039         up='[:upper:]'
2040         low='[:lower:]'
2041         ;;
2042 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2043         # (0xc9 and 0xd1), therefore that is a nice testing point.
2044         if test "X$up" = X -o "X$low" = X; then
2045             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2046             ij) up='[A-Z]'
2047                 low='[a-z]'
2048                 ;;
2049             esac
2050         fi
2051         if test "X$up" = X -o "X$low" = X; then
2052             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2053             ij) up='A-Z'
2054                 low='a-z'
2055                 ;;
2056             esac
2057         fi
2058         if test "X$up" = X -o "X$low" = X; then
2059             case "`echo IJ | od -x 2>/dev/null`" in
2060             *C9D1*|*c9d1*)
2061                 echo "Hey, this might be EBCDIC." >&4
2062                 if test "X$up" = X -o "X$low" = X; then
2063                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2064                     ij) up='[A-IJ-RS-Z]'
2065                         low='[a-ij-rs-z]'
2066                         ;;
2067                     esac
2068                 fi
2069                 if test "X$up" = X -o "X$low" = X; then
2070                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2071                     ij) up='A-IJ-RS-Z'
2072                         low='a-ij-rs-z'
2073                         ;;
2074                     esac
2075                 fi
2076                 ;;
2077             esac
2078         fi
2079 esac
2080 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2081 ij)
2082     echo "Using $up and $low to convert case." >&4
2083     ;;
2084 *)
2085     echo "I don't know how to translate letters from upper to lower case." >&4
2086     echo "Your tr is not acting any way I know of." >&4
2087     exit 1
2088     ;;
2089 esac
2090 : set up the translation script tr, must be called with ./tr of course
2091 cat >tr <<EOSC
2092 $startsh
2093 case "\$1\$2" in
2094 '[A-Z][a-z]') exec $tr '$up' '$low';;
2095 '[a-z][A-Z]') exec $tr '$low' '$up';;
2096 esac
2097 exec $tr "\$@"
2098 EOSC
2099 chmod +x tr
2100 $eunicefix tr
2101
2102 : Try to determine whether config.sh was made on this system
2103 case "$config_sh" in
2104 '')
2105 myuname=`$uname -a 2>/dev/null`
2106 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2107 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2108 # because the A-Z/a-z are not consecutive.
2109 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2110         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2111 newmyuname="$myuname"
2112 dflt=n
2113 case "$knowitall" in
2114 '')
2115         if test -f ../config.sh; then
2116                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2117                         eval "`grep myuname= ../config.sh`"
2118                 fi
2119                 if test "X$myuname" = "X$newmyuname"; then
2120                         dflt=y
2121                 fi
2122         fi
2123         ;;
2124 *) dflt=y;;
2125 esac
2126
2127 : Get old answers from old config file if Configure was run on the
2128 : same system, otherwise use the hints.
2129 hint=default
2130 cd ..
2131 if test -f config.sh; then
2132         echo " "
2133         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2134         . UU/myread
2135         case "$ans" in
2136         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2137         *)  echo "Fetching default answers from your old config.sh file..." >&4
2138                 tmp_n="$n"
2139                 tmp_c="$c"
2140                 tmp_sh="$sh"
2141                 . ./config.sh
2142                 cp config.sh UU
2143                 n="$tmp_n"
2144                 c="$tmp_c"
2145                 : Older versions did not always set $sh.  Catch re-use of such
2146                 : an old config.sh.
2147                 case "$sh" in
2148                 '') sh="$tmp_sh" ;;
2149                 esac
2150                 hint=previous
2151                 ;;
2152         esac
2153 fi
2154 if test ! -f config.sh; then
2155         $cat <<EOM
2156
2157 First time through, eh?  I have some defaults handy for some systems
2158 that need some extra help getting the Configure answers right:
2159
2160 EOM
2161         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2162         dflt=''
2163         : Half the following guesses are probably wrong... If you have better
2164         : tests or hints, please send them to perlbug@perl.com
2165         : The metaconfig authors would also appreciate a copy...
2166         $test -f /irix && osname=irix
2167         $test -f /xenix && osname=sco_xenix
2168         $test -f /dynix && osname=dynix
2169         $test -f /dnix && osname=dnix
2170         $test -f /lynx.os && osname=lynxos
2171         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2172         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2173         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2174         $test -f /bin/mips && /bin/mips && osname=mips
2175         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2176                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2177         $test -d /usr/apollo/bin && osname=apollo
2178         $test -f /etc/saf/_sactab && osname=svr4
2179         $test -d /usr/include/minix && osname=minix
2180         if $test -d /MachTen -o -d /MachTen_Folder; then
2181                 osname=machten
2182                 if $test -x /sbin/version; then
2183                         osvers=`/sbin/version | $awk '{print $2}' |
2184                         $sed -e 's/[A-Za-z]$//'`
2185                 elif $test -x /usr/etc/version; then
2186                         osvers=`/usr/etc/version | $awk '{print $2}' |
2187                         $sed -e 's/[A-Za-z]$//'`
2188                 else
2189                         osvers="$2.$3"
2190                 fi
2191         fi
2192
2193         $test -f /sys/posix.dll &&
2194                 $test -f /usr/bin/what &&
2195                 set X `/usr/bin/what /sys/posix.dll` &&
2196                 $test "$3" = UWIN &&
2197                 osname=uwin &&
2198                 osvers="$5"
2199
2200         if $test -f $uname; then
2201                 set X $myuname
2202                 shift
2203
2204                 case "$5" in
2205                 fps*) osname=fps ;;
2206                 mips*)
2207                         case "$4" in
2208                         umips) osname=umips ;;
2209                         *) osname=mips ;;
2210                         esac;;
2211                 [23]100) osname=mips ;;
2212                 next*) osname=next ;;
2213                 i386*)
2214                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2215                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2216                                 osname='sco'
2217                                 osvers=$tmp
2218                         elif $test -f /etc/kconfig; then
2219                                 osname=isc
2220                                 if test "$lns" = "$ln -s"; then
2221                                         osvers=4
2222                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2223                                         osvers=3
2224                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2225                                         osvers=2
2226                                 fi
2227                         fi
2228                         tmp=''
2229                         ;;
2230                 pc*)
2231                         if test -n "$DJGPP"; then
2232                                 osname=dos
2233                                 osvers=djgpp
2234                         fi
2235                         ;;
2236                 esac
2237
2238                 case "$1" in
2239                 aix) osname=aix
2240                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2241                         case "$tmp" in
2242                         'not found') osvers="$4"."$3" ;;
2243                         '<3240'|'<>3240') osvers=3.2.0 ;;
2244                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2245                         '=3250'|'>3250') osvers=3.2.5 ;;
2246                         *) osvers=$tmp;;
2247                         esac
2248                         ;;
2249                 bsd386) osname=bsd386
2250                         osvers=`$uname -r`
2251                         ;;
2252                 cygwin*) osname=cygwin
2253                         osvers="$3"
2254                         ;;
2255                 *dc.osx) osname=dcosx
2256                         osvers="$3"
2257                         ;;
2258                 dnix) osname=dnix
2259                         osvers="$3"
2260                         ;;
2261                 domainos) osname=apollo
2262                         osvers="$3"
2263                         ;;
2264                 dgux) osname=dgux 
2265                         osvers="$3"
2266                         ;;
2267                 dynixptx*) osname=dynixptx
2268                         osvers=`echo "$4"|sed 's/^v//'`
2269                         ;;
2270                 freebsd) osname=freebsd 
2271                         osvers="$3" ;;
2272                 genix) osname=genix ;;
2273                 hp*) osname=hpux 
2274                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2275                         ;;
2276                 irix*) osname=irix
2277                         case "$3" in
2278                         4*) osvers=4 ;;
2279                         5*) osvers=5 ;;
2280                         *)      osvers="$3" ;;
2281                         esac
2282                         ;;
2283                 linux) osname=linux
2284                         case "$3" in
2285                         *)      osvers="$3" ;;
2286                         esac
2287                         ;;
2288                 MiNT) osname=mint
2289                         ;;
2290                 netbsd*) osname=netbsd
2291                         osvers="$3"
2292                         ;;
2293                 news-os) osvers="$3"
2294                         case "$3" in
2295                         4*) osname=newsos4 ;;
2296                         *) osname=newsos ;;
2297                         esac
2298                         ;;
2299                 next*) osname=next ;;
2300                 POSIX-BC | posix-bc ) osname=posix-bc
2301                         osvers="$3"
2302                         ;;
2303                 powerux | power_ux | powermax_os | powermaxos | \
2304                 powerunix | power_unix) osname=powerux
2305                         osvers="$3"
2306                         ;;
2307                 qnx) osname=qnx
2308                         osvers="$4"
2309                         ;;
2310                 solaris) osname=solaris
2311                         case "$3" in
2312                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2313                         *)      osvers="$3" ;;
2314                         esac
2315                         ;;
2316                 sunos) osname=sunos
2317                         case "$3" in
2318                         5*) osname=solaris
2319                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2320                         *)      osvers="$3" ;;
2321                         esac
2322                         ;;
2323                 titanos) osname=titanos
2324                         case "$3" in
2325                         1*) osvers=1 ;;
2326                         2*) osvers=2 ;;
2327                         3*) osvers=3 ;;
2328                         4*) osvers=4 ;;
2329                         *)      osvers="$3" ;;
2330                         esac
2331                         ;;
2332                 ultrix) osname=ultrix
2333                         osvers="$3"
2334                         ;;
2335                 osf1|mls+)      case "$5" in
2336                                 alpha)
2337                                         osname=dec_osf
2338                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2339                                         ;;
2340                         hp*)    osname=hp_osf1  ;;
2341                         mips)   osname=mips_osf1 ;;
2342                         esac
2343                         ;;
2344                 unixware) osname=svr5
2345                         osvers="$4"
2346                         ;;
2347                 uts) osname=uts
2348                         osvers="$3"
2349                         ;;
2350                 $2) case "$osname" in
2351                         *isc*) ;;
2352                         *freebsd*) ;;
2353                         svr*)
2354                                 : svr4.x or possibly later
2355                                 case "svr$3" in 
2356                                 ${osname}*)
2357                                         osname=svr$3
2358                                         osvers=$4
2359                                         ;;
2360                                 esac
2361                                 case "$osname" in
2362                                 svr4.0)
2363                                         : Check for ESIX
2364                                         if test -f /stand/boot ; then
2365                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2366                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2367                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2368                                                         if test -n "$isesix"; then
2369                                                                 osname=esix4
2370                                                         fi
2371                                                 fi
2372                                         fi
2373                                         ;;
2374                                 esac
2375                                 ;;
2376                         *)      if test -f /etc/systemid; then
2377                                         osname=sco
2378                                         set `echo $3 | $sed 's/\./ /g'` $4
2379                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2380                                                 osvers=$1.$2.$3
2381                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2382                                                 osvers=$1.$2
2383                                         elif $test -f $src/hints/sco_$1.sh; then
2384                                                 osvers=$1
2385                                         fi
2386                                 else
2387                                         case "$osname" in
2388                                         '') : Still unknown.  Probably a generic Sys V.
2389                                                 osname="sysv"
2390                                                 osvers="$3"
2391                                                 ;;
2392                                         esac
2393                                 fi
2394                                 ;;
2395                         esac
2396                         ;;
2397                 *)      case "$osname" in
2398                         '') : Still unknown.  Probably a generic BSD.
2399                                 osname="$1"
2400                                 osvers="$3"
2401                                 ;;
2402                         esac
2403                         ;;
2404                 esac
2405         else
2406                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2407                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2408                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2409                                 osname=news_os
2410                         fi
2411                         $rm -f UU/kernel.what
2412                 elif test -d c:/.; then
2413                         set X $myuname
2414                         osname=os2
2415                         osvers="$5"
2416                 fi
2417         fi
2418         
2419         : Now look for a hint file osname_osvers, unless one has been
2420         : specified already.
2421         case "$hintfile" in
2422         ''|' ')
2423                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
2424                 : Also try without trailing minor version numbers.
2425                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
2426                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
2427                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
2428                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
2429                 case "$file" in
2430                 '') dflt=none ;;
2431                 *)  case "$osvers" in
2432                         '') dflt=$file
2433                                 ;;
2434                         *)  if $test -f $src/hints/$file.sh ; then
2435                                         dflt=$file
2436                                 elif $test -f $src/hints/$xfile.sh ; then
2437                                         dflt=$xfile
2438                                 elif $test -f $src/hints/$xxfile.sh ; then
2439                                         dflt=$xxfile
2440                                 elif $test -f $src/hints/$xxxfile.sh ; then
2441                                         dflt=$xxxfile
2442                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2443                                         dflt=$xxxxfile
2444                                 elif $test -f "$src/hints/${osname}.sh" ; then
2445                                         dflt="${osname}"
2446                                 else
2447                                         dflt=none
2448                                 fi
2449                                 ;;
2450                         esac
2451                         ;;
2452                 esac
2453                 if $test -f Policy.sh ; then
2454                         case "$dflt" in
2455                         *Policy*) ;;
2456                         none) dflt="Policy" ;;
2457                         *) dflt="Policy $dflt" ;;
2458                         esac
2459                 fi
2460                 ;;
2461         *)
2462                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2463                 ;;
2464         esac
2465
2466         if $test -f Policy.sh ; then
2467                 $cat <<EOM
2468
2469 There's also a Policy hint file available, which should make the
2470 site-specific (policy) questions easier to answer.
2471 EOM
2472
2473         fi
2474
2475         $cat <<EOM
2476
2477 You may give one or more space-separated answers, or "none" if appropriate.
2478 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2479 is a good thing.  DO NOT give a wrong version or a wrong OS.
2480
2481 EOM
2482
2483         rp="Which of these apply, if any?"
2484         . UU/myread
2485         tans=$ans
2486         for file in $tans; do
2487                 if $test X$file = XPolicy -a -f Policy.sh; then
2488                         . Policy.sh
2489                         $cat Policy.sh >> UU/config.sh
2490                 elif $test -f $src/hints/$file.sh; then
2491                         . $src/hints/$file.sh
2492                         $cat $src/hints/$file.sh >> UU/config.sh
2493                 elif $test X$tans = X -o X$tans = Xnone ; then
2494                         : nothing
2495                 else
2496                         : Give one chance to correct a possible typo.
2497                         echo "$file.sh does not exist"
2498                         dflt=$file
2499                         rp="hint to use instead?"
2500                         . UU/myread
2501                         for file in $ans; do
2502                                 if $test -f "$src/hints/$file.sh"; then
2503                                         . $src/hints/$file.sh
2504                                         $cat $src/hints/$file.sh >> UU/config.sh
2505                                 elif $test X$ans = X -o X$ans = Xnone ; then
2506                                         : nothing
2507                                 else
2508                                         echo "$file.sh does not exist -- ignored."
2509                                 fi
2510                         done
2511                 fi
2512         done
2513
2514         hint=recommended
2515         : Remember our hint file for later.
2516         if $test -f "$src/hints/$file.sh" ; then
2517                 hintfile="$file"
2518         else
2519                 hintfile=''
2520         fi
2521 fi
2522 cd UU
2523 ;;
2524 *)
2525         echo " "
2526         echo "Fetching default answers from $config_sh..." >&4
2527         tmp_n="$n"
2528         tmp_c="$c"
2529         cd ..
2530         cp $config_sh config.sh 2>/dev/null
2531         chmod +w config.sh
2532         . ./config.sh
2533         cd UU
2534         cp ../config.sh .
2535         n="$tmp_n"
2536         c="$tmp_c"
2537         hint=previous
2538         ;;
2539 esac
2540 test "$override" && . ./optdef.sh
2541 myuname="$newmyuname"
2542
2543 : Restore computed paths
2544 for file in $loclist $trylist; do
2545         eval $file="\$_$file"
2546 done
2547
2548 cat << EOM
2549
2550 Configure uses the operating system name and version to set some defaults.
2551 The default value is probably right if the name rings a bell. Otherwise,
2552 since spelling matters for me, either accept the default or answer "none"
2553 to leave it blank.
2554
2555 EOM
2556 case "$osname" in
2557         ''|' ')
2558                 case "$hintfile" in
2559                 ''|' '|none) dflt=none ;;
2560                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2561                 esac
2562                 ;;
2563         *) dflt="$osname" ;;
2564 esac
2565 rp="Operating system name?"
2566 . ./myread
2567 case "$ans" in
2568 none)  osname='' ;;
2569 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2570 esac
2571 echo " "
2572 case "$osvers" in
2573         ''|' ')
2574                 case "$hintfile" in
2575                 ''|' '|none) dflt=none ;;
2576                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2577                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2578                         case "$dflt" in
2579                         ''|' ') dflt=none ;;
2580                         esac
2581                         ;;
2582                 esac
2583                 ;;
2584         *) dflt="$osvers" ;;
2585 esac
2586 rp="Operating system version?"
2587 . ./myread
2588 case "$ans" in
2589 none)  osvers='' ;;
2590 *) osvers="$ans" ;;
2591 esac
2592
2593
2594 . ./posthint.sh
2595
2596 : who configured the system
2597 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2598 cf_by=`(logname) 2>/dev/null`
2599 case "$cf_by" in
2600 "")
2601         cf_by=`(whoami) 2>/dev/null`
2602         case "$cf_by" in
2603         "") cf_by=unknown ;;
2604         esac ;;
2605 esac
2606
2607 : set up the script used to warn in case of inconsistency
2608 cat <<EOS >whoa
2609 $startsh
2610 EOS
2611 cat <<'EOSC' >>whoa
2612 dflt=y
2613 echo " "
2614 echo "*** WHOA THERE!!! ***" >&4
2615 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2616 rp="    Keep the $hint value?"
2617 . ./myread
2618 case "$ans" in
2619 y) td=$was; tu=$was;;
2620 esac
2621 EOSC
2622
2623 : function used to set $1 to $val
2624 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2625 case "$val$was" in
2626 $define$undef) . ./whoa; eval "$var=\$td";;
2627 $undef$define) . ./whoa; eval "$var=\$tu";;
2628 *) eval "$var=$val";;
2629 esac'
2630
2631 case "$usethreads" in
2632 $define|true|[yY]*)     dflt='y';;
2633 *) dflt='n';;
2634 esac
2635 cat <<EOM
2636
2637 Perl can be built to take advantage of threads on some systems.
2638 To do so, Configure can be run with -Dusethreads.
2639
2640 Note that threading is a highly experimental feature, and
2641 some known race conditions still remain.  If you choose to try
2642 it, be very sure to not actually deploy it for production
2643 purposes.  README.threads has more details, and is required
2644 reading if you enable threads.
2645
2646 If this doesn't make any sense to you, just accept the default '$dflt'.
2647 EOM
2648 rp='Build a threading Perl?'
2649 . ./myread
2650 case "$ans" in
2651 y|Y)    val="$define" ;;
2652 *)      val="$undef" ;;
2653 esac
2654 set usethreads
2655 eval $setvar
2656
2657 case "$usethreads" in
2658 $define)
2659         $cat <<EOM
2660
2661 As of 5.5.640, Perl has two different internal threading implementations,
2662 the 5.005 version (5005threads) and an interpreter-based version
2663 (ithreads) that has one interpreter per thread.  Both are very 
2664 experimental.  This arrangement exists to help developers work out
2665 which one is better.
2666
2667 If you're a casual user, you probably don't want interpreter-threads
2668 at this time.  There doesn't yet exist a way to create threads from
2669 within Perl in this model, i.e., "use Thread;" will NOT work.
2670 EOM
2671         : Default to ithreads unless overridden on command line or with
2672         : old config.sh
2673         dflt='y'
2674         case "$use5005threads" in
2675                 $define|true|[yY]*) dflt='n';;
2676         esac
2677         case "$useithreads" in
2678                 $undef|false|[nN]*) dflt='n';;
2679         esac
2680         rp='Use interpreter-based ithreads?'
2681         . ./myread
2682         case "$ans" in
2683         y|Y)    val="$define" ;;
2684         *)      val="$undef" ;;
2685         esac
2686         set useithreads
2687         eval $setvar
2688         : Now set use5005threads to the opposite value.
2689         case "$useithreads" in
2690         $define) val="$undef" ;;
2691         *) val="$define" ;;
2692         esac
2693         set use5005threads
2694         eval $setvar
2695         ;;
2696 *)
2697         useithreads="$undef"
2698         use5005threads="$undef"
2699         ;;
2700 esac
2701
2702 case "$d_oldpthreads" in
2703 '')     : Configure tests would be welcome here.  For now, assume undef.
2704         val="$undef" ;;
2705 *)      val="$d_oldpthreads" ;;
2706 esac
2707 set d_oldpthreads
2708 eval $setvar
2709
2710
2711 case "$usethreads" in
2712 "$define"|true|[yY]*)
2713 : Look for a hint-file generated 'call-back-unit'.  If the
2714 : user has specified that a threading perl is to be built,
2715 : we may need to set or change some other defaults.
2716         if $test -f usethreads.cbu; then
2717                 echo "Your platform has some specific hints for threaded builds, using them..."
2718                 . ./usethreads.cbu
2719         else
2720                 $cat <<EOM
2721 (Your platform doesn't have any specific hints for threaded builds.
2722  Assuming POSIX threads, then.)
2723 EOM
2724         fi
2725         ;;
2726 esac
2727
2728 cat <<EOM
2729
2730 Perl can be built so that multiple Perl interpreters can coexist
2731 within the same Perl executable.
2732 EOM
2733
2734 case "$useithreads" in
2735 $define)
2736         cat <<EOM
2737 This multiple interpreter support is required for interpreter-based threads.
2738 EOM
2739         val="$define"
2740         ;;
2741 *)      case "$usemultiplicity" in
2742         $define|true|[yY]*)     dflt='y';;
2743         *) dflt='n';;
2744         esac
2745         echo " "
2746         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
2747         rp='Build Perl for multiplicity?'
2748         . ./myread
2749         case "$ans" in
2750         y|Y)    val="$define" ;;
2751         *)      val="$undef" ;;
2752         esac
2753         ;;
2754 esac
2755 set usemultiplicity
2756 eval $setvar
2757
2758 : determine where manual pages are on this system
2759 echo " "
2760 case "$sysman" in
2761 '') 
2762         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
2763         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
2764         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
2765         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
2766         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
2767         sysman=`./loc . /usr/man/man1 $syspath`
2768         ;;
2769 esac
2770 if $test -d "$sysman"; then
2771         echo "System manual is in $sysman." >&4
2772 else
2773         echo "Could not find manual pages in source form." >&4
2774 fi
2775
2776 : see what memory models we can support
2777 case "$models" in
2778 '')
2779         $cat >pdp11.c <<'EOP'
2780 int main() {
2781 #ifdef pdp11
2782         exit(0);
2783 #else
2784         exit(1);
2785 #endif
2786 }
2787 EOP
2788         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
2789         if $test -f pdp11 && ./pdp11 2>/dev/null; then
2790                 dflt='unsplit split'
2791         else
2792                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
2793                 case "$tans" in
2794                 X) dflt='none';;
2795                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
2796                                 dflt='small'
2797                         else
2798                                 dflt=''
2799                         fi
2800                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
2801                                 dflt="$dflt medium"
2802                         fi
2803                         if $test -d /lib/large || $test -d /usr/lib/large; then
2804                                 dflt="$dflt large"
2805                         fi
2806                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
2807                                 dflt="$dflt huge"
2808                         fi
2809                 esac
2810         fi;;
2811 *) dflt="$models";;
2812 esac
2813 $cat <<EOM
2814  
2815 Some systems have different model sizes.  On most systems they are called
2816 small, medium, large, and huge.  On the PDP11 they are called unsplit and
2817 split.  If your system doesn't support different memory models, say "none".
2818 If you wish to force everything to one memory model, say "none" here and
2819 put the appropriate flags later when it asks you for other cc and ld flags.
2820 Venix systems may wish to put "none" and let the compiler figure things out.
2821 (In the following question multiple model names should be space separated.)
2822
2823 The default for most systems is "none".
2824
2825 EOM
2826 rp="Which memory models are supported?"
2827 . ./myread
2828 models="$ans"
2829
2830 case "$models" in
2831 none)
2832         small=''
2833         medium=''
2834         large=''
2835         huge=''
2836         unsplit=''
2837         split=''
2838         ;;
2839 *split)
2840         case "$split" in
2841         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
2842                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
2843                         dflt='-i'
2844                 else
2845                         dflt='none'
2846                 fi;;
2847         *) dflt="$split";;
2848         esac
2849         rp="What flag indicates separate I and D space?"
2850         . ./myread
2851         tans="$ans"
2852         case "$tans" in
2853         none) tans='';;
2854         esac
2855         split="$tans"
2856         unsplit='';;
2857 *large*|*small*|*medium*|*huge*)
2858         case "$models" in
2859         *large*)
2860                 case "$large" in
2861                 '') dflt='-Ml';;
2862                 *) dflt="$large";;
2863                 esac
2864         rp="What flag indicates large model?"
2865         . ./myread
2866         tans="$ans"
2867         case "$tans" in
2868         none) tans='';
2869         esac
2870         large="$tans";;
2871         *) large='';;
2872         esac
2873         case "$models" in
2874         *huge*) case "$huge" in
2875                 '') dflt='-Mh';;
2876                 *) dflt="$huge";;
2877                 esac
2878                 rp="What flag indicates huge model?"
2879                 . ./myread
2880                 tans="$ans"
2881                 case "$tans" in
2882                 none) tans='';
2883                 esac
2884                 huge="$tans";;
2885         *) huge="$large";;
2886         esac
2887         case "$models" in
2888         *medium*) case "$medium" in
2889                 '') dflt='-Mm';;
2890                 *) dflt="$medium";;
2891                 esac
2892                 rp="What flag indicates medium model?"
2893                 . ./myread
2894                 tans="$ans"
2895                 case "$tans" in
2896                 none) tans='';
2897                 esac
2898                 medium="$tans";;
2899         *) medium="$large";;
2900         esac
2901         case "$models" in
2902         *small*) case "$small" in
2903                 '') dflt='none';;
2904                 *) dflt="$small";;
2905                 esac
2906                 rp="What flag indicates small model?"
2907                 . ./myread
2908                 tans="$ans"
2909                 case "$tans" in
2910                 none) tans='';
2911                 esac
2912                 small="$tans";;
2913         *) small='';;
2914         esac
2915         ;;
2916 *)
2917         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
2918         ;;
2919 esac
2920 $rm -f pdp11.* pdp11
2921
2922 : make some quick guesses about what we are up against
2923 echo " "
2924 $echo $n "Hmm...  $c"
2925 echo exit 1 >bsd
2926 echo exit 1 >usg
2927 echo exit 1 >v7
2928 echo exit 1 >osf1
2929 echo exit 1 >eunice
2930 echo exit 1 >xenix
2931 echo exit 1 >venix
2932 echo exit 1 >os2
2933 d_bsd="$undef"
2934 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
2935 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
2936 then
2937         echo "Looks kind of like an OSF/1 system, but we'll see..."
2938         echo exit 0 >osf1
2939 elif test `echo abc | tr a-z A-Z` = Abc ; then
2940         xxx=`./loc addbib blurfl $pth`
2941         if $test -f $xxx; then
2942         echo "Looks kind of like a USG system with BSD features, but we'll see..."
2943                 echo exit 0 >bsd
2944                 echo exit 0 >usg
2945         else
2946                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
2947                         echo "Looks kind of like an extended USG system, but we'll see..."
2948                 else
2949                         echo "Looks kind of like a USG system, but we'll see..."
2950                 fi
2951                 echo exit 0 >usg
2952         fi
2953 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
2954         echo "Looks kind of like a BSD system, but we'll see..."
2955         d_bsd="$define"
2956         echo exit 0 >bsd
2957 else
2958         echo "Looks kind of like a Version 7 system, but we'll see..."
2959         echo exit 0 >v7
2960 fi
2961 case "$eunicefix" in
2962 *unixtovms*)
2963         $cat <<'EOI'
2964 There is, however, a strange, musty smell in the air that reminds me of
2965 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
2966 EOI
2967         echo exit 0 >eunice
2968         d_eunice="$define"
2969 : it so happens the Eunice I know will not run shell scripts in Unix format
2970         ;;
2971 *)
2972         echo " "
2973         echo "Congratulations.  You aren't running Eunice."
2974         d_eunice="$undef"
2975         ;;
2976 esac
2977 : Detect OS2.  The p_ variable is set above in the Head.U unit.
2978 case "$p_" in
2979 :) ;;
2980 *)
2981         $cat <<'EOI'
2982 I have the feeling something is not exactly right, however...don't tell me...
2983 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
2984 EOI
2985         echo exit 0 >os2
2986         ;;
2987 esac
2988 if test -f /xenix; then
2989         echo "Actually, this looks more like a XENIX system..."
2990         echo exit 0 >xenix
2991         d_xenix="$define"
2992 else
2993         echo " "
2994         echo "It's not Xenix..."
2995         d_xenix="$undef"
2996 fi
2997 chmod +x xenix
2998 $eunicefix xenix
2999 if test -f /venix; then
3000         echo "Actually, this looks more like a VENIX system..."
3001         echo exit 0 >venix
3002 else
3003         echo " "
3004         if ./xenix; then
3005                 : null
3006         else
3007                 echo "Nor is it Venix..."
3008         fi
3009 fi
3010 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3011 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3012 $rm -f foo
3013
3014 : see if we need a special compiler
3015 echo " "
3016 if ./usg; then
3017         case "$cc" in
3018         '') case "$Mcc" in
3019                 /*) dflt='Mcc';;
3020                 *) case "$large" in
3021                         -M*) dflt='cc';;
3022                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3023                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3024                                                 dflt='cc'
3025                                         else
3026                                                 dflt='cc -M'
3027                                         fi
3028                                 else
3029                                         dflt='cc'
3030                                 fi;;
3031                         esac;;
3032                 esac;;
3033         *)  dflt="$cc";;
3034         esac
3035         case "$dflt" in
3036         *M*)    $cat <<'EOM'
3037 On some older systems the default C compiler will not resolve multiple global
3038 references that happen to have the same name.  On some such systems the "Mcc"
3039 command may be used to force these to be resolved.  On other systems a "cc -M"
3040 command is required.  (Note that the -M flag on other systems indicates a
3041 memory model to use!) If you have the Gnu C compiler, you might wish to use
3042 that instead.
3043
3044 EOM
3045         ;;
3046         esac
3047         rp="Use which C compiler?"
3048         . ./myread
3049         cc="$ans"
3050 else
3051         case "$cc" in
3052         '') dflt=cc;;
3053         *) dflt="$cc";;
3054         esac
3055         rp="Use which C compiler?"
3056         . ./myread
3057         cc="$ans"
3058 fi
3059 : Look for a hint-file generated 'call-back-unit'.  Now that the
3060 : user has specified the compiler, we may need to set or change some
3061 : other defaults.
3062 if $test -f cc.cbu; then
3063     . ./cc.cbu
3064 fi
3065 echo " "
3066 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3067 $cat >gccvers.c <<EOM
3068 #include <stdio.h>
3069 int main() {
3070 #ifdef __GNUC__
3071 #ifdef __VERSION__
3072         printf("%s\n", __VERSION__);
3073 #else
3074         printf("%s\n", "1");
3075 #endif
3076 #endif
3077         exit(0);
3078 }
3079 EOM
3080 if $cc $ldflags -o gccvers gccvers.c; then
3081         gccversion=`./gccvers`
3082         case "$gccversion" in
3083         '') echo "You are not using GNU cc." ;;
3084         *)  echo "You are using GNU cc $gccversion."
3085             ;;
3086         esac
3087 else
3088         echo " "
3089         echo "*** WHOA THERE!!! ***" >&4
3090         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3091         case "$knowitall" in
3092         '')
3093         echo "    You'd better start hunting for one and let me know about it." >&4
3094                 exit 1
3095                 ;;
3096         esac
3097 fi
3098 $rm -f gccvers*
3099 case "$gccversion" in
3100 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3101 esac
3102
3103 : decide how portable to be.  Allow command line overrides.
3104 case "$d_portable" in
3105 "$undef") ;;
3106 *)      d_portable="$define" ;;
3107 esac
3108
3109 : set up shell script to do ~ expansion
3110 cat >filexp <<EOSS
3111 $startsh
3112 : expand filename
3113 case "\$1" in
3114  ~/*|~)
3115         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3116         ;;
3117  ~*)
3118         if $test -f /bin/csh; then
3119                 /bin/csh -f -c "glob \$1"
3120                 failed=\$?
3121                 echo ""
3122                 exit \$failed
3123         else
3124                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3125                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3126                 if $test ! -d "\$dir"; then
3127                         me=\`basename \$0\`
3128                         echo "\$me: can't locate home directory for: \$name" >&2
3129                         exit 1
3130                 fi
3131                 case "\$1" in
3132                 */*)
3133                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3134                         ;;
3135                 *)
3136                         echo \$dir
3137                         ;;
3138                 esac
3139         fi
3140         ;;
3141 *)
3142         echo \$1
3143         ;;
3144 esac
3145 EOSS
3146 chmod +x filexp
3147 $eunicefix filexp
3148
3149 : now set up to get a file name
3150 cat <<EOS >getfile
3151 $startsh
3152 EOS
3153 cat <<'EOSC' >>getfile
3154 tilde=''
3155 fullpath=''
3156 already=''
3157 skip=''
3158 none_ok=''
3159 exp_file=''
3160 nopath_ok=''
3161 orig_rp="$rp"
3162 orig_dflt="$dflt"
3163 case "$gfpth" in
3164 '') gfpth='.' ;;
3165 esac
3166
3167 case "$fn" in
3168 *\(*)
3169         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
3170         fn=`echo $fn | sed 's/(.*)//'`
3171         ;;
3172 esac
3173
3174 case "$fn" in
3175 *:*)
3176         loc_file=`expr $fn : '.*:\(.*\)'`
3177         fn=`expr $fn : '\(.*\):.*'`
3178         ;;
3179 esac
3180
3181 case "$fn" in
3182 *~*) tilde=true;;
3183 esac
3184 case "$fn" in
3185 */*) fullpath=true;;
3186 esac
3187 case "$fn" in
3188 *+*) skip=true;;
3189 esac
3190 case "$fn" in
3191 *n*) none_ok=true;;
3192 esac
3193 case "$fn" in
3194 *e*) exp_file=true;;
3195 esac
3196 case "$fn" in
3197 *p*) nopath_ok=true;;
3198 esac
3199
3200 case "$fn" in
3201 *f*) type='File';;
3202 *d*) type='Directory';;
3203 *l*) type='Locate';;
3204 esac
3205
3206 what="$type"
3207 case "$what" in
3208 Locate) what='File';;
3209 esac
3210
3211 case "$exp_file" in
3212 '')
3213         case "$d_portable" in
3214         "$define") ;;
3215         *) exp_file=true;;
3216         esac
3217         ;;
3218 esac
3219
3220 cd ..
3221 while test "$type"; do
3222         redo=''
3223         rp="$orig_rp"
3224         dflt="$orig_dflt"
3225         case "$tilde" in
3226         true) rp="$rp (~name ok)";;
3227         esac
3228         . UU/myread
3229         if test -f UU/getfile.ok && \
3230                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3231         then
3232                 value="$ans"
3233                 ansexp="$ans"
3234                 break
3235         fi
3236         case "$ans" in
3237         none)
3238                 value=''
3239                 ansexp=''
3240                 case "$none_ok" in
3241                 true) type='';;
3242                 esac
3243                 ;;
3244         *)
3245                 case "$tilde" in
3246                 '') value="$ans"
3247                         ansexp="$ans";;
3248                 *)
3249                         value=`UU/filexp $ans`
3250                         case $? in
3251                         0)
3252                                 if test "$ans" != "$value"; then
3253                                         echo "(That expands to $value on this system.)"
3254                                 fi
3255                                 ;;
3256                         *) value="$ans";;
3257                         esac
3258                         ansexp="$value"
3259                         case "$exp_file" in
3260                         '') value="$ans";;
3261                         esac
3262                         ;;
3263                 esac
3264                 case "$fullpath" in
3265                 true)
3266                         case "$ansexp" in
3267                         /*) value="$ansexp" ;;
3268                         *)
3269                                 redo=true
3270                                 case "$already" in
3271                                 true)
3272                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3273                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3274                                         ;;
3275                                 *)
3276                                 echo "Please give a full path name, starting with slash." >&4
3277                                         case "$tilde" in
3278                                         true)
3279                                 echo "Note that using ~name is ok provided it expands well." >&4
3280                                                 already=true
3281                                                 ;;
3282                                         esac
3283                                 esac
3284                                 ;;
3285                         esac
3286                         ;;
3287                 esac
3288                 case "$redo" in
3289                 '')
3290                         case "$type" in
3291                         File)
3292                                 for fp in $gfpth; do
3293                                         if test "X$fp" = X.; then
3294                                             pf="$ansexp"
3295                                         else    
3296                                             pf="$fp/$ansexp"
3297                                         fi
3298                                         if test -f "$pf"; then
3299                                                 type=''
3300                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3301                                         then
3302                                                 echo "($value is not a plain file, but that's ok.)"
3303                                                 type=''
3304                                         fi
3305                                         if test X"$type" = X; then
3306                                             value="$pf"
3307                                             break
3308                                         fi
3309                                 done
3310                                 ;;
3311                         Directory)
3312                                 for fp in $gfpth; do
3313                                         if test "X$fp" = X.; then
3314                                             pf="$ansexp"
3315                                         else    
3316                                             pf="$fp/$ansexp"
3317                                         fi
3318                                         if test -d "$pf"; then
3319                                                 type=''
3320                                                 value="$pf"
3321                                                 break
3322                                         fi
3323                                 done
3324                                 ;;
3325                         Locate)
3326                                 if test -d "$ansexp"; then
3327                                         echo "(Looking for $loc_file in directory $value.)"
3328                                         value="$value/$loc_file"
3329                                         ansexp="$ansexp/$loc_file"
3330                                 fi
3331                                 if test -f "$ansexp"; then
3332                                         type=''
3333                                 fi
3334                                 case "$nopath_ok" in
3335                                 true)   case "$value" in
3336                                         */*) ;;
3337                                         *)      echo "Assuming $value will be in people's path."
3338                                                 type=''
3339                                                 ;;
3340                                         esac
3341                                         ;;
3342                                 esac
3343                                 ;;
3344                         esac
3345
3346                         case "$skip" in
3347                         true) type='';
3348                         esac
3349
3350                         case "$type" in
3351                         '') ;;
3352                         *)
3353                                 if test "$fastread" = yes; then
3354                                         dflt=y
3355                                 else
3356                                         dflt=n
3357                                 fi
3358                                 rp="$what $value doesn't exist.  Use that name anyway?"
3359                                 . UU/myread
3360                                 dflt=''
3361                                 case "$ans" in
3362                                 y*) type='';;
3363                                 *) echo " ";;
3364                                 esac
3365                                 ;;
3366                         esac
3367                         ;;
3368                 esac
3369                 ;;
3370         esac
3371 done
3372 cd UU
3373 ans="$value"
3374 rp="$orig_rp"
3375 dflt="$orig_dflt"
3376 rm -f getfile.ok
3377 test "X$gfpthkeep" != Xy && gfpth=""
3378 EOSC
3379
3380 : What should the include directory be ?
3381 echo " "
3382 $echo $n "Hmm...  $c"
3383 dflt='/usr/include'
3384 incpath=''
3385 mips_type=''
3386 if $test -f /bin/mips && /bin/mips; then
3387         echo "Looks like a MIPS system..."
3388         $cat >usr.c <<'EOCP'
3389 #ifdef SYSTYPE_BSD43
3390 /bsd43
3391 #endif
3392 EOCP
3393         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3394                 dflt='/bsd43/usr/include'
3395                 incpath='/bsd43'
3396                 mips_type='BSD 4.3'
3397         else
3398                 mips_type='System V'
3399         fi
3400         $rm -f usr.c usr.out
3401         echo "and you're compiling with the $mips_type compiler and libraries."
3402         xxx_prompt=y
3403         echo "exit 0" >mips
3404 else
3405         echo "Doesn't look like a MIPS system."
3406         xxx_prompt=n
3407         echo "exit 1" >mips
3408 fi
3409 chmod +x mips
3410 $eunicefix mips
3411 case "$usrinc" in
3412 '') ;;
3413 *) dflt="$usrinc";;
3414 esac
3415 case "$xxx_prompt" in
3416 y)      fn=d/
3417         echo " "
3418         rp='Where are the include files you want to use?'
3419         . ./getfile
3420         usrinc="$ans"
3421         ;;
3422 *)      usrinc="$dflt"
3423         ;;
3424 esac
3425
3426 : see how we invoke the C preprocessor
3427 echo " "
3428 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3429 cat <<'EOT' >testcpp.c
3430 #define ABC abc
3431 #define XYZ xyz
3432 ABC.XYZ
3433 EOT
3434 cd ..
3435 if test ! -f cppstdin; then
3436         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3437                 # AIX cc -E doesn't show the absolute headerfile
3438                 # locations but we'll cheat by using the -M flag.
3439                 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
3440         else
3441                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3442         fi
3443 else
3444         echo "Keeping your $hint cppstdin wrapper."
3445 fi
3446 chmod 755 cppstdin
3447 wrapper=`pwd`/cppstdin
3448 ok='false'
3449 cd UU
3450
3451 if $test "X$cppstdin" != "X" && \
3452         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3453         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3454 then
3455         echo "You used to use $cppstdin $cppminus so we'll use that again."
3456         case "$cpprun" in
3457         '') echo "But let's see if we can live without a wrapper..." ;;
3458         *)
3459                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3460                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3461                 then
3462                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3463                         ok='true'
3464                 else
3465                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3466                 fi
3467                 ;;
3468         esac
3469 else
3470         case "$cppstdin" in
3471         '') ;;
3472         *)
3473                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3474                 ;;
3475         esac
3476 fi
3477
3478 if $ok; then
3479         : nothing
3480 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3481         $cc -E <testcpp.c >testcpp.out 2>&1; \
3482         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3483         echo "Yup, it does."
3484         x_cpp="$cc -E"
3485         x_minus='';
3486 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3487         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3488         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3489         echo "Yup, it does."
3490         x_cpp="$cc -E"
3491         x_minus='-';
3492 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3493         $cc -P <testcpp.c >testcpp.out 2>&1; \
3494         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3495         echo "Yipee, that works!"
3496         x_cpp="$cc -P"
3497         x_minus='';
3498 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3499         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3500         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3501         echo "At long last!"
3502         x_cpp="$cc -P"
3503         x_minus='-';
3504 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3505         $cpp <testcpp.c >testcpp.out 2>&1; \
3506         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3507         echo "It works!"
3508         x_cpp="$cpp"
3509         x_minus='';
3510 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3511         $cpp - <testcpp.c >testcpp.out 2>&1; \
3512         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3513         echo "Hooray, it works!  I was beginning to wonder."
3514         x_cpp="$cpp"
3515         x_minus='-';
3516 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3517         $wrapper <testcpp.c >testcpp.out 2>&1; \
3518         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3519         x_cpp="$wrapper"
3520         x_minus=''
3521         echo "Eureka!"
3522 else
3523         dflt=''
3524         rp="No dice.  I can't find a C preprocessor.  Name one:"
3525         . ./myread
3526         x_cpp="$ans"
3527         x_minus=''
3528         $x_cpp <testcpp.c >testcpp.out 2>&1
3529         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3530                 echo "OK, that will do." >&4
3531         else
3532 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3533                 exit 1
3534         fi
3535 fi
3536
3537 case "$ok" in
3538 false)
3539         cppstdin="$x_cpp"
3540         cppminus="$x_minus"
3541         cpprun="$x_cpp"
3542         cpplast="$x_minus"
3543         set X $x_cpp
3544         shift
3545         case "$1" in
3546         "$cpp")
3547                 echo "Perhaps can we force $cc -E using a wrapper..."
3548                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3549                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3550                 then
3551                         echo "Yup, we can."
3552                         cppstdin="$wrapper"
3553                         cppminus='';
3554                 else
3555                         echo "Nope, we'll have to live without it..."
3556                 fi
3557                 ;;
3558         esac
3559         case "$cpprun" in
3560         "$wrapper")
3561                 cpprun=''
3562                 cpplast=''
3563                 ;;
3564         esac
3565         ;;
3566 esac
3567
3568 case "$cppstdin" in
3569 "$wrapper"|'cppstdin') ;;
3570 *) $rm -f $wrapper;;
3571 esac
3572 $rm -f testcpp.c testcpp.out
3573
3574 : Set private lib path
3575 case "$plibpth" in
3576 '') if ./mips; then
3577                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3578         fi;;
3579 esac
3580 case "$libpth" in
3581 ' ') dlist='';;
3582 '') dlist="$loclibpth $plibpth $glibpth";;
3583 *) dlist="$libpth";;
3584 esac
3585
3586 : Now check and see which directories actually exist, avoiding duplicates
3587 libpth=''
3588 for xxx in $dlist
3589 do
3590     if $test -d $xxx; then
3591                 case " $libpth " in
3592                 *" $xxx "*) ;;
3593                 *) libpth="$libpth $xxx";;
3594                 esac
3595     fi
3596 done
3597 $cat <<'EOM'
3598
3599 Some systems have incompatible or broken versions of libraries.  Among
3600 the directories listed in the question below, please remove any you
3601 know not to be holding relevant libraries, and add any that are needed.
3602 Say "none" for none.
3603
3604 EOM
3605 case "$libpth" in
3606 '') dflt='none';;
3607 *)
3608         set X $libpth
3609         shift
3610         dflt=${1+"$@"}
3611         ;;
3612 esac
3613 rp="Directories to use for library searches?"
3614 . ./myread
3615 case "$ans" in
3616 none) libpth=' ';;
3617 *) libpth="$ans";;
3618 esac
3619
3620 : compute shared library extension
3621 case "$so" in
3622 '')
3623         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3624                 dflt='sl'
3625         else
3626                 dflt='so'
3627         fi
3628         ;;
3629 *) dflt="$so";;
3630 esac
3631 $cat <<EOM
3632
3633 On some systems, shared libraries may be available.  Answer 'none' if
3634 you want to suppress searching of shared libraries for the remainder
3635 of this configuration.
3636
3637 EOM
3638 rp='What is the file extension used for shared libraries?'
3639 . ./myread
3640 so="$ans"
3641
3642 : Define several unixisms.
3643 : Hints files or command line option can be used to override them.
3644 : The convoluted testing is in case hints files set either the old
3645 : or the new name.
3646 case "$_exe" in
3647 '')     case "$exe_ext" in
3648     '') ;;
3649         *)      _exe="$exe_ext" ;;
3650         esac
3651         ;;
3652 esac
3653 case "$_a" in
3654 '')     case "$lib_ext" in
3655     '') _a='.a';;
3656         *)      _a="$lib_ext" ;;
3657         esac
3658         ;;
3659 esac
3660 case "$_o" in
3661 '') case "$obj_ext" in
3662         '')     _o='.o';;
3663         *)      _o="$obj_ext";;
3664         esac
3665         ;;
3666 esac
3667 case "$p_" in
3668 '') case "$path_sep" in
3669         '')     p_=':';;
3670         *)      p_="$path_sep";;
3671         esac
3672         ;;
3673 esac
3674 exe_ext=$_exe
3675 lib_ext=$_a
3676 obj_ext=$_o
3677 path_sep=$p_
3678
3679 : Which makefile gets called first.  This is used by make depend.
3680 case "$firstmakefile" in
3681 '') firstmakefile='makefile';;
3682 esac
3683
3684 case "$usesocks" in
3685 $define|true|[yY]*)     dflt='y';;
3686 *) dflt='n';;
3687 esac
3688 cat <<EOM
3689
3690 Perl can be built to use the SOCKS proxy protocol library.  To do so,
3691 Configure must be run with -Dusesocks.
3692
3693 If this doesn't make any sense to you, just accept the default '$dflt'.
3694 EOM
3695 rp='Build Perl for SOCKS?'
3696 . ./myread
3697 case "$ans" in
3698 y|Y)    val="$define" ;;     
3699 *)      val="$undef" ;;
3700 esac
3701 set usesocks
3702 eval $setvar
3703
3704 : Looking for optional libraries
3705 echo " "
3706 echo "Checking for optional libraries..." >&4
3707 case "$libs" in
3708 ' '|'') dflt='';;
3709 *) dflt="$libs";;
3710 esac
3711 case "$libswanted" in
3712 '') libswanted='c_s';;
3713 esac
3714 case "$usesocks" in
3715 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
3716 esac
3717 libsfound=''
3718 libsfiles=''
3719 libsdirs=''
3720 libspath=''
3721 for thisdir in $libpth $xlibpth; do
3722   test -d $thisdir && libspath="$libspath $thisdir"
3723 done
3724 for thislib in $libswanted; do
3725         for thisdir in $libspath; do
3726             xxx=''
3727             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3728                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
3729                 $test -f "$xxx" && eval $libscheck
3730                 $test -f "$xxx" && libstyle=shared
3731             fi
3732             if test ! -f "$xxx"; then
3733                 xxx=$thisdir/lib$thislib.$so
3734                 $test -f "$xxx" && eval $libscheck
3735                 $test -f "$xxx" && libstyle=shared
3736             fi  
3737             if test ! -f "$xxx"; then
3738                 xxx=$thisdir/lib$thislib$_a
3739                 $test -f "$xxx" && eval $libscheck
3740                 $test -f "$xxx" && libstyle=static
3741             fi
3742             if test ! -f "$xxx"; then
3743                 xxx=$thisdir/$thislib$_a
3744                 $test -f "$xxx" && eval $libscheck
3745                 $test -f "$xxx" && libstyle=static
3746             fi
3747             if test ! -f "$xxx"; then
3748                 xxx=$thisdir/lib${thislib}_s$_a
3749                 $test -f "$xxx" && eval $libscheck
3750                 $test -f "$xxx" && libstyle=static
3751                 $test -f "$xxx" && thislib=${thislib}_s
3752             fi
3753             if test ! -f "$xxx"; then
3754                 xxx=$thisdir/Slib$thislib$_a
3755                 $test -f "$xxx" && eval $libscheck
3756                 $test -f "$xxx" && libstyle=static
3757             fi
3758             if $test -f "$xxx"; then
3759                 case "$libstyle" in
3760                 shared) echo "Found -l$thislib (shared)." ;;
3761                 static) echo "Found -l$thislib." ;;
3762                 *)      echo "Found -l$thislib ($libstyle)." ;;
3763                 esac
3764                 case " $dflt " in
3765                 *"-l$thislib "*);;
3766                 *) dflt="$dflt -l$thislib"
3767                    libsfound="$libsfound $xxx"
3768                    yyy=`basename $xxx`
3769                    libsfiles="$libsfiles $yyy"
3770                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
3771                    case " $libsdirs " in
3772                    *" $yyy "*) ;;
3773                    *) libsdirs="$libsdirs $yyy" ;;
3774                    esac
3775                    ;;
3776                 esac
3777                 break
3778             fi  
3779         done
3780         if $test ! -f "$xxx"; then
3781             echo "No -l$thislib."
3782         fi
3783 done
3784 set X $dflt
3785 shift
3786 dflt="$*"
3787 case "$libs" in
3788 '') dflt="$dflt";;
3789 *) dflt="$libs";;
3790 esac
3791 case "$dflt" in
3792 ' '|'') dflt='none';;
3793 esac
3794
3795 $cat <<EOM
3796
3797 In order to compile $package on your machine, a number of libraries
3798 are usually needed.  Include any other special libraries here as well.
3799 Say "none" for none.  The default list is almost always right.
3800 EOM
3801
3802 echo " "
3803 rp="What libraries to use?"
3804 . ./myread
3805 case "$ans" in
3806 none) libs=' ';;
3807 *) libs="$ans";;
3808 esac
3809
3810 : determine optimization, if desired, or use for debug flag also
3811 case "$optimize" in
3812 ' '|$undef) dflt='none';;
3813 '') dflt='-O';;
3814 *) dflt="$optimize";;
3815 esac
3816 $cat <<EOH
3817
3818 By default, $package compiles with the -O flag to use the optimizer.
3819 Alternately, you might want to use the symbolic debugger, which uses
3820 the -g flag (on traditional Unix systems).  Either flag can be
3821 specified here.  To use neither flag, specify the word "none".
3822
3823 EOH
3824 rp="What optimizer/debugger flag should be used?"
3825 . ./myread
3826 optimize="$ans"
3827 case "$optimize" in
3828 'none') optimize=" ";;
3829 esac
3830
3831 dflt=''
3832 : We will not override a previous value, but we might want to
3833 : augment a hint file
3834 case "$hint" in
3835 default|recommended)
3836         case "$gccversion" in
3837         1*) dflt='-fpcc-struct-return' ;;
3838         esac
3839         case "$optimize" in
3840         *-g*) dflt="$dflt -DDEBUGGING";;
3841         esac
3842         case "$gccversion" in
3843         2*) if test -d /etc/conf/kconfig.d &&
3844                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
3845                 then
3846                         dflt="$dflt -posix"
3847                 fi
3848                 ;;
3849         esac
3850         case "$gccversion" in
3851         1*) ;;
3852         2.[0-8]*) ;;
3853         ?*)     echo " "
3854                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
3855                 echo 'int main(void) { return 0; }' > gcctest.c
3856                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
3857                         echo "Yes, it does." 2>&1
3858                         case "$ccflags" in
3859                         *strict-aliasing*) 
3860                                 echo "Leaving current flags $ccflags alone." 2>&1
3861                                 ;;
3862                         *) dflt="$dflt -fno-strict-aliasing" ;;
3863                         esac
3864                 else
3865                         echo "Nope, it doesn't, but that's ok." 2>&1
3866                 fi
3867                 ;;
3868         esac
3869         ;;
3870 esac
3871
3872 case "$mips_type" in
3873 *BSD*|'') inclwanted="$locincpth $usrinc";;
3874 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
3875 esac
3876 for thisincl in $inclwanted; do
3877         if $test -d $thisincl; then
3878                 if $test x$thisincl != x$usrinc; then
3879                         case "$dflt" in
3880                         *$thisincl*);;
3881                         *) dflt="$dflt -I$thisincl";;
3882                         esac
3883                 fi
3884         fi
3885 done
3886
3887 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
3888         xxx=true;
3889 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
3890         xxx=true;
3891 else
3892         xxx=false;
3893 fi;
3894 if $xxx; then
3895         case "$dflt" in
3896         *$2*);;
3897         *) dflt="$dflt -D$2";;
3898         esac;
3899 fi'
3900
3901 set signal.h LANGUAGE_C; eval $inctest
3902
3903 case "$usesocks" in
3904 $define)
3905         ccflags="$ccflags -DSOCKS"
3906         ;;
3907 esac
3908
3909 case "$hint" in
3910 default|recommended) dflt="$ccflags $dflt" ;;
3911 *) dflt="$ccflags";;
3912 esac
3913
3914 case "$dflt" in
3915 ''|' ') dflt=none;;
3916 esac
3917 $cat <<EOH
3918
3919 Your C compiler may want other flags.  For this question you should include
3920 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
3921 but you should NOT include libraries or ld flags like -lwhatever.  If you
3922 want $package to honor its debug switch, you should include -DDEBUGGING here.
3923 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
3924
3925 To use no flags, specify the word "none".
3926
3927 EOH
3928 set X $dflt
3929 shift
3930 dflt=${1+"$@"}
3931 rp="Any additional cc flags?"
3932 . ./myread
3933 case "$ans" in
3934 none) ccflags='';;
3935 *) ccflags="$ans";;
3936 esac
3937
3938 : the following weeds options from ccflags that are of no interest to cpp
3939 cppflags="$ccflags"
3940 case "$gccversion" in
3941 1*) cppflags="$cppflags -D__GNUC__"
3942 esac
3943 case "$mips_type" in
3944 '');;
3945 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
3946 esac
3947 case "$cppflags" in
3948 '');;
3949 *)
3950         echo " "
3951         echo "Let me guess what the preprocessor flags are..." >&4
3952         set X $cppflags
3953         shift
3954         cppflags=''
3955         $cat >cpp.c <<'EOM'
3956 #define BLURFL foo
3957
3958 BLURFL xx LFRULB
3959 EOM
3960         previous=''
3961         for flag in $*
3962         do
3963                 case "$flag" in
3964                 -*) ftry="$flag";;
3965                 *) ftry="$previous $flag";;
3966                 esac
3967                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
3968                         >cpp1.out 2>/dev/null && \
3969                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
3970                         >cpp2.out 2>/dev/null && \
3971                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
3972                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
3973                 then
3974                         cppflags="$cppflags $ftry"
3975                         previous=''
3976                 else
3977                         previous="$flag"
3978                 fi
3979         done
3980         set X $cppflags
3981         shift
3982         cppflags=${1+"$@"}
3983         case "$cppflags" in
3984         *-*)  echo "They appear to be: $cppflags";;
3985         esac
3986         $rm -f cpp.c cpp?.out
3987         ;;
3988 esac
3989
3990 : flags used in final linking phase
3991 case "$ldflags" in
3992 '') if ./venix; then
3993                 dflt='-i -z'
3994         else
3995                 dflt=''
3996         fi
3997         case "$ccflags" in
3998         *-posix*) dflt="$dflt -posix" ;;
3999         esac
4000         ;;
4001 *) dflt="$ldflags";;
4002 esac
4003
4004 : Try to guess additional flags to pick up local libraries.
4005 for thislibdir in $libpth; do
4006         case " $loclibpth " in
4007         *" $thislibdir "*)
4008                 case "$dflt " in 
4009                 *"-L$thislibdir "*) ;;
4010                 *)  dflt="$dflt -L$thislibdir" ;;
4011                 esac
4012                 ;;
4013         esac
4014 done
4015
4016 case "$dflt" in
4017 '') dflt='none' ;;
4018 esac
4019
4020 $cat <<EOH
4021
4022 Your C linker may need flags.  For this question you should
4023 include -L/whatever and any other flags used by the C linker, but you
4024 should NOT include libraries like -lwhatever.
4025
4026 Make sure you include the appropriate -L/path flags if your C linker
4027 does not normally search all of the directories you specified above,
4028 namely
4029         $libpth
4030 To use no flags, specify the word "none".
4031
4032 EOH
4033
4034 rp="Any additional ld flags (NOT including libraries)?"
4035 . ./myread
4036 case "$ans" in
4037 none) ldflags='';;
4038 *) ldflags="$ans";;
4039 esac
4040 rmlist="$rmlist pdp11"
4041
4042 : coherency check
4043 echo " "
4044 echo "Checking your choice of C compiler and flags for coherency..." >&4
4045 $cat > try.c <<'EOF'
4046 #include <stdio.h>
4047 int main() { printf("Ok\n"); exit(0); }
4048 EOF
4049 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4050 shift
4051 $cat >try.msg <<'EOM'
4052 I've tried to compile and run the following simple program:
4053
4054 EOM
4055 $cat try.c >> try.msg
4056
4057 $cat >> try.msg <<EOM
4058
4059 I used the command:
4060
4061         $*
4062         ./try
4063
4064 and I got the following output:
4065
4066 EOM
4067 dflt=y
4068 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4069         if sh -c './try' >>try.msg 2>&1; then
4070                 xxx=`./try`
4071                 case "$xxx" in
4072                 "Ok") dflt=n ;;
4073                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4074                         case " $libs " in
4075                         *" -lsfio "*)
4076                                 cat >> try.msg <<'EOQS'
4077 If $libs contains -lsfio, and sfio is mis-configured, then it
4078 sometimes (apparently) runs and exits with a 0 status, but with no
4079 output!  It may have to do with sfio's use of _exit vs. exit.
4080
4081 EOQS
4082                                 rp="You have a big problem.  Shall I abort Configure"
4083                                 dflt=y
4084                                 ;;
4085                         esac
4086                         ;;
4087                 esac
4088         else
4089                 echo "The program compiled OK, but exited with status $?." >>try.msg
4090                 rp="You have a problem.  Shall I abort Configure"
4091                 dflt=y
4092         fi
4093 else
4094         echo "I can't compile the test program." >>try.msg
4095         rp="You have a BIG problem.  Shall I abort Configure"
4096         dflt=y
4097 fi
4098 case "$dflt" in
4099 y)
4100         $cat try.msg >&4
4101         case "$knowitall" in
4102         '')
4103                 echo "(The supplied flags or libraries might be incorrect.)"
4104                 ;;
4105         *) dflt=n;;
4106         esac
4107         echo " "
4108         . ./myread
4109         case "$ans" in
4110         n*|N*) ;;
4111         *)      echo "Ok.  Stopping Configure." >&4
4112                 exit 1
4113                 ;;
4114         esac
4115         ;;
4116 n) echo "OK, that should do.";;
4117 esac
4118 $rm -f try try.* core
4119
4120 : define an is-a-typedef? function
4121 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4122 case "$inclist" in
4123 "") inclist="sys/types.h";;
4124 esac;
4125 eval "varval=\$$var";
4126 case "$varval" in
4127 "")
4128         $rm -f temp.c;
4129         for inc in $inclist; do
4130                 echo "#include <$inc>" >>temp.c;
4131         done;
4132         echo "#ifdef $type" >> temp.c;
4133         echo "printf(\"We have $type\");" >> temp.c;
4134         echo "#endif" >> temp.c;
4135         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4136         if $contains $type temp.E >/dev/null 2>&1; then
4137                 eval "$var=\$type";
4138         else
4139                 eval "$var=\$def";
4140         fi;
4141         $rm -f temp.?;;
4142 *) eval "$var=\$varval";;
4143 esac'
4144
4145 : define an is-a-typedef? function that prompts if the type is not available.
4146 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4147 case "$inclist" in
4148 "") inclist="sys/types.h";;
4149 esac;
4150 eval "varval=\$$var";
4151 case "$varval" in
4152 "")
4153         $rm -f temp.c;
4154         for inc in $inclist; do
4155                 echo "#include <$inc>" >>temp.c;
4156         done;
4157         echo "#ifdef $type" >> temp.c;
4158         echo "printf(\"We have $type\");" >> temp.c;
4159         echo "#endif" >> temp.c;
4160         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4161         echo " " ;
4162         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
4163         if $contains $type temp.E >/dev/null 2>&1; then
4164                 echo "$type found." >&4;
4165                 eval "$var=\$type";
4166         else
4167                 echo "$type NOT found." >&4;
4168                 dflt="$def";
4169                 . ./myread ;
4170                 eval "$var=\$ans";
4171         fi;
4172         $rm -f temp.?;;
4173 *) eval "$var=\$varval";;
4174 esac'
4175
4176 : define a shorthand compile call
4177 compile='
4178 mc_file=$1;
4179 shift;
4180 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4181 : define a shorthand compile call for compilations that should be ok.
4182 compile_ok='
4183 mc_file=$1;
4184 shift;
4185 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4186
4187 : check for lengths of integral types
4188 echo " "
4189 case "$intsize" in
4190 '')
4191         echo "Checking to see how big your integers are..." >&4
4192         $cat >intsize.c <<'EOCP'
4193 #include <stdio.h>
4194 int main()
4195 {
4196         printf("intsize=%d;\n", (int)sizeof(int));
4197         printf("longsize=%d;\n", (int)sizeof(long));
4198         printf("shortsize=%d;\n", (int)sizeof(short));
4199         exit(0);
4200 }
4201 EOCP
4202         set intsize
4203         if eval $compile_ok && ./intsize > /dev/null; then
4204                 eval `./intsize`
4205                 echo "Your integers are $intsize bytes long."
4206                 echo "Your long integers are $longsize bytes long."
4207                 echo "Your short integers are $shortsize bytes long."
4208         else
4209                 $cat >&4 <<EOM
4210 !
4211 Help! I can't compile and run the intsize test program: please enlighten me!
4212 (This is probably a misconfiguration in your system or libraries, and
4213 you really ought to fix it.  Still, I'll try anyway.)
4214 !
4215 EOM
4216                 dflt=4
4217                 rp="What is the size of an integer (in bytes)?"
4218                 . ./myread
4219                 intsize="$ans"
4220                 dflt=$intsize
4221                 rp="What is the size of a long integer (in bytes)?"
4222                 . ./myread
4223                 longsize="$ans"
4224                 dflt=2
4225                 rp="What is the size of a short integer (in bytes)?"
4226                 . ./myread
4227                 shortsize="$ans"
4228         fi
4229         ;;
4230 esac
4231 $rm -f intsize intsize.*
4232
4233 : see what type lseek is declared as in the kernel
4234 rp="What is the type used for lseek's offset on this system?"
4235 set off_t lseektype long stdio.h sys/types.h
4236 eval $typedef_ask
4237
4238 echo " "
4239 echo "Checking to see how big your file offsets are..." >&4
4240 $cat >try.c <<EOCP
4241 #include <sys/types.h>
4242 #include <stdio.h>
4243 int main()
4244 {
4245     printf("%d\n", (int)sizeof($lseektype));
4246     return(0); 
4247 }
4248 EOCP
4249 set try
4250 if eval $compile_ok; then
4251         lseeksize=`./try`
4252         echo "Your file offsets are $lseeksize bytes long."
4253 else
4254         dflt=$longsize
4255         echo " "
4256         echo "(I can't seem to compile the test program.  Guessing...)"
4257         rp="What is the size of your file offsets (in bytes)?"
4258         . ./myread
4259         lseeksize="$ans"
4260 fi
4261 $rm -f try.c try
4262
4263 : see what type file positions are declared as in the library
4264 rp="What is the type for file position used by fsetpos()?"
4265 set fpos_t fpostype long stdio.h sys/types.h
4266 eval $typedef_ask
4267
4268 echo " "
4269 case "$fpostype" in
4270 *_t) zzz="$fpostype"    ;;
4271 *)   zzz="fpos_t"       ;;
4272 esac
4273 echo "Checking the size of $zzz..." >&4 
4274 cat > try.c <<EOCP
4275 #include <sys/types.h>
4276 #include <stdio.h>
4277 int main() {
4278     printf("%d\n", (int)sizeof($fpostype));
4279     exit(0);
4280 }
4281 EOCP
4282 set try
4283 if eval $compile_ok; then
4284         yyy=`./try`
4285         case "$yyy" in
4286         '')     fpossize=4
4287                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4288                 ;;
4289         *)      fpossize=$yyy
4290                 echo "Your $zzz is $fpossize bytes long."
4291                 ;;
4292         esac
4293 else
4294         dflt="$longsize"
4295         echo " " >&4
4296         echo "(I can't compile the test program.  Guessing...)" >&4
4297         rp="What is the size of your file positions (in bytes)?"
4298         . ./myread
4299         fpossize="$ans"
4300 fi
4301
4302
4303
4304 # Backward compatibility (uselfs is deprecated).
4305 case "$uselfs" in
4306 "$define"|true|[yY]*)
4307         cat <<EOM >&4
4308
4309 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
4310 EOM
4311         uselargefiles="$define"
4312         ;;
4313 esac                          
4314
4315 case "$lseeksize:$fpossize" in
4316 8:8) cat <<EOM
4317
4318 You can have files larger than 2 gigabytes.
4319 EOM
4320    val="$define" ;;
4321 *)    case "$uselargefiles" in
4322    "$undef"|false|[nN]*) dflt='n' ;;
4323    *)   dflt='y' ;;
4324    esac
4325    cat <<EOM
4326
4327 Perl can be built to understand large files (files larger than 2 gigabytes)
4328 on some systems.  To do so, Configure can be run with -Duselargefiles.
4329
4330 If this doesn't make any sense to you, just accept the default '$dflt'.
4331 EOM
4332    rp='Try to understand large files, if available?'
4333    . ./myread
4334    case "$ans" in
4335    y|Y)         val="$define" ;;
4336    *)           val="$undef"  ;;
4337    esac
4338    ;;
4339 esac
4340 set uselargefiles
4341 eval $setvar
4342 case "$uselargefiles" in
4343 "$define")
4344 : Look for a hint-file generated 'call-back-unit'.  If the
4345 : user has specified that a large files perl is to be built,
4346 : we may need to set or change some other defaults.
4347         if $test -f uselargefiles.cbu; then
4348                 echo "Your platform has some specific hints for large file builds, using them..."
4349                 . ./uselargefiles.cbu
4350                 echo " "
4351                 echo "Rechecking to see how big your file offsets are..." >&4
4352                 $cat >try.c <<EOCP
4353 #include <sys/types.h>
4354 #include <stdio.h>
4355 int main()
4356 {
4357     printf("%d\n", (int)sizeof($lseektype));
4358     return(0); 
4359 }
4360 EOCP
4361                 set try
4362                 if eval $compile_ok; then
4363                         lseeksize=`./try`
4364                         $echo "Your file offsets are now $lseeksize bytes long."
4365                 else
4366                         dflt="$lseeksize"
4367                         echo " "
4368                         echo "(I can't seem to compile the test program.  Guessing...)"
4369                         rp="What is the size of your file offsets (in bytes)?"
4370                         . ./myread
4371                         lseeksize="$ans"
4372                 fi
4373                 case "$fpostype" in
4374                 *_t) zzz="$fpostype"    ;;
4375                 *)   zzz="fpos_t"       ;;
4376                 esac
4377                 $echo $n "Rechecking the size of $zzz...$c" >&4 
4378                 $cat > try.c <<EOCP
4379 #include <sys/types.h>
4380 #include <stdio.h>
4381 int main() {
4382     printf("%d\n", (int)sizeof($fpostype));
4383     exit(0);
4384 }
4385 EOCP
4386                 set try
4387                 if eval $compile_ok; then
4388                         yyy=`./try`
4389                         dflt="$lseeksize"
4390                         case "$yyy" in
4391                         '')     echo " "
4392                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4393                                 ;;
4394                         *)      fpossize=$yyy
4395                                 echo " $fpossize bytes." >&4
4396                                 ;;
4397                         esac
4398                 else
4399                         dflt="$fpossize"
4400                         echo " "
4401                         echo "(I can't compile the test program.  Guessing...)" >&4
4402                         rp="What is the size of your file positions (in bytes)?"
4403                         . ./myread
4404                         fpossize="$ans"
4405                 fi
4406                 $rm -f try.c try
4407         fi
4408         ;;
4409 esac
4410
4411
4412 case "$usemorebits" in
4413 "$define"|true|[yY]*)
4414         use64bitint="$define"
4415         uselongdouble="$define"
4416         usemorebits="$define"
4417         ;;
4418 *)      usemorebits="$undef"
4419         ;;
4420 esac
4421
4422
4423 case "$uselonglong" in
4424 "$define"|true|[yY]*)
4425         cat <<EOM >&4
4426
4427 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
4428 EOM
4429         use64bitint="$define"
4430         ;;
4431 esac                          
4432 case "$use64bits" in
4433 "$define"|true|[yY]*)
4434         cat <<EOM >&4
4435
4436 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
4437 EOM
4438         use64bitint="$define"
4439         ;;
4440 esac                          
4441 case "$use64bitints" in
4442 "$define"|true|[yY]*)
4443         cat <<EOM >&4
4444
4445 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
4446 EOM
4447         use64bitint="$define"
4448         ;;
4449 esac                          
4450 case "$use64bitsint" in
4451 "$define"|true|[yY]*)
4452         cat <<EOM >&4
4453
4454 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
4455 EOM
4456         use64bitint="$define"
4457         ;;
4458 esac                          
4459 case "$uselonglongs" in
4460 "$define"|true|[yY]*)
4461         cat <<EOM >&4
4462
4463 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
4464 EOM
4465         use64bitint="$define"
4466         ;;
4467 esac                          
4468 case "$use64bitsall" in
4469 "$define"|true|[yY]*)
4470         cat <<EOM >&4
4471
4472 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
4473 EOM
4474         use64bitall="$define"
4475         ;;
4476 esac                          
4477
4478 case "$ccflags" in
4479 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
4480 esac
4481 case "$use64bitall" in
4482 "$define"|true|[yY]*) use64bitint="$define" ;;
4483 esac
4484
4485 case "$longsize" in
4486 8) cat <<EOM
4487
4488 You have natively 64-bit long integers.
4489 EOM
4490    val="$define"
4491    ;;
4492 *) case "$use64bitint" in
4493    "$define"|true|[yY]*) dflt='y';;
4494    *) dflt='n';;
4495    esac
4496    cat <<EOM
4497
4498 Perl can be built to take advantage of 64-bit integer types
4499 on some systems.  To do so, Configure can be run with -Duse64bitint.
4500 Choosing this option will most probably introduce binary incompatibilities.
4501
4502 If this doesn't make any sense to you, just accept the default '$dflt'.
4503 EOM
4504    rp='Try to use 64-bit integers, if available?'
4505    . ./myread
4506    case "$ans" in
4507    [yY]*) val="$define" ;;
4508    *)     val="$undef"  ;;
4509    esac
4510    ;;
4511 esac
4512 set use64bitint
4513 eval $setvar
4514
4515 case "$use64bitall" in
4516 "$define"|true|[yY]*) dflt='y' ;;
4517 *) case "$longsize" in
4518    8) dflt='y' ;;
4519    *) dflt='n' ;;
4520    esac
4521    ;;
4522 esac    
4523 cat <<EOM
4524
4525 You may also choose to try maximal 64-bitness.  It means using as much
4526 64-bitness as possible on the platform.  This in turn means even more
4527 binary incompatibilities.  On the other hand, your platform may not
4528 have any more 64-bitness available than what you already have chosen.
4529
4530 If this doesn't make any sense to you, just accept the default '$dflt'.
4531 EOM
4532 rp='Try to use maximal 64-bit support, if available?'
4533 . ./myread
4534 case "$ans" in
4535 [yY]*) val="$define" ;;
4536 *)     val="$undef"  ;;
4537 esac
4538 set use64bitall
4539 eval $setvar
4540 case "$use64bitall" in
4541 "$define")
4542         case "$use64bitint" in
4543         "$undef")
4544                 cat <<EOM
4545
4546 Since you have chosen a maximally 64-bit build, I'm also turning on
4547 the use of 64-bit integers.
4548 EOM
4549                 use64bitint="$define" ;;
4550         esac
4551         ;;
4552 esac
4553
4554 case "$use64bitint" in
4555 "$define"|true|[yY]*)
4556 : Look for a hint-file generated 'call-back-unit'.  If the
4557 : user has specified that a 64-bit perl is to be built,
4558 : we may need to set or change some other defaults.
4559         if $test -f use64bitint.cbu; then
4560                 echo "Your platform has some specific hints for 64-bit integers, using them..."
4561                 . ./use64bitint.cbu
4562         fi
4563         case "$longsize" in
4564         4) case "$archname64" in
4565            '') archname64=64int ;;
4566            esac
4567            ;;
4568         esac
4569         ;;
4570 esac
4571
4572 case "$use64bitall" in
4573 "$define"|true|[yY]*)
4574 : Look for a hint-file generated 'call-back-unit'.  If the
4575 : user has specified that a maximally 64-bit perl is to be built,
4576 : we may need to set or change some other defaults.
4577         if $test -f use64bitall.cbu; then
4578                 echo "Your platform has some specific hints for 64-bit builds, using them..."
4579                 . ./use64bitall.cbu
4580         fi
4581         case "$longsize" in
4582         4) case "$archname64" in
4583            ''|64int) archname64=64all ;;
4584            esac
4585            ;;
4586         esac
4587         ;;
4588 esac
4589
4590 : determine the architecture name
4591 echo " "
4592 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
4593         tarch=`arch`"-$osname"
4594 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
4595         if uname -m > tmparch 2>&1 ; then
4596                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
4597                         -e 's/$/'"-$osname/" tmparch`
4598         else
4599                 tarch="$osname"
4600         fi
4601         $rm -f tmparch
4602 else
4603         tarch="$osname"
4604 fi
4605 case "$myarchname" in
4606 ''|"$tarch") ;;
4607 *)
4608         echo "(Your architecture name used to be $myarchname.)"
4609         archname=''
4610         ;;
4611 esac
4612 myarchname="$tarch"
4613 case "$archname" in
4614 '') dflt="$tarch";;
4615 *) dflt="$archname";;
4616 esac
4617 rp='What is your architecture name'
4618 . ./myread
4619 archname="$ans"
4620 case "$usethreads" in
4621 $define)
4622         echo "Threads selected." >&4
4623         case "$archname" in
4624         *-thread*) echo "...and architecture name already has -thread." >&4
4625                 ;;
4626         *)      archname="$archname-thread"
4627                 echo "...setting architecture name to $archname." >&4
4628                 ;;
4629         esac
4630         ;;
4631 esac
4632 case "$usemultiplicity" in
4633 $define)
4634         echo "Multiplicity selected." >&4
4635         case "$archname" in
4636         *-multi*) echo "...and architecture name already has -multi." >&4
4637                 ;;
4638         *)      archname="$archname-multi"
4639                 echo "...setting architecture name to $archname." >&4
4640                 ;;
4641         esac
4642         ;;
4643 esac
4644 case "$use64bitint" in
4645 $define)
4646         case "$archname64" in
4647         '')
4648                 ;;
4649         *)
4650                 case "$archname" in
4651                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
4652                         ;;
4653                 *)      archname="$archname-$archname64"
4654                         echo "...setting architecture name to $archname." >&4
4655                         ;;
4656                 esac
4657                 ;;
4658         esac
4659 esac
4660
4661 : determine root of directory hierarchy where package will be installed.
4662 case "$prefix" in
4663 '')
4664         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
4665         ;;
4666 *)
4667         dflt="$prefix"
4668         ;;
4669 esac
4670 $cat <<EOM
4671
4672 By default, $package will be installed in $dflt/bin, manual pages
4673 under $dflt/man, etc..., i.e. with $dflt as prefix for all
4674 installation directories. Typically this is something like /usr/local.
4675 If you wish to have binaries under /usr/bin but other parts of the
4676 installation under /usr/local, that's ok: you will be prompted
4677 separately for each of the installation directories, the prefix being
4678 only used to set the defaults.
4679
4680 EOM
4681 fn=d~
4682 rp='Installation prefix to use?'
4683 . ./getfile
4684 oldprefix=''
4685 case "$prefix" in
4686 '') ;;
4687 *)
4688         case "$ans" in
4689         "$prefix") ;;
4690         *) oldprefix="$prefix";;
4691         esac
4692         ;;
4693 esac
4694 prefix="$ans"
4695 prefixexp="$ansexp"
4696
4697 : is AFS running?
4698 echo " "
4699 case "$afs" in
4700 $define|true)   afs=true ;;
4701 $undef|false)   afs=false ;;
4702 *)      if test -d /afs; then
4703                 afs=true
4704         else
4705                 afs=false
4706         fi
4707         ;;
4708 esac
4709 if $afs; then
4710         echo "AFS may be running... I'll be extra cautious then..." >&4
4711 else
4712         echo "AFS does not seem to be running..." >&4
4713 fi
4714
4715 : determine installation prefix for where package is to be installed.
4716 if $afs; then 
4717 $cat <<EOM
4718
4719 Since you are running AFS, I need to distinguish the directory in which
4720 files will reside from the directory in which they are installed (and from
4721 which they are presumably copied to the former directory by occult means).
4722
4723 EOM
4724         case "$installprefix" in
4725         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
4726         *) dflt="$installprefix";;
4727         esac
4728 else
4729 $cat <<EOM
4730
4731 In some special cases, particularly when building $package for distribution,
4732 it is convenient to distinguish between the directory in which files should 
4733 be installed from the directory ($prefix) in which they 
4734 will eventually reside.  For most users, these two directories are the same.
4735
4736 EOM
4737         case "$installprefix" in
4738         '') dflt=$prefix ;;
4739         *) dflt=$installprefix;;
4740         esac
4741 fi
4742 fn=d~
4743 rp='What installation prefix should I use for installing files?'
4744 . ./getfile
4745 installprefix="$ans"
4746 installprefixexp="$ansexp"
4747
4748 : set the prefixit variable, to compute a suitable default value
4749 prefixit='case "$3" in
4750 ""|none)
4751         case "$oldprefix" in
4752         "") eval "$1=\"\$$2\"";;
4753         *)
4754                 case "$3" in
4755                 "") eval "$1=";;
4756                 none)
4757                         eval "tp=\"\$$2\"";
4758                         case "$tp" in
4759                         ""|" ") eval "$1=\"\$$2\"";;
4760                         *) eval "$1=";;
4761                         esac;;
4762                 esac;;
4763         esac;;
4764 *)
4765         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
4766         case "$tp" in
4767         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
4768         /*-$oldprefix/*|\~*-$oldprefix/*)
4769                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
4770         *) eval "$1=\"\$$2\"";;
4771         esac;;
4772 esac'
4773
4774
4775 : get the patchlevel
4776 echo " "
4777 echo "Getting the current patchlevel..." >&4
4778 if $test -r $rsrc/patchlevel.h;then
4779         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
4780         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
4781         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4782         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
4783         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
4784         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4785 else
4786         revision=0
4787         patchlevel=0
4788         subversion=0
4789         api_revision=0
4790         api_version=0
4791         api_subversion=0
4792 fi
4793 $echo $n "(You have $package revision $revision" $c
4794 $echo $n " patchlevel $patchlevel" $c
4795 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
4796 echo ".)"
4797 case "$osname" in
4798 dos|vms)
4799         : XXX Should be a Configure test for double-dots in filenames.
4800         version=`echo $revision $patchlevel $subversion | \
4801                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
4802         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4803                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
4804         ;;
4805 *)
4806         version=`echo $revision $patchlevel $subversion | \
4807                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
4808         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4809                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
4810         ;;
4811 esac
4812 : Special case the 5.005_xx maintenance series, which used 5.005
4813 : without any subversion label as a subdirectory in $sitelib
4814 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
4815         api_versionstring='5.005'
4816 fi
4817
4818 : determine installation style
4819 : For now, try to deduce it from prefix unless it is already set.
4820 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
4821 case "$installstyle" in
4822 '')     case "$prefix" in
4823                 *perl*) dflt='lib';;
4824                 *) dflt='lib/perl5' ;;
4825         esac
4826         ;;
4827 *)      dflt="$installstyle" ;;
4828 esac
4829 : Probably not worth prompting for this since we prompt for all
4830 : the directories individually, and the prompt would be too long and
4831 : confusing anyway.
4832 installstyle=$dflt
4833
4834 : determine where private library files go
4835 : Usual default is /usr/local/lib/perl5/$version.
4836 : Also allow things like /opt/perl/lib/$version, since 
4837 : /opt/perl/lib/perl5... would be redundant.
4838 : The default "style" setting is made in installstyle.U
4839 case "$installstyle" in
4840 *lib/perl5*) set dflt privlib lib/$package/$version ;;
4841 *)       set dflt privlib lib/$version ;;
4842 esac
4843 eval $prefixit
4844 $cat <<EOM
4845
4846 There are some auxiliary files for $package that need to be put into a
4847 private library directory that is accessible by everyone.
4848
4849 EOM
4850 fn=d~+
4851 rp='Pathname where the private library files will reside?'
4852 . ./getfile
4853 privlib="$ans"
4854 privlibexp="$ansexp"
4855 : Change installation prefix, if necessary.
4856 if $test X"$prefix" != X"$installprefix"; then
4857         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
4858 else
4859         installprivlib="$privlibexp"
4860 fi
4861
4862 : set the prefixup variable, to restore leading tilda escape
4863 prefixup='case "$prefixexp" in
4864 "$prefix") ;;
4865 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
4866 esac'
4867
4868 : determine where public architecture dependent libraries go
4869 set archlib archlib
4870 eval $prefixit
4871 : privlib default is /usr/local/lib/$package/$version
4872 : archlib default is /usr/local/lib/$package/$version/$archname
4873 : privlib may have an optional trailing /share.
4874 tdflt=`echo $privlib | $sed 's,/share$,,'`
4875 tdflt=$tdflt/$archname
4876 case "$archlib" in
4877 '')     dflt=$tdflt
4878         ;;
4879 *)      dflt="$archlib"
4880     ;;
4881 esac
4882 $cat <<EOM
4883
4884 $spackage contains architecture-dependent library files.  If you are
4885 sharing libraries in a heterogeneous environment, you might store
4886 these files in a separate location.  Otherwise, you can just include
4887 them with the rest of the public library files.
4888
4889 EOM
4890 fn=d+~
4891 rp='Where do you want to put the public architecture-dependent libraries?'
4892 . ./getfile
4893 archlib="$ans"
4894 archlibexp="$ansexp"
4895 if $test X"$archlib" = X"$privlib"; then
4896         d_archlib="$undef"
4897 else
4898         d_archlib="$define"
4899 fi
4900 : Change installation prefix, if necessary.
4901 if $test X"$prefix" != X"$installprefix"; then
4902         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
4903 else
4904         installarchlib="$archlibexp"
4905 fi
4906
4907
4908 : Binary compatibility with 5.005 is not possible for builds
4909 : with advanced features
4910 case "$usethreads$usemultiplicity" in
4911 *define*)
4912         bincompat5005="$undef"
4913         d_bincompat5005="$undef"
4914         ;;
4915 *)      $cat <<EOM
4916
4917 Perl 5.006 can be compiled for binary compatibility with 5.005.
4918 If you decide to do so, you will be able to continue using most
4919 of the extensions that were compiled for Perl 5.005.
4920
4921 EOM
4922         case "$bincompat5005$d_bincompat5005" in
4923         *"$undef"*) dflt=n ;;
4924         *) dflt=y ;;
4925         esac
4926         rp='Binary compatibility with Perl 5.005?'
4927         . ./myread
4928         case "$ans" in
4929         y*) val="$define" ;;
4930         *)  val="$undef" ;;
4931         esac
4932         set d_bincompat5005
4933         eval $setvar
4934         case "$d_bincompat5005" in
4935         "$define")
4936                 bincompat5005="$define"
4937                 ;;
4938         *)      bincompat5005="$undef"
4939                 d_bincompat5005="$undef"
4940                 ;;
4941         esac
4942         ;;
4943 esac
4944
4945
4946 : see if setuid scripts can be secure
4947 $cat <<EOM
4948
4949 Some kernels have a bug that prevents setuid #! scripts from being
4950 secure.  Some sites have disabled setuid #! scripts because of this.
4951
4952 First let's decide if your kernel supports secure setuid #! scripts.
4953 (If setuid #! scripts would be secure but have been disabled anyway,
4954 don't say that they are secure if asked.)
4955
4956 EOM
4957
4958 val="$undef"
4959 if $test -d /dev/fd; then
4960         echo "#!$ls" >reflect
4961         chmod +x,u+s reflect
4962         ./reflect >flect 2>&1
4963         if $contains "/dev/fd" flect >/dev/null; then
4964                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
4965                 val="$define"
4966         else
4967                 $cat <<EOM
4968 If you are not sure if they are secure, I can check but I'll need a
4969 username and password different from the one you are using right now.
4970 If you don't have such a username or don't want me to test, simply
4971 enter 'none'.
4972
4973 EOM
4974                 rp='Other username to test security of setuid scripts with?'
4975                 dflt='none'
4976                 . ./myread
4977                 case "$ans" in
4978                 n|none)
4979                         case "$d_suidsafe" in
4980                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
4981                                 dflt=n;;
4982                         "$undef")
4983                                 echo "Well, the $hint value is *not* secure." >&4
4984                                 dflt=n;;
4985                         *)      echo "Well, the $hint value *is* secure." >&4
4986                                 dflt=y;;
4987                         esac
4988                         ;;
4989                 *)
4990                         $rm -f reflect flect
4991                         echo "#!$ls" >reflect
4992                         chmod +x,u+s reflect
4993                         echo >flect
4994                         chmod a+w flect
4995                         echo '"su" will (probably) prompt you for '"$ans's password."
4996                         su $ans -c './reflect >flect'
4997                         if $contains "/dev/fd" flect >/dev/null; then
4998                                 echo "Okay, it looks like setuid scripts are secure." >&4
4999                                 dflt=y
5000                         else
5001                                 echo "I don't think setuid scripts are secure." >&4
5002                                 dflt=n
5003                         fi
5004                         ;;
5005                 esac
5006                 rp='Does your kernel have *secure* setuid scripts?'
5007                 . ./myread
5008                 case "$ans" in
5009                 [yY]*)  val="$define";;
5010                 *)      val="$undef";;
5011                 esac
5012         fi
5013 else
5014         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
5015         echo "(That's for file descriptors, not floppy disks.)"
5016         val="$undef"
5017 fi
5018 set d_suidsafe
5019 eval $setvar
5020
5021 $rm -f reflect flect
5022
5023 : now see if they want to do setuid emulation
5024 echo " "
5025 val="$undef"
5026 case "$d_suidsafe" in
5027 "$define")
5028         val="$undef"
5029         echo "No need to emulate SUID scripts since they are secure here." >& 4
5030         ;;
5031 *)
5032         $cat <<EOM
5033 Some systems have disabled setuid scripts, especially systems where
5034 setuid scripts cannot be secure.  On systems where setuid scripts have
5035 been disabled, the setuid/setgid bits on scripts are currently
5036 useless.  It is possible for $package to detect those bits and emulate
5037 setuid/setgid in a secure fashion.  This emulation will only work if
5038 setuid scripts have been disabled in your kernel.
5039
5040 EOM
5041         case "$d_dosuid" in
5042         "$define") dflt=y ;;
5043         *) dflt=n ;;
5044         esac
5045         rp="Do you want to do setuid/setgid emulation?"
5046         . ./myread
5047         case "$ans" in
5048         [yY]*)  val="$define";;
5049         *)      val="$undef";;
5050         esac
5051         ;;
5052 esac
5053 set d_dosuid
5054 eval $setvar
5055
5056 : determine filename position in cpp output
5057 echo " "
5058 echo "Computing filename position in cpp output for #include directives..." >&4
5059 echo '#include <stdio.h>' > foo.c
5060 $cat >fieldn <<EOF
5061 $startsh
5062 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
5063 $grep '^[       ]*#.*stdio\.h' | \
5064 while read cline; do
5065         pos=1
5066         set \$cline
5067         while $test \$# -gt 0; do
5068                 if $test -r \`echo \$1 | $tr -d '"'\`; then
5069                         echo "\$pos"
5070                         exit 0
5071                 fi
5072                 shift
5073                 pos=\`expr \$pos + 1\`
5074         done
5075 done
5076 EOF
5077 chmod +x fieldn
5078 fieldn=`./fieldn`
5079 $rm -f foo.c fieldn
5080 case $fieldn in
5081 '') pos='???';;
5082 1) pos=first;;
5083 2) pos=second;;
5084 3) pos=third;;
5085 *) pos="${fieldn}th";;
5086 esac
5087 echo "Your cpp writes the filename in the $pos field of the line."
5088
5089 : locate header file
5090 $cat >findhdr <<EOF
5091 $startsh
5092 wanted=\$1
5093 name=''
5094 for usrincdir in $usrinc
5095 do
5096         if test -f \$usrincdir/\$wanted; then
5097                 echo "\$usrincdir/\$wanted"
5098                 exit 0
5099         fi
5100 done
5101 awkprg='{ print \$$fieldn }'
5102 echo "#include <\$wanted>" > foo\$\$.c
5103 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
5104 $grep "^[       ]*#.*\$wanted" | \
5105 while read cline; do
5106         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
5107         case "\$name" in
5108         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
5109         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
5110         *) exit 2;;
5111         esac;
5112 done;
5113 #
5114 # status = 0: grep returned 0 lines, case statement not executed
5115 # status = 1: headerfile found
5116 # status = 2: while loop executed, no headerfile found
5117 #
5118 status=\$?
5119 $rm -f foo\$\$.c;
5120 if test \$status -eq 1; then
5121         exit 0;
5122 fi
5123 exit 1
5124 EOF
5125 chmod +x findhdr
5126
5127 : define an alternate in-header-list? function
5128 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
5129 cont=true; xxf="echo \"<\$1> found.\" >&4";
5130 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
5131 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
5132 esac;
5133 case $# in 4) instead=instead;; *) instead="at last";; esac;
5134 while $test "$cont"; do
5135         xxx=`./findhdr $1`
5136         var=$2; eval "was=\$$2";
5137         if $test "$xxx" && $test -r "$xxx";
5138         then eval $xxf;
5139         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5140                 cont="";
5141         else eval $xxnf;
5142         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5143         set $yyy; shift; shift; yyy=$@;
5144         case $# in 0) cont="";;
5145         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5146                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5147         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5148                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5149         esac;
5150 done;
5151 while $test "$yyy";
5152 do set $yyy; var=$2; eval "was=\$$2";
5153         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5154         set $yyy; shift; shift; yyy=$@;
5155 done'
5156
5157 : see if this is a malloc.h system
5158 set malloc.h i_malloc
5159 eval $inhdr
5160
5161 : see if stdlib is available
5162 set stdlib.h i_stdlib
5163 eval $inhdr
5164
5165 : determine which malloc to compile in
5166 echo " "
5167 case "$usemymalloc" in
5168 ''|[yY]*|true|$define)  dflt='y' ;;
5169 *)      dflt='n' ;;
5170 esac
5171 rp="Do you wish to attempt to use the malloc that comes with $package?"
5172 . ./myread
5173 usemymalloc="$ans"
5174 case "$ans" in
5175 y*|true)
5176         usemymalloc='y'
5177         mallocsrc='malloc.c'
5178         mallocobj="malloc$_o"
5179         d_mymalloc="$define"
5180         case "$libs" in
5181         *-lmalloc*)
5182                 : Remove malloc from list of libraries to use
5183                 echo "Removing unneeded -lmalloc from library list" >&4
5184                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
5185                 shift
5186                 libs="$*"
5187                 echo "libs = $libs" >&4
5188                 ;;
5189         esac
5190         ;;
5191 *)
5192         usemymalloc='n'
5193         mallocsrc=''
5194         mallocobj=''
5195         d_mymalloc="$undef"
5196         ;;
5197 esac
5198
5199 : compute the return types of malloc and free
5200 echo " "
5201 $cat >malloc.c <<END
5202 #$i_malloc I_MALLOC
5203 #$i_stdlib I_STDLIB
5204 #include <stdio.h>
5205 #include <sys/types.h>
5206 #ifdef I_MALLOC
5207 #include <malloc.h>
5208 #endif
5209 #ifdef I_STDLIB
5210 #include <stdlib.h>
5211 #endif
5212 #ifdef TRY_MALLOC
5213 void *malloc();
5214 #endif
5215 #ifdef TRY_FREE
5216 void free();
5217 #endif
5218 END
5219 case "$malloctype" in
5220 '')
5221         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
5222                 malloctype='void *'
5223         else
5224                 malloctype='char *'
5225         fi
5226         ;;
5227 esac
5228 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
5229
5230 case "$freetype" in
5231 '')
5232         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
5233                 freetype='void'
5234         else
5235                 freetype='int'
5236         fi
5237         ;;
5238 esac
5239 echo "Your system uses $freetype free(), it would seem." >&4
5240 $rm -f malloc.[co]
5241 $cat <<EOM
5242
5243 The installation process will also create a directory for
5244 vendor-supplied add-ons.  Vendors who supply perl with their system
5245 may find it convenient to place all vendor-supplied files in this
5246 directory rather than in the main distribution directory.  This will
5247 ease upgrades between binary-compatible maintenance versions of perl.
5248
5249 Of course you may also use these directories in whatever way you see
5250 fit.  For example, you might use them to access modules shared over a
5251 company-wide network.
5252
5253 The default answer should be fine for most people.
5254 This causes further questions about vendor add-ons to be skipped
5255 and no vendor-specific directories will be configured for perl.
5256
5257 EOM
5258 rp='Do you want to configure vendor-specific add-on directories?'
5259 case "$usevendorprefix" in
5260 define|true|[yY]*) dflt=y ;;
5261 *)      : User may have set vendorprefix directly on Configure command line.
5262         case "$vendorprefix" in
5263         ''|' ') dflt=n ;;
5264         *)      dflt=y ;;
5265         esac
5266         ;;
5267 esac
5268 . ./myread
5269 case "$ans" in
5270 [yY]*)  fn=d~+
5271         rp='Installation prefix to use for vendor-supplied add-ons?'
5272         case "$vendorprefix" in
5273         '') dflt='' ;;
5274         *)  dflt=$vendorprefix ;;
5275         esac
5276         . ./getfile
5277         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
5278         oldvendorprefix=''
5279         case "$vendorprefix" in
5280         '') ;;
5281         *)      case "$ans" in
5282                 "$prefix") ;;
5283                 *) oldvendorprefix="$prefix";;
5284                 esac
5285                 ;;
5286         esac
5287         usevendorprefix="$define"
5288         vendorprefix="$ans"
5289         vendorprefixexp="$ansexp"
5290         ;;
5291 *)      usevendorprefix="$undef"
5292         vendorprefix=''
5293         vendorprefixexp=''
5294         ;;
5295 esac
5296
5297 case "$vendorprefix" in
5298 '')     d_vendorlib="$undef"
5299         vendorlib=''
5300         vendorlibexp=''
5301         ;;
5302 *)      d_vendorlib="$define"
5303         : determine where vendor-supplied modules go.
5304         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
5305         case "$vendorlib" in
5306         '')
5307                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5308                 case "$installstyle" in
5309                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
5310                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
5311                 esac
5312                 ;;
5313         *)      dflt="$vendorlib"
5314                 ;;
5315         esac
5316         fn=d~+
5317         rp='Pathname for the vendor-supplied library files?'
5318         . ./getfile
5319         vendorlib="$ans"
5320         vendorlibexp="$ansexp"
5321         ;;
5322 esac
5323 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
5324 : Change installation prefix, if necessary.
5325 if $test X"$prefix" != X"$installprefix"; then
5326         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
5327 else
5328         installvendorlib="$vendorlibexp"
5329 fi
5330
5331 case "$vendorprefix" in
5332 '')     d_vendorarch="$undef"
5333         vendorarch=''
5334         vendorarchexp=''
5335         ;;
5336 *)      d_vendorarch="$define"
5337         : determine where vendor-supplied architecture-dependent libraries go.
5338         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
5339         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
5340         : vendorlib may have an optional trailing /share.
5341         case "$vendorarch" in
5342         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
5343                 dflt="$dflt/$archname"
5344                 ;;
5345         *)      dflt="$vendorarch" ;;
5346         esac
5347         fn=d~+
5348         rp='Pathname for vendor-supplied architecture-dependent files?'
5349         . ./getfile
5350         vendorarch="$ans"
5351         vendorarchexp="$ansexp"
5352         ;;
5353 esac
5354 : Change installation prefix, if necessary.
5355 if $test X"$prefix" != X"$installprefix"; then
5356         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
5357 else
5358         installvendorarch="$vendorarchexp"
5359 fi
5360
5361 : Cruising for prototypes
5362 echo " "
5363 echo "Checking out function prototypes..." >&4
5364 $cat >prototype.c <<'EOCP'
5365 int main(int argc, char *argv[]) {
5366         exit(0);}
5367 EOCP
5368 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
5369         echo "Your C compiler appears to support function prototypes."
5370         val="$define"
5371 else
5372         echo "Your C compiler doesn't seem to understand function prototypes."
5373         val="$undef"
5374 fi
5375 set prototype
5376 eval $setvar
5377 $rm -f prototype*
5378
5379 case "$prototype" in
5380 "$define") ;;
5381 *)      ansi2knr='ansi2knr'
5382         echo " "
5383         cat <<EOM >&4
5384
5385 $me:  FATAL ERROR:
5386 This version of $package can only be compiled by a compiler that 
5387 understands function prototypes.  Unfortunately, your C compiler 
5388         $cc $ccflags
5389 doesn't seem to understand them.  Sorry about that.
5390
5391 If GNU cc is available for your system, perhaps you could try that instead.  
5392
5393 Eventually, we hope to support building Perl with pre-ANSI compilers.
5394 If you would like to help in that effort, please contact <perlbug@perl.org>.
5395
5396 Aborting Configure now.
5397 EOM
5398         exit 2
5399         ;;
5400 esac
5401
5402 : determine where public executables go
5403 echo " "
5404 set dflt bin bin
5405 eval $prefixit
5406 fn=d~
5407 rp='Pathname where the public executables will reside?'
5408 . ./getfile
5409 if $test "X$ansexp" != "X$binexp"; then
5410         installbin=''
5411 fi
5412 bin="$ans"
5413 binexp="$ansexp"
5414 : Change installation prefix, if necessary.
5415 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
5416 if $test X"$prefix" != X"$installprefix"; then
5417         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
5418 else
5419         installbin="$binexp"
5420 fi
5421
5422 : Find perl5.005 or later.
5423 echo "Looking for a previously installed perl5.005 or later... "
5424 case "$perl5" in
5425 '')     for tdir in `echo "$binexp:$PATH" | $sed "s/$path_sep/ /g"`; do
5426                 : Check if this perl is recent and can load a simple module
5427                 if $test -x $tdir/perl && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
5428                         perl5=$tdir/perl
5429                         break;
5430                 elif $test -x $tdir/perl5 && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
5431                         perl5=$tdir/perl
5432                         break;
5433                 fi
5434         done
5435         ;;
5436 *)      perl5="$perl5"
5437         ;;
5438 esac
5439 case "$perl5" in
5440 '')     echo "None found.  That's ok.";;
5441 *)      echo "Using $perl5." ;;
5442 esac
5443
5444 $cat <<EOM
5445
5446 After $package is installed, you may wish to install various
5447 add-on modules and utilities.  Typically, these add-ons will
5448 be installed under $prefix with the rest
5449 of this package.  However, you may wish to install such add-ons
5450 elsewhere under a different prefix.
5451
5452 If you do not wish to put everything under a single prefix, that's
5453 ok.  You will be prompted for the individual locations; this siteprefix
5454 is only used to suggest the defaults.
5455
5456 The default should be fine for most people.
5457
5458 EOM
5459 fn=d~+
5460 rp='Installation prefix to use for add-on modules and utilities?'
5461 : XXX Here might be another good place for an installstyle setting.
5462 case "$siteprefix" in
5463 '') dflt=$prefix ;;
5464 *)  dflt=$siteprefix ;;
5465 esac
5466 . ./getfile
5467 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
5468 oldsiteprefix=''
5469 case "$siteprefix" in
5470 '') ;;
5471 *)      case "$ans" in
5472         "$prefix") ;;
5473         *) oldsiteprefix="$prefix";;
5474         esac
5475         ;;
5476 esac
5477 siteprefix="$ans"
5478 siteprefixexp="$ansexp"
5479
5480 : determine where site specific libraries go.
5481 : Usual default is /usr/local/lib/perl5/site_perl/$version
5482 : The default "style" setting is made in installstyle.U
5483 : XXX No longer works with Prefixit stuff.
5484 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5485 case "$sitelib" in
5486 '') case "$installstyle" in
5487         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
5488         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
5489         esac
5490         ;;
5491 *)      dflt="$sitelib"
5492         ;;
5493 esac
5494 $cat <<EOM
5495
5496 The installation process will create a directory for
5497 site-specific extensions and modules.  Most users find it convenient
5498 to place all site-specific files in this directory rather than in the
5499 main distribution directory.
5500
5501 EOM
5502 fn=d~+
5503 rp='Pathname for the site-specific library files?'
5504 . ./getfile
5505 sitelib="$ans"
5506 sitelibexp="$ansexp"
5507 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
5508 : Change installation prefix, if necessary.
5509 if $test X"$prefix" != X"$installprefix"; then
5510         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
5511 else
5512         installsitelib="$sitelibexp"
5513 fi
5514
5515 : Determine list of previous versions to include in @INC
5516 $cat > getverlist <<EOPL
5517 #!$perl5 -w
5518 use File::Basename;
5519 \$api_versionstring = "$api_versionstring";
5520 \$version = "$version";
5521 \$sitelib = "$sitelib";
5522 \$archname = "$archname";
5523 EOPL
5524         $cat >> getverlist <<'EOPL'
5525 # Can't have leading @ because metaconfig interprets it as a command!
5526 ;@inc_version_list=();
5527 $stem=dirname($sitelib);
5528 # XXX Redo to do opendir/readdir? 
5529 if (-d $stem) {
5530     chdir($stem);
5531     ;@candidates = glob("5.*");
5532 }
5533 else {
5534     ;@candidates = ();
5535 }
5536
5537 # XXX ToDo:  These comparisons must be reworked when two-digit
5538 # subversions come along, so that 5.7.10 compares as greater than
5539 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
5540 # widespread that we can use the built-in version vectors rather
5541 # than reinventing them here.  For 5.6.0, however, we must
5542 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
5543 foreach $d (@candidates) {
5544     if ($d lt $version) {
5545         if ($d ge $api_versionstring) {
5546             unshift(@inc_version_list, "$d/$archname", $d);
5547         }
5548         elsif ($d ge "5.005") {
5549             unshift(@inc_version_list, $d);
5550         }
5551     }
5552     else {
5553         # Skip newer version.  I.e. don't look in
5554         # 5.7.0 if we're installing 5.6.1.
5555     }
5556 }
5557
5558 if (@inc_version_list) {
5559     print join(' ', @inc_version_list);
5560 }
5561 else {
5562     # Blank space to preserve value for next Configure run.
5563     print " ";
5564 }
5565 EOPL
5566 chmod +x getverlist
5567 case "$inc_version_list" in
5568 '')     if test -x "$perl5"; then
5569                 dflt=`$perl5 getverlist`
5570         else
5571                 dflt='none'
5572         fi
5573         ;;
5574 $undef) dflt='none' ;;
5575 *)  dflt="$inc_version_list" ;;
5576 esac
5577 case "$dflt" in
5578 ''|' ') dflt=none ;;
5579 esac
5580 $cat <<'EOM'
5581
5582 In order to ease the process of upgrading, this version of perl 
5583 can be configured to use modules built and installed with earlier 
5584 versions of perl that were installed under $prefix.  Specify here
5585 the list of earlier versions that this version of perl should check.
5586 If Configure detected no earlier versions of perl installed under
5587 $prefix, then the list will be empty.  Answer 'none' to tell perl
5588 to not search earlier versions.
5589
5590 The default should almost always be sensible, so if you're not sure,
5591 just accept the default.
5592 EOM
5593
5594 rp='List of earlier versions to include in @INC?'
5595 . ./myread
5596 case "$ans" in
5597 [Nn]one|''|' ') inc_version_list=' ' ;;
5598 *) inc_version_list="$ans" ;;
5599 esac
5600 case "$inc_version_list" in
5601 ''|' ') 
5602         inc_version_list_init='0';;
5603 *)      inc_version_list_init=`echo $inc_version_list |
5604                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
5605         ;;
5606 esac
5607 $rm -f getverlist
5608
5609 : determine whether to install perl also as /usr/bin/perl
5610
5611 echo " "
5612 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
5613         $cat <<EOM
5614 Many scripts expect perl to be installed as /usr/bin/perl.
5615 I can install the perl you are about to compile also as /usr/bin/perl
5616 (in addition to $installbin/perl).
5617 EOM
5618         case "$installusrbinperl" in
5619         "$undef"|[nN]*) dflt='n';;
5620         *)              dflt='y';;
5621         esac
5622         rp="Do you want to install perl as /usr/bin/perl?"
5623         . ./myread
5624         case "$ans" in
5625         [yY]*)  val="$define";;
5626         *)      val="$undef" ;;
5627         esac
5628 else
5629         val="$undef"
5630 fi
5631 set installusrbinperl
5632 eval $setvar
5633
5634 echo " "
5635 echo "Checking for GNU C Library..." >&4
5636 cat >gnulibc.c <<EOM
5637 #include <stdio.h>
5638 int main()
5639 {
5640 #ifdef __GLIBC__
5641     exit(0);
5642 #else
5643     exit(1);
5644 #endif
5645 }
5646 EOM
5647 set gnulibc
5648 if eval $compile_ok && ./gnulibc; then
5649         val="$define"
5650         echo "You are using the GNU C Library"
5651 else
5652         val="$undef"
5653         echo "You are not using the GNU C Library"
5654 fi
5655 $rm -f gnulibc*
5656 set d_gnulibc
5657 eval $setvar
5658
5659 : see if nm is to be used to determine whether a symbol is defined or not
5660 case "$usenm" in
5661 '')
5662         dflt=''
5663         case "$d_gnulibc" in
5664         "$define")
5665                 echo " "
5666                 echo "nm probably won't work on the GNU C Library." >&4
5667                 dflt=n
5668                 ;;
5669         esac
5670         case "$dflt" in
5671         '') 
5672                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5673                         echo " "
5674                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5675                         echo "'nm' won't be sufficient on this sytem." >&4
5676                         dflt=n
5677                 fi
5678                 ;;
5679         esac
5680         case "$dflt" in
5681         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5682                 if $test $dflt -gt 20; then
5683                         dflt=y
5684                 else
5685                         dflt=n
5686                 fi
5687                 ;;
5688         esac
5689         ;;
5690 *)
5691         case "$usenm" in
5692         true|$define) dflt=y;;
5693         *) dflt=n;;
5694         esac
5695         ;;
5696 esac
5697 $cat <<EOM
5698
5699 I can use $nm to extract the symbols from your C libraries. This
5700 is a time consuming task which may generate huge output on the disk (up
5701 to 3 megabytes) but that should make the symbols extraction faster. The
5702 alternative is to skip the 'nm' extraction part and to compile a small
5703 test program instead to determine whether each symbol is present. If
5704 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5705 this may be the best solution.
5706
5707 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5708
5709 EOM
5710 rp="Shall I use $nm to extract C symbols from the libraries?"
5711 . ./myread
5712 case "$ans" in
5713 [Nn]*) usenm=false;;
5714 *) usenm=true;;
5715 esac
5716
5717 runnm=$usenm
5718 case "$reuseval" in
5719 true) runnm=false;;
5720 esac
5721
5722 : nm options which may be necessary
5723 case "$nm_opt" in
5724 '') if $test -f /mach_boot; then
5725                 nm_opt=''       # Mach
5726         elif $test -d /usr/ccs/lib; then
5727                 nm_opt='-p'     # Solaris (and SunOS?)
5728         elif $test -f /dgux; then
5729                 nm_opt='-p'     # DG-UX
5730         elif $test -f /lib64/rld; then
5731                 nm_opt='-p'     # 64-bit Irix
5732         else
5733                 nm_opt=''
5734         fi;;
5735 esac
5736
5737 : nm options which may be necessary for shared libraries but illegal
5738 : for archive libraries.  Thank you, Linux.
5739 case "$nm_so_opt" in
5740 '')     case "$myuname" in
5741         *linux*)
5742                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5743                         nm_so_opt='--dynamic'
5744                 fi
5745                 ;;
5746         esac
5747         ;;
5748 esac
5749
5750 case "$runnm" in
5751 true)
5752 : get list of predefined functions in a handy place
5753 echo " "
5754 case "$libc" in
5755 '') libc=unknown
5756         case "$libs" in
5757         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5758         esac
5759         ;;
5760 esac
5761 libnames='';
5762 case "$libs" in
5763 '') ;;
5764 *)  for thislib in $libs; do
5765         case "$thislib" in
5766         -lc|-lc_s)
5767                 : Handle C library specially below.
5768                 ;;
5769         -l*)
5770                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5771                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5772                         :
5773                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5774                         :
5775                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5776                         :
5777                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5778                         :
5779                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5780                         :
5781                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5782                         :
5783                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5784                         :
5785                 else
5786                         try=''
5787                 fi
5788                 libnames="$libnames $try"
5789                 ;;
5790         *) libnames="$libnames $thislib" ;;
5791         esac
5792         done
5793         ;;
5794 esac
5795 xxx=normal
5796 case "$libc" in
5797 unknown)
5798         set /lib/libc.$so
5799         for xxx in $libpth; do
5800                 $test -r $1 || set $xxx/libc.$so
5801                 : The messy sed command sorts on library version numbers.
5802                 $test -r $1 || \
5803                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5804                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5805                                 h
5806                                 s/[0-9][0-9]*/0000&/g
5807                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5808                                 G
5809                                 s/\n/ /' | \
5810                          sort | $sed -e 's/^.* //'`
5811                 eval set \$$#
5812         done
5813         $test -r $1 || set /usr/ccs/lib/libc.$so
5814         $test -r $1 || set /lib/libsys_s$_a
5815         ;;
5816 *)
5817         set blurfl
5818         ;;
5819 esac
5820 if $test -r "$1"; then
5821         echo "Your (shared) C library seems to be in $1."
5822         libc="$1"
5823 elif $test -r /lib/libc && $test -r /lib/clib; then
5824         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5825         xxx=apollo
5826         libc='/lib/clib /lib/libc'
5827         if $test -r /lib/syslib; then
5828                 echo "(Your math library is in /lib/syslib.)"
5829                 libc="$libc /lib/syslib"
5830         fi
5831 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5832         echo "Your C library seems to be in $libc, as you said before."
5833 elif $test -r $incpath/usr/lib/libc$_a; then
5834         libc=$incpath/usr/lib/libc$_a;
5835         echo "Your C library seems to be in $libc.  That's fine."
5836 elif $test -r /lib/libc$_a; then
5837         libc=/lib/libc$_a;
5838         echo "Your C library seems to be in $libc.  You're normal."
5839 else
5840         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5841                 :
5842         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5843                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5844         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5845                 :
5846         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5847                 :
5848         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5849                 :
5850         else
5851                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5852         fi
5853         if $test -r "$tans"; then
5854                 echo "Your C library seems to be in $tans, of all places."
5855                 libc=$tans
5856         else
5857                 libc='blurfl'
5858         fi
5859 fi
5860 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5861         dflt="$libc"
5862         cat <<EOM
5863
5864 If the guess above is wrong (which it might be if you're using a strange
5865 compiler, or your machine supports multiple models), you can override it here.
5866
5867 EOM
5868 else
5869         dflt=''
5870         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
5871         cat >&4 <<EOM
5872 I can't seem to find your C library.  I've looked in the following places:
5873
5874 EOM
5875         $sed 's/^/      /' libpath
5876         cat <<EOM
5877
5878 None of these seems to contain your C library. I need to get its name...
5879
5880 EOM
5881 fi
5882 fn=f
5883 rp='Where is your C library?'
5884 . ./getfile
5885 libc="$ans"
5886
5887 echo " "
5888 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
5889 set X `cat libnames`
5890 shift
5891 xxx=files
5892 case $# in 1) xxx=file; esac
5893 echo "Extracting names from the following $xxx for later perusal:" >&4
5894 echo " "
5895 $sed 's/^/      /' libnames >&4
5896 echo " "
5897 $echo $n "This may take a while...$c" >&4
5898
5899 for file in $*; do
5900         case $file in
5901         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5902         *) $nm $nm_opt $file 2>/dev/null;;
5903         esac
5904 done >libc.tmp
5905
5906 $echo $n ".$c"
5907 $grep fprintf libc.tmp > libc.ptf
5908 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5909 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5910 xxx='[ADTSIW]'
5911 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5912         eval $xscan;\
5913         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5914                 eval $xrun
5915 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5916         eval $xscan;\
5917         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5918                 eval $xrun
5919 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5920         eval $xscan;\
5921         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5922                 eval $xrun
5923 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5924         eval $xscan;\
5925         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5926                 eval $xrun
5927 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5928         eval $xscan;\
5929         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5930                 eval $xrun
5931 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5932         eval $xscan;\
5933         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5934                 eval $xrun
5935 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5936                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5937         eval $xscan;\
5938         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5939                 eval $xrun
5940 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5941         eval $xscan;\
5942         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5943                 eval $xrun
5944 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5945         eval $xscan;\
5946         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5947                 eval $xrun
5948 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5949         eval $xscan;\
5950         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5951                 eval $xrun
5952 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5953         eval $xscan;\
5954         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5955                 eval $xrun
5956 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5957         eval $xscan;\
5958         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5959                 eval $xrun
5960 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5961         eval $xscan;\
5962         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5963                 eval $xrun
5964 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5965         eval $xscan;\
5966         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5967                 eval $xrun
5968 else
5969         $nm -p $* 2>/dev/null >libc.tmp
5970         $grep fprintf libc.tmp > libc.ptf
5971         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5972                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5973         then
5974                 nm_opt='-p'
5975                 eval $xrun
5976         else
5977                 echo " "
5978                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5979                 com=''
5980                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5981                         for thisname in $libnames $libc; do
5982                                 $ar t $thisname >>libc.tmp
5983                         done
5984                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5985                         echo "Ok." >&4
5986                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5987                         # Repeat libc to extract forwarders to DLL entries too
5988                         for thisname in $libnames $libc; do
5989                                 $ar tv $thisname >>libc.tmp
5990                                 # Revision 50 of EMX has bug in $ar.
5991                                 # it will not extract forwarders to DLL entries
5992                                 # Use emximp which will extract exactly them.
5993                                 emximp -o tmp.imp $thisname \
5994                                     2>/dev/null && \
5995                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5996                                     < tmp.imp >>libc.tmp
5997                                 $rm tmp.imp
5998                         done
5999                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
6000                         echo "Ok." >&4
6001                 else
6002                         echo "$ar didn't seem to work right." >&4
6003                         echo "Maybe this is a Cray...trying bld instead..." >&4
6004                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
6005                         then
6006                                 for thisname in $libnames; do
6007                                         bld t $libnames | \
6008                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
6009                                         $ar t $thisname >>libc.tmp
6010                                 done
6011                                 echo "Ok." >&4
6012                         else
6013                                 echo "That didn't work either.  Giving up." >&4
6014                                 exit 1
6015                         fi
6016                 fi
6017         fi
6018 fi
6019 nm_extract="$com"
6020 if $test -f /lib/syscalls.exp; then
6021         echo " "
6022         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
6023         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
6024 fi
6025 ;;
6026 esac
6027 $rm -f libnames libpath
6028
6029 : see if dld is available
6030 set dld.h i_dld
6031 eval $inhdr
6032
6033 : is a C symbol defined?
6034 csym='tlook=$1;
6035 case "$3" in
6036 -v) tf=libc.tmp; tc=""; tdc="";;
6037 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
6038 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
6039 esac;
6040 tx=yes;
6041 case "$reuseval-$4" in
6042 true-) ;;
6043 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
6044 esac;
6045 case "$tx" in
6046 yes)
6047         case "$runnm" in
6048         true)
6049                 if $contains $tlook $tf >/dev/null 2>&1;
6050                 then tval=true;
6051                 else tval=false;
6052                 fi;;
6053         *)
6054                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
6055                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
6056                 then tval=true;
6057                 else tval=false;
6058                 fi;
6059                 $rm -f t t.c;;
6060         esac;;
6061 *)
6062         case "$tval" in
6063         $define) tval=true;;
6064         *) tval=false;;
6065         esac;;
6066 esac;
6067 eval "$2=$tval"'
6068
6069 : define an is-in-libc? function
6070 inlibc='echo " "; td=$define; tu=$undef;
6071 sym=$1; var=$2; eval "was=\$$2";
6072 tx=yes;
6073 case "$reuseval$was" in
6074 true) ;;
6075 true*) tx=no;;
6076 esac;
6077 case "$tx" in
6078 yes)
6079         set $sym tres -f;
6080         eval $csym;
6081         case "$tres" in
6082         true)
6083                 echo "$sym() found." >&4;
6084                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
6085         *)
6086                 echo "$sym() NOT found." >&4;
6087                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
6088         esac;;
6089 *)
6090         case "$was" in
6091         $define) echo "$sym() found." >&4;;
6092         *) echo "$sym() NOT found." >&4;;
6093         esac;;
6094 esac'
6095
6096 : see if dlopen exists
6097 xxx_runnm="$runnm"
6098 runnm=false
6099 set dlopen d_dlopen
6100 eval $inlibc
6101 runnm="$xxx_runnm"
6102
6103 : determine which dynamic loading, if any, to compile in
6104 echo " "
6105 dldir="ext/DynaLoader"
6106 case "$usedl" in
6107 $define|y|true)
6108         dflt='y'
6109         usedl="$define"
6110         ;;
6111 $undef|n|false)
6112         dflt='n'
6113         usedl="$undef"
6114         ;;
6115 *) 
6116         dflt='n'
6117         case "$d_dlopen" in
6118             $define) dflt='y' ;;
6119         esac
6120         case "$i_dld" in
6121             $define) dflt='y' ;;
6122         esac
6123         : Does a dl_xxx.xs file exist for this operating system
6124         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
6125         ;;
6126 esac
6127 rp="Do you wish to use dynamic loading?"
6128 . ./myread
6129 usedl="$ans"
6130 case "$ans" in
6131 y*) usedl="$define"
6132         case "$dlsrc" in
6133         '')
6134                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
6135                         dflt="$dldir/dl_${osname}.xs"
6136                 elif $test "$d_dlopen" = "$define" ; then
6137                         dflt="$dldir/dl_dlopen.xs"
6138                 elif $test "$i_dld" = "$define" ; then
6139                         dflt="$dldir/dl_dld.xs"
6140                 else
6141                         dflt=''
6142                 fi
6143                 ;;
6144         *)      dflt="$dldir/$dlsrc"
6145                 ;;
6146         esac
6147     echo "The following dynamic loading files are available:"
6148         : Can not go over to $dldir because getfile has path hard-coded in.
6149         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
6150         rp="Source file to use for dynamic loading"
6151         fn="fne"
6152         gfpth="$src"
6153         . ./getfile
6154         usedl="$define"
6155         : emulate basename
6156         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
6157
6158         $cat << EOM
6159
6160 Some systems may require passing special flags to $cc -c to
6161 compile modules that will be used to create a shared library.
6162 To use no flags, say "none".
6163
6164 EOM
6165     case "$cccdlflags" in
6166     '') case "$gccversion" in
6167                 '') case "$osname" in
6168                         hpux)   dflt='+z' ;;
6169                         next)   dflt='none' ;;
6170                         irix*)  dflt='-KPIC' ;;
6171                         svr4*|esix*|solaris) dflt='-KPIC' ;;
6172                         sunos)  dflt='-pic' ;;
6173                         *)      dflt='none' ;;
6174                     esac
6175                         ;;
6176                 *)  case "$osname" in
6177                         svr4*|esix*|solaris) dflt='-fPIC' ;;
6178                         *)      dflt='-fpic' ;;
6179                     esac ;;
6180             esac ;;
6181         ' ') dflt='none' ;;
6182     *)  dflt="$cccdlflags" ;;
6183     esac
6184     rp="Any special flags to pass to $cc -c to compile shared library modules?"
6185     . ./myread
6186     case "$ans" in
6187     none) cccdlflags=' ' ;;
6188     *) cccdlflags="$ans" ;;
6189     esac
6190
6191     cat << EOM
6192
6193 Some systems use ld to create libraries that can be dynamically loaded,
6194 while other systems (such as those using ELF) use $cc.
6195
6196 EOM
6197         case "$ld" in
6198         '')     $cat >try.c <<'EOM'
6199 /* Test for whether ELF binaries are produced */
6200 #include <fcntl.h>
6201 #include <stdlib.h>
6202 int main() {
6203         char b[4];
6204         int i = open("a.out",O_RDONLY);
6205         if(i == -1) 
6206                 exit(1); /* fail */
6207         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
6208                 exit(0); /* succeed (yes, it's ELF) */
6209         else
6210                 exit(1); /* fail */
6211 }
6212 EOM
6213                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
6214                         cat <<EOM
6215 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
6216 EOM
6217                         dflt="$cc"
6218                 else
6219                         echo "I'll use ld to build dynamic libraries."
6220                         dflt='ld'
6221                 fi
6222                 rm -f try.c a.out
6223                 ;;
6224         *)      dflt="$ld"
6225                 ;;
6226         esac
6227
6228     rp="What command should be used to create dynamic libraries?"
6229     . ./myread
6230         ld="$ans"
6231
6232     cat << EOM
6233
6234 Some systems may require passing special flags to $ld to create a
6235 library that can be dynamically loaded.  If your ld flags include
6236 -L/other/path options to locate libraries outside your loader's normal
6237 search path, you may need to specify those -L options here as well.  To
6238 use no flags, say "none".
6239
6240 EOM
6241     case "$lddlflags" in
6242     '') case "$osname" in
6243                         beos) dflt='-nostart' ;;
6244                         hpux) dflt='-b';
6245                               case "$gccversion" in
6246                               '') dflt="$dflt +vnocompatwarnings" ;;
6247                               esac
6248                               ;;        
6249                         linux|irix*)    dflt='-shared' ;;
6250                         next)  dflt='none' ;;
6251                         solaris) dflt='-G' ;;
6252                         sunos) dflt='-assert nodefinitions' ;;
6253                         svr4*|esix*) dflt="-G $ldflags" ;;
6254                 *)     dflt='none' ;;
6255                         esac
6256                         ;;
6257     *) dflt="$lddlflags" ;;
6258     esac
6259
6260         : Try to guess additional flags to pick up local libraries.
6261         : Be careful not to append to a plain 'none'
6262         case "$dflt" in
6263         none) dflt='' ;;
6264         esac
6265         for thisflag in $ldflags; do
6266                 case "$thisflag" in
6267                 -L*)
6268                         case " $dflt " in
6269                         *" $thisflag "*) ;;
6270                         *) dflt="$dflt $thisflag" ;;
6271                         esac
6272                         ;;
6273                 esac
6274         done
6275
6276         case "$dflt" in
6277         ''|' ') dflt='none' ;;
6278         esac
6279
6280     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
6281     . ./myread
6282     case "$ans" in
6283     none) lddlflags=' ' ;;
6284     *) lddlflags="$ans" ;;
6285     esac
6286
6287         cat <<EOM
6288
6289 Some systems may require passing special flags to $cc to indicate that
6290 the resulting executable will use dynamic linking.  To use no flags,
6291 say "none".
6292
6293 EOM
6294     case "$ccdlflags" in
6295     '') case "$osname" in
6296                 hpux)   dflt='-Wl,-E' ;;
6297                 linux)  dflt='-rdynamic' ;;
6298                 next)   dflt='none' ;;
6299                 sunos)  dflt='none' ;;
6300                 *)      dflt='none' ;;
6301             esac ;;
6302     ' ')  dflt='none' ;;
6303     *)  dflt="$ccdlflags" ;;
6304     esac
6305     rp="Any special flags to pass to $cc to use dynamic linking?"
6306     . ./myread
6307     case "$ans" in
6308     none) ccdlflags=' ' ;;
6309     *) ccdlflags="$ans" ;;
6310     esac
6311     ;;
6312 *)  usedl="$undef"
6313         ld='ld'
6314     dlsrc='dl_none.xs'
6315     lddlflags=''
6316     ccdlflags=''
6317     ;;
6318 esac
6319
6320 also=''
6321 case "$usedl" in
6322 $undef)
6323         # No dynamic loading being used, so don't bother even to prompt.
6324         useshrplib='false'
6325         ;;
6326 *)      case "$useshrplib" in
6327         '')     case "$osname" in
6328                 svr4*|dgux|dynixptx|esix|powerux|beos|cygwin*)
6329                         dflt=y
6330                         also='Building a shared libperl is required for dynamic loading to work on your system.'
6331                         ;;
6332                 next*)
6333                         case "$osvers" in
6334                         4*)     dflt=y
6335                                 also='Building a shared libperl is needed for MAB support.'
6336                                 ;;
6337                         *)      dflt=n
6338                                 ;;
6339                         esac
6340                         ;;
6341                 *)      dflt=n
6342                         ;;
6343                 esac
6344                 ;;
6345         $define|true|[Yy]*)
6346                 dflt=y
6347                 ;;
6348         *)      dflt=n
6349                 ;;
6350         esac
6351         $cat << EOM
6352
6353 The perl executable is normally obtained by linking perlmain.c with
6354 libperl${_a}, any static extensions (usually just DynaLoader), and
6355 any other libraries needed on this system (such as -lm, etc.).  Since
6356 your system supports dynamic loading, it is probably possible to build
6357 a shared libperl.$so.  If you will have more than one executable linked
6358 to libperl.$so, this will significantly reduce the size of each
6359 executable, but it may have a noticeable affect on performance.  The
6360 default is probably sensible for your system.
6361 $also
6362
6363 EOM
6364         rp="Build a shared libperl.$so (y/n)"
6365         . ./myread
6366         case "$ans" in
6367         true|$define|[Yy]*)
6368                 useshrplib='true'  ;;
6369         *)      useshrplib='false' ;;
6370         esac
6371         ;;
6372 esac
6373
6374 case "$useshrplib" in
6375 true)
6376         case "$libperl" in
6377         '')
6378                 # Figure out a good name for libperl.so.  Since it gets stored in
6379                 # a version-specific architecture-dependent library, the version
6380                 # number isn't really that important, except for making cc/ld happy.
6381                 #
6382                 # A name such as libperl.so.3.1
6383                 majmin="libperl.$so.$patchlevel.$subversion"
6384                 # A name such as libperl.so.301
6385                 majonly=`echo $patchlevel $subversion |
6386                         $awk '{printf "%d%02d", $1, $2}'`
6387                 majonly=libperl.$so.$majonly
6388                 # I'd prefer to keep the os-specific stuff here to a minimum, and
6389                 # rely on figuring it out from the naming of libc.
6390                 case "${osname}${osvers}" in
6391                 next4*)
6392                         dflt=libperl.5.$so
6393                         # XXX How handle the --version stuff for MAB?
6394                         ;;
6395                 linux*)  # ld won't link with a bare -lperl otherwise.
6396                         dflt=libperl.$so
6397                         ;;
6398                 cygwin*) # include version
6399                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
6400                         ;;
6401                 *)      # Try to guess based on whether libc has major.minor.
6402                         case "$libc" in
6403                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
6404                         *libc.$so.[0-9]*) dflt=$majonly ;;
6405                         *)      dflt=libperl.$so ;;
6406                         esac
6407                         ;;
6408                 esac
6409                 ;;
6410         *)      dflt=$libperl
6411                 ;;
6412         esac
6413         cat << EOM
6414
6415 I need to select a good name for the shared libperl.  If your system uses
6416 library names with major and minor numbers, then you might want something
6417 like $majmin.  Alternatively, if your system uses a single version
6418 number for shared libraries, then you might want to use $majonly.
6419 Or, your system might be quite happy with a simple libperl.$so.
6420
6421 Since the shared libperl will get installed into a version-specific
6422 architecture-dependent directory, the version number of the shared perl
6423 library probably isn't important, so the default should be o.k.
6424
6425 EOM
6426         rp='What name do you want to give to the shared libperl?'
6427         . ./myread
6428         libperl=$ans
6429         echo "Ok, I'll use $libperl"
6430         ;;
6431 *)
6432         libperl="libperl${_a}"
6433         ;;
6434 esac
6435
6436 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
6437 case "$shrpdir" in
6438 '') ;;
6439 *)      $cat >&4 <<EOM
6440 WARNING:  Use of the shrpdir variable for the installation location of
6441 the shared $libperl is not supported.  It was never documented and
6442 will not work in this version.  Let me (perlbug@perl.com)
6443 know of any problems this may cause.
6444
6445 EOM
6446         case "$shrpdir" in
6447         "$archlibexp/CORE")
6448                 $cat >&4 <<EOM
6449 But your current setting of $shrpdir is
6450 the default anyway, so it's harmless.
6451 EOM
6452                 ;;
6453         *)
6454                 $cat >&4 <<EOM
6455 Further, your current attempted setting of $shrpdir
6456 conflicts with the value of $archlibexp/CORE
6457 that installperl will use.
6458 EOM
6459                 ;;
6460         esac
6461         ;;
6462 esac
6463
6464 # How will the perl executable find the installed shared $libperl?
6465 # Add $xxx to ccdlflags.
6466 # If we can't figure out a command-line option, use $shrpenv to
6467 # set env LD_RUN_PATH.  The main perl makefile uses this.
6468 shrpdir=$archlibexp/CORE
6469 xxx=''
6470 tmp_shrpenv=''
6471 if "$useshrplib"; then
6472     case "$osname" in 
6473         aix)
6474                 # We'll set it in Makefile.SH...
6475                 ;;
6476         solaris|netbsd)
6477                 xxx="-R $shrpdir"
6478                 ;;
6479         freebsd)
6480                 xxx="-Wl,-R$shrpdir"
6481                 ;;
6482         linux|irix*|dec_osf)
6483                 xxx="-Wl,-rpath,$shrpdir"
6484                 ;;
6485         next)
6486                 # next doesn't like the default...
6487                 ;;
6488         beos)
6489                 # beos doesn't like the default, either.
6490                 ;;
6491         hpux*)
6492                 # hpux doesn't like the default, either.
6493                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
6494                 ;;
6495         *)
6496                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
6497                 ;;
6498         esac
6499         case "$xxx" in
6500         '') ;;
6501         *)      
6502                 # Only add $xxx if it isn't already in ccdlflags.
6503                 case " $ccdlflags " in
6504                 *" $xxx "*)     ;;
6505                 *)      ccdlflags="$ccdlflags $xxx"
6506                         cat <<EOM >&4
6507
6508 Adding $xxx to the flags
6509 passed to $ld so that the perl executable will find the 
6510 installed shared $libperl.
6511
6512 EOM
6513                         ;;
6514                 esac
6515                 ;;
6516         esac
6517 fi
6518 # Fix ccdlflags in AIX for building external extensions.
6519 # (For building Perl itself bare -bE:perl.exp is needed,
6520 #  Makefile.SH takes care of this.)
6521 case "$osname" in
6522 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
6523 esac
6524 # Respect a hint or command-line value.
6525 case "$shrpenv" in
6526 '') shrpenv="$tmp_shrpenv" ;;
6527 esac
6528 case "$ldlibpthname" in
6529 '')     ldlibpthname=LD_LIBRARY_PATH ;;
6530 none)   ldlibpthname='' ;;
6531 esac
6532
6533 : determine where manual pages go
6534 set man1dir man1dir none
6535 eval $prefixit
6536 $cat <<EOM
6537
6538 $spackage has manual pages available in source form.
6539 EOM
6540 case "$nroff" in
6541 nroff)
6542         echo "However, you don't have nroff, so they're probably useless to you."
6543         case "$man1dir" in
6544         '') man1dir="none";;
6545         esac;;
6546 esac
6547 echo "If you don't want the manual sources installed, answer 'none'."
6548 case "$man1dir" in
6549 ' ') dflt=none
6550         ;;
6551 '')
6552         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
6553         lookpath="$lookpath $prefixexp/man/p_man/man1"
6554         lookpath="$lookpath $prefixexp/man/u_man/man1"
6555         lookpath="$lookpath $prefixexp/man/man.1"
6556         case "$sysman" in
6557         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
6558         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
6559         esac
6560         set dflt
6561         eval $prefixup
6562         ;;
6563 *)  dflt="$man1dir"
6564         ;;
6565 esac
6566 echo " "
6567 fn=dn+~
6568 rp="Where do the main $spackage manual pages (source) go?"
6569 . ./getfile
6570 if $test "X$man1direxp" != "X$ansexp"; then
6571         installman1dir=''
6572 fi
6573 man1dir="$ans"
6574 man1direxp="$ansexp"
6575 case "$man1dir" in
6576 '')     man1dir=' '
6577         installman1dir='';;
6578 esac
6579
6580 : Change installation prefix, if necessary.
6581 if $test X"$prefix" != X"$installprefix"; then
6582         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
6583 else
6584         installman1dir="$man1direxp"
6585 fi
6586
6587 : What suffix to use on installed man pages
6588
6589 case "$man1dir" in
6590 ' ')
6591         man1ext='0'
6592         ;;
6593 *)
6594         rp="What suffix should be used for the main $spackage man pages?"
6595         case "$man1ext" in
6596         '')     case "$man1dir" in
6597                 *1)  dflt=1 ;;
6598                 *1p) dflt=1p ;;
6599                 *1pm) dflt=1pm ;;
6600                 *l) dflt=l;;
6601                 *n) dflt=n;;
6602                 *o) dflt=o;;
6603                 *p) dflt=p;;
6604                 *C) dflt=C;;
6605                 *L) dflt=L;;
6606                 *L1) dflt=L1;;
6607                 *) dflt=1;;
6608                 esac
6609                 ;;
6610         *)      dflt="$man1ext";;
6611         esac
6612         . ./myread
6613         man1ext="$ans"
6614         ;;
6615 esac
6616
6617 : see if we can have long filenames
6618 echo " "
6619 rmlist="$rmlist /tmp/cf$$"
6620 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
6621 first=123456789abcdef
6622 second=/tmp/cf$$/$first
6623 $rm -f $first $second
6624 if (echo hi >$first) 2>/dev/null; then
6625         if $test -f 123456789abcde; then
6626                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
6627                 val="$undef"
6628         else
6629                 if (echo hi >$second) 2>/dev/null; then
6630                         if $test -f /tmp/cf$$/123456789abcde; then
6631                                 $cat <<'EOM'
6632 That's peculiar... You can have filenames longer than 14 characters, but only
6633 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
6634 I shall consider your system cannot support long filenames at all.
6635 EOM
6636                                 val="$undef"
6637                         else
6638                                 echo 'You can have filenames longer than 14 characters.' >&4
6639                                 val="$define"
6640                         fi
6641                 else
6642                         $cat <<'EOM'
6643 How confusing! Some of your filesystems are sane enough to allow filenames
6644 longer than 14 characters but some others like /tmp can't even think about them.
6645 So, for now on, I shall assume your kernel does not allow them at all.
6646 EOM
6647                         val="$undef"
6648                 fi
6649         fi
6650 else
6651         $cat <<'EOM'
6652 You can't have filenames longer than 14 chars.  You can't even think about them!
6653 EOM
6654         val="$undef"
6655 fi 
6656 set d_flexfnam
6657 eval $setvar
6658 $rm -rf /tmp/cf$$ 123456789abcde*
6659
6660 : determine where library module manual pages go
6661 set man3dir man3dir none
6662 eval $prefixit
6663 $cat <<EOM
6664
6665 $spackage has manual pages for many of the library modules.
6666 EOM
6667
6668 case "$nroff" in
6669 nroff)
6670         $cat <<'EOM'
6671 However, you don't have nroff, so they're probably useless to you.
6672 EOM
6673         case "$man3dir" in
6674         '') man3dir="none";;
6675         esac;;
6676 esac
6677
6678 case "$d_flexfnam" in
6679 undef)
6680         $cat <<'EOM'
6681 However, your system can't handle the long file names like File::Basename.3. 
6682 EOM
6683         case "$man3dir" in
6684         '') man3dir="none";;
6685         esac;;
6686 esac
6687
6688 echo "If you don't want the manual sources installed, answer 'none'."
6689 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6690 case "$man3dir" in
6691 '')     dflt=`echo $man1dir | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
6692         if $test -d "$privlib/man/man3"; then
6693                 cat <<EOM >&4
6694
6695 WARNING:  Previous versions of perl installed man3 pages into
6696 $privlib/man/man3.  This version will suggest a 
6697 new default of $dflt.  
6698 EOM
6699                 tdflt=$dflt
6700                 dflt='n'
6701                 rp='Do you wish to preserve the old behavior?(y/n)'
6702                 . ./myread
6703                 case "$ans" in
6704                 y*) dflt="$privlib/man/man3" ;;
6705                 *)  dflt=$tdflt ;;
6706                 esac
6707     fi
6708         ;;
6709 ' ') dflt=none;;
6710 *)      dflt="$man3dir" ;;
6711 esac
6712 echo " "
6713 fn=dn+~
6714 rp="Where do the $package library man pages (source) go?"
6715 . ./getfile
6716 man3dir="$ans"
6717 man3direxp="$ansexp"
6718 case "$man1dir" in
6719 '')     man3dir=' '
6720         installman3dir='';;
6721 esac
6722
6723 : Change installation prefix, if necessary.
6724 if $test X"$prefix" != X"$installprefix"; then
6725         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
6726 else
6727         installman3dir="$man3direxp"
6728 fi
6729
6730 : What suffix to use on installed man pages
6731 case "$man3dir" in
6732 ' ')
6733         man3ext='0'
6734         ;;
6735 *)
6736         rp="What suffix should be used for the $package library man pages?"
6737         case "$man3ext" in
6738         '')     case "$man3dir" in
6739                 *3)  dflt=3 ;;
6740                 *3p) dflt=3p ;;
6741                 *3pm) dflt=3pm ;;
6742                 *l) dflt=l;;
6743                 *n) dflt=n;;
6744                 *o) dflt=o;;
6745                 *p) dflt=p;;
6746                 *C) dflt=C;;
6747                 *L) dflt=L;;
6748                 *L3) dflt=L3;;
6749                 *) dflt=3;;
6750                 esac
6751                 ;;
6752         *)      dflt="$man3ext";;
6753         esac
6754         . ./myread
6755         man3ext="$ans"
6756         ;;
6757 esac
6758
6759 : see if we have to deal with yellow pages, now NIS.
6760 if $test -d /usr/etc/yp || $test -d /etc/yp; then
6761         if $test -f /usr/etc/nibindd; then
6762                 echo " "
6763                 echo "I'm fairly confident you're on a NeXT."
6764                 echo " "
6765                 rp='Do you get the hosts file via NetInfo?'
6766                 dflt=y
6767                 case "$hostcat" in
6768                 nidump*) ;;
6769                 '') ;;
6770                 *) dflt=n;;
6771                 esac
6772                 . ./myread
6773                 case "$ans" in
6774                 y*) hostcat='nidump hosts .';;
6775                 *)      case "$hostcat" in
6776                         nidump*) hostcat='';;
6777                         esac
6778                         ;;
6779                 esac
6780         fi
6781         case "$hostcat" in
6782         nidump*) ;;
6783         *)
6784                 case "$hostcat" in
6785                 *ypcat*) dflt=y;;
6786                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
6787                                 dflt=y
6788                         else
6789                                 dflt=n
6790                         fi;;
6791                 *) dflt=n;;
6792                 esac
6793                 echo " "
6794                 rp='Are you getting the hosts file via yellow pages?'
6795                 . ./myread
6796                 case "$ans" in
6797                 y*) hostcat='ypcat hosts';;
6798                 *) hostcat='cat /etc/hosts';;
6799                 esac
6800                 ;;
6801         esac
6802 fi
6803 case "$hostcat" in
6804 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
6805 esac
6806 case "$groupcat" in
6807 '') test -f /etc/group && groupcat='cat /etc/group';;
6808 esac
6809 case "$passcat" in
6810 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
6811 esac
6812
6813 : now get the host name
6814 echo " "
6815 echo "Figuring out host name..." >&4
6816 case "$myhostname" in
6817 '') cont=true
6818         echo 'Maybe "hostname" will work...'
6819         if tans=`sh -c hostname 2>&1` ; then
6820                 myhostname=$tans
6821                 phostname=hostname
6822                 cont=''
6823         fi
6824         ;;
6825 *) cont='';;
6826 esac
6827 if $test "$cont"; then
6828         if ./xenix; then
6829                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
6830                 if tans=`cat /etc/systemid 2>&1` ; then
6831                         myhostname=$tans
6832                         phostname='cat /etc/systemid'
6833                         echo "Whadyaknow.  Xenix always was a bit strange..."
6834                         cont=''
6835                 fi
6836         elif $test -r /etc/systemid; then
6837                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
6838         fi
6839 fi
6840 if $test "$cont"; then
6841         echo 'No, maybe "uuname -l" will work...'
6842         if tans=`sh -c 'uuname -l' 2>&1` ; then
6843                 myhostname=$tans
6844                 phostname='uuname -l'
6845         else
6846                 echo 'Strange.  Maybe "uname -n" will work...'
6847                 if tans=`sh -c 'uname -n' 2>&1` ; then
6848                         myhostname=$tans
6849                         phostname='uname -n'
6850                 else
6851                         echo 'Oh well, maybe I can mine it out of whoami.h...'
6852                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
6853                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
6854                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
6855                         else
6856                                 case "$myhostname" in
6857                                 '') echo "Does this machine have an identity crisis or something?"
6858                                         phostname='';;
6859                                 *)
6860                                         echo "Well, you said $myhostname before..."
6861                                         phostname='echo $myhostname';;
6862                                 esac
6863                         fi
6864                 fi
6865         fi
6866 fi
6867 : you do not want to know about this
6868 set $myhostname
6869 myhostname=$1
6870
6871 : verify guess
6872 if $test "$myhostname" ; then
6873         dflt=y
6874         rp='Your host name appears to be "'$myhostname'".'" Right?"
6875         . ./myread
6876         case "$ans" in
6877         y*) ;;
6878         *) myhostname='';;
6879         esac
6880 fi
6881
6882 : bad guess or no guess
6883 while $test "X$myhostname" = X ; do
6884         dflt=''
6885         rp="Please type the (one word) name of your host:"
6886         . ./myread
6887         myhostname="$ans"
6888 done
6889
6890 : translate upper to lower if necessary
6891 case "$myhostname" in
6892 *[A-Z]*)
6893         echo "(Normalizing case in your host name)"
6894         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
6895         ;;
6896 esac
6897
6898 case "$myhostname" in
6899 *.*)
6900         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
6901         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
6902         echo "(Trimming domain name from host name--host name is now $myhostname)"
6903         ;;
6904 *) case "$mydomain" in
6905         '')
6906                 {
6907                         test "X$hostcat" = "Xypcat hosts" &&
6908                         ypmatch "$myhostname" hosts 2>/dev/null |\
6909                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
6910                         $test -s hosts
6911                 } || {
6912                         test "X$hostcat" != "X" &&
6913                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
6914                                         /[       ]$myhostname[  . ]/p" > hosts
6915                 }
6916                 tmp_re="[       . ]"
6917                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
6918                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
6919                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
6920                         hosts | $sort | $uniq | \
6921                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
6922                 case `$echo X$dflt` in
6923                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
6924                         dflt=.
6925                         ;;
6926                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
6927                         ;;
6928                 esac
6929                 case "$dflt" in
6930                 .)
6931                         tans=`./loc resolv.conf X /etc /usr/etc`
6932                         if $test -f "$tans"; then
6933                                 echo "(Attempting domain name extraction from $tans)"
6934                                 dflt=.`$sed -n -e 's/   / /g' \
6935                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
6936                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6937                                 case "$dflt" in
6938                                 .) dflt=.`$sed -n -e 's/        / /g' \
6939                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
6940                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6941                                         ;;
6942                                 esac
6943                         fi
6944                         ;;
6945                 esac
6946                 case "$dflt" in
6947                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
6948                         dflt=.`sh -c domainname 2>/dev/null`
6949                         case "$dflt" in
6950                         '') dflt='.';;
6951                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
6952                         esac
6953                         ;;
6954                 esac
6955                 case "$dflt" in
6956                 .) echo "(Lost all hope -- silly guess then)"
6957                         dflt='.uucp'
6958                         ;;
6959                 esac
6960                 $rm -f hosts
6961                 ;;
6962         *) dflt="$mydomain";;
6963         esac;;
6964 esac
6965 echo " "
6966 rp="What is your domain name?"
6967 . ./myread
6968 tans="$ans"
6969 case "$ans" in
6970 '') ;;
6971 .*) ;;
6972 *) tans=".$tans";;
6973 esac
6974 mydomain="$tans"
6975
6976 : translate upper to lower if necessary
6977 case "$mydomain" in
6978 *[A-Z]*)
6979         echo "(Normalizing case in your domain name)"
6980         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
6981         ;;
6982 esac
6983
6984 : a little sanity check here
6985 case "$phostname" in
6986 '') ;;
6987 *)
6988         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
6989         $myhostname$mydomain|$myhostname) ;;
6990         *)
6991                 case "$phostname" in
6992                 sed*)
6993                         echo "(That doesn't agree with your whoami.h file, by the way.)"
6994                         ;;
6995                 *)
6996                         echo "(That doesn't agree with your $phostname command, by the way.)"
6997                         ;;
6998                 esac
6999         ;;
7000         esac
7001         ;;
7002 esac
7003
7004 $cat <<EOM
7005
7006 I need to get your e-mail address in Internet format if possible, i.e.
7007 something like user@host.domain. Please answer accurately since I have
7008 no easy means to double check it. The default value provided below
7009 is most probably close to reality but may not be valid from outside
7010 your organization...
7011
7012 EOM
7013 cont=x
7014 while test "$cont"; do
7015         case "$cf_email" in
7016         '') dflt="$cf_by@$myhostname$mydomain";;
7017         *) dflt="$cf_email";;
7018         esac
7019         rp='What is your e-mail address?'
7020         . ./myread
7021         cf_email="$ans"
7022         case "$cf_email" in
7023         *@*.*) cont='' ;;
7024         *)
7025                 rp='Address does not look like an Internet one.  Use it anyway?'
7026                 case "$fastread" in
7027                 yes) dflt=y ;;
7028                 *) dflt=n ;;
7029                 esac
7030                 . ./myread
7031                 case "$ans" in
7032                 y*) cont='' ;;
7033                 *) echo " " ;;
7034                 esac
7035                 ;;
7036         esac
7037 done
7038
7039 $cat <<EOM
7040
7041 If you or somebody else will be maintaining perl at your site, please
7042 fill in the correct e-mail address here so that they may be contacted
7043 if necessary. Currently, the "perlbug" program included with perl
7044 will send mail to this address in addition to perlbug@perl.com. You may
7045 enter "none" for no administrator.
7046
7047 EOM
7048 case "$perladmin" in
7049 '') dflt="$cf_email";;
7050 *) dflt="$perladmin";;
7051 esac
7052 rp='Perl administrator e-mail address'
7053 . ./myread
7054 perladmin="$ans"
7055
7056 : figure out how to guarantee perl startup
7057 case "$startperl" in
7058 '')
7059         case "$sharpbang" in
7060         *!)
7061                 $cat <<EOH
7062
7063 I can use the #! construct to start perl on your system. This will
7064 make startup of perl scripts faster, but may cause problems if you
7065 want to share those scripts and perl is not in a standard place
7066 ($binexp/perl) on all your platforms. The alternative is to force
7067 a shell by starting the script with a single ':' character.
7068
7069 EOH
7070                 dflt="$binexp/perl"
7071                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
7072                 . ./myread
7073                 case "$ans" in
7074                 none)   startperl=": # use perl";;
7075                 *)      startperl="#!$ans"
7076                         if $test 30 -lt `echo "$ans" | wc -c`; then
7077                                 $cat >&4 <<EOM
7078
7079 WARNING:  Some systems limit the #! command to 32 characters.
7080 If you experience difficulty running Perl scripts with #!, try
7081 installing Perl in a directory with a shorter pathname.
7082
7083 EOM
7084                         fi ;;
7085                 esac
7086                 ;;
7087         *) startperl=": # use perl"
7088                 ;;
7089         esac
7090         ;;
7091 esac
7092 echo "I'll use $startperl to start perl scripts."
7093
7094 : figure best path for perl in scripts
7095 case "$perlpath" in
7096 '')
7097         perlpath="$binexp/perl"
7098         case "$startperl" in
7099         *!*) ;;
7100         *)
7101                 $cat <<EOH
7102
7103 I will use the "eval 'exec'" idiom to start Perl on your system.
7104 I can use the full path of your Perl binary for this purpose, but
7105 doing so may cause problems if you want to share those scripts and
7106 Perl is not always in a standard place ($binexp/perl).
7107
7108 EOH
7109                 dflt="$binexp/perl"
7110                 rp="What path shall I use in \"eval 'exec'\"?"
7111                 . ./myread
7112                 perlpath="$ans"
7113                 ;;
7114         esac
7115         ;;
7116 esac
7117 case "$startperl" in
7118 *!*)    ;;
7119 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
7120 esac
7121
7122 : determine where public executable scripts go
7123 set scriptdir scriptdir
7124 eval $prefixit
7125 case "$scriptdir" in
7126 '')
7127         dflt="$bin"
7128         : guess some guesses
7129         $test -d /usr/share/scripts && dflt=/usr/share/scripts
7130         $test -d /usr/share/bin     && dflt=/usr/share/bin
7131         $test -d /usr/local/script  && dflt=/usr/local/script
7132         $test -d /usr/local/scripts && dflt=/usr/local/scripts
7133         $test -d $prefixexp/script  && dflt=$prefixexp/script
7134         set dflt
7135         eval $prefixup
7136         ;;
7137 *)  dflt="$scriptdir"
7138         ;;
7139 esac
7140 $cat <<EOM
7141  
7142 Some installations have a separate directory just for executable scripts so
7143 that they can mount it across multiple architectures but keep the scripts in
7144 one spot.  You might, for example, have a subdirectory of /usr/share for this.
7145 Or you might just lump your scripts in with all your other executables.
7146  
7147 EOM
7148 fn=d~
7149 rp='Where do you keep publicly executable scripts?'
7150 . ./getfile
7151 if $test "X$ansexp" != "X$scriptdirexp"; then
7152         installscript=''
7153 fi
7154 scriptdir="$ans"
7155 scriptdirexp="$ansexp"
7156 : Change installation prefix, if necessary.
7157 if $test X"$prefix" != X"$installprefix"; then
7158         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
7159 else
7160         installscript="$scriptdirexp"
7161 fi
7162
7163 : determine where site specific architecture-dependent libraries go.
7164 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
7165 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
7166 : sitelib may have an optional trailing /share.
7167 case "$sitearch" in
7168 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
7169         dflt="$dflt/$archname"
7170         ;;
7171 *)      dflt="$sitearch"
7172         ;;
7173 esac
7174 set sitearch sitearch none
7175 eval $prefixit
7176 $cat <<EOM
7177
7178 The installation process will also create a directory for
7179 architecture-dependent site-specific extensions and modules.
7180
7181 EOM
7182 fn=d~+
7183 rp='Pathname for the site-specific architecture-dependent library files?'
7184 . ./getfile
7185 sitearch="$ans"
7186 sitearchexp="$ansexp"
7187 : Change installation prefix, if necessary.
7188 if $test X"$prefix" != X"$installprefix"; then
7189         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
7190 else
7191         installsitearch="$sitearchexp"
7192 fi
7193
7194 : determine where add-on public executables go
7195 case "$sitebin" in
7196 '')     dflt=$siteprefix/bin ;;
7197 *)      dflt=$sitebin ;;
7198 esac
7199 fn=d~
7200 rp='Pathname where the add-on public executables should be installed?'
7201 . ./getfile
7202 sitebin="$ans"
7203 sitebinexp="$ansexp"
7204 : Change installation prefix, if necessary.
7205 if $test X"$prefix" != X"$installprefix"; then
7206         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
7207 else
7208         installsitebin="$sitebinexp"
7209 fi
7210
7211 : see if sqrtl exists
7212 set sqrtl d_sqrtl
7213 eval $inlibc
7214
7215 case "$ccflags" in
7216 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
7217 esac
7218
7219 case "$uselongdouble" in
7220 $define|true|[yY]*)     dflt='y';;
7221 *) dflt='n';;
7222 esac
7223 cat <<EOM
7224
7225 Perl can be built to take advantage of long doubles which
7226 (if available) may give more accuracy and range for floating point numbers.
7227
7228 If this doesn't make any sense to you, just accept the default '$dflt'.
7229 EOM
7230 rp='Try to use long doubles if available?'
7231 . ./myread
7232 case "$ans" in
7233 y|Y)    val="$define"   ;;
7234 *)      val="$undef"    ;;
7235 esac
7236 set uselongdouble
7237 eval $setvar
7238
7239 case "$uselongdouble" in
7240 true|[yY]*) uselongdouble="$define" ;;
7241 esac
7242
7243 case "$uselongdouble" in
7244 $define)
7245 : Look for a hint-file generated 'call-back-unit'.  If the
7246 : user has specified that long doubles should be used,
7247 : we may need to set or change some other defaults.
7248         if $test -f uselongdouble.cbu; then
7249                 echo "Your platform has some specific hints for long doubles, using them..."
7250                 . ./uselongdouble.cbu
7251         else
7252                 $cat <<EOM
7253 (Your platform doesn't have any specific hints for long doubles.)
7254 EOM
7255         fi
7256         ;;
7257 esac
7258
7259 case "$uselongdouble:$d_sqrtl" in
7260 $define:$undef)
7261                 $cat <<EOM >&4
7262
7263 *** You requested the use of long doubles but you do not seem to have
7264 *** the mathematic functions for long doubles.  I'm disabling the use
7265 *** of long doubles.
7266
7267 EOM
7268         uselongdouble=$undef
7269         ;;
7270 esac
7271
7272 case "$useperlio" in
7273 $define|true|[yY]*)     dflt='y';;
7274 *) dflt='n';;
7275 esac
7276 cat <<EOM
7277
7278 Previous version of $package used the standard IO mechanisms as defined
7279 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
7280 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
7281 the default.  This abstraction layer can use AT&T's sfio (if you already
7282 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
7283 problems with some extension modules.  Using PerlIO with stdio is safe,
7284 but it is slower than plain stdio and therefore is not the default.
7285
7286 If this doesn't make any sense to you, just accept the default '$dflt'.
7287 EOM
7288 rp='Use the experimental PerlIO abstraction layer?'
7289 . ./myread
7290 case "$ans" in
7291 y|Y) 
7292         val="$define"
7293         ;;     
7294 *)      
7295         echo "Ok, doing things the stdio way"
7296         val="$undef"
7297         ;;
7298 esac
7299 set useperlio
7300 eval $setvar 
7301
7302 case "$vendorprefix" in
7303 '')     d_vendorbin="$undef"
7304         vendorbin=''
7305         vendorbinexp=''
7306         ;;
7307 *)      d_vendorbin="$define"
7308         : determine where vendor-supplied executables go.
7309         case "$vendorbin" in
7310         '') dflt=$vendorprefix/bin ;;
7311         *)      dflt="$vendorbin" ;;
7312         esac
7313         fn=d~+
7314         rp='Pathname for the vendor-supplied executables directory?'
7315         . ./getfile
7316         vendorbin="$ans"
7317         vendorbinexp="$ansexp"
7318         ;;
7319 esac
7320 : Change installation prefix, if necessary.
7321 if $test X"$prefix" != X"$installprefix"; then
7322         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
7323 else
7324         installvendorbin="$vendorbinexp"
7325 fi
7326
7327 : see if qgcvt exists
7328 set qgcvt d_qgcvt
7329 eval $inlibc
7330
7331 : check for length of double
7332 echo " "
7333 case "$doublesize" in
7334 '')
7335         echo "Checking to see how big your double precision numbers are..." >&4
7336         $cat >try.c <<'EOCP'
7337 #include <stdio.h>
7338 int main()
7339 {
7340     printf("%d\n", (int)sizeof(double));
7341     exit(0);
7342 }
7343 EOCP
7344         set try
7345         if eval $compile_ok; then
7346                 doublesize=`./try`
7347                 echo "Your double is $doublesize bytes long."
7348         else
7349                 dflt='8'
7350                 echo "(I can't seem to compile the test program.  Guessing...)"
7351                 rp="What is the size of a double precision number (in bytes)?"
7352                 . ./myread
7353                 doublesize="$ans"
7354         fi
7355         ;;
7356 esac
7357 $rm -f try.c try
7358
7359 : check for long doubles
7360 echo " "
7361 echo "Checking to see if you have long double..." >&4
7362 echo 'int main() { long double x = 7.0; }' > try.c
7363 set try
7364 if eval $compile; then
7365         val="$define"
7366         echo "You have long double."
7367 else
7368         val="$undef"
7369         echo "You do not have long double."
7370 fi
7371 $rm try.*
7372 set d_longdbl
7373 eval $setvar
7374
7375 : check for length of long double
7376 case "${d_longdbl}${longdblsize}" in
7377 $define)
7378         echo " "
7379         echo "Checking to see how big your long doubles are..." >&4
7380         $cat >try.c <<'EOCP'
7381 #include <stdio.h>
7382 int main()
7383 {
7384         printf("%d\n", sizeof(long double));
7385 }
7386 EOCP
7387         set try
7388         set try
7389         if eval $compile; then
7390                 longdblsize=`./try$exe_ext`
7391                 echo "Your long doubles are $longdblsize bytes long."
7392         else
7393                 dflt='8'
7394                 echo " "
7395                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
7396                 rp="What is the size of a long double (in bytes)?"
7397                 . ./myread
7398                 longdblsize="$ans"
7399         fi
7400         if $test "X$doublesize" = "X$longdblsize"; then
7401                 echo "(That isn't any different from an ordinary double.)"
7402         fi      
7403         ;;
7404 esac
7405 $rm -f try.* try
7406
7407 echo " "
7408
7409 if $test X"$d_longdbl" = X"$define"; then
7410
7411 echo "Checking how to print long doubles..." >&4
7412
7413 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
7414         $cat >try.c <<'EOCP'
7415 #include <sys/types.h>
7416 #include <stdio.h>
7417 int main() {
7418   double d = 123.456;
7419   printf("%.3f\n", d);
7420 }
7421 EOCP
7422         set try
7423         if eval $compile; then
7424                 yyy=`./try$exe_ext`
7425                 case "$yyy" in
7426                 123.456)
7427                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
7428                         sPRIFldbl='"F"'; sPRIGldbl='"G"'; sPRIEldbl='"E"';
7429                         echo "We will use %f."
7430                         ;;
7431                 esac
7432         fi
7433 fi
7434
7435 if $test X"$sPRIfldbl" = X; then
7436         $cat >try.c <<'EOCP'
7437 #include <sys/types.h>
7438 #include <stdio.h>
7439 int main() {
7440   long double d = 123.456;
7441   printf("%.3llf\n", d);
7442 }
7443 EOCP
7444         set try
7445         if eval $compile; then
7446                 yyy=`./try$exe_ext`
7447                 case "$yyy" in
7448                 123.456)
7449                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
7450                         sPRIFldbl='"llF"'; sPRIGldbl='"llG"'; sPRIEldbl='"llE"';
7451                         echo "We will use %llf."
7452                         ;;
7453                 esac
7454         fi
7455 fi
7456
7457 if $test X"$sPRIfldbl" = X; then
7458         $cat >try.c <<'EOCP'
7459 #include <sys/types.h>
7460 #include <stdio.h>
7461 int main() {
7462   long double d = 123.456;
7463   printf("%.3Lf\n", d);
7464 }
7465 EOCP
7466         set try
7467         if eval $compile; then
7468                 yyy=`./try$exe_ext`
7469                 case "$yyy" in
7470                 123.456)
7471                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
7472                         sPRIFldbl='"LF"'; sPRIGldbl='"LG"'; sPRIEldbl='"LE"';
7473                         echo "We will use %Lf."
7474                         ;;
7475                 esac
7476         fi
7477 fi
7478
7479 if $test X"$sPRIfldbl" = X; then
7480         $cat >try.c <<'EOCP'
7481 #include <sys/types.h>
7482 #include <stdio.h>
7483 int main() {
7484   long double d = 123.456;
7485   printf("%.3lf\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='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
7494                         sPRIFldbl='"lF"'; sPRIGldbl='"lG"'; sPRIEldbl='"lE"';
7495                         echo "We will use %lf."
7496                         ;;
7497                 esac
7498         fi
7499 fi
7500
7501 if $test X"$sPRIfldbl" = X; then
7502         echo "Cannot figure out how to print long doubles." >&4
7503 fi
7504
7505 $rm -f try try.*
7506
7507 fi # d_longdbl
7508
7509 case "$sPRIfldbl" in
7510 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
7511         d_PRIFldbl="$undef"; d_PRIGldbl="$undef"; d_PRIEldbl="$undef"; 
7512         ;;
7513 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
7514         d_PRIFldbl="$define"; d_PRIGldbl="$define"; d_PRIEldbl="$define"; 
7515         ;;
7516 esac
7517
7518 : Check how to convert floats to strings.
7519 if test "X$d_Gconvert" = X; then
7520         echo " "
7521         echo "Checking for an efficient way to convert floats to strings."
7522         echo " " > try.c
7523         case "$uselongdouble" in
7524         "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
7525         esac
7526         case "$d_longdbl" in
7527         "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
7528         esac
7529         case "$d_PRIgldbl" in
7530         "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
7531         esac
7532         $cat >>try.c <<EOP
7533 #ifdef TRY_gconvert
7534 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
7535 char *myname = "gconvert";
7536 #endif
7537 #ifdef TRY_gcvt
7538 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
7539 char *myname = "gcvt";
7540 #endif
7541 #ifdef TRY_qgcvt
7542 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
7543 char *myname = "qgcvt";
7544 #define DOUBLETYPE long double
7545 #endif
7546 #ifdef TRY_sprintf
7547 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
7548 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
7549 #else
7550 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
7551 #endif
7552 char *myname = "sprintf";
7553 #endif
7554
7555 #ifndef DOUBLETYPE
7556 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
7557 #define DOUBLETYPE long double
7558 #else
7559 #define DOUBLETYPE double
7560 #endif
7561 #endif
7562
7563 #include <stdio.h>
7564
7565 #define I_STDLIB $i_stdlib
7566 #ifdef I_STDLIB
7567 #include <stdlib.h>
7568 #endif
7569
7570 int
7571 checkit(expect, got)
7572 char *expect;
7573 char *got;
7574 {
7575     if (strcmp(expect, got)) {
7576                 printf("%s oddity:  Expected %s, got %s\n",
7577                         myname, expect, got);
7578                 exit(1);
7579         }
7580 }
7581
7582 int main()
7583
7584         char buf[64]; 
7585         buf[63] = '\0';
7586
7587         /* This must be 1st test on (which?) platform */
7588         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
7589         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
7590         checkit("0.1", buf);
7591
7592         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
7593         checkit("1", buf);
7594
7595         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
7596         checkit("1.1", buf);
7597
7598         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
7599         checkit("1.01", buf);
7600
7601         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
7602         checkit("1.001", buf);
7603
7604         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
7605         checkit("1.0001", buf);
7606
7607         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
7608         checkit("1.00001", buf);
7609
7610         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
7611         checkit("1.000001", buf);
7612
7613         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
7614         checkit("0", buf);
7615
7616         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
7617         checkit("-1", buf);
7618
7619         /* Some Linux gcvt's give 1.e+5 here. */
7620         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
7621         checkit("100000", buf);
7622         
7623         /* Some Linux gcvt's give -1.e+5 here. */
7624         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
7625         checkit("-100000", buf);
7626
7627         exit(0);
7628 }
7629 EOP
7630         case "$d_Gconvert" in
7631         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
7632         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
7633         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
7634         *) xxx_list='gconvert gcvt sprintf' ;;
7635         esac
7636
7637         case "$d_longdbl$uselongdouble$d_qgcvt" in
7638         "$define$define$define") xxx_list="`echo $xxx_list|sed 's/gcvt/qgcvt gcvt/'`" ;;
7639         esac
7640
7641         for xxx_convert in $xxx_list; do
7642                 echo "Trying $xxx_convert..."
7643                 $rm -f try try$_o
7644                 set try -DTRY_$xxx_convert
7645                 if eval $compile; then
7646                         echo "$xxx_convert() found." >&4
7647                         if ./try; then
7648                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
7649                                 break;
7650                         else
7651                                 echo "...But $xxx_convert didn't work as I expected."
7652                         fi
7653                 else
7654                         echo "$xxx_convert NOT found." >&4
7655                 fi
7656         done
7657                 
7658         case "$xxx_convert" in
7659         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
7660         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
7661         qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
7662         *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
7663            "$define$define$define")
7664               d_Gconvert="sprintf((b),\"%.*$sPRIgldbl\",(n),(x))" ;;
7665            *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
7666            esac
7667            ;;  
7668         esac
7669 fi
7670
7671 : Initialize h_fcntl
7672 h_fcntl=false
7673
7674 : Initialize h_sysfile
7675 h_sysfile=false
7676
7677 : access call always available on UNIX
7678 set access d_access
7679 eval $inlibc
7680
7681 : locate the flags for 'access()'
7682 case "$d_access" in
7683 "$define")
7684         echo " "
7685         $cat >access.c <<'EOCP'
7686 #include <sys/types.h>
7687 #ifdef I_FCNTL
7688 #include <fcntl.h>
7689 #endif
7690 #ifdef I_SYS_FILE
7691 #include <sys/file.h>
7692 #endif
7693 #ifdef I_UNISTD
7694 #include <unistd.h>
7695 #endif
7696 int main() {
7697         exit(R_OK);
7698 }
7699 EOCP
7700         : check sys/file.h first, no particular reason here
7701         if $test `./findhdr sys/file.h` && \
7702                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
7703                 h_sysfile=true;
7704                 echo "<sys/file.h> defines the *_OK access constants." >&4
7705         elif $test `./findhdr fcntl.h` && \
7706                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
7707                 h_fcntl=true;
7708                 echo "<fcntl.h> defines the *_OK access constants." >&4
7709         elif $test `./findhdr unistd.h` && \
7710                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
7711                 echo "<unistd.h> defines the *_OK access constants." >&4
7712         else
7713                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
7714         fi
7715         ;;
7716 esac
7717 $rm -f access*
7718
7719 : see if accessx exists
7720 set accessx d_accessx
7721 eval $inlibc
7722
7723 : see if alarm exists
7724 set alarm d_alarm
7725 eval $inlibc
7726
7727 : see if atolf exists
7728 set atolf d_atolf
7729 eval $inlibc
7730
7731 : see if atoll exists
7732 set atoll d_atoll
7733 eval $inlibc
7734
7735 : Look for GNU-cc style attribute checking
7736 echo " "
7737 echo "Checking whether your compiler can handle __attribute__ ..." >&4
7738 $cat >attrib.c <<'EOCP'
7739 #include <stdio.h>
7740 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
7741 EOCP
7742 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
7743         if $contains 'warning' attrib.out >/dev/null 2>&1; then
7744                 echo "Your C compiler doesn't fully support __attribute__."
7745                 val="$undef"
7746         else
7747                 echo "Your C compiler supports __attribute__."
7748                 val="$define"
7749         fi
7750 else
7751         echo "Your C compiler doesn't seem to understand __attribute__ at all."
7752         val="$undef"
7753 fi
7754 set d_attribut
7755 eval $setvar
7756 $rm -f attrib*
7757
7758 : see if bcmp exists
7759 set bcmp d_bcmp
7760 eval $inlibc
7761
7762 : see if bcopy exists
7763 set bcopy d_bcopy
7764 eval $inlibc
7765
7766 : see if this is a unistd.h system
7767 set unistd.h i_unistd
7768 eval $inhdr
7769
7770 : see if getpgrp exists
7771 set getpgrp d_getpgrp
7772 eval $inlibc
7773
7774 case "$d_getpgrp" in
7775 "$define")
7776         echo " "
7777         echo "Checking to see which flavor of getpgrp is in use..."
7778         $cat >set.c <<EOP
7779 #$i_unistd I_UNISTD
7780 #include <sys/types.h>
7781 #ifdef I_UNISTD
7782 #  include <unistd.h>
7783 #endif
7784 int main()
7785 {
7786         if (getuid() == 0) {
7787                 printf("(I see you are running Configure as super-user...)\n");
7788                 setuid(1);
7789         }
7790 #ifdef TRY_BSD_PGRP
7791         if (getpgrp(1) == 0)
7792                 exit(0);
7793 #else
7794         if (getpgrp() > 0)
7795                 exit(0);
7796 #endif
7797         exit(1);
7798 }
7799 EOP
7800         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7801                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
7802                 val="$define"
7803         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7804                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
7805                 val="$undef"
7806         else
7807                 echo "I can't seem to compile and run the test program."
7808                 if ./usg; then
7809                         xxx="a USG one, i.e. you use getpgrp()."
7810                 else
7811                         # SVR4 systems can appear rather BSD-ish.
7812                         case "$i_unistd" in
7813                         $undef)
7814                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
7815                                 val="$define"
7816                                 ;;
7817                         $define)
7818                                 xxx="probably a USG one, i.e. you use getpgrp()."
7819                                 val="$undef"
7820                                 ;;
7821                         esac
7822                 fi
7823                 echo "Assuming your getpgrp is $xxx" >&4
7824         fi
7825         ;;
7826 *) val="$undef";;
7827 esac
7828 set d_bsdgetpgrp
7829 eval $setvar
7830 $rm -f set set.c
7831
7832 : see if setpgrp exists
7833 set setpgrp d_setpgrp
7834 eval $inlibc
7835
7836 case "$d_setpgrp" in
7837 "$define")
7838         echo " "
7839         echo "Checking to see which flavor of setpgrp is in use..."
7840         $cat >set.c <<EOP
7841 #$i_unistd I_UNISTD
7842 #include <sys/types.h>
7843 #ifdef I_UNISTD
7844 #  include <unistd.h>
7845 #endif
7846 int main()
7847 {
7848         if (getuid() == 0) {
7849                 printf("(I see you are running Configure as super-user...)\n");
7850                 setuid(1);
7851         }
7852 #ifdef TRY_BSD_PGRP
7853         if (-1 == setpgrp(1, 1))
7854                 exit(0);
7855 #else
7856         if (setpgrp() != -1)
7857                 exit(0);
7858 #endif
7859         exit(1);
7860 }
7861 EOP
7862         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7863                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
7864                 val="$define"
7865         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7866                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
7867                 val="$undef"
7868         else
7869                 echo "(I can't seem to compile and run the test program.)"
7870                 if ./usg; then
7871                         xxx="a USG one, i.e. you use setpgrp()."
7872                 else
7873                         # SVR4 systems can appear rather BSD-ish.
7874                         case "$i_unistd" in
7875                         $undef)
7876                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
7877                                 val="$define"
7878                                 ;;
7879                         $define)
7880                                 xxx="probably a USG one, i.e. you use setpgrp()."
7881                                 val="$undef"
7882                                 ;;
7883                         esac
7884                 fi
7885                 echo "Assuming your setpgrp is $xxx" >&4
7886         fi
7887         ;;
7888 *) val="$undef";;
7889 esac
7890 set d_bsdsetpgrp
7891 eval $setvar
7892 $rm -f set set.c
7893 : see if bzero exists
7894 set bzero d_bzero
7895 eval $inlibc
7896
7897 : see if signal is declared as pointer to function returning int or void
7898 echo " "
7899 xxx=`./findhdr signal.h`
7900 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
7901 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
7902         echo "You have int (*signal())() instead of void." >&4
7903         val="$undef"
7904 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
7905         echo "You have void (*signal())()." >&4
7906         val="$define"
7907 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
7908         echo "You have int (*signal())() instead of void." >&4
7909         val="$undef"
7910 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
7911         echo "You have void (*signal())()." >&4
7912         val="$define"
7913 else
7914         case "$d_voidsig" in
7915         '')
7916         echo "I can't determine whether signal handler returns void or int..." >&4
7917                 dflt=void
7918                 rp="What type does your signal handler return?"
7919                 . ./myread
7920                 case "$ans" in
7921                 v*) val="$define";;
7922                 *) val="$undef";;
7923                 esac;;
7924         "$define")
7925                 echo "As you already told me, signal handler returns void." >&4
7926                 val="$define"
7927                 ;;
7928         *)      echo "As you already told me, signal handler returns int." >&4
7929                 val="$undef"
7930                 ;;
7931         esac
7932 fi
7933 set d_voidsig
7934 eval $setvar
7935 case "$d_voidsig" in
7936 "$define") signal_t="void";;
7937 *) signal_t="int";;
7938 esac
7939 $rm -f $$.tmp
7940
7941 : check for ability to cast large floats to 32-bit ints.
7942 echo " "
7943 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
7944 if $test "$intsize" -ge 4; then
7945         xxx=int
7946 else
7947         xxx=long
7948 fi
7949 $cat >try.c <<EOCP
7950 #include <stdio.h>
7951 #include <sys/types.h>
7952 #include <signal.h>
7953 $signal_t blech(s) int s; { exit(3); }
7954 int main()
7955 {
7956         $xxx i32;
7957         double f, g;
7958         int result = 0;
7959         char str[16];
7960         signal(SIGFPE, blech);
7961
7962         /* Don't let compiler optimize the test away.  Store the number 
7963            in a writable string for gcc to pass to sscanf under HP/UX.
7964         */
7965         sprintf(str, "2147483647");
7966         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
7967         g = 10 * f;
7968         i32  = ($xxx) g;
7969
7970         /* x86 processors will probably give 0x8000 0000, which is a
7971        sign change.  We don't want that.  We want to mimic SPARC
7972            behavior here, which is to preserve the sign and give
7973            back 0x7fff ffff.
7974         */
7975         if (i32 != ($xxx) f)
7976                 result |= 1;
7977         exit(result);
7978 }
7979 EOCP
7980 set try
7981 if eval $compile_ok; then
7982         ./try
7983         yyy=$?
7984 else
7985         echo "(I can't seem to compile the test program--assuming it can't)"
7986         yyy=1
7987 fi
7988 case "$yyy" in
7989 0)      val="$define"
7990         echo "Yup, it can."
7991         ;;
7992 *)      val="$undef"
7993         echo "Nope, it can't."
7994         ;;
7995 esac
7996 set d_casti32
7997 eval $setvar
7998 $rm -f try try.*
7999
8000 : check for ability to cast negative floats to unsigned
8001 echo " "
8002 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
8003 $cat >try.c <<EOCP
8004 #include <stdio.h>
8005 #include <sys/types.h>
8006 #include <signal.h>
8007 $signal_t blech(s) int s; { exit(7); }
8008 $signal_t blech_in_list(s) int s; { exit(4); }
8009 unsigned long dummy_long(p) unsigned long p; { return p; }
8010 unsigned int dummy_int(p) unsigned int p; { return p; }
8011 unsigned short dummy_short(p) unsigned short p; { return p; }
8012 int main()
8013 {
8014         double f;
8015         unsigned long along;
8016         unsigned int aint;
8017         unsigned short ashort;
8018         int result = 0;
8019         char str[16];
8020         
8021         /* Frustrate gcc-2.7.2's optimizer which failed this test with
8022            a direct f = -123. assignment.  gcc-2.8.0 reportedly
8023            optimized the whole file away
8024         */
8025         /* Store the number in a writable string for gcc to pass to 
8026            sscanf under HP/UX.
8027         */
8028         sprintf(str, "-123");
8029         sscanf(str, "%lf", &f);  /* f = -123.; */
8030
8031         signal(SIGFPE, blech);
8032         along = (unsigned long)f;
8033         aint = (unsigned int)f;
8034         ashort = (unsigned short)f;
8035         if (along != (unsigned long)-123)
8036                 result |= 1;
8037         if (aint != (unsigned int)-123)
8038                 result |= 1;
8039         if (ashort != (unsigned short)-123)
8040                 result |= 1;
8041         sprintf(str, "1073741824.");
8042         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
8043         f = f + f;
8044         along = 0;
8045         along = (unsigned long)f;
8046         if (along != 0x80000000)
8047                 result |= 2;
8048         f -= 1.;
8049         along = 0;
8050         along = (unsigned long)f;
8051         if (along != 0x7fffffff)
8052                 result |= 1;
8053         f += 2.;
8054         along = 0;
8055         along = (unsigned long)f;
8056         if (along != 0x80000001)
8057                 result |= 2;
8058         if (result)
8059                 exit(result);
8060         signal(SIGFPE, blech_in_list);
8061         sprintf(str, "123.");
8062         sscanf(str, "%lf", &f);  /* f = 123.; */
8063         along = dummy_long((unsigned long)f);
8064         aint = dummy_int((unsigned int)f);
8065         ashort = dummy_short((unsigned short)f);
8066         if (along != (unsigned long)123)
8067                 result |= 4;
8068         if (aint != (unsigned int)123)
8069                 result |= 4;
8070         if (ashort != (unsigned short)123)
8071                 result |= 4;
8072         exit(result);
8073
8074 }
8075 EOCP
8076 set try
8077 if eval $compile_ok; then
8078         ./try
8079         castflags=$?
8080 else
8081         echo "(I can't seem to compile the test program--assuming it can't)"
8082         castflags=7
8083 fi
8084 case "$castflags" in
8085 0)      val="$define"
8086         echo "Yup, it can."
8087         ;;
8088 *)      val="$undef"
8089         echo "Nope, it can't."
8090         ;;
8091 esac
8092 set d_castneg
8093 eval $setvar
8094 $rm -f try.*
8095
8096 : see if vprintf exists
8097 echo " "
8098 if set vprintf val -f d_vprintf; eval $csym; $val; then
8099         echo 'vprintf() found.' >&4
8100         val="$define"
8101         $cat >vprintf.c <<'EOF'
8102 #include <varargs.h>
8103
8104 int main() { xxx("foo"); }
8105
8106 xxx(va_alist)
8107 va_dcl
8108 {
8109         va_list args;
8110         char buf[10];
8111
8112         va_start(args);
8113         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
8114 }
8115 EOF
8116         set vprintf
8117         if eval $compile && ./vprintf; then
8118                 echo "Your vsprintf() returns (int)." >&4
8119                 val2="$undef"
8120         else
8121                 echo "Your vsprintf() returns (char*)." >&4
8122                 val2="$define"
8123         fi
8124 else
8125         echo 'vprintf() NOT found.' >&4
8126                 val="$undef"
8127                 val2="$undef"
8128 fi
8129 set d_vprintf
8130 eval $setvar
8131 val=$val2
8132 set d_charvspr
8133 eval $setvar
8134
8135 : see if chown exists
8136 set chown d_chown
8137 eval $inlibc
8138
8139 : see if chroot exists
8140 set chroot d_chroot
8141 eval $inlibc
8142
8143 : see if chsize exists
8144 set chsize d_chsize
8145 eval $inlibc
8146
8147 : check for const keyword
8148 echo " "
8149 echo 'Checking to see if your C compiler knows about "const"...' >&4
8150 $cat >const.c <<'EOCP'
8151 typedef struct spug { int drokk; } spug;
8152 int main()
8153 {
8154         const char *foo;
8155         const spug y;
8156 }
8157 EOCP
8158 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
8159         val="$define"
8160         echo "Yup, it does."
8161 else
8162         val="$undef"
8163         echo "Nope, it doesn't."
8164 fi
8165 set d_const
8166 eval $setvar
8167
8168 : see if crypt exists
8169 echo " "
8170 if set crypt val -f d_crypt; eval $csym; $val; then
8171         echo 'crypt() found.' >&4
8172         val="$define"
8173         cryptlib=''
8174 else
8175         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
8176         if $test -z "$cryptlib"; then
8177                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
8178         else
8179                 cryptlib=-lcrypt
8180         fi
8181         if $test -z "$cryptlib"; then
8182                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
8183         else
8184                 cryptlib=-lcrypt
8185         fi
8186         if $test -z "$cryptlib"; then
8187                 cryptlib=`./loc libcrypt$_a "" $libpth`
8188         else
8189                 cryptlib=-lcrypt
8190         fi
8191         if $test -z "$cryptlib"; then
8192                 echo 'crypt() NOT found.' >&4
8193                 val="$undef"
8194         else
8195                 val="$define"
8196         fi
8197 fi
8198 set d_crypt
8199 eval $setvar
8200
8201 : get csh whereabouts
8202 case "$csh" in
8203 'csh') val="$undef" ;;
8204 *) val="$define" ;;
8205 esac
8206 set d_csh
8207 eval $setvar
8208 : Respect a hint or command line value for full_csh.
8209 case "$full_csh" in
8210 '') full_csh=$csh ;;
8211 esac
8212
8213 : see if cuserid exists
8214 set cuserid d_cuserid
8215 eval $inlibc
8216
8217 : see if this is a limits.h system
8218 set limits.h i_limits
8219 eval $inhdr
8220
8221 : see if this is a float.h system
8222 set float.h i_float
8223 eval $inhdr
8224
8225 : See if number of significant digits in a double precision number is known
8226 echo " "
8227 $cat >dbl_dig.c <<EOM
8228 #$i_limits I_LIMITS
8229 #$i_float I_FLOAT
8230 #ifdef I_LIMITS
8231 #include <limits.h>
8232 #endif
8233 #ifdef I_FLOAT
8234 #include <float.h>
8235 #endif
8236 #ifdef DBL_DIG
8237 printf("Contains DBL_DIG");
8238 #endif
8239 EOM
8240 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
8241 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
8242         echo "DBL_DIG found." >&4
8243         val="$define"
8244 else
8245         echo "DBL_DIG NOT found." >&4
8246         val="$undef"
8247 fi
8248 $rm -f dbl_dig.?
8249 set d_dbl_dig
8250 eval $setvar
8251
8252 : see if difftime exists
8253 set difftime d_difftime
8254 eval $inlibc
8255
8256 : see if this is a dirent system
8257 echo " "
8258 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
8259         val="$define"
8260         echo "<dirent.h> found." >&4
8261 else
8262         val="$undef"
8263         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
8264                 echo "<sys/dir.h> found." >&4
8265                 echo " "
8266         else
8267                 xinc=`./findhdr sys/ndir.h`
8268         fi
8269         echo "<dirent.h> NOT found." >&4
8270 fi
8271 set i_dirent
8272 eval $setvar
8273
8274 : Look for type of directory structure.
8275 echo " "
8276 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8277
8278 case "$direntrytype" in
8279 ''|' ')
8280         case "$i_dirent" in
8281         $define) guess1='struct dirent' ;;
8282         *) guess1='struct direct'  ;;
8283         esac
8284         ;;
8285 *)      guess1="$direntrytype"
8286         ;;
8287 esac
8288
8289 case "$guess1" in
8290 'struct dirent') guess2='struct direct' ;;
8291 *) guess2='struct dirent' ;;
8292 esac
8293                 
8294 if $contains "$guess1" try.c >/dev/null 2>&1; then
8295         direntrytype="$guess1"
8296         echo "Your directory entries are $direntrytype." >&4
8297 elif $contains "$guess2" try.c >/dev/null 2>&1; then
8298         direntrytype="$guess2"
8299         echo "Your directory entries seem to be $direntrytype." >&4
8300 else
8301         echo "I don't recognize your system's directory entries." >&4
8302         rp="What type is used for directory entries on this system?"
8303         dflt="$guess1"
8304         . ./myread
8305         direntrytype="$ans"
8306 fi
8307 $rm -f try.c
8308
8309
8310 : see if the directory entry stores field length
8311 echo " "
8312 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8313 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
8314         echo "Good, your directory entry keeps length information in d_namlen." >&4
8315         val="$define"
8316 else
8317         echo "Your directory entry does not know about the d_namlen field." >&4
8318         val="$undef"
8319 fi
8320 set d_dirnamlen
8321 eval $setvar
8322 $rm -f try.c
8323
8324 : see if dlerror exists
8325 xxx_runnm="$runnm"
8326 runnm=false
8327 set dlerror d_dlerror
8328 eval $inlibc
8329 runnm="$xxx_runnm"
8330
8331 : see if dlfcn is available
8332 set dlfcn.h i_dlfcn
8333 eval $inhdr
8334
8335 case "$usedl" in
8336 $define|y|true)
8337         $cat << EOM
8338
8339 On a few systems, the dynamically loaded modules that perl generates and uses
8340 will need a different extension than shared libs. The default will probably
8341 be appropriate.
8342
8343 EOM
8344         case "$dlext" in
8345         '')     dflt="$so" ;;
8346         *)      dflt="$dlext" ;;
8347         esac
8348         rp='What is the extension of dynamically loaded modules'
8349         . ./myread
8350         dlext="$ans"
8351         ;;
8352 *)
8353         dlext="none"
8354         ;;
8355 esac
8356
8357 : Check if dlsym need a leading underscore
8358 echo " "
8359 val="$undef"
8360
8361 case "$dlsrc" in
8362 dl_dlopen.xs)
8363         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
8364         $cat >dyna.c <<'EOM'
8365 fred () { }
8366 EOM
8367
8368 $cat >fred.c<<EOM
8369
8370 #include <stdio.h>
8371 #$i_dlfcn I_DLFCN
8372 #ifdef I_DLFCN
8373 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
8374 #else
8375 #include <sys/types.h>
8376 #include <nlist.h>
8377 #include <link.h>
8378 #endif
8379
8380 extern int fred() ;
8381
8382 int main()
8383 {
8384     void * handle ;
8385     void * symbol ;
8386 #ifndef RTLD_LAZY
8387     int mode = 1 ;
8388 #else
8389     int mode = RTLD_LAZY ;
8390 #endif
8391     handle = dlopen("./dyna.$dlext", mode) ;
8392     if (handle == NULL) {
8393         printf ("1\n") ;
8394         fflush (stdout) ;
8395         exit(0);
8396     }
8397     symbol = dlsym(handle, "fred") ;
8398     if (symbol == NULL) {
8399         /* try putting a leading underscore */
8400         symbol = dlsym(handle, "_fred") ;
8401         if (symbol == NULL) {
8402             printf ("2\n") ;
8403             fflush (stdout) ;
8404             exit(0);
8405         }
8406         printf ("3\n") ;
8407     }
8408     else
8409         printf ("4\n") ;
8410     fflush (stdout) ;
8411     exit(0);
8412 }
8413 EOM
8414         : Call the object file tmp-dyna.o in case dlext=o.
8415         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
8416                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
8417                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
8418                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
8419                 xxx=`./fred`
8420                 case $xxx in
8421                 1)      echo "Test program failed using dlopen." >&4
8422                         echo "Perhaps you should not use dynamic loading." >&4;;
8423                 2)      echo "Test program failed using dlsym." >&4
8424                         echo "Perhaps you should not use dynamic loading." >&4;;
8425                 3)      echo "dlsym needs a leading underscore" >&4
8426                         val="$define" ;;
8427                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
8428                 esac
8429         else
8430                 echo "I can't compile and run the test program." >&4
8431                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
8432         fi
8433         ;;
8434 esac
8435                 
8436 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
8437
8438 set d_dlsymun
8439 eval $setvar
8440
8441 hasproto='varname=$1; func=$2; shift; shift;
8442 while $test $# -ge 2; do
8443         case "$1" in
8444         $define) echo "#include <$2>";;
8445         esac ;
8446     shift 2;
8447 done > try.c;
8448 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
8449 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
8450         echo "$func() prototype found.";
8451         val="$define";
8452 else
8453         echo "$func() prototype NOT found.";
8454         val="$undef";
8455 fi;
8456 set $varname;
8457 eval $setvar;
8458 $rm -f try.c tryout.c'
8459
8460 : see if prototype for drand48 is available
8461 echo " "
8462 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
8463 eval $hasproto
8464
8465 : see if dup2 exists
8466 set dup2 d_dup2
8467 eval $inlibc
8468
8469 : see if eaccess exists
8470 set eaccess d_eaccess
8471 eval $inlibc
8472
8473 : see if endgrent exists
8474 set endgrent d_endgrent
8475 eval $inlibc
8476
8477 : see if endhostent exists
8478 set endhostent d_endhent
8479 eval $inlibc
8480
8481 : see if endnetent exists
8482 set endnetent d_endnent
8483 eval $inlibc
8484
8485 : see if endprotoent exists
8486 set endprotoent d_endpent
8487 eval $inlibc
8488
8489 : see if endpwent exists
8490 set endpwent d_endpwent
8491 eval $inlibc
8492
8493 : see if endservent exists
8494 set endservent d_endsent
8495 eval $inlibc
8496
8497 : see if endspent exists
8498 set endspent d_endspent
8499 eval $inlibc
8500
8501 : Locate the flags for 'open()'
8502 echo " "
8503 $cat >open3.c <<'EOCP'
8504 #include <sys/types.h>
8505 #ifdef I_FCNTL
8506 #include <fcntl.h>
8507 #endif
8508 #ifdef I_SYS_FILE
8509 #include <sys/file.h>
8510 #endif
8511 int main() {
8512         if(O_RDONLY);
8513 #ifdef O_TRUNC
8514         exit(0);
8515 #else
8516         exit(1);
8517 #endif
8518 }
8519 EOCP
8520 : check sys/file.h first to get FREAD on Sun
8521 if $test `./findhdr sys/file.h` && \
8522                 set open3 -DI_SYS_FILE && eval $compile; then
8523         h_sysfile=true;
8524         echo "<sys/file.h> defines the O_* constants..." >&4
8525         if ./open3; then
8526                 echo "and you have the 3 argument form of open()." >&4
8527                 val="$define"
8528         else
8529                 echo "but not the 3 argument form of open().  Oh, well." >&4
8530                 val="$undef"
8531         fi
8532 elif $test `./findhdr fcntl.h` && \
8533                 set open3 -DI_FCNTL && eval $compile; then
8534         h_fcntl=true;
8535         echo "<fcntl.h> defines the O_* constants..." >&4
8536         if ./open3; then
8537                 echo "and you have the 3 argument form of open()." >&4
8538                 val="$define"
8539         else
8540                 echo "but not the 3 argument form of open().  Oh, well." >&4
8541                 val="$undef"
8542         fi
8543 else
8544         val="$undef"
8545         echo "I can't find the O_* constant definitions!  You got problems." >&4
8546 fi
8547 set d_open3
8548 eval $setvar
8549 $rm -f open3*
8550
8551 : see which of string.h or strings.h is needed
8552 echo " "
8553 strings=`./findhdr string.h`
8554 if $test "$strings" && $test -r "$strings"; then
8555         echo "Using <string.h> instead of <strings.h>." >&4
8556         val="$define"
8557 else
8558         val="$undef"
8559         strings=`./findhdr strings.h`
8560         if $test "$strings" && $test -r "$strings"; then
8561                 echo "Using <strings.h> instead of <string.h>." >&4
8562         else
8563                 echo "No string header found -- You'll surely have problems." >&4
8564         fi
8565 fi
8566 set i_string
8567 eval $setvar
8568 case "$i_string" in
8569 "$undef") strings=`./findhdr strings.h`;;
8570 *)        strings=`./findhdr string.h`;;
8571 esac
8572
8573 : check for non-blocking I/O stuff
8574 case "$h_sysfile" in
8575 true) echo "#include <sys/file.h>" > head.c;;
8576 *)
8577         case "$h_fcntl" in
8578         true) echo "#include <fcntl.h>" > head.c;;
8579         *) echo "#include <sys/fcntl.h>" > head.c;;
8580         esac
8581         ;;
8582 esac
8583 echo " "
8584 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
8585 case "$o_nonblock" in
8586 '')
8587         $cat head.c > try.c
8588         $cat >>try.c <<'EOCP'
8589 #include <stdio.h>
8590 int main() {
8591 #ifdef O_NONBLOCK
8592         printf("O_NONBLOCK\n");
8593         exit(0);
8594 #endif
8595 #ifdef O_NDELAY
8596         printf("O_NDELAY\n");
8597         exit(0);
8598 #endif
8599 #ifdef FNDELAY
8600         printf("FNDELAY\n");
8601         exit(0);
8602 #endif
8603         exit(0);
8604 }
8605 EOCP
8606         set try
8607         if eval $compile_ok; then
8608                 o_nonblock=`./try`
8609                 case "$o_nonblock" in
8610                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
8611                 *) echo "Seems like we can use $o_nonblock.";;
8612                 esac
8613         else
8614                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
8615         fi
8616         ;;
8617 *) echo "Using $hint value $o_nonblock.";;
8618 esac
8619 $rm -f try try.* .out core
8620
8621 echo " "
8622 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
8623 case "$eagain" in
8624 '')
8625         $cat head.c > try.c
8626         $cat >>try.c <<EOCP
8627 #include <errno.h>
8628 #include <sys/types.h>
8629 #include <signal.h>
8630 #include <stdio.h> 
8631 #define MY_O_NONBLOCK $o_nonblock
8632 #ifndef errno  /* XXX need better Configure test */
8633 extern int errno;
8634 #endif
8635 #$i_unistd I_UNISTD
8636 #ifdef I_UNISTD
8637 #include <unistd.h>
8638 #endif
8639 #$i_string I_STRING
8640 #ifdef I_STRING
8641 #include <string.h>
8642 #else
8643 #include <strings.h>
8644 #endif
8645 $signal_t blech(x) int x; { exit(3); }
8646 EOCP
8647         $cat >> try.c <<'EOCP'
8648 int main()
8649 {
8650         int pd[2];
8651         int pu[2];
8652         char buf[1];
8653         char string[100];
8654
8655         pipe(pd);       /* Down: child -> parent */
8656         pipe(pu);       /* Up: parent -> child */
8657         if (0 != fork()) {
8658                 int ret;
8659                 close(pd[1]);   /* Parent reads from pd[0] */
8660                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
8661                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
8662                         exit(1);
8663                 signal(SIGALRM, blech);
8664                 alarm(5);
8665                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
8666                         exit(2);
8667                 sprintf(string, "%d\n", ret);
8668                 write(2, string, strlen(string));
8669                 alarm(0);
8670 #ifdef EAGAIN
8671                 if (errno == EAGAIN) {
8672                         printf("EAGAIN\n");
8673                         goto ok;
8674                 }
8675 #endif
8676 #ifdef EWOULDBLOCK
8677                 if (errno == EWOULDBLOCK)
8678                         printf("EWOULDBLOCK\n");
8679 #endif
8680         ok:
8681                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
8682                 sleep(2);                               /* Give it time to close our pipe */
8683                 alarm(5);
8684                 ret = read(pd[0], buf, 1);      /* Should read EOF */
8685                 alarm(0);
8686                 sprintf(string, "%d\n", ret);
8687                 write(3, string, strlen(string));
8688                 exit(0);
8689         }
8690
8691         close(pd[0]);                   /* We write to pd[1] */
8692         close(pu[1]);                   /* We read from pu[0] */
8693         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
8694         close(pd[1]);                   /* Pipe pd is now fully closed! */
8695         exit(0);                                /* Bye bye, thank you for playing! */
8696 }
8697 EOCP
8698         set try
8699         if eval $compile_ok; then
8700                 echo "$startsh" >mtry
8701                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
8702                 chmod +x mtry
8703                 ./mtry >/dev/null 2>&1
8704                 case $? in
8705                 0) eagain=`$cat try.out`;;
8706                 1) echo "Could not perform non-blocking setting!";;
8707                 2) echo "I did a successful read() for something that was not there!";;
8708                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
8709                 *) echo "Something terribly wrong happened during testing.";;
8710                 esac
8711                 rd_nodata=`$cat try.ret`
8712                 echo "A read() system call with no data present returns $rd_nodata."
8713                 case "$rd_nodata" in
8714                 0|-1) ;;
8715                 *)
8716                         echo "(That's peculiar, fixing that to be -1.)"
8717                         rd_nodata=-1
8718                         ;;
8719                 esac
8720                 case "$eagain" in
8721                 '')
8722                         echo "Forcing errno EAGAIN on read() with no data available."
8723                         eagain=EAGAIN
8724                         ;;
8725                 *)
8726                         echo "Your read() sets errno to $eagain when no data is available."
8727                         ;;
8728                 esac
8729                 status=`$cat try.err`
8730                 case "$status" in
8731                 0) echo "And it correctly returns 0 to signal EOF.";;
8732                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
8733                 *) echo "However, your read() returns '$status' on EOF??";;
8734                 esac
8735                 val="$define"
8736                 if test "$status" = "$rd_nodata"; then
8737                         echo "WARNING: you can't distinguish between EOF and no data!"
8738                         val="$undef"
8739                 fi
8740         else
8741                 echo "I can't compile the test program--assuming errno EAGAIN will do."
8742                 eagain=EAGAIN
8743         fi
8744         set d_eofnblk
8745         eval $setvar
8746         ;;
8747 *)
8748         echo "Using $hint value $eagain."
8749         echo "Your read() returns $rd_nodata when no data is present."
8750         case "$d_eofnblk" in
8751         "$define") echo "And you can see EOF because read() returns 0.";;
8752         "$undef") echo "But you can't see EOF status from read() returned value.";;
8753         *)
8754                 echo "(Assuming you can't see EOF status from read anyway.)"
8755                 d_eofnblk=$undef
8756                 ;;
8757         esac
8758         ;;
8759 esac
8760 $rm -f try try.* .out core head.c mtry
8761
8762 : see if fchmod exists
8763 set fchmod d_fchmod
8764 eval $inlibc
8765
8766 : see if fchown exists
8767 set fchown d_fchown
8768 eval $inlibc
8769
8770 : see if this is an fcntl system
8771 set fcntl d_fcntl
8772 eval $inlibc
8773
8774 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
8775 while $test $# -ge 2; do
8776         case "$1" in
8777         $define) echo "#include <$2>";;
8778         esac ;
8779     shift 2;
8780 done > try.c;
8781 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
8782 set try;
8783 if eval $compile; then
8784         val="$define";
8785 else
8786         val="$undef";
8787 fi;
8788 set $varname;
8789 eval $setvar;
8790 $rm -f try.c try.o'
8791
8792 socketlib=''
8793 sockethdr=''
8794 : see whether socket exists
8795 echo " "
8796 $echo $n "Hmm... $c" >&4
8797 if set socket val -f d_socket; eval $csym; $val; then
8798         echo "Looks like you have Berkeley networking support." >&4
8799         d_socket="$define"
8800         if set setsockopt val -f; eval $csym; $val; then
8801                 d_oldsock="$undef"
8802         else
8803                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
8804                 d_oldsock="$define"
8805         fi
8806 else
8807         if $contains socklib libc.list >/dev/null 2>&1; then
8808                 echo "Looks like you have Berkeley networking support." >&4
8809                 d_socket="$define"
8810                 : we will have to assume that it supports the 4.2 BSD interface
8811                 d_oldsock="$undef"
8812         else
8813                 echo "You don't have Berkeley networking in libc$_a..." >&4
8814                 if test "X$d_socket" = "X$define"; then
8815                    echo "...but you seem to believe that you have sockets." >&4
8816                 else
8817                         for net in net socket
8818                         do
8819                                 if test -f /usr/lib/lib$net$_a; then
8820                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
8821                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
8822                                         if $contains socket libc.list >/dev/null 2>&1; then
8823                                                 d_socket="$define"
8824                                                 socketlib="-l$net"
8825                                                 case "$net" in
8826                                                 net)
8827                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
8828                                                         sockethdr="-I/usr/netinclude"
8829                                                         ;;
8830                                                 esac
8831                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
8832                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
8833                                                         d_oldsock="$undef"
8834                                                 else
8835                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
8836                                                         d_oldsock="$define"
8837                                                 fi
8838                                                 break
8839                                         fi
8840                                 fi
8841                         done
8842                         if test "X$d_socket" != "X$define"; then
8843                            echo "or anywhere else I see." >&4
8844                            d_socket="$undef"
8845                            d_oldsock="$undef"
8846                         fi
8847                 fi
8848         fi
8849 fi
8850
8851 : see if socketpair exists
8852 set socketpair d_sockpair
8853 eval $inlibc
8854
8855
8856 echo " "
8857 echo "Checking the availability of certain socket constants..." >& 4
8858 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
8859         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
8860         $cat >try.c <<EOF
8861 #include <sys/types.h>
8862 #include <sys/socket.h>
8863 int main() {
8864     int i = $ENUM;
8865 }
8866 EOF
8867         val="$undef"
8868         set try; if eval $compile; then
8869                 val="$define"
8870         fi
8871         set d_${enum}; eval $setvar
8872         $rm -f try.c try
8873 done
8874
8875 : see if sys/select.h has to be included
8876 set sys/select.h i_sysselct
8877 eval $inhdr
8878
8879 : see if we should include time.h, sys/time.h, or both
8880 echo " "
8881 if test "X$timeincl" = X; then
8882         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
8883         $echo $n "I'm now running the test program...$c"
8884         $cat >try.c <<'EOCP'
8885 #include <sys/types.h>
8886 #ifdef I_TIME
8887 #include <time.h>
8888 #endif
8889 #ifdef I_SYSTIME
8890 #ifdef SYSTIMEKERNEL
8891 #define KERNEL
8892 #endif
8893 #include <sys/time.h>
8894 #endif
8895 #ifdef I_SYSSELECT
8896 #include <sys/select.h>
8897 #endif
8898 int main()
8899 {
8900         struct tm foo;
8901 #ifdef S_TIMEVAL
8902         struct timeval bar;
8903 #endif
8904 #ifdef S_TIMEZONE
8905         struct timezone tzp;
8906 #endif
8907         if (foo.tm_sec == foo.tm_sec)
8908                 exit(0);
8909 #ifdef S_TIMEVAL
8910         if (bar.tv_sec == bar.tv_sec)
8911                 exit(0);
8912 #endif
8913         exit(1);
8914 }
8915 EOCP
8916         flags=''
8917         for s_timezone in '-DS_TIMEZONE' ''; do
8918         sysselect=''
8919         for s_timeval in '-DS_TIMEVAL' ''; do
8920         for i_systimek in '' '-DSYSTIMEKERNEL'; do
8921         for i_time in '' '-DI_TIME'; do
8922         for i_systime in '-DI_SYSTIME' ''; do
8923                 case "$flags" in
8924                 '') $echo $n ".$c"
8925                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
8926                         if eval $compile; then
8927                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
8928                                 shift
8929                                 flags="$*"
8930                                 echo " "
8931                                 $echo $n "Succeeded with $flags$c"
8932                         fi
8933                         ;;
8934                 esac
8935         done
8936         done
8937         done
8938         done
8939         done
8940         timeincl=''
8941         echo " "
8942         case "$flags" in
8943         *SYSTIMEKERNEL*) i_systimek="$define"
8944                 timeincl=`./findhdr sys/time.h`
8945                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
8946         *) i_systimek="$undef";;
8947         esac
8948         case "$flags" in
8949         *I_TIME*) i_time="$define"
8950                 timeincl=`./findhdr time.h`" $timeincl"
8951                 echo "We'll include <time.h>." >&4;;
8952         *) i_time="$undef";;
8953         esac
8954         case "$flags" in
8955         *I_SYSTIME*) i_systime="$define"
8956                 timeincl=`./findhdr sys/time.h`" $timeincl"
8957                 echo "We'll include <sys/time.h>." >&4;;
8958         *) i_systime="$undef";;
8959         esac
8960         $rm -f try.c try
8961 fi
8962
8963 : check for fd_set items
8964 $cat <<EOM
8965
8966 Checking to see how well your C compiler handles fd_set and friends ...
8967 EOM
8968 $cat >fd_set.c <<EOCP
8969 #$i_systime I_SYS_TIME
8970 #$i_sysselct I_SYS_SELECT
8971 #$d_socket HAS_SOCKET
8972 #include <sys/types.h>
8973 #ifdef HAS_SOCKET
8974 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
8975 #endif
8976 #ifdef I_SYS_TIME
8977 #include <sys/time.h>
8978 #endif
8979 #ifdef I_SYS_SELECT
8980 #include <sys/select.h>
8981 #endif
8982 int main() {
8983         fd_set fds;
8984
8985 #ifdef TRYBITS
8986         if(fds.fds_bits);
8987 #endif
8988
8989 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
8990         exit(0);
8991 #else
8992         exit(1);
8993 #endif
8994 }
8995 EOCP
8996 set fd_set -DTRYBITS
8997 if eval $compile; then
8998         d_fds_bits="$define"
8999         d_fd_set="$define"
9000         echo "Well, your system knows about the normal fd_set typedef..." >&4
9001         if ./fd_set; then
9002                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
9003                 d_fd_macros="$define"
9004         else
9005                 $cat >&4 <<'EOM'
9006 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
9007 EOM
9008                 d_fd_macros="$undef"
9009         fi
9010 else
9011         $cat <<'EOM'
9012 Hmm, your compiler has some difficulty with fd_set.  Checking further...
9013 EOM
9014         set fd_set
9015         if eval $compile; then
9016                 d_fds_bits="$undef"
9017                 d_fd_set="$define"
9018                 echo "Well, your system has some sort of fd_set available..." >&4
9019                 if ./fd_set; then
9020                         echo "and you have the normal fd_set macros." >&4
9021                         d_fd_macros="$define"
9022                 else
9023                         $cat <<'EOM'
9024 but not the normal fd_set macros!  Gross!  More work for me...
9025 EOM
9026                         d_fd_macros="$undef"
9027                 fi
9028         else
9029         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
9030                 d_fd_set="$undef"
9031                 d_fds_bits="$undef"
9032                 d_fd_macros="$undef"
9033         fi
9034 fi
9035 $rm -f fd_set*
9036
9037 : see if fgetpos exists
9038 set fgetpos d_fgetpos
9039 eval $inlibc
9040
9041 : see if flock exists
9042 set flock d_flock
9043 eval $inlibc
9044
9045 : see if fork exists
9046 set fork d_fork
9047 eval $inlibc
9048
9049 : see if pathconf exists
9050 set pathconf d_pathconf
9051 eval $inlibc
9052
9053 : see if fpathconf exists
9054 set fpathconf d_fpathconf
9055 eval $inlibc
9056
9057
9058 : check for fpos64_t
9059 echo " "
9060 echo "Checking to see if you have fpos64_t..." >&4
9061 $cat >try.c <<EOCP
9062 #include <stdio.h>
9063 int main() { fpos64_t x = 7; }
9064 EOCP
9065 set try
9066 if eval $compile; then
9067         val="$define"
9068         echo "You have fpos64_t."
9069 else
9070         val="$undef"
9071         echo "You do not have fpos64_t."
9072         case "$fpossize" in
9073         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
9074         esac
9075 fi
9076 $rm -f try.* try
9077 set d_fpos64_t
9078 eval $setvar
9079
9080 hasstruct='varname=$1; struct=$2; shift; shift;
9081 while $test $# -ge 2; do
9082         case "$1" in
9083         $define) echo "#include <$2>";;
9084         esac ;
9085     shift 2;
9086 done > try.c;
9087 echo "int main () { struct $struct foo; }" >> try.c;
9088 set try;
9089 if eval $compile; then
9090         val="$define";
9091 else
9092         val="$undef";
9093 fi;
9094 set $varname;
9095 eval $setvar;
9096 $rm -f try.c try.o'
9097
9098 : see if this is a sys/param system
9099 set sys/param.h i_sysparam
9100 eval $inhdr
9101
9102 : see if this is a sys/mount.h system
9103 set sys/mount.h i_sysmount
9104 eval $inhdr
9105
9106 : see if sys/types.h has to be included
9107 set sys/types.h i_systypes
9108 eval $inhdr
9109
9110
9111 echo " "
9112 echo "Checking to see if your system supports struct fs_data..." >&4
9113 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
9114 eval $hasstruct
9115 case "$d_fs_data_s" in
9116 "$define")      echo "Yes, it does."   ;;
9117 *)              echo "No, it doesn't." ;;
9118 esac
9119
9120 : see if fseeko exists
9121 set fseeko d_fseeko
9122 eval $inlibc
9123 case "$longsize" in
9124 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
9125 esac
9126
9127 : see if fsetpos exists
9128 set fsetpos d_fsetpos
9129 eval $inlibc
9130
9131
9132 : see if fstatfs exists
9133 set fstatfs d_fstatfs
9134 eval $inlibc
9135
9136
9137 : see if statvfs exists
9138 set statvfs d_statvfs
9139 eval $inlibc
9140
9141 : see if fstatvfs exists
9142 set fstatvfs d_fstatvfs
9143 eval $inlibc
9144
9145
9146 : see if ftello exists
9147 set ftello d_ftello
9148 eval $inlibc
9149 case "$longsize" in
9150 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
9151 esac
9152
9153 : see if getcwd exists
9154 set getcwd d_getcwd
9155 eval $inlibc
9156
9157
9158 : see if getfsstat exists
9159 set getfsstat d_getfsstat
9160 eval $inlibc
9161
9162 : see if getgrent exists
9163 set getgrent d_getgrent
9164 eval $inlibc
9165
9166 : see if gethostbyaddr exists
9167 set gethostbyaddr d_gethbyaddr
9168 eval $inlibc
9169
9170 : see if gethostbyname exists
9171 set gethostbyname d_gethbyname
9172 eval $inlibc
9173
9174 : see if gethostent exists
9175 set gethostent d_gethent
9176 eval $inlibc
9177
9178 : see how we will look up host name
9179 echo " "
9180 call=''
9181 if set gethostname val -f d_gethname; eval $csym; $val; then
9182         echo 'gethostname() found.' >&4
9183         d_gethname="$define"
9184         call=gethostname
9185 fi
9186 if set uname val -f d_uname; eval $csym; $val; then
9187         if ./xenix; then
9188                 $cat <<'EOM'
9189 uname() was found, but you're running xenix, and older versions of xenix
9190 have a broken uname(). If you don't really know whether your xenix is old
9191 enough to have a broken system call, use the default answer.
9192
9193 EOM
9194                 dflt=y
9195                 case "$d_uname" in
9196                 "$define") dflt=n;;
9197                 esac
9198                 rp='Is your uname() broken?'
9199                 . ./myread
9200                 case "$ans" in
9201                 n*) d_uname="$define"; call=uname;;
9202                 esac
9203         else
9204                 echo 'uname() found.' >&4
9205                 d_uname="$define"
9206                 case "$call" in
9207                 '') call=uname ;;
9208                 esac
9209         fi
9210 fi
9211 case "$d_gethname" in
9212 '') d_gethname="$undef";;
9213 esac
9214 case "$d_uname" in
9215 '') d_uname="$undef";;
9216 esac
9217 case "$d_uname$d_gethname" in
9218 *define*)
9219         dflt=n
9220         cat <<EOM
9221  
9222 Every now and then someone has a $call() that lies about the hostname
9223 but can't be fixed for political or economic reasons.  If you wish, I can
9224 pretend $call() isn't there and maybe compute hostname at run-time
9225 thanks to the '$phostname' command.
9226
9227 EOM
9228         rp="Shall I ignore $call() from now on?"
9229         . ./myread
9230         case "$ans" in
9231         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
9232         esac;;
9233 esac
9234 case "$phostname" in
9235 '') aphostname='';;
9236 *) case "$aphostname" in
9237         /*) ;;
9238         *) set X $phostname
9239                 shift
9240                 file=$1
9241                 shift
9242                 file=`./loc $file $file $pth`
9243                 aphostname=`echo $file $*`
9244                 ;;
9245         esac
9246         ;;
9247 esac
9248 case "$d_uname$d_gethname" in
9249 *define*) ;;
9250 *)
9251         case "$phostname" in
9252         '')
9253                 echo "There will be no way for $package to get your hostname." >&4;;
9254         *)
9255         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
9256                 ;;
9257         esac;;
9258 esac
9259 case "$d_phostname" in
9260 '') d_phostname="$undef";;
9261 esac
9262
9263 : see if this is a netdb.h system
9264 set netdb.h i_netdb
9265 eval $inhdr
9266
9267 : see if prototypes for various gethostxxx netdb.h functions are available
9268 echo " "
9269 set d_gethostprotos gethostent $i_netdb netdb.h
9270 eval $hasproto
9271
9272 : see if getlogin exists
9273 set getlogin d_getlogin
9274 eval $inlibc
9275
9276 : see if getmnt exists
9277 set getmnt d_getmnt
9278 eval $inlibc
9279
9280 : see if getmntent exists
9281 set getmntent d_getmntent
9282 eval $inlibc
9283
9284 : see if getnetbyaddr exists
9285 set getnetbyaddr d_getnbyaddr
9286 eval $inlibc
9287
9288 : see if getnetbyname exists
9289 set getnetbyname d_getnbyname
9290 eval $inlibc
9291
9292 : see if getnetent exists
9293 set getnetent d_getnent
9294 eval $inlibc
9295
9296 : see if prototypes for various getnetxxx netdb.h functions are available
9297 echo " "
9298 set d_getnetprotos getnetent $i_netdb netdb.h
9299 eval $hasproto
9300
9301
9302 : see if getprotobyname exists
9303 set getprotobyname d_getpbyname
9304 eval $inlibc
9305
9306 : see if getprotobynumber exists
9307 set getprotobynumber d_getpbynumber
9308 eval $inlibc
9309
9310 : see if getprotoent exists
9311 set getprotoent d_getpent
9312 eval $inlibc
9313
9314 : see if getpgid exists
9315 set getpgid d_getpgid
9316 eval $inlibc
9317
9318 : see if getpgrp2 exists
9319 set getpgrp2 d_getpgrp2
9320 eval $inlibc
9321
9322 : see if getppid exists
9323 set getppid d_getppid
9324 eval $inlibc
9325
9326 : see if getpriority exists
9327 set getpriority d_getprior
9328 eval $inlibc
9329
9330 : see if prototypes for various getprotoxxx netdb.h functions are available
9331 echo " "
9332 set d_getprotoprotos getprotoent $i_netdb netdb.h
9333 eval $hasproto
9334
9335 : see if getpwent exists
9336 set getpwent d_getpwent
9337 eval $inlibc
9338
9339
9340 : see if getservbyname exists
9341 set getservbyname d_getsbyname
9342 eval $inlibc
9343
9344 : see if getservbyport exists
9345 set getservbyport d_getsbyport
9346 eval $inlibc
9347
9348 : see if getservent exists
9349 set getservent d_getsent
9350 eval $inlibc
9351
9352 : see if prototypes for various getservxxx netdb.h functions are available
9353 echo " "
9354 set d_getservprotos getservent $i_netdb netdb.h
9355 eval $hasproto
9356
9357 : see if getspent exists
9358 set getspent d_getspent
9359 eval $inlibc
9360
9361 : see if getspnam exists
9362 set getspnam d_getspnam
9363 eval $inlibc
9364
9365 : see if gettimeofday or ftime exists
9366 set gettimeofday d_gettimeod
9367 eval $inlibc
9368 case "$d_gettimeod" in
9369 "$undef")
9370         set ftime d_ftime 
9371         eval $inlibc
9372         ;;
9373 *)
9374         val="$undef"; set d_ftime; eval $setvar
9375         ;;
9376 esac
9377 case "$d_gettimeod$d_ftime" in
9378 "$undef$undef")
9379         echo " "
9380         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
9381         ;;
9382 esac
9383
9384 : see if this is an grp system
9385 set grp.h i_grp
9386 eval $inhdr
9387
9388 case "$i_grp" in
9389 $define)
9390         xxx=`./findhdr grp.h`
9391         $cppstdin $cppflags $cppminus < $xxx >$$.h
9392
9393         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
9394                 val="$define"
9395         else
9396                 val="$undef"
9397         fi
9398         set d_grpasswd
9399         eval $setvar
9400
9401         $rm -f $$.h
9402         ;;
9403 *)
9404         val="$undef";
9405         set d_grpasswd; eval $setvar
9406         ;;
9407 esac
9408
9409 : see if hasmntopt exists
9410 set hasmntopt d_hasmntopt
9411 eval $inlibc
9412
9413 : see if this is a netinet/in.h or sys/in.h system
9414 set netinet/in.h i_niin sys/in.h i_sysin
9415 eval $inhdr
9416
9417 : see if arpa/inet.h has to be included
9418 set arpa/inet.h i_arpainet
9419 eval $inhdr
9420
9421 : see if htonl --and friends-- exists
9422 val=''
9423 set htonl val
9424 eval $inlibc
9425
9426 : Maybe they are macros.
9427 case "$val" in
9428 $undef)
9429         $cat >htonl.c <<EOM
9430 #include <stdio.h>
9431 #include <sys/types.h>
9432 #$i_niin I_NETINET_IN
9433 #$i_sysin I_SYS_IN
9434 #$i_arpainet I_ARPA_INET
9435 #ifdef I_NETINET_IN
9436 #include <netinet/in.h>
9437 #endif
9438 #ifdef I_SYS_IN
9439 #include <sys/in.h>
9440 #endif
9441 #ifdef I_ARPA_INET
9442 #include <arpa/inet.h>
9443 #endif
9444 #ifdef htonl
9445 printf("Defined as a macro.");
9446 #endif
9447 EOM
9448         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
9449         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
9450                 val="$define"
9451                 echo "But it seems to be defined as a macro." >&4
9452         fi
9453         $rm -f htonl.?
9454         ;;
9455 esac
9456 set d_htonl
9457 eval $setvar
9458
9459 : see if iconv exists
9460 set iconv d_iconv
9461 eval $inlibc
9462
9463 : index or strchr
9464 echo " "
9465 if set index val -f; eval $csym; $val; then
9466         if set strchr val -f d_strchr; eval $csym; $val; then
9467                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
9468                         val="$define"
9469                         vali="$undef"
9470                         echo "strchr() found." >&4
9471                 else
9472                         val="$undef"
9473                         vali="$define"
9474                         echo "index() found." >&4
9475                 fi
9476         else
9477                 val="$undef"
9478                 vali="$define"
9479                 echo "index() found." >&4
9480         fi
9481 else
9482         if set strchr val -f d_strchr; eval $csym; $val; then
9483                 val="$define"
9484                 vali="$undef"
9485                 echo "strchr() found." >&4
9486         else
9487                 echo "No index() or strchr() found!" >&4
9488                 val="$undef"
9489                 vali="$undef"
9490         fi
9491 fi
9492 set d_strchr; eval $setvar
9493 val="$vali"
9494 set d_index; eval $setvar
9495
9496 : check whether inet_aton exists
9497 set inet_aton d_inetaton
9498 eval $inlibc
9499
9500 : see if inttypes.h is available
9501 : we want a real compile instead of Inhdr because some systems
9502 : have an inttypes.h which includes non-existent headers
9503 echo " "
9504 $cat >try.c <<EOCP
9505 #include <inttypes.h>
9506 int main() {
9507         static int32_t foo32 = 0x12345678;
9508 }
9509 EOCP
9510 set try
9511 if eval $compile; then
9512         echo "<inttypes.h> found." >&4
9513         val="$define"
9514 else
9515         echo "<inttypes.h> NOT found." >&4
9516         val="$undef"
9517 fi
9518 $rm -f try.c try
9519 set i_inttypes
9520 eval $setvar
9521
9522 : check for int64_t
9523 echo " "
9524 echo "Checking to see if you have int64_t..." >&4
9525 $cat >try.c <<EOCP
9526 #include <sys/types.h>
9527 #$i_inttypes I_INTTYPES
9528 #ifdef I_INTTYPES
9529 #include <inttypes.h>
9530 #endif
9531 int main() { int64_t x = 7; }
9532 EOCP
9533 set try
9534 if eval $compile; then
9535         val="$define"
9536         echo "You have int64_t."
9537 else
9538         val="$undef"
9539         echo "You do not have int64_t."
9540 fi
9541 $rm -f try try.*
9542 set d_int64_t
9543 eval $setvar
9544
9545 : Look for isascii
9546 echo " "
9547 $cat >isascii.c <<'EOCP'
9548 #include <stdio.h>
9549 #include <ctype.h>
9550 int main() {
9551         int c = 'A';
9552         if (isascii(c))
9553                 exit(0);
9554         else
9555                 exit(1);
9556 }
9557 EOCP
9558 set isascii
9559 if eval $compile; then
9560         echo "isascii() found." >&4
9561         val="$define"
9562 else
9563         echo "isascii() NOT found." >&4
9564         val="$undef"
9565 fi
9566 set d_isascii
9567 eval $setvar
9568 $rm -f isascii*
9569
9570 : see if killpg exists
9571 set killpg d_killpg
9572 eval $inlibc
9573
9574 : see if lchown exists
9575 echo " "
9576 $cat > try.c <<'EOCP'
9577 /* System header to define __stub macros and hopefully few prototypes,
9578     which can conflict with char lchown(); below.  */
9579 #include <assert.h>
9580 /* Override any gcc2 internal prototype to avoid an error.  */
9581 /* We use char because int might match the return type of a gcc2
9582    builtin and then its argument prototype would still apply.  */
9583 char lchown();
9584 int main() {
9585     /*  The GNU C library defines this for functions which it implements
9586         to always fail with ENOSYS.  Some functions are actually named
9587         something starting with __ and the normal name is an alias.  */
9588 #if defined (__stub_lchown) || defined (__stub___lchown)
9589 choke me
9590 #else
9591 lchown();
9592 #endif
9593 ; return 0; }
9594 EOCP
9595 set try
9596 if eval $compile; then
9597     $echo "lchown() found." >&4
9598     val="$define"
9599 else
9600     $echo "lchown() NOT found." >&4
9601     val="$undef"
9602 fi
9603 set d_lchown
9604 eval $setvar
9605
9606 : See if number of significant digits in a double precision number is known
9607 echo " "
9608 $cat >ldbl_dig.c <<EOM
9609 #$i_limits I_LIMITS
9610 #$i_float I_FLOAT
9611 #ifdef I_LIMITS
9612 #include <limits.h>
9613 #endif
9614 #ifdef I_FLOAT
9615 #include <float.h>
9616 #endif
9617 #ifdef LDBL_DIG
9618 printf("Contains LDBL_DIG");
9619 #endif
9620 EOM
9621 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
9622 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
9623         echo "LDBL_DIG found." >&4
9624         val="$define"
9625 else
9626         echo "LDBL_DIG NOT found." >&4
9627         val="$undef"
9628 fi
9629 $rm -f ldbl_dig.?
9630 set d_ldbl_dig
9631 eval $setvar
9632
9633 : see if link exists
9634 set link d_link
9635 eval $inlibc
9636
9637 : see if localeconv exists
9638 set localeconv d_locconv
9639 eval $inlibc
9640
9641 : see if lockf exists
9642 set lockf d_lockf
9643 eval $inlibc
9644
9645 : check for long long
9646 echo " "
9647 echo "Checking to see if you have long long..." >&4
9648 echo 'int main() { long long x = 7; return 0; }' > try.c
9649 set try
9650 if eval $compile; then
9651         val="$define"
9652         echo "You have have long long."
9653 else
9654         val="$undef"
9655         echo "You do not have long long."
9656 fi
9657 $rm try.*
9658 set d_longlong
9659 eval $setvar
9660
9661 : check for length of long long
9662 case "${d_longlong}${longlongsize}" in
9663 $define)
9664         echo " "
9665         echo "Checking to see how big your long longs are..." >&4
9666         $cat >try.c <<'EOCP'
9667 #include <stdio.h>
9668 int main()
9669 {
9670     printf("%d\n", (int)sizeof(long long));
9671     return(0);
9672 }
9673 EOCP
9674         set try
9675         if eval $compile_ok; then
9676                 longlongsize=`./try$exe_ext`
9677                 echo "Your long longs are $longlongsize bytes long."
9678         else
9679                 dflt='8'
9680                 echo " "
9681                 echo "(I can't seem to compile the test program.  Guessing...)"
9682                 rp="What is the size of a long long (in bytes)?"
9683                 . ./myread
9684                 longlongsize="$ans"
9685         fi
9686         if $test "X$longsize" = "X$longlongsize"; then
9687                 echo "(That isn't any different from an ordinary long.)"
9688         fi      
9689         ;;
9690 esac
9691 $rm -f try.* try
9692
9693 : see if prototype for lseek is available
9694 echo " "
9695 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
9696 eval $hasproto
9697
9698 : see if lstat exists
9699 set lstat d_lstat
9700 eval $inlibc
9701
9702 : see if madvise exists
9703 set madvise d_madvise
9704 eval $inlibc
9705
9706 : see if mblen exists
9707 set mblen d_mblen
9708 eval $inlibc
9709
9710 : see if mbstowcs exists
9711 set mbstowcs d_mbstowcs
9712 eval $inlibc
9713
9714 : see if mbtowc exists
9715 set mbtowc d_mbtowc
9716 eval $inlibc
9717
9718 : see if memchr exists
9719 set memchr d_memchr
9720 eval $inlibc
9721
9722 : see if memcmp exists
9723 set memcmp d_memcmp
9724 eval $inlibc
9725
9726 : see if memcpy exists
9727 set memcpy d_memcpy
9728 eval $inlibc
9729
9730 : see if memmove exists
9731 set memmove d_memmove
9732 eval $inlibc
9733
9734 : see if memset exists
9735 set memset d_memset
9736 eval $inlibc
9737
9738 : see if mkdir exists
9739 set mkdir d_mkdir
9740 eval $inlibc
9741
9742 : see if mkdtemp exists
9743 set mkdtemp d_mkdtemp
9744 eval $inlibc
9745
9746 : see if mkfifo exists
9747 set mkfifo d_mkfifo
9748 eval $inlibc
9749
9750 : see if mkstemp exists
9751 set mkstemp d_mkstemp
9752 eval $inlibc
9753
9754 : see if mkstemps exists
9755 set mkstemps d_mkstemps
9756 eval $inlibc
9757
9758 : see if mktime exists
9759 set mktime d_mktime
9760 eval $inlibc
9761
9762 : see if this is a sys/mman.h system
9763 set sys/mman.h i_sysmman
9764 eval $inhdr
9765
9766 : see if mmap exists
9767 set mmap d_mmap
9768 eval $inlibc
9769 : see what shmat returns
9770 : default to something harmless
9771 mmaptype='void *'
9772 case "$i_sysmman$d_mmap" in
9773 "$define$define")
9774         $cat >mmap.c <<'END'
9775 #include <sys/mman.h>
9776 void *mmap();
9777 END
9778         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
9779                 mmaptype='void *'
9780         else
9781                 mmaptype='caddr_t'
9782         fi
9783         echo "and it returns ($mmaptype)." >&4
9784         ;;
9785 esac
9786
9787
9788
9789 : see if mprotect exists
9790 set mprotect d_mprotect
9791 eval $inlibc
9792
9793 : see if msgctl exists
9794 set msgctl d_msgctl
9795 eval $inlibc
9796
9797 : see if msgget exists
9798 set msgget d_msgget
9799 eval $inlibc
9800
9801 : see if msgsnd exists
9802 set msgsnd d_msgsnd
9803 eval $inlibc
9804
9805 : see if msgrcv exists
9806 set msgrcv d_msgrcv
9807 eval $inlibc
9808
9809 : see how much of the 'msg*(2)' library is present.
9810 h_msg=true
9811 echo " "
9812 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
9813 *"$undef"*) h_msg=false;;
9814 esac
9815 case "$osname" in
9816 freebsd)
9817     case "`ipcs 2>&1`" in
9818     "SVID messages"*"not configured"*)
9819         echo "Your $osname does not have the msg*(2) configured." >&4
9820         h_msg=false
9821         val="$undef"
9822         set msgctl d_msgctl
9823         eval $setvar
9824         set msgget d_msgget
9825         eval $setvar
9826         set msgsnd d_msgsnd
9827         eval $setvar
9828         set msgrcv d_msgrcv
9829         eval $setvar
9830         ;;
9831     esac
9832     ;;
9833 esac
9834 : we could also check for sys/ipc.h ...
9835 if $h_msg && $test `./findhdr sys/msg.h`; then
9836         echo "You have the full msg*(2) library." >&4
9837         val="$define"
9838 else
9839         echo "You don't have the full msg*(2) library." >&4
9840         val="$undef"
9841 fi
9842 set d_msg
9843 eval $setvar
9844
9845 : see if msync exists
9846 set msync d_msync
9847 eval $inlibc
9848
9849 : see if munmap exists
9850 set munmap d_munmap
9851 eval $inlibc
9852
9853 : see if nice exists
9854 set nice d_nice
9855 eval $inlibc
9856
9857
9858 echo " "
9859 echo "Checking which 64-bit integer type we could use..." >&4
9860
9861 case "$intsize" in
9862 8) val=int
9863    set quadtype
9864    eval $setvar
9865    val='"unsigned int"'
9866    set uquadtype
9867    eval $setvar
9868    quadkind=1
9869    ;;
9870 *) case "$longsize" in
9871    8) val=long
9872       set quadtype
9873       eval $setvar
9874       val='"unsigned long"'
9875       set uquadtype
9876       eval $setvar
9877       quadkind=2
9878       ;;
9879    *) case "$d_longlong:$longlongsize" in
9880       define:8)
9881         val='"long long"'
9882         set quadtype
9883         eval $setvar
9884         val='"unsigned long long"'
9885         set uquadtype
9886         eval $setvar
9887         quadkind=3
9888         ;;
9889       *) case "$d_int64_t" in
9890          define)
9891            val=int64_t
9892            set quadtype
9893            eval $setvar
9894            val=uint64_t
9895            set uquadtype
9896            eval $setvar
9897            quadkind=4
9898            ;;
9899          esac
9900          ;;
9901       esac
9902       ;;
9903    esac
9904    ;;
9905 esac
9906
9907 case "$quadtype" in
9908 '')     echo "Alas, no 64-bit integer types in sight." >&4
9909         d_quad="$undef"
9910         ;;
9911 *)      if test X"$use64bitint" = Xdefine -o X"$longsize" = X8; then
9912             verb="will"
9913         else
9914             verb="could"
9915         fi
9916         echo "We $verb use '$quadtype' for 64-bit integers." >&4
9917         d_quad="$define"
9918         ;;
9919 esac
9920
9921 : check for length of character
9922 echo " "
9923 case "$charsize" in
9924 '')
9925         echo "Checking to see how big your characters are (hey, you never know)..." >&4
9926         $cat >try.c <<'EOCP'
9927 #include <stdio.h>
9928 int main()
9929 {
9930     printf("%d\n", (int)sizeof(char));
9931     exit(0);
9932 }
9933 EOCP
9934         set try
9935         if eval $compile_ok; then
9936                 dflt=`./try`
9937         else
9938                 dflt='1'
9939                 echo "(I can't seem to compile the test program.  Guessing...)"
9940         fi
9941         ;;
9942 *)
9943         dflt="$charsize"
9944         ;;
9945 esac
9946 rp="What is the size of a character (in bytes)?"
9947 . ./myread
9948 charsize="$ans"
9949 $rm -f try.c try
9950
9951
9952 echo " "
9953 $echo "Choosing the C types to be used for Perl's internal types..." >&4
9954
9955 case "$use64bitint:$d_quad:$quadtype" in
9956 define:define:?*)
9957         ivtype="$quadtype"
9958         uvtype="$uquadtype"
9959         ivsize=8
9960         uvsize=8
9961         ;;
9962 *)      ivtype="long"
9963         uvtype="unsigned long"
9964         ivsize=$longsize
9965         uvsize=$longsize
9966         ;;
9967 esac
9968
9969 case "$uselongdouble:$d_longdbl" in
9970 define:define)
9971         nvtype="long double"
9972         nvsize=$longdblsize
9973         ;;
9974 *)      nvtype=double
9975         nvsize=$doublesize
9976         ;;
9977 esac
9978
9979 $echo "(IV will be "$ivtype", $ivsize bytes)"
9980 $echo "(UV will be "$uvtype", $uvsize bytes)"
9981 $echo "(NV will be "$nvtype", $nvsize bytes)"
9982
9983 $cat >try.c <<EOCP
9984 #$i_inttypes I_INTTYPES
9985 #ifdef I_INTTYPES
9986 #include <inttypes.h>
9987 #endif
9988 #include <stdio.h>
9989 int main() {
9990 #ifdef INT8
9991    int8_t i =  INT8_MAX;
9992   uint8_t u = UINT8_MAX;
9993   printf("int8_t\n");
9994 #endif
9995 #ifdef INT16
9996    int16_t i =  INT16_MAX;
9997   uint16_t i = UINT16_MAX;
9998   printf("int16_t\n");
9999 #endif
10000 #ifdef INT32
10001    int32_t i =  INT32_MAX;
10002   uint32_t u = UINT32_MAX;
10003   printf("int32_t\n");
10004 #endif
10005 }
10006 EOCP
10007
10008 case "$i8type" in
10009 '')     case "$charsize" in
10010         1)      i8type=char
10011                 u8type="unsigned char"
10012                 i8size=$charsize
10013                 u8size=$charsize
10014                 ;;
10015         esac
10016         ;;
10017 esac
10018 case "$i8type" in
10019 '')     set try -DINT8
10020         if eval $compile; then
10021                 case "`./try$exe_ext`" in
10022                 int8_t) i8type=int8_t
10023                         u8type=uint8_t
10024                         i8size=1
10025                         u8size=1
10026                         ;;
10027                 esac
10028         fi
10029         ;;
10030 esac
10031 case "$i8type" in
10032 '')     if $test $charsize -ge 1; then
10033                 i8type=char
10034                 u8type="unsigned char"
10035                 i8size=$charsize
10036                 u8size=$charsize
10037         fi
10038         ;;
10039 esac
10040
10041 case "$i16type" in
10042 '')     case "$shortsize" in
10043         2)      i16type=short
10044                 u16type="unsigned short"
10045                 i16size=$shortsize
10046                 u16size=$shortsize
10047                 ;;
10048         esac
10049         ;;
10050 esac
10051 case "$i16type" in
10052 '')     set try -DINT16
10053         if eval $compile; then
10054                 case "`./try$exe_ext`" in
10055                 int16_t)
10056                         i16type=int16_t
10057                         u16type=uint16_t
10058                         i16size=2
10059                         u16size=2
10060                         ;;
10061                 esac
10062         fi
10063         ;;
10064 esac
10065 case "$i16type" in
10066 '')     if $test $shortsize -ge 2; then
10067                 i16type=short
10068                 u16type="unsigned short"
10069                 i16size=$shortsize
10070                 u16size=$shortsize
10071         fi
10072         ;;
10073 esac
10074
10075 case "$i32type" in
10076 '')     case "$longsize" in
10077         4)      i32type=long
10078                 u32type="unsigned long"
10079                 i32size=$longsize
10080                 u32size=$longsize
10081                 ;;
10082         *)      case "$intsize" in
10083                 4)      i32type=int
10084                         u32type="unsigned int"
10085                         i32size=$intsize
10086                         u32size=$intsize
10087                         ;;
10088                 esac
10089                 ;;
10090         esac
10091         ;;
10092 esac
10093 case "$i32type" in
10094 '')     set try -DINT32
10095         if eval $compile; then
10096                 case "`./try$exe_ext`" in
10097                 int32_t)
10098                         i32type=int32_t
10099                         u32type=uint32_t
10100                         i32size=4
10101                         u32size=4
10102                         ;;
10103                 esac
10104         fi
10105         ;;
10106 esac
10107 case "$i32type" in
10108 '')     if $test $intsize -ge 4; then
10109                 i32type=int
10110                 u32type="unsigned int"
10111                 i32size=$intsize
10112                 u32size=$intsize
10113         fi
10114         ;;
10115 esac
10116
10117 case "$i64type" in
10118 '')     case "$d_quad:$quadtype" in
10119         define:?*)
10120                 i64type="$quadtype"
10121                 u64type="$uquadtype"
10122                 i64size=8
10123                 u64size=8
10124                 ;;
10125         esac
10126         ;;
10127 esac
10128
10129 $echo "Checking whether your NVs can preserve your UVs..." >&4
10130 $cat <<EOP >try.c
10131 #include <stdio.h>
10132 int main() {
10133     $uvtype k = ($uvtype)~0, l;
10134     $nvtype d;
10135     l = k;
10136     d = ($nvtype)l;
10137     l = ($uvtype)d;
10138     if (l == k)
10139        printf("preserve\n");
10140     exit(0);
10141 }
10142 EOP
10143 set try
10144 if eval $compile; then
10145         case "`./try$exe_ext`" in
10146         preserve) d_nv_preserves_uv="$define" ;;
10147         esac
10148 fi      
10149 case "$d_nv_preserves_uv" in
10150 $define) $echo "Yes, they can."  2>&1 ;;
10151 *)       $echo "No, they can't." 2>&1
10152          d_nv_preserves_uv="$undef"
10153          ;;
10154 esac
10155
10156 $rm -f try.* try
10157
10158
10159 : check for off64_t
10160 echo " "
10161 echo "Checking to see if you have off64_t..." >&4
10162 $cat >try.c <<EOCP
10163 #include <sys/types.h>
10164 #include <unistd.h>
10165 int main() { off64_t x = 7; }
10166 EOCP
10167 set try
10168 if eval $compile; then
10169         val="$define"
10170         echo "You have off64_t."
10171 else
10172         val="$undef"
10173         echo "You do not have off64_t."
10174         case "$lseeksize" in
10175         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
10176         esac
10177 fi
10178 $rm -f try.* try
10179 set d_off64_t
10180 eval $setvar
10181
10182 : see if POSIX threads are available
10183 set pthread.h i_pthread
10184 eval $inhdr
10185
10186
10187
10188
10189 : how to create joinable pthreads
10190 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
10191         echo " "
10192         echo "Checking what constant to use for creating joinable pthreads..." >&4 
10193         $cat >try.c <<'EOCP'
10194 #include <pthread.h>
10195 int main() {
10196     int detachstate = JOINABLE;
10197 }
10198 EOCP
10199         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
10200         if eval $compile; then
10201                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
10202                 val="$undef" # Yes, undef.
10203                 set d_old_pthread_create_joinable
10204                 eval $setvar
10205                 val=""
10206                 set old_pthread_create_joinable
10207                 eval $setvar
10208         else
10209                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
10210                 if eval $compile; then
10211                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
10212                         val="$define"
10213                         set d_old_pthread_create_joinable
10214                         eval $setvar
10215                         val=PTHREAD_CREATE_UNDETACHED
10216                         set old_pthread_create_joinable
10217                         eval $setvar
10218                 else            
10219                         set try -DJOINABLE=__UNDETACHED
10220                         if eval $compile; then
10221                                 echo "You seem to use __UNDETACHED." >&4
10222                                 val="$define"
10223                                 set d_old_pthread_create_joinable
10224                                 eval $setvar
10225                                 val=__UNDETACHED
10226                                 set old_pthread_create_joinable
10227                                 eval $setvar
10228                         else
10229                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
10230                                 val="$define"
10231                                 set d_old_pthread_create_joinable
10232                                 eval $setvar
10233                                 val=0
10234                                 set old_pthread_create_joinable
10235                                 eval $setvar
10236                         fi
10237                 fi
10238         fi
10239         $rm -f try try.*
10240 else
10241     d_old_pthread_create_joinable="$undef"
10242     old_pthread_create_joinable=""
10243 fi
10244
10245 : see if pause exists
10246 set pause d_pause
10247 eval $inlibc
10248
10249 : see if pipe exists
10250 set pipe d_pipe
10251 eval $inlibc
10252
10253 : see if poll exists
10254 set poll d_poll
10255 eval $inlibc
10256
10257
10258 : see whether the various POSIXish _yields exist
10259 $cat >try.c <<EOP
10260 #include <pthread.h>
10261 #include <stdio.h>
10262 int main() {
10263 #ifdef SCHED_YIELD
10264         sched_yield();
10265 #else
10266 #ifdef PTHREAD_YIELD
10267         pthread_yield();
10268 #else
10269 #ifdef PTHREAD_YIELD_NULL
10270         pthread_yield(NULL);
10271 #endif
10272 #endif
10273 #endif
10274 }
10275 EOP
10276 : see if sched_yield exists
10277 set try -DSCHED_YIELD
10278 if eval $compile; then
10279     val="$define"
10280     sched_yield='sched_yield()'
10281 else
10282     val="$undef"
10283 fi
10284 case "$usethreads" in
10285 $define)
10286         case "$val" in
10287         $define) echo 'sched_yield() found.' >&4        ;;
10288         *)       echo 'sched_yield() NOT found.' >&4    ;;
10289         esac
10290 esac
10291 set d_sched_yield
10292 eval $setvar
10293
10294 : see if pthread_yield exists
10295 set try -DPTHREAD_YIELD
10296 if eval $compile; then
10297     val="$define"
10298     case "$sched_yield" in
10299     '') sched_yield='pthread_yield()' ;;
10300     esac
10301 else
10302     set try -DPTHREAD_YIELD_NULL
10303     if eval $compile; then
10304         val="$define"
10305         case "$sched_yield" in
10306         '') sched_yield='pthread_yield(NULL)' ;;
10307         esac
10308     else
10309         val="$undef"
10310     fi
10311 fi
10312 case "$usethreads" in
10313 $define)
10314         case "$val" in
10315         $define) echo 'pthread_yield() found.' >&4      ;;
10316         *)       echo 'pthread_yield() NOT found.' >&4  ;;
10317         esac
10318         ;;
10319 esac
10320 set d_pthread_yield
10321 eval $setvar
10322
10323 case "$sched_yield" in
10324 '') sched_yield=undef ;;
10325 esac
10326
10327 $rm -f try try.*
10328
10329 : see if this is a pwd.h system
10330 set pwd.h i_pwd
10331 eval $inhdr
10332
10333 case "$i_pwd" in
10334 $define)
10335         xxx=`./findhdr pwd.h`
10336         $cppstdin $cppflags $cppminus < $xxx >$$.h
10337
10338         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
10339                 val="$define"
10340         else
10341                 val="$undef"
10342         fi
10343         set d_pwquota
10344         eval $setvar
10345
10346         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
10347                 val="$define"
10348         else
10349                 val="$undef"
10350         fi
10351         set d_pwage
10352         eval $setvar
10353
10354         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
10355                 val="$define"
10356         else
10357                 val="$undef"
10358         fi
10359         set d_pwchange
10360         eval $setvar
10361
10362         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
10363                 val="$define"
10364         else
10365                 val="$undef"
10366         fi
10367         set d_pwclass
10368         eval $setvar
10369
10370         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
10371                 val="$define"
10372         else
10373                 val="$undef"
10374         fi
10375         set d_pwexpire
10376         eval $setvar
10377
10378         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
10379                 val="$define"
10380         else
10381                 val="$undef"
10382         fi
10383         set d_pwcomment
10384         eval $setvar
10385
10386         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
10387                 val="$define"
10388         else
10389                 val="$undef"
10390         fi
10391         set d_pwgecos
10392         eval $setvar
10393
10394         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
10395                 val="$define"
10396         else
10397                 val="$undef"
10398         fi
10399         set d_pwpasswd
10400         eval $setvar
10401
10402         $rm -f $$.h
10403         ;;
10404 *)
10405         val="$undef"; 
10406         set d_pwquota; eval $setvar
10407         set d_pwage; eval $setvar
10408         set d_pwchange; eval $setvar
10409         set d_pwclass; eval $setvar
10410         set d_pwexpire; eval $setvar
10411         set d_pwcomment; eval $setvar
10412         set d_pwgecos; eval $setvar
10413         set d_pwpasswd; eval $setvar
10414         ;;
10415 esac
10416
10417 : see if readdir and friends exist
10418 set readdir d_readdir
10419 eval $inlibc
10420 set seekdir d_seekdir
10421 eval $inlibc
10422 set telldir d_telldir
10423 eval $inlibc
10424 set rewinddir d_rewinddir
10425 eval $inlibc
10426
10427 : see if readlink exists
10428 set readlink d_readlink
10429 eval $inlibc
10430
10431 : see if rename exists
10432 set rename d_rename
10433 eval $inlibc
10434
10435 : see if rmdir exists
10436 set rmdir d_rmdir
10437 eval $inlibc
10438
10439 : see if memory.h is available.
10440 val=''
10441 set memory.h val
10442 eval $inhdr
10443
10444 : See if it conflicts with string.h
10445 case "$val" in
10446 $define)
10447         case "$strings" in
10448         '') ;;
10449         *)
10450                 $cppstdin $cppflags $cppminus < $strings > mem.h
10451                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
10452                         echo " "
10453                         echo "We won't be including <memory.h>."
10454                         val="$undef"
10455                 fi
10456                 $rm -f mem.h
10457                 ;;
10458         esac
10459 esac
10460 set i_memory
10461 eval $setvar
10462
10463 : can bcopy handle overlapping blocks?
10464 val="$undef"
10465 case "$d_bcopy" in
10466 "$define")
10467         echo " "
10468         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
10469         $cat >try.c <<EOCP
10470 #$i_memory I_MEMORY
10471 #$i_stdlib I_STDLIB
10472 #$i_string I_STRING
10473 #$i_unistd I_UNISTD
10474 EOCP
10475         $cat >>try.c <<'EOCP'
10476 #include <stdio.h>
10477 #ifdef I_MEMORY
10478 #  include <memory.h>
10479 #endif
10480 #ifdef I_STDLIB
10481 #  include <stdlib.h>
10482 #endif
10483 #ifdef I_STRING
10484 #  include <string.h>
10485 #else
10486 #  include <strings.h>
10487 #endif
10488 #ifdef I_UNISTD
10489 #  include <unistd.h>  /* Needed for NetBSD */
10490 #endif
10491 int main()
10492 {
10493 char buf[128], abc[128];
10494 char *b;
10495 int len;
10496 int off;
10497 int align;
10498
10499 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
10500
10501 for (align = 7; align >= 0; align--) {
10502         for (len = 36; len; len--) {
10503                 b = buf+align;
10504                 bcopy(abc, b, len);
10505                 for (off = 1; off <= len; off++) {
10506                         bcopy(b, b+off, len);
10507                         bcopy(b+off, b, len);
10508                         if (bcmp(b, abc, len))
10509                                 exit(1);
10510                 }
10511         }
10512 }
10513 exit(0);
10514 }
10515 EOCP
10516         set try
10517         if eval $compile_ok; then
10518                 if ./try 2>/dev/null; then
10519                         echo "Yes, it can."
10520                         val="$define"
10521                 else
10522                         echo "It can't, sorry."
10523                         case "$d_memmove" in
10524                         "$define") echo "But that's Ok since you have memmove()." ;;
10525                         esac
10526                 fi
10527         else
10528                 echo "(I can't compile the test program, so we'll assume not...)"
10529                 case "$d_memmove" in
10530                 "$define") echo "But that's Ok since you have memmove()." ;;
10531                 esac
10532         fi
10533         ;;
10534 esac
10535 $rm -f try.* try core
10536 set d_safebcpy
10537 eval $setvar
10538
10539 : can memcpy handle overlapping blocks?
10540 val="$undef"
10541 case "$d_memcpy" in
10542 "$define")
10543         echo " "
10544         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
10545         $cat >try.c <<EOCP
10546 #$i_memory I_MEMORY
10547 #$i_stdlib I_STDLIB
10548 #$i_string I_STRING
10549 #$i_unistd I_UNISTD
10550 EOCP
10551         $cat >>try.c <<'EOCP'
10552 #include <stdio.h>
10553 #ifdef I_MEMORY
10554 #  include <memory.h>
10555 #endif
10556 #ifdef I_STDLIB
10557 #  include <stdlib.h>
10558 #endif
10559 #ifdef I_STRING
10560 #  include <string.h>
10561 #else
10562 #  include <strings.h>
10563 #endif
10564 #ifdef I_UNISTD
10565 #  include <unistd.h>  /* Needed for NetBSD */
10566 #endif
10567 int main()
10568 {
10569 char buf[128], abc[128];
10570 char *b;
10571 int len;
10572 int off;
10573 int align;
10574
10575 /* Copy "abcde..." string to char abc[] so that gcc doesn't
10576    try to store the string in read-only memory. */
10577 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
10578
10579 for (align = 7; align >= 0; align--) {
10580         for (len = 36; len; len--) {
10581                 b = buf+align;
10582                 memcpy(b, abc, len);
10583                 for (off = 1; off <= len; off++) {
10584                         memcpy(b+off, b, len);
10585                         memcpy(b, b+off, len);
10586                         if (memcmp(b, abc, len))
10587                                 exit(1);
10588                 }
10589         }
10590 }
10591 exit(0);
10592 }
10593 EOCP
10594         set try
10595         if eval $compile_ok; then
10596                 if ./try 2>/dev/null; then
10597                         echo "Yes, it can."
10598                         val="$define"
10599                 else
10600                         echo "It can't, sorry."
10601                         case "$d_memmove" in
10602                         "$define") echo "But that's Ok since you have memmove()." ;;
10603                         esac
10604                 fi
10605         else
10606                 echo "(I can't compile the test program, so we'll assume not...)"
10607                 case "$d_memmove" in
10608                 "$define") echo "But that's Ok since you have memmove()." ;;
10609                 esac
10610         fi
10611         ;;
10612 esac
10613 $rm -f try.* try core
10614 set d_safemcpy
10615 eval $setvar
10616
10617 : can memcmp be trusted to compare relative magnitude?
10618 val="$undef"
10619 case "$d_memcmp" in
10620 "$define")
10621         echo " "
10622         echo "Checking if your memcmp() can compare relative magnitude..." >&4
10623         $cat >try.c <<EOCP
10624 #$i_memory I_MEMORY
10625 #$i_stdlib I_STDLIB
10626 #$i_string I_STRING
10627 #$i_unistd I_UNISTD
10628 EOCP
10629         $cat >>try.c <<'EOCP'
10630 #include <stdio.h>
10631 #ifdef I_MEMORY
10632 #  include <memory.h>
10633 #endif
10634 #ifdef I_STDLIB
10635 #  include <stdlib.h>
10636 #endif
10637 #ifdef I_STRING
10638 #  include <string.h>
10639 #else
10640 #  include <strings.h>
10641 #endif
10642 #ifdef I_UNISTD
10643 #  include <unistd.h>  /* Needed for NetBSD */
10644 #endif
10645 int main()
10646 {
10647 char a = -1;
10648 char b = 0;
10649 if ((a < b) && memcmp(&a, &b, 1) < 0)
10650         exit(1);
10651 exit(0);
10652 }
10653 EOCP
10654         set try
10655         if eval $compile_ok; then
10656                 if ./try 2>/dev/null; then
10657                         echo "Yes, it can."
10658                         val="$define"
10659                 else
10660                         echo "No, it can't (it uses signed chars)."
10661                 fi
10662         else
10663                 echo "(I can't compile the test program, so we'll assume not...)"
10664         fi
10665         ;;
10666 esac
10667 $rm -f try.* try core
10668 set d_sanemcmp
10669 eval $setvar
10670
10671 : see if select exists
10672 set select d_select
10673 eval $inlibc
10674
10675 : see if semctl exists
10676 set semctl d_semctl
10677 eval $inlibc
10678
10679 : see if semget exists
10680 set semget d_semget
10681 eval $inlibc
10682
10683 : see if semop exists
10684 set semop d_semop
10685 eval $inlibc
10686
10687 : see how much of the 'sem*(2)' library is present.
10688 h_sem=true
10689 echo " "
10690 case "$d_semctl$d_semget$d_semop" in
10691 *"$undef"*) h_sem=false;;
10692 esac
10693 case "$osname" in
10694 freebsd)
10695     case "`ipcs 2>&1`" in
10696     "SVID messages"*"not configured"*)
10697         echo "Your $osname does not have the sem*(2) configured." >&4
10698         h_sem=false
10699         val="$undef"
10700         set semctl d_semctl
10701         eval $setvar
10702         set semget d_semget
10703         eval $setvar
10704         set semop d_semop
10705         eval $setvar
10706         ;;
10707     esac
10708     ;;
10709 esac
10710 : we could also check for sys/ipc.h ...
10711 if $h_sem && $test `./findhdr sys/sem.h`; then
10712         echo "You have the full sem*(2) library." >&4
10713         val="$define"
10714 else
10715         echo "You don't have the full sem*(2) library." >&4
10716         val="$undef"
10717 fi
10718 set d_sem
10719 eval $setvar
10720
10721 : see whether sys/sem.h defines union semun
10722 echo " "
10723 $cat > try.c <<'END'
10724 #include <sys/types.h>
10725 #include <sys/ipc.h>
10726 #include <sys/sem.h>
10727 int main () { union semun semun; semun.buf = 0; }
10728 END
10729 set try
10730 if eval $compile; then
10731     echo "You have union semun in <sys/sem.h>." >&4
10732     val="$define"
10733 else
10734     echo "You do not have union semun in <sys/sem.h>." >&4
10735     val="$undef"
10736 fi
10737 $rm -f try try.c try.h
10738 set d_union_semun
10739 eval $setvar
10740
10741 : see how to do semctl IPC_STAT
10742 case "$d_sem" in
10743 $define)
10744     : see whether semctl IPC_STAT can use union semun
10745     echo " "
10746     $cat > try.h <<END
10747 #ifndef S_IRUSR
10748 #   ifdef S_IREAD
10749 #       define S_IRUSR S_IREAD
10750 #       define S_IWUSR S_IWRITE
10751 #       define S_IXUSR S_IEXEC
10752 #   else
10753 #       define S_IRUSR 0400
10754 #       define S_IWUSR 0200
10755 #       define S_IXUSR 0100
10756 #   endif
10757 #   define S_IRGRP (S_IRUSR>>3)
10758 #   define S_IWGRP (S_IWUSR>>3)
10759 #   define S_IXGRP (S_IXUSR>>3)
10760 #   define S_IROTH (S_IRUSR>>6)
10761 #   define S_IWOTH (S_IWUSR>>6)
10762 #   define S_IXOTH (S_IXUSR>>6)
10763 #endif
10764 #ifndef S_IRWXU
10765 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
10766 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
10767 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
10768 #endif
10769 END
10770
10771     $cat > try.c <<END
10772 #include <sys/types.h>
10773 #include <sys/ipc.h>
10774 #include <sys/sem.h>
10775 #include <sys/stat.h>
10776 #include <stdio.h>
10777 #include <errno.h>
10778 #include "try.h"
10779 #ifndef errno
10780 extern int errno;
10781 #endif
10782 #$d_union_semun HAS_UNION_SEMUN
10783 int main() {
10784     union semun
10785 #ifndef HAS_UNION_SEMUN
10786     {
10787         int val;
10788         struct semid_ds *buf;
10789         unsigned short *array;
10790     }
10791 #endif
10792     arg;
10793     int sem, st;
10794
10795 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
10796     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
10797     if (sem > -1) {
10798         struct semid_ds argbuf;
10799         arg.buf = &argbuf;
10800 #       ifdef IPC_STAT
10801         st = semctl(sem, 0, IPC_STAT, arg);
10802         if (st == 0)
10803             printf("semun\n");
10804         else
10805 #       endif /* IPC_STAT */
10806             printf("semctl IPC_STAT failed: errno = %d\n", errno);
10807 #       ifdef IPC_RMID
10808         if (semctl(sem, 0, IPC_RMID, arg) != 0)
10809 #       endif /* IPC_RMID */
10810             printf("semctl IPC_RMID failed: errno = %d\n", errno);
10811     } else
10812 #endif /* IPC_PRIVATE && ... */
10813         printf("semget failed: errno = %d\n", errno);
10814   return 0;
10815 }
10816 END
10817     val="$undef"
10818     set try
10819     if eval $compile; then
10820         xxx=`./try`
10821         case "$xxx" in
10822         semun) val="$define" ;;
10823         esac
10824     fi
10825     $rm -f try try.c
10826     set d_semctl_semun
10827     eval $setvar
10828     case "$d_semctl_semun" in
10829     $define)
10830         echo "You can use union semun for semctl IPC_STAT." >&4
10831         also='also'
10832         ;;
10833     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
10834         also=''
10835         ;;
10836     esac
10837
10838     : see whether semctl IPC_STAT can use struct semid_ds pointer
10839     $cat > try.c <<'END'
10840 #include <sys/types.h>
10841 #include <sys/ipc.h>
10842 #include <sys/sem.h>
10843 #include <sys/stat.h>
10844 #include "try.h"
10845 #include <stdio.h>
10846 #include <errno.h>
10847 #ifndef errno
10848 extern int errno;
10849 #endif
10850 int main() {
10851     struct semid_ds arg;
10852     int sem, st;
10853
10854 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
10855     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
10856     if (sem > -1) {
10857 #       ifdef IPC_STAT
10858         st = semctl(sem, 0, IPC_STAT, &arg);
10859         if (st == 0)
10860             printf("semid_ds\n");
10861         else
10862 #       endif /* IPC_STAT */
10863             printf("semctl IPC_STAT failed: errno = %d\n", errno);
10864 #       ifdef IPC_RMID
10865         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
10866 #       endif /* IPC_RMID */
10867             printf("semctl IPC_RMID failed: errno = %d\n", errno);
10868     } else
10869 #endif /* IPC_PRIVATE && ... */
10870         printf("semget failed: errno = %d\n", errno);
10871
10872     return 0;
10873 }
10874 END
10875     val="$undef"
10876     set try
10877     if eval $compile; then
10878         xxx=`./try`
10879         case "$xxx" in
10880         semid_ds) val="$define" ;;
10881         esac
10882     fi
10883     $rm -f try try.c
10884     set d_semctl_semid_ds
10885     eval $setvar
10886     case "$d_semctl_semid_ds" in
10887     $define)
10888         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
10889         ;;
10890     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
10891         ;;
10892     esac
10893     $rm -f try.h
10894     ;;
10895 *)  val="$undef"
10896
10897     # We do not have the full sem*(2) library, so assume we can not
10898     # use either.
10899
10900     set d_semctl_semun
10901     eval $setvar
10902
10903     set d_semctl_semid_ds
10904     eval $setvar
10905     ;;
10906 esac
10907
10908 : see if setegid exists
10909 set setegid d_setegid
10910 eval $inlibc
10911
10912 : see if seteuid exists
10913 set seteuid d_seteuid
10914 eval $inlibc
10915
10916 : see if setgrent exists
10917 set setgrent d_setgrent
10918 eval $inlibc
10919
10920 : see if sethostent exists
10921 set sethostent d_sethent
10922 eval $inlibc
10923
10924 : see if setlinebuf exists
10925 set setlinebuf d_setlinebuf
10926 eval $inlibc
10927
10928 : see if setlocale exists
10929 set setlocale d_setlocale
10930 eval $inlibc
10931
10932 : see if setnetent exists
10933 set setnetent d_setnent
10934 eval $inlibc
10935
10936 : see if setprotoent exists
10937 set setprotoent d_setpent
10938 eval $inlibc
10939
10940 : see if setpgid exists
10941 set setpgid d_setpgid
10942 eval $inlibc
10943
10944 : see if setpgrp2 exists
10945 set setpgrp2 d_setpgrp2
10946 eval $inlibc
10947
10948 : see if setpriority exists
10949 set setpriority d_setprior
10950 eval $inlibc
10951
10952 : see if setpwent exists
10953 set setpwent d_setpwent
10954 eval $inlibc
10955
10956 : see if setregid exists
10957 set setregid d_setregid
10958 eval $inlibc
10959 set setresgid d_setresgid
10960 eval $inlibc
10961
10962 : see if setreuid exists
10963 set setreuid d_setreuid
10964 eval $inlibc
10965 set setresuid d_setresuid
10966 eval $inlibc
10967
10968 : see if setrgid exists
10969 set setrgid d_setrgid
10970 eval $inlibc
10971
10972 : see if setruid exists
10973 set setruid d_setruid
10974 eval $inlibc
10975
10976 : see if setservent exists
10977 set setservent d_setsent
10978 eval $inlibc
10979
10980 : see if setsid exists
10981 set setsid d_setsid
10982 eval $inlibc
10983
10984 : see if setspent exists
10985 set setspent d_setspent
10986 eval $inlibc
10987
10988 : see if setvbuf exists
10989 set setvbuf d_setvbuf
10990 eval $inlibc
10991
10992 : see if sfio.h is available
10993 set sfio.h i_sfio
10994 eval $inhdr
10995
10996
10997 : see if sfio library is available
10998 case "$i_sfio" in
10999 $define)
11000         val=''
11001         set sfreserve val
11002         eval $inlibc
11003         ;;
11004 *)
11005         val="$undef"
11006         ;;
11007 esac
11008 : Ok, but do we want to use it.
11009 case "$val" in
11010 $define)
11011         case "$usesfio" in
11012         true|$define|[yY]*) dflt='y';;
11013         *) dflt='n';;
11014         esac
11015         echo "$package can use the sfio library, but it is experimental."
11016         rp="You seem to have sfio available, do you want to try using it?"
11017         . ./myread
11018         case "$ans" in
11019         y|Y) ;;
11020         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
11021                 val="$undef"
11022                 : Remove sfio from list of libraries to use
11023                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
11024                 shift
11025                 libs="$*"
11026                 echo "libs = $libs" >&4
11027                 ;;
11028         esac
11029         ;;
11030 *)      case "$usesfio" in
11031         true|$define|[yY]*)
11032                 echo "Sorry, cannot find sfio on this machine" >&4
11033                 echo "Ignoring your setting of usesfio=$usesfio" >&4
11034                 ;;
11035         esac
11036         ;;
11037 esac
11038 set d_sfio
11039 eval $setvar
11040 case "$d_sfio" in
11041 $define) usesfio='true';;
11042 *) usesfio='false';;
11043 esac
11044
11045 : see if shmctl exists
11046 set shmctl d_shmctl
11047 eval $inlibc
11048
11049 : see if shmget exists
11050 set shmget d_shmget
11051 eval $inlibc
11052
11053 : see if shmat exists
11054 set shmat d_shmat
11055 eval $inlibc
11056 : see what shmat returns
11057 case "$d_shmat" in
11058 "$define")
11059         $cat >shmat.c <<'END'
11060 #include <sys/shm.h>
11061 void *shmat();
11062 END
11063         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
11064                 shmattype='void *'
11065         else
11066                 shmattype='char *'
11067         fi
11068         echo "and it returns ($shmattype)." >&4
11069         : see if a prototype for shmat is available
11070         xxx=`./findhdr sys/shm.h`
11071         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
11072         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
11073                 val="$define"
11074         else
11075                 val="$undef"
11076         fi
11077         $rm -f shmat.[co]
11078         ;;
11079 *)
11080         val="$undef"
11081         ;;
11082 esac
11083 set d_shmatprototype
11084 eval $setvar
11085
11086 : see if shmdt exists
11087 set shmdt d_shmdt
11088 eval $inlibc
11089
11090 : see how much of the 'shm*(2)' library is present.
11091 h_shm=true
11092 echo " "
11093 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
11094 *"$undef"*) h_shm=false;;
11095 esac
11096 case "$osname" in
11097 freebsd)
11098     case "`ipcs 2>&1`" in
11099     "SVID shared memory"*"not configured"*)
11100         echo "Your $osname does not have the shm*(2) configured." >&4
11101         h_shm=false
11102         val="$undef"
11103         set shmctl d_shmctl
11104         evat $setvar
11105         set shmget d_shmget
11106         evat $setvar
11107         set shmat d_shmat
11108         evat $setvar
11109         set shmdt d_shmdt
11110         evat $setvar
11111         ;;
11112     esac
11113     ;;
11114 esac
11115 : we could also check for sys/ipc.h ...
11116 if $h_shm && $test `./findhdr sys/shm.h`; then
11117         echo "You have the full shm*(2) library." >&4
11118         val="$define"
11119 else
11120         echo "You don't have the full shm*(2) library." >&4
11121         val="$undef"
11122 fi
11123 set d_shm
11124 eval $setvar
11125
11126 echo " "
11127 : see if we have sigaction
11128 if set sigaction val -f d_sigaction; eval $csym; $val; then
11129         echo 'sigaction() found.' >&4
11130         $cat > try.c <<'EOP'
11131 #include <stdio.h>
11132 #include <sys/types.h>
11133 #include <signal.h>
11134 int main()
11135 {
11136     struct sigaction act, oact;
11137     act.sa_flags = 0;
11138     oact.sa_handler = 0;
11139     /* so that act and oact are used */
11140     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
11141 }
11142 EOP
11143         set try
11144         if eval $compile_ok; then
11145                 val="$define"
11146         else
11147                 echo "But you don't seem to have a useable struct sigaction." >&4
11148                 val="$undef"
11149         fi
11150 else
11151         echo 'sigaction NOT found.' >&4
11152         val="$undef"
11153 fi
11154 set d_sigaction; eval $setvar
11155 $rm -f try try$_o try.c
11156
11157 : see if sigsetjmp exists
11158 echo " "
11159 case "$d_sigsetjmp" in
11160 '')
11161         $cat >try.c <<'EOP'
11162 #include <setjmp.h>
11163 sigjmp_buf env;
11164 int set = 1;
11165 int main()
11166 {
11167         if (sigsetjmp(env,1))
11168                 exit(set);
11169         set = 0;
11170         siglongjmp(env, 1);
11171         exit(1);
11172 }
11173 EOP
11174         set try
11175         if eval $compile; then
11176                 if ./try >/dev/null 2>&1; then
11177                         echo "POSIX sigsetjmp found." >&4
11178                         val="$define"
11179                 else
11180                         $cat >&4 <<EOM
11181 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
11182 I'll ignore them.
11183 EOM
11184                         val="$undef"
11185                 fi
11186         else
11187                 echo "sigsetjmp not found." >&4
11188                 val="$undef"
11189         fi
11190         ;;
11191 *) val="$d_sigsetjmp"
11192         case "$d_sigsetjmp" in
11193         $define) echo "POSIX sigsetjmp found." >&4;;
11194         $undef) echo "sigsetjmp not found." >&4;;
11195         esac
11196         ;;
11197 esac
11198 set d_sigsetjmp
11199 eval $setvar
11200 $rm -f try.c try
11201
11202 : see if sys/stat.h is available
11203 set sys/stat.h i_sysstat
11204 eval $inhdr
11205
11206
11207 : see if stat knows about block sizes
11208 echo " "
11209 echo "Checking to see if your struct stat has st_blocks field..." >&4
11210 set d_statblks stat st_blocks $i_sysstat sys/stat.h
11211 eval $hasfield
11212
11213
11214 : see if this is a sys/vfs.h system
11215 set sys/vfs.h i_sysvfs
11216 eval $inhdr
11217
11218
11219 : see if this is a sys/statfs.h system
11220 set sys/statfs.h i_sysstatfs
11221 eval $inhdr
11222
11223
11224 echo " "
11225 echo "Checking to see if your system supports struct statfs..." >&4
11226 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
11227 eval $hasstruct
11228 case "$d_statfs_s" in
11229 "$define")      echo "Yes, it does."   ;;
11230 *)              echo "No, it doesn't." ;;
11231 esac
11232
11233
11234
11235 : see if struct statfs knows about f_flags
11236 case "$d_statfs_s" in
11237 define) 
11238         echo " "
11239         echo "Checking to see if your struct statfs has f_flags field..." >&4
11240         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
11241         eval $hasfield
11242         ;;
11243 *)      val="$undef"
11244         set d_statfs_f_flags
11245         eval $setvar
11246         ;;
11247 esac
11248 case "$d_statfs_f_flags" in
11249 "$define")      echo "Yes, it does."   ;;
11250 *)              echo "No, it doesn't." ;;
11251 esac
11252
11253 : see if _ptr and _cnt from stdio act std
11254 echo " "
11255 if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
11256         echo "(Looks like you have stdio.h from Linux.)"
11257         case "$stdio_ptr" in
11258         '') stdio_ptr='((fp)->_IO_read_ptr)'
11259                 ptr_lval=$define
11260                 ;;
11261         *)      ptr_lval=$d_stdio_ptr_lval;;
11262         esac
11263         case "$stdio_cnt" in
11264         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
11265                 cnt_lval=$undef
11266                 ;;
11267         *)      cnt_lval=$d_stdio_cnt_lval;;
11268         esac
11269         case "$stdio_base" in
11270         '') stdio_base='((fp)->_IO_read_base)';;
11271         esac
11272         case "$stdio_bufsiz" in
11273         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
11274         esac
11275 else
11276         case "$stdio_ptr" in
11277         '') stdio_ptr='((fp)->_ptr)'
11278                 ptr_lval=$define
11279                 ;;
11280         *)      ptr_lval=$d_stdio_ptr_lval;;
11281         esac
11282         case "$stdio_cnt" in
11283         '') stdio_cnt='((fp)->_cnt)'
11284                 cnt_lval=$define
11285                 ;;
11286         *)      cnt_lval=$d_stdio_cnt_lval;;
11287         esac
11288         case "$stdio_base" in
11289         '') stdio_base='((fp)->_base)';;
11290         esac
11291         case "$stdio_bufsiz" in
11292         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
11293         esac
11294 fi
11295 : test whether _ptr and _cnt really work
11296 echo "Checking how std your stdio is..." >&4
11297 $cat >try.c <<EOP
11298 #include <stdio.h>
11299 #define FILE_ptr(fp)    $stdio_ptr
11300 #define FILE_cnt(fp)    $stdio_cnt
11301 int main() {
11302         FILE *fp = fopen("try.c", "r");
11303         char c = getc(fp);
11304         if (
11305                 18 <= FILE_cnt(fp) &&
11306                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
11307         )
11308                 exit(0);
11309         exit(1);
11310 }
11311 EOP
11312 val="$undef"
11313 set try
11314 if eval $compile; then
11315         if ./try; then
11316                 echo "Your stdio acts pretty std."
11317                 val="$define"
11318         else
11319                 echo "Your stdio isn't very std."
11320         fi
11321 else
11322         echo "Your stdio doesn't appear very std."
11323 fi
11324 $rm -f try.c try
11325 set d_stdstdio
11326 eval $setvar
11327
11328 : Can _ptr be used as an lvalue?
11329 case "$d_stdstdio$ptr_lval" in
11330 $define$define) val=$define ;;
11331 *) val=$undef ;;
11332 esac
11333 set d_stdio_ptr_lval
11334 eval $setvar
11335
11336 : Can _cnt be used as an lvalue?
11337 case "$d_stdstdio$cnt_lval" in
11338 $define$define) val=$define ;;
11339 *) val=$undef ;;
11340 esac
11341 set d_stdio_cnt_lval
11342 eval $setvar
11343
11344 : see if _base is also standard
11345 val="$undef"
11346 case "$d_stdstdio" in
11347 $define)
11348         $cat >try.c <<EOP
11349 #include <stdio.h>
11350 #define FILE_base(fp)   $stdio_base
11351 #define FILE_bufsiz(fp) $stdio_bufsiz
11352 int main() {
11353         FILE *fp = fopen("try.c", "r");
11354         char c = getc(fp);
11355         if (
11356                 19 <= FILE_bufsiz(fp) &&
11357                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
11358         )
11359                 exit(0);
11360         exit(1);
11361 }
11362 EOP
11363         set try
11364         if eval $compile; then
11365                 if ./try; then
11366                         echo "And its _base field acts std."
11367                         val="$define"
11368                 else
11369                         echo "But its _base field isn't std."
11370                 fi
11371         else
11372                 echo "However, it seems to be lacking the _base field."
11373         fi
11374         $rm -f try.c try
11375         ;;
11376 esac
11377 set d_stdiobase
11378 eval $setvar
11379
11380 $cat >&4 <<EOM
11381 Checking how to access stdio streams by file descriptor number...
11382 EOM
11383 case "$stdio_stream_array" in
11384 '')     $cat >try.c <<EOCP
11385 #include <stdio.h>
11386 int main() {
11387   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
11388     printf("yes\n");
11389 }
11390 EOCP
11391         for s in _iob __iob __sF
11392         do
11393                 set try -DSTDIO_STREAM_ARRAY=$s
11394                 if eval $compile; then
11395                         case "`./try$exe_ext`" in
11396                         yes)    stdio_stream_array=$s; break ;;
11397                         esac
11398                 fi
11399         done
11400         $rm -f try.* try$exe_ext
11401 esac
11402 case "$stdio_stream_array" in
11403 '')     $cat >&4 <<EOM
11404 I can't figure out how to access stdio streams by file descriptor number.
11405 EOM
11406         d_stdio_stream_array="$undef"
11407         ;;
11408 *)      $cat >&4 <<EOM
11409 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
11410 EOM
11411         d_stdio_stream_array="$define"
11412         ;;
11413 esac
11414
11415 : see if strcoll exists
11416 set strcoll d_strcoll
11417 eval $inlibc
11418
11419 : check for structure copying
11420 echo " "
11421 echo "Checking to see if your C compiler can copy structs..." >&4
11422 $cat >try.c <<'EOCP'
11423 int main()
11424 {
11425         struct blurfl {
11426                 int dyick;
11427         } foo, bar;
11428
11429         foo = bar;
11430 }
11431 EOCP
11432 if $cc -c try.c >/dev/null 2>&1 ; then
11433         val="$define"
11434         echo "Yup, it can."
11435 else
11436         val="$undef"
11437         echo "Nope, it can't."
11438 fi
11439 set d_strctcpy
11440 eval $setvar
11441 $rm -f try.*
11442
11443 : see if strerror and/or sys_errlist[] exist
11444 echo " "
11445 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
11446     if set strerror val -f d_strerror; eval $csym; $val; then
11447                 echo 'strerror() found.' >&4
11448                 d_strerror="$define"
11449                 d_strerrm='strerror(e)'
11450                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11451                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
11452                         d_syserrlst="$define"
11453                 else
11454                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
11455                         d_syserrlst="$undef"
11456                 fi
11457     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
11458                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
11459                 echo 'strerror() found in string header.' >&4
11460                 d_strerror="$define"
11461                 d_strerrm='strerror(e)'
11462                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11463                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
11464                                 d_syserrlst="$define"
11465                 else
11466                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
11467                         d_syserrlst="$undef"
11468                 fi
11469     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
11470                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
11471                 d_strerror="$undef"
11472                 d_syserrlst="$define"
11473                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
11474     else
11475                 echo 'strerror() and sys_errlist[] NOT found.' >&4
11476                 d_strerror="$undef"
11477                 d_syserrlst="$undef"
11478                 d_strerrm='"unknown"'
11479     fi
11480 fi
11481
11482 : see if strtod exists
11483 set strtod d_strtod
11484 eval $inlibc
11485
11486 : see if strtol exists
11487 set strtol d_strtol
11488 eval $inlibc
11489
11490 : see if strtold exists
11491 set strtold d_strtold
11492 eval $inlibc
11493
11494 : see if strtoll exists
11495 set strtoll d_strtoll
11496 eval $inlibc
11497
11498 case "$d_longlong-$d_strtoll" in
11499 "$define-$define")
11500         $cat <<EOM
11501 Checking whether your strtoll() works okay...
11502 EOM
11503         $cat >try.c <<'EOCP'
11504 #include <errno.h>
11505 #ifdef __hpux
11506 #define strtoll __strtoll
11507 #endif
11508 #include <stdio.h>
11509 extern long long int strtoll(char *s, char **, int); 
11510 static int bad = 0;
11511 int check(char *s, long long ell, int een) {
11512         long long gll;
11513         errno = 0;
11514         gll = strtoll(s, 0, 10);
11515         if (!((gll == ell) && (errno == een)))
11516                 bad++;
11517 }
11518 int main() {
11519         check(" 1",                                      1LL, 0);
11520         check(" 0",                                      0LL, 0);
11521         check("-1",                                     -1LL, 0);
11522         check("-9223372036854775808", -9223372036854775808LL, 0);
11523         check("-9223372036854775808", -9223372036854775808LL, 0);
11524         check(" 9223372036854775807",  9223372036854775807LL, 0);
11525         check("-9223372036854775808", -9223372036854775808LL, 0);
11526         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
11527         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
11528         if (!bad)
11529                 printf("ok\n");
11530 }
11531 EOCP
11532         set try
11533         if eval $compile; then
11534                 case "`./try`" in
11535                 ok) echo "Your strtoll() seems to be working okay." ;;
11536                 *) cat <<EOM >&4
11537 Your strtoll() doesn't seem to be working okay.
11538 EOM
11539                    d_strtoll="$undef"
11540                    ;;
11541                 esac
11542         fi
11543         ;;
11544 esac
11545
11546 : see if strtoul exists
11547 set strtoul d_strtoul
11548 eval $inlibc
11549
11550 : see if strtoull exists
11551 set strtoull d_strtoull
11552 eval $inlibc
11553
11554 case "$d_longlong-$d_strtoull" in
11555 "$define-$define")
11556         $cat <<EOM
11557 Checking whether your strtoull() works okay...
11558 EOM
11559         $cat >try.c <<'EOCP'
11560 #include <errno.h>
11561 #ifdef __hpux
11562 #define strtoull __strtoull
11563 #endif
11564 #include <stdio.h>
11565 extern unsigned long long int strtoull(char *s, char **, int); 
11566 static int bad = 0;
11567 int check(char *s, long long eull, int een) {
11568         long long gull;
11569         errno = 0;
11570         gull = strtoull(s, 0, 10);
11571         if (!((gull == eull) && (errno == een)))
11572                 bad++;
11573 }
11574 int main() {
11575         check(" 1",                                       1LL, 0);
11576         check(" 0",                                       0LL, 0);
11577         check("18446744073709551615", 18446744073709551615ULL, 0);
11578         check("18446744073709551616", 18446744073709551615ULL, ERANGE);
11579         if (!bad)
11580                 printf("ok\n");
11581 }
11582 EOCP
11583         set try
11584         if eval $compile; then
11585                 case "`./try`" in
11586                 ok) echo "Your strtoull() seems to be working okay." ;;
11587                 *) cat <<EOM >&4
11588 Your strtoull() doesn't seem to be working okay.
11589 EOM
11590                    d_strtoull="$undef"
11591                    ;;
11592                 esac
11593         fi
11594         ;;
11595 esac
11596
11597 : see if strtouq exists
11598 set strtouq d_strtouq
11599 eval $inlibc
11600
11601 : see if strxfrm exists
11602 set strxfrm d_strxfrm
11603 eval $inlibc
11604
11605 : see if symlink exists
11606 set symlink d_symlink
11607 eval $inlibc
11608
11609 : see if syscall exists
11610 set syscall d_syscall
11611 eval $inlibc
11612
11613 : see if sysconf exists
11614 set sysconf d_sysconf
11615 eval $inlibc
11616
11617 : see if system exists
11618 set system d_system
11619 eval $inlibc
11620
11621 : see if tcgetpgrp exists
11622 set tcgetpgrp d_tcgetpgrp
11623 eval $inlibc
11624
11625 : see if tcsetpgrp exists
11626 set tcsetpgrp d_tcsetpgrp
11627 eval $inlibc
11628
11629 : see if prototype for telldir is available
11630 echo " "
11631 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
11632 eval $hasproto
11633
11634 : see if this is a sys/times.h system
11635 set sys/times.h i_systimes
11636 eval $inhdr
11637
11638 : see if times exists
11639 echo " "
11640 if set times val -f d_times; eval $csym; $val; then
11641         echo 'times() found.' >&4
11642         d_times="$define"
11643         inc=''
11644         case "$i_systimes" in
11645         "$define") inc='sys/times.h';;
11646         esac
11647         rp="What is the type returned by times() on this system?"
11648         set clock_t clocktype long stdio.h sys/types.h $inc
11649         eval $typedef_ask
11650 else
11651         echo 'times() NOT found, hope that will do.' >&4
11652         d_times="$undef"
11653         clocktype='int'
11654 fi
11655
11656 : see if truncate exists
11657 set truncate d_truncate
11658 eval $inlibc
11659
11660 : see if tzname[] exists
11661 echo " "
11662 if set tzname val -a d_tzname; eval $csym; $val; then
11663         val="$define"
11664         echo 'tzname[] found.' >&4
11665 else
11666         val="$undef"
11667         echo 'tzname[] NOT found.' >&4
11668 fi
11669 set d_tzname
11670 eval $setvar
11671
11672 : see if umask exists
11673 set umask d_umask
11674 eval $inlibc
11675
11676 : see if ustat exists
11677 set ustat d_ustat
11678 eval $inlibc
11679
11680 : backward compatibility for d_hvfork
11681 if test X$d_hvfork != X; then
11682         d_vfork="$d_hvfork"
11683         d_hvfork=''
11684 fi
11685 : see if there is a vfork
11686 val=''
11687 set vfork val
11688 eval $inlibc
11689
11690 : Ok, but do we want to use it. vfork is reportedly unreliable in 
11691 : perl on Solaris 2.x, and probably elsewhere.
11692 case "$val" in
11693 $define)
11694         echo " "
11695         case "$usevfork" in
11696         false) dflt='n';;
11697         *) dflt='y';;
11698         esac
11699         cat <<'EOM'
11700  
11701 Perl can only use a vfork() that doesn't suffer from strict
11702 restrictions on calling functions or modifying global data in
11703 the child.  For example, glibc-2.1 contains such a vfork()
11704 that is unsuitable.  If your system provides a proper fork()
11705 call, chances are that you do NOT want perl to use vfork().
11706
11707 EOM
11708         rp="Do you still want to use vfork()?"
11709         . ./myread
11710         case "$ans" in
11711         y|Y) ;;
11712         *)
11713                 echo "Ok, we won't use vfork()."
11714                 val="$undef"
11715                 ;;
11716         esac
11717         ;;
11718 esac
11719 set d_vfork
11720 eval $setvar
11721 case "$d_vfork" in
11722 $define) usevfork='true';;
11723 *) usevfork='false';;
11724 esac
11725
11726 : see if this is an sysdir system
11727 set sys/dir.h i_sysdir
11728 eval $inhdr
11729
11730 : see if this is an sysndir system
11731 set sys/ndir.h i_sysndir
11732 eval $inhdr
11733
11734 : see if closedir exists
11735 set closedir d_closedir
11736 eval $inlibc
11737
11738 case "$d_closedir" in
11739 "$define")
11740         echo " "
11741         echo "Checking whether closedir() returns a status..." >&4
11742         cat > closedir.c <<EOM
11743 #$i_dirent I_DIRENT             /**/
11744 #$i_sysdir I_SYS_DIR            /**/
11745 #$i_sysndir I_SYS_NDIR          /**/
11746 #$i_systypes I_SYS_TYPES        /**/
11747
11748 #if defined(I_SYS_TYPES)
11749 #include <sys/types.h>
11750 #endif
11751 #if defined(I_DIRENT)
11752 #include <dirent.h>
11753 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
11754 #include <sys/dir.h>
11755 #endif
11756 #else
11757 #ifdef I_SYS_NDIR
11758 #include <sys/ndir.h>
11759 #else
11760 #ifdef I_SYS_DIR
11761 #ifdef hp9000s500
11762 #include <ndir.h>       /* may be wrong in the future */
11763 #else
11764 #include <sys/dir.h>
11765 #endif
11766 #endif
11767 #endif
11768 #endif 
11769 int main() { return closedir(opendir(".")); }
11770 EOM
11771         set closedir
11772         if eval $compile_ok; then
11773                 if ./closedir > /dev/null 2>&1 ; then
11774                         echo "Yes, it does."
11775                         val="$undef"
11776                 else
11777                         echo "No, it doesn't."
11778                         val="$define"
11779                 fi
11780         else
11781                 echo "(I can't seem to compile the test program--assuming it doesn't)"
11782                 val="$define"
11783         fi
11784         ;;
11785 *)
11786         val="$undef";
11787         ;;
11788 esac
11789 set d_void_closedir
11790 eval $setvar
11791 $rm -f closedir*
11792 : check for volatile keyword
11793 echo " "
11794 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11795 $cat >try.c <<'EOCP'
11796 int main()
11797 {
11798         typedef struct _goo_struct goo_struct;
11799         goo_struct * volatile goo = ((goo_struct *)0);
11800         struct _goo_struct {
11801                 long long_int;
11802                 int reg_int;
11803                 char char_var;
11804         };
11805         typedef unsigned short foo_t;
11806         char *volatile foo;
11807         volatile int bar;
11808         volatile foo_t blech;
11809         foo = foo;
11810 }
11811 EOCP
11812 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11813         val="$define"
11814         echo "Yup, it does."
11815 else
11816         val="$undef"
11817         echo "Nope, it doesn't."
11818 fi
11819 set d_volatile
11820 eval $setvar
11821 $rm -f try.*
11822
11823 : see if there is a wait4
11824 set wait4 d_wait4
11825 eval $inlibc
11826
11827 : see if waitpid exists
11828 set waitpid d_waitpid
11829 eval $inlibc
11830
11831 : see if wcstombs exists
11832 set wcstombs d_wcstombs
11833 eval $inlibc
11834
11835 : see if wctomb exists
11836 set wctomb d_wctomb
11837 eval $inlibc
11838
11839 : preserve RCS keywords in files with variable substitution, grrr
11840 Date='$Date'
11841 Id='$Id'
11842 Log='$Log'
11843 RCSfile='$RCSfile'
11844 Revision='$Revision'
11845
11846 case "$crosscompile" in
11847 ''|[nN]*) crosscompile="$undef" ;;
11848 esac
11849
11850 case "$osname" in
11851 next|rhapsody|darwin) multiarch="$define" ;;
11852 esac
11853 case "$multiarch" in
11854 ''|[nN]*) multiarch="$undef" ;;
11855 esac
11856
11857 : check for alignment requirements
11858 echo " "
11859 case "$crosscompile$multiarch" in
11860 *$define*)
11861         $cat <<EOM
11862 You seem to be either cross-compiling or doing a multiarchitecture build,
11863 skipping the memory alignment check.
11864
11865 EOM
11866         case "$alignbytes" in
11867         '') alignbytes=8 ;;
11868         esac
11869         ;;
11870 *)
11871         case "$alignbytes" in
11872         '') echo "Checking alignment constraints..." >&4
11873                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
11874                         $cat >try.c <<'EOCP'
11875 typedef long double NV;
11876 EOCP
11877                 else
11878                         $cat >try.c <<'EOCP'
11879 typedef double NV;
11880 EOCP
11881                 fi
11882                 $cat >>try.c <<'EOCP'
11883 #include <stdio.h>
11884 struct foobar {
11885         char foo;
11886         NV bar;
11887 } try_algn;
11888 int main()
11889 {
11890     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
11891     return(0);
11892 }
11893 EOCP
11894                 set try
11895                 if eval $compile_ok; then
11896                         dflt=`./try`
11897                 else
11898                         dflt='8'
11899                         echo "(I can't seem to compile the test program...)"
11900                 fi
11901                 ;;
11902         *) dflt="$alignbytes"
11903                 ;;
11904         esac
11905         rp="Doubles must be aligned on a how-many-byte boundary?"
11906         . ./myread
11907         alignbytes="$ans"
11908         $rm -f try.c try
11909         ;;
11910 esac
11911
11912
11913 : set the base revision
11914 baserev=5.0
11915
11916 : check for ordering of bytes in a long
11917 echo " "
11918 case "$crosscompile$multiarch" in
11919 *$define*)
11920         $cat <<EOM
11921 You seem to be either cross-compiling or doing a multiarchitecture build,
11922 skipping the byteorder check.
11923
11924 EOM
11925         byteorder='0xffff'
11926         ;;
11927 *)
11928         case "$byteorder" in
11929         '')
11930                 $cat <<'EOM'
11931 In the following, larger digits indicate more significance.  A big-endian
11932 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
11933 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
11934 machines may have weird orders like 3412.  A Cray will report 87654321,
11935 an Alpha will report 12345678. If the test program works the default is
11936 probably right.
11937 I'm now running the test program...
11938 EOM
11939                 $cat >try.c <<'EOCP'
11940 #include <stdio.h>
11941 int main()
11942 {
11943         int i;
11944         union {
11945                 unsigned long l;
11946                 char c[sizeof(long)];
11947         } u;
11948
11949         if (sizeof(long) > 4)
11950                 u.l = (0x08070605L << 32) | 0x04030201L;
11951         else
11952                 u.l = 0x04030201L;
11953         for (i = 0; i < sizeof(long); i++)
11954                 printf("%c", u.c[i]+'0');
11955         printf("\n");
11956         exit(0);
11957 }
11958 EOCP
11959                 xxx_prompt=y
11960                 set try
11961                 if eval $compile && ./try > /dev/null; then
11962                         dflt=`./try`
11963                         case "$dflt" in
11964                         [1-4][1-4][1-4][1-4]|12345678|87654321)
11965                                 echo "(The test program ran ok.)"
11966                                 echo "byteorder=$dflt"
11967                                 xxx_prompt=n
11968                         ;;
11969                         ????|????????) echo "(The test program ran ok.)" ;;
11970                         *) echo "(The test program didn't run right for some reason.)" ;;
11971                         esac
11972                 else
11973                         dflt='4321'
11974                         cat <<'EOM'
11975 (I can't seem to compile the test program.  Guessing big-endian...)
11976 EOM
11977                 fi
11978                 case "$xxx_prompt" in
11979                 y)
11980                         rp="What is the order of bytes in a long?"
11981                         . ./myread
11982                         byteorder="$ans"
11983                         ;;
11984                 *)      byteorder=$dflt
11985                         ;;
11986                 esac
11987                 ;;
11988         esac
11989         $rm -f try.c try
11990         ;;
11991 esac
11992
11993
11994 : how do we catenate cpp tokens here?
11995 echo " "
11996 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
11997 $cat >cpp_stuff.c <<'EOCP'
11998 #define RCAT(a,b)a/**/b
11999 #define ACAT(a,b)a ## b
12000 RCAT(Rei,ser)
12001 ACAT(Cir,cus)
12002 EOCP
12003 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
12004 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
12005         echo "Oh!  Smells like ANSI's been here." >&4
12006         echo "We can catify or stringify, separately or together!"
12007         cpp_stuff=42
12008 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
12009         echo "Ah, yes!  The good old days!" >&4
12010         echo "However, in the good old days we don't know how to stringify and"
12011         echo "catify at the same time."
12012         cpp_stuff=1
12013 else
12014         $cat >&4 <<EOM
12015 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
12016 to have to edit the values of CAT[2-5] in config.h...
12017 EOM
12018         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
12019 fi
12020 $rm -f cpp_stuff.*
12021
12022 : see if this is a db.h system
12023 set db.h i_db
12024 eval $inhdr
12025
12026 case "$i_db" in
12027 $define)
12028         : Check db version.
12029         echo " "
12030         echo "Checking Berkeley DB version ..." >&4
12031         $cat >try.c <<EOCP
12032 #$d_const HASCONST
12033 #ifndef HASCONST
12034 #define const
12035 #endif
12036 #include <sys/types.h>
12037 #include <stdio.h>
12038 #include <db.h>
12039 int main()
12040 {
12041 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
12042     int Major, Minor, Patch ;
12043     unsigned long Version ;
12044     (void)db_version(&Major, &Minor, &Patch) ;
12045     printf("You have Berkeley DB Version 2 or greater\n");
12046
12047     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
12048                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
12049     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
12050                 Major, Minor, Patch) ;
12051
12052     /* check that db.h & libdb are compatible */
12053     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
12054         printf("db.h and libdb are incompatible\n") ;
12055         exit(3);        
12056     }
12057
12058     printf("db.h and libdb are compatible\n") ;
12059
12060     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
12061                 + DB_VERSION_PATCH ;
12062
12063     /* needs to be >= 2.3.4 */
12064     if (Version < 2003004) {
12065     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
12066         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
12067         exit(2);        
12068     }
12069
12070     exit(0);
12071 #else
12072 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
12073     printf("You have Berkeley DB Version 1\n");
12074     exit(0);    /* DB version < 2: the coast is clear. */
12075 #else
12076     exit(1);    /* <db.h> not Berkeley DB? */
12077 #endif
12078 #endif
12079 }
12080 EOCP
12081         set try
12082         if eval $compile_ok && ./try; then
12083                 echo 'Looks OK.' >&4
12084         else
12085                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
12086                 i_db=$undef
12087                 case " $libs " in
12088                 *"-ldb "*)
12089                         : Remove db from list of libraries to use
12090                         echo "Removing unusable -ldb from library list" >&4
12091                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
12092                         shift
12093                         libs="$*"
12094                         echo "libs = $libs" >&4
12095                         ;;
12096                 esac
12097         fi
12098         $rm -f try.*
12099         ;;
12100 esac
12101
12102 case "$i_db" in
12103 define)
12104         : Check the return type needed for hash 
12105         echo " "
12106         echo "Checking return type needed for hash for Berkeley DB ..." >&4
12107         $cat >try.c <<EOCP
12108 #$d_const HASCONST
12109 #ifndef HASCONST
12110 #define const
12111 #endif
12112 #include <sys/types.h>
12113 #include <db.h>
12114
12115 #ifndef DB_VERSION_MAJOR
12116 u_int32_t hash_cb (ptr, size)
12117 const void *ptr;
12118 size_t size;
12119 {
12120 }
12121 HASHINFO info;
12122 int main()
12123 {
12124         info.hash = hash_cb;
12125 }
12126 #endif
12127 EOCP
12128         if $cc $ccflags -c try.c >try.out 2>&1 ; then
12129                 if $contains warning try.out >>/dev/null 2>&1 ; then
12130                         db_hashtype='int'
12131                 else
12132                         db_hashtype='u_int32_t'
12133                 fi
12134         else
12135                 : XXX Maybe we should just give up here.
12136                 db_hashtype=u_int32_t
12137                 $cat try.out >&4
12138                 echo "Help:  I can't seem to compile the db test program." >&4
12139                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
12140         fi
12141         $rm -f try.*
12142         echo "Your version of Berkeley DB uses $db_hashtype for hash."
12143         ;;
12144 *)      db_hashtype=u_int32_t
12145         ;;
12146 esac
12147 case "$i_db" in
12148 define)
12149         : Check the return type needed for prefix 
12150         echo " "
12151         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
12152         cat >try.c <<EOCP
12153 #$d_const HASCONST
12154 #ifndef HASCONST
12155 #define const
12156 #endif
12157 #include <sys/types.h>
12158 #include <db.h>
12159
12160 #ifndef DB_VERSION_MAJOR
12161 size_t prefix_cb (key1, key2)
12162 const DBT *key1;
12163 const DBT *key2;
12164 {
12165 }
12166 BTREEINFO info;
12167 int main()
12168 {
12169         info.prefix = prefix_cb;
12170 }
12171 #endif
12172 EOCP
12173         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
12174                 if $contains warning try.out >>/dev/null 2>&1 ; then
12175                         db_prefixtype='int'
12176                 else
12177                         db_prefixtype='size_t'
12178                 fi
12179         else
12180                 db_prefixtype='size_t'
12181                 : XXX Maybe we should just give up here.
12182                 $cat try.out >&4
12183                 echo "Help:  I can't seem to compile the db test program." >&4
12184                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
12185         fi
12186         $rm -f try.*
12187         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
12188         ;;
12189 *)      db_prefixtype='size_t'
12190         ;;
12191 esac
12192
12193 : check for void type
12194 echo " "
12195 echo "Checking to see how well your C compiler groks the void type..." >&4
12196 case "$voidflags" in
12197 '')
12198         $cat >try.c <<'EOCP'
12199 #if TRY & 1
12200 void sub() {
12201 #else
12202 sub() {
12203 #endif
12204         extern void moo();      /* function returning void */
12205         void (*goo)();          /* ptr to func returning void */
12206 #if TRY & 8
12207         void *hue;              /* generic ptr */
12208 #endif
12209 #if TRY & 2
12210         void (*foo[10])();
12211 #endif
12212
12213 #if TRY & 4
12214         if(goo == moo) {
12215                 exit(0);
12216         }
12217 #endif
12218         exit(0);
12219 }
12220 int main() { sub(); }
12221 EOCP
12222         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
12223                 voidflags=$defvoidused
12224         echo "Good.  It appears to support void to the level $package wants.">&4
12225                 if $contains warning .out >/dev/null 2>&1; then
12226                         echo "However, you might get some warnings that look like this:"
12227                         $cat .out
12228                 fi
12229         else
12230 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
12231                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
12232                         echo "It supports 1..."
12233                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
12234                                 echo "It also supports 2..."
12235                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
12236                                         voidflags=7
12237                                         echo "And it supports 4 but not 8 definitely."
12238                                 else
12239                                         echo "It doesn't support 4..."
12240                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
12241                                                 voidflags=11
12242                                                 echo "But it supports 8."
12243                                         else
12244                                                 voidflags=3
12245                                                 echo "Neither does it support 8."
12246                                         fi
12247                                 fi
12248                         else
12249                                 echo "It does not support 2..."
12250                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
12251                                         voidflags=13
12252                                         echo "But it supports 4 and 8."
12253                                 else
12254                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
12255                                                 voidflags=5
12256                                                 echo "And it supports 4 but has not heard about 8."
12257                                         else
12258                                                 echo "However it supports 8 but not 4."
12259                                         fi
12260                                 fi
12261                         fi
12262                 else
12263                         echo "There is no support at all for void."
12264                         voidflags=0
12265                 fi
12266         fi
12267 esac
12268 case "$voidflags" in
12269 "$defvoidused") ;;
12270 *)      $cat >&4 <<'EOM'
12271   Support flag bits are:
12272     1: basic void declarations.
12273     2: arrays of pointers to functions returning void.
12274     4: operations between pointers to and addresses of void functions.
12275     8: generic void pointers.
12276 EOM
12277         dflt="$voidflags";
12278         rp="Your void support flags add up to what?"
12279         . ./myread
12280         voidflags="$ans"
12281         ;;
12282 esac
12283 $rm -f try.* .out
12284
12285
12286 : How can we generate normalized random numbers ?
12287 echo " "
12288 echo "Looking for a random number function..." >&4
12289 case "$randfunc" in
12290 '')
12291         if set drand48 val -f; eval $csym; $val; then
12292                 dflt="drand48"
12293                 echo "Good, found drand48()." >&4
12294         elif set random val -f; eval $csym; $val; then
12295                 dflt="random"
12296                 echo "OK, found random()." >&4
12297         else
12298                 dflt="rand"
12299                 echo "Yick, looks like I have to use rand()." >&4
12300         fi
12301         echo " "
12302         ;;
12303 *)
12304         dflt="$randfunc"
12305         ;;
12306 esac
12307 cont=true
12308
12309 case "$ccflags" in
12310 *-Dmy_rand=*|*-Dmy_srand=*)
12311         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
12312         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
12313         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
12314         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
12315         ;;
12316 esac
12317
12318 while $test "$cont"; do
12319         rp="Use which function to generate random numbers?"
12320         . ./myread
12321         if $test "$ans" = "$dflt"; then
12322                 : null
12323         else
12324                 randbits=''
12325         fi
12326         randfunc="$ans"
12327         if set $ans val -f; eval $csym; $val; then
12328                 cont=''
12329         else
12330                 dflt=y
12331                 rp="I cannot find function $ans. Use that name anyway?"
12332                 . ./myread
12333                 dflt=rand
12334                 case "$ans" in
12335                         [yY]*) cont='';;
12336                 esac
12337         fi
12338         case "$cont" in
12339         '')
12340                 case "$randfunc" in
12341                 drand48)
12342                         drand01="drand48()"
12343                         seedfunc="srand48"
12344                         randbits=48
12345                         randseedtype=long
12346                         ;;
12347                 rand|random)
12348                         case "$randbits" in
12349                         '')
12350 echo "Checking to see how many bits your $randfunc() function produces..." >&4
12351                                 $cat >try.c <<EOCP
12352 #$i_unistd I_UNISTD
12353 #$i_stdlib I_STDLIB
12354 #include <stdio.h>
12355 #ifdef I_UNISTD
12356 #  include <unistd.h>
12357 #endif
12358 #ifdef I_STDLIB
12359 #  include <stdlib.h>
12360 #endif
12361 int main()
12362 {
12363         register int i;
12364         register unsigned long tmp;
12365         register unsigned long max = 0L;
12366
12367         for (i = 1000; i; i--) {
12368                 tmp = (unsigned long) $randfunc();
12369                 if (tmp > max) max = tmp;
12370         }
12371         for (i = 0; max; i++)
12372                 max /= 2;
12373         printf("%d\n",i);
12374 }
12375 EOCP
12376                                 set try
12377                                 if eval $compile_ok; then
12378                                         dflt=`try`
12379                                 else
12380                                         dflt='?'
12381                                         echo "(I can't seem to compile the test program...)"
12382                                 fi
12383                                 ;;
12384                         *)
12385                                 dflt="$randbits"
12386                                 ;;
12387                         esac
12388                         rp="How many bits does your $randfunc() function produce?"
12389                         . ./myread
12390                         randbits="$ans"
12391                         $rm -f try.c try
12392                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12393                         seedfunc="s$randfunc"
12394                         randseedtype=unsigned
12395                         ;;
12396                 *)
12397                         dflt="31"
12398                         rp="How many bits does your $randfunc() function produce?"
12399                         . ./myread
12400                         randbits="$ans"
12401                         seedfunc="s$randfunc"
12402                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12403                         if set $seedfunc val -f; eval $csym; $val; then
12404                                 echo "(Using $seedfunc() to seed random generator)"
12405                         else
12406                                 echo "(Warning: no $seedfunc() to seed random generator)"
12407                                 seedfunc=rand
12408                         fi
12409                         randseedtype=unsigned
12410                         ;;
12411                 esac
12412                 ;;
12413         esac
12414 done
12415
12416 echo " "
12417 echo "Determining whether or not we are on an EBCDIC system..." >&4
12418 $cat >tebcdic.c <<'EOM'
12419 int main()
12420 {
12421   if ('M'==0xd4) return 0;
12422   return 1;
12423 }
12424 EOM
12425
12426 val=$undef
12427 set tebcdic
12428 if eval $compile_ok; then
12429         if ./tebcdic; then
12430                 echo "You have EBCDIC." >&4
12431                 val="$define"
12432         else
12433                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin." >&4
12434         fi
12435 else
12436         echo "I'm unable to compile the test program." >&4
12437         echo "I'll assume ASCII or some ISO Latin." >&4
12438 fi
12439 $rm -f tebcdic.c tebcdic
12440 set ebcdic
12441 eval $setvar
12442
12443 echo " "
12444 $cat >&4 <<EOM
12445 Checking how to flush all pending stdio output...
12446 EOM
12447 # I only know how to find the first 32 possibly open files on SunOS.
12448 # See also hints/sunos_4_1.sh and util.c  --AD
12449 case "$osname" in
12450 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
12451 esac
12452 $cat >>try.c <<EOCP
12453 #include <stdio.h>
12454 #$i_unistd I_UNISTD
12455 #ifdef I_UNISTD
12456 # include <unistd.h>
12457 #endif
12458 #$d_sysconf HAS_SYSCONF
12459 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
12460 #ifdef HAS_STDIO_STREAM_ARRAY
12461 # define STDIO_STREAM_ARRAY $stdio_stream_array
12462 #endif
12463 int main() {
12464   FILE* p = fopen("try.out", "w");
12465 #ifdef TRY_FPUTC
12466   fputc('x', p);
12467 #else
12468 # ifdef TRY_FPRINTF
12469   fprintf(p, "x");
12470 # endif
12471 #endif
12472 #ifdef TRY_FFLUSH_NULL
12473   fflush(NULL);
12474 #endif
12475 #ifdef TRY_FFLUSH_ALL
12476   {
12477     long open_max = -1;
12478 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
12479     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
12480 # else
12481 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
12482     open_max = sysconf(_SC_OPEN_MAX);
12483 #  else
12484 #   ifdef FOPEN_MAX
12485     open_max = FOPEN_MAX;
12486 #   else
12487 #    ifdef OPEN_MAX
12488     open_max = OPEN_MAX;
12489 #    else
12490 #     ifdef _NFILE
12491     open_max = _NFILE;
12492 #     endif
12493 #    endif
12494 #   endif
12495 #  endif
12496 # endif 
12497 # ifdef HAS_STDIO_STREAM_ARRAY
12498     if (open_max > 0) {
12499       long i;
12500       for (i = 0; i < open_max; i++)
12501             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
12502                 STDIO_STREAM_ARRAY[i]._file < open_max &&
12503                 STDIO_STREAM_ARRAY[i]._flag)
12504                 fflush(&STDIO_STREAM_ARRAY[i]);
12505     }   
12506   }
12507 # endif
12508 #endif
12509   _exit(42);
12510 }
12511 EOCP
12512 : first we have to find out how _not_ to flush
12513 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
12514     output=''
12515     set try -DTRY_FPUTC
12516     if eval $compile; then
12517             $rm -f try.out
12518             ./try$exe_ext 2>/dev/null
12519             if $test ! -s try.out -a "X$?" = X42; then
12520                 output=-DTRY_FPUTC
12521             fi
12522     fi
12523     case "$output" in
12524     '')
12525             set try -DTRY_FPRINTF
12526             $rm -f try.out
12527             if eval $compile; then
12528                     $rm -f try.out
12529                     ./try$exe_ext 2>/dev/null
12530                     if $test ! -s try.out -a "X$?" = X42; then
12531                         output=-DTRY_FPRINTF
12532                     fi
12533             fi
12534         ;;
12535     esac
12536 fi
12537 : check for fflush NULL behaviour
12538 case "$fflushNULL" in
12539 '')     set try -DTRY_FFLUSH_NULL $output
12540         if eval $compile; then
12541                 $rm -f try.out
12542                 ./try$exe_ext 2>/dev/null
12543                 code="$?"
12544                 if $test -s try.out -a "X$code" = X42; then
12545                         fflushNULL="`$cat try.out`"
12546                 else
12547                         if $test "X$code" != X42; then
12548                                 $cat >&4 <<EOM
12549 (If this test failed, don't worry, we'll try another method shortly.)
12550 EOM
12551                         fi
12552                 fi
12553         fi
12554         $rm -f core try.core core.try.*
12555         case "$fflushNULL" in
12556         x)      $cat >&4 <<EOM
12557 Your fflush(NULL) works okay.
12558 EOM
12559                 fflushNULL="$define"
12560                 ;;
12561         '')     $cat >&4 <<EOM
12562 Your fflush(NULL) isn't working (contrary to ANSI C).
12563 EOM
12564                 fflushNULL="$undef"
12565                 ;;
12566         *)      $cat >&4 <<EOM
12567 Cannot figure out whether your fflush(NULL) works or not.
12568 I'm assuming it doesn't (contrary to ANSI C).
12569 EOM
12570                 fflushNULL="$undef"
12571                 ;;
12572         esac
12573         ;;
12574 $define|true|[yY]*)
12575         fflushNULL="$define"
12576         ;;
12577 *)
12578         fflushNULL="$undef"
12579         ;;
12580 esac
12581 : check explicit looping only if NULL did not work
12582 case "$fflushNULL" in
12583 "$undef")
12584         : check for fflush all behaviour
12585         case "$fflushall" in
12586         '')     set try -DTRY_FFLUSH_ALL $output
12587                 if eval $compile; then
12588                         $cat >&4 <<EOM
12589 (Now testing the other method--but note that also this may fail.)
12590 EOM
12591                         $rm -f try.out
12592                         ./try$exe_ext 2>/dev/null
12593                         if $test -s try.out -a "X$?" = X42; then
12594                                 fflushall="`$cat try.out`"
12595                         fi
12596                 fi
12597                 $rm -f core try.core core.try.*
12598                 case "$fflushall" in
12599                 x)      $cat >&4 <<EOM
12600 Whew. Flushing explicitly all the stdio streams works.
12601 EOM
12602                         fflushall="$define"
12603                         ;;
12604                 '')     $cat >&4 <<EOM
12605 Sigh. Flushing explicitly all the stdio streams doesn't work.
12606 EOM
12607                         fflushall="$undef"
12608                         ;;
12609                 *)      $cat >&4 <<EOM
12610 Cannot figure out whether flushing stdio streams explicitly works or not.
12611 I'm assuming it doesn't.
12612 EOM
12613                         fflushall="$undef"
12614                         ;;
12615                 esac
12616                 ;;
12617         "$define"|true|[yY]*)
12618                 fflushall="$define"
12619                 ;;
12620         *)
12621                 fflushall="$undef"
12622                 ;;
12623         esac
12624         ;;
12625 *)      fflushall="$undef"      
12626         ;;
12627 esac
12628 case "$fflushNULL$fflushall" in
12629 undefundef)
12630         $cat <<EOM
12631 I cannot figure out how to flush pending stdio output.
12632 EOM
12633         ;;
12634 esac
12635 $rm -f try.* try$exe_ext
12636
12637 : Store the full pathname to the ar program for use in the C program
12638 : Respect a hint or command line value for full_ar.
12639 case "$full_ar" in
12640 '') full_ar=$ar ;;
12641 esac
12642
12643 : Store the full pathname to the sed program for use in the C program
12644 full_sed=$sed
12645
12646 : see what type gids are declared as in the kernel
12647 echo " "
12648 echo "Looking for the type for group ids returned by getgid()."
12649 set gid_t gidtype xxx stdio.h sys/types.h
12650 eval $typedef
12651 case "$gidtype" in
12652 xxx)
12653         xxx=`./findhdr sys/user.h`
12654         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
12655         case $1 in
12656         unsigned) dflt="$1 $2" ;;
12657         *) dflt="$1" ;;
12658         esac
12659         ;;
12660 *) dflt="$gidtype";;
12661 esac
12662 case "$gidtype" in
12663 gid_t) echo "gid_t found." ;;
12664 *)      rp="What is the type for group ids returned by getgid()?"
12665         . ./myread
12666         gidtype="$ans"
12667         ;;
12668 esac
12669
12670 echo " "
12671 case "$gidtype" in
12672 *_t) zzz="$gidtype"     ;;
12673 *)   zzz="gid"          ;;
12674 esac
12675 echo "Checking the size of $zzz..." >&4 
12676 cat > try.c <<EOCP
12677 #include <sys/types.h>
12678 #include <stdio.h>
12679 int main() {
12680     printf("%d\n", (int)sizeof($gidtype));
12681     exit(0);
12682 }
12683 EOCP
12684 set try
12685 if eval $compile_ok; then
12686         yyy=`./try`
12687         case "$yyy" in
12688         '')     gidsize=4
12689                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
12690                 ;;
12691         *)      gidsize=$yyy
12692                 echo "Your $zzz is $gidsize bytes long."
12693                 ;;
12694         esac
12695 else
12696         gidsize=4
12697         echo "(I can't compile the test program--guessing $gidsize.)" >&4
12698 fi
12699
12700
12701 echo " "
12702 case "$gidtype" in
12703 *_t) zzz="$gidtype"     ;;
12704 *)   zzz="gid"          ;;
12705 esac
12706 echo "Checking the sign of $zzz..." >&4 
12707 cat > try.c <<EOCP
12708 #include <sys/types.h>
12709 #include <stdio.h>
12710 int main() {
12711         $gidtype foo = -1;
12712         if (foo < 0)
12713                 printf("-1\n");
12714         else
12715                 printf("1\n");
12716 }
12717 EOCP
12718 set try
12719 if eval $compile; then
12720         yyy=`./try`
12721         case "$yyy" in
12722         '')     gidsign=1
12723                 echo "(I can't execute the test program--guessing unsigned.)" >&4
12724                 ;;
12725         *)      gidsign=$yyy
12726                 case "$gidsign" in
12727                  1) echo "Your $zzz is unsigned." ;;
12728                 -1) echo "Your $zzz is signed."   ;;
12729                 esac
12730                 ;;
12731         esac
12732 else
12733         gidsign=1
12734         echo "(I can't compile the test program--guessing unsigned.)" >&4
12735 fi
12736
12737
12738 echo " "
12739
12740 if $test X"$quadtype" != X; then
12741
12742 echo "Checking how to print 64-bit integers..." >&4
12743
12744 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
12745         $cat >try.c <<'EOCP'
12746 #include <sys/types.h>
12747 #include <stdio.h>
12748 int main() {
12749   int q = 12345678901;
12750   printf("%ld\n", q);
12751 }
12752 EOCP
12753         set try
12754         if eval $compile; then
12755                 yyy=`./try$exe_ext`
12756                 case "$yyy" in
12757                 12345678901)
12758                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
12759                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIX64='"X"';
12760                         echo "We will use %d."
12761                         ;;
12762                 esac
12763         fi
12764 fi
12765
12766 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
12767         $cat >try.c <<'EOCP'
12768 #include <sys/types.h>
12769 #include <stdio.h>
12770 int main() {
12771   long q = 12345678901;
12772   printf("%ld\n", q);
12773 }
12774 EOCP
12775         set try
12776         if eval $compile; then
12777                 yyy=`./try$exe_ext`
12778                 case "$yyy" in
12779                 12345678901)
12780                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
12781                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIX64='"lX"';
12782                         echo "We will use %ld."
12783                         ;;
12784                 esac
12785         fi
12786 fi
12787
12788 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
12789         $cat >try.c <<'EOCP'
12790 #include <sys/types.h>
12791 #include <inttypes.h>
12792 #include <stdio.h>
12793 int main() {
12794   int64_t q = 12345678901;
12795   printf("%" PRId64 "\n", q);
12796 }
12797 EOCP
12798         set try
12799         if eval $compile; then
12800                 yyy=`./try$exe_ext`
12801                 case "$yyy" in
12802                 12345678901)
12803                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
12804                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIX64=PRIX64;
12805                         echo "We will use the C9X style."
12806                         ;;
12807                 esac
12808         fi
12809 fi
12810
12811 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
12812         $cat >try.c <<'EOCP'
12813 #include <sys/types.h>
12814 #include <stdio.h>
12815 int main() {
12816   long long q = 12345678901LL; /* AIX cc requires the LL prefix. */
12817   printf("%lld\n", q);
12818 }
12819 EOCP
12820         set try
12821         if eval $compile; then
12822                 yyy=`./try$exe_ext`
12823                 case "$yyy" in
12824                 12345678901)
12825                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
12826                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIX64='"llX"';
12827                         echo "We will use the %lld style."
12828                         ;;
12829                 esac
12830         fi
12831 fi
12832
12833 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
12834         $cat >try.c <<EOCP
12835 #include <sys/types.h>
12836 #include <stdio.h>
12837 int main() {
12838   $quadtype q = 12345678901;
12839   printf("%Ld\n", q);
12840 }
12841 EOCP
12842         set try
12843         if eval $compile; then
12844                 yyy=`./try$exe_ext`
12845                 case "$yyy" in
12846                 12345678901)
12847                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
12848                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIX64='"LX"';
12849                         echo "We will use %Ld."
12850                         ;;
12851                 esac
12852         fi
12853 fi
12854
12855 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
12856         $cat >try.c <<EOCP
12857 #include <sys/types.h>
12858 #include <stdio.h>
12859 int main() {
12860   $quadtype q = 12345678901;
12861   printf("%qd\n", q);
12862 }
12863 EOCP
12864         set try
12865         if eval $compile; then
12866                 yyy=`./try$exe_ext`
12867                 case "$yyy" in
12868                 12345678901)
12869                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
12870                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIX64='"qX"';
12871                         echo "We will use %qd."
12872                         ;;
12873                 esac
12874         fi
12875 fi
12876
12877 if $test X"$sPRId64" = X; then
12878         echo "Cannot figure out how to print 64-bit integers." >&4
12879 fi
12880
12881 $rm -f try try.*
12882
12883 fi
12884
12885 case "$sPRId64" in
12886 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
12887         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIX64="$undef"; 
12888         ;;
12889 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
12890         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIX64="$define"; 
12891         ;;
12892 esac
12893
12894
12895 echo " "
12896 $echo "Checking the format strings to be used for Perl's internal types..." >&4
12897
12898 if $test X"$ivsize" = X8; then
12899         ivdformat="$sPRId64"
12900         uvuformat="$sPRIu64"
12901         uvoformat="$sPRIo64"
12902         uvxformat="$sPRIx64"
12903 else
12904         if $test X"$ivsize" = X"$longsize"; then
12905                 ivdformat='"ld"'
12906                 uvuformat='"lu"'
12907                 uvoformat='"lo"'
12908                 uvxformat='"lx"'
12909         else
12910                 if $test X"$ivsize" = X"$intsize"; then
12911                         ivdformat='"d"'
12912                         uvuformat='"u"'
12913                         uvoformat='"o"'
12914                         uvxformat='"x"'
12915                 else
12916                         : far out
12917                         if $test X"$ivsize" = X"$shortsize"; then
12918                                 ivdformat='"hd"'
12919                                 uvuformat='"hu"'
12920                                 uvoformat='"ho"'
12921                                 uvxformat='"hx"'
12922                         fi
12923                 fi
12924         fi
12925 fi
12926
12927 case "$ivdformat" in
12928 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
12929     exit 1
12930     ;;
12931 esac
12932
12933
12934 echo " "
12935 $echo "Checking the format string to be used for gids..." >&4
12936
12937 case "$gidsign" in
12938 -1)     if $test X"$gidsize" = X"$ivsize"; then
12939                 gidformat="$ivdformat"
12940         else
12941                 if $test X"$gidsize" = X"$longsize"; then
12942                         gidformat='"ld"'
12943                 else
12944                         if $test X"$gidsize" = X"$intsize"; then
12945                                 gidformat='"d"'
12946                         else
12947                                 if $test X"$gidsize" = X"$shortsize"; then
12948                                         gidformat='"hd"'
12949                                 fi
12950                         fi
12951                 fi
12952         fi
12953         ;;
12954 *)      if $test X"$gidsize" = X"$uvsize"; then
12955                 gidformat="$uvuformat"
12956         else
12957                 if $test X"$gidsize" = X"$longsize"; then
12958                         gidformat='"lu"'
12959                 else
12960                         if $test X"$gidsize" = X"$intsize"; then
12961                                 gidformat='"u"'
12962                         else
12963                                 if $test X"$gidsize" = X"$shortsize"; then
12964                                         gidformat='"hu"'
12965                                 fi
12966                         fi
12967                 fi
12968         fi
12969         ;;
12970 esac
12971
12972 : see if getgroups exists
12973 set getgroups d_getgrps
12974 eval $inlibc
12975
12976 : see if setgroups exists
12977 set setgroups d_setgrps
12978 eval $inlibc
12979
12980
12981 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
12982 echo " "
12983 case "$d_getgrps$d_setgrps" in
12984 *define*)
12985         case "$groupstype" in
12986         '') dflt="$gidtype" ;;
12987         *)  dflt="$groupstype" ;;
12988         esac
12989         $cat <<EOM
12990 What type of pointer is the second argument to getgroups() and setgroups()?
12991 Usually this is the same as group ids, $gidtype, but not always.
12992
12993 EOM
12994         rp='What type pointer is the second argument to getgroups() and setgroups()?'
12995         . ./myread
12996         groupstype="$ans"
12997         ;;
12998 *)  groupstype="$gidtype";;
12999 esac
13000
13001 echo " "
13002 echo "Checking if your $make program sets \$(MAKE)..." >&4
13003 case "$make_set_make" in
13004 '')
13005         $sed 's/^X //' > testmake.mak << 'EOF'
13006 Xall:
13007 X       @echo 'maketemp="$(MAKE)"'
13008 EOF
13009         case "`$make -f testmake.mak 2>/dev/null`" in
13010         *maketemp=*) make_set_make='#' ;;
13011         *)      make_set_make="MAKE=$make" ;;
13012         esac
13013         $rm -f testmake.mak
13014         ;;
13015 esac
13016 case "$make_set_make" in
13017 '#') echo "Yup, it does.";;
13018 *) echo "Nope, it doesn't.";;
13019 esac
13020
13021 : see what type is used for mode_t
13022 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
13023 set mode_t modetype int stdio.h sys/types.h
13024 eval $typedef_ask
13025
13026 : define a fucntion to check prototypes
13027 $cat > protochk <<EOSH
13028 $startsh
13029 cc="$cc"
13030 optimize="$optimize"
13031 ccflags="$ccflags"
13032 prototype="$prototype"
13033 define="$define"
13034 rm=$rm
13035 EOSH
13036
13037 $cat >> protochk <<'EOSH'
13038
13039 $rm -f try.c
13040 foo="$1"
13041 shift
13042 while test $# -ge 2; do
13043         case "$1" in
13044                 $define) echo "#include <$2>" >> try.c ;;
13045                 literal) echo "$2" >> try.c ;;
13046         esac
13047     shift 2
13048 done
13049 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
13050 cat >> try.c <<'EOCP'
13051 #ifdef CAN_PROTOTYPE
13052 #define _(args) args
13053 #else
13054 #define _(args) ()
13055 #endif
13056 EOCP
13057 echo "$foo" >> try.c
13058 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
13059 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
13060 status=$?
13061 $rm -f try.[co]
13062 exit $status
13063 EOSH
13064 chmod +x protochk
13065 $eunicefix protochk
13066
13067 : see what type is used for size_t
13068 rp="What is the type used for the length parameter for string functions?"
13069 set size_t sizetype 'unsigned int' stdio.h sys/types.h
13070 eval $typedef_ask
13071
13072 : check for type of arguments to gethostbyaddr. 
13073 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
13074         case "$d_gethbyaddr" in
13075         $define)
13076                 $cat <<EOM
13077
13078 Checking to see what type of arguments are accepted by gethostbyaddr().
13079 EOM
13080                 hdrs="$define sys/types.h
13081                         $d_socket sys/socket.h 
13082                         $i_niin netinet/in.h 
13083                         $i_netdb netdb.h
13084                         $i_unistd unistd.h"
13085                 : The first arg can 'char *' or 'void *'
13086                 : The second arg is some of integral type
13087                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
13088                         for yyy in size_t long int; do
13089                                 case "$netdb_host_type" in
13090                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
13091                                         if ./protochk "$try" $hdrs; then
13092                                                 echo "Your system accepts $xxx for the first arg."
13093                                                 echo "...and $yyy for the second arg."
13094                                                 netdb_host_type="$xxx"
13095                                                 netdb_hlen_type="$yyy"
13096                                         fi
13097                                         ;;
13098                                 esac
13099                         done
13100                 done
13101                 : In case none of those worked, prompt the user.
13102                 case "$netdb_host_type" in
13103                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
13104                         dflt='char *'
13105                         . ./myread
13106                         netdb_host_type=$ans
13107                         rp='What is the type for the 2nd argument to gethostbyaddr?'
13108                         dflt="$sizetype"
13109                         . ./myread
13110                         netdb_hlen_type=$ans
13111                         ;;
13112                 esac
13113                 ;;
13114         *)      : no gethostbyaddr, so pick harmless defaults
13115                 netdb_host_type='char *'
13116                 netdb_hlen_type="$sizetype"
13117                 ;;
13118         esac
13119         # Remove the "const" if needed. -- but then we'll have a 
13120         # prototype clash!
13121         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
13122 fi
13123
13124 : check for type of argument to gethostbyname. 
13125 if test "X$netdb_name_type" = X ; then
13126         case "$d_gethbyname" in
13127         $define)
13128                 $cat <<EOM
13129
13130 Checking to see what type of argument is accepted by gethostbyname().
13131 EOM
13132                 hdrs="$define sys/types.h
13133                         $d_socket sys/socket.h 
13134                         $i_niin netinet/in.h 
13135                         $i_netdb netdb.h
13136                         $i_unistd unistd.h"
13137                 for xxx in "const char *" "char *"; do
13138                         case "$netdb_name_type" in
13139                         '')     try="extern struct hostent *gethostbyname($xxx);"
13140                                 if ./protochk "$try" $hdrs; then
13141                                         echo "Your system accepts $xxx."
13142                                         netdb_name_type="$xxx"
13143                                 fi
13144                                 ;;
13145                         esac
13146                 done
13147                 : In case none of those worked, prompt the user.
13148                 case "$netdb_name_type" in
13149                 '')     rp='What is the type for the 1st argument to gethostbyname?'
13150                         dflt='char *'
13151                         . ./myread
13152                         netdb_name_type=$ans
13153                         ;;
13154                 esac
13155                 ;;
13156         *)      : no gethostbyname, so pick harmless default
13157                 netdb_name_type='char *'
13158                 ;;
13159         esac
13160 fi
13161
13162 : check for type of 1st argument to getnetbyaddr. 
13163 if test "X$netdb_net_type" = X ; then
13164         case "$d_getnbyaddr" in
13165         $define)
13166                 $cat <<EOM
13167
13168 Checking to see what type of 1st argument is accepted by getnetbyaddr().
13169 EOM
13170                 hdrs="$define sys/types.h
13171                         $d_socket sys/socket.h 
13172                         $i_niin netinet/in.h 
13173                         $i_netdb netdb.h
13174                         $i_unistd unistd.h"
13175                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
13176                         case "$netdb_net_type" in
13177                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
13178                                 if ./protochk "$try" $hdrs; then
13179                                         echo "Your system accepts $xxx."
13180                                         netdb_net_type="$xxx"
13181                                 fi
13182                                 ;;
13183                         esac
13184                 done
13185                 : In case none of those worked, prompt the user.
13186                 case "$netdb_net_type" in
13187                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
13188                         dflt='long'
13189                         . ./myread
13190                         netdb_net_type=$ans
13191                         ;;
13192                 esac
13193                 ;;
13194         *)      : no getnetbyaddr, so pick harmless default
13195                 netdb_net_type='long'
13196                 ;;
13197         esac
13198 fi
13199 : locate the preferred pager for this system
13200 case "$pager" in
13201 '')
13202         dflt=''
13203         case "$pg" in
13204         /*) dflt=$pg;;
13205         esac
13206         case "$more" in
13207         /*) dflt=$more;;
13208         esac
13209         case "$less" in
13210         /*) dflt=$less;;
13211         esac
13212         case "$dflt" in
13213         '') dflt=/usr/ucb/more;;
13214         esac
13215         ;;
13216 *) dflt="$pager";;
13217 esac
13218 echo " "
13219 fn=f/
13220 rp='What pager is used on your system?'
13221 . ./getfile
13222 pager="$ans"
13223
13224 : see what type pids are declared as in the kernel
13225 rp="What is the type of process ids on this system?"
13226 set pid_t pidtype int stdio.h sys/types.h
13227 eval $typedef_ask
13228
13229 : Find earliest binary compatible site_perl subdirectory perl can use.
13230 case "$bincompat5005" in
13231 "$define") xs_apiversion='5.005' ;;
13232 *) xs_apiversion=$version ;;   # The current site_perl version.
13233 esac
13234 : Find earliest pure perl site_perl subdirectory perl can use.
13235 : The versioned directories started at 5.005.
13236 pm_apiversion='5.005'
13237
13238 : check for length of pointer
13239 echo " "
13240 case "$ptrsize" in
13241 '')
13242         echo "Checking to see how big your pointers are..." >&4
13243         if test "$voidflags" -gt 7; then
13244                 echo '#define VOID_PTR char *' > try.c
13245         else
13246                 echo '#define VOID_PTR void *' > try.c
13247         fi
13248         $cat >>try.c <<'EOCP'
13249 #include <stdio.h>
13250 int main()
13251 {
13252     printf("%d\n", (int)sizeof(VOID_PTR));
13253     exit(0);
13254 }
13255 EOCP
13256         set try
13257         if eval $compile_ok; then
13258                 ptrsize=`./try`
13259                 echo "Your pointers are $ptrsize bytes long."
13260         else
13261                 dflt='4'
13262                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
13263                 rp="What is the size of a pointer (in bytes)?"
13264                 . ./myread
13265                 ptrsize="$ans"
13266         fi
13267         ;;
13268 esac
13269 $rm -f try.c try
13270
13271 : see if ar generates random libraries by itself
13272 echo " "
13273 echo "Checking how to generate random libraries on your machine..." >&4
13274 echo 'int bar1() { return bar2(); }' > bar1.c
13275 echo 'int bar2() { return 2; }' > bar2.c
13276 $cat > foo.c <<'EOP'
13277 int main() { printf("%d\n", bar1()); exit(0); }
13278 EOP
13279 $cc $ccflags -c bar1.c >/dev/null 2>&1
13280 $cc $ccflags -c bar2.c >/dev/null 2>&1
13281 $cc $ccflags -c foo.c >/dev/null 2>&1
13282 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
13283 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
13284         ./foobar >/dev/null 2>&1; then
13285         echo "$ar appears to generate random libraries itself."
13286         orderlib=false
13287         ranlib=":"
13288 elif $ar ts bar$_a >/dev/null 2>&1 &&
13289         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
13290         ./foobar >/dev/null 2>&1; then
13291                 echo "a table of contents needs to be added with '$ar ts'."
13292                 orderlib=false
13293                 ranlib="$ar ts"
13294 else
13295         case "$ranlib" in
13296         :) ranlib='';;
13297         '')
13298                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
13299                 $test -f $ranlib || ranlib=''
13300                 ;;
13301         esac
13302         if $test -n "$ranlib"; then
13303                 echo "your system has '$ranlib'; we'll use that."
13304                 orderlib=false
13305         else
13306                 echo "your system doesn't seem to support random libraries"
13307                 echo "so we'll use lorder and tsort to order the libraries."
13308                 orderlib=true
13309                 ranlib=":"
13310         fi
13311 fi
13312 $rm -f foo* bar* 
13313
13314 : check for type of arguments to select. 
13315 case "$selecttype" in
13316 '') case "$d_select" in
13317         $define)
13318                 echo " "
13319                 $cat <<EOM
13320 Checking to see what type of arguments are accepted by select().
13321 EOM
13322                 hdrs="$define sys/types.h
13323                         $i_systime sys/time.h 
13324                         $i_sysselct sys/select.h
13325                         $d_socket sys/socket.h"
13326                 : The first arg can be int, unsigned, or size_t
13327                 : The last arg may or may not be 'const'
13328                 val=''
13329                 : void pointer has been seen but using that
13330                 : breaks the selectminbits test
13331                 for xxx in 'fd_set *' 'int *'; do
13332                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
13333                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
13334                                         case "$val" in
13335                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
13336                                                 if ./protochk "$try" $hdrs; then
13337                                                         echo "Your system accepts $xxx."
13338                                                         val="$xxx"
13339                                                 fi
13340                                                 ;;
13341                                         esac
13342                                 done
13343                         done
13344                 done
13345                 case "$val" in
13346                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
13347                         case "$d_fd_set" in
13348                                 $define) dflt="fd_set *" ;;
13349                                 *)              dflt="int *" ;;
13350                         esac
13351                         . ./myread
13352                         val=$ans
13353                         ;;
13354                 esac
13355                 selecttype="$val"
13356                 ;;
13357         *)      : no select, so pick a harmless default
13358                 selecttype='int *'
13359                 ;;
13360         esac
13361         ;;
13362 esac
13363
13364 : check for the select 'width'
13365 case "$selectminbits" in
13366 '') case "$d_select" in
13367         $define)
13368                 $cat <<EOM
13369
13370 Checking to see on how many bits at a time your select() operates...
13371 EOM
13372                 $cat >try.c <<EOCP
13373 #include <sys/types.h>
13374 #$i_time I_TIME
13375 #$i_systime I_SYS_TIME
13376 #$i_systimek I_SYS_TIME_KERNEL
13377 #ifdef I_TIME
13378 #   include <time.h>
13379 #endif
13380 #ifdef I_SYS_TIME
13381 #   ifdef I_SYS_TIME_KERNEL
13382 #       define KERNEL
13383 #   endif
13384 #   include <sys/time.h>
13385 #   ifdef I_SYS_TIME_KERNEL
13386 #       undef KERNEL
13387 #   endif
13388 #endif
13389 #$i_sysselct I_SYS_SELECT
13390 #ifdef I_SYS_SELECT
13391 #include <sys/select.h>
13392 #endif
13393 #$d_socket HAS_SOCKET
13394 #ifdef HAS_SOCKET
13395 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
13396 #endif
13397 #include <stdio.h>
13398 $selecttype b;
13399 #define S sizeof(*(b))
13400 #define MINBITS 64
13401 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
13402 #define NBITS  (NBYTES * 8)
13403 int main() {
13404     char s[NBYTES];
13405     struct timeval t;
13406     int i;
13407     FILE* fp;
13408     int fd;
13409
13410     fclose(stdin);
13411     fp = fopen("try.c", "r");
13412     if (fp == 0)
13413       exit(1);
13414     fd = fileno(fp);
13415     if (fd < 0)
13416       exit(2);
13417     b = ($selecttype)s;
13418     for (i = 0; i < NBITS; i++)
13419         FD_SET(i, b);
13420     t.tv_sec  = 0;
13421     t.tv_usec = 0;
13422     select(fd + 1, b, 0, 0, &t);
13423     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
13424     printf("%d\n", i + 1);
13425     return 0;
13426 }
13427 EOCP
13428                 set try
13429                 if eval $compile_ok; then
13430                         selectminbits=`./try`
13431                         case "$selectminbits" in
13432                         '')     cat >&4 <<EOM
13433 Cannot figure out on how many bits at a time your select() operates.
13434 I'll play safe and guess it is 32 bits.
13435 EOM
13436                                 selectminbits=32
13437                                 bits="32 bits"
13438                                 ;;
13439                         1)      bits="1 bit" ;;
13440                         *)      bits="$selectminbits bits" ;;
13441                         esac
13442                         echo "Your select() operates on $bits at a time." >&4
13443                 else
13444                         rp='What is the minimum number of bits your select() operates on?'
13445                         case "$byteorder" in
13446                         1234|12345678)  dflt=32 ;;
13447                         *)              dflt=1  ;;
13448                         esac
13449                         . ./myread
13450                         val=$ans
13451                         selectminbits="$val"
13452                 fi
13453                 $rm -f try.* try
13454                 ;;
13455         *)      : no select, so pick a harmless default
13456                 selectminbits='32'
13457                 ;;
13458         esac
13459         ;;
13460 esac
13461
13462 : Trace out the files included by signal.h, then look for SIGxxx names.
13463 : Remove SIGARRAYSIZE used by HPUX.
13464 : Remove SIGSTKSIZE used by Linux.
13465 : Remove SIGSTKSZ used by Posix.
13466 : Remove SIGTYP void lines used by OS2.
13467 : Some cpps, like os390, dont give the file name anywhere
13468 if [ "X$fieldn" = X ]; then
13469         : Just make some guesses.  We check them later.
13470         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
13471 else
13472         xxx=`echo '#include <signal.h>' |
13473         $cppstdin $cppminus $cppflags 2>/dev/null |
13474         $grep '^[       ]*#.*include' | 
13475         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
13476 fi
13477 : Check this list of files to be sure we have parsed the cpp output ok.
13478 : This will also avoid potentially non-existent files, such 
13479 : as ../foo/bar.h
13480 xxxfiles=''
13481 for xx in $xxx /dev/null ; do
13482         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
13483 done
13484 : If we have found no files, at least try signal.h
13485 case "$xxxfiles" in
13486 '')     xxxfiles=`./findhdr signal.h` ;;
13487 esac
13488 xxx=`awk '
13489 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
13490         print substr($2, 4, 20)
13491 }
13492 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
13493         print substr($3, 4, 20)
13494 }' $xxxfiles`
13495 : Append some common names just in case the awk scan failed.
13496 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
13497 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
13498 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
13499 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
13500 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
13501
13502 : generate a few handy files for later
13503 $cat > signal.c <<'EOCP'
13504 #include <sys/types.h>
13505 #include <signal.h>
13506 #include <stdio.h>
13507 int main() {
13508
13509 /* Strange style to avoid deeply-nested #if/#else/#endif */
13510 #ifndef NSIG
13511 #  ifdef _NSIG
13512 #    define NSIG (_NSIG)
13513 #  endif
13514 #endif
13515
13516 #ifndef NSIG
13517 #  ifdef SIGMAX
13518 #    define NSIG (SIGMAX+1)
13519 #  endif
13520 #endif
13521
13522 #ifndef NSIG
13523 #  ifdef SIG_MAX
13524 #    define NSIG (SIG_MAX+1)
13525 #  endif
13526 #endif
13527
13528 #ifndef NSIG
13529 #  ifdef MAXSIG
13530 #    define NSIG (MAXSIG+1)
13531 #  endif
13532 #endif
13533
13534 #ifndef NSIG
13535 #  ifdef MAX_SIG
13536 #    define NSIG (MAX_SIG+1)
13537 #  endif
13538 #endif
13539
13540 #ifndef NSIG
13541 #  ifdef SIGARRAYSIZE
13542 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
13543 #  endif
13544 #endif
13545
13546 #ifndef NSIG
13547 #  ifdef _sys_nsig
13548 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
13549 #  endif
13550 #endif
13551
13552 /* Default to some arbitrary number that's big enough to get most
13553    of the common signals.
13554 */
13555 #ifndef NSIG
13556 #    define NSIG 50
13557 #endif
13558
13559 printf("NSIG %d\n", NSIG);
13560
13561 #ifndef JUST_NSIG
13562
13563 EOCP
13564
13565 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
13566 {
13567         printf "#ifdef SIG"; printf $1; printf "\n"
13568         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
13569         printf $1; printf ");\n"
13570         printf "#endif\n"
13571 }
13572 END {
13573         printf "#endif /* JUST_NSIG */\n";
13574         printf "exit(0);\n}\n";
13575 }
13576 ' >>signal.c
13577 $cat >signal.awk <<'EOP'
13578 BEGIN { ndups = 0 }
13579 $1 ~ /^NSIG$/ { nsig = $2 }
13580 ($1 !~ /^NSIG$/) && (NF == 2) {
13581     if ($2 > maxsig) { maxsig = $2 }
13582     if (sig_name[$2]) {
13583         dup_name[ndups] = $1
13584         dup_num[ndups] = $2
13585         ndups++ 
13586     }
13587     else {
13588         sig_name[$2] = $1
13589         sig_num[$2] = $2
13590     }
13591 }
13592 END { 
13593     if (nsig == 0) {
13594         nsig = maxsig + 1
13595     }
13596     printf("NSIG %d\n", nsig);
13597     for (n = 1; n < nsig; n++) {
13598         if (sig_name[n]) {
13599             printf("%s %d\n", sig_name[n], sig_num[n])
13600         }
13601         else {
13602             printf("NUM%d %d\n", n, n) 
13603         }
13604     }
13605     for (n = 0; n < ndups; n++) {
13606         printf("%s %d\n", dup_name[n], dup_num[n])
13607     }
13608 }
13609 EOP
13610 $cat >signal_cmd <<EOS
13611 $startsh
13612 if $test -s signal.lst; then
13613     echo "Using your existing signal.lst file"
13614         exit 0
13615 fi
13616 xxx="$xxx"
13617 EOS
13618 $cat >>signal_cmd <<'EOS'
13619
13620 set signal
13621 if eval $compile_ok; then
13622         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
13623 else
13624         echo "(I can't seem be able to compile the whole test program)" >&4
13625         echo "(I'll try it in little pieces.)" >&4
13626         set signal -DJUST_NSIG
13627         if eval $compile_ok; then
13628                 ./signal$_exe > signal.nsg
13629                 $cat signal.nsg
13630         else
13631                 echo "I can't seem to figure out how many signals you have." >&4
13632                 echo "Guessing 50." >&4
13633                 echo 'NSIG 50' > signal.nsg
13634         fi
13635         : Now look at all the signal names, one at a time.
13636         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
13637                 $cat > signal.c <<EOCP
13638 #include <sys/types.h>
13639 #include <signal.h>
13640 #include <stdio.h>
13641 int main() {
13642 printf("$xx %d\n", SIG${xx});
13643 return 0;
13644 }
13645 EOCP
13646                 set signal
13647                 if eval $compile; then
13648                         echo "SIG${xx} found."
13649                         ./signal$_exe  >> signal.ls1
13650                 else
13651                         echo "SIG${xx} NOT found."
13652                 fi
13653         done
13654         if $test -s signal.ls1; then
13655                 $cat signal.nsg signal.ls1 |
13656                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
13657         fi
13658
13659 fi
13660 if $test -s signal.lst; then
13661         :
13662 else
13663         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
13664         echo 'kill -l' >signal
13665         set X `csh -f <signal`
13666         $rm -f signal
13667         shift
13668         case $# in
13669         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
13670         esac
13671         echo $@ | $tr ' ' $trnl | \
13672             $awk '{ printf "%s %d\n", $1, ++s; }
13673                   END { printf "NSIG %d\n", ++s }' >signal.lst
13674 fi
13675 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
13676 EOS
13677 chmod a+x signal_cmd
13678 $eunicefix signal_cmd
13679
13680 : generate list of signal names
13681 echo " "
13682 case "$sig_name_init" in
13683 '') doinit=yes ;;
13684 *)  case "$sig_num_init" in
13685     ''|*,*) doinit=yes ;;
13686     esac ;;
13687 esac
13688 case "$doinit" in
13689 yes)
13690         echo "Generating a list of signal names and numbers..." >&4
13691         . ./signal_cmd
13692         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
13693         sig_name=`$awk 'BEGIN { printf "ZERO " }
13694                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
13695         sig_num=`$awk  'BEGIN { printf "0 " }
13696                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
13697         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
13698                              !/^NSIG/   { printf "\"%s\", ", $1 }
13699                              END        { printf "0\n" }' signal.lst`
13700         sig_num_init=`$awk  'BEGIN      { printf "0, " }
13701                              !/^NSIG/   { printf "%d, ", $2}
13702                              END        { printf "0\n"}' signal.lst`
13703         ;;
13704 esac
13705 echo "The following $sig_count signals are available:"
13706 echo " "
13707 echo $sig_name | $awk \
13708 'BEGIN { linelen = 0 }
13709 {
13710         for (i = 1; i <= NF; i++) {
13711                 name = "SIG" $i " "
13712                 linelen = linelen + length(name)
13713                 if (linelen > 70) {
13714                         printf "\n"
13715                         linelen = length(name)
13716                 }
13717                 printf "%s", name
13718         }
13719         printf "\n"
13720 }'
13721 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
13722
13723 : check for socklen_t
13724 echo " "
13725 echo "Checking to see if you have socklen_t..." >&4
13726 $cat >try.c <<EOCP
13727 #include <sys/types.h>
13728 #$d_socket HAS_SOCKET
13729 #ifdef HAS_SOCKET
13730 #include <sys/socket.h>
13731 #endif
13732 int main() { socklen_t x = 16; }
13733 EOCP
13734 set try
13735 if eval $compile; then
13736         val="$define"
13737         echo "You have socklen_t."
13738 else
13739         val="$undef"
13740         echo "You do not have socklen_t."
13741         case "$sizetype" in
13742         size_t) echo "(You do have size_t, that might work.)" ;;
13743         esac
13744 fi
13745 $rm -f try try.*
13746 set d_socklen_t
13747 eval $setvar
13748
13749 : check for type of the size argument to socket calls
13750 case "$d_socket" in
13751 "$define")
13752         $cat <<EOM
13753
13754 Checking to see what type is the last argument of accept().
13755 EOM
13756         hdrs="$define sys/types.h $d_socket sys/socket.h" 
13757         yyy=''
13758         case "$d_socklen_t" in
13759         "$define") yyy="$yyy socklen_t"
13760         esac
13761         yyy="$yyy $sizetype int long"
13762         for xxx in $yyy; do
13763                 case "$socksizetype" in
13764                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
13765                         if ./protochk "$try" $hdrs; then
13766                                 echo "Your system accepts '$xxx *' for the last argument of accept()."
13767                                 socksizetype="$xxx"
13768                         fi
13769                         ;;
13770                 esac
13771         done
13772 : In case none of those worked, prompt the user.
13773         case "$socksizetype" in
13774         '')     rp='What is the type for socket address structure sizes?'
13775                 dflt='int'
13776                 . ./myread
13777                 socksizetype=$ans
13778                 ;;
13779         esac
13780         ;;
13781 *)      : no sockets, so pick relatively harmless defaults
13782         socksizetype='char *'
13783         ;;
13784 esac
13785
13786 : see what type is used for signed size_t
13787 set ssize_t ssizetype int stdio.h sys/types.h
13788 eval $typedef
13789 dflt="$ssizetype"
13790 $cat > ssize.c <<EOM
13791 #include <stdio.h>
13792 #include <sys/types.h>
13793 #define Size_t $sizetype
13794 #define SSize_t $dflt
13795 int main()
13796 {
13797         if (sizeof(Size_t) == sizeof(SSize_t))
13798                 printf("$dflt\n");
13799         else if (sizeof(Size_t) == sizeof(int))
13800                 printf("int\n");
13801         else 
13802                 printf("long\n");
13803         exit(0);
13804 }
13805 EOM
13806 echo " "
13807 set ssize
13808 if eval $compile_ok && ./ssize > /dev/null; then
13809         ssizetype=`./ssize`
13810         echo "I'll be using $ssizetype for functions returning a byte count." >&4
13811 else
13812         $cat >&4 <<EOM
13813 Help! I can't compile and run the ssize_t test program: please enlighten me!
13814 (This is probably a misconfiguration in your system or libraries, and
13815 you really ought to fix it.  Still, I'll try anyway.)
13816
13817 I need a type that is the same size as $sizetype, but is guaranteed to
13818 be signed.  Common values are ssize_t, int and long.
13819
13820 EOM
13821         rp="What signed type is the same size as $sizetype?"
13822         . ./myread
13823         ssizetype="$ans"
13824 fi
13825 $rm -f ssize ssize.*
13826
13827 : see what type of char stdio uses.
13828 echo " "
13829 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
13830         echo "Your stdio uses unsigned chars." >&4
13831         stdchar="unsigned char"
13832 else
13833         echo "Your stdio uses signed chars." >&4
13834         stdchar="char"
13835 fi
13836
13837 : see if time exists
13838 echo " "
13839 if test "X$d_time" = X -o X"$timetype" = X; then
13840     if set time val -f d_time; eval $csym; $val; then
13841                 echo 'time() found.' >&4
13842                 val="$define"
13843                 rp="What is the type returned by time() on this system?"
13844                 set time_t timetype long stdio.h sys/types.h
13845                 eval $typedef_ask
13846     else
13847                 echo 'time() not found, hope that will do.' >&4
13848                 val="$undef"
13849                 timetype='int';
13850     fi
13851     set d_time
13852     eval $setvar
13853 fi
13854
13855 : see what type uids are declared as in the kernel
13856 echo " "
13857 echo "Looking for the type for user ids returned by getuid()."
13858 set uid_t uidtype xxx stdio.h sys/types.h
13859 eval $typedef
13860 case "$uidtype" in
13861 xxx)
13862         xxx=`./findhdr sys/user.h`
13863         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
13864         case $1 in
13865         unsigned) dflt="$1 $2" ;;
13866         *) dflt="$1" ;;
13867         esac
13868         ;;
13869 *) dflt="$uidtype";;
13870 esac
13871 case "$uidtype" in
13872 uid_t)  echo "uid_t found." ;;
13873 *)      rp="What is the type for user ids returned by getuid()?"
13874         . ./myread
13875         uidtype="$ans"
13876         ;;
13877 esac
13878
13879 echo " "
13880 case "$uidtype" in
13881 *_t) zzz="$uidtype"     ;;
13882 *)   zzz="uid"          ;;
13883 esac
13884 echo "Checking the size of $zzz..." >&4 
13885 cat > try.c <<EOCP
13886 #include <sys/types.h>
13887 #include <stdio.h>
13888 int main() {
13889     printf("%d\n", (int)sizeof($uidtype));
13890     exit(0);
13891 }
13892 EOCP
13893 set try
13894 if eval $compile_ok; then
13895         yyy=`./try`
13896         case "$yyy" in
13897         '')     uidsize=4
13898                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
13899                 ;;
13900         *)      uidsize=$yyy
13901                 echo "Your $zzz is $uidsize bytes long."
13902                 ;;
13903         esac
13904 else
13905         uidsize=4
13906         echo "(I can't compile the test program--guessing $uidsize.)" >&4
13907 fi
13908
13909 echo " "
13910 case "$uidtype" in
13911 *_t) zzz="$uidtype"     ;;
13912 *)   zzz="uid"          ;;
13913 esac
13914 echo "Checking the sign of $zzz..." >&4
13915 cat > try.c <<EOCP
13916 #include <sys/types.h>
13917 #include <stdio.h>
13918 int main() {
13919         $uidtype foo = -1;
13920         if (foo < 0)
13921                 printf("-1\n");
13922         else
13923                 printf("1\n");
13924 }
13925 EOCP
13926 set try
13927 if eval $compile; then
13928         yyy=`./try`
13929         case "$yyy" in
13930         '')     uidsign=1
13931                 echo "(I can't execute the test program--guessing unsigned.)" >&4
13932                 ;;
13933         *)      uidsign=$yyy
13934                 case "$uidsign" in
13935                  1) echo "Your $zzz is unsigned." ;;
13936                 -1) echo "Your $zzz is signed."   ;;
13937                 esac
13938                 ;;
13939         esac
13940 else
13941         uidsign=1
13942         echo "(I can't compile the test program--guessing unsigned.)" >&4
13943 fi
13944
13945
13946
13947 echo " "
13948 $echo "Checking the format string to be used for uids..." >&4
13949
13950 case "$uidsign" in
13951 -1)     if $test X"$uidsize" = X"$ivsize"; then
13952                 uidformat="$ivdformat"
13953         else
13954                 if $test X"$uidsize" = X"$longsize"; then
13955                         uidformat='"ld"'
13956                 else
13957                         if $test X"$uidsize" = X"$intsize"; then
13958                                 uidformat='"d"'
13959                         else
13960                                 if $test X"$uidsize" = X"$shortsize"; then
13961                                         uidformat='"hd"'
13962                                 fi
13963                         fi
13964                 fi
13965         fi
13966         ;;
13967 *)      if $test X"$uidsize" = X"$uvsize"; then
13968                 uidformat="$uvuformat"
13969         else
13970                 if $test X"$uidsize" = X"$longsize"; then
13971                         uidformat='"lu"'
13972                 else
13973                         if $test X"$uidsize" = X"$intsize"; then
13974                                 uidformat='"u"'
13975                         else
13976                                 if $test X"$uidsize" = X"$shortsize"; then
13977                                         uidformat='"hu"'
13978                                 fi
13979                         fi
13980                 fi
13981         fi
13982         ;;
13983 esac
13984
13985 : see if dbm.h is available
13986 : see if dbmclose exists
13987 set dbmclose d_dbmclose
13988 eval $inlibc
13989
13990 case "$d_dbmclose" in
13991 $define)
13992         set dbm.h i_dbm
13993         eval $inhdr
13994         case "$i_dbm" in
13995         $define)
13996                 val="$undef"
13997                 set i_rpcsvcdbm
13998                 eval $setvar
13999                 ;;
14000         *)      set rpcsvc/dbm.h i_rpcsvcdbm
14001                 eval $inhdr
14002                 ;;
14003         esac
14004         ;;
14005 *)      echo "We won't be including <dbm.h>"
14006         val="$undef"
14007         set i_dbm
14008         eval $setvar
14009         val="$undef"
14010         set i_rpcsvcdbm
14011         eval $setvar
14012         ;;
14013 esac
14014
14015 : see if this is a sys/file.h system
14016 val=''
14017 set sys/file.h val
14018 eval $inhdr
14019
14020 : do we need to include sys/file.h ?
14021 case "$val" in
14022 "$define")
14023         echo " "
14024         if $h_sysfile; then
14025                 val="$define"
14026                 echo "We'll be including <sys/file.h>." >&4
14027         else
14028                 val="$undef"
14029                 echo "We won't be including <sys/file.h>." >&4
14030         fi
14031         ;;
14032 *)
14033         h_sysfile=false
14034         ;;
14035 esac
14036 set i_sysfile
14037 eval $setvar
14038
14039 : see if fcntl.h is there
14040 val=''
14041 set fcntl.h val
14042 eval $inhdr
14043
14044 : see if we can include fcntl.h
14045 case "$val" in
14046 "$define")
14047         echo " "
14048         if $h_fcntl; then
14049                 val="$define"
14050                 echo "We'll be including <fcntl.h>." >&4
14051         else
14052                 val="$undef"
14053                 if $h_sysfile; then
14054         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
14055                 else
14056                         echo "We won't be including <fcntl.h>." >&4
14057                 fi
14058         fi
14059         ;;
14060 *)
14061         h_fcntl=false
14062         val="$undef"
14063         ;;
14064 esac
14065 set i_fcntl
14066 eval $setvar
14067
14068 : see if this is a iconv.h system
14069 set iconv.h i_iconv
14070 eval $inhdr
14071
14072 : see if this is a ieeefp.h system
14073 set ieeefp.h i_ieeefp
14074 eval $inhdr
14075
14076 : see if locale.h is available
14077 set locale.h i_locale
14078 eval $inhdr
14079
14080 : see if mach cthreads are available
14081 if test "X$usethreads" = "X$define"; then
14082         set mach/cthreads.h i_machcthr
14083         eval $inhdr
14084 else
14085         i_machcthr="$undef"
14086 fi
14087
14088
14089
14090 : see if this is a math.h system
14091 set math.h i_math
14092 eval $inhdr
14093
14094 : see if this is a mntent.h system
14095 set mntent.h i_mntent
14096 eval $inhdr
14097
14098 : see if ndbm.h is available
14099 set ndbm.h t_ndbm
14100 eval $inhdr
14101 case "$t_ndbm" in
14102 $define)
14103         : see if dbm_open exists
14104         set dbm_open d_dbm_open
14105         eval $inlibc
14106         case "$d_dbm_open" in
14107         $undef)
14108                 t_ndbm="$undef"
14109                 echo "We won't be including <ndbm.h>"
14110                 ;;
14111         esac
14112         ;;
14113 esac
14114 val="$t_ndbm"
14115 set i_ndbm
14116 eval $setvar
14117
14118 : see if net/errno.h is available
14119 val=''
14120 set net/errno.h val
14121 eval $inhdr
14122
14123 : Unfortunately, it causes problems on some systems.  Arrgh.
14124 case "$val" in
14125 $define)
14126         cat > try.c <<'EOM'
14127 #include <stdio.h>
14128 #include <errno.h>
14129 #include <net/errno.h>
14130 int func()
14131 {
14132         return ENOTSOCK;
14133 }
14134 EOM
14135         if $cc $ccflags -c try.c >/dev/null 2>&1; then
14136                 echo "We'll be including <net/errno.h>." >&4
14137         else
14138                 echo "We won't be including <net/errno.h>." >&4
14139                 val="$undef"
14140         fi
14141         $rm -f try.* try
14142         ;;
14143 esac
14144 set i_neterrno
14145 eval $setvar
14146
14147 : see if netinet/tcp.h is available
14148 set netinet/tcp.h i_netinettcp
14149 eval $inhdr
14150
14151 : see if this is a poll.h system
14152 set poll.h i_poll
14153 eval $inhdr
14154
14155 echo " "
14156 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
14157 $cat <<'EOSH' > Cppsym.know
14158 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
14159 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
14160 alliant alpha am29000 AM29000 amiga AMIGAOS AMIX
14161 ansi ANSI_C_SOURCE apollo ardent atarist att386 att3b BeOS
14162 BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
14163 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
14164 bull c cadmus clipper CMU COFF COMPILER_VERSION
14165 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
14166 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
14167 Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
14168 FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
14169 GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
14170 H3050R H3050RX hbullx20 hcx host_mips
14171 hp200 hp300 hp700 HP700 hp800 hp9000
14172 hp9000s200 hp9000s300 hp9000s400 hp9000s500
14173 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
14174 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
14175 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
14176 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
14177 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
14178 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
14179 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
14180 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
14181 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
14182 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
14183 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
14184 MATH_HAS_NO_SIDE_EFFECTS
14185 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
14186 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
14187 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
14188 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
14189 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
14190 NetBSD news1500 news1700 news1800 news1900 news3700
14191 news700 news800 news900 NeXT NLS ns16000 ns32000
14192 ns32016 ns32332 ns32k nsc32000
14193 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
14194 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
14195 pc532 pdp11 PGC PIC plexus PORTAR posix
14196 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
14197 POSIX_C_SOURCE POSIX_SOURCE POWER
14198 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
14199 riscix riscos RT scs SCO sequent sgi SGI_SOURCE sinix
14200 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
14201 sony sony_news sonyrisc sparc sparclite spectrum
14202 stardent stdc STDC_EXT stratos sun sun3 sun386
14203 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
14204 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
14205 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
14206 sysV68 sysV88 Tek4132 Tek4300 titan
14207 tower tower32 tower32_200 tower32_600 tower32_700
14208 tower32_800 tower32_850 tss
14209 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
14210 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
14211 unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
14212 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
14213 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
14214 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
14215 z8000
14216 EOSH
14217 # Maybe put other stuff here too.
14218 cat <<EOSH >>Cppsym.know
14219 $osname
14220 EOSH
14221 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
14222 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
14223 $cat Cppsym.a Cppsym.b | $tr ' ' $trnl | sort | uniq > Cppsym.know
14224 $rm -f Cppsym.a Cppsym.b
14225 cat <<EOSH > Cppsym
14226 $startsh
14227 if $test \$# -gt 0; then
14228     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
14229     if $test -s Cppsym.got; then
14230         $rm -f Cppsym.got
14231         exit 0
14232     fi
14233     $rm -f Cppsym.got
14234     exit 1
14235 else
14236     $tr " " "$trnl" | ./Cppsym.try
14237     exit 0
14238 fi
14239 EOSH
14240 chmod +x Cppsym
14241 $eunicefix Cppsym
14242 cat <<EOSH > Cppsym.try
14243 $startsh
14244 cat <<'EOCP' > try.c
14245 #include <stdio.h>
14246 int main() {
14247 EOCP
14248 $awk \\
14249 EOSH
14250 cat <<'EOSH' >> Cppsym.try
14251 'length($1) > 0 {
14252     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
14253     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
14254     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
14255     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
14256 }'       >> try.c
14257 echo '}' >> try.c
14258 EOSH
14259 cat <<EOSH >> Cppsym.try
14260 ccflags="$ccflags"
14261 case "$osname-$gccversion" in
14262 irix-) ccflags="\$ccflags -woff 1178" ;;
14263 esac
14264 $cc $optimize \$ccflags $ldflags -o try try.c $libs && ./try$exe_ext
14265 EOSH
14266 chmod +x Cppsym.try
14267 $eunicefix Cppsym.try
14268 ./Cppsym < Cppsym.know > Cppsym.true
14269 : now check the C compiler for additional symbols
14270 postprocess_cc_v=''
14271 case "$osname" in
14272 aix) postprocess_cc_v="|$tr , ' '" ;;
14273 esac
14274 $cat >ccsym <<EOS
14275 $startsh
14276 $cat >tmp.c <<EOF
14277 extern int foo;
14278 EOF
14279 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
14280 do
14281         case "\$i" in
14282         -D*) echo "\$i" | $sed 's/^-D//';;
14283         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
14284         esac
14285 done
14286 $rm -f try.c
14287 EOS
14288 postprocess_cc_v=''
14289 chmod +x ccsym
14290 $eunicefix ccsym
14291 ./ccsym > ccsym1.raw
14292 if $test -s ccsym1.raw; then
14293        $sort ccsym1.raw | $uniq >ccsym.raw
14294 else
14295        mv ccsym1.raw ccsym.raw
14296 fi
14297
14298 $awk '/\=/ { print $0; next }
14299         { print $0"=1" }' ccsym.raw >ccsym.list
14300 $awk '/\=/ { print $0; next }
14301         { print $0"=1" }' Cppsym.true >ccsym.true
14302 $comm -13 ccsym.true ccsym.list >ccsym.own
14303 $comm -12 ccsym.true ccsym.list >ccsym.com
14304 $comm -23 ccsym.true ccsym.list >ccsym.cpp
14305 also=''
14306 if $test -z ccsym.raw; then
14307         echo "Your C compiler doesn't seem to define any symbols!" >&4
14308         echo " "
14309         echo "However, your C preprocessor defines the following symbols:"
14310         $cat Cppsym.true
14311         ccsymbols=''
14312         cppsymbols=`$cat Cppsym.true`
14313         cppsymbols=`echo $cppsymbols`
14314         cppccsymbols="$cppsymbols"
14315 else
14316         if $test -s ccsym.com; then
14317                 echo "Your C compiler and pre-processor define these symbols:"
14318                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
14319                 also='also '
14320                 symbols='ones'
14321                 cppccsymbols=`$cat ccsym.com`
14322                 cppccsymbols=`echo $cppccsymbols`
14323                 $test "$silent" || sleep 1
14324         fi
14325         if $test -s ccsym.cpp; then
14326                 $test "$also" && echo " "
14327                 echo "Your C pre-processor ${also}defines the following symbols:"
14328                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
14329                 also='further '
14330                 cppsymbols=`$cat ccsym.cpp`
14331                 cppsymbols=`echo $cppsymbols`
14332                 $test "$silent" || sleep 1
14333         fi
14334         if $test -s ccsym.own; then
14335                 $test "$also" && echo " "
14336                 echo "Your C compiler ${also}defines the following cpp symbols:"
14337                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
14338                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
14339                 ccsymbols=`$cat ccsym.own`
14340                 ccsymbols=`echo $ccsymbols`
14341                 $test "$silent" || sleep 1
14342         fi
14343 fi
14344 $rm -f ccsym*
14345
14346 : see if this is a termio system
14347 val="$undef"
14348 val2="$undef"
14349 val3="$undef"
14350 if $test `./findhdr termios.h`; then
14351         set tcsetattr i_termios
14352         eval $inlibc
14353         val3="$i_termios"
14354 fi
14355 echo " "
14356 case "$val3" in
14357 "$define") echo "You have POSIX termios.h... good!" >&4;;
14358 *) if ./Cppsym pyr; then
14359                 case "`/bin/universe`" in
14360                 ucb) if $test `./findhdr sgtty.h`; then
14361                                 val2="$define"
14362                                 echo "<sgtty.h> found." >&4
14363                         else
14364                                 echo "System is pyramid with BSD universe."
14365                                 echo "<sgtty.h> not found--you could have problems." >&4
14366                         fi;;
14367                 *) if $test `./findhdr termio.h`; then
14368                                 val="$define"
14369                                 echo "<termio.h> found." >&4
14370                         else
14371                                 echo "System is pyramid with USG universe."
14372                                 echo "<termio.h> not found--you could have problems." >&4
14373                         fi;;
14374                 esac
14375         elif ./usg; then
14376                 if $test `./findhdr termio.h`; then
14377                         echo "<termio.h> found." >&4
14378                         val="$define"
14379                 elif $test `./findhdr sgtty.h`; then
14380                         echo "<sgtty.h> found." >&4
14381                         val2="$define"
14382                 else
14383 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
14384                 fi
14385         else
14386                 if $test `./findhdr sgtty.h`; then
14387                         echo "<sgtty.h> found." >&4
14388                         val2="$define"
14389                 elif $test `./findhdr termio.h`; then
14390                         echo "<termio.h> found." >&4
14391                         val="$define"
14392                 else
14393 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
14394                 fi
14395         fi;;
14396 esac
14397 set i_termio; eval $setvar
14398 val=$val2; set i_sgtty; eval $setvar
14399 val=$val3; set i_termios; eval $setvar
14400
14401 : see if this is a shadow.h system
14402 set shadow.h i_shadow
14403 eval $inhdr
14404
14405 : see if this is a socks.h system
14406 set socks.h i_socks
14407 eval $inhdr
14408
14409 : see if stdarg is available
14410 echo " "
14411 if $test `./findhdr stdarg.h`; then
14412         echo "<stdarg.h> found." >&4
14413         valstd="$define"
14414 else
14415         echo "<stdarg.h> NOT found." >&4
14416         valstd="$undef"
14417 fi
14418
14419 : see if varags is available
14420 echo " "
14421 if $test `./findhdr varargs.h`; then
14422         echo "<varargs.h> found." >&4
14423 else
14424         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14425 fi
14426
14427 : set up the varargs testing programs
14428 $cat > varargs.c <<EOP
14429 #ifdef I_STDARG
14430 #include <stdarg.h>
14431 #endif
14432 #ifdef I_VARARGS
14433 #include <varargs.h>
14434 #endif
14435
14436 #ifdef I_STDARG
14437 int f(char *p, ...)
14438 #else
14439 int f(va_alist)
14440 va_dcl
14441 #endif
14442 {
14443         va_list ap;
14444 #ifndef I_STDARG
14445         char *p;
14446 #endif
14447 #ifdef I_STDARG
14448         va_start(ap,p);
14449 #else
14450         va_start(ap);
14451         p = va_arg(ap, char *);
14452 #endif
14453         va_end(ap);
14454 }
14455 EOP
14456 $cat > varargs <<EOP
14457 $startsh
14458 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14459         echo "true"
14460 else
14461         echo "false"
14462 fi
14463 $rm -f varargs$_o
14464 EOP
14465 chmod +x varargs
14466
14467 : now check which varargs header should be included
14468 echo " "
14469 i_varhdr=''
14470 case "$valstd" in
14471 "$define")
14472         if `./varargs I_STDARG`; then
14473                 val='stdarg.h'
14474         elif `./varargs I_VARARGS`; then
14475                 val='varargs.h'
14476         fi
14477         ;;
14478 *)
14479         if `./varargs I_VARARGS`; then
14480                 val='varargs.h'
14481         fi
14482         ;;
14483 esac
14484 case "$val" in
14485 '')
14486 echo "I could not find the definition for va_dcl... You have problems..." >&4
14487         val="$undef"; set i_stdarg; eval $setvar
14488         val="$undef"; set i_varargs; eval $setvar
14489         ;;
14490 *) 
14491         set i_varhdr
14492         eval $setvar
14493         case "$i_varhdr" in
14494         stdarg.h)
14495                 val="$define"; set i_stdarg; eval $setvar
14496                 val="$undef"; set i_varargs; eval $setvar
14497                 ;;
14498         varargs.h)
14499                 val="$undef"; set i_stdarg; eval $setvar
14500                 val="$define"; set i_varargs; eval $setvar
14501                 ;;
14502         esac
14503         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14504 esac
14505 $rm -f varargs*
14506
14507 : see if stddef is available
14508 set stddef.h i_stddef
14509 eval $inhdr
14510
14511 : see if this is a sunmath.h system
14512 set sunmath.h i_sunmath
14513 eval $inhdr
14514
14515 : see if sys/access.h is available
14516 set sys/access.h i_sysaccess
14517 eval $inhdr
14518
14519 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
14520 set sys/filio.h i_sysfilio
14521 eval $inhdr
14522 echo " "
14523 if $test `./findhdr sys/ioctl.h`; then
14524         val="$define"
14525         echo '<sys/ioctl.h> found.' >&4
14526 else
14527         val="$undef"
14528         if $test $i_sysfilio = "$define"; then
14529             echo '<sys/ioctl.h> NOT found.' >&4
14530         else
14531                 $test $i_sgtty = "$define" && xxx="sgtty.h"
14532                 $test $i_termio = "$define" && xxx="termio.h"
14533                 $test $i_termios = "$define" && xxx="termios.h"
14534 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
14535         fi
14536 fi
14537 set i_sysioctl
14538 eval $setvar
14539
14540
14541 : see if this is a syslog.h system
14542 set syslog.h i_syslog
14543 eval $inhdr
14544
14545
14546 : see if this is a sys/mode.h system
14547 set sys/mode.h i_sysmode
14548 eval $inhdr
14549
14550 : see if sys/resource.h has to be included
14551 set sys/resource.h i_sysresrc
14552 eval $inhdr
14553
14554 : see if sys/security.h is available
14555 set sys/security.h i_syssecrt
14556 eval $inhdr
14557
14558 : see if this is a sys/statvfs.h system
14559 set sys/statvfs.h i_sysstatvfs
14560 eval $inhdr
14561
14562 : see if this is a sys/uio.h system
14563 set sys/uio.h i_sysuio
14564 eval $inhdr
14565
14566 : see if this is a sys/un.h system
14567 set sys/un.h i_sysun
14568 eval $inhdr
14569
14570
14571 : see if this is a sys/utsname.h system
14572 set sys/utsname.h i_sysutsname
14573 eval $inhdr
14574
14575 : see if this is a syswait system
14576 set sys/wait.h i_syswait
14577 eval $inhdr
14578
14579 : see if this is a ustat.h system
14580 set ustat.h i_ustat
14581 eval $inhdr
14582
14583 : see if this is an utime system
14584 set utime.h i_utime
14585 eval $inhdr
14586
14587 : see if this is a values.h system
14588 set values.h i_values
14589 eval $inhdr
14590
14591 : see if this is a vfork system
14592 case "$d_vfork" in
14593 "$define")
14594         set vfork.h i_vfork
14595         eval $inhdr
14596         ;;
14597 *)
14598         i_vfork="$undef"
14599         ;;
14600 esac
14601
14602 : see if gdbm.h is available
14603 set gdbm.h t_gdbm
14604 eval $inhdr
14605 case "$t_gdbm" in
14606 $define)
14607         : see if gdbm_open exists
14608         set gdbm_open d_gdbm_open
14609         eval $inlibc
14610         case "$d_gdbm_open" in
14611         $undef)
14612                 t_gdbm="$undef"
14613                 echo "We won't be including <gdbm.h>"
14614                 ;;
14615         esac
14616         ;;
14617 esac
14618 val="$t_gdbm"
14619 set i_gdbm
14620 eval $setvar
14621
14622 echo " "
14623 echo "Looking for extensions..." >&4
14624 : If we are using the old config.sh, known_extensions may contain
14625 : old or inaccurate or duplicate values.
14626 known_extensions=''
14627 nonxs_extensions=''
14628 : We do not use find because it might not be available.
14629 : We do not just use MANIFEST because the user may have dropped
14630 : some additional extensions into the source tree and expect them
14631 : to be built.
14632
14633 : Function to recursively find available extensions, ignoring DynaLoader
14634 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
14635 find_extensions='
14636     for xxx in *; do
14637        case "$xxx" in
14638            DynaLoader|dynaload) ;;
14639            *)
14640            if $test -f $xxx/$xxx.xs; then
14641                known_extensions="$known_extensions $1$xxx";
14642            elif $test -f $xxx/Makefile.PL; then
14643                nonxs_extensions="$nonxs_extensions $1$xxx";
14644            else
14645                if $test -d $xxx -a $# -lt 10; then
14646                    set $1$xxx/ $*;
14647                    cd $xxx;
14648                    eval $find_extensions;
14649                    cd ..;
14650                    shift;
14651                fi;
14652            fi
14653            ;;
14654        esac;
14655     done'
14656 tdir=`pwd`
14657 cd $rsrc/ext
14658 set X
14659 shift
14660 eval $find_extensions
14661 set X $nonxs_extensions
14662 shift
14663 nonxs_extensions="$*"
14664 set X $known_extensions
14665 shift
14666 known_extensions="$*"
14667 cd $tdir
14668
14669 : Now see which are supported on this system.
14670 avail_ext=''
14671 for xxx in $known_extensions ; do
14672         case "$xxx" in
14673         DB_File|db_file)
14674                 case "$i_db" in
14675                 $define) avail_ext="$avail_ext $xxx" ;;
14676                 esac
14677                 ;;
14678         GDBM_File|gdbm_fil)
14679                 case "$i_gdbm" in 
14680                 $define) avail_ext="$avail_ext $xxx" ;;
14681                 esac
14682                 ;;
14683         NDBM_File|ndbm_fil)
14684                 case "$i_ndbm" in
14685                 $define)
14686                     case "$osname-$use64bitint" in
14687                     hpux-define)
14688                         case "$libs" in
14689                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
14690                         esac
14691                         ;;
14692                     *) avail_ext="$avail_ext $xxx" ;;
14693                     esac
14694                     ;;
14695                 esac
14696                 ;;
14697         ODBM_File|odbm_fil) 
14698                 case "${i_dbm}${i_rpcsvcdbm}" in
14699                 *"${define}"*)
14700                     case "$osname-$use64bitint" in
14701                     hpux-define)
14702                         case "$libs" in
14703                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
14704                         esac
14705                         ;;
14706                     *) avail_ext="$avail_ext $xxx" ;;
14707                     esac
14708                     ;;
14709                 esac
14710                 ;;
14711         POSIX|posix)
14712                 case "$useposix" in
14713                 true|define|y) avail_ext="$avail_ext $xxx" ;;
14714                 esac
14715                 ;;
14716         Opcode|opcode)
14717                 case "$useopcode" in
14718                 true|define|y) avail_ext="$avail_ext $xxx" ;;
14719                 esac
14720                 ;;
14721         Socket|socket)
14722                 case "$d_socket" in 
14723                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
14724                 esac
14725                 ;;
14726         Thread|thread)
14727                 case "$usethreads" in 
14728                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
14729                 esac
14730                 ;;
14731         IPC/SysV|ipc/sysv)
14732                 : XXX Do we need a useipcsysv variable here
14733                 case "${d_msg}${d_sem}${d_shm}" in 
14734                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
14735                 esac
14736                 ;;
14737         *)      avail_ext="$avail_ext $xxx"
14738                 ;;
14739         esac
14740 done
14741
14742 set X $avail_ext
14743 shift
14744 avail_ext="$*"
14745
14746 : Now see which nonxs extensions are supported on this system.
14747 : For now assume all are.
14748 nonxs_ext=''
14749 for xxx in $nonxs_extensions ; do
14750         case "$xxx" in
14751         *)      nonxs_ext="$nonxs_ext $xxx"
14752                 ;;
14753         esac
14754 done
14755
14756 set X $nonxs_ext
14757 shift
14758 nonxs_ext="$*"
14759
14760 case $usedl in
14761 $define)
14762         $cat <<EOM
14763 A number of extensions are supplied with $package.  You may choose to
14764 compile these extensions for dynamic loading (the default), compile
14765 them into the $package executable (static loading), or not include
14766 them at all.  Answer "none" to include no extensions.
14767 Note that DynaLoader is always built and need not be mentioned here.
14768
14769 EOM
14770         case "$dynamic_ext" in
14771         '') dflt="$avail_ext" ;;
14772         *)      dflt="$dynamic_ext"
14773                 # Perhaps we are reusing an old out-of-date config.sh.
14774                 case "$hint" in
14775                 previous)
14776                         if test X"$dynamic_ext" != X"$avail_ext"; then
14777                                 $cat <<EOM
14778 NOTICE:  Your previous config.sh list may be incorrect. 
14779 The extensions now available to you are 
14780         ${avail_ext}
14781 but the default list from your previous config.sh is
14782         ${dynamic_ext} 
14783
14784 EOM
14785                         fi
14786                         ;;
14787                 esac
14788                 ;;
14789         esac
14790         case "$dflt" in
14791         '')     dflt=none;;
14792         esac
14793         rp="What extensions do you wish to load dynamically?"
14794         . ./myread
14795         case "$ans" in
14796         none) dynamic_ext=' ' ;;
14797         *) dynamic_ext="$ans" ;;
14798         esac
14799
14800         case "$static_ext" in
14801         '')
14802                 : Exclude those already listed in dynamic linking
14803                 dflt=''
14804                 for xxx in $avail_ext; do
14805                         case " $dynamic_ext " in
14806                         *" $xxx "*) ;;
14807                         *) dflt="$dflt $xxx" ;;
14808                         esac
14809                 done
14810                 set X $dflt
14811                 shift
14812                 dflt="$*"
14813                 ;;
14814         *)  dflt="$static_ext" 
14815                 ;;
14816         esac
14817
14818         case "$dflt" in
14819         '')     dflt=none;;
14820         esac
14821         rp="What extensions do you wish to load statically?"
14822         . ./myread
14823         case "$ans" in
14824         none) static_ext=' ' ;;
14825         *) static_ext="$ans" ;;
14826         esac
14827         ;;
14828 *)
14829         $cat <<EOM
14830 A number of extensions are supplied with $package.  Answer "none" 
14831 to include no extensions. 
14832 Note that DynaLoader is always built and need not be mentioned here.
14833
14834 EOM
14835         case "$static_ext" in
14836         '') dflt="$avail_ext" ;;
14837         *)      dflt="$static_ext"
14838                 # Perhaps we are reusing an old out-of-date config.sh.
14839                 case "$hint" in
14840                 previous)
14841                         if test X"$static_ext" != X"$avail_ext"; then
14842                                 $cat <<EOM
14843 NOTICE:  Your previous config.sh list may be incorrect. 
14844 The extensions now available to you are 
14845         ${avail_ext}
14846 but the default list from your previous config.sh is
14847         ${static_ext} 
14848
14849 EOM
14850                         fi
14851                         ;;
14852                 esac
14853                 ;;
14854         esac
14855         : Exclude those that are not xs extensions
14856         case "$dflt" in
14857         '')     dflt=none;;
14858         esac
14859         rp="What extensions do you wish to include?"
14860         . ./myread
14861         case "$ans" in
14862         none) static_ext=' ' ;;
14863         *) static_ext="$ans" ;;
14864         esac
14865         ;;
14866 esac
14867
14868 set X $dynamic_ext $static_ext $nonxs_ext
14869 shift
14870 extensions="$*"
14871
14872 : Remove build directory name from cppstdin so it can be used from
14873 : either the present location or the final installed location.
14874 echo " "
14875 : Get out of the UU directory to get correct path name.
14876 cd ..
14877 case "$cppstdin" in
14878 `pwd`/cppstdin)
14879         echo "Stripping down cppstdin path name"
14880         cppstdin=cppstdin
14881         ;;
14882 esac
14883 cd UU
14884
14885 : end of configuration questions
14886 echo " "
14887 echo "End of configuration questions."
14888 echo " "
14889
14890 : back to where it started
14891 if test -d ../UU; then
14892         cd ..
14893 fi
14894
14895 : configuration may be patched via a 'config.over' file
14896 if $test -f config.over; then
14897         echo " "
14898         dflt=y
14899         rp='I see a config.over file.  Do you wish to load it?'
14900         . UU/myread
14901         case "$ans" in
14902         n*) echo "OK, I'll ignore it.";;
14903         *)      . ./config.over
14904                 echo "Configuration override changes have been loaded."
14905                 ;;
14906         esac
14907 fi
14908
14909 : in case they want portability, strip down executable paths
14910 case "$d_portable" in
14911 "$define")
14912         echo " "
14913         echo "Stripping down executable paths..." >&4
14914         for file in $loclist $trylist; do
14915                 eval temp=\$$file
14916                 eval $file=`basename $temp`
14917         done
14918         ;;
14919 esac
14920
14921 : create config.sh file
14922 echo " "
14923 echo "Creating config.sh..." >&4
14924 $spitshell <<EOT >config.sh
14925 $startsh
14926 #
14927 # This file was produced by running the Configure script. It holds all the
14928 # definitions figured out by Configure. Should you modify one of these values,
14929 # do not forget to propagate your changes by running "Configure -der". You may
14930 # instead choose to run each of the .SH files by yourself, or "Configure -S".
14931 #
14932
14933 # Package name      : $package
14934 # Source directory  : $src
14935 # Configuration time: $cf_time
14936 # Configured by     : $cf_by
14937 # Target system     : $myuname
14938
14939 Author='$Author'
14940 Date='$Date'
14941 Header='$Header'
14942 Id='$Id'
14943 Locker='$Locker'
14944 Log='$Log'
14945 Mcc='$Mcc'
14946 RCSfile='$RCSfile'
14947 Revision='$Revision'
14948 Source='$Source'
14949 State='$State'
14950 _a='$_a'
14951 _exe='$_exe'
14952 _o='$_o'
14953 afs='$afs'
14954 alignbytes='$alignbytes'
14955 ansi2knr='$ansi2knr'
14956 aphostname='$aphostname'
14957 api_revision='$api_revision'
14958 api_subversion='$api_subversion'
14959 api_version='$api_version'
14960 api_versionstring='$api_versionstring'
14961 ar='$ar'
14962 archlib='$archlib'
14963 archlibexp='$archlibexp'
14964 archname64='$archname64'
14965 archname='$archname'
14966 archobjs='$archobjs'
14967 awk='$awk'
14968 baserev='$baserev'
14969 bash='$bash'
14970 bin='$bin'
14971 bincompat5005='$bincompat5005'
14972 binexp='$binexp'
14973 bison='$bison'
14974 byacc='$byacc'
14975 byteorder='$byteorder'
14976 c='$c'
14977 castflags='$castflags'
14978 cat='$cat'
14979 cc='$cc'
14980 cccdlflags='$cccdlflags'
14981 ccdlflags='$ccdlflags'
14982 ccflags='$ccflags'
14983 ccsymbols='$ccsymbols'
14984 cf_by='$cf_by'
14985 cf_email='$cf_email'
14986 cf_time='$cf_time'
14987 charsize='$charsize'
14988 chgrp='$chgrp'
14989 chmod='$chmod'
14990 chown='$chown'
14991 clocktype='$clocktype'
14992 comm='$comm'
14993 compress='$compress'
14994 contains='$contains'
14995 cp='$cp'
14996 cpio='$cpio'
14997 cpp='$cpp'
14998 cpp_stuff='$cpp_stuff'
14999 cppccsymbols='$cppccsymbols'
15000 cppflags='$cppflags'
15001 cpplast='$cpplast'
15002 cppminus='$cppminus'
15003 cpprun='$cpprun'
15004 cppstdin='$cppstdin'
15005 cppsymbols='$cppsymbols'
15006 crosscompile='$crosscompile'
15007 cryptlib='$cryptlib'
15008 csh='$csh'
15009 d_Gconvert='$d_Gconvert'
15010 d_PRIEldbl='$d_PRIEldbl'
15011 d_PRIFldbl='$d_PRIFldbl'
15012 d_PRIGldbl='$d_PRIGldbl'
15013 d_PRIX64='$d_PRIX64'
15014 d_PRId64='$d_PRId64'
15015 d_PRIeldbl='$d_PRIeldbl'
15016 d_PRIfldbl='$d_PRIfldbl'
15017 d_PRIgldbl='$d_PRIgldbl'
15018 d_PRIi64='$d_PRIi64'
15019 d_PRIo64='$d_PRIo64'
15020 d_PRIu64='$d_PRIu64'
15021 d_PRIx64='$d_PRIx64'
15022 d_access='$d_access'
15023 d_accessx='$d_accessx'
15024 d_alarm='$d_alarm'
15025 d_archlib='$d_archlib'
15026 d_atolf='$d_atolf'
15027 d_atoll='$d_atoll'
15028 d_attribut='$d_attribut'
15029 d_bcmp='$d_bcmp'
15030 d_bcopy='$d_bcopy'
15031 d_bincompat5005='$d_bincompat5005'
15032 d_bsd='$d_bsd'
15033 d_bsdgetpgrp='$d_bsdgetpgrp'
15034 d_bsdsetpgrp='$d_bsdsetpgrp'
15035 d_bzero='$d_bzero'
15036 d_casti32='$d_casti32'
15037 d_castneg='$d_castneg'
15038 d_charvspr='$d_charvspr'
15039 d_chown='$d_chown'
15040 d_chroot='$d_chroot'
15041 d_chsize='$d_chsize'
15042 d_closedir='$d_closedir'
15043 d_const='$d_const'
15044 d_crypt='$d_crypt'
15045 d_csh='$d_csh'
15046 d_cuserid='$d_cuserid'
15047 d_dbl_dig='$d_dbl_dig'
15048 d_difftime='$d_difftime'
15049 d_dirnamlen='$d_dirnamlen'
15050 d_dlerror='$d_dlerror'
15051 d_dlopen='$d_dlopen'
15052 d_dlsymun='$d_dlsymun'
15053 d_dosuid='$d_dosuid'
15054 d_drand48proto='$d_drand48proto'
15055 d_dup2='$d_dup2'
15056 d_eaccess='$d_eaccess'
15057 d_endgrent='$d_endgrent'
15058 d_endhent='$d_endhent'
15059 d_endnent='$d_endnent'
15060 d_endpent='$d_endpent'
15061 d_endpwent='$d_endpwent'
15062 d_endsent='$d_endsent'
15063 d_endspent='$d_endspent'
15064 d_eofnblk='$d_eofnblk'
15065 d_eunice='$d_eunice'
15066 d_fchmod='$d_fchmod'
15067 d_fchown='$d_fchown'
15068 d_fcntl='$d_fcntl'
15069 d_fd_macros='$d_fd_macros'
15070 d_fd_set='$d_fd_set'
15071 d_fds_bits='$d_fds_bits'
15072 d_fgetpos='$d_fgetpos'
15073 d_flexfnam='$d_flexfnam'
15074 d_flock='$d_flock'
15075 d_fork='$d_fork'
15076 d_fpathconf='$d_fpathconf'
15077 d_fpos64_t='$d_fpos64_t'
15078 d_fs_data_s='$d_fs_data_s'
15079 d_fseeko='$d_fseeko'
15080 d_fsetpos='$d_fsetpos'
15081 d_fstatfs='$d_fstatfs'
15082 d_fstatvfs='$d_fstatvfs'
15083 d_ftello='$d_ftello'
15084 d_ftime='$d_ftime'
15085 d_getcwd='$d_getcwd'
15086 d_getfsstat='$d_getfsstat'
15087 d_getgrent='$d_getgrent'
15088 d_getgrps='$d_getgrps'
15089 d_gethbyaddr='$d_gethbyaddr'
15090 d_gethbyname='$d_gethbyname'
15091 d_gethent='$d_gethent'
15092 d_gethname='$d_gethname'
15093 d_gethostprotos='$d_gethostprotos'
15094 d_getlogin='$d_getlogin'
15095 d_getmnt='$d_getmnt'
15096 d_getmntent='$d_getmntent'
15097 d_getnbyaddr='$d_getnbyaddr'
15098 d_getnbyname='$d_getnbyname'
15099 d_getnent='$d_getnent'
15100 d_getnetprotos='$d_getnetprotos'
15101 d_getpbyname='$d_getpbyname'
15102 d_getpbynumber='$d_getpbynumber'
15103 d_getpent='$d_getpent'
15104 d_getpgid='$d_getpgid'
15105 d_getpgrp2='$d_getpgrp2'
15106 d_getpgrp='$d_getpgrp'
15107 d_getppid='$d_getppid'
15108 d_getprior='$d_getprior'
15109 d_getprotoprotos='$d_getprotoprotos'
15110 d_getpwent='$d_getpwent'
15111 d_getsbyname='$d_getsbyname'
15112 d_getsbyport='$d_getsbyport'
15113 d_getsent='$d_getsent'
15114 d_getservprotos='$d_getservprotos'
15115 d_getspent='$d_getspent'
15116 d_getspnam='$d_getspnam'
15117 d_gettimeod='$d_gettimeod'
15118 d_gnulibc='$d_gnulibc'
15119 d_grpasswd='$d_grpasswd'
15120 d_hasmntopt='$d_hasmntopt'
15121 d_htonl='$d_htonl'
15122 d_iconv='$d_iconv'
15123 d_index='$d_index'
15124 d_inetaton='$d_inetaton'
15125 d_int64_t='$d_int64_t'
15126 d_isascii='$d_isascii'
15127 d_killpg='$d_killpg'
15128 d_lchown='$d_lchown'
15129 d_ldbl_dig='$d_ldbl_dig'
15130 d_link='$d_link'
15131 d_locconv='$d_locconv'
15132 d_lockf='$d_lockf'
15133 d_longdbl='$d_longdbl'
15134 d_longlong='$d_longlong'
15135 d_lseekproto='$d_lseekproto'
15136 d_lstat='$d_lstat'
15137 d_madvise='$d_madvise'
15138 d_mblen='$d_mblen'
15139 d_mbstowcs='$d_mbstowcs'
15140 d_mbtowc='$d_mbtowc'
15141 d_memchr='$d_memchr'
15142 d_memcmp='$d_memcmp'
15143 d_memcpy='$d_memcpy'
15144 d_memmove='$d_memmove'
15145 d_memset='$d_memset'
15146 d_mkdir='$d_mkdir'
15147 d_mkdtemp='$d_mkdtemp'
15148 d_mkfifo='$d_mkfifo'
15149 d_mkstemp='$d_mkstemp'
15150 d_mkstemps='$d_mkstemps'
15151 d_mktime='$d_mktime'
15152 d_mmap='$d_mmap'
15153 d_mprotect='$d_mprotect'
15154 d_msg='$d_msg'
15155 d_msg_ctrunc='$d_msg_ctrunc'
15156 d_msg_dontroute='$d_msg_dontroute'
15157 d_msg_oob='$d_msg_oob'
15158 d_msg_peek='$d_msg_peek'
15159 d_msg_proxy='$d_msg_proxy'
15160 d_msgctl='$d_msgctl'
15161 d_msgget='$d_msgget'
15162 d_msgrcv='$d_msgrcv'
15163 d_msgsnd='$d_msgsnd'
15164 d_msync='$d_msync'
15165 d_munmap='$d_munmap'
15166 d_mymalloc='$d_mymalloc'
15167 d_nice='$d_nice'
15168 d_nv_preserves_uv='$d_nv_preserves_uv'
15169 d_off64_t='$d_off64_t'
15170 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
15171 d_oldpthreads='$d_oldpthreads'
15172 d_oldsock='$d_oldsock'
15173 d_open3='$d_open3'
15174 d_pathconf='$d_pathconf'
15175 d_pause='$d_pause'
15176 d_phostname='$d_phostname'
15177 d_pipe='$d_pipe'
15178 d_poll='$d_poll'
15179 d_portable='$d_portable'
15180 d_pthread_yield='$d_pthread_yield'
15181 d_pwage='$d_pwage'
15182 d_pwchange='$d_pwchange'
15183 d_pwclass='$d_pwclass'
15184 d_pwcomment='$d_pwcomment'
15185 d_pwexpire='$d_pwexpire'
15186 d_pwgecos='$d_pwgecos'
15187 d_pwpasswd='$d_pwpasswd'
15188 d_pwquota='$d_pwquota'
15189 d_qgcvt='$d_qgcvt'
15190 d_quad='$d_quad'
15191 d_readdir='$d_readdir'
15192 d_readlink='$d_readlink'
15193 d_rename='$d_rename'
15194 d_rewinddir='$d_rewinddir'
15195 d_rmdir='$d_rmdir'
15196 d_safebcpy='$d_safebcpy'
15197 d_safemcpy='$d_safemcpy'
15198 d_sanemcmp='$d_sanemcmp'
15199 d_sched_yield='$d_sched_yield'
15200 d_scm_rights='$d_scm_rights'
15201 d_seekdir='$d_seekdir'
15202 d_select='$d_select'
15203 d_sem='$d_sem'
15204 d_semctl='$d_semctl'
15205 d_semctl_semid_ds='$d_semctl_semid_ds'
15206 d_semctl_semun='$d_semctl_semun'
15207 d_semget='$d_semget'
15208 d_semop='$d_semop'
15209 d_setegid='$d_setegid'
15210 d_seteuid='$d_seteuid'
15211 d_setgrent='$d_setgrent'
15212 d_setgrps='$d_setgrps'
15213 d_sethent='$d_sethent'
15214 d_setlinebuf='$d_setlinebuf'
15215 d_setlocale='$d_setlocale'
15216 d_setnent='$d_setnent'
15217 d_setpent='$d_setpent'
15218 d_setpgid='$d_setpgid'
15219 d_setpgrp2='$d_setpgrp2'
15220 d_setpgrp='$d_setpgrp'
15221 d_setprior='$d_setprior'
15222 d_setpwent='$d_setpwent'
15223 d_setregid='$d_setregid'
15224 d_setresgid='$d_setresgid'
15225 d_setresuid='$d_setresuid'
15226 d_setreuid='$d_setreuid'
15227 d_setrgid='$d_setrgid'
15228 d_setruid='$d_setruid'
15229 d_setsent='$d_setsent'
15230 d_setsid='$d_setsid'
15231 d_setspent='$d_setspent'
15232 d_setvbuf='$d_setvbuf'
15233 d_sfio='$d_sfio'
15234 d_shm='$d_shm'
15235 d_shmat='$d_shmat'
15236 d_shmatprototype='$d_shmatprototype'
15237 d_shmctl='$d_shmctl'
15238 d_shmdt='$d_shmdt'
15239 d_shmget='$d_shmget'
15240 d_sigaction='$d_sigaction'
15241 d_sigsetjmp='$d_sigsetjmp'
15242 d_socket='$d_socket'
15243 d_socklen_t='$d_socklen_t'
15244 d_sockpair='$d_sockpair'
15245 d_sqrtl='$d_sqrtl'
15246 d_statblks='$d_statblks'
15247 d_statfs_f_flags='$d_statfs_f_flags'
15248 d_statfs_s='$d_statfs_s'
15249 d_statvfs='$d_statvfs'
15250 d_stdio_cnt_lval='$d_stdio_cnt_lval'
15251 d_stdio_ptr_lval='$d_stdio_ptr_lval'
15252 d_stdio_stream_array='$d_stdio_stream_array'
15253 d_stdiobase='$d_stdiobase'
15254 d_stdstdio='$d_stdstdio'
15255 d_strchr='$d_strchr'
15256 d_strcoll='$d_strcoll'
15257 d_strctcpy='$d_strctcpy'
15258 d_strerrm='$d_strerrm'
15259 d_strerror='$d_strerror'
15260 d_strtod='$d_strtod'
15261 d_strtol='$d_strtol'
15262 d_strtold='$d_strtold'
15263 d_strtoll='$d_strtoll'
15264 d_strtoul='$d_strtoul'
15265 d_strtoull='$d_strtoull'
15266 d_strtouq='$d_strtouq'
15267 d_strxfrm='$d_strxfrm'
15268 d_suidsafe='$d_suidsafe'
15269 d_symlink='$d_symlink'
15270 d_syscall='$d_syscall'
15271 d_sysconf='$d_sysconf'
15272 d_sysernlst='$d_sysernlst'
15273 d_syserrlst='$d_syserrlst'
15274 d_system='$d_system'
15275 d_tcgetpgrp='$d_tcgetpgrp'
15276 d_tcsetpgrp='$d_tcsetpgrp'
15277 d_telldir='$d_telldir'
15278 d_telldirproto='$d_telldirproto'
15279 d_time='$d_time'
15280 d_times='$d_times'
15281 d_truncate='$d_truncate'
15282 d_tzname='$d_tzname'
15283 d_umask='$d_umask'
15284 d_uname='$d_uname'
15285 d_union_semun='$d_union_semun'
15286 d_ustat='$d_ustat'
15287 d_vendorarch='$d_vendorarch'
15288 d_vendorbin='$d_vendorbin'
15289 d_vendorlib='$d_vendorlib'
15290 d_vfork='$d_vfork'
15291 d_void_closedir='$d_void_closedir'
15292 d_voidsig='$d_voidsig'
15293 d_voidtty='$d_voidtty'
15294 d_volatile='$d_volatile'
15295 d_vprintf='$d_vprintf'
15296 d_wait4='$d_wait4'
15297 d_waitpid='$d_waitpid'
15298 d_wcstombs='$d_wcstombs'
15299 d_wctomb='$d_wctomb'
15300 d_xenix='$d_xenix'
15301 date='$date'
15302 db_hashtype='$db_hashtype'
15303 db_prefixtype='$db_prefixtype'
15304 defvoidused='$defvoidused'
15305 direntrytype='$direntrytype'
15306 dlext='$dlext'
15307 dlsrc='$dlsrc'
15308 doublesize='$doublesize'
15309 drand01='$drand01'
15310 dynamic_ext='$dynamic_ext'
15311 eagain='$eagain'
15312 ebcdic='$ebcdic'
15313 echo='$echo'
15314 egrep='$egrep'
15315 emacs='$emacs'
15316 eunicefix='$eunicefix'
15317 exe_ext='$exe_ext'
15318 expr='$expr'
15319 extensions='$extensions'
15320 fflushNULL='$fflushNULL'
15321 fflushall='$fflushall'
15322 find='$find'
15323 firstmakefile='$firstmakefile'
15324 flex='$flex'
15325 fpossize='$fpossize'
15326 fpostype='$fpostype'
15327 freetype='$freetype'
15328 full_ar='$full_ar'
15329 full_csh='$full_csh'
15330 full_sed='$full_sed'
15331 gccversion='$gccversion'
15332 gidformat='$gidformat'
15333 gidsign='$gidsign'
15334 gidsize='$gidsize'
15335 gidtype='$gidtype'
15336 glibpth='$glibpth'
15337 grep='$grep'
15338 groupcat='$groupcat'
15339 groupstype='$groupstype'
15340 gzip='$gzip'
15341 h_fcntl='$h_fcntl'
15342 h_sysfile='$h_sysfile'
15343 hint='$hint'
15344 hostcat='$hostcat'
15345 huge='$huge'
15346 i16size='$i16size'
15347 i16type='$i16type'
15348 i32size='$i32size'
15349 i32type='$i32type'
15350 i64size='$i64size'
15351 i64type='$i64type'
15352 i8size='$i8size'
15353 i8type='$i8type'
15354 i_arpainet='$i_arpainet'
15355 i_bsdioctl='$i_bsdioctl'
15356 i_db='$i_db'
15357 i_dbm='$i_dbm'
15358 i_dirent='$i_dirent'
15359 i_dld='$i_dld'
15360 i_dlfcn='$i_dlfcn'
15361 i_fcntl='$i_fcntl'
15362 i_float='$i_float'
15363 i_gdbm='$i_gdbm'
15364 i_grp='$i_grp'
15365 i_iconv='$i_iconv'
15366 i_ieeefp='$i_ieeefp'
15367 i_inttypes='$i_inttypes'
15368 i_limits='$i_limits'
15369 i_locale='$i_locale'
15370 i_machcthr='$i_machcthr'
15371 i_malloc='$i_malloc'
15372 i_math='$i_math'
15373 i_memory='$i_memory'
15374 i_mntent='$i_mntent'
15375 i_ndbm='$i_ndbm'
15376 i_netdb='$i_netdb'
15377 i_neterrno='$i_neterrno'
15378 i_netinettcp='$i_netinettcp'
15379 i_niin='$i_niin'
15380 i_poll='$i_poll'
15381 i_pthread='$i_pthread'
15382 i_pwd='$i_pwd'
15383 i_rpcsvcdbm='$i_rpcsvcdbm'
15384 i_sfio='$i_sfio'
15385 i_sgtty='$i_sgtty'
15386 i_shadow='$i_shadow'
15387 i_socks='$i_socks'
15388 i_stdarg='$i_stdarg'
15389 i_stddef='$i_stddef'
15390 i_stdlib='$i_stdlib'
15391 i_string='$i_string'
15392 i_sunmath='$i_sunmath'
15393 i_sysaccess='$i_sysaccess'
15394 i_sysdir='$i_sysdir'
15395 i_sysfile='$i_sysfile'
15396 i_sysfilio='$i_sysfilio'
15397 i_sysin='$i_sysin'
15398 i_sysioctl='$i_sysioctl'
15399 i_syslog='$i_syslog'
15400 i_sysmman='$i_sysmman'
15401 i_sysmode='$i_sysmode'
15402 i_sysmount='$i_sysmount'
15403 i_sysndir='$i_sysndir'
15404 i_sysparam='$i_sysparam'
15405 i_sysresrc='$i_sysresrc'
15406 i_syssecrt='$i_syssecrt'
15407 i_sysselct='$i_sysselct'
15408 i_syssockio='$i_syssockio'
15409 i_sysstat='$i_sysstat'
15410 i_sysstatfs='$i_sysstatfs'
15411 i_sysstatvfs='$i_sysstatvfs'
15412 i_systime='$i_systime'
15413 i_systimek='$i_systimek'
15414 i_systimes='$i_systimes'
15415 i_systypes='$i_systypes'
15416 i_sysuio='$i_sysuio'
15417 i_sysun='$i_sysun'
15418 i_sysutsname='$i_sysutsname'
15419 i_sysvfs='$i_sysvfs'
15420 i_syswait='$i_syswait'
15421 i_termio='$i_termio'
15422 i_termios='$i_termios'
15423 i_time='$i_time'
15424 i_unistd='$i_unistd'
15425 i_ustat='$i_ustat'
15426 i_utime='$i_utime'
15427 i_values='$i_values'
15428 i_varargs='$i_varargs'
15429 i_varhdr='$i_varhdr'
15430 i_vfork='$i_vfork'
15431 ignore_versioned_solibs='$ignore_versioned_solibs'
15432 inc_version_list='$inc_version_list'
15433 inc_version_list_init='$inc_version_list_init'
15434 incpath='$incpath'
15435 inews='$inews'
15436 installarchlib='$installarchlib'
15437 installbin='$installbin'
15438 installman1dir='$installman1dir'
15439 installman3dir='$installman3dir'
15440 installprefix='$installprefix'
15441 installprefixexp='$installprefixexp'
15442 installprivlib='$installprivlib'
15443 installscript='$installscript'
15444 installsitearch='$installsitearch'
15445 installsitebin='$installsitebin'
15446 installsitelib='$installsitelib'
15447 installstyle='$installstyle'
15448 installusrbinperl='$installusrbinperl'
15449 installvendorarch='$installvendorarch'
15450 installvendorbin='$installvendorbin'
15451 installvendorlib='$installvendorlib'
15452 intsize='$intsize'
15453 ivdformat='$ivdformat'
15454 ivsize='$ivsize'
15455 ivtype='$ivtype'
15456 known_extensions='$known_extensions'
15457 ksh='$ksh'
15458 large='$large'
15459 ld='$ld'
15460 lddlflags='$lddlflags'
15461 ldflags='$ldflags'
15462 ldlibpthname='$ldlibpthname'
15463 less='$less'
15464 lib_ext='$lib_ext'
15465 libc='$libc'
15466 libperl='$libperl'
15467 libpth='$libpth'
15468 libs='$libs'
15469 libsdirs='$libsdirs'
15470 libsfiles='$libsfiles'
15471 libsfound='$libsfound'
15472 libspath='$libspath'
15473 libswanted='$libswanted'
15474 line='$line'
15475 lint='$lint'
15476 lkflags='$lkflags'
15477 ln='$ln'
15478 lns='$lns'
15479 locincpth='$locincpth'
15480 loclibpth='$loclibpth'
15481 longdblsize='$longdblsize'
15482 longlongsize='$longlongsize'
15483 longsize='$longsize'
15484 lp='$lp'
15485 lpr='$lpr'
15486 ls='$ls'
15487 lseeksize='$lseeksize'
15488 lseektype='$lseektype'
15489 mail='$mail'
15490 mailx='$mailx'
15491 make='$make'
15492 make_set_make='$make_set_make'
15493 mallocobj='$mallocobj'
15494 mallocsrc='$mallocsrc'
15495 malloctype='$malloctype'
15496 man1dir='$man1dir'
15497 man1direxp='$man1direxp'
15498 man1ext='$man1ext'
15499 man3dir='$man3dir'
15500 man3direxp='$man3direxp'
15501 man3ext='$man3ext'
15502 medium='$medium'
15503 mips_type='$mips_type'
15504 mkdir='$mkdir'
15505 mmaptype='$mmaptype'
15506 models='$models'
15507 modetype='$modetype'
15508 more='$more'
15509 multiarch='$multiarch'
15510 mv='$mv'
15511 myarchname='$myarchname'
15512 mydomain='$mydomain'
15513 myhostname='$myhostname'
15514 myuname='$myuname'
15515 n='$n'
15516 netdb_hlen_type='$netdb_hlen_type'
15517 netdb_host_type='$netdb_host_type'
15518 netdb_name_type='$netdb_name_type'
15519 netdb_net_type='$netdb_net_type'
15520 nm='$nm'
15521 nm_opt='$nm_opt'
15522 nm_so_opt='$nm_so_opt'
15523 nonxs_ext='$nonxs_ext'
15524 nroff='$nroff'
15525 nvsize='$nvsize'
15526 nvtype='$nvtype'
15527 o_nonblock='$o_nonblock'
15528 obj_ext='$obj_ext'
15529 old_pthread_create_joinable='$old_pthread_create_joinable'
15530 optimize='$optimize'
15531 orderlib='$orderlib'
15532 osname='$osname'
15533 osvers='$osvers'
15534 package='$package'
15535 pager='$pager'
15536 passcat='$passcat'
15537 patchlevel='$patchlevel'
15538 path_sep='$path_sep'
15539 perl5='$perl5'
15540 perl='$perl'
15541 perladmin='$perladmin'
15542 perlpath='$perlpath'
15543 pg='$pg'
15544 phostname='$phostname'
15545 pidtype='$pidtype'
15546 plibpth='$plibpth'
15547 pm_apiversion='$pm_apiversion'
15548 pmake='$pmake'
15549 pr='$pr'
15550 prefix='$prefix'
15551 prefixexp='$prefixexp'
15552 privlib='$privlib'
15553 privlibexp='$privlibexp'
15554 prototype='$prototype'
15555 ptrsize='$ptrsize'
15556 quadkind='$quadkind'
15557 quadtype='$quadtype'
15558 randbits='$randbits'
15559 randfunc='$randfunc'
15560 randseedtype='$randseedtype'
15561 ranlib='$ranlib'
15562 rd_nodata='$rd_nodata'
15563 revision='$revision'
15564 rm='$rm'
15565 rmail='$rmail'
15566 runnm='$runnm'
15567 sPRIEldbl='$sPRIEldbl'
15568 sPRIFldbl='$sPRIFldbl'
15569 sPRIGldbl='$sPRIGldbl'
15570 sPRIX64='$sPRIX64'
15571 sPRId64='$sPRId64'
15572 sPRIeldbl='$sPRIeldbl'
15573 sPRIfldbl='$sPRIfldbl'
15574 sPRIgldbl='$sPRIgldbl'
15575 sPRIi64='$sPRIi64'
15576 sPRIo64='$sPRIo64'
15577 sPRIu64='$sPRIu64'
15578 sPRIx64='$sPRIx64'
15579 sched_yield='$sched_yield'
15580 scriptdir='$scriptdir'
15581 scriptdirexp='$scriptdirexp'
15582 sed='$sed'
15583 seedfunc='$seedfunc'
15584 selectminbits='$selectminbits'
15585 selecttype='$selecttype'
15586 sendmail='$sendmail'
15587 sh='$sh'
15588 shar='$shar'
15589 sharpbang='$sharpbang'
15590 shmattype='$shmattype'
15591 shortsize='$shortsize'
15592 shrpenv='$shrpenv'
15593 shsharp='$shsharp'
15594 sig_count='$sig_count'
15595 sig_name='$sig_name'
15596 sig_name_init='$sig_name_init'
15597 sig_num='$sig_num'
15598 sig_num_init='$sig_num_init'
15599 signal_t='$signal_t'
15600 sitearch='$sitearch'
15601 sitearchexp='$sitearchexp'
15602 sitebin='$sitebin'
15603 sitebinexp='$sitebinexp'
15604 sitelib='$sitelib'
15605 sitelib_stem='$sitelib_stem'
15606 sitelibexp='$sitelibexp'
15607 siteprefix='$siteprefix'
15608 siteprefixexp='$siteprefixexp'
15609 sizetype='$sizetype'
15610 sleep='$sleep'
15611 smail='$smail'
15612 small='$small'
15613 so='$so'
15614 sockethdr='$sockethdr'
15615 socketlib='$socketlib'
15616 socksizetype='$socksizetype'
15617 sort='$sort'
15618 spackage='$spackage'
15619 spitshell='$spitshell'
15620 split='$split'
15621 src='$src'
15622 ssizetype='$ssizetype'
15623 startperl='$startperl'
15624 startsh='$startsh'
15625 static_ext='$static_ext'
15626 stdchar='$stdchar'
15627 stdio_base='$stdio_base'
15628 stdio_bufsiz='$stdio_bufsiz'
15629 stdio_cnt='$stdio_cnt'
15630 stdio_filbuf='$stdio_filbuf'
15631 stdio_ptr='$stdio_ptr'
15632 stdio_stream_array='$stdio_stream_array'
15633 strings='$strings'
15634 submit='$submit'
15635 subversion='$subversion'
15636 sysman='$sysman'
15637 tail='$tail'
15638 tar='$tar'
15639 tbl='$tbl'
15640 tee='$tee'
15641 test='$test'
15642 timeincl='$timeincl'
15643 timetype='$timetype'
15644 touch='$touch'
15645 tr='$tr'
15646 trnl='$trnl'
15647 troff='$troff'
15648 u16size='$u16size'
15649 u16type='$u16type'
15650 u32size='$u32size'
15651 u32type='$u32type'
15652 u64size='$u64size'
15653 u64type='$u64type'
15654 u8size='$u8size'
15655 u8type='$u8type'
15656 uidformat='$uidformat'
15657 uidsign='$uidsign'
15658 uidsize='$uidsize'
15659 uidtype='$uidtype'
15660 uname='$uname'
15661 uniq='$uniq'
15662 uquadtype='$uquadtype'
15663 use5005threads='$use5005threads'
15664 use64bitall='$use64bitall'
15665 use64bitint='$use64bitint'
15666 usedl='$usedl'
15667 useithreads='$useithreads'
15668 uselargefiles='$uselargefiles'
15669 uselongdouble='$uselongdouble'
15670 usemorebits='$usemorebits'
15671 usemultiplicity='$usemultiplicity'
15672 usemymalloc='$usemymalloc'
15673 usenm='$usenm'
15674 useopcode='$useopcode'
15675 useperlio='$useperlio'
15676 useposix='$useposix'
15677 usesfio='$usesfio'
15678 useshrplib='$useshrplib'
15679 usesocks='$usesocks'
15680 usethreads='$usethreads'
15681 usevendorprefix='$usevendorprefix'
15682 usevfork='$usevfork'
15683 usrinc='$usrinc'
15684 uuname='$uuname'
15685 uvoformat='$uvoformat'
15686 uvsize='$uvsize'
15687 uvtype='$uvtype'
15688 uvuformat='$uvuformat'
15689 uvxformat='$uvxformat'
15690 vendorarch='$vendorarch'
15691 vendorarchexp='$vendorarchexp'
15692 vendorbin='$vendorbin'
15693 vendorbinexp='$vendorbinexp'
15694 vendorlib='$vendorlib'
15695 vendorlib_stem='$vendorlib_stem'
15696 vendorlibexp='$vendorlibexp'
15697 vendorprefix='$vendorprefix'
15698 vendorprefixexp='$vendorprefixexp'
15699 version='$version'
15700 vi='$vi'
15701 voidflags='$voidflags'
15702 xlibpth='$xlibpth'
15703 xs_apiversion='$xs_apiversion'
15704 zcat='$zcat'
15705 zip='$zip'
15706 EOT
15707
15708 : Add in command line options if available
15709 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
15710
15711 : add special variables
15712 $test -f $src/patchlevel.h && \
15713 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
15714 echo "CONFIGDOTSH=true" >>config.sh
15715
15716 : propagate old symbols
15717 if $test -f UU/config.sh; then
15718         <UU/config.sh sort | uniq >UU/oldconfig.sh
15719         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
15720         sort | uniq -u >UU/oldsyms
15721         set X `cat UU/oldsyms`
15722         shift
15723         case $# in
15724         0) ;;
15725         *)
15726                 cat <<EOM
15727 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
15728 EOM
15729                 echo "# Variables propagated from previous config.sh file." >>config.sh
15730                 for sym in `cat UU/oldsyms`; do
15731                         echo "    Propagating $hint variable "'$'"$sym..."
15732                         eval 'tmp="$'"${sym}"'"'
15733                         echo "$tmp" | \
15734                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
15735                 done
15736                 ;;
15737         esac
15738 fi
15739
15740 : Finish up by extracting the .SH files
15741 case "$alldone" in
15742 exit)
15743         $rm -rf UU
15744         echo "Done."
15745         exit 0
15746         ;;
15747 cont)
15748         ;;
15749 '')
15750         dflt=''
15751         nostick=true
15752         $cat <<EOM
15753
15754 If you'd like to make any changes to the config.sh file before I begin
15755 to configure things, do it as a shell escape now (e.g. !vi config.sh).
15756
15757 EOM
15758         rp="Press return or use a shell escape to edit config.sh:"
15759         . UU/myread
15760         nostick=''
15761         case "$ans" in
15762         '') ;;
15763         *) : in case they cannot read
15764                 sh 1>&4 -c "$ans";;
15765         esac
15766         ;;
15767 esac
15768
15769 : if this fails, just run all the .SH files by hand
15770 . ./config.sh
15771
15772 echo " "
15773 exec 1>&4
15774 . ./UU/extract
15775
15776 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
15777         dflt=y
15778         case "$silent" in
15779         true) ;;
15780         *)
15781                 $cat <<EOM
15782
15783 Now you need to generate make dependencies by running "$make depend".
15784 You might prefer to run it in background: "$make depend > makedepend.out &"
15785 It can take a while, so you might not want to run it right now.
15786
15787 EOM
15788                 ;;
15789         esac
15790         rp="Run $make depend now?"
15791         . UU/myread
15792         case "$ans" in
15793         y*)
15794                 $make depend && echo "Now you must run a $make."
15795                 ;;
15796         *)
15797                 echo "You must run '$make depend' then '$make'."
15798                 ;;
15799         esac
15800 elif test -f [Mm]akefile; then
15801         echo " "
15802         echo "Now you must run a $make."
15803 else
15804         echo "Done."
15805 fi
15806
15807 if $test -f Policy.sh; then
15808     $cat <<EOM
15809
15810 If you compile $package on a different machine or from a different object
15811 directory, copy the Policy.sh file from this object directory to the
15812 new one before you run Configure -- this will help you with most of
15813 the policy defaults.
15814
15815 EOM
15816 fi
15817 if $test -f config.msg; then
15818     echo "Hmm.  I also noted the following information while running:"
15819     echo " "
15820     $cat config.msg >&4
15821     $rm -f config.msg
15822 fi
15823 $rm -f kit*isdone ark*isdone
15824 $rm -rf UU
15825
15826 : End of Configure
15827